A brief tour around Applescript and the Ruby-OSA bridge rb-appscript
Text of Scripting OS X with Applescript, without Applescript
Scripting OS X with Applescript, without Applescript.
With Ruby instead
Hello, my name is Matt
Why Applescript isn’t Applescript
• 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.
• Applescript looks a bit like this:
tell application "Finder" empty the trashend tell
• All pretty simple, right? Not quite. Check these two radically different lines out:
get words 1 thru 4 of "now is the winter of our discontent"
get text from word 1 to 4 of "now is the winter of our discontent"
Sort of like an API
• 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
Actually, mostly like IPC
• 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
It’s a query
• What’s actually going on is more like SQL...
• So, lets have a look...
The english-likeness monster
• 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?
Enter rb-appscript / Watch OSA surface from the depths
• 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