Doneyet: an ncurses todo list

February 3, 2009

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 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.


14 Responses to “Doneyet: an ncurses todo list”

  1. unregistr3d said

    thanks for the tip, i use devtodo which is really small and easy to use (‘tda’ for adding a entry, #tde’ for editing and ‘tdd’ to mark as done, ‘todo’ shows the list) and if you add it to ~/.bashrc it will be shown at every new terminal.
    But it hasn’t lots of features, maybe i take a look at doneyet 😀

  2. nightmorph said

    Yeah, devtodo is pretty simple. Over at the GMN, we sorta-recently ran a feature on combining it with the shell prompt:

    The original article on using devtodo itself may be perused here:

  3. Abhijeet said

    What does urukrama mean?

  4. urukrama said

    It is a name of Vamana, the dwarf avatara (in Hindu mythology), who, when the demon king Bali gave him three steps of land, assumed a gigantic form and with only two steps crossed the entire universe. Urukrama literally means “he whose steps (krama) are wide (uru)”.

  5. Kayli said

    Just dropping by.Btw, you website have great content!

    Renegade ClickBank Affiliate Banks $127,783 In 30 Days With New Google Software …

  6. Jim said

    How did you change the color of the urxvt tab bar to something other than the bright red?

  7. colonelcrayon said

    Thank you! This tool is fantastic.

  8. Pedro said


    First off let me say thanks for your openbox guide. It helped me get started.

    On that note, I quickly hacked a simple Task List as a pipe menu for Openbox. Still very rudimentary but have a look


  9. Gabe said

    I’m the author of doneyet. Thanks for trying it out! Feel free to open a bug report on the google code site to help track down why it crashes when saving on one of your computers.

  10. rob said

    Great tip. Doneyet looks sweet, but when I try to compile it, it looks like I’m missing a file called menu.h:

    rob@home:~/code/doneyet-read-only> make
    g++ -g -O3 -I. -c error: menu.h: No such file or directory
    In file included from workspace.h:8,
    curses-menu.h:25: error: ISO C++ forbids declaration of ‘MENU’ with no type
    curses-menu.h:25: error: expected ‘;’ before ‘*’ token
    curses-menu.h:27: error: expected `;’ before ‘private’
    curses-menu.h:28: error: ISO C++ forbids declaration of ‘ITEM’ with no type
    curses-menu.h:28: error: expected ‘;’ before ‘*’ token
    curses-menu.h:29: error: ISO C++ forbids declaration of ‘MENU’ with no type
    curses-menu.h:29: error: expected ‘;’ before ‘*’ token
    make: *** [main.o] Error 1

    Just svn co’d and ran make. Could this be some dependecy I’ve missed? I have the ncurses-dev libs and such…

    • Justin said

      I know this is very very late….

      But, try to add “-I/usr/include/ncurses” to the Makefile as part of the “IFLAGS”.

      Hope this helps.

      • Rick said

        Trying to compile on Windows (I was going to load it on a pen drive and have the .exe & the linux executable too.

        The snag of course is the ncurses in a unix only library, but PDCurses is cross platform. PDCurses doesn’t support menus to ensure compatability… So looks like I’ll have to re-write the whole thing to work with PDCurses or abandon this for something else.

        *curses!* 🙂

  11. anonimo said

    have you tried orgmode for emacs?

  12. […] on command. It’s menu-driven, intuitive and has a clean interface. urukrama has a great introduction to doneyet on his blog; if you find this one attractive I would suggest visiting there to get even more […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: