Getting Things Done, in Emacs

Tasks

A wonderful concept that has intrigued me for quite some time is David Allen’s Getting Things Done. Wikipedia has a good short story on what the process is and how it should work.

This article however is about how I implement it into my daily routine at work to try and get the most out of a day. Firstly, I will introduce the software I utilize to get everything done.

Living inside Emacs

Since the year 2000 I have more and more started to live inside Emacs. I was introduced to Emacs by my mentor at the time, Charlie, and ever since that time I have moved more and more of my daily routine into Emacs.

In order to be fully effective with GTD within Emacs you need to get several modules up and running:

Gnus
The News and Mail reader for Emacs, should be included with any current Emacs distribution. There are some great articles on the Emacs Wiki that give tutorials and setup instructions, they are on the CategoryGnus page.
Muse
This is actually a sort of holy trinity when it comes to personal time planning, remembering stuff and documentation. Muse gives you all the documentation authoring tooling you require, it is actually what I am using now to type this blog post.
Planner
Planner gives you all the tooling you need to perform… well… planning of course. It is quite free form so it allows for all kinds of planning systems.
Remember
Remember, when used in combination with Planner, allows you to take context sensitive (i.e., aware of what files, news articles, blog posts, emails you are looking at) notes and store then as an association of a project, a date or any other piece of information you have within your Muse/Planner setup.

Yes, it does look like a lot of work to get my system up and running and no, you should not try to get all this working right now. I’ve spent the last 7 years of my professional life moving towards this point. This blog post is supposed to give you insight into how I do it, not how you should do it.

In order to get my system up and running, in regards to the Muse/Planner/Remember trinity, I have found the information and code snippets of Sacha Chua extremely useful.

Dealing with information

Anyways, when you have all the component set up you will quickly find yourself in productivity heaven. The nice thing about having everything within one single application is that it takes the minimum amount of effort to actually do something.

All the information that comes to you on a daily basis, except for human contact, is all regulated through the same interface and all the information is correlated to each other.

If we look at how what David Allen says about dealing with email for instance:

  1. Start at the top.
    1. Deal with one item at a time.
    2. Never put anything back into ‘in’.
  2. If an item requires action:
    1. do it (if it takes less than two minutes),
    2. delegate it, or
    3. defer it.
  3. If not,
    1. file it for reference
    2. throw it away, or
    3. incubate it for possible action later.

Alight… so imagine 2 pieces of information come into your trusty Emacs; a news post and a blog post. Both deal with something you want to look at (in my case it was a news article on TAGS and a blog post on scalable web applications with the COMET engine).

It is totally useless to act on both right away, it would take way too much time. So from within my news / mail / blog reader (Gnus) I tell Planner to create a task for me from the current context. Planner will ask me what day I would think to perform this task while showing me my current calendar and all related information, entering a real date is only useful when there is some form of deadline, if not, it will always show up on my Friday review. Then it asks with what page I would like to file it, with TaskPool being the default. TaskPool is the standard target for all tasks. Since I want to deal with it later I can choose Incubator (or Next Action / Future if you will) and it will be in my files, at my fingertips but not in my way.

So, what does this information look like? I actually planned to do these tasks on a certain date and on the Planner page for that date, which pops up when I press ‘M-x plan’ it looks like this:

#B _ Try out Jetty / Continuations / DWR Reverse Ajax : E-Mail from Dion Almaer (Incubator)
#C _ Check out TAGS post : Post from Eli Zaretskii on gnu.emacs.help (Incubator)

It tells me I have a medium priority task to check out the Jetty / Ajax stuff, which was in an “E-Mail from Dion Almaer” (within Emacs I the text between quotes is a hyperlink pointing to the actual email) and a low priority task to check out what Eli was talking about on gnu.emacs.help in regards to TAGS.

The function ‘M-x planner-create-task-from-buffer’, which you normally will bind to a global key binding, has the absolutely great benefit that it also records your position in any type of file, if you are creating a task from it. The enables me to make quick reminder notes to check out, rewrite or do something else with code at a certain point in a file without actually disturbing the file itself.

When I use the key bindings that planner gives to change the status of the tasks I can actually also clock the time that I spent on specific tasks. This is great when you need it, useless if you don’t ;).

Making notes

Sometimes you need to take down some quick notes about something (once again, could be mail / news / blog posts or source code). This is where Remember comes in. By simply running ‘M-x remember’ you can quickly make a note and press ‘C-c C-c’ to save it. The note, with the first line as its heading, will be stored on the page that you specify. This could be a day page or a project page.

The end result will be an entry such as this:

.#1 Test entry 20:02 (2007.07.28#2)

I want to remember writing this file…

[[BeingProductiveInEmacs]]

Each note is of course based on a sequence (.#) which can be used for hyperlinking to it. Next to the actual text of the note it also contains a reference link to where you actually invoked remember. This, of course, is invaluable information when reading it back. you can quickly jump to the file, email, news post or blog post that is referenced.

Your own system

What I just described is just a fraction of the actual system that I use and you will have to find out for yourself what works best for you. My advise however is to make it is simple as possible and with the least amount of applications as you can. Constantly switching between applications while managing your tasks is one of the biggest slow-downs you can imagine.

To end it all I provide you with a few screenshots of what my Emacs windows look like while utilizing this system.

Document editing Tasks Gnus - blogpost gnus

31 Comments

  1. Posted July 29, 2007 at 1:44 am | Permalink

    Glad to see Emacs working for you!

  2. Posted July 29, 2007 at 4:32 pm | Permalink

    I’d be interested in hearing how you use Muse with Wordpress. Do you use muse-publish-region and paste it into some webform, or publish the entries to separate files locally, and upload them somewhere? I use the latter approach with pyblosxom.

  3. Posted July 29, 2007 at 9:37 pm | Permalink

    Oh, I’m so happy that Planner works for you too! Thanks for writing a terrific blog post. =)

  4. Posted July 30, 2007 at 3:00 am | Permalink

    I’m also interested on how you configure and use Muse with Wordpress.

    I tried using weblogger.el but I dont get titles in my posts, so its not very useful because I have to log in to my wp account and edit my post.

  5. Posted July 30, 2007 at 11:12 am | Permalink

    Michael / Gabriel,

    I wish I had automated it, the wordpress editor is far, far from usefull when typing a post. Sadly I have yet to find a means to do posting correctly through the API from within Emacs.

    So, what I do now is simply typing the post, publish it to local HTML until I am satisfied and then I *ahem* copy and paste the HTML code into the code editor of wordpress… works most of the time, other times it will just mess things up :(…

    I am actually trying to get a nice system up and running where I can just maintain my full blog from Muse / Planner and not have to deal with wordpress and such.

  6. Carl
    Posted July 30, 2007 at 2:09 pm | Permalink

    Very interesting, I use a different approach, with org mode. My setup is based on these:
    Using Emacs org-mode for GTD
    OrgTutorial

  7. ChriS
    Posted July 30, 2007 at 2:48 pm | Permalink

    Have you tried org-mode (http://staff.science.uva.nl/~dominik/Tools/org/) that comes with Emacs22? What do you think of it?

  8. Posted July 30, 2007 at 2:56 pm | Permalink

    Carl / ChriS,

    Thanks! Yes I know of org-mode and I have used it in the past, being a religious follower of Emacs-CVS. I think it is an absolutely fantastic mode for doing structured documentation. I used to use it for taking notes.

    I would have one .org file for work, one for home, one for a project I was working on and it worked out quite nicely.

    The reason I use Muse however is that it allows me to integrate planner in a very unobtrusive way. It might be possible with org-mode as well, but since switching from org-mode to muse I have not been sorry.

  9. Posted July 30, 2007 at 3:13 pm | Permalink

    It’s All Text! a firefox extension lets you edit wordpress (and anything else) in Emacs. Unless you have a really new emacs, nxml-mode can’t be made to work with fragments. I haven’t met MUSE before, so I haven’t tried it with IAT!

    https://addons.mozilla.org/en-US/firefox/addon/4125

    Ciao!

    PS: I’m the author of IAT! I may be biased. :-)

  10. Posted July 30, 2007 at 3:16 pm | Permalink

    So, does Muse, Planner, and Remember all require that it runs from one system? I ask because I would want to use the same data at home, work and away from either (via SSH).

    I use SVN to syncronize my shell and emacs configurations via a stow-type package manager:
    http://trac.gerf.org/homedir

    Ciao!

  11. Posted July 30, 2007 at 3:32 pm | Permalink

    Hey Doc,

    I will have to give that extension a try! It would be absolutely great if it took away the pain of using the Wordpress editor all together!

    wrt muse/planner/remeber needing to be on one system… like you said; it’s all text. You can just chuck all your files in SVN and have it do all the merging and such.

    For Gnus, I have not tried putting it in SVN yet, however a guy on the Emacs Wiki described how he does his syncing.

  12. Posted July 30, 2007 at 6:46 pm | Permalink

    Nice tips… I’ve tried to live in Emacs like this myself and seem to always fail. I think it’s because I DO live in IMAP, and unless I’ve missed it, Emacs doesn’t have a good/real IMAP client. Moving mail local isn’t an option.

  13. Posted July 31, 2007 at 5:12 am | Permalink

    Matthew,

    Gnus is one of the most impressive mail clients (POP and IMAP) that I have ever seen, even though it is a News reader ;)

  14. Carl
    Posted July 31, 2007 at 7:22 am | Permalink

    btw, you use OS X write? what font and color-theme are you using, those screenies are delicious!

  15. Posted July 31, 2007 at 7:35 am | Permalink

    Hey Carl,

    Yes, I am on OS X. The font in the screenshots is apple-monaco; it’s one of the standard fonts.

    The color-theme is color-theme-arjen… yup.. it’s my own; but you can find it in the color-theme library ;)

    If you liked the monaco font, also check out the ProFont font, it’s also quite nice.

  16. Carl
    Posted July 31, 2007 at 9:45 am | Permalink

    Thanks for the info! Unfortunately, I’m on Linux, so no monaco for me. Anyway, Emacs in Linux doesn’t support TTF except if you use experimental gtk TTF branch which I stay away from. I’ll try your color-theme though :D

  17. Posted July 31, 2007 at 9:11 pm | Permalink

    @core
    Actually Gnus isn’t such a good IMAP client, but I digress :-)

    Using Gnus with IMAP(or any remote backend) don’t you loose magic like…..

    ““E-Mail from Dion Almaer” (within Emacs I the text between quotes is a hyperlink pointing to the actual email)”?

  18. Posted August 1, 2007 at 2:07 am | Permalink

    Matthew,

    I guess we differ in opinion then…. I’ve been using Gnus for imap mail and it works great ;)…

    The magic of the hyperlinking is that you hyperlink to an message identifier, say gnus://[mailbox]/[message identifier] and each message on imap already has an identifier, so you do not loose any of that magic :)

  19. Posted August 1, 2007 at 2:08 am | Permalink

    Carl,

    Take a look at the ProFont font I mentioned earlier… it has a linux version as well so it should work with your run of the mill Emacs (I believe you need the bitmap font then…

  20. carl
    Posted August 1, 2007 at 9:10 am | Permalink

    Thanks!
    I manage to setup emacs with profont, very nice font!

  21. regeya
    Posted August 1, 2007 at 2:55 pm | Permalink

    I’ve done GTD-like things using Org-mode, and at the risk of starting an editor war, I use VimOutliner for the same purpose now :-) Planner was slick but I found it to be too complex, IMHO, but I could just be dense. Heh.

  22. Posted August 5, 2007 at 3:06 pm | Permalink

    Thanks for a nice article! Also, another vote for Gnus as an imap client — especially when combined with offlineimap.

    Any suggestions for how Planner could be better with GTD? Let us know..

  23. jb
    Posted August 31, 2007 at 1:09 am | Permalink

    I used planner for the longest time before I started using the GTD methodology. It was great for combining journal notes on projects and tasks in one place. When I started using GTD, I tried getting it to work with planner, but I never felt that the fit was comfortable.

    In my setup I had TaskPool as the inbox, a Maybe file and individual files for projects. The biggest problems I had were getting a list of all the next actions and reviewing delegated items. How do you go about doing these things?

    Right now I am trying out org-mode, but if I could figure out a good way to make planner fit with GTD, I would switch to it in a second.

  24. Posted September 3, 2007 at 6:56 am | Permalink

    jb,

    Well, I assign tasks a priority… high priority vs medium vs low for each task. The top priority tasks are the things I need to do first etc… when I finish a task and mark them done, they dissappear.

    all the planned tasks (with a date) are on each of the date’s individual pages. I have planner configured to carry forward any unfinished tasks and so I have a complete list of tasks that need to be done today (and any that were carried forward)

    For delegates, planner indicates them and they get carried forward. I generrally mark them as low prio and set a date for review with a note. Using task ids is quite usefull here…

  25. Posted September 17, 2007 at 7:45 am | Permalink

    I have a working setup with weblogger and Wordpress.
    But for now i did not check how to use Muse with it, but that would be very nice indeed.

    The title is working with weblogger, the only really missing features are category support and attachments. But i should be able to hack at least the category soon unless somebody already did it.

    And thanks credmp for this introduction to muse/planner/remember .. it really makes my emacs experience better, especially since I really started getting into emacs two weeks ago. :)

  26. Posted November 15, 2007 at 8:03 pm | Permalink

    Emacs is a great operating system. If only it had a decent text editor… :)

  27. Frank Dekens
    Posted January 14, 2008 at 11:36 am | Permalink

    I already had installed all the mentioned modules, but I’m still learning how to use them effectively, after several years using them. There is just so much that can be done with it, I almost should start a project of learning how to use all this stuff. But I learned form this page, both the post and some of the comment. So thanks for a great post.

    I have two questions:
    - Could you please post your .emacs file. I bet there are nice goodies in there as to your configuration for other, and myself, to use :)
    - How can you see upcoming action items? This is the biggest problem I have with planner. I like to know what’s coming up this week for example, because maybe I need to get started on something now to get an action item that is due in 2 days done. I have not figured out a good way to do this (other than either scanning several days ahead, or browsing all my project files.)
    Thanks, Frank

  28. Posted May 12, 2008 at 9:54 pm | Permalink

    This article turns out to have been inspirational for me. I have been a big fan of David Allen’s for a long time, and have used emacs for even longer, but it never occurred to me that emacs could be used to GTD. So, I have not only implemented my own version of GTD with emacs, but I have even started a blog to share my solution with others. I had been considering a blog for some time now, but Arjen’s post is what finally pushed me over the edge. I have completed one post to describe my setup, and will soon complete a second to describe how it can be used. Thank you so much!

    :-)

  29. Posted May 13, 2008 at 6:59 am | Permalink

    David,

    That is fantastic to hear! Welcome to the club! :)

    Arjen

  30. Posted May 19, 2008 at 1:47 pm | Permalink

    I have switched blog software from wordpress to blosxom, and as a result the url (quoted above) has changed:

    http://www.davidcross.us/cgi-bin/blosxom.cgi/docs/GTD/emacsGTD1.html

    The name of the article (my first) is: Getting Things Done with Emacs, Part I. It is the first of a three part series.

    Cheers,
    David

  31. Posted June 4, 2008 at 5:31 pm | Permalink

    Well, third time is a charm … I restarted my blog once again, with a new structure for the blogs themselves … and now I seem to be on the write track … anyhow, the link to Arjen’s blog is now:

    http://www.davidcross.us/cgi-bin/blosxom.cgi/docs/gtd/gtd_with_emacs.html

    Sorry for any confusion, and best wishes to all!

    David

13 Trackbacks

  1. [...] Getting Things Done, in Emacs Yet another reason to learn emacs. (tags: emacs gtd) [...]

  2. [...] Getting Things Done, in Emacs - Emacs implementation of GTD [via Anachaia] [...]

  3. By credmp » Blog Archive » Feeling the love on July 30, 2007 at 3:24 pm

    [...] I wrote my post about my implementation of GTD in Emacs I figured some people might find it usefull. Soon after it was posted it popped up on the [...]

  4. [...] credmp » Blog Archive » Getting Things Done, in Emacs (tags: emacs planner gtd) These icons link to social bookmarking sites where readers can share and discover new web pages. [...]

  5. By Ramble : Links for 2007-07-30 [del.icio.us] on July 30, 2007 at 8:20 pm

    [...] credmp » Blog Archive » Getting Things Done, in EmacsI like Emacs, but I’m not sure if I want to live in it. Still, maybe I’ll try some of these modules out and see if such a system could work for me.(tags: gtd emacs weblog ) Posted by Stephen Tolton on Monday, July 30, 2007, at 4:30 pm, and filed under Links. Follow any responses to this post with its comments RSS feed. You can post a comment or trackback from your blog. [...]

  6. [...] Getting Things Done, in Emacs - Emacs implementation of GTD [via Anarchaia] [...]

  7. By links for 2007-08-03 « dMitry Alexandrov on August 3, 2007 at 3:24 am

    [...] Getting Things Done, in Emacs (tags: emacs gtd blog text lifehacks productivity) [...]

  8. [...] credmp » Blog Archive » Getting Things Done, in Emacs The Stockmarket and trading are nice but I’m still a geek. I was impressed by this GTD implementation in Emacs. (tags: gtd productivity emacs) [...]

  9. [...] YA GTD + Emacs [...]

  10. By Finding My Muse « The Good Doc on September 9, 2007 at 10:32 pm

    [...] I first heard about Muse in a post by Credmp about using Emacs for Getting Things Done (GTD). I found a reference to the post on 43 Folders. I [...]

  11. [...] credmp » Blog Archive » Getting Things Done, in Emacs [...]

  12. [...] for web (*.html) and LaTeX (*.tex) documents. That was until I read Arjen Wiersma’s credmp blog, Getting Things Done, in Emacs, and my eyes were opened. I have been a huge fan of David Allen and GTD for some time now, but [...]

  13. By Blog updates - credmp on July 26, 2008 at 6:04 am

    [...] I get the most satisfaction (and response) from writing long, in-depth, articles like the post on my GTD setup. So I have been writing some in-depth stuff on Java programming: the Spring framework, RESTful [...]

Post a Comment

Your email is never shared. Required fields are marked *

*
*