An unnecessary AppleScript to convert an OmniFocus task into a project

I hacked this up and then discovered via a tweet from Ken Case of the OmniGroup that it’s completely unnecessary, because you can convert a task into a project in OmniFocus simply by using the outlining outdent shortcut of Command-[. I thought I’d post it anyway, in case anyone finds it to be a useful example of scripting OmniFocus (which I found somewhat hard to get started with) and also because I feel bad about wasting time on writing this thing and publishing it somewhere kind of sort of justifies the effort. 🙂

Skype AppleScripts

These are some AppleScripts that I developed to make it easier to dial into a daily conference call. For this conference call, I dial into an 888 number and then I dial an 8 digit conference code and hit the ‘#’ key to enter a particular conference. Surprisingly, Skype doesn’t let you do this in a simple way by adding something like “,,12345678#” to the phone number, so I had to resort to scripting.

SkypeDialer.applescript provides core services that can be used by other AppleScripts, including SkypeDialerGUI. You should open SkypeDialer.applescript with AppleScript Editor and then save it as a stay-open application (File | Save As… and then for the File Format, select “Application” and in Options, make sure that “Stay Open” is checked). I saved mine in /Applications so I have /Applications/Skype Dialer.app.

SkypeDialerGUI can be used as a regular script or an application.

GitHub repository: skype-applescripts

Accessing OmniFocus data as a sqlite database

While playing with some OmniFocus AppleScripts last night, I realized that OmniFocus on the Mac uses a sqlite database (in addition to the zipped .xml files that it uses for synching). This is pretty interesting, because it could be a very convenient way to write tools that interact with OmniFocus (and use something like Python instead of AppleScript).

$ sqlite3 ~/Library/Caches/com.omnigroup.OmniFocus/OmniFocusDatabase2
SQLite version 3.7.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .mode column                                                                                                                         
sqlite> .headers on
sqlite> SELECT task.name AS task, context.name AS context
   ...> FROM task JOIN context ON task.context = context.persistentIdentifier
   ...> WHERE context.name LIKE '%email%' AND task.dateCompleted IS NULL;
task                                           context   
---------------------------------------------  ----------
Send Amanda new color photo via Cloud website  Email

Pretty cool. With a little Python and SQLAlchemy, I could probably create a nice little Python module for dealing with OmniFocus data.

Top 5 OmniFocus Applescripts

I rely on OmniFocus (both the Mac and iPhone versions) to maintain some semblance of order in my life.

I occasionally think of ideas for scripts to make OmniFocus for Mac fit better with my workflow, but I seldom have the time to actually sit down and write them, especially since I’m not particularly strong with AppleScript. I have a few OmniFocus AppleScripts installed (the main one I use is “Complete and Await Reply”), but I often think that I’m just scratching the surface of what’s possible.

So I was very glad tonight to stumble upon Sven Fechner’s excellent post, Top 5 OmniFocus Applescripts, which covers 5 particularly helpful AppleScripts. The only one that I’ve tried so far is the one that Sven calls “Quickly find a project” (the script itself is called FindProject07.scpt if you download it), but that alone was an awesome find for me as navigating quickly to a project with the keyboard is so much faster than mousing and scrolling for me.

He mentions several other scripts which look really useful and I hope to take a look at those soon. I have of course added a project to OmniFocus for that 🙂