———#!/usr/bin/perl
use
Text::Todo::Simple;
use
warnings;
use
strict;
=head1 NAME
t.pl - Command-line frontend to Text::Todo::Simple
=head1 VERSION
Version 0.06
=cut
our
$VERSION
=
'0.06'
;
=head1 SYNOPSIS
t.pl [ACTION] [ARGS]
Actions:
add, a TEXT
do ID
remove, rm ID
list, ls [STRING]
move, mv ID NEW
edit, ed ID TEXT
=cut
my
(
$default_todo
,
$default_done
);
if
($^O eq
'MSWin32'
) {
$default_todo
=
$ENV
{USERPROFILE}.
"\\todo.txt"
;
$default_done
=
$ENV
{USERPROFILE}.
"\\done.txt"
;
}
else
{
$default_todo
=
$ENV
{HOME}.
"/.todo"
;
$default_done
=
$ENV
{HOME}.
"/.done"
;
}
my
$todo_file
=
$ENV
{TODO_FILE} ?
$ENV
{TODO_FILE} :
$default_todo
;
my
$done_file
=
$ENV
{DONE_FILE} ?
$ENV
{DONE_FILE} :
$default_done
;
my
$default_action
=
$ENV
{TODO_DEFAULT} ?
$ENV
{TODO_DEFAULT} :
'help'
;
my
$todo
= Text::Todo::Simple -> new(
todo_file
=>
$todo_file
,
done_file
=>
$done_file
);
my
%actions
= (
add
=> \
&add
,
do
=> \
&do
,
remove
=> \
&remove
,
list
=> \
&list
,
move
=> \
&move
,
edit
=> \
&edit
,
help
=> \
&help
);
my
%aliases
= (
a
=>
'add'
,
rm
=>
'remove'
,
ls
=>
'list'
,
mv
=>
'move'
,
ed
=>
'edit'
);
my
$action
=
$ARGV
[0];
if
(
$action
&&
$aliases
{
$action
}) {
$action
=
$aliases
{
$action
};
shift
@ARGV
;
}
elsif
(!
$action
|| !
$actions
{
$action
}) {
$action
=
$default_action
;
}
elsif
(
$actions
{
$action
}) {
shift
@ARGV
;
}
$actions
{
$action
} -> (
@ARGV
);
sub
add {
my
$task
=
join
' '
,
@_
;
my
$i
=
$todo
-> add(
$task
);
"Added task $i\n"
;
}
sub
do
{
$todo
->
do
(
@_
);
"Done task "
.
shift
().
"\n"
;
}
sub
remove {
$todo
-> remove(
@_
);
"Removed task "
.
shift
().
"\n"
;
}
sub
list {
$todo
-> list(
@_
); }
sub
move {
$todo
-> move(
@_
);
"Moved task "
.
$_
[0].
" to "
.
$_
[1].
"\n"
;
}
sub
edit {
my
$id
=
shift
;
my
$task
=
join
' '
,
@_
;
chomp
$task
;
$todo
-> edit(
$id
,
$task
);
"Replaced task $id\n"
;
}
sub
help {
my
$usage
=
<<END;
Usage: t.pl [ACTION] [ARGS]
Actions:
add, a TEXT
remove, rm ID
list, ls [STRING]
move, mv ID NEW
edit, ed ID TEXT
See 'perldoc t.pl' for more information.
END
$usage
;
}
=head1 ACTION
=over 4
=item B<add>, B<a> TEXT
add a task to the list
=item B<do> ID
mark a task as done, and move it to done file
=item B<remove>, B<rm> ID
remove a task from the list
=item B<list>, B<ls> [STRING]
list tasks containing STRING (can be empty)
=item B<move>, B<mv> ID NEW
move a task from ID to NEW
=item B<edit>, B<ed> ID TEXT
replace the task ID with TEXT
=back
=head1 CONFIGURATION
The following environment variables will affect t.pl behaviour:
=over
=item B<TODO_FILE>
Specifies the path of the todo file. Default ~/.todo
=item B<DONE_FILE>
Specifies the path of the done file. Default ~/.done
=item B<TODO_DEFAULT>
Set the default action, this will be used when no action is specified.
Default 'list'
=back
=head1 AUTHOR
Alessandro Ghedini, C<< <alexbio at cpan.org> >>
=head1 BUGS
Please report any bugs or feature requests to C<bug-text-todo-simple at rt.cpan.org>, or through
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Text-Todo-Simple>. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Text::Todo::Simple
perldoc t.pl
You can also look for information at:
=over 4
=item * GitHub page
=item * RT: CPAN's request tracker
=item * AnnoCPAN: Annotated CPAN documentation
=item * CPAN Ratings
=item * Search CPAN
=back
=head1 SEE ALSO
L<Text::Todo::Simple>
=head1 LICENSE AND COPYRIGHT
Copyright 2010 Alessandro Ghedini.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
=cut