- The next report is now a custom report. There is also a nasty
piece of logic that lets the next report exist as a custom report,
and also with it's own handleReportNext function to prep and filter
the tasks, then hand off to runCustomReport.
- Broke out the guts of handleCustomReport into runCustomReport, so
that the next report can generate it's own task list, then allow the
custom report handling to render it. This means the next report is
essentially (but not quite) a custom report.
- Moved alias mapping to Context.
- Added Context::canonicalize to resolve aliases.
- Added Context::loadAliases to reload on config file change.
- Removed old alias processing from Cmd.
- Doesn't work yet, but the data is loaded.
- Added a tri-state confirmation function for confirming bulk operations
allowing the user to answer yes/no/all to and optionally allow,
disallow or bulk-allow big changes.
- .taskrc debug= now defaults to 'off', which will reduce clutter
and won't surprise beta testers.
- interactive.cpp did not compile when ncurses was not detected by
autoconf. That code branch obviously never got executed.
- The interactive shell now instructs the user to type 'quit' to
leave the shell.
- Fixed bug in calendar that failed to consider only pending tasks
when coloring in the calendar display, and when calculating the
most overdue task to be displayed.
- Modified util.cpp/formatSeconds to stop displaying fractional days,
because having a task age represented as 5.1 days is silly.
- Added new tips file, in the correct format (unix fortune), with
dummy entries. If we are to support a "task tip" command in future
versions, we need to start gathering the tips now.
- "debug" now considered a valid configuration variable.
- "alias.*" now considered a valid configuration variable.
- Moved some messages over to use Context::debug.
- When a task is added, the new ID is echoed back, for convenience.
This requires a scan of the pending file, so there is a performance
hit, and the feature is controlled by the FEATURE_NEW_ID define.
- Fixed bug whereby handleRecurrence was being called after the tasks
were loaded and filtered, and thus handleRecurrence operated on a
filtered set, and failed. The fix is to move the call to before the
TDB::load call, and to add another TDB::loadPending call inside
handleRecurrence. This means TDB::load needs to be reentrant without
re-reading the file, and can therefore be called twice, with the
likelihood of there being a different filter for each call. This in
turn led to the problem whereby handleRecurrence would generate the
synthetic tasks, which then sat uncommitted in TDB::mNew. The fix
for this is that every call to TDB::loadPending gets the contents of
TDB::mNew appended (with correct IDs). This bug is what you might
call a good one.
- Fixed oldest.t unit tests that relied on "task oldest 3" instead of
the new "task oldest limit:3".
- Fixed tag.t so that it uses example tags +one +two instead of the
original +1 +2, because when it comes time to remove those tags
with -1 -2, the tags are interpreted as a malformed sequence.
- Fixed but that required all known attributes to be listed by name
in order to be recognized by creating new Att::validInternalName
method.
- Fixed bug in non-global Subst that failed to save a modified
annotation.
- Fixed bug where "foo:bar" was not recognized as an attribute, and
generated an error rather than demoting is to part of the description.
- Fixed bug where en-passant deltas were applied only to the first task
in a sequence.
- Fixed various unit test.