Karl Hans Janke Kollaborativ
Heute die Welt, morgen das Sonnensystem!
<< prev next >>

A command-line organizer for getting things done

In case anyone hasn't noticed: I have a thing for simple solutions.

So here is the third iteration of my personal to-do tracker. Previous versions held each task in a separate file, possibly along with a verbose description and several metadata fields.

This one is a return to simplicity. As a special note, I am particularly proud of defaulting to the venerable .plan file to hold the task list. I've always wished I had a proper use for it!

From the README:

basic operation

  • keep a list of tasks in ~/.plan, one per line. example:
     do something
     do something else
    
  • annotate them with due dates as appropriate
    12.7.2010! do something
    do something else
    
  • arrange roughly in order of priority
  • group tasks by context, i.e. what could be done together
    do laundry
    scrub floor
    
    visit parents
    do something on way to parents house
    do something at parents' house
    
  • mark current tasks / next actions
    > laundromat
    scrub floor
    > read chapter on poly types
    
  • stall tasks until a certain date
    2010-08-20> bday present for dad
    2010-08-25> bday present for sis
    
  • use hashtags to name projects
    code up first prototype of new #watnu
    blog about #watnu on #khjk
    
  • watnu will warn when a project has no tasks active or scheduled.
  • use generic tasks to keep projects on plan:
    keep blogging on #khjk
    keep coding: #watnu #bitlbeeotr #noooo
    #home #friends #school
    
  • multiple date formats allowed. examples (all 1st of may):
    2010-05-01! iso date
    1.5.2010!   german
    5/1/2010!   us
    
    1.5.! german w/o year
    5/1!  us w/o year
    
  • delegate tasks to other people, schedule activation as reminder
    10.7.> [mom] do laundry
    [timmy] scrub floor
    
  • call watnu to get your current todo list. order and grouping will be preserved from input.
  • set PLAN environment variable to use a different input file
  • set PLAN="-" to read from stdin

The concepts are my take on ideas from David Allen's GTD. These are some data points on the design:

The program is just short of 180 lines of Haskell code. See the README file for build instructions.

NB. I have found it a surprisingly nice routine to print a fresh todo list on a PocketMod each morning, so I'm throwing in a dirty shell script as a free bonus.

Get it here: http://code.khjk.org/watnu/