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!