Speed deferring Omnifocus tasks

Summary: Here I share a couple of tricks, TextExpander snippets, as well AppleScripts and an Alfred 2 workflow that I use to defer tasks in Omnifocus.

Omnifocus is a great tool to track all your tasks. It implements the GTD approach and for me it is THE ultimate productivity tool. I handle all my projects (professional and private) in this incredible powerful piece of software. Hence, any improvement in my Omnifocus workflow improves my overall work.

Of my plate, into the future

When I go through my daily task list in Omnifocus a lot of times I simply move them to later in the day (e.g., after lunch or towards the evening when I have less energy) or to the next day. Some of these I move even to Sunday evening where I reconsider them when I plan my next week. I defer tasks also when I process my inbox. Here I want to share with you a couple of ways how you can do that really fast.

Omnifocus clever built-in parsing capabilities

Omnifocus itself is very clever about understanding shortcuts for your dates. For example, you can simply type:

  • "3" for the 3rd of the current month
  • "14 12" for the 14th of December of the current year
  • "1d" instead of looking up the date of tomorrow
  • "Sun" for next Sunday (Note that you need all three first letter of the week day)
  • "2w" to defer the task to the day two weeks from today
  • "1w+3" for 1 week and 3 days from today
  • "1m+2w+3" for 1 month and 2 weeks and 3 days from today.

You can use these in any date field (Defer Until, Due, Completed, Estimated and Repeat, see highlighted fields). However, in the "Repeat" and "Estimated" (blue) field the shortcut "1m" will be interpreted as 1 minute instead of 1 month.


TextExpander snippets for special dates

I have a number of special dates and times that I repeatedly use for deferring tasks. For example, if I don't want to deal with it right now, but I want to work on it later this day, I move it to the afternoon (i.e., today at 14:00). Other tasks I want to move to the evening as they don't need a lot of energy or I want them to do at home (i.e., today at 20:00). Other tasks I just want to move to tomorrow or maybe 2 or 3 days from now (either to the morning, afternoon or evening). Finally, sometimes I move whole projects to next Sunday evening. This is the time when I go through my Omnifocus list to plan for the next week. Until then they are out of my sight.

For all of them I have defined simple TextExpander snippets [download here], which are consistent in the way I call them, so it is easy for me to remember them.

shortcutexpands to
0d14today 14:00
0d2today 20:00
1d14 tomorrow 14:00
1d2 tomorrow 20:00
2d14 2 days 14:00
2d2 2 days 20:00
3d14 3 days 14:00
3d2 3 days 20:00
1w14 1 week 14:00
1w2 1 week 20:00
nsunnext Sunday 20:00

Moving task even faster with Alfred 2 and AppleScript

If you use TextExpander snippets you still have to move your mouse to the date field or you have to "tab" yourself all the way through. There is even a faster way by using AppleScript and Alfred 2. For that I have adapted the "defer-to-tomorrow" script from C-Command. In addition, I used a code snippet to find the date of next Sunday from Ben Waldie. I derived a small set of AppleScripts for my mostly used cases and packed them into an Alfred 2 workflow.

Here are the cases that I have implemented:

  • move task to today: This I use mostly to bring Omnifocus up to date, for example, when I have forgotten to clean up my todo list the day before. I use it also to move tasks from my inbox to my today list.
  • move task to today 14:00: I move tasks to the afternoon, for example, when I want to concentrate only on one or two projects in the morning.
  • move task to today 20:00: I use this mostly for moving tasks that I want to do later that day. For example, tasks that don't need high focus and/or little energy, or if I want to do them at home. Another way I use it is if I want to re-evaluate tasks at the evening.
  • move task to tomorrow: For tasks that I have to do as soon as possible, but I am not able to do them today anymore (e.g., too late, too tired, or an "emergency" has occurred and everything else has to move to tomorrow).
  • move task to tomorrow 14:00: I move tasks to tomorrow afternoon, when I know I am occupied in the morning next day.
  • move task to tomorrow 20:00: I use this to get tasks out of my sight and to re-evaluate them tomorrow evening to plan the day after tomorrow.
  • move it to next Sunday 20:00: I use this mostly for any task/project that I am not going to do this week, but I want them evaulate on Sunday evening, when I plan my upcoming week.

The idea is that you can go through your tasks with the arrow keys. If you want to move the currently highlighted task (or multiple tasks), you can choose from the previously described options. The corresponding shortcuts are define with arrow keys too. The idea is to use "⌥⌘" for deferring to today and "⌃⌥⌘" to tomorrow. The arrow keys are "↓" for morning, "→" for afternoon, and "↑" for evening.

shortcutdefer to
⌥ ⌘ ↓today (morning)
⌥ ⌘ →today 14:00 (afternoon)
⌥ ⌘ ↑today 18:00 (evening)
⌃⌥ ⌘ ↓tomorrow (morning)
⌃⌥ ⌘ →tomorrow 14:00 (afternoon)
⌃⌥ ⌘ ↑ tomorrow 18:00 (evening)
⌥ ⌘ ← next Sunday 14:00 (to plan my next week)
⌃⌥ ⌘ ← next Saturday (morning) – for private actions or to follow up tasks I was not able to do during the week.

You can download the latest version of the workflow and the changelog on the Alfred forum.

Tip: I change sometimes the "next Saturday" (⌃⌥⌘←) shortcut to a specific date, for example, to the first day after the vacations or the first day after an intense deadline. This is a fast and easy way to get unimportant tasks out of my way.

Adapting the code and workflow to your needs

You can very easily change the shortcuts to your needs. You simply have to open the preferences of Alfred (i.e., type Alfred in your Alfred window or press "⌘,"). Go to workflows and double click on the Hotkey window and type your shortcut.

If you want to change the day and/or time you have to open the AppleScript directly in the Alfred workflow.

You will have to change the function "myDeferDate" at the end of the script in the "Run Script" boxes. For example, if you want to defer the task 3 days into the future you would have to write

set day of date to ((date's day) + 3)

and if you want to change the time to 3 PM (which is 15:00 in a 24h mode) you would have to adapt the next line to

set time of date to (15 * 3600)

Next steps

  • What are your special defer cases?
  • Maybe you want to defer tasks to your lunch break?
  • Maybe Saturday morning is your special time slot for your private projects?

Work smart, be remarkable, and have a great day!