Todo.txt is a tool written by Gina Trapani and a community of eager hackers. It allows the management of a text-based simple todo list manager from the command line. Because it is text, it can be used on just about any computing device, and therefore has inspired tools written in a variety of languages on an array of platforms. There is a long and glorious tradition of using plain text for a myriad of tasks, and Emacs is one of the best tools around for working with plain text.

It is in this tradition that todotxt.el was written. It aims to provide a fast, easy and effective mechanism for creating or accessing your existing Todo.txt lists from the comfort of your Emacs session. Of course, it is completely compatible with all the features from Todo.txt CLI and Todo.txt Touch (on Android) including contexts, projects and priorities. It supports filtering by context and project with tab completion, and has fairly good support for common actions associated with tasks including:


Installation is similar to that which you would find with any Emacs package.



You can list all the tasks in the file using l. From there, you may want to pare it down using i to only show incomplete tasks, or by filtering (see below).


You can add a new task with a. Just type the task into the minibuffer and press enter.


You can filter the list using /. This supports completion of any tags (either projects [ indicated with a + ] or contexts [ indicated with a @ ]) using tab, or you can type in any keyword or phrase you want to filter the list. Only lines containing that word or phrase will be shown. Filtering is progressive by default, meaning that each time you filter, it filters the visible list. To disable progressive filtering when invoking, pass the universal argument to the filter command, i.e. instead of just pressing /, press C-u /, which will filter the entire list, not just the visible entries.


You can add a tag (again, either a project or a context) with t. This will then prompt you for a tag, which it will append to selected item. If you want to add a tag that already exists, you can use tab-completion to fill it in.


You can add (or remove, keep reading) a priority on an item with r. If the item already has a priority, it will be overwritten. If the item has a priority and you simply press enter without specifying a new one, the current priority will be deleted. Priorities should be a single character in the range A-Z.


Sometimes the built in features aren’t enough, and you just want to do some freeform edits on an item. This is easy to do with e. When you’re finished editing, just press enter and your changes will be saved.


A task’s completion state is toggled with c.


Completed tasks can be moved to the file done.txt with A.


Like many other modes in Emacs, todotxt is meant to be brought up when you need it and dismissed just as quickly. You can do so by pressing q.


There’s currently no indication that the list is filtered. If you’re unsure of the filter state, press l to make sure you’re really seeing all the items.

Known Bugs

Issues are tracked on the GitHub project page.