Emacs: Getting Things Done with Org – Basic

2(please remove leading spaces from code excerpts)

You’d like to use the Org Mode for Emacs to manage your tasks. In this
blog post, I’ll cover the absolute minimum you need to get started.
We’ll assume that you already have GNU Emacs 22 and that you’re reasonably
familiar with using Emacs, including installing external modules and
adding them to your load path.

There are a million ways to plan, but we’re going to focus on two. The
first approach is Getting Things Done (GTD), described by David Allen
in the book of the same title. GTD focuses on next actions (the very
next thing you can do) and uses context lists to keep things
manageable. Popular ways to do GTD are with index cards, recycled
business cards, or software programs. If most of your tasks are in
your head or scattered on scraps of paper, GTD will probably give you
the most organizational bang for the least effort.

The second approach is day planning. You plan your week based on your
projects and priorities, write your tasks onto the pages for each day,
and copy unfinished tasks over to the next day. If you’ve used one of
those Filofax, Franklin-Covey or Dayrunner personal organizers, you’re
probably used to this way of planning.

As you learn more about Emacs and task management, you’ll probably
develop your own way of doing things. These two are a good place to
start, though. (Don’t recognize how you plan your day, but
interested in using Emacs anyway? Please get in touch with me! I may
know of something that fits, and I’d certainly love to hear about the
way you work.)

If you use GTD, read on. Otherwise, read the Setup and then wait for
the next blog post! =)

Set up

Org is part of Emacs 22. To make it even easier to collect tasks and
notes, install a separate package called Remember.

First, download and unpack Remember. As of this writing, Remember is
at version 1.9. You can get the TAR.GZ from
http://download.gna.org/remember-el/remember-1.9.tar.gz605 or the ZIP
archive from http://download.gna.org/remember-el/remember-1.9.zip606 . If
these instructions are out of date, check
http://www.emacswiki.org/cgi-bin/wiki/RememberMode607 to find out where to get Remember.

Then add this basic configuration for Org and Remember to your ~/.emacs,

   (add-to-list 'load-path "~/elisp/remember-1.9")                                  ;; (1)
   (require 'remember-autoloads)
   (setq org-remember-templates
      '(("Tasks" ?t "* TODO %?\n  %i\n  %a" "~/organizer.org")                      ;; (2)
        ("Appointments" ?a "* Appointment: %?\n%^T\n%i\n  %a" "~/organizer.org")))
   (setq remember-annotation-functions '(org-remember-annotation))
   (setq remember-handler-functions '(org-remember-handler))
   (eval-after-load 'remember
     '(add-hook 'remember-mode-hook 'org-remember-apply-template))
   (global-set-key (kbd "C-c r") 'remember)                                         ;; (3)

   (require 'org)
   (add-to-list 'auto-mode-alist '("\\.org$" . org-mode))                           ;; (4)
   (global-set-key (kbd "C-c a") 'org-agenda)                                       ;; (5)
   (setq org-todo-keywords '("TODO" "STARTED" "WAITING" "DONE"))                    ;; (6)
   (setq org-agenda-include-diary t)                                                ;; (7)
   (setq org-agenda-include-all-todo t)                                             ;; (8)
  • (1): Change the directory as necessary.
  • (2): You can use a different filename.
  • (3): You can change this keyboard shortcut.
  • (4): This tells Emacs to open all .org files in org-mode.
  • (5): You can change this keyboard shortcut.
  • (6): This makes it easy to pull in holidays and other events. See the chapter on managing your schedule.
  • (7): This includes all unfinished todos in the Org daily and weekly views. You can remove this line when you get used to working with todo lists.

After you evaluate that code by calling M-x eval-buffer or restarting Emacs, you’re ready to create an Org file.

  1. Open ~/organizer.org (or whichever file you specified in (2)).
  2. Save it. This is probably the only time you’ll have an empty TODO list.
  3. Use C-c [ (org-agenda-file-to-front) to add it to your org-agenda-files. You only need to do this once for this agenda file.

Read on to find out how to use your new Org file for GTD, or skip ahead to the section on Day Planning to find out how to plan by day!

Org and GTD

So you’ve read David Allen’s book about Getting Things Done (or any of
the countless summaries of it on the Net), and you’d like to get
started with Emacs and Org mode. I’ll show you the bare minimum you
need to support the five phases in the GTD task workflow:

Phase GTD Org
Collect Capture everything you need to do. Collect all your bits of paper or put everything into your inbox
Process Actionable? Yes: do, delegate, or defer; no: file, throw, or incubate Put tasks on your list, track delegated tasks
Organize Next actions, projects, waiting for, someday/maybe Tag tasks, view tasks by tag
Review Daily, weekly, etc. Agenda view
Do Actually do the work! No, Emacs won’t do the work for you… (But it can brew coffee!)
Collect

The first thing you need to do is get all the tasks out of your head,
off scraps of paper, out of your e-mail, and so on. If this is the
first time you’re putting tasks into Org, you have a lot of tasks to
collect. The best way to collect lots of tasks is to open your Org
agenda file (~/organizer.org) and put this heading at the end of the
file:

   * Inbox

Now go to the end of the file, and type in ** TODO and the first task
you can think of, like this:

   ** TODO Buy milk

Press C-M-RET and keep typing other tasks. Keep going until you’ve
gone through all the things in your head and all the scraps of paper
lying around. Do not get distracted. Your goal is to write all the
tasks down. If you are as easily distracted as I am, do not even open
up a browser window or look at your e-mail. It can be a real struggle
sometimes to focus long enough to get everything down, especially when
you’re writing down all these tasks that you can work on. DO NOT DO A
TASK UNLESS IT TAKES LESS THAN TWO MINUTES TO DO. In fact, if you are
just starting out with GTD, you might find it better to resist all
temptations to do tasks during this step. Get it all out.

Now that you’ve gotten your tasks out of your head and into your
organizer.org file, breathe. There’s less stress in your brain now,
because you don’t have to worry about forgetting things (as long as
you remember to check your Org file, that is!).

DO NOT FILL YOUR BRAIN BACK UP WITH OTHER THINGS TO DO. The brain is a
wonderful thing, but it’s not good at remembering what you need to do.
Whenever a task comes your way—through e-mail, in conversation, in
the shower—put it in your ~/organizer.org. Well, you probably don’t
want to drip all over the computer, so sometimes you’ll need to hang
on to an idea—but get it out of your head and into your organizer as
quickly as possible.

To collect tasks within Emacs as they come up, use Remember. With the
basic configuration you set up in the previous section, you can use
C-c r t (or M-x remember and “t” for the Tasks template) to pop up a
buffer where you can type in the task description and some notes.

    ## Filing location: Select interactively, default, or last used:
    ##     C-u C-c C-c  to select file and header location interactively.
    ##         C-c C-c  "~/notebook/personal/organizer.org" -> "* Tasks"
    ## C-u C-u C-c C-c  "???" -> "* ???"
    ## To switch templates, use `M-x org-remember'.

    * TODO

And if you’re lucky, there will even be a hyperlink to the file or
e-mail you were looking at when you called C-c r t (remember, tasks).

If you brain-dump your tasks and use C-c r t to collect tasks as they
come up, you can free up your brain for other things, such as
contemplating the meaning of life.

Process

Now that you’ve collected all those tasks into your inbox, you can
process them. Open your Org agenda file and go to your inbox.

For every item there, decide if it’s something that you need to act
on. Is it really just a note? If so, take out the TODO keyword and
organize it like you would store other notes. If it’s a true-blue
task, decide if it’s something you can do within the next two minutes,
delegate to someone else, or leave on your task list. Go through your
list systematically, delegating and eliminating whenever possible.

If you delegate the task, change it to WAITING by moving your cursor
to the headline with the TODO keyword and typing S-r (org-shiftright)
until it changes to WAITING. To keep track of who you delegated it to,
just edit the task description to reflect it. Your organizer file will
look like this:

 ** WAITING Buy milk - WJY
Organize

You have a list of tasks that _you_ need to act on. If you’ve
braindumped everything that people have asked you to do and that
you’ve thought of doing, this is probably a very long list.
Intimidatingly long. The next step in restoring sanity to your life is
to organize your list into next actions, projects, things you’re
waiting for, and someday/maybe tasks.

Review that task list. For each task, decide if it’s something you can
do immediately. Is it something you can do in one sitting, and do you
have everything you need in order to do it? If so, great! It’s a next
action. Leave it on your task list.

If you can’t immediately work on a task, it may be a project in
disguise, and it needs to be broken down into smaller, concrete next
actions. For example, the task:

 ** TODO Write a book about Emacs

would probably result in me getting complete writer’s block. If you’re
faced with a big task like this, move it out of your inbox and make it
a project. Then you can think of the very next action you need to do.
Your Org file could look something like this:

 * Projects

 ** Emacs book
 *** TODO Write about basic Org and GTD

 * Inbox

 ** TODO ... lots of other things go here ...
 ** TODO ... lots of other things go here ...
 ** TODO ... lots of other things go here ...

A task might also be stuck because you need to wait for someone else.
For example, I’m currently working on renewing my visa, but I need to
wait for the embassy. Mark those stuck tasks as WAITING with S-right
(org-shiftright).

Someday/maybe tasks are nice to think about once in a while, but you
don’t want to clutter your day-to-day tasks with them. A basic way to
deal with this is to move those tasks into a separate Organizer file
such as ~/someday.org . Another is to use tags, which we’ll cover in
the section on intermediate Org. For now, just move them to another
file.

Review

You’ve gone from a whole bunch of tasks in your brain and on pieces of
paper to one text file containing everything you need to do, with an
easy way to get to just the things you can do right now. To view all
your tasks, type C-c a t (org-agenda, tasks). You’ll get something
that looks like this:

  Global list of TODO items of type: ALL
  Available with `N r': (0)ALL (1)TODO (2)STARTED (3)WAITING (4)DONE
  TODO Write about basic Org and GTD
  TODO Blog
  TODO Answer my mail
  TODO Alter slacks
  ...

Type “1 r” to show only the active tasks, and review what you’re
waiting for with “3 r”. Review this WAITING list every so often
to make sure that nothing falls through the cracks.

Type “f” to start follow mode, which displays the relevant lines from
your Org agenda file as you move around. This is helpful for quickly
reviewing your task list.

Do

All of the above should take you less than fifteen minutes of planning
each day. The rest of the time, you can focus on doing the work,
undistracted by shiny new tasks that pop up because you can get them
out of your way with C-c r t.

To work, review your task list with either C-c a t (org-agenda, tasks)
or C-a a (org-agenda, agenda). From the agenda view, type “t”
(org-agenda-todo) to change the task status. I find it helpful to mark
a task as STARTED because it helps me remember what I was working on
in case I get distracted by something urgent, but you can also use C-u
t to jump to a status without cycling through the ones in between
(say, marking a task as DONE). You can also press ENTER to jump to the
task headline and edit it directly.

Going back to reviews: As you mark tasks done, you’ll also want to do
daily and weekly reviews. You can see those with C-c a a (org-agenda,
org-agenda-list), which opens an Org agenda view. To see completed
tasks in the Org agenda view, type l (org-agenda-log-mode). To switch
to the day view, type d (org-agenda-day-view). To switch to the week
view, type w (org-agenda-week-view). The basic configuration I’ve
suggested here will automatically include unfinished tasks at the
beginning of the agenda. Scroll up to review your tasks, and press
ENTER on a line to jump to it.

Wrapping up

There’s a lot more you can do with Org to make it support GTD, but
here’s a basic configuration that can get you started on collecting,
processing, organizing, managing, and actually doing your tasks. Stay
tuned for the intermediate Org article for more tips on setting up
repeated tasks, clocking time, working with projects, and tagging
tasks!

On Technorati: , , ,

Random Emacs symbol: bbdb-edit-current-field – Command: Edit the contents of the Insidious Big Brother Database field displayed on

UPDATE: Thanks, Victor, for catching the bug! Changed org-install to org.

  • Pingback: Sp3w

  • Victor

    Hi Sacha,

    For some reason, evaluating (require ‘org-install) doesn’t work (file-error “Cannot open load file”), although Org is present and I can enter org-mode manually. My emacs version is

    GNU Emacs 22.1.1 (x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars) of 2007-11-06 on king, modified by Ubuntu

    and I’m using Ubuntu 7.10.

    Best,
    Victor.

  • Victor

    Well, I’ve solved that by manually installing org-5.17a (as the version that ships with Emacs is outdated anyway) – you may want to include an instruction (like

    cd ~/elisp
    wget http://orgmode.org/org-5.17a.tar.gz
    tar xzf org-5.17a.tar.gz

    and adding (add-to-path ‘load-path “~/elisp/org-5.17a”) right before the (require ‘org-install) line.

    Thanks!

  • http://sachachua.com Sacha Chua

    Thanks for catching that! I’ve changed it to (require ‘org), which should work for the Org that’s in Emacs 22.

  • http://voins.program.ru/ Alexey Voinov

    I think it would be better if “waiting” state goes before “started”. If someone “started” doing something, the most the action can go either in “waiting” state or in “done”. If “started” is before “waiting” then when something is “done” it goes through “waiting”. Am I missing something?

    Thanks. :)

  • http://sachachua.com Sacha Chua

    Hmm. I hadn’t actually thought about that before. I use “started” whenever I start on a task. When I find out that I need something else, I change it to waiting. If not, then I just hit “t” twice to mark it as done, or I use C-u t d. I have expert mode on, so I can select it with a single character. It’s easier to cycle forward than it is to cycle backwards. I don’t mind hitting t twice to get to DONE if that means not having to cycle backwards to mark something as WAITING. So my current config makes sense to me, or maybe it makes sense to me because it’s my config. =)

    But if that sequence works for you, Alexey, it’s easy to configure Org to support that! =)

  • John James

    The first parameter provided in the sample for the definition of org-remember-templates (“Tasks”, “Appointments”) is not valid for the org-mode (4.67d) distributed with Carbon Emacs. Excluding that first parameter from each template definition allows template selection to work properly.

    From the docs for org-remember-templates in the org.el provided with Carbon Emacs:

    “Templates for the creation of remember buffers.
    When nil, just let remember make the buffer.
    When not nil, this is a list of 4-element lists. In each entry, the first
    element is a character, a unique key to select this template.
    The second element is the template. The third element is optional and can
    specify a destination file for remember items created with this template.
    The default file is given by `org-default-notes-file’. An optional third
    element can specify the headline in that file that should be offered
    first when the user is asked to file the entry.”

  • http://sachachua.com Sacha Chua

    Gah, that should teach me not to use CVS… *blush!* You think I’d have learned from last time. Thanks for catching that, John James!

  • Rodrigo Wanderley

    I had the same problem as John, solved removing the car of the list (“Task” and “Apointment”).

    Besides that everything worked great and in 2 days I already started to feel the great results :-)

    Can’t wait for the book!

  • Pingback: gluggergames » Blog Archive » Playing with Tools

  • http://boostpro.com Dave Abrahams

    Hi Sacha,

    In remember 2.0,

    (require 'remember-autoloads)

    doesn’t work because there is no

    remember-autoloads.el

    .
    Thanks for everything you’re doing to make the emacs world a little easier to navigate!

  • http://boostpro.com Dave Abrahams

    Oh, one more note: in this guide you refer to the weekly and daily agendas, but there are no steps that put any information in those agendas. It would be a lot more satisfying to see a few items pop up!

  • Pingback: -= Linkage 2007.12.28 =-

  • Noorul

    In the agenda view (C-c a a), after pressing ‘l’ , I am not able to see tasks that are already completed (DONE). Am I missing something?

  • http://sachachua.com Sacha Chua

    Try these:

    (setq org-log-done t)
    (setq org-agenda-show-log t)
    
  • Noorul

    Thanks

  • Jai

    Every time I try to add my org file to my agenda using org-agenda-file-to-front I get a scan error caused by unbalanced parentheses. I tried Remember 2.0 and 1.9. I thought maybe I was doing something wrong in my init file, so I tried not using my own path and file name but using Sacha’s code pasted exactly. No dice.

    I wonder what’s up. A Google search revealed no other complaints about that. I probably need to get involved with one of those Emacs mailing lists again.