- Fix performance problems! (Alexei Gilchrist has reported >= 16 seconds on a
  file less than 20K. Not good.)
  (added 18/04/01, 10:42, completed on 21/04/01, 23:50, priority veryhigh)

  - One problem was getline(string) - this is very slow. Changed it to use
    in.getline(char*, int) and it profiled a LOT faster.
    (added 19/04/01, 07:19, completed on 19/04/01, 10:37, priority veryhigh)

  - Use of Lexer::iterator::operator ++ (int) - this causes a copy of the entire
    iterator - bad.
    (added 19/04/01, 07:20, completed on 19/04/01, 10:37, priority veryhigh)

  - Added buffering code in XML::getBody - it *was* basically appending every
    single character individually - slow.
    (added 19/04/01, 07:27, completed on 19/04/01, 10:37, priority veryhigh)

  - 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.
    (added 19/04/01, 07:41, completed on 19/04/01, 10:37, priority veryhigh)

- Add --timeout <n> to only show database if shown more than <n> seconds ago.
  (added 19/04/01, 19:52, completed on 30/04/01, 21:02, priority veryhigh)

- Add backing up of database (--backup [<n>], where <n> is the number of backups
  to keep).
  (added 22/04/01, 00:56, completed on 22/04/01, 01:19, priority veryhigh)

- Fix situation where doing "todo -r -5" goes into an endless loop.
  (added 15/10/01, 01:03, incomplete, priority veryhigh)

- Fix problems with * expansion. It doesn't appear to work at all...
  (added 01/11/02, 01:53, incomplete, priority veryhigh)

- 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.
  (added 12/04/01, 08:15, completed on 14/04/01, 11:16, priority high)

  - a prefix of '-' will mean sort descending, '+' means sort ascending
    (added 14/04/01, 02:59, completed on 22/04/01, 07:13, priority high)

  - Valid sort keys are
    (added 14/04/01, 03:01, completed on 22/04/01, 07:13, priority high)

    - created - sort on created time
      (added 14/04/01, 03:00, completed on 22/04/01, 07:14, priority high)

    - completed - sort on completed time
      (added 14/04/01, 03:00, completed on 22/04/01, 07:14, priority high)

    - text - sort on text
      (added 14/04/01, 03:01, completed on 22/04/01, 07:14, priority high)

    - priority - sort on priority
      (added 14/04/01, 03:01, completed on 22/04/01, 07:14, priority high)

    - duration - sort on time item was open
      (added 14/04/01, 03:04, completed on 22/04/01, 07:14, priority high)

    - done - sort on whether an item is done or not
      (added 14/04/01, 03:06, completed on 22/04/01, 07:14, priority high)

  - eg. This is the default behaviour: todo --sort done,priority,-created
    (added 14/04/01, 03:09, completed on 22/04/01, 07:13, priority high)

- Default to medium priority if a blank line is entered in the priority input
  (thanks to Alexei Gilchrist).
  (added 18/04/01, 10:41, completed on 18/04/01, 10:43, priority high)

- Add --global-database <file> and -G/--global option to use it. Replaces clunky
  --fallback-database semantics. Thanks again to Alexei Gilchrist.
  (added 18/04/01, 10:42, completed on 30/04/01, 09:14, priority high)

- 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)
  (added 19/04/01, 10:14, completed on 21/04/01, 12:45, priority high)

- Add search facility. This could be done as a filter: todo --filter /string,
  which would make it simple when ommitting the '--filter': todo /string.
  (added 12/05/01, 02:19, completed on 28/06/01, 01:04, priority high)

- 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').
  (added 23/05/01, 04:12, incomplete, priority high)

  - 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.
    (added 09/05/01, 21:44, incomplete, priority veryhigh)

- Allow user to specify defaults in ~/.todorc. Format could be something like:
  <option> <value> - identical to command line args but without the prefixed
  '--'.
  (added 01/01/70, 10:00, completed on 12/04/01, 08:10, priority medium)

- Add facility to 'graft' an added note onto an existing one.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- 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.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

  - 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.
    (added 28/01/01, 12:23, completed on 22/04/01, 07:14, priority medium)

- 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.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

  - In the end, it didn't require adding an index attribute.
    (added 28/01/01, 12:23, completed on 22/04/01, 07:14, priority medium)

- Add support for TODORC environment variable (courtesy, Claude)
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- 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?
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Allow branches to be reparented: --reparent <index> <newparent>
  (added 28/01/01, 12:23, completed on 12/04/01, 08:10, priority medium)

- Automatically derive child item priority from parent item.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:10, priority medium)

- Change SYNTAX section in man page to SYNPOSIS (courtesy, Arthur Korn)
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Chase down other temporary string bugs - I'm fairly sure there will be a few
  in there :( Found another one and squashed it.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Compile for different platforms on cf.sourceforge.net
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

  - FreeBSD compile has problems with regex - getting empty strings?
    (added 28/01/01, 12:23, completed on 04/07/01, 02:41, priority medium)

- Do something other than fail on compile, if readline is not linkable.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Expand environment variables in ~/.todorc parsed strings. Useful for
  'fallback-database $HOME/.todo'
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Fix bug where pressing ^D to end input of a priority or text causes a
  seg-fault (courtesy, Matt Kraai)
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Fix indenting weirdness.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Fix man page so that -r is no longer present, to reflect removal of this
  option (courtesy, Arthur Korn)
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Fix multiple items being specified as seperate arguments always defaulting to
  last argument (courtesy, Arthur Korn)
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Fix problem where todo won't access third teir items: 1.1.x
  (added 28/01/01, 12:23, completed on 12/04/01, 08:10, priority medium)

- Fix up some minor man page problems
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Instead of deleting items on tdr, mark them as done? Or have a new option
  "-d|--done" (tdd) for this?
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Make -s (strip symbols) optional through --configure.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

  - Also, use -g -Wall when debugging and use -DNDEBUG when not debugging.
    (added 28/01/01, 12:23, completed on 04/07/01, 02:41, priority medium)

- Make some man pages.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

  - Figure out how to generate man pages. Probably have to download some source
    code as an example.
    (added 28/01/01, 12:23, completed on 22/04/01, 07:15, priority medium)

  - 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.
    (added 28/01/01, 12:23, completed on 22/04/01, 07:15, priority medium)

- Remove explicitly set CXXFLAGS in configure.in before releasing.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Sort items after editing so that the correct order is maintained.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:10, priority medium)

- Use some sort of template string for formatting output. For example,
  '%i%f%2n.%T' would generate the default display.
  (added 28/01/01, 12:23, completed on 09/10/01, 12:47, priority medium)

  - %<n?i: indent to current depth; <n> is the number of spaces per indent level
    and defaults to 4
    (added 12/04/01, 09:52, completed on 22/04/01, 07:14, priority medium)

  - %T is the item text, which wraps and indents to the depth the item started
    at
    (added 12/04/01, 09:54, completed on 22/04/01, 07:14, priority medium)

  - %t is unwrapped text
    (added 12/04/01, 09:54, completed on 22/04/01, 07:14, priority medium)

  - %p is the priority
    (added 12/04/01, 09:54, completed on 22/04/01, 07:14, priority medium)

  - %d is the date (formatted according to --format-date)
    (added 12/04/01, 09:56, completed on 22/04/01, 07:14, priority medium)

  - %n is the index number of the item
    (added 14/04/01, 02:55, completed on 22/04/01, 07:14, priority medium)

  - %f is the state flag (+ means children, - means done, * means children and
    done)
    (added 14/04/01, 02:55, completed on 22/04/01, 07:14, priority medium)

- 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.
  (added 28/01/01, 12:23, completed on 12/04/01, 08:13, priority medium)

- Add new filter options 'created=<date>[-<date>|,<date>]',
  'completed=<date>[-<date>|,<date>]' and 'duration=<time>' to filtering code.
  (added 14/04/01, 04:38, incomplete, priority medium)

- Add a 'current' marker to items? ie. mark the item you are currently working
  on so that it is easier to determine.
  (added 14/04/01, 05:02, incomplete, priority medium)

- Adding optional "hidden" notes to notes. Kind of like annotations. Invoke an
  external editor for this facility? (idea courtesy of Alexei Gilchrist).
  (added 18/04/01, 10:45, incomplete, priority medium)

- Add encryption using crash::Encrypt classes. This will probably require MIME
  support, or something similar, in order to actually store the resultant binary
  information.
  (added 20/04/01, 07:20, incomplete, priority medium)

  - Alternatively, just pass the encryption stream to the database saving
    routine. This would require rewriting the Loaders interface (again).
    (added 22/04/01, 05:42, incomplete, priority medium)

- Add per-database options - brilliant for changing views on different
  databases.
  (added 20/04/01, 09:35, incomplete, priority medium)

  - 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.
    (added 24/04/01, 10:26, incomplete, priority medium)

- Add percentage completions?
  (added 30/04/01, 08:38, incomplete, priority medium)

- i18n support?
  (added 30/04/01, 08:58, incomplete, priority medium)

- Detect terminal width and use that instead of hardwired 80 characters.
  (added 30/04/01, 21:07, completed on 01/05/01, 09:05, priority medium)

- Rewrite filtering code so it's generic (as the sorting code is).
  (added 02/05/01, 00:36, incomplete, priority medium)

- Write functions to do envar expansion, C string escaping, etc.
  (added 07/05/01, 00:30, incomplete, priority medium)

- Categories - optionally assign a note a category, then you can filter on that
  category.
  (added 05/10/01, 00:00, incomplete, priority medium)

- Make priority names and number of them user-defineable.
  (added 09/10/01, 12:20, incomplete, priority medium)

- Warn if database is created with world or group read/write permissions.
  (added 12/04/01, 10:14, completed on 14/04/01, 02:41, priority low)

- Allow formatting of time in --verbose display.
  (added 14/04/01, 03:26, completed on 15/04/01, 10:19, priority low)

- Re-add numbered priorities for speedy entry. Alexei Gilchrist bought this up
  as an idea.
  (added 18/04/01, 10:43, completed on 24/04/01, 10:24, priority low)

- 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.
  (added 18/04/01, 11:17, incomplete, priority low)

- Evaluate filters on first use rather than on read. This will allow wildcard
  filters to actually work.
  (added 05/07/01, 06:49, incomplete, priority low)

- Add facility to extract TODO entries in source code into .todo database.
  Perhaps an external script or something would be better?
  (added 28/01/01, 12:23, incomplete, priority verylow)

  - Could be done with an option to the root node, such as: <todo mirror="true">
    (added 28/01/01, 12:23, incomplete, priority verylow)

- Minor bug where items with sub-items that are all marked done still get a +
  when children are filtered out.
  (added 28/01/01, 12:23, incomplete, priority verylow)

- 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.
  (added 14/04/01, 03:03, completed on 04/07/01, 02:40, priority verylow)

