I use the Getting Things Done system to keep track of what I'm doing. It works very well for me. My personal stuff I keep track of in paper in a Filofax, but I have a lot more detail to track at work at York University, so I use text files. Here's my system.
I have three files to manage what I'm doing, plus a monthly work diary:
work-diary-200904.outline.txt, in which I jot down notes about what I did that day and what's on my mind.
(I'll explain about Emacs and outline mode below.)
git to manage the files
I use the distributed version control system git to manage these files. First, I set up a basic repository on a Unix host where I do my personal e-mail.
$ mkdir -p york/gtd $ cd york/gtd $ git init Initialized empty Git repository in /home/buff/york/gtd/.git/
Here I edited
next-actions.outline.txt. More on its format below. Right now it only matters that the file exists.
$ git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # next-actions.outline.txt nothing added to commit but untracked files present (use "git add" to track) $ git add next-actions.outline.txt $ git commit -m 'getting started' [master (root-commit)]: created e98f811: "getting started" 1 files changed, 4 insertions(+), 0 deletions(-) create mode 100644 next-actions.outline.txt $ git log commit e98f811b6b67ffd354ff33ef5df3da872a8e7059 Author: William Denton <firstname.lastname@example.org> Date: Tue Apr 21 21:12:44 2009 -0400 getting started
Now I have a git repository with one file sitting on a Unix server I can get to from anywhere: work, home, anywhere with an Internet connection. I make a copy of it on my home machine:
$ cd york $ git clone picketfence:york/gtd/ Initialized empty Git repository in /home/buff/york/gtd/.git/ remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), 268 bytes, done.
I already had a
york directory where I kept stuff. I was able to specify the server and file path with just
picketfence:york/gtd because I already have ssh set up to save me time in
Host picketfence Hostname picketfence.server.com User buff
This lets me just say
ssh picketfence and I connect. I've
got my keys set up so no password is required, either.
Back to cloning a local copy of the repository.
$ cd gtd $ ls -l total 2 -rw-r--r-- 1 buff wheel 44 21 Apr 21:13 next-actions.outline.txt
Here I can edit
next-actions.outline.txt again and add a task. When I'm done, I do this:
$ git commit -m 'update' next-actions.outline.txt [master]: created 15f2969: "update" 1 files changed, 1 insertions(+), 0 deletions(-) $ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean) $ git push Counting objects: 5, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 326 bytes, done. Total 3 (delta 0), reused 0 (delta 0) warning: updating the currently checked out branch; this may cause confusion, as the index and working tree do not reflect changes that are now in HEAD. To picketfence:york/gtd e98f811..15f2969 master -> master
The next day at work I did the same thing and made a local copy of the repository there. I made my lists and so on, and at the end of the day I committed all of the files. At home in the evening, I ran
git pull and it downloaded all of the changes. I could edit them, do a
git push, and then the next day do another
git pull first thing at work.
Now I have an easy way of keeping my GTD files in synch across various machines. They're not in the cloud so I can work on them without Internet access.
Emacs and outline mode
I'm a Unix-loving geek, so of course I keep my text in text files. To manage the GTD files I settled on outline mode, which is built into Emacs.
That page explains what an outline mode is. Here's an example of mine:
* E-mail ** Catherine: accurate collection stats for Wikipedia entry ** LCC: will be away for next meeting ** Peter R: is Joomla in use anywhere at York? If so, could I get a test account to see what it's like?
To prevent having to run
M-x outline-mode every time I open one of these files, I added this to
;; outline-mode (add-to-list 'auto-mode-alist '("\\.outline\\.txt\\'" . outline-mode)) (add-hook 'outline-mode-hook 'hide-body)
Now when I open
next-actions.outline.txt Emacs automatically goes into outline mode and hides the bodies of all the entries so I just see the tasks.
It works for me
This system works really well for me. When I'm jotting down notes on what I did that day, if I remember I need to do something (e-mail someone, read something, fix something, whatever) I can switch buffers to the next actions list and put it down there. If I have a new project on the go, and I copy notes to the projects lists. If I have a next action of e-mailing someone, when I've e-mailed them I just copy the line to the waiting for list and add the date I sent the e-mail.
Plain text, Emacs to edit it, outline mode to give it some structure, and git so I always have a current copy of the files I need. I'm really happy with this.