DekGenius.com
[ Team LiB ] Previous Section Next Section

2.5 Automatic Location

An automatic location can be thought of as a highly specialized type of script runner: it's a place where you can put a compiled script to have it run automatically when certain events take place.

On Mac OS X, if you want a script to run automatically when you start up, you could save it as an applet and list it in the Startup Items tab of the Accounts pane, in System Preferences. A compiled script wouldn't do here, though; it would be opened, not executed, because Startup Items is not a script runner.

A primary example of an automatic location on Mac OS X is the Finder, where you can associate scripts with particular folders by means of folder actions . Folder actions are a mechanism whereby scripts run if certain things happen, in the Finder, to the folder to which they are attached: that folder's window is opened, closed, or moved, or something is put into or removed from that folder. Naturally you don't have to respond when all of those things happen; your script will contain a specific handler for each type of action you want to respond to. (See http://www.apple.com/applescript/folder_actions/.)

Folder actions are described at length in Chapter 24, but here's a quick explanation of how to set one up. Create ~/Library/Scripts/Folder Action Scripts if it doesn't exist already. Create a script and save it as a compiled script file in that folder. Now go to a folder in the Finder and in its contextual menu choose Enable Folder Actions and then Attach a Folder Action, and in the Open dialog select your script. You can also manage the relationships between folders and scripts with the Folder Actions Setup application, which is in /Applications/AppleScript.

In this example, we'll make a folder automatically decode any .hqx files as they are put into it. Here's the script:

on adding folder items to ff after receiving L
        tell application "Finder"
                repeat with f in L
                        set n to the name of f
                        if n ends with ".hqx" then
                                tell application "StuffIt Expander" to expand f
                        end if
                end repeat
        end tell
        tell application "System Events"
                if process "StuffIt Expander" exists then
                        tell application "StuffIt Expander" to quit
                end if
        end tell
end adding folder items to

The handler, on adding folder items to, is automatically called when files are put into the folder to which this script is attached. The script runs when any file is put into that folder, but it has no effect except upon .hqx files. We examine the name of each file that is being added; if it ends in .hqx, we call StuffIt Expander to decode it. This leaves StuffIt Expander running, so at the end we look to see if StuffIt Expander is running, and if it is, we quit it. The folder thus functions as a kind of magic decoder drop box for .hqx files.

    [ Team LiB ] Previous Section Next Section