Emacs Major Mode for TODO.TXT files
A major mode for editing todo.txt files.
The mode provides commands for:
- toggling the done status of a tag
- setting, changing or deleting a task’s priority
- opening the default
todo.txtfile or add todos to the file
- archiving done tasks
- filtering/grouping by +project, #tag, or @person
- support for special markup to set dates
- filtering/grouping by status (overdue, due, today, upcoming)
Classification of todos
Use the following syntax in a todo:
- +project to specify that a todo belongs to project “project”
- @person to specify that a todo pertains to person “person”
- #tag to tag a todo with “tag”
2011-11-23 send email to @mark concerning project +world_domination #important
Managing dates and deadlines
todotxt supports an extension to the todo.txt syntax that allows to specify due dates, start dates, and repetitions. In particular, anywhere in the text of a todo you can use:
d:2012-03-05to specify that the todo is due on March 5, 2012.
t:2012-02-16to specify that the todo can be started no earlier than February 16, 2012.
r:3.monthsto specify that the todo is to be repeated three months after its
DUEdate (note: if
RECURis present, then also a
DUEdate has to be specified in the todo).
Possible repetition patterns:
N.yearsfor more flexibly repetition periods (also the singular forms can be used, e.g.
You can use the following commands to filter the buffer and highlight only tasks related to a specific project, with a given tag, or with a given status:
M-x todotxt-filter-by-project M-x todotxt-filter-by-tag M-x todotxt-filter-by-person M-x todotxt-filter-by-status
By default all taks become invisible, that is, they are still in the buffer, but they are not shown. Use the command:
If you feel unconfortable with filtering making irrelevant tasks invisible, change the value of the variable
Tasks can be grouped by project, person, tag, or status with the commands:
M-x todotxt-group-by-project M-x todotxt-group-by-tag M-x todotxt-group-by-person M-x todotxt-group-by-status
The commands create a special buffer with the todos grouped according to the specifications.
Tasks can be sorted by creation date (if the creation date is prepended to the todo), project, or status with the commands:
M-x todotxt-sort-by-creation-date M-x todotxt-sort-by-priority M-x todotxt-sort-by-project M-x todotxt-sort-by-status
Important Remark The mode does not keep track of the original order in which todos are written. If you start using the sorting commands be aware of the fact that it might be impossible to automatically restore the todos in their original ordering. One notable exception is if all todos are marked with the creation date and appended in chronological order to the file (a relatively common behavior). In this scenario sorting by creation date restores the “original” ordering of the file.
Integrating with OSX’s Reminders App
For those using the application on OSX,
todotxt mode allows users to export a todo to the Reminders app. The command respects the due date and automatically sets a reminder one week before the event’s deadline; it also marks the todo as done in the
todo.txt file (since it becomes a todo of Reminders app).
Invoke the command with:
Load (or add to your path and require)
todotxt-mode in your
For instance, put in your
(add-to-list 'load-path "<DIR WHERE TODOTXT-MODE LIVES>") (require 'todotxt-mode)
todo.txt file in Emacs and then
todo.txt mode, use
M-x describe-mode for more information about available functions and keybindings.
Some commands you might want to try:
M-x todotxt-highlight-dated-todos M-x todotxt-group-by-date M-x todotxt-search-by-project M-x todotxt-archive
You might want to put the following code in your
(setq todotxt-default-file (expand-file-name "<<WHERE YOUR TODO FILE LIVES>>")) (define-key global-map "\C-co" 'todotxt-open-file) (define-key global-map "\C-ct" 'todotxt-add-todo)
to quickly access your
todo.txt file and quickly add todos to it.
If you do not want to prepend creation date to newly created todos, change the value of
todotxt-prepend-today-date to nil:
(setq todotxt-prepend-today-date nil) ; do not prepend creation date to todos
Distributed under the conditions of the MIT license.