diff --git a/ChangeLog b/ChangeLog index d7ad3ce27..f7339c666 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,6 +16,10 @@ 'task config' is now only used to set new configuration values. + Added feature #298, supporting a configurable number of future recurring tasks that are generated. + + Added feature #412, which allows the 'projects' and 'tags' commands to be + list all used projects/tags, not just the ones used in current pending tasks. + Controlled by the 'list.all.projects' and 'list.all.tags' configuration + variables (thanks to Dirk Deimeke). + Improvements to the man pages (thanks to T. Charles Yun). + Fixed bug #406 so that task now includes command aliases in the _commands helper command used by shell completion scripts. diff --git a/doc/man/taskrc.5 b/doc/man/taskrc.5 index a8d0a7493..c27f4ddbb 100644 --- a/doc/man/taskrc.5 +++ b/doc/man/taskrc.5 @@ -212,12 +212,24 @@ May be yes or no, and determines whether the tab completion scripts consider all the project names you have used, or just the ones used in active tasks. The default value is "no". +.TP +.B list.all.projects=yes +May be yes or no, and determines whether 'projects' command lists all the project +names you have used, or just the ones used in active tasks. The default value is +"no". + .TP .B complete.all.tags=yes May be yes or no, and determines whether the tab completion scripts consider all the tag names you have used, or just the ones used in active tasks. The default value is "no". +.TP +.B list.all.tags=yes +May be yes or no, and determines whether the 'tags' command lists all the tag +names you have used, or just the ones used in active tasks. The default value is +"no". + .TP .B search.case.sensitive=yes May be yes or no, and determines whether keyword lookup and substitutions on the diff --git a/src/Config.cpp b/src/Config.cpp index b698874d3..08ced4556 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -138,12 +138,14 @@ std::string Config::defaults = "\n" "_forcecolor=no # Forces color to be on, even for non TTY output\n" "blanklines=true # Use more whitespace in output\n" - "complete.all.projects=no # Include old project names in 'projects' command\n" // TODO - "complete.all.tags=no # Include old tag names in 'tags' command\n" // TODO + "complete.all.projects=no # Include old project names in '_projects' command\n" + "complete.all.tags=no # Include old tag names in '_ags' command\n" + "list.all.projects=no # Include old project names in 'projects' command\n" + "list.all.tags=no # Include old tag names in 'tags' command\n" "debug=no # Display diagnostics\n" "hooks=off # Hook system master switch\n" "fontunderline=yes # Uses underlines rather than -------\n" - "shell.prompt=task> # Prompt used by the shell command\n" // TODO + "shell.prompt=task> # Prompt used by the shell command\n" "\n" "# Import heuristics - alternate names for fields (comma-separated list of names)\n" "#import.synonym.bg=?\n" diff --git a/src/command.cpp b/src/command.cpp index 172d05ed0..fcdd42c9e 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -187,11 +187,15 @@ int handleProjects (std::string &outs) if (context.hooks.trigger ("pre-projects-command")) { std::stringstream out; - context.filter.push_back (Att ("status", "pending")); std::vector tasks; context.tdb.lock (context.config.getBoolean ("locking")); - int quantity = context.tdb.loadPending (tasks, context.filter); + int quantity; + if (context.config.getBoolean ("list.all.projects")) + quantity = context.tdb.load (tasks, context.filter); + else + quantity = context.tdb.loadPending (tasks, context.filter); + context.tdb.commit (); context.tdb.unlock (); @@ -318,11 +322,14 @@ int handleTags (std::string &outs) { std::stringstream out; - context.filter.push_back (Att ("status", "pending")); - std::vector tasks; context.tdb.lock (context.config.getBoolean ("locking")); - int quantity = context.tdb.loadPending (tasks, context.filter); + int quantity = 0; + if (context.config.getBoolean ("list.all.tags")) + quantity += context.tdb.load (tasks, context.filter); + else + quantity += context.tdb.loadPending (tasks, context.filter); + context.tdb.commit (); context.tdb.unlock (); diff --git a/src/tests/list.all.projects.t b/src/tests/list.all.projects.t new file mode 100755 index 000000000..e76aaaf23 --- /dev/null +++ b/src/tests/list.all.projects.t @@ -0,0 +1,69 @@ +#! /usr/bin/perl +################################################################################ +## task - a command line task list manager. +## +## Copyright 2006 - 2010, Paul Beckingham. +## All rights reserved. +## +## This program is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free Software +## Foundation; either version 2 of the License, or (at your option) any later +## version. +## +## This program is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +## details. +## +## You should have received a copy of the GNU General Public License along with +## this program; if not, write to the +## +## Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, +## Boston, MA +## 02110-1301 +## USA +## +################################################################################ + +use strict; +use warnings; +use Test::More tests => 10; + +# Create the rc file. +if (open my $fh, '>', 'projects.rc') +{ + print $fh "data.location=.\n"; + close $fh; + ok (-r 'projects.rc', 'Created projects.rc'); +} + +# Create a data set of two tasks, with unique project names, one +# pending, one completed. +qx{../task rc:projects.rc add project:p1 one}; +qx{../task rc:projects.rc add project:p2 two}; +qx{../task rc:projects.rc done 1}; +my $output = qx{../task rc:projects.rc ls}; +unlike ($output, qr/p1/, 'p1 done'); +like ($output, qr/p2/, 'p2 pending'); + +$output = qx{../task rc:projects.rc projects}; +unlike ($output, qr/p1/, 'p1 done'); +like ($output, qr/p2/, 'p2 pending'); + +$output = qx{../task rc:projects.rc rc.list.all.projects:yes projects}; +like ($output, qr/p1/, 'p1 listed'); +like ($output, qr/p2/, 'p2 listed'); + +# Cleanup. +unlink 'pending.data'; +ok (!-r 'pending.data', 'Removed pending.data'); + +unlink 'undo.data'; +ok (!-r 'undo.data', 'Removed undo.data'); + +unlink 'projects.rc'; +ok (!-r 'projects.rc', 'Removed projects.rc'); + +exit 0; + diff --git a/src/tests/list.all.tags.t b/src/tests/list.all.tags.t new file mode 100755 index 000000000..6b61e4cdc --- /dev/null +++ b/src/tests/list.all.tags.t @@ -0,0 +1,69 @@ +#! /usr/bin/perl +################################################################################ +## task - a command line task list manager. +## +## Copyright 2006 - 2010, Paul Beckingham. +## All rights reserved. +## +## This program is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free Software +## Foundation; either version 2 of the License, or (at your option) any later +## version. +## +## This program is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +## details. +## +## You should have received a copy of the GNU General Public License along with +## this program; if not, write to the +## +## Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, +## Boston, MA +## 02110-1301 +## USA +## +################################################################################ + +use strict; +use warnings; +use Test::More tests => 10; + +# Create the rc file. +if (open my $fh, '>', 'tags.rc') +{ + print $fh "data.location=.\n"; + close $fh; + ok (-r 'tags.rc', 'Created tags.rc'); +} + +# Create a data set of two tasks, with unique project names, one +# pending, one completed. +qx{../task rc:tags.rc add +t1 one}; +qx{../task rc:tags.rc add +t2 two}; +qx{../task rc:tags.rc done 1}; +my $output = qx{../task rc:tags.rc long}; +unlike ($output, qr/t1/, 't1 done'); +like ($output, qr/t2/, 't2 pending'); + +$output = qx{../task rc:tags.rc tags}; +unlike ($output, qr/t1/, 't1 done'); +like ($output, qr/t2/, 't2 pending'); + +$output = qx{../task rc:tags.rc rc.list.all.tags:yes tags}; +like ($output, qr/t1/, 't1 listed'); +like ($output, qr/t2/, 't2 listed'); + +# Cleanup. +unlink 'pending.data'; +ok (!-r 'pending.data', 'Removed pending.data'); + +unlink 'undo.data'; +ok (!-r 'undo.data', 'Removed undo.data'); + +unlink 'tags.rc'; +ok (!-r 'tags.rc', 'Removed tags.rc'); + +exit 0; +