devtodo - hierarchical task list
Allow user to specify defaults in ~/.todorc. Format could be something like: <option> <value> - identical to command line args but without the prefixed '--'.
Add facility to 'graft' an added note onto an existing one.
Add facility to change the file used as the input database. Perhaps --database <file>. This could be put in the ~/.todorc to make it permanent.
Ended up with two new options: --database <relative file> and --fallback-database <absolute file>. The first is used to change the default database from .todo to whatever while the second one is used to specify a fallback database file to use if no other can be found.
Add sub-tasks (1.1, 1.2, 1.2.1, etc.). Might have to add an index attribute to each item, which would be a floating point number.
In the end, it didn't require adding an index attribute.
Add support for TODORC environment variable (courtesy, Claude)
Add version checking so that if an older version uses a newer version database, it warns the user. Probably only major/medium version number checking needs to be done?
Allow branches to be reparented: --reparent <index> <newparent>
Automatically derive child item priority from parent item.
Change SYNTAX section in man page to SYNPOSIS (courtesy, Arthur Korn)
Chase down other temporary string bugs - I'm fairly sure there will be a few in there :( Found another one and squashed it.
Compile for different platforms on cf.sourceforge.net
FreeBSD compile has problems with regex - getting empty strings?
Do something other than fail on compile, if readline is not linkable.
Expand environment variables in ~/.todorc parsed strings. Useful for 'fallback-database $HOME/.todo'
Fix bug where pressing ^D to end input of a priority or text causes a seg-fault (courtesy, Matt Kraai)
Fix indenting weirdness.
Fix man page so that -r is no longer present, to reflect removal of this option (courtesy, Arthur Korn)
Fix multiple items being specified as seperate arguments always defaulting to last argument (courtesy, Arthur Korn)
Fix problem where todo won't access third teir items: 1.1.x
Fix up some minor man page problems
Instead of deleting items on tdr, mark them as done? Or have a new option "-d|--done" (tdd) for this?
Make -s (strip symbols) optional through --configure.
Also, use -g -Wall when debugging and use -DNDEBUG when not debugging.
Make some man pages.
Figure out how to generate man pages. Probably have to download some source code as an example.
Possibly learn how to use SGML? Or get some front-end that uses it. That would make it easier to generate other backends simultaneously, like .html and .man, from the one source.
Remove explicitly set CXXFLAGS in configure.in before releasing.
Sort items after editing so that the correct order is maintained.
Use some sort of template string for formatting output. For example, '%i%f%2n.%T' would generate the default display.
%<n?i: indent to current depth; <n> is the number of spaces per indent level and defaults to 4
%T is the item text, which wraps and indents to the depth the item started at
%t is unwrapped text
%p is the priority
%d is the date (formatted according to --format-date)
%n is the index number of the item
%f is the state flag (+ means children, - means done, * means children and done)
Validate arguments from ~/.todorc. It's not good to be able to put --add or --reparent in there. There should really only be a couple available: verbose, colour, etc.
Add facility to extract TODO entries in source code into .todo database. Perhaps an external script or something would be better?
Could be done with an option to the root node, such as: <todo mirror="true">
Minor bug where items with sub-items that are all marked done still get a + when children are filtered out.
Allow sorting in a variety of ways. One example of the usefulness of this is to sort done items after not done items - makes it easier to seperate them visually. Another example is sorting by finished date, created date, lifespan of item, etc.
a prefix of '-' will mean sort descending, '+' means sort ascending
Valid sort keys are
created - sort on created time
completed - sort on completed time
text - sort on text
priority - sort on priority
duration - sort on time item was open
done - sort on whether an item is done or not
eg. This is the default behaviour: todo --sort done,priority,-created
Warn if database is created with world or group read/write permissions.
If a sub-sub-item needs to be expanded and you are filtering with '-children' you have to first expand the parent then the child. This is probably not expected behaviour.
Allow formatting of time in --verbose display.
Add new filter options 'created=<date>[-<date>|,<date>]', 'completed=<date>[-<date>|,<date>]' and 'duration=<time>' to filtering code.
Add a 'current' marker to items? ie. mark the item you are currently working on so that it is easier to determine.
Default to medium priority if a blank line is entered in the priority input (thanks to Alexei Gilchrist).
Fix performance problems! (Alexei Gilchrist has reported >= 16 seconds on a file less than 20K. Not good.)
One problem was getline(string) - this is very slow. Changed it to use in.getline(char*, int) and it profiled a LOT faster.
Use of Lexer::iterator::operator ++ (int) - this causes a copy of the entire iterator - bad.
Added buffering code in XML::getBody - it *was* basically appending every single character individually - slow.
Instead of reading entire database with getline(in, str) I now use the size returned by stat to pre-allocate a buffer and load it into that.
Add --global-database <file> and -G/--global option to use it. Replaces clunky --fallback-database semantics. Thanks again to Alexei Gilchrist.
Re-add numbered priorities for speedy entry. Alexei Gilchrist bought this up as an idea.
Adding optional "hidden" notes to notes. Kind of like annotations. Invoke an external editor for this facility? (idea courtesy of Alexei Gilchrist).
I have added a comment field for each item, as evidenced by this.
Some sort of integration with CVS would be cool. Maybe you could do: "todo --cvs-commit" and it would commit to CVS using all the completed TODO items since the last commit as the change notes. That would be exceptionally cool.
Go binary? This would definitely make it run a lot faster...but is that actually where the bottleneck is? (Well, this was definitely the bottleneck)
Add --timeout <n> to only show database if shown more than <n> seconds ago.
Add encryption using crash::Encrypt classes. This will probably require MIME support, or something similar, in order to actually store the resultant binary information.
I have Base64 stream support, so this would be trivial now.
Alternatively, just pass the encryption stream to the database saving routine. This would require rewriting the Loaders interface (again).
Add per-database options - brilliant for changing views on different databases.
Problem with this is that the options are parsed *before* the database is loaded, which would probably mean reloading the database to have the new options take effect.
Add backing up of database (--backup [<n>], where <n> is the number of backups to keep).
Add percentage completions?
i18n support?
Detect terminal width and use that instead of hardwired 80 characters.
Rewrite filtering code so it's generic (as the sorting code is).
Write functions to do envar expansion, C string escaping, etc.
Add search facility. This could be done as a filter: todo --filter /string, which would make it simple when ommitting the '--filter': todo /string.
Change everything to be an attribute (except, perhaps, the item body). This will allow things like timers and so forth (eg. todo --add-attrib 'start=%D').
Timed events. eg. todo --set text="This is funny"@07/03/2001-10:53 12 ... this would change the text of item 12 to "This is funny" on the 07/03/2001 at 10:53 in the morning.
This is a test
Evaluate filters on first use rather than on read. This will allow wildcard filters to actually work.
Categories - optionally assign a note a category, then you can filter on that category.
Make priority names and number of them user-defineable.
Fix situation where doing "todo -r -5" goes into an endless loop.
Fix problems with * expansion. It doesn't appear to work at all...