Lakshan Perera

Simple command line todo list

They say pen and paper is the best way to manage a todo list. Following the popular norm, I also started tracking my todos with pen and paper. But after several unsuccessful attempts of finding a pen or deciphering tasks from torn or soaked paper, I felt keyboard and the pixel-screen would be more accessible than the traditional method. Without relying on any sophisticated applications I relied on the most simple form - plain-text. It was better, but after being inspired from efforts like and, I thought of coming up with a small command line utility of my own.

Enter todo gem!

This resulted in coding my first ruby gem - todo. It is just a simple command line utility for managing todos. I didn't want to loose the flexibility offered by plain-text lists, hence it will use human readable YAML form, to store the lists. This enables you to use your favorite text editor to edit these todo lists. Further it supports tags. You could list the tasks by tags, thus making things smart and easy.

Todo gem will run specific to a directory. This enables to keep different task lists in each directory. For example, I keep a todo list in my 'home' directory which holds all my housekeeping stuff and then I have separate lists for each project I work on in their respective directories. This separation allows better organization of the things to be done.


Here is a basic example of how todo gem works:

  #visit your project folder
  cd projects/newapp

  #create a new todo list for the project
  todo create

  #add a new task
  todo add "write the specs"
  - add tags : important, due:24/08/2008

  #listing all tasks
  todo list --all

  #listing tasks tagged 'important'
  todo list --tag important

  #removing a task by name
  todo remove "write the specs"

  #removing a task by index
  todo remove -i 1

Get it!

To install todo gem in your machine simply run;

sudo gem install todo

Also the code of the gem is hosted in github, so you could fork and flip it in the way you want (and don't forget to send me a pull request).