5. Reprocessed.org »
• Applescript is Apple’s system-level inter-process
scripting system
• It’s actually made of two parts:
• Applescript, the language
• OSA – Open Scripting Architecture – which is the
plumbing
• Generally, when people ask, ‘is it Applescriptable?’,
they actually mean, ‘does it accept Apple Events
and expose a terminology dictionary for OSA
clients to use?’ Clearly, the first is shorter.
6. Reprocessed.org »
• Applescript looks a bit like this:
tell application quot;Finderquot;
empty the trash
end tell
• All pretty simple, right? Not quite. Check these two
radically different lines out:
get words 1 thru 4 of quot;now is the winter of our
discontentquot;
get text from word 1 to 4 of quot;now is the winter
of our discontentquot;
8. Reprocessed.org »
• You get a way to stitch all sorts of things and apps
on your Mac together in all sorts of interesting
ways
• This is so useful that the publishing industry relies
on Applescript to tie together apps and processes
into the editorial workflow stuff needed to get
magazines and newspapers out the door.
• You can do the stitching together of lots of separate
things in a single script
10. Reprocessed.org »
• Under the hood, its OSA which makes all this
possible. OSA allows apps to send Apple Events to
each other, and defines standard ways to interpret
the results, so you can send data types around the
place
• When you iterate across things in a script, you’re
not really iterating across things in memory: Script
Editor (or whatever script running OSA runtime
you’re using) is firing Apple Events around the
place and interpreting the results
15. Reprocessed.org »
• As we’ve already seen, the english-likeness of
Applescript the language gets complex. Particularly
for programmers.
• Multi-word tokens are just plain odd, and allowing
apps and scripting additions to essentially redefine
parts of the language syntax doesn’t help much
• John Gruber goes into this at great length here:
http://daringfireball.net/2005/09/
englishlikeness_monster
• So, is there a way to access the good stuff without
the gut-wrenching terror?
17. Reprocessed.org »
• Since Applescript is layered on top of OSA, in
theory you could just use a different OSA runtime.
• For once, theory ≈ practice...
• There are low-level Apple Event modules for most
dynamic languages, and for Python and Ruby,
Hamish Sanderson has given us Appscript, which
gives us a nice abstraction layer over the guts which
actually makes use of those terminology
dictionaries...
• See http://appscript.sourceforge.net/ for the full
story
18. Reprocessed.org »
• Appscript takes away the pain of english-likeness
by giving us a consistent interface and making a lot
of the voodoo implicit stuff explicit
• Believe me, you’ll appreciate this.
• Appscript code looks a bit like this:
app('TextEdit').documents['Read Me'].
paragraphs[1].get()
• As opposed to:
tell application quot;TextEditquot;
get paragraph 1 of document quot;Read Mequot;
end tell