Archive for the ‘omnifocus’ Category
OmniFocus command for Dial2Do
October 23rd, 2008
One of the things that made Jott easier for me to use than Dial2Do was that Jott needed one less step to add a task to OmniFocus1. Jott starts by asking “Who do do want to Jott?” and after accepting my answer of “Focus,” I can start recording my task. Dial2Do, on the other hand, starts by asking “What would you like to do?” I have to answer “Email” and then wait for another prompt before telling it that I want to email “Focus.” A small thing, but the extra step was a barrier to my use of Dial2Do. After all, I have OmniFocus on my iPhone and can enter tasks directly into it; the reason I’d use Dial2Do instead is speed. The delay associated with the extra step reduced the value of Dial2Do. (Jott’s value was reduced when it went out of beta and started charging for emails.)
As of a few days ago, Dial2Do added a new feature that allows it to work as smoothly as Jott. You can add new commands that make emailing a particular address a one-step operation. Here (apart from the fake address) is the form I filled out to create a new “focus” command:
Now when I answer “focus” to Dial2Do’s “What would you like to do?”, I can start dictating without having to answer another question. The transcribed message is sent to my “+omnifocus” address, and a combination of a Mail filter and an AppleScript (described here) puts it into my OmniFocus Inbox.
The Icon URL I gave is http://www.omnigroup.com/images/icons/128/omnifocus.png. This puts the OmniFocus icon with the “focus” command on my Dial2Do homepage—not something that’s particularly valuable to me, as I don’t go to the Dial2Do homepage much, but a nice touch.
I imagine that if you used the Dial2Do homepage, and you wanted to set up commands for emailing people, having their photos on the homepage would be helpful.
Dial2Do and OmniFocus
August 25th, 2008
The comments in this post at Lifehacker led me to look into Dial2Do, a service similar to Jott that transcribes your voice messages and emails them to you. Unlike Jott, Dial2Do still sends emails for free, so I decided to give it a try and rework my Jott2OmniFocus AppleScript to handle emails from Dial2Do.
The setup at Dial2Do is basically the same as that at Jott: I created a contact with the name “focus” and an email address of the form “johndoe+omnifocus@gmail.com.” I modified the Mail Rule that handles addresses sent to the “+omnifocus” address. The rule, which used to run the Jott2OmniFocus script, now runs a similar script called Dial2Do2OmniFocus. Both scripts are slightly reworked versions of the script supplied with OmniFocus to handle emailed tasks.
Here’s Dial2Do2OmniFocus:
1: -- Copyright 2007 The Omni Group. All rights reserved.
2: --
3: -- $Header: svn+ssh://source.omnigroup.com/Source/svn/Omni/branches/OmniFocus/1.x/OmniGroup/Applications/Focus/App/Preferences/MailAction.applescript 100519 2008-05-15 21:12:32Z bungi $
4:
5: using terms from application "Mail"
6: -- Trims "foo <foo@bar.com>" down to "foo@bar.com"
7: on trim_address(theAddress)
8: try
9: set AppleScript's text item delimiters to "<"
10: set WithoutPrefix to item 2 of theAddress's text items
11: set AppleScript's text item delimiters to ">"
12: set MyResult to item 1 of WithoutPrefix's text items
13: on error
14: set MyResult to theAddress
15: end try
16: set AppleScript's text item delimiters to {""} --> restore delimiters to default value
17: return MyResult
18: end trim_address
19:
20:
21: on process_message(theMessage)
22: tell application "OmniFocus"
23: log "OmniFocus calling process_message in Dial2Do2OmniFocus script"
24: end tell
25: -- Allow the user to type in the full sender address in case our trimming logic doesn't handle the address they are using.
26: set theSender to sender of theMessage
27: set trimmedSender to my trim_address(theSender)
28: tell application "OmniFocus"
29: set AllowedSender to allowed mail senders
30: if AllowedSender does not contain trimmedSender and AllowedSender does not contain theSender then
31: beep
32: return
33: end if
34: end tell
35:
36: set messageText to the content of theMessage as text
37: set theTask to paragraph 1 of messageText
38: tell application "OmniFocus"
39: tell default document
40: parse tasks with transport text theTask without as single task
41: end tell
42: end tell
43: end process_message
44:
45: on perform mail action with messages theMessages
46: try
47: set theMessageCount to count of theMessages
48: repeat with theMessageIndex from 1 to theMessageCount
49: my process_message(item theMessageIndex of theMessages)
50: end repeat
51: on error m number n
52: tell application "OmniFocus"
53: log "Exception in Mail action: (" & n & ") " & m
54: end tell
55: end try
56: end perform mail action with messages
57: end using terms from
There are only two differences between this script and the Jott version:
- The log command in Line 23 now indicates that the OmniFocus task is coming from Dial2Do2OmniFocus.
- The task text is taken from the first paragraph of the email body (Line 37) instead of the third. Dial2Do puts the meat at the top of the message instead of in the middle the way Jott does.
That’s it! With those two small changes, Dial2Do messages sent to “focus” will show up in my OmniFocus Inbox for further processing.
If this post seems short on details, it’s because the steps for setting up Dial2Do for OmniFocus are almost exactly the same as those for setting up Jott for OmniFocus. See my Jott and OmniFocus post to fill in the gaps.
Jott out of beta—goodbye free email
August 20th, 2008
If you haven’t heard already, Jott is now out of beta and will begin charging for some of its services. Most important for me, the emailing of Jotts will be part of the fee-based services, which means I either have to pay $4/month or give up my Jott to OmniFocus system.
The new Jott will have 3 tiers of service:
- free with ads: online notes readable at jott.com; posting to Twitter and blogs; 15 second message limit
- $3.95 per month: online notes; posting to Twitter, blogs, Google Calendar, Remember The Milk, Sandy, and other productivity web sites; email; text messaging; Jott for Outlook; 15 second message limit
- $12.95 per month: online notes; posting to Twitter, blogs, Google Calendar, Remember The Milk, Ask Sandy, and other productivity web sites; email; text messaging; Jott for Outlook; Jott for Blackberry; 30 second message limit
The Jott application for the iPhone will still be free. When it first came out, I was puzzled why it created only online notes, not emails. Now I understand that it was only meant to integrate with the free service.
I’m not mad—Jott provides a real service and there’s nothing wrong with them getting paid for it. If you don’t have an iPhone—or other smartphone—it could be well worth the money1. I am a bit annoyed that I started Jotting my tasks to OmniFocus so late in the game. As a beta user, I can still take advantage of the full service for free until September 8, but I don’t see myself using it after that.
For me, the great thing about Jott was the email delivery. I never used the online notes—and never would have used Jott if it had only offered online notes—because they created one more inbox I’d have to check and process. Since I already have to check my email, Jott’s emails fit in nicely with an already-established pattern.
Is Jott’s email service worth $4/month? When I’m off on a business trip, as I am now, I may do 2-3 Jotts a day, but when I’m home, it’s 2-3 per week at most, not all of which are directed to OmniFocus. Given that Jotting is only incrementally more efficient than
- writing tasks directly in OmniFocus for the iPhone
- emailing myself a note from my iPhone
- leaving myself a voice mail message
- recording a note on the iPhone with QuickVoice (which I reviewed here)
there’s no compelling reason to add Jott to my monthly expenses. Adieu, Jott.
-
The $13/month plan strikes me as way overpriced no matter how much you use Jott. It seems designed to suck money from companies whose executives demand every little perk they can get their hands on. ↩
MobileMe for me?
August 17th, 2008
As I mentioned in this post, I stopped using my trial MobileMe subscription a couple of weeks ago when I learned that OmniFocus had fixed its WebDAV support and I could sync my desktop and iPhone task lists using another server. Now I’m going to go back to MobileMe for a while.
I’m trying to look at the pros and cons before deciding whether to keep my MobileMe subscription. Here’s what I have so far:
- MobileMe is unnecessary for OmniFocus syncing. The past couple of weeks have proved that there’s no difference between MobileMe and non-MobileMe syncing.
- Calendar syncing is better with MobileMe. By using a free iCal server, iCal’s publish and subscribe features, and a couple of AppleScripts, I’ve been keeping my desktop and laptop calendars in sync for years. Syncing through iTunes and another AppleScript have handled the iPhone. But syncing through MobileMe is definitely smoother and requires no thinking on my part.
- Address Book syncing is much better with MobileMe. Syncing the iPhone and the desktop Mac is fine through iTunes, but keeping Address Books on two Macs is a pain. I scripted a solution, but it’s clunky.
- Syncing other programs is much better with MobileMe. At present, I can use MobileMe to keep TextExpander and 1Password in sync between the desktop and laptop. TextExpander isn’t particularly critical, but 1Password is. Syncing these programs without MobileMe is a manual process that I probably could script to get a clunky solution like that of Address Book.
- I don’t need a another email address. Maybe it would come in handy sometime—and me.com is a pretty cool domain—but I don’t see the need for it now.
- I can’t see much use for the MobileMe web apps. They look nice, but they’re not as good as the native applications, and I use other people’s computers about as often as I wear other people’s underwear.
- iDisk sucks. Small files transfer well enough, but moving a handful of photos or a song files takes forever. I don’t think this a problem specific to MobileMe; WebDAV seems to be slow in general. When I need to get a file onto a server, I SFTP it through YummyFTP, which is much faster. I’m sure SFTPing via Transmit and Interarchy are just as fast.
- I’ve never tried Back To My Mac, but the folks on Macbreak Weekly have never had a kind word for it, so I’m dubious, to say the least. The combination of SSH, SFTP and Screen Sharing has worked fine for me, but I should try Back To My Mac before deciding.
As everyone has said of both MobileMe and its predecessor, .Mac, the sticking point is the price. If MobileMe were half the price, it would be well worth it for the convenience. I’ll give it a month or so and then revisit my pros and cons.
Due dates in OmniFocus
August 15th, 2008
Yesterday I discovered what I think is a bug in OmniFocus’s handling of due dates in sequential projects. I’m sure Omni can defend the choice they made, but it still seems wrong to me.
Let me start by saying that this bug, if it is one, doesn’t really affect me, because I almost never use due dates. I found it as I was going through several viewing scenarios while writing this post.
The bug arises when assigning a due date to a task in a sequential project. Sequential projects are those that have to be done step by step: first task before second, second before third, etc. Sequential projects are contrasted with parallel projects, in which the tasks can be done in any order.
If you assign a due date to one of the later tasks in a sequential project, the due dates of the tasks that fall before it remain unassigned. My first guess was that OmniFocus was going to automatically assign that same due date to the preceding tasks. Failing that, I expected some warning or alert telling me that due dates were needed on these other tasks. Neither happened.
There are two reasons I think this is a bug: First, its just logical that if Task 3 of a sequential project is due next Monday, then Tasks 1 and 2 are also due by, at the latest, Monday. Second, the practical problem with the current behavior is that Tasks 1 and 2 will not show up when I look at actions that are Due Soon.
I nosed around in the Omni Forums for the reasoning behind this behavior, but didn’t find anything. Perhaps Omni thinks automatic assigning of due dates is too intrusive, that users should have the freedom to do whatever they want with their tasks, regardless of logic.
Looking at OmniFocus
August 14th, 2008
A couple of weeks ago on the Macbreak Weekly podcast, Andy Ihnatko said that he didn’t understand OmniFocus. It seemed wrong to him that tasks he’d just entered didn’t appear in his task list. I’ve read other complaints about this same thing, and when I was first using OmniFocus I also sometimes found myself confused about the whys and wherefores of task visibility. In this post, I’m going to:
- give my best understanding of what makes a task visible or invisible;
- suggest how Omni could make things easier for new users; and
- suggest a much-needed addition to OmniFocus for the iPhone related to task visibility.
Before going further, let me mention that I don’t work for Omni and have no insider knowledge about the program. Everything I say here is based strictly on my use of the program.
To understand OmniFocus, you must realize that it is not an application for making lists—if you want to make lists, you can use OmniOutliner or Opal or TextEdit or Pages or Numbers or, really, any application that lets you type in lines of text. The purpose of OmniFocus lies in the second half of its name: it’s designed to help you focus on your tasks, and it does that by hiding tasks that are not relevant to your current situation. It decides what to show and what to hide based on three things: the Context, the Project Type, and the Action View.
OmniFocus defines Contexts in exactly the same way as David Allen does in Getting Things Done. What you can and cannot do at any given time is determined by where you are and the tools you have at hand. That is your Context. You cannot, for example seal the grout in your shower when you’re at work, so “Seal shower grout” is not a task you should be looking at in the office1. OmniFocus lets you define whatever Contexts are appropriate for your life and assign one of those Contexts to each of your tasks. When you are in Context Mode, clicking the name of a Context will cause OmniFocus to show only those tasks assigned that Context.
There are two Project Types: sequential and parallel. The tasks in a sequential project have to be done in a particular order; the tasks in a parallel project can be done in any order. Here’s a sequential project from my OmniFocus database:

The project is identified as sequential by the two little tip-to-tail arrows. Clearly, I can’t install the fan until I have the fan and all the necessary auxiliary equipment.
Here’s a parallel project

where the stacked arrows identify it as parallel. I can do these two tasks in either order. The archetypal parallel project is probably the shopping list.
When you create a new project, OmniFocus will set it to be either sequential or parallel, depending on a setting in its preferences. You can change from one to the other by clicking arrows icon. The Project Type doesn’t have a direct, independent effect on the visibility of a task, but does affect it visibility in conjunction with the Action View.
Omni doesn’t seem to have an official name for what I call Action View, so I’d better start with an explanation. By Action View, I mean the setting you get from this menu in the View Bar:
As you can see, when you are in Context Mode, four Action Views are possible:
- Remaining, which comprises all uncompleted tasks;
- Due Soon, which comprises all uncompleted tasks with assigned due dates within the next two days (a length of time that can be changed in the preferences);
- Next Action, which comprises all uncompleted tasks that are at the top of their project task list;
- Available, which comprises all uncompleted tasks that can be worked on now; and
- Completed, which comprises all completed tasks.
Since we’re in Context Mode, the word “all” in the above descriptions means “all in the current Context.”
The visibility of tasks in a given Context depend to some extent on the interaction between the Project Type and the Action View.
| Action View | Project Type | Visible tasks |
|---|---|---|
| Remaining | Sequential | Uncompleted |
| Remaining | Parallel | Uncompleted |
| Due Soon | Sequential | Uncompleted and due within 2 days |
| Due Soon | Parallel | Uncompleted and due within 2 days |
| Next Action | Sequential | Uncompleted at the top of their project task list |
| Next Action | Parallel | Uncompleted at the top of their project task list |
| Available | Sequential | Uncompleted at the top of their project task list |
| Available | Parallel | Uncompleted |
| Completed | Sequential | Completed |
| Completed | Parallel | Completed |
At first glance, this table may seem to be just a rehash of the earlier list of Action Views, but there’s one difference: the visible tasks for an Action View of Available depend on the Project Type. When the Project Type is sequential, Available works like Next Action. When the Project Type is parallel, Available works like Remaining.
If you think about it a bit, this makes sense. In a sequential project, you cannot do the second or later tasks until the first task is done, you cannot do the third and later task until the second is done, and so on. Therefore, only the top uncompleted task is “available” for you to do, which is why Available works like Next Action (“action” is a GTD word that’s identical to “task”). In a parallel project, on the other hand, every uncompleted task is “available” at any time, so Available works like Remaining.
Once I understood how it worked, Available became my normal Action View in Context Mode, because the Next Action is the right thing to focus on in a sequential project, and all Remaining actions should be considered in a parallel project. The one exception is the Waiting context—there I want to see all Remaining tasks no matter what type of project they belong to.
In Project Mode, there is another set of Action Views available:
- Any Status, which comprises all completed and uncompleted tasks;
- Remaining, which comprises all uncompleted tasks;
- Next Action, which comprises all uncompleted tasks at the top of their project task list;
- Available, which comprises all uncompleted tasks that can be worked on now; and
- Completed, which comprises all completed tasks.
In Project Mode “all” means “all in the currently selected project.” The interaction between Project Type and Action View is similar to that in Context Mode:
| Action View | Project Type | Visible tasks |
|---|---|---|
| Any Status | Sequential | All tasks |
| Any Status | Parallel | All tasks |
| Remaining | Sequential | Uncompleted |
| Remaining | Parallel | Uncompleted |
| Next Action | Sequential | Uncompleted at the top of their project task list |
| Next Action | Parallel | Uncompleted at the top of their project task list |
| Available | Sequential | Uncompleted at the top of their project task list |
| Available | Parallel | Uncompleted |
| Completed | Sequential | Completed |
| Completed | Parallel | Completed |
As in Context Mode, task visibility depends on Project Type only for the Available Action View. Project Mode has two unique visibility features:
- You see completed and uncompleted tasks at the same time.
- Tasks with a Context of Waiting are visible only with an Action View of Any Status or Remaining, regardless of the Project Type.
The latter feature makes Waiting tasks different from all the others with regard to the Available Action View. I guess Omni’s perspective on this is that something you’re Waiting for can’t be Available, which makes sense, even though it breaks consistency with other Contexts.
So, with all these interactions conspiring—rightly—to hide tasks from you, it’s no surprise that people are bewildered by their “missing” tasks when they first start using OmniFocus. There is a relatively simple way to see all Remaining tasks in all Contexts, but it’s hidden. You have to make the View Bar visible, then select All Contexts from the menu at the far left and Remaining from the Action View menu. If Omni created a button that would activate these settings with a single click and put that button in the in the toolbar where it would always be visible, I think it would help new users get acclimated to the OmniFocus way.
(Yes, I know you can create your own button that will do this by using Perspectives, but that’s too much to ask of a brand new user.)
Larry Wall, the creator of Perl, has written that he wanted in Perl to be like natural languages in the way new users could write useful programs very early on, before they attained fluency. A five-year-old doesn’t speak English like an adult, and often says things that adults think are funny and cute, but he still communicates. The same is true of non-native speakers who are just learning the language. Wall wanted Perl to be like that, and is probably most proud of how close it is to that ideal.
I think Omni should strive for the same ideal in OmniFocus. New users—and we’re all new users—are going to be coming from paper-and-pen lists or more elementary to-do list software, and the richness and “otherness” of OmniFocus is going to be offputting unless Omni can make it easier for users to get things done while still speaking baby-talk.
One more thing: OmniFocus for the iPhone forces you to choose your Action View in the Settings screen:

If you’re looking at your tasks in Context Mode and want to change the Action View, you have to go all the way back to the home screen, into Settings, change the Action View, back to home, then to Contexts, and finally to the specific Context you were originally at. This is ridiculous. Changing the Action View should be done through a menu that pops up from the toolbar.
The problem is the Waiting context—if I didn’t Waiting tasks, I’d just keep the setting at Available. But because I use Waiting to keep track of documents, reports, email, and phone calls that people owe me, I need to check the Waiting context fairly often. And because the Waiting context won’t show any tasks unless the Action View is set to Remaining, I have to keep switching the Action View back and forth between Available and Remaining. In the Mac version, I have Perspectives set up to handle this switching with a single click, but since the iPhone version doesn’t have Perspectives, I’m forced to do this intricate dance between screens.
As I was writing this post, I noticed a bug in how OmniFocus handles due dates in sequential projects. I’ve never noticed it before, because I seldom use due dates. It’ll have to wait for a later post.
Update
Ken Case of Omni Twittered me with an explanation of the Waiting difference:
If you want the Waiting context to behave exactly like other contexts, you can change its status from “On Hold” to “Active”.
I knew that Waiting was a unique Context because it’s built-in—you don’t have to create it. I didn’t realize it had a different status. In fact, I didn’t think contexts could have a status of On Hold, only projects. Of course, this means Status is a fourth element that determines whether a task is visible.
-
I’m assuming here that you’re trying to accomplish your listed tasks, not plan new projects. Planning can be done pretty much anywhere. ↩
OmniFocus syncing with WebDAV now working
August 4th, 2008
As I mentioned in this post last week, one of my early problems with OmniFocus for the iPhone was an inability to sync with a non-MobileMe WebDAV server. According to the OmniFocus changelogs, many of the updates to both OF 1.1 for the Mac and OF for the iPhone have been improvements to the WebDAV syncing. Today I tried WebDAV syncing again and it seemed to work, so I may be able to drop my MobileMe subscription before the free trial is over.
I’m using OF 1.1 sneakypeek (v77.9.0.103649) on my Mac and OF 1.0.2 (v77.8.0.103469) on my iPhone and they’re syncing to a CPanel WebDAV server (which is called “Web Disk” in the Files section of the CPanel home page). I have no idea how, or if, syncing works with earlier versions of OF or other WebDAV servers. If you want to follow along with what I did, make sure you have good backups first; attempts to sync may screw up your main OF task database.
The first step is to start syncing from the Macintosh. Open the OF preferences and switch to the Sync panel. Choose Advanced from the sync choices and enter the URL of your WebDAV server. You may need to include port numbers (e.g., https://www.yourwebdavserver.com:1234) or subfolders (e.g., https://www.yourwebdavserver.com/documents) in the URL—that will depend on how the server is set up. You may have a choice between SSL (encrypted) and non-SSL (unencrypted) access. I would never use non-SSL access for personal data like this.
When the URL is entered, click the Sync Now button. If everything goes right, you’ll be prompted for your user name and password on the server. If the server’s SSL certificate wasn’t signed by a “trusted authority”—which means trusted by Apple, I think—you’ll be told that and asked if you want to trust it anyway. I can’t see any circumstance under which you wouldn’t trust the server you selected, so you can agree.
If you’re lucky, the initial sync will work and you can go on to set up OF on your iPhone. If the initial sync doesn’t work, I have only the most rudimentary advice: make sure there are no typos in your URL, user name, and password. Beyond that, you’ll have to ask for help from Omni.
The way to set up syncing on your iPhone will depend on your network situation.
If you have a wireless network that both your Mac and iPhone can access, click the Share Settings button and your Mac will start broadcasting settings that your iPhone can pick up. This will work even if the wireless network was created through the Sharing Preferences panel on your Mac rather than by a router. This is how I did it.
If you don’t have a wireless network, click the Send Settings button to email a link to your iPhone. I have no reason to doubt that this works, but I have no experience with it.
If you’ve clicked the Share Settings button, open OF on the iPhone and tap the Settings item on the OF home screen. Scroll down until you see a “Get Settings from Mac” button. Tap it, and then tap the button with the name of your computer at the bottom of the next screen. Tap the sync button in the toolbar at the bottom of the screen and you’ll be prompted for your WebDAV user name and password again. Enter them and the sync should complete. If it doesn’t, check for typos and contact Omni.
I’d like to be more helpful in troubleshooting, but my experience has been that syncing either works—as it did for me today—or it doesn’t—as I found in the first couple of days after getting OF for the iPhone. Good luck!
OmniFocus bug fixes
July 31st, 2008
The OmniFocus bug I described in this post on Monday, has been fixed. The “Sneaky Peek” version of OmniFocus 1.1 (necessary if you want to sync your tasks with your iPhone) no longer retains focus when you shift out of the Space it’s in. As mentioned in the updates at the bottom of that post, I got into an email correspondence with Ken Case, CEO of Omni and lead developer of OmniFocus, and he tracked down the problem and fixed it within a day or two.
I’m happy about the bug fix, of course, and I’m glad to see that Omni is searching the intertubes for feedback on their products. But…
A few days before writing the post, I had sent a bug report to Omni via OF’s Send Feedback… command in the Help menu. The feedback wasn’t sent from “Dr. Drang,” but from the name used on my OmniFocus license. It got an autoreply from Omni’s mail system, but still hasn’t gotten a response from a human.1
So Omni moved quickly to contact an anonymous and lightly-read blogger, but has yet to contact a licensed owner of its product who sent in a bug report via the channel Omni itself set up. There’s something wrong about that.
-
Admittedly, my feedback report wasn’t as detailed as the blog post, but it included the essentials: OF was retaining focus when switching Spaces. The blog post was more detailed because I’d thought about the problem for a few days. ↩
OmniFocus takes its name too literally
July 28th, 2008
If you use OmniFocus for the iPhone and OmniFocus for the Mac, you’ll certainly want the two task lists to stay in sync. At present, the only way to do that is to use an unstable, “unreleased” version 1.1 of OmniFocus for the the Mac. Omni cutely calls this a “Sneaky Peek” build of version 1.1, but the more ominous name comes at the end of the .dmg file: Alpha.
For alpha software, OmniFocus 1.1 is quite good. I can’t remember it ever crashing on me, and it definitely hasn’t lost any data. It has had two significant problems: a failure to sync through any service other than MobileMe, and a user interface problem I’ll call “focus hogging.”
The syncing problem hit me first. I could write a thousand words on the trials and tribulations I went through over my first couple of days with version 1.1, but I’ll spare you that. In a nutshell:
- I couldn’t get syncing to work on two separate WebDAV servers.
- I then signed up for the 60-day MobileMe trial and syncing has worked fine ever since.
Omni has been updating version 1.1 almost every day since the July 11 launch of OmniFocus for iPhone. The changelog shows that most of the changes have to do with syncing, so maybe the specific problems I had have been fixed. Sometime before my 60-day trial is up, I’ll try to do a sync to a regular WebDAV server; if it works, I’ll probably drop MobileMe.
The focus hogging problem is related to Spaces. I have my Mac configured to use two Spaces. I keep OmniFocus and iCal, my planning applications, in Space 2 and everything else in Space 1. When I’m planning, I’m in Space 2; when I’m working, I’m in Space 1. It’s simple, easy to remember, and keeps my screen relatively uncluttered.
Here’s how things are supposed to work when you move from one Space to another: the frontmost application in the Space you are switching from is supposed to relinquish focus, and the frontmost application in the Space you are switching to is supposed to get focus.1 This is the right behavior because the application you’re looking at should be the application you’re working in.
When switching to the Space with OmniFocus, the correct behavior is followed. If, for example, OmniFocus is the frontmost application in Space 2, it gets focus when I switch into Space 2. But when I switch out of Space 2, things don’t always work right. In particular, if OmniFocus is the frontmost application in Space 2 and I switch to Space 1, OmniFocus retains focus.2 Even though it isn’t on the screen, most keystrokes will be sent to it for interpretation and action. This is a terrible user interface problem because it’s natural to believe that you’re working in the application you see in front of you.
Now, if your first action after switching Spaces is to click somewhere with the mouse, nothing bad is likely to happen because that initial mouse click will change the focus to the application you clicked on. But if your first action after switching Spaces is to use a keyboard shortcut or press the Delete key, that will trigger an action by OmniFocus, not the application you’re looking at. This can be a disaster, especially if you don’t immediately realize what’s happened. I once deleted a set of Contexts from OmniFocus this way (still not sure of the specific action or actions that did it). Fortunately, I only deleted Contexts and not Actions, so it was easy to repair the damage.
I had always thought that the “switch focus when switching Spaces” behavior was system-wide, that it was imposed by OS X and that no application could violate it even if it wanted to. Obviously, I was wrong about that. OmniFocus 1.1 is the only application I have that behaves in this terribly counter-intuitive way.
I sent in a bug report on this behavior a few days ago. I got the automatic reply, but haven’t heard back from a real person. Until this is fixed, OmniFocus 1.1 users should be careful when switching Spaces.
Update
I got an email about the focus hogging from Omni this afternoon (7/29/08). As far as they know, focus switching when switching Spaces is imposed by the system, and they don’t know why OF 1.1 is behaving this way. They suspect it’s due to some quirk (bug) in Spaces but don’t know what aspect of their code is triggering it. They’ve filed bug reports with Apple and are hoping to get the issue resolved.
Further update—July 31, 2008
OmniFocus 1.1 Revision 103490, released yesterday, fixed the focus hogging problem. Today’s release, Revision 103547, also works correctly, so it looks like Omni has this bug whipped and it won’t return. My thanks to Ken Case for his quick response.
-
Some terminology: An application “has focus” when the menubar has its menus and most keystrokes and mouse clicks are sent to that application for interpretation and action. It’s the application you’re working in, the current application. ↩
-
This is the behavior regardless of whether the box in the Spaces Preference Pane labeled “When switching to an application, switch to a space with open windows for the application” is checked or not. ↩
Jott and OmniFocus
July 24th, 2008
Although I recently decided that Jott’s iPhone app was of no use to me, I still like and use the service. I recently made some changes to my OmniFocus and Mail setup to allow me to add tasks to OmniFocus via Jott. With these changes, I can call Jott, dictate a new task, and see it in my OmniFocus Inbox minutes later.
OmniFocus has a set of preferences that allows you to create and activate a Mail rule that takes certain email messages and turn them into actions. I have it set to handle email messages sent to my regular address with a “+omnifocus” inserted just before the @ symbol. (Many email servers, including GMail, will deliver these messages to your regular address; the “+something” addition helps you filter the messages before you read them.)
Configuring OmniFocus this way creates a new mail filtering rule, called “Send to OmniFocus,” which you can see by opening Mail’s preferences. Clicking the Edit button reveals the four steps of the rule:
The most important step is the third one, which passes the message through an AppleScript that’s buried within the OmniFocus application package at
/Applications/OmniFocus.app/Contents/Resources/MailAction.applescript.
This AppleScript works quite well with messages you type up and send to yourself. At the most basic level, it makes a new, uncategorized task with a title taken from the subject of the message and an attached note taken from the body of the message. You can get much fancier than this—including the project, context, or due date— by following some simple formatting rules described in the Mail section of the OmniFocus manual.
Getting Jott to send email to your new “+omnifocus” address is simple: go to your Jott Contacts page, click the Add Contact link, and add a new contact with the special “+omnifocus” address.
The configuration above would work for someone whose regular address is “johndoe@gmail.com.” I like to use “focus” as the name of this special address because it’s easy for me to remember and easy for Jott’s voice recognition to understand. It’s what I say when the Jott lady asks “Who do you want to Jott?”
Unfortunately, the default AppleScript doesn’t work so well with the emails that Jott sends. The subject line of a Jott message starts with a parenthetical announcement that the message is from Jott and finishes with an abbreviated version of your dictated message. The full transcription—which is what I want as the task’s title—is buried in the middle of the body of the message. So sending a Jott-transcribed email through the filter creates a task that needs serious editing, which defeats the purpose.
Fortunately, the solution is pretty straightforward. I made a copy of the AppleScript in the OmniFocus package, made a few changes to accommodate the way Jott messages are formatted, saved the result in my ~/Library/Scripts/Applications/Mail folder (the same folder FastScripts uses), and modified the Mail rule to run this new script instead of the old one.
The full path to the new script is ~/Library/Scripts/Applications/Mail/MailActions.scpt. It’s saved as a script, rather than as a text file as the original is.
Here’s the new AppleScript:
1: -- Copyright 2007 The Omni Group. All rights reserved.
2: -- Additions for Jott handling by Dr. Drang, 2008
3: -- $Header: svn+ssh://source.omnigroup.com/Source/svn/Omni/branches/OmniFocus/1.x/OmniGroup/Applications/Focus/App/Preferences/MailAction.applescript 100519 2008-05-15 21:12:32Z bungi $
4:
5: using terms from application "Mail"
6: -- Trims "foo <foo@bar.com>" down to "foo@bar.com"
7: on trim_address(theAddress)
8: try
9: set AppleScript's text item delimiters to "<"
10: set WithoutPrefix to item 2 of theAddress's text items
11: set AppleScript's text item delimiters to ">"
12: set MyResult to item 1 of WithoutPrefix's text items
13: on error
14: set MyResult to theAddress
15: end try
16: set AppleScript's text item delimiters to {""} --> restore delimiters to default value
17: return MyResult
18: end trim_address
19:
20:
21: on process_message(theMessage)
22: tell application "OmniFocus"
23: log "OmniFocus calling process_message in MailAction script"
24: end tell
25: -- Allow the user to type in the full sender address in case our trimming logic doesn't handle the address they are using.
26: set theSender to sender of theMessage
27: set trimmedSender to my trim_address(theSender)
28: tell application "OmniFocus"
29: set AllowedSender to allowed mail senders
30: if AllowedSender does not contain trimmedSender and AllowedSender does not contain theSender then
31: return
32: end if
33: end tell
34:
35: set theSubject to subject of theMessage
36: set theContent to content of theMessage
37: set singleTask to false
38: if theSubject starts with "(Jott from" then
39: set theText to paragraph 3 of theContent
40: else
41: if (theSubject starts with "Fwd: ") then
42: -- Whole forwarded messages shouldn't split.
43: set singleTask to true
44: set theSubject to text 6 through -1 of theSubject
45: end if
46: set theText to theSubject & return & theContent
47: end if
48: tell application "OmniFocus"
49: tell default document
50: parse tasks with transport text theText as single task singleTask
51: end tell
52: end tell
53: end process_message
54:
55: on perform mail action with messages theMessages
56: try
57: set theMessageCount to count of theMessages
58: repeat with theMessageIndex from 1 to theMessageCount
59: my process_message(item theMessageIndex of theMessages)
60: end repeat
61: on error m number n
62: tell application "OmniFocus"
63: log "Exception in Mail action: (" & n & ") " & m
64: end tell
65: end try
66: end perform mail action with messages
67: end using terms from
The new logic is in Lines 38-40 and 47. Basically, I’ve wrapped an if-then-else block around some of the original logic. The conditional tests the subject line to see whether the message is from Jott. If it is, the text that gets parsed by OmniFocus into a new task is simply the transcription of what I said, which comprises the third paragraph of the body of the message. If the message is not from Jott, the original logic is followed.
So far the filter is working great. Even though I have OmniFocus on my iPhone and could type new tasks into it directly, it’s often much easier and faster to just dictate the task to Jott and let the automation do its magic. It would, no doubt, be even more valuable to someone with another brand of cell phone.











