Gettings Things Done … in Haskell!

Remark for version 0.2

  • Fixed some minor bugs.
  • Better help.
  • Starts in interactive mode when no command is given on the command line.
  • The path which stores the todo file can be changed by defining the environment-variable TODO, defaults to HOME
  • Check the current code out using darcs with darcs get http://www.mlesniak.com/wp-content/uploads/gtd

If you have any suggestions, wishes or additional bug reports just write me mail.

Motivation
I find the whole Gettings-Things-Done scene quite interesting. Wanting to try the approach with a netbook lead me to the search for an appropiate tool. There are quite a few:

  • todo.sh — nice, but written in bash which limits the extensibility for implementing complex things.
  • Gettings things Gnome — not easy to extend, GUI-based
  • Thinking Rock – very advanced but also not very configurable;  there are so many forms to fill out just to add a task…
  • …and probably many more…

So, in the end I decided to hack my own GTD application with the exact featureset I want.

Feature / Wishlist
My “perfect” Getting things done application should have (at least) these features

  • console-based
  • storage of data in a text-format
  • colours to indicate projects and contexts
  • both a command-line and an interactive mode
  • rock-solid: no data loss on termination due to bugs
  • being easy to extend

Installation and Usage
Installation is done as usual with cabal:

cabal update
cabal install hsgtd

Below you see a screenshot of hsGTD in action

Bildschirmfoto- platon -home-mlesniak: gtd daemon -2

To use it you either start the interactive mode with gtd daemon or gtd <command> <args>. A short description of important  commands:

add Adds a task to the end of the list
append <id> <text> Appends text to task <id>
change <id> <text> Change text in task <id>
done <id> Mark task <id> as done
undone <id> Mark task <id> as still to do

list [keyword] List all open tasks with specific word in it
listdone List only done tasks
next [keyword] Displays the next task to do for the specific project or context

tostart <id> Moves task to the beginning of the list
toend <id> Moves task to the end of the list
after <id1> <id2> Moves task <id2> after task <id1>
before <id1> <id2> Moves task <id2> before task <id1>
swap <id1> <id2> Swaps task <id1> and <id2>

I suggest you play around with unimporant data first and try each of the commands.


15 Comments

  1. Eric Kow says:

    For the netbook impaired, it’s useful to be able to update a GTD list from different computers, say one at work and at home.

    Being a forgetful sort of guy, having to copy my gtd file to a usb key and shuttle it back and forth would simply not work. Ideally, I’d be able to work on it simultaneously on both machines and synchronise using something like Unison or Darcs [or both!]. The need of simultaneity is not so much that I want to be literally touching the list at both ends but also to support forgetfulness (I usually even forget to synch my machines and cannot automate it because sometimes Unison needs manual baby-sitting).

    For now, I’m just stuck with SimpleGTD… which really needs an API…

  2. Michael says:

    @Eric Kow

    I use dropbox (http://www.getdropbox.com) for this. Whenever I change my task list it is automatically synchronized in the background.

  3. Eric Kow says:

    Interesting! I’ll have to take a look at Dropbox then. I’m really excited about the prospect of a GTD application that I can finally integrate with my favourite mail client, mutt.

  4. Michael says:

    In a comment on reddit I’ve written about integrating dropbox, take a look :-)

  5. Robin Green says:

    I prefer the approach of org-mode for emacs, which uses key combinations instead of commands that you have to type in. It would be nice to have a version of org-mode written in Haskell, e.g. for the yi text-editor, which is a Haskell text editor that can be configured to behave like emacs.

  6. I’ve also recently tried taking up GTD. Though I’m still in the paper-and-pencil stage due to not having found any tool that even looks like it’d fit me. One thing that I found quickly was that I make extensive use of date-based action lists (43 folders type). Any plans of adding that to your program?

  7. Michael says:

    @Magnus Therning

    With a quick google search I did not found sufficient information. Any hints where I can find some description?

  8. Eric Kow says:

    Do you have a Darcs or Git repository somewhere? Nothing urgent, I just thought I could take notes in code if I started playing around with it. One thought would be to use Neil Mitchell’s CmdArgs library.

  9. Michael says:

    @Eric Kow

    A darcs repository is coming this or (more probably) the following week.

  10. Eric Kow says:

    Hi Michael, I’m getting a 404 on that darcs link.

  11. Michael says:

    @Eric

    Small typo, fixed :-)

  12. Hi,

    Thanks for this cool, it is pretty cool.

    I’ve started to use it, and after a while I wanted to add/fix some stuffs.

    Just, prepare yourself for a patch bomb :)

  13. I’ve made yet another patch to my local branch. This one add a choose command which pick and show a random task. I find it very effective :)

  14. I’m wondering if I should share my repo say on patch-tag. What others think?

Leave a Reply