Introduction
The TextMate GTD bundle is yet another attempt at creating the perfect To Do List. The main concept in the development of the bundle is “plan in projects, execute in context.” What this means is that I like to think about what I have to do by focusing on one project at a time, but I may do a bunch of things from different projects, depending on the context. The bottom line is that it is a work in progress.
Overview
A quick overview of the terms may help (remember, these are MY terms – not David Allen’s). First, a Project is a collection of related tasks. It may be somewhat focused, e.g., “build a bookcase,” or it may be a more general grouping, like “things to do in the yard.” Next, a Task is a discrete action. For example, a task for building a bookshelf would be “measure the area where I want the shelf,” or “buy the materials for the shelf.” Strict adherents to David Allen’s Getting Things Done may want more detail, like “go to the hardware store” and “buy nails” as separate tasks, but I don’t always feel that I need to document minute steps of a project. The final concept for the GTD bundle is Context. Context is where or how a task is accomplished. Again, some people like specific “office computer” and “home computer” tasks, but I tend to aggregate them, where possible.
Now a screenshot:

This is my current setup. All of the files are part of a TextMate project (not to be confused with a GTD project). You’ll notice that each GTD project is a separate file, with a .gtd extension. Still looking at the list of files, notice that the top file is called “contexts.gtd;” this is a special file for use within the bundle. I’ll explain it in more detail later.
Within the main window, you can see the various tasks associated with building a bookshelf. The first word in each line, in ALL CAPS, is the context. A lot (most?) GTD folks like to see an ampersand (@) at the front of a context. However, I don’t feel the need – I know it’s a context, so why bother with the extra character?
The part that makes this bundle useful is how it groups tasks by context. Here is a screenshot of the list:

See how it groups tasks from different projects into context groups? If you think that’s a cool idea, keep reading!
Setting up the GTD Bundle
Well, assuming you have TextMate and are comfortable with Subversion, it isn’t hard to get started. Follow these directions to install the bundle as part of the TextMate bundle package. Next, create a TextMate project (in ~/Documents/GTD, for example). Then, you need to add a contexts.gtd file to this project. Get it here. Copy this file to the TextMate project. Now you’re ready to start.
Using the GTD Bundle
The contexts.gtd file lists the contexts that are recognized in the GTD bundle (more on modifying those later on). Next you need to create a project file by clicking the little button on the bottom left of the project drawer. GTD projects are simple text files with a ‘.gtd’ extension.
To use a context, type the key letter (the single letter after the first ‘|’). Then press the ‘Enter’ key. The ‘Return’ will not work. This will change the letter into the context and supply a template for the task. For example, a TASK will have a prompt for the task description. EMAIL will prompt you for the addressee and the subject.
Useful contexts that aren’t in your contexts.gtd are WAIT, UNWAIT and DONE. To put a task into WAIT, type ‘w’ and hit tab. To take it off of WAIT status type ‘u’ and tab. Typing ‘d’ and tab marks a task as DONE.
Once you have a bunch of projects and want to see a consolidated task list, press cmd-shift-T. Cmd-opt-shift-T will give you the task list minus the completed tasks. Note – this function needs work.
Modifying the GTD Bundle
What a lot of folks seemed to want is to create their own contexts. So, the contexts.gtd provides the capability for this. To add you own contexts, follow the pattern in the contexts.gtd file. Here is the layout of the file:
The format is CONTEXT|keyCommand|keyString|regex|color
where:
CONTEXT is the name of the context
keyCommand is the key letter(s)
keyString is the code that the keyCommand executes
regex is the regex string to match (may possibly be different from CONTEXT)
color is the color for the list view (not yet ready)
Important! Add whatever you want to the list, but the last
two contexts must be OTHER and DONE! Also, the search for the key command will stop at the first match, so put longer commands before shorter, e.g., ‘tw’ before ‘t’.
TASK|t|TASK ${1:new task}|^TASK|00000f
EMAIL|e|EMAIL ${1:person} re: ${0:subject}|^EMAIL|0000ff
CALL|c|CALL ${1:person} re: ${2:subject} ${0:#}|^CALL|000fff
OTHER|o|other|^OTHER|00ffff
DONE|d|done|^DONE|0fffff
So, if I wanted to have a new context for SCHOOL, I would add a line like:
SCHOOL|s|SCHOOL ${1:subject} ${0:task}|^SCHOOL|123456
And I would type ’s’ then ‘Enter’ to execute it.
Conclusion (for now)
Well, that’s about it for the intro. Please feel free to contact me with feedback. I hope you find it useful!