ToDo<a class="new visualNoPrint" href="" title="create this page">?</a> documentation

ToDo? documentation

Author: Terry Brown
Date: 20090119
ToDo? version:20090119+


todo is a Leo plugin to-do priority markers, and time-required / progress display summarized hiearachically across a project. Leo is a python based cross-platform outliner / literate programing tool / general data management environment. is the Qt version of Leo's Tk plugin. was originally written by Mark Ng, since then EKD and others have worked on it, most recently me, Terry Brown.


Short answer: todo runs in Leo using Leo's Qt GUI.


Leo supports @settings sections in documents. @settings used by todo are:

    @string todo_time_name = days  # name of time unit (e.g. days, weeks, hours)
    @string todo_icon_location = beforeIcon
      # priority icons go beforeIcon or beforeHeadline
    @string todo_prog_location =  beforeHeadline
      # progress dial icons go beforeIcon or beforeHeadline
    @string todo_icon_order = pri-first
      # if priority and progress dial icons are on the same side of
      # Leo's status icon, pri-first places the priority icon first,
      # any other value places the progress icon first.


todo use Leo's icon functions. These icons are generated from an SVG file, that file and the icons themselves live in the leo/Icons/cleo directory of the Leo distribution, and you can replace the PNG images with any others you wish.


todo is enabled like like any other plugin, by editing the @enabled-plugins node in myLeoSettings.leo.

All functionality is reached via a tab called Task in the Log pane.

Menu items

Click on Menu button to show the todo menu.

Find next todo

Finds the next 'todo' item, i.e. an item with an priority or a todo checkbox.

Priority menu


Sort the siblings of the node under the pointer by priority.

Children -> to do

Make all children of the node at which you're pointing 'to do' items by marking them with the 'to do' priority marker (empty checkbox).

Show distribution

List the number of nodes of each priority level which occur below this node. Output (in the log pane) might look something like this:

1   4       Urgent
2   89      Very High
3   9       High
4   12      Medium
o   42      To do
X   25      Cross
x   6       (cross)
?   1       Query
D   382     Done


Shows the distribution as above, and then asks for two lists of priorities.

Replaces priorities included in the first list with the priority occuring at the same place in the second list.

Redistribute lets you enter two strings, say "2 3 4" and "3 4 5", which would reclassify priorities 2->3, 3->4, and 4->5. "2 3 4" and "1 1 1" would collapse priorities 2, 3, and 4 to priority 1.

This allows you to shift priorities 2-4 down one notch and use the now empty level '2' for more refined prioritization of the clump of things currently coded as '2'.

Time menu

Show times & Hide times

Add or remove '<2 days, 45%>' type display of the time required and percent progress to each node.

'days' can be changed to 'hours' or 'weeks' or whatever by setting @string todo_time_name.

Removing / updating these strings in the node headlines relies on the '< ... >' being the last thing on the line, if you add anything after it it will no longer be touched by these functions.

The times shown are not updated automatically unless you use @project nodes.

Re-calc. time required

Starting with the selected node, this option explores all the child nodes and uses their time required and progress settings to re-calculate time required and progress.

Basically the time required and progress from pseudo-leaf nodes (nodes with no children that have time-required settings) is always preserved, but all non-leaf nodes are considered to be groups of tasks with no inherent time-required and progress-level of their own.

Consider this tree:

+ To do
        + Complete day
                + Dress
                        - Find shoes
                        - Tie shoes
                + Commute
                        - Start car
                        - Drive to work
                + Work
                        - Read email
                        - Write code

The leaf nodes are the ones on the right starting with '-'. Using 'Re-calc. time required' on ' Complete day' would add or replace the progress and time-required attributes of the non-leaf nodes to make them reflect the time-required / progress of their descendants. Note however that if say 'Commute' had a time-required value set and neither 'Start car' nor 'Drive to work' had any time-required setting, 'Commute''s setting would be left alone, it would be treated as a sort of effective leaf node in this context.

If you set up a tree like this:

+ Big project (100 days, 0%)
    - Set up SVN (1 day, 0%)

and then run the "Re-calc. time required" menu item on 'Big project', it's time-required will be reduced to 1 day. To avoid this you should add another leaf node, 'Rest of project', with a time-required of 99 days, after 'Set up SVN'. Or just pay no attention to the time-required on 'Big project' until you've made a more complete list of its sub-components.

The progress and times shown are not updated automatically unless you use @project nodes.

Clear derived times

This behaves like Re-calc. time required except instead of adding time and progress information it clears it.

Misc. menu

Clear all todo icons

Remove all icons generated by todo. The settings that created them are not lost and they may reappear, particularly in @project time trees. This function is seldom needed.

Show all todo icons

Regenerate all todo related icons. This function is seldom needed.

Clear todo from node

Clears all todo related info. from a node. NO undo!

Clear todo from subtree

Clears all todo related info. from a subtree. NO undo!

Clear todo from all

Clears all todo related info. from the whole tree. NO undo!

Other features

@project nodes

@project nodes can be used to make updates of progress dials and displayed times automatic.

Whenever you change the progress-level or time-required on a node, todo will search back up through the tree to find the highest level parent node with '@project' in the headline. todo will then execute Re-calc. time required on that node. If the node contains '@project time' (one space) the Show times will also be executed on that node.

Remember that when a @project node is present, attempts to remove progress and time required values may appear to fail as Re-calc. time required replaces them as you remove them.