[SVN] Passing variables to osascript, or other workaround?
Charilaos Skiadas
cskiadas at uchicago.edu
Wed May 11 22:53:15 UTC 2005
On May 11, 2005, at 4:55 PM, Allan Odgaard wrote:
> On May 11, 2005, at 22:58, Charilaos Skiadas wrote:
>
>> My problem basically is: how can I pass a list of strings to
>> osascript, so that it can perceive them as a list, and so that
>> "choose from list" would work as expected. I am clearly
>> misundestanding something. The script I was trying is:
>
> I think the problem was something with the list containing illegal
> (according to AS) characters, probably it had \ in front of the quotes
> (looking at your pattern).
Yeah, I had it without the \ in front, but that didn't go too well
either.
> I took the library to use perl instead of sed, because it has an IMHO
> much better regex grammar (and more capabilities), I also changed
> stdin for the command to be “entire document” so grep can just work on
> that instead of TM_FILEPATH, plus let awk write result to stdout
> directly rather than go through a variable:
>
> list=`grep '\\label{.*}'|perl -pe 's/.*\\label\{(.*?)\}(.*)\n/"$1 :
> $2",/'`
> res=`osascript <<EOF
> tell application "System Events"
> activate
> choose from list { ${list:0:${#list}-1} }
> end tell
> EOF`
> osascript -e 'tell app "TextMate" to activate' &>/dev/null &
> awk <<<$res '{ printf("%s", $1) }'
Neat! It works great if I remove the ': $2' part above. If I have it in
though, it produces:
200:201: syntax error: Expected “"” but found unknown token. (-2741)
The part matched by $2 is basically the rest of the line where the
\label occurs, so that the user has a context and can figure out better
what label they want. So it is a whole LaTeX line, with lots of
unescaped \'s. So I added the line:
list="${list//\\\\/\\\\}"
above the res=`osascript...
Now it works properly, but it took unacceptably long, I'm guessing
because the lines might be pretty long. Is there any way to speed it
up? I tried adding a line:
list="${list:0:80}" before the above assignment to show only a
reasonable part of the rest of the line (btw, can I combine them in one
step? the obvious way didn't work.) but that took me back to the
previous error. Is there something else I might need to escape, maybe
braces or something? (i.e. when I cut at the 80 characters, maybe I've
left some braces unended?)
For now I'll remove the ': $2' part and add it to the repository.
In terms of scope, this is to be used inside a \ref{} or an \eqref{}
(can't remember if there are others). would the proper scope be
text.latex, declaration.ref-or-label.latex or
keyword.control.ref-or-label.latex ?
> Btw: questions like these should be sent to the normal user list.
Sorry. Will keep that in mind for next time.
Haris
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/enriched
Size: 2733 bytes
Desc: not available
URL: <http://lists.macromates.com/textmate-dev/attachments/20050511/fae291a9/attachment.bin>
More information about the textmate-dev
mailing list