A Few More Org Findings

January 1st, 2015  |  Published in tech  |  1 Comment

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.

Better MobileOrg

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 C-x C-s

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 org-mobile-push without 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 command (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 the p, g or 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 org-narrow-to-subtree and widen

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 an org-file. s is useful for narrowing to the current headline (great for focusing on a single project or area of concern). Map w to 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, jira:doc-988

Opening that link with C-c C-o will open your default browser and execute the search (which will take you to the ticket).

Responses

  1. NoonianAtall says:

    August 16th, 2015 at 6:03 pm (#)

    Here are a few ideas you might like:

    • (global-set-key “C-cC-xC-s” ‘org-save-all-org-buffers)

    • (defun org-pull-save-push () (interactive) (org-mobile-pull) (org-save-all-org-buffers) (org-mobile-push) (save-buffers-kill-emacs)) (global-set-key “C-cC-xC-q” ‘org-pull-save-push)

    • I have fallen in love with org-tree-to-indirect-buffer. Instead of storing large subtrees in separate files, I can have several in one file, and when I want to work on just one of them, I use this command to open that subtree in a separate buffer. Then I can use rename-buffer to give it a name specific to the subtree. And by opening the subtree in a separate buffer, I can also look at two different places in the subtree at the same time in different buffers.

    BTW, I found your post from Google while I was searching for info about custom agenda commands (I think…). Keep it up! :)

Leave a Response

© Michael Hall, licensed under a Creative Commons Attribution-ShareAlike 3.0 United States license.