I’ve been a huge fan of OmniFocus for years. A desire to play and inherent techie curiosity have made me try a wide range of other task management solutions, ranging from the simple to the complex, but OmniFocus is always the one I come back to. One of the great things about OmniFocus is that as much as it tries to adhere to the David Allen GTD Philosophy, it’s still powerful enough to be flexible for use in a myriad of other ways. I’ve spent years tweaking my workflow to get it down to something usable for me, and while I’ve eschewed the “purist” GTD approach in the process, I’ve managed to come up with a structure that mostly works for my needs.

However, I’m always looking on the side for ways in which I can improve the focus and consistency of my workflow, and one of the great things about the OmniFocus community is how many people are on the same page in that regard, sharing ideas and unique ways of approaching task management, producitivty, and focus. So it wasn’t surprising when I had a “eureka” moment on coming across Kourosh Dini’s recent post on Grouping Tasks by Session.

My current approach

I’ve been using a concept of a single “Hotlist” of tasks I want to action in the near future for some time, with a combination of weekly reviews, due dates, and flags to mark those actions as “doable” and leave everything else aside, but there are those days when my Hotlist is just cluttered to the point of affecting my focus. Contexts have never worked particularly well for me, as I work from home, so lines get blurred in that area (I can be at my “Desk” doing my home budget, or at my “Desk” writing a review for iLounge), and I’ve never found a mix of contexts that works particularly well for those purposes. I prefer to use focus areas as opposed to contexts, and then custom perspectives to take it from there.1

The problem, of course, is that there’s still room for stuff to get lost in the mix, especially that low priority stuff that I really do want to deal with when I have the time, but just doesn’t fit directly into my “Hotlist” model — it’s either too low priority to ever justify being flagged, or it’s medium-priority enough to make it onto the list, but too easily glossed over when more important things are on there as well (which is almost all the time). When I read Kourosh’s post, it suddenly clicked that putting all of these low-priority lists under “tickler” items in my Hotlist was the ideal way to accomplish this — keeping my Hotlist focused while ensuring that the other lower-priority “focused” lists don’t get too easily ignored.

Considered Tasks

Another element of secret sauce that makes this work is Kourosh’s discussion of the Considered Task. I had already implemented this in a lighter form — usually for single actions that need to be thought about — but combined wih the “Dashboard” concept it suddenly made even more sense. Lists of lower-priority tasks could be linked from a “Consider:” task, prompting me to at least think about tackling those lists on a regular basis, so I can bang off a couple of items when I have the time, but legitimately ignore the entire list and move on during days when things are too hectic, without having to mess around with adjusting defer dates or rescheduling things. Even with the keyboard shortcuts I’ve setup for deferring tasks2, there’s something still more logical to my workflow to “Consider” something as opposed to just pushing it off — one feels like success, while the other feels like failure, or at least procrastination.

Focus Areas

Each of these “focus areas” are created as custom perspectives that include all available tasks from several focused projects and folders. Examples include things like tech projects, household projects, and blogging. I also use “Consider:” and other suggested prefixes such as “Review:” and “Clean:” in front of tasks that can be used to ping me to take other actions, such as reviewing items I’ve saved in Pocket, or getting to inbox zero by the end of the week, or considering making an entry in my Day One journal.

I’m a “fingers-on-keyboard” kind of guy, however, so I generally prefer keyboard shortcuts for routine tasks over having to fiddle with a trackpad or mouse, so that prompted me to find a way to automate this process even further. Kourosh’s idea of linking to perspectives in the notes of each Dashboard task is great, but the clicking of that didn’t feel like “flow” to me, so I set about to find a more intuitive way. The result was a bit of time spent baking up an Applescript that I could link to a hotkey via Alfred or FastScripts.

Scripting Better Flow

The original idea began with just fetching a link out of the Note field, although this was complicated by it usually being a rich text link. It took more messing around than I care to admit to before I came across this post by amy in the OmniGroup forums, which of course pointed out a method that’s built into the OmniStyle Script Suite in the OmniFocus dictionary.3

The script of course evolved from there into not only being able to open other perspectives, but since it’s based on a URI handler, anything else that uses a URI call, such as web pages (http:// and https://), links to send emails to people (mailto://), and even placing phone calls via Handoff (tel://). This means that I can put somebody’s phone number (as a rich link) into an OmniFocus note, and then simply call them on my iPhone by selecting that task and pressing CMD+G.

Since some of my tasks also prompt me to open apps to do things — Day One for journalling, Mail for reviewing my Inbox or follow-up folders, Pocket for reviewing my reading list — I also wrote in a trick to open any named app simply by prefixing it with “App: “ so a note that says “App: Pocket” will automatically open the Pocket app when the appropriate hotkey is pressed.

The Script

Anyway, In the true spirit of the OmniFocus community, I figured I should share my results for anybody else who wants to play around with this. I’m far from a “pro” Applescripter, so feel more than free to point out anything here that you think could be improved, or just take the script and run with it yourself and do whatever you like. If you want to download it directly, you can get it here.

	(*
	
		Automatically open items linked from an OmniFocus Task Note.
		
		This script is designed to be assigned to a hotkey using an app such as FastScripts, Alfred, or Keyboard Maestro. To use it, simply select a task in OmniFocus and hit the assigned key. 
		
		If the task's note contains a URI of any kind, it will be automatically opened in the appropriate app. This is a handy way to open not only web pages, but other OmniFocus perspectives (using the omnifocus:///perspective/perspective-name URI), sending an email (mailto:// URI) or even placing calls via Handoff using the tel:// URI). 
		
		Since most apps on OS X don't offer URI handlers, however, an extra routine looks for a note beginning with the prefix "App:" followed by the name of an OS X app, as it appears in your Applications folder. This allows specific apps to be launched directly from a task in OmniFocus. 
	
	
		Original Script	Copyright © 2016 Jesse David Hollington (jesse@hollington.ca)
		Licensed under MIT License (http://www.opensource.org/licenses/mit-license.php)	
	*)
	
	
	# The name of your "Dashboard" perspective
	set dashboard_perspective to "Hotlist"
	
	# This just initializes some variables, since we may not set them otherwise.
	set target to ""
	set theItem to ""
		
	tell application "OmniFocus"
		
		# Get the currently selected item
		
		tell content of first document window of front document
			try
				set theItem to value of first item of (selected trees where class of its value is not item and class of its value is not folder)
				
				# Only do something if there's a note in the selected item
				
				if note of theItem is not "" then
					if value of attribute named "link" of style of paragraph 1 of note of theItem is not "" then
						set target to value of attribute named "link" of style of paragraph 1 of note of theItem
					else
						set target to note of theItem
					end if
				end if
			end try
		end tell
		
		# If NO item is selected, return to the Hotlist context. This provides an easy way to switch back and forth between the "dashboard" list using the same hotkey.
		
		if theItem is "" then tell the default document to tell the front document window to set perspective name to dashboard_perspective
		
	end tell
	
	# If the note begins with the word "App:" then we can assume anything after that is an application name to be launched or brought to the forefront. Anything that looks like a URI gets launched with the standard OS X "Open" command. Anything else in the note field is simply ignored. 
	
	if target begins with "App:" then
		set target to text 6 thru -1 of target as string
		tell application target to activate
	else if target contains "://" then
		do shell script "open " & target
	end if

  1. I’ve explained much of this in various posts on the OmniFocus discussion boards, so I won’t repeat it all here.

  2. A series of Applescripts, mapped to keyboard shortcuts with FastScripts, allow me to automatically “snooze” tasks to later in the day, the next day, the weekend, or next week. I’ve adapted them from Dan Byler’s original Snooze script

  3. Huge kudos are in order to The Omni Group for this one. Other methods for getting links from rich text in AppleScript are ugly, cumbersome and messy, to put it mildly.