TweetFollow Us on Twitter

Fun With AppleScript

Volume Number: 20 (2004)
Issue Number: 1
Column Tag: Programming

Getting Started

by Dave Mark

Fun With AppleScript

A few weeks ago, I read an article talking about the changes to AppleScript introduced with the release of Panther. I've always been a big AppleScript fan, but this article really piqued my interest. I've been promising myself to spend some quality time digging into dictionaries, scripting environments, and especially using Interface Builder and AppleScript Studio to add Cocoa elements to AppleScript, and now that I've had enough quality play-time, I wanted to start writing about all this cool stuff.

Start by Setting Up Script Menu

Before we start playing with AppleScript itself, it is worthwhile taking a minute to install Script Menu, the little script icon that appears on the right side of the menu bar and gives you access to a wide range of AppleScripts.

Navigate over to Applications/AppleScript/ and double-click on the script Install Script Menu. The Script Menu icon should appear in your menu bar. My Script Menu is shown in Figure 1. The Script Menu lists scripts from three different places on your hard drive. Local Scripts (also called Library Scripts) are found in the directory /Library/Scripts. User Scripts are found in your home directory, inside /Users/<user name>/Library/Scripts/. And, finally, Application Scripts are found within your User Scripts folder, in a subfolder called /Applications/<appname>/, where <appname> is a folder with the exact same name as the application the scripts are written for.


Figure 1. The Script Menu's menu.

Let's take a look at this in action. Figure 1 shows the vanilla install of Script Menu. The first item, Open Scripts Folder, opens your User Scripts folder in a Finder window. Remember, User Scripts are the scripts you install in your home area.

The second menu item, Hide Library Scripts, removes the Library Scripts from the Script Menu.

Next comes a separator and the list of all the Library Scripts. In this case, all the scripts are divided into subfolders and so appear in the Script Menu divided into submenus.

Add in a User and Application Script

The screen shot in Figure 1 shows Script Menu as it appears out of the box. Let's add a User Script to the menu. Go into the directory /Applications/AppleScript/ and launch the application Script Editor. Select New from the File menu, type in this simple script:

tell application "Finder"
	activate
end tell

Now select Save from the File menu and save the script in the directory /Users/xxx/Library/Scripts/, where xxx is your user name. I saved my script under the name Dave's Test Script.

A quick note about terminology: The directory /Users/xxx/ is called your home directory and can be represented in the Unix world by the tilde character (~). For example, if I typed in the command:

ls /Users/davemark/

it would be exactly the same as typing:

ls ~

You can also use ~xxx to refer to another user's home directory. So this is also equivalent way to refer to davemark's home directory:

ls ~davemark

And this is one way to list the contents of my User Scripts folder:

ls ~davemark/Library/Scripts

As soon as you save the script, it should appear in your Script Menu. Make sure you are still in Script Editor, then open the Script Menu, select your script (it should be at the very bottom), and watch what happens. Your script is executed, and it does what it is supposed to do. Namely, it tells the Finder to activate, to come to the front. And that is exactly what should happen.

Note that you could have created a folder in your ~/Library/Scripts/ folder and placed the script inside that folder. In that case, the folder would have appeared in the Script Menu as a submenu and the script would have appeared as an item inside that submenu. Try it!

Now for some ultimate coolness! Go back into Script Editor and close the window of the script you just created. Next, hold down the option key, click on the Script Menu and select your script again. Instead of running the script, Mac OS X opens the script in Script Editor. An excellent feature!

Your next step is to add an application-specific folder to your User Script directory. The idea here is to have a directory for all your scripted applications and have the scripts for that app appear in the Script Menu whenever that application is front most. You'll see what I mean in a minute.

Start off by creating a folder called Applications in your ~/Library/Scripts/ folder. Within that folder, create a folder with the exact name of one of your applications. For example, create a folder named Finder. Note that spelling is critical or this won't work. Now go into Script Editor and create this script:

tell application "Script Editor"
	activate
end tell

Save the script in the ~/Library/Scripts/Applications/Finder folder. I saved my script under the name Dave's Finder Script. Once the script is saved, click on the Script Menu. If you are in the Finder, your Finder scripts will appear at the bottom of the menu. If you are in another app, the Finder scripts will be replaced by the scripts (if any) for that app.

Figure 2 shows my Script Menu, as selected from within the Finder. Note that the User Script I created, Dave's Script, is second from the bottom, and the Finder script is at the very bottom. When I run Dave's Script, the Finder comes to the front. Then, within the Finder, when I run Dave's Finder Script, Script Editor comes to the front. Try this yourself.


Figure 2. The Script Menu with the addition of my test script from my User Scripts folder and my Finder

Script from my Applications/Finder/ folder.

Exploring the Dictionary

Now that you have a home for all your scripts, let's start exploring AppleScript itself. One place to start is with an application's dictionary. Each application's dictionary entry gives specific information about the classes and commands that the application supports.

Launch Script Editor. If it is not already open, open the Library window by selecting Library from the Window menu. Figure 3 shows my Script Editor library.


Figure 3. Script Editor's Library window.

Double-click on the Finder entry in the Library window. The window shown in Figure 4 will appear. There is a lot of information to digest in this window. Spend a few minutes opening the various disclosure triangles (I've opened some of them in Figure 4) and clicking on the various commands and classes in the left scrolling pane.

If you've ever done any pre-OS X Mac development, you've likely encountered the concept of Apple events. Want an app to quit? Send it a quit Apple event. Want an app to open or print a file? Send it an open or print Apple event. AppleScript is basically a sophisticated language you can use to control a scriptable application by sending it events and scripting the results.


Figure 4. The Finder's dictionary, showing the application class in the Finder Basics suite.

The most basic set of commands are organized into something called the Standard Suite. Most applications support the Standard Suite. The Standard Suite commands are close, count, data size, delete, duplicate, exists, make, move, open, print, quit, and select.

Many applications add their own sets of commands to the Standard Suite. For example, the Finder adds in a set of classes and commands called Finder Basics and another called Finder items. The main pain of Figure 4 shows the details of the application class in the Finder Basics suite. Notice that the list is divided into Elements and Properties. Elements are the objects contained in a class, while properties are more like preferences - unique within a class. Elements can be plural while a property is usually singular. A typical Finder element might be the list of items on the desktop. A typical Finder property might be the current selection.

Let's play with this a bit.

Create a new script and type in this code:

tell application "Finder"
	get home
end tell

When you run this script, Script Editor should display results in its Result pane. My results are shown in Figure 5. Notice that home is a Finder property containing the home directory. If you look towards the bottom of Figure 4, you'll see that it is also marked [r/o], meaning the property is read-only.


Figure 5. A simple Finder script, with the results shown in the Result pane.

Now edit the script like so:

tell application "Finder"
	get items of home
end tell

While the first script gave you the value of the home property, this script returns the list of items in the home folder. Here's the result I got when I ran this script:

{folder "Desktop" of folder "davemark" of folder "Users" of startup disk of 
   application "Finder", folder "Documents" of folder "davemark" of folder "Users" of startup 
   disk of application "Finder", folder "Library" of folder "davemark" of folder "Users" of 
   startup disk of application "Finder", folder "Magazines" of folder "davemark" of folder 
   "Users" of startup disk of application "Finder", folder "Movies" of folder "davemark" of 
   folder "Users" of startup disk of application "Finder", folder "Music" of folder "davemark" 
   of folder "Users" of startup disk of application "Finder", folder "Pictures" of folder 
   "davemark" of folder "Users" of startup disk of application "Finder", folder "Public" of 
   folder "davemark" of folder "Users" of startup disk of application "Finder", folder "Sites" 
   of folder "davemark" of folder "Users" of startup disk of application "Finder"}

As you can see, this is a comma-delimited list, wrapped in curly braces. This kind of result is typical in AppleScript. As you can see in the top of Figure 4, an item element can be specified "by numeric index, before/after another element, by name, as a range of elements, satisfying a test." For example, we can refer to item 3, as in this script:

tell application "Finder"
	get item 3 of home
end tell

As you might expect, here's the result of this script:

folder "Library" of folder "davemark" of folder 
   "Users" of startup disk of application "Finder"

Till Next Month...

There is a ton of cool stuff to play with here. In the Finder dictionary, look in the Finder items suite, at the item class to learn everything you could possibly want to know about items. For example, you'll see a bounds property, which describes the bounding rectangle of the specified item. You might extend the script above to:

tell application "Finder"
	get bounds of item 3 of home
end tell

You get the idea. The dictionary is an incredibly powerful tool for unlocking the mysteries of AppleScript. Play more. I'll be back next month with more fun stuff! J


Dave Mark is a long-time Mac developer and author and has written a number of books on Macintosh development, including Learn C on the Macintosh, Learn C++ on the Macintosh, and The Macintosh Programming Primer series. Be sure to check out Dave's web site at http://www.spiderworks.com.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

VirtualBox 5.1.10 - x86 virtualization s...
VirtualBox is a family of powerful x86 virtualization products for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers... Read more
Pixa 1.1.9 - Quickly and easily organize...
Pixa is an image-organizing application. The new app functions well, is easy to use, and helps people organize their images quickly and easily on their computers. For those who prefer not to use the... Read more
Civilization VI 1.0.1 - Next iteration o...
Sid Meier’s Civilization VI is the next entry in the popular Civilization franchise. Originally created by legendary game designer Sid Meier, Civilization is a strategy game in which you attempt to... Read more
Google Chrome 55.0.2883.75 - Modern and...
Google Chrome is a Web browser by Google, created to be a modern platform for Web pages and applications. It utilizes very fast loading of Web pages and has a V8 engine, which is a custom built... Read more
Chromium 55.0.2883.75 - Fast and stable...
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. Version 55.0.2883.75: Security fixes: High CVE-2016... Read more
Luminar 1.0.2 - Powerful, adaptive, conf...
Luminar is the new full-featured image editor that adapts to the way you edit photos. Over 300 essential tools to fix, edit, and enhance your photos with comfort. The future of photo editing is here... Read more
Slack 2.3.3 - Collaborative communicatio...
Slack is a collaborative communication app that simplifies real-time messaging, archiving, and search for modern working teams. Version 2.3.3: Fixed window zoom jumping back-and-forth OS X 10.9... Read more
WhatRoute 2.0.10 - Geographically trace...
WhatRoute is designed to find the names of all the routers an IP packet passes through on its way from your Mac to a destination host. It also measures the round-trip time from your Mac to the router... Read more
Luminar 1.0.2 - Powerful, adaptive, conf...
Luminar is the new full-featured image editor that adapts to the way you edit photos. Over 300 essential tools to fix, edit, and enhance your photos with comfort. The future of photo editing is here... Read more
WhatRoute 2.0.10 - Geographically trace...
WhatRoute is designed to find the names of all the routers an IP packet passes through on its way from your Mac to a destination host. It also measures the round-trip time from your Mac to the router... Read more

Latest Forum Discussions

See All

Amateur Surgeon 4 Guide: Become the worl...
It's time to wield your trusty pizza cutter again, as Amateur Surgeon has returned with a whole fresh set of challenges (and some old, familiar ones, too). Starting anew isn't easy, especially when all you have at your disposal is a lighter, the... | Read more »
Le Parker: Sous Chef Extraordinaire (Ga...
Le Parker: Sous Chef Extraordinaire 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: | Read more »
Telltale Games really is working on a Gu...
Telltale Games' next episodic adventure is indeed Guardians of the Galaxy. A document tied to the voice actors strike suggested that the project was in the work, but now we have direct confirmation following an announcement at the Game Awards that... | Read more »
Amateur Surgeon returns to iOS and Andro...
Amateur Surgeon and its two sequels disappeared from the App Store some time and it was sad days for all. But now, just in time for the holidays, the Adult Swim favorite makes its joyous return in the shape of Amateur Surgeon 4, a remake with... | Read more »
The best board games on mobile
Sometimes you need to ditch all of the high speed, high action games in favor of something a little more traditional. If you don't feel like parting ways from your mobile device, though, there are still plenty of ways to get that old-school fix.... | Read more »
The best Facebook Messenger Instant Game...
Facebook's new Instant Games is now here, meaning you can play games with your friends directly via Facebook. It's a fun new way to connect with friends, of course, but it's also proving to be a solid gaming experience in its own right, with a... | Read more »
You can now play game's on Facebook...
Facebook launched its new Instant Games platform in an exciting new attempt to engage its user base. As a result, you can now play a number of different games directly through Facebook Messenger. All of these games run with HTML5, meaning you play... | Read more »
Apollo Justice Ace Attorney (Games)
Apollo Justice Ace Attorney 1.00.00 Device: iOS Universal Category: Games Price: $.99, Version: 1.00.00 (iTunes) Description: Court Is Back In Session Star as rookie defense attorney, Apollo Justice, as he visits crime scenes,... | Read more »
KORG iWAVESTATION (Music)
KORG iWAVESTATION 1.0 Device: iOS Universal Category: Music Price: $19.99, Version: 1.0 (iTunes) Description: A revolutionary new world of sound.The Wave Sequence Synthesizer for iPad - KORG iWAVESTATION | Read more »
Don't Grind Guide: Tips for becomin...
Don’t Grind is a surprising, derpy little one touch game with fun hand-drawn graphics. The goal is simple -- get the high score without being chopped to bits. That can be tough when you’re not used to the game, and that’s compounded by the fact... | Read more »

Price Scanner via MacPrices.net

13-inch Silver Touch Bar MacBook Pro in stock...
Amazon has the new 2016 13″ 2.9GHz/256GB Silver Touch Bar MacBook Pro (MLVP2LL/A) in stock today and on sale for $1749 including free shipping. That’s $50 off MSRP, and it’s the lowest price... Read more
Parallels Toolbox 1.3 for Mac Offers 25 Singl...
Parallels has launched Parallels Toolbox 1.3 for Mac, an upgrade that adds five new utilities to the stand-alone application which was released in August and is available exclusively online at http... Read more
OWC Mercury Elite Pro Dual mini Ultra-Portabl...
OWC has introduced the new OWC Mercury Elite Pro Dual mini, a powerful yet ultra-portable dual-drive RAID solution. The new Mercury Elite Pro Dual mini packs phenomenal performance into a small... Read more
Clearance 13-inch Retina MacBook Pros availab...
B&H Photo has clearance 2015 13″ Retina Apple MacBook Pros available for up to $200 off original MSRP. Shipping is free, and B&H charges NY tax only: - 13″ 2.7GHz/128GB Retina MacBook Pro: $... Read more
Roundup of 2016 13-inch 2.0GHz MacBook Pro sa...
B&H has the non-Touch Bar 13″ MacBook Pros in stock today for $50-$100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 2.0GHz MacBook Pro Space Gray (MLL42LL/A): $1449 $... Read more
New 13-inch 2.0GHz Space Gray MacBook Pro in...
Adorama has the new 13″ 2.0GHz Space Gray MacBook Pro (non-Touch Bar, MLL42LL/A) in stock for $1499 including a free 3-year AppleCare Protection Plan. Shipping is free, and Adorama charges sales tax... Read more
Finnair Adopts iOS Enterprise iPad Apps from...
Finnair and IBM have announced a first-of-its-kind agreement to utilize iOS enterprise apps from IBM to support the airline’s overall digital transformation. Finnair is focused on Asia-Europe traffic... Read more
Tech21 Launches Evo Go iPhone 7 Case Availabl...
Tech21 has announced the launch of the Evo Go case for Apple iPhone 7 and iPhone 7 Plus, exclusively at T-Mobile. Available online and at participating T-Mobile stores nationwide, Evo Go cases start... Read more
Apple Turns (RED) with More Ways to Join the...
In recognition of World AIDS Day, Apple is offering more ways than ever for customers to join (RED) in its mission to create an AIDS-free generation. Apple is the worlds largest corporate contributor... Read more
Deals on new 15-inch Touch Bar MacBook Pros,...
B&H Photo has new 2016 Apple 15″ Touch Bar MacBook Pro models in stock today with some available for $50 off MSRP, each including free shipping plus NY sales tax only: - 15″ 2.7GHz Touch Bar... Read more

Jobs Board

*Apple* Brand Ambassador (Macy's) - The...
…(T-ROC), is proud of its unprecedented relationship with our partner and client, APPLE ,in bringing amazing" APPLE ADVOCATES"to "non" Apple store locations. Read more
US- *Apple* Store Leader Program - Apple (Un...
…Summary Learn and grow as you explore the art of leadership at the Apple Store. You'll master our retail business inside and out through training, hands-on Read more
*Apple* Retail - Multiple Positions- White P...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
Automotive Detailer - *Apple* Used Autos -...
We are currently conductinginterviews and will be accepting applications for a part-time detailer. Apple Used Autos is a great place to work andstart a career. We Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.