Josh Peck

My work and various curiosities...

Getting Things Done with Emacs

Once again, it is spring and I find myself with more on my plate than I can keep track of, so I'm renewing my efforts to adhere to the Getting Things Done philosophy. I fell off the bandwagon while I was out of school, but anytime you are working on starting a company, finishing a masters degree, and working a full-time job, you need all the help you can get!

For those who have not heard of it, GTD is a philosophy (methodology?) to help busy people accomplish more with their time while reducing their stress. This is roughly how I implement it:

If you haven't read the book or have not heard of it, pick up a copy at Amazon. It's a bargain at $9.00...

Getting Things Done

  • I have created a system of "buckets" where I put things I am working on.
  • Depending on which bucket things are in, they are reviewed at some regular interval.
  • During my review process, I move things between the buckets.
  • Eventually I put the TODO item in a bucket that indicates that today is the day this item gets done and tells me where I have to be to accomplish the task.
  • What About Emacs?

    Well, Emacs rocks! I've been a UNIX hacker most of my life, so I prefer simple tools. I don't have a need for graphics most of the time, because I quite simply work faster in text-mode.

    Emacs is a really great UNIX text editor and now that I'm using a MacBook as my primary laptop, I always have Emacs at my fingertips. In fact, I'm writing this blog entry using Emacs right now!

    Emacs is one of those great UNIX programs that will allow you to do anything. It can act as an email client, code editor, calendar, coffee maker, nuclear power plant, and spritual advisor. One of my favorite modes that Emacs supports is Outline Mode. This allows you to use very minimal markup to build outlines and you can even use special codes to collapse / expand sections of your outline.

    Since I use the outline mode so much, I have made it my default mode for emacs. To do this, simply add (setq default-major-mode 'outline-mode) to your ~/.emacs file.

    Once in outline mode, I can simply tag the sections of my outline with a heading by using the '*' character. For example, a document in outline mode might look something like this:

    * Level One Heading
    
      This text must be really important to be under the level one heading...
    
    ** Level Two Heading
    
       No one is going to read this because it is under a level two heading...
    
    

    Using Emacs for GTD

    You can probably guess what follows. Since I have a great, simple tool for building outlines and I have a time management methodology that requires a certain level of hierarchy to organize my tasks, I simply use a bunch of Emacs outlines for my "buckets".

    For example, in my home directory, I have a GTD folder that contains all of my outlines/buckets. I have several documents for daily, weekly, and monthly review; then I also have a number of documents that contain tasks to be accomplished while in a particular setting.

    My GTD looks something like this:

    .
    ./GTD
    ./GTD/AT_CAR
    ./GTD/AT_HOME
    ./GTD/AT_LAPTOP
    ./GTD/AT_PHONE
    ./GTD/DAILY_REVIEW
    ./GTD/MONTHLY_REVIEW
    ./GTD/WEEKLY_REVIEW
    
    

    So, when I do my daily, weekly, or monthly review, all I do is move outline items from my *_REVIEW files to the appropriate AT_* file, save everything and spool it to the printer.

    Since I am a Pragmatic Programmer, I have even built a shell alias to do all the spooling for me.

    alias gtd='cat ~/txtdocs/GTD/AT_* | lp'
    

    With minimal effort each day, I can move all of my items to be reviewed to the appropriate AT_* files and dump them to the printer. This way, I start each day with a nice printed agenda that I can mark up all day long, crossing off items that have been completed, adding items for my *_REVIEW files, and making any other notes that I should have handy. Then, when I do my daily review, I can just do the data entry for that one scribbled-up piece of paper and start making decisions about what is going to be done the next day.

    Emacs may not be for the faint of heart, but for someone that likes using the tool and has too much to do (don't we all), this can be a handy trick.