Visual Feedback from Apple Scripts

I am probably overly abusing Better Touch Tool. As an example, while reading a book in Full Screen mode with Skim, I want to create different types of annotations but I do not want to use the menu or even the keyboard to switch annotation types. I want to keep my hand on the trackpad and do what’s needed – including saving. The issue I saw is that when using gestures, I’m not quite sure whether they actually were executed. Adding today the “save” operation, I definitely needed a simple way to display a notification on whether the given action has been performed. Enter Growl. And a very simple Apple Script that displays, using Growl, what ever has been passed on the command line. The script is given below; here’s how it works.

First of all, we save the script into some location. For me, it is /pgm/scripts, but you can place it anywhere you want. Next, I want to have a setup similar to this in Better Touch Tool:

btt1

 

Notice those arrows beneath each primary action? So for example, a “TipTap Left”, in Skim, first of all executes “Command-1”, which is equivalent to choosing the “Text selection” mode through which I can select text to copy to the clipboard. Once I’ve defined that action, I click on the “Attach Additional Action” button, then start entering “exe” into the search field and click on the only option that remains:

btt2

This gives me the option to enter a command; it is also possible to just call any Apple Script through another execution option; yet that does not allow to pass command line parameters. That’s why I chose to run the Apple  Script from the command line:

btt3

 

The command line entered uses a parameter to pass any notification that you want to display. Once saved, what happens when running the gesture is that it first does whatever actual hotkey I had selected as primary action, and then shows the notification:

btt5

 

(*
  Very very simple script to show a message.
  
  For notifications, Growl is required.
*)

on run argv
	set msg to my joinList(argv, " ")
	
	tell application "System Events"
		set isGrowlRunning to (count of (every process whose bundle identifier is "com.Growl.GrowlHelperApp")) > 0
	end tell
	
	if isGrowlRunning then
		tell application id "com.Growl.GrowlHelperApp"
			-- Make a list of all the notification types 
			-- that this script will ever send:
			set the allNotificationsList to ¬
				{"Notification"}
			
			-- Make a list of the notifications 
			-- that will be enabled by default.      
			-- Those not enabled by default can be enabled later 
			-- in the 'Applications' tab of the growl prefpane.
			set the enabledNotificationsList to ¬
				{"Notification"}
			
			-- Register our script with growl.
			register as application ¬
				"Notifier" all notifications allNotificationsList ¬
				default notifications enabledNotificationsList ¬
				icon of application "Script Editor"
		end tell
	end if
	
	if isGrowlRunning then
		tell application id "com.Growl.GrowlHelperApp"
			notify with name ¬
				"Notification" title ¬
				"Notification" description ¬
				msg application name "Notifier"
		end tell
	end if
end run

to joinList(aList, delimiter)
	set retVal to ""
	set prevDelimiter to AppleScript's text item delimiters
	set AppleScript's text item delimiters to delimiter
	set retVal to aList as string
	set AppleScript's text item delimiters to prevDelimiter
	return retVal
end joinList
Share