While developing I like to keep track of small issues that come up over time - a duplication to remove; a missing test for a corner case. All these little things you don’t create a bug for, but which would be annoying to forget. There exists a plethora of tools for managing todo lists. Unfortunately, I never found one that fitted my workflow. So I ended up writing my todo lists in simple text files (I tend to lose anything that I write on paper, so pen and paper never really was an alternative). At least, this was the case until I discovered Taskpaper. Taskpaper is a text editor with special syntax highlighting support for managing todo lists (and some other really cool features). While Taskpaper is really great, it is only available for Mac OSX. Unfortunately, I am at work still stuck with windows. So I decided to create a todo list editor that provides the effectiveness of Taskpaper while being fully integrated into Eclipse. Being a big fan of Xtext, it was the obvious choice to use Xtext for the implementation. I have been actively using my todo list editor now for several month and it has turned from just a todo list to my favorite everyday note-taking application.
Installation
You can install the editor via its update site or via the Eclipse Marketplace. It runs with Eclipse 3.6 and 3.7 and requires Xtext 2.0. The source code is available at Github.
How does it work?
Create a new file with the extension .todo or .taskpaper. The file will be opened in the todo editor. The basic elements of a todo list are: Todos, Projects, Tags, and Notes. These help you to structure and manage your todos.
Todos
Write a new todo by starting a new line with a hyphen. Todos can be marked as done by adding the ‘@done’ tag. They will be marked with strike through.
Projects
You can use projects to structure your todo lists. Declare a project by appending a colon at the end of the line. Project names are automatically highlighted with a bigger font to separate them more clearly. Be careful not to add additional whitespaces before the line break. Projects are hierarchical. You can attach content to a project by indenting its content with a tab or two spaces.
Code
I often keep code snippets in my todo list. To make them more readable, you can enclose them within '''
and '''
. The text in between will be written in a fixed width font.
Notes
Any other text that you write in your text file is treated as a note. Notes are highlighted in gray.
Tags
One of the most powerful features of the editor are tags. You can use tags to annotate any element in your file. You have already seen the @done tag earlier. It is used to mark todos as done. But you can use your own tags as well. Tags can even have additional parameters, written in parentheses. We will see later what they are good for.
Queries
Often I want to quickly list all open todos for today. This is possible with the query view. You can use the view to search through all todo files in your workspace. Open it by selecting: Window->Show View->Others->Todos->Query
. Enter queries into the search box at the top, to search for todo by their text, keywords, or tags.
Here are some examples:
"a phrase"
=> returns all elements that contains the specified phrase@done
=> returns all todos with the tag donenot @done
=> returns all todos which do not have the tag @done@prio = 1
=> returns all todos with the tag @prio(1)@prio < 3
=> returns all todos which tag @prio has a value less that 3
Queries can also be combined:
"a phrase" and not @done
=> returns all open todos that contain the specified phrase
By the way, the query language is also implemented in Xtext. The search box is a little Xtext editor that provides even code completion.
Shortcuts
There are some keyboard shortcuts available:
CMD + R / STR + R
=> remove all done todos in the editorCMD + T / STR + T
=> create a new empty todo list (works only in the standalone application)
Standalone RCP application
There is also a standalone todo editor available. It is still a little rough around the edges but completely usable. You can find the instructions on how to build the RCP application on the Github page.