« The power of electroluminescence... at my command | Main | We're deterministic »

GTD with Applescript, OmniOutliner, and Quicksilver

I've hacking around with OmniOutliner and Quicksilver, automating my system. I've developed some Applescript that makes my life immeasurably easier:

When I want to leave myself a note, I invoke Quicksilver and press '.' to call up a text entry field. My default action for text entries is my "GTD Inbox" script, which resides in ~/Library/Application\ Support/Quicksilver/Actions directory. It is reproduced below:

using terms from application \"Quicksilver\"
	on process text theText
		tell application \"OmniOutliner Professional\"
			set theDocument to document \"GTD\"
			set theTopic to \"@INBOX\"
			repeat with theRow in rows of theDocument
				if topic of theRow is theTopic then
					exit repeat
				end if
			end repeat
			set newRow to make child at after the last child of theRow
			set topic of newRow to theText
		end tell
	end process text
end using terms from

To be clear, "@INBOX" is the name of a toplevel row in my GTD.oo3 document.

I love using OmniOutliner to keep track of all the things I'm not going to remember. Its convenient because I'm in front of my computer a large part of the day. However, if I can anticipate an occasion where my computer won't be close at hand, I can still have access to important information.

In OmniOutliner, I select a subset of my OmniOutliner outline. I then choose the "SMS Eric" script from the scripts menu. The rows of my subset needn't be adjacent, or even of the same depth. The text of these rows is flattened to a single newline-separated string and sent (via Apple Mail) to my SMS enabled phone. I use the following script (located in ~/Library/Application\ Support/OmniOutliner\ 3/Scripts):

tell application \"OmniOutliner Professional\"
	set theText to \"\"
	set theSelectedRows to selected rows of front document
	repeat with theRow in theSelectedRows
		set theText to theText & the text of cell 2 of theRow & \"
\"
	end repeat
	tell application \"Mail\"
		set thePhoneNumber to \"1234567890\"
		set theRecipient to \"Eric\"
		set newMessage to make new outgoing message with properties {subject:\"\", content:theText & return & return}
		tell newMessage
			set visible to true
			make new to recipient at end of to recipients with properties {name:theRecipient & \" SMS\", address:thePhoneNumber & \"@tmomail.net\"}
			send
		end tell
	end tell
end tell

Useful.

Finally, I occasionally want to "short-circuit" the outliner completely and send a quick reminder directly to my phone (or to someone else's phone for that matter). I invoke the following script in the same way as I invoke the first script:

using terms from application \"Quicksilver\"
	on process text theText
		tell application \"Mail\"
			set thePhoneNumber to \"1234567890\"
			set theRecipient to \"Eric\"
			set newMessage to make new outgoing message with properties {subject:\"\", content:theText & return & return}
			tell newMessage
				set visible to true
				make new to recipient at end of to recipients with properties {name:theRecipient & \" SMS\", address:thePhoneNumber & \"@tmomail.net\"}
				send
			end tell
		end tell
	end process text
end using terms from

These are my first and only Applescripts ever. I'm become enamored of the possibilities of Applescript, especially as related to automating Quicksilver. I've purchased the ORA book, but I haven't received it yet... I'm sure there are more general and/or efficient and/or elegant ways of doing the above. If you have any suggestions, please let me know!

TrackBack

TrackBack URL for this entry:
http://www.exothermia.net/comcafcon/mt-tb.cgi/21

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)