A hierarchical command-line task manager
DevTodo is a small command line application for maintaining lists of tasks. It stores tasks hierarchically, with each task given one of five priority levels. Data is stored as JSON.
The task list is stored in a file named .todo2 in the current directory. Whenever a list is modified a backup is first copied to .todo2~.
The legacy version
DevTodo1 still compiles and installs, but is now unmaintained. It is available here. Some differences are described below.
Add a task, like so:
$ todo2 -a I should really update my homepage.
Add a task as a child of an existing one:
$ todo2 -g 2 -a This is a child of task 2.
List open tasks:
List all tasks, including closed:
$ todo -A
Mark a task as complete:
$ todo2 -d 1.2
If you find that your todo list is overwhelming your screen, turn on summary mode. It displays only the first line of each note.
$ todo2 -s
Get a full list of command line options with:
$ todo2 --help
DevTodo is written in the Go programming language.
Installation is quite simple:
$ go get github.com/droundy/goopt $ git clone git://github.com/alecthomas/devtodo2.git $ cd devtodo2 $ make install
The binary and man page will be installed under
/usr/local. To specify
an alternate prefix just pass
Yes, this is version 2
Version 1 was written in C++ in 2004, and has been due for a rewrite for a very long time. The release of Go seemed like a good opportunity to both learn a new language and rewrite DevTodo.
Differences between version 1 and 2
- Task lists are now stored as JSON.
- Everything is a lot faster.
- Much less code, and a lot cleaner.
Not currently supported
- Readline-based editing of task text and priority.
- Filters. Completed tasks are hidden by default, but may be displayed with -A.
- Linked files.
- ~/.todorc configuration file.
- Colour customisation.
- Custom task formatting.
- How do I import my version 1 task lists?
DevTodo2 will load your old .todo files automatically. If you modify the task list with DevTodo2 it will transparently migrate the file to .todo2 in the new format.
You can specify the version 1 filename to load with
--legacy-file=<filename>, and the version 2 filename with