summaryrefslogtreecommitdiff
path: root/p/tools/todo.pl
diff options
context:
space:
mode:
Diffstat (limited to 'p/tools/todo.pl')
-rw-r--r--p/tools/todo.pl36
1 files changed, 34 insertions, 2 deletions
diff --git a/p/tools/todo.pl b/p/tools/todo.pl
index c0fed89..ceee0f5 100644
--- a/p/tools/todo.pl
+++ b/p/tools/todo.pl
@@ -97,6 +97,26 @@ sub parse_dir
foreach @tododirs;
}
+# Drop empty nodes.
+sub drop_empty
+{
+ my ($todos) = @_;
+ for (keys %$todos)
+ {
+ if ($_)
+ {
+ # Recurse.
+ drop_empty ($$todos{$_});
+ # Drop if empty.
+ delete $$todos{$_} unless scalar keys %{$$todos{$_}};
+ }
+ else
+ {
+ delete $$todos{$_} unless scalar @{$$todos{$_}};
+ }
+ }
+}
+
# Output todo tree file.
sub output_tree
{
@@ -109,7 +129,6 @@ sub output_tree
});
$tt->process ('todo.' . $$config{'format'} . '.tt', {
'tasks' => $t,
- 'keep' => $$config{'keep-empty'},
'owner' => !defined $$config{'owner'},
})
or die $tt->error;
@@ -129,7 +148,9 @@ Options:
-f, --format=FORMAT Set the output format ('text' or 'html', defaults to
'text').
-k, --keep-empty Keep empty sections.
- -o, --owner=OWNER Output only task for OWNER
+ -o, --owner=OWNER Output only task for OWNER.
+ -O, --opened Output only opened tasks.
+ -s, --scheduled Output only scheduled task (i.e. with a deadline).
-d, --dump Dump todo hash instead of normal output.
-h, --help Print this help screen.
EOF
@@ -149,6 +170,8 @@ sub config
'format=s',
'keep-empty',
'owner=s',
+ 'open|O',
+ 'scheduled',
'dump|d',
'help',
) or die;
@@ -165,9 +188,18 @@ my $filter = sub {
{
return 0 unless grep { $_ eq $config{'owner'} } @{$t{'owners'}};
}
+ if ($config{'open'})
+ {
+ return 0 unless $t{'state'} =~ /[-=]/;
+ }
+ if ($config{'scheduled'})
+ {
+ return 0 unless defined $t{'deadline'};
+ }
1;
};
parse_dir (\%todos, '', $config{'todo-dir'}, $filter);
+drop_empty \%todos unless $config{'keep-empty'};
if (exists ($config{'dump'}))
{
use Data::Dumper;