So, I learned something this week. Rather, I did something that was useful to me, which is stop short of trying to get GNUS working again. Instead, I focused on seeing if I could get comfortable enough with MobileOrg to use it (mostly I did) and I kept on working on making some of the things I like about OmniFocus work in org-mode. I think that slightly more constructive behavior — pulling away from a fit of emacsimalism before going completely toxic on it — made it easier to keep on going with org-mode.
So, here’s some of the stuff I learned this week. It’s mostly about how to use MobileOrg a little better, and how to control how much of your org-mode data you have to see at a time.
I’m learning to trust MobileOrg, but it takes a little effort to make it work smoothly, especially if you’re coming from something like OmniFocus or Things.
Save all your open org mode files from the agenda with
Things has the very best sync I’ve seen in a todo app: It seems to “just happen.” Others require some sort of action on the part of the user, so if you’re the type to spend some time at your desk squaring away your actions for the day, then head into back-to-back meetings, it’s a pain if you don’t remember to sync before heading out.
Org-mode can, depending on your setup, complicate matters even
more. If you live in multiple files and
saving them, you get an imperfect sync. The best answer (without
rigging up some kind of auto-sync), is to use the standard Emacs save
C-x C-s) from an agenda buffer: It saves all your open
org-mode files. Then you know it’s safe to push to MobileOrg.
Cheat a little with emacsclient until you can remember to save-and-sync
Emacsclient is able to run elisp from the command line, so if you can
ssh into a machine with your org files and emacs on it, you can do an
org-mobile-push from the command line without opening Emacs:
~$ emacsclient –eval ‘(org-mobile-push)’~
Set up refiling to more easily move things out of your inbox
Refiling allows you to move a thing from one org file to another. With MobileOrg, where the default capture method dumps you into an inbox file, it’s helpful to set up your refiling targets. With this example:
'(org-refile-targets (quote (("~/Dropbox/org/work.org" :level . 1) ("~/Dropbox/org/personal.org" :level . 1))))
C-c C-w would present you with the level 1 headings from your work.org and personal.org files as targets for refiling, meaning a given org headline will be moved to the last line under the heading you select.
Leveraging the Agenda and Sub-Tree Narrowing for Focus
I really like the way OmniFocus handles its Perspectives and Focus features. It’s easy to quickly narrow down your view to things you need to work on or think about right now. I’ve learned two ways to attain similar constrained views in org-mode.
Narrow focus with the agenda
In a tool like OmniFocus or Things, you might have a few different views into your task lists to better organize what you’re working on and when you’re working on it, but the mouse-driven interface of those tools generally means your experience is one of moving between areas of the UI, or doing one-click state changes.
Custom Agenda Commands to Narrow to Contexts
With org-mode, you can use custom agenda views to pull off something like perspectives or context views, you’ll just be doing it with the keyboard.
When I use OmniFocus, my tendency is to make a lot of people contexts and a few mode contexts, but not a lot of place contexts. With org-mode, I use tags as contexts, and tag items with people. Then I made a few custom agenda commands that make it easy to drill down to specific people (either at my desk, or when I’m using MobileOrg):
(setq org-agenda-custom-commands '(("p" . "People") ("pn" "Nick F." tags-todo "nickf") ("pm" "Michelle F." tags-todo "michellef") ("pl" "Lauren" tags-todo "lauren") ("pL" "Larissa" tags-todo "larissa") ("pp" "Pete" tags-todo "pete") ("pj" "Jean" tags-todo "jean") ("pi" "Isaac" tags-todo "isaac") ("g" . "Groups") ("gt" "Tech Pubs Team" tags-todo "team") ("gl" "Tech Pubs Leads" tags-todo "leads") ("gs" "Engineering Staff" tags-todo "staff") ("o" tags-todo "office") ))
These views make it possible to generate an agenda (
C-c a) then tap
o keys to get pre-built tag searches by people on my
team, teams I work on, or items I’ve tagged as “office” (which is my
way of saying “things where I need to get up and walk over to
someone’s desk to talk face-to-face.”) Those same custom commands
appear as agenda views in MobileOrg, so I can walk into a 1:1 and
easily see everything tagged with the person I’m speaking to.
Restrict the Agenda to a Single File
You can also restrict the files the agenda uses to generate itself by
invoking the agenda (
C-c a) then tapping the
< key before tapping
a to generate the agenda. That will limit the agenda to the file
you invoked it from. If you keep your todos in “work” and “personal”
files, that means you can effectively filter out one or the other with
a single extra keystroke.
Restrict the Agenda to a Single Subtree
You can also restrict the agenda by tapping the
< key a second
time. That will restrict it to the current subtree. That’s helpful if
you keep lists of single-action tasks, or want to focus on the todos
for a single project.
Narrowing focus with
The agenda has a bunch of single-key commands to cycle todo status,
etc. By enabling org speed commands, you can get the same commands in
s is useful for narrowing to the current headline
(great for focusing on a single project or area of concern). Map
widen to quickly expand the file again:
(setq org-speed-commands-user (quote (("w" . widen))))
Use TODO label faces
You can customize the way todo faces look by keyword. STUCK, WAITING and DELEGATED each get a special face so that when I’m scanning a file, they stand out a little (white on red, orange and gray, respectively).
If you use the OmniFocus defer date, use a “scheduled” date in org-mode
Like OmniFocus, org-mode has both a start date and a deadline date. Keep the agenda clear by planning start dates for things with “scheduled.”
You can make custom links in org mode really easily
Here’s one for linking to JIRA tickets:
Then use a “jira:” URL scheme in a standard org-mode link,
Opening that link with
C-c C-o will open your default browser and
execute the search (which will take you to the ticket).