Scripting the Mac with Python.notes

Wednesday, March 23, 2005

TITLE OF PAPER: Scripting the Mac with Python
URL OF PRESENTATION: http://toys.jacobian.org/presentations/2005/appscript/
PRESENTED BY: Jacob Kaplan-Moss
REPRESENTING:

CONFERENCE: PyCon 2005
DATE: March 23, 2005
LOCATION: 307

--------------------------------------------------------------------------
REAL-TIME NOTES / ANNOTATIONS OF THE PAPER:
{If you've contributed, add your name, e-mail & URL at the bottom}

Apple Events vs Apple Script
Apple Events is an eventing system

Sending Apple Events from Python

There will be an improved OSA component for Python
Raw events (Carbon.AE)
Use os.system('osascript -e ...') -- bad, but quick and fast
gensuitemodule
appscript - improves on gensuitemodule

[Emails from Address Book example]    
from appscript import *

ab = app('Address Book.app')
people = ab.people.filter(its.emails != [])
for person in people.get():
    emails = ', '.join(person.emails.value.get())
    print "%s: %s" % (person.name.get(), emails)

There's a difference between objects and object specifiers in applescript.

Running appscripts
    Must use pythonw - access to window manager

Getting Help

[Demo: Playing with the Finder]
    distinction between properties and elements
    Note: arrays in applescript start with 1

Translating AppleScript to appscript

[Automating things in OmniGraffle example]    
    keywords in applescript translate well into Python

If apps don't have scripting built in, you can use GUI Scripting

Important tips
    Dont' forget get(), set(), and use pythonw
    Use python whenever possible
    Do large OSA calls rather than lots of small ones
    Use filter

Q:  What were the difficulties that you encounter with 0 vs 1 based subscripting
A:  Either do the translation in the bridge, or in the mind of the programmer
    Targeting applescript users instead of python users



--------------------------------------------------------------------------
REFERENCES: {as documents / sites are referenced add them below}


--------------------------------------------------------------------------
QUOTES:



--------------------------------------------------------------------------
CONTRIBUTORS: {add your name, e-mail address and URL below}
Ted Leung <twl@sauria.com>
Linden Wright <lwright@mac.com>

--------------------------------------------------------------------------
E-MAIL BOUNCEBACK: {add your e-mail address separated by commas }



--------------------------------------------------------------------------
NOTES ON / KEY TO THIS TEMPLATE:
A headline (like a field in a database) will be CAPITALISED
    This differentiates from the text that follows
A variable that you can change will be surrounded by _underscores_
    Spaces in variables are also replaced with under_scores
    This allows people to select the whole variable with a simple double-click
A tool-tip is lower case and surrounded by {curly brackets / parentheses}
    These supply helpful contextual information.

--------------------------------------------------------------------------
Copyright shared between all the participants unless otherwise stated...