Loader Tutorial
This four-step tutorial shows how to load a module when the script is compiled and send it commands when the script is run. The module used in this exercise is Strftime
, a powerful date-formatting tool included in the standard Loader distribution.
1. Create the module loading code
Launch the LoaderWizard applet provided with the Loader distribution.
At the main menu, select the 'Create main script header' option and click 'OK'. LoaderWizard will display a list of all installed modules. (If the Strftime
module is not shown, check that it has been installed correctly according to the instructions provided in the Loader distribution.)
Select the Strftime
module from the list and click 'OK'. LoaderWizard will generate the AppleScript code for loading this module at compile-time and place it on your clipboard.
2. Create the main script
Create a new script in AppleScript Editor. Paste the newly generated module loading code at the top of the script. You script should now look like this:
----------------------------------------------------------------------
-- Module loading code (http://applemods.sourceforge.net)
property _Loader : AppleMods Loader -- Used to locate and load modules.
property _Strftime : missing value
on __load__(moduleLoader)
tell moduleLoader
set _Strftime to loadModule("Strftime")
end tell
end __load__
property _ : _Loader's initScript(me) -- Bind modules at compile-time.
----------------------------------------------------------------------
3. Add the main code
Add the code that will be executed when the script is run. For this exercise, we'll use StandardAdditions current date
command to get a date object, convert this date to a string using Strftime
's strftime
command, and finally display the string in a new TextEdit document. Here is the code:
on run
-- get the date
set d to current date
-- convert the date to a string
tell _Strftime
set s to strftime(d, "%Y-%m-%d %H:%M:%S")
end tell
-- display the string in a new TextEdit document
tell application "TextEdit"
activate
make new document with properties {text:s}
end tell
end run
4. Compile the script
Compile the script. In addition to compiling the rest of your code, the following will occur:
When this line is compiled:
property _Loader : AppleMods Loader
AppleScript will send the
AppleMods Loader
command to the AppleModsTools scripting addition to obtain a copy of theLoader
module. TheLoader
module is then stored in the_Loader
property for later use.When this line is compiled:
property _ : _Loader's initScript(me)
AppleScript will send an
initScript
command to Loader, passing a copy of your script as its parameter. Loader will then initialize your script by calling its__load__
handler, allowing your script to load theStrftime
module and store it in a property of its own,_Strftime
. TheStrftime
module will then remain bound to your script until/unless it is recompiled.
Congratulations! You have just written your first Loader-based script. Run it to check that it works: it should create a new TextEdit document containing the current date and time formatted to look something like this:
2010-05-29 19:03:08
Notes
In step 3, notice how module commands, like application commands, need to be directed to a specific object. Application commands are sent to an 'application' object, while module commands are sent to a script object (the loaded module).
You can send commands to modules in one of the three following ways, depending on your needs and/or tastes:
tell _Strftime set s to strftime(d, "%Y-%m-%d %H:%M:%S") end tell set s to strftime(d, "%Y-%m-%d %H:%M:%S") of _Strftime set s to _Strftime's strftime(d, "%Y-%m-%d %H:%M:%S")
The first approach sends all commands within the
tell _Strftime ... end tell
block to theStrftime
module. The other two approaches send only thestrftime
command itself to theStrftime
module, so which one you use is purely a matter of personal taste.