<?xml version="1.0"?>
<todo version="0.1.19">
    <title>
        devtodo - hierarchical task list
    </title>
    <note priority="medium" time="0" done="987027026">
        Allow user to specify defaults in ~/.todorc. Format could be something like: &lt;option&gt; &lt;value&gt; - identical to command line args but without the prefixed '--'.
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Add facility to 'graft' an added note onto an existing one.
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Add facility to change the file used as the input database. Perhaps --database &lt;file&gt;. This could be put in the ~/.todorc to make it permanent.
        <note priority="medium" time="980645036" done="987887664">
            Ended up with two new options: --database &lt;relative file&gt; and --fallback-database &lt;absolute file&gt;. 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.
        </note>
    </note>
    <note priority="medium" time="980645036" done="987027202">
        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.
        <note priority="medium" time="980645036" done="987887671">
            In the end, it didn't require adding an index attribute.
        </note>
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Add support for TODORC environment variable (courtesy, Claude)
    </note>
    <note priority="medium" time="980645036" done="987027202">
        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?
    </note>
    <note priority="medium" time="980645036" done="987027043">
        Allow branches to be reparented: --reparent &lt;index&gt; &lt;newparent&gt;
    </note>
    <note priority="medium" time="980645036" done="987027043">
        Automatically derive child item priority from parent item.
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Change SYNTAX section in man page to SYNPOSIS (courtesy, Arthur Korn)
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Chase down other temporary string bugs - I'm fairly sure there will be a few in there :( Found another one and squashed it.
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Compile for different platforms on cf.sourceforge.net
        <note priority="medium" time="980645036" done="994178467">
            FreeBSD compile has problems with regex - getting empty strings?
        </note>
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Do something other than fail on compile, if readline is not linkable.
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Expand environment variables in ~/.todorc parsed strings. Useful for 'fallback-database $HOME/.todo'
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Fix bug where pressing ^D to end input of a priority or text causes a seg-fault (courtesy, Matt Kraai)
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Fix indenting weirdness.
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Fix man page so that -r is no longer present, to reflect removal of this option (courtesy, Arthur Korn)
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Fix multiple items being specified as seperate arguments always defaulting to last argument (courtesy, Arthur Korn)
    </note>
    <note priority="medium" time="980645036" done="987027026">
        Fix problem where todo won't access third teir items: 1.1.x
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Fix up some minor man page problems
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Instead of deleting items on tdr, mark them as done? Or have a new option "-d|--done" (tdd) for this?
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Make -s (strip symbols) optional through --configure.
        <note priority="medium" time="980645036" done="994178472">
            Also, use -g -Wall when debugging and use -DNDEBUG when not debugging.
        </note>
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Make some man pages.
        <note priority="medium" time="980645036" done="987887707">
            Figure out how to generate man pages. Probably have to download some source code as an example.
        </note>
        <note priority="medium" time="980645036" done="987887707">
            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.
        </note>
    </note>
    <note priority="medium" time="980645036" done="987027202">
        Remove explicitly set CXXFLAGS in configure.in before releasing.
    </note>
    <note priority="medium" time="980645036" done="987027043">
        Sort items after editing so that the correct order is maintained.
    </note>
    <note priority="medium" time="980645036" done="1002595646">
        Use some sort of template string for formatting output. For example, '%i%f%2n.%T' would generate the default display.
        <note priority="medium" time="987033135" done="987887698">
            %&lt;n?i: indent to current depth; &lt;n&gt; is the number of spaces per indent level and defaults to 4
        </note>
        <note priority="medium" time="987033255" done="987887698">
            %T is the item text, which wraps and indents to the depth the item started at
        </note>
        <note priority="medium" time="987033268" done="987887698">
            %t is unwrapped text
        </note>
        <note priority="medium" time="987033283" done="987887698">
            %p is the priority
        </note>
        <note priority="medium" time="987033395" done="987887698">
            %d is the date (formatted according to --format-date)
        </note>
        <note priority="medium" time="987180915" done="987887698">
            %n is the index number of the item
        </note>
        <note priority="medium" time="987180954" done="987887698">
            %f is the state flag (+ means children, - means done, * means children and done)
        </note>
    </note>
    <note priority="medium" time="980645036" done="987027202">
        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.
    </note>
    <note priority="verylow" time="980645036">
        Add facility to extract TODO entries in source code into .todo database. Perhaps an external script or something would be better?
        <note priority="verylow" time="980645036">
            Could be done with an option to the root node, such as: &lt;todo mirror="true"&gt;
        </note>
    </note>
    <note priority="verylow" time="980645036">
        Minor bug where items with sub-items that are all marked done still get a + when children are filtered out.
    </note>
    <note priority="high" time="987027358" done="987210991">
        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.
        <note priority="high" time="987181145" done="987887619">
            a prefix of '-' will mean sort descending, '+' means sort ascending
        </note>
        <note priority="high" time="987181280" done="987887619">
            Valid sort keys are
            <note priority="high" time="987181204" done="987887648">
                created - sort on created time
            </note>
            <note priority="high" time="987181213" done="987887648">
                completed - sort on completed time
            </note>
            <note priority="high" time="987181261" done="987887648">
                text - sort on text
            </note>
            <note priority="high" time="987181269" done="987887648">
                priority - sort on priority
            </note>
            <note priority="high" time="987181480" done="987887648">
                duration - sort on time item was open
            </note>
            <note priority="high" time="987181597" done="987887648">
                done - sort on whether an item is done or not
            </note>
        </note>
        <note priority="high" time="987181770" done="987887619">
            eg. This is the default behaviour: todo --sort done,priority,-created
        </note>
    </note>
    <note priority="low" time="987034479" done="987180061">
        Warn if database is created with world or group read/write permissions.
    </note>
    <note priority="verylow" time="987181399" done="994178421">
        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.
    </note>
    <note priority="low" time="987182780" done="987293958">
        Allow formatting of time in --verbose display.
    </note>
    <note priority="medium" time="987187139">
        Add new filter options 'created=&lt;date&gt;[-&lt;date&gt;|,&lt;date&gt;]', 'completed=&lt;date&gt;[-&lt;date&gt;|,&lt;date&gt;]' and 'duration=&lt;time&gt;' to filtering code.
    </note>
    <note priority="medium" time="987188566">
        Add a 'current' marker to items? ie. mark the item you are currently working on so that it is easier to determine.
    </note>
    <note priority="high" time="987554480" done="987554583">
        Default to medium priority if a blank line is entered in the priority input (thanks to Alexei Gilchrist).
    </note>
    <note priority="veryhigh" time="987554520" done="987861021">
        Fix performance problems! (Alexei Gilchrist has reported &gt;= 16 seconds on a file less than 20K. Not good.)
        <note priority="veryhigh" time="987628779" done="987640630">
            One problem was getline(string) - this is very slow. Changed it to use in.getline(char*, int) and it profiled a LOT faster.
        </note>
        <note priority="veryhigh" time="987628813" done="987640630">
            Use of Lexer::iterator::operator ++ (int) - this causes a copy of the entire iterator - bad.
        </note>
        <note priority="veryhigh" time="987629226" done="987640630">
            Added buffering code in XML::getBody - it *was* basically appending every single character individually - slow.
        </note>
        <note priority="veryhigh" time="987630068" done="987640630">
            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.
        </note>
    </note>
    <note priority="high" time="987554577" done="988586079">
        Add --global-database &lt;file&gt; and -G/--global option to use it. Replaces clunky --fallback-database semantics. Thanks again to Alexei Gilchrist.
    </note>
    <note priority="low" time="987554607" done="988071870">
        Re-add numbered priorities for speedy entry. Alexei Gilchrist bought this up as an idea.
    </note>
    <note priority="medium" time="987554720">
        Adding optional "hidden" notes to notes. Kind of like annotations. Invoke an external editor for this facility? (idea courtesy of Alexei Gilchrist).
        <comment>
            I have added a comment field for each item, as evidenced by this.
        </comment>
    </note>
    <note priority="low" time="987556665">
        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.
    </note>
    <note priority="high" time="987639265" done="987821157">
        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)
    </note>
    <note priority="veryhigh" time="987673942" done="988628559">
        Add --timeout &lt;n&gt; to only show database if shown more than &lt;n&gt; seconds ago.
    </note>
    <note priority="medium" time="987715214">
        Add encryption using crash::Encrypt classes. This will probably require MIME support, or something similar, in order to actually store the resultant binary information.
        <comment>
            I have Base64 stream support, so this would be trivial now.
        </comment>
        <note priority="medium" time="987882179">
            Alternatively, just pass the encryption stream to the database saving routine. This would require rewriting the Loaders interface (again).
        </note>
    </note>
    <note priority="medium" time="987723307">
        Add per-database options - brilliant for changing views on different databases.
        <note priority="medium" time="988071964">
            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.
        </note>
    </note>
    <note priority="veryhigh" time="987864991" done="987866368">
        Add backing up of database (--backup [&lt;n&gt;], where &lt;n&gt; is the number of backups to keep).
    </note>
    <note priority="medium" time="988583933">
        Add percentage completions?
    </note>
    <note priority="medium" time="988585139">
        i18n support?
    </note>
    <note priority="medium" time="988628849" done="988671949">
        Detect terminal width and use that instead of hardwired 80 characters.
    </note>
    <note priority="medium" time="988727782">
        Rewrite filtering code so it's generic (as the sorting code is).
    </note>
    <note priority="medium" time="989159408">
        Write functions to do envar expansion, C string escaping, etc.
    </note>
    <note priority="high" time="989597943" done="993654280">
        Add search facility. This could be done as a filter: todo --filter /string, which would make it simple when ommitting the '--filter': todo /string.
    </note>
    <note priority="high" time="990555168">
        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').
        <note priority="veryhigh" time="989408664">
            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.
        </note>
        <note priority="high" time="1040227861" done="1040227866">
            This is a test
        </note>
    </note>
    <note priority="low" time="994279770">
        Evaluate filters on first use rather than on read. This will allow wildcard filters to actually work.
    </note>
    <note priority="medium" time="1002204052">
        Categories - optionally assign a note a category, then you can filter on that category.
    </note>
    <note priority="medium" time="1002594023">
        Make priority names and number of them user-defineable.
    </note>
    <note priority="veryhigh" time="1003071835">
        Fix situation where doing "todo -r -5" goes into an endless loop.
    </note>
    <note priority="veryhigh" time="1036076001">
        Fix problems with * expansion. It doesn't appear to work at all...
    </note>
</todo>
