I’ve been looking for a command-line todo list for a few weeks now. I normally use gtodo or tasks to keep track of the things I still need to do, but was looking for a command-line application that didn’t have a lot of dependencies and that I could easily use on my older hardware. Todo.txt, beautifully simple as it is, wasn’t quite what I wanted, and neither were td, lakTEK, or iKog. Applications like calcurse, on the other hand, had what I wanted, but offered much more than I needed. I didn’t want to have to learn commands, however simple, to add tasks to the list (like most of the above require). I just wanted something that looks like gtodo or tasks — a list of todos, that is easily managed, and where you can easily mark tasks done. If it supported subtasks so much the better.

I searched and searched, but always returned home empty handed. Until, a few nights ago, I searched for “ncurses todo list” and found the lovely doneyet. This is exactly what I have been looking for. You have a simple ncurses interface in which you can create simple todo lists (more than one if you desire to keep different projects separate). You can add subtasks. You can mark tasks started (green), completed (blue) or paused (red). You can add multiple notes to tasks (the notes column is only visible if you enlarge your terminal, but notes for the selected task can be viewed when you press v). Youc an export your task list to a simple text file. You can filter your todo list to find (un)completed tasks, or you can search for a keyword.

So how do you get doneyet? Make sure you have subversion installed, and use the following command to download the source code:

svn checkout http://doneyet.googlecode.com/svn/trunk/ doneyet-read-only

To build the application, just enter the doneyet-read-only directory and type “make”. I’m not sure what the dependencies are, but I was able to compile it on two computers without installing any additional packages. The documentation doesn’t give any details.

The ‘make’ command will create an executable file called todo. Launch that, and you have your todo list. I renamed this file to doneyet, as todo is used by other applications, and copied it to /usr/bin/ so that I can launch it normally through a terminal, without having to specify the full path.

On your first run, you will be asked to create a new project.


If you have already created one or more project files, you will be able to select one of the projects. (The projects files are stored in ~/.todo/)


Once you opened a project you can start adding your tasks.


The keybindings are well documented on the projects homepage:

  • A – Apply the Show All Tasks filter.
  • a – If a task is selected, add a new subtask of that task. If no task is selected add a root level task.
  • M – Show the menu bar.
    • j and k – Change menu item.
    • l and h – Change menu.
    • Return – Select the selected menu item.
    • Escape – Hide the menu bar.
  • m – Move the currently selected task. Note this doesn't work for root level tasks yet.
    • k/u/Up Arrow – Move selected task up.
    • j/d/Down Arrow – Move selected task down.
    • Return – Place task at current position.
    • Escape – Place task to where it was originally.
  • n – Add a note to the selected task.
  • v – View the notes of the selected task.
  • j – Selected next task.
  • k – Select previous task.
  • Escape – Select no task.
  • e – Edit selected task.
  • d – Delete selected task.
  • c – Toggle collapsed state of selected task.
  • R – Apply the Show Uncompleted Tasks filter.
  • C – Apply the Show Completed Tasks filter.
  • f – Apply the Find Tasks filter.
  • Space – Toggle the status of the selected item. White is unstarted, green is in progress, blue is completed and red is paused.
  • q – Quit.

Doneyet crashed on one of my computers whenever I tried to save or open project file (I haven’t yet explored why) but runs perfectly on my other computer.