ACME-2026
view release on metacpan or search on metacpan
script/acme2026 view on Meta::CPAN
'help|h' => \$help,
) or usage('Invalid options for complete');
usage() if $help;
my $id = shift @ARGV;
usage('complete requires an ID') unless defined $id && $id =~ /^\d+$/;
die "Plan file not found: $file\n" unless -e $file;
my $plan = plan_load($file);
complete_item($plan, $id, (defined $note ? (note => $note) : ()));
plan_save($plan, $file);
print "Completed [$id]\n";
exit 0;
}
if ($cmd eq 'list') {
my $file = default_file();
my ($status, $list, $sort, $help);
my @tags;
GetOptionsFromArray(
\@ARGV,
'file|f=s' => \$file,
'status|s=s' => \$status,
'list|l=s' => \$list,
'tag|t=s@' => \@tags,
'sort=s' => \$sort,
'help|h' => \$help,
) or usage('Invalid options for list');
usage() if $help;
my $plan = load_plan($file);
my %filters;
$filters{status} = $status if defined $status;
$filters{list} = $list if defined $list;
$filters{tags} = \@tags if @tags;
$filters{sort} = $sort if defined $sort;
my @items = items($plan, %filters);
if (!@items) {
print "No items\n";
exit 0;
}
for my $item (@items) {
my $tags = $item->{tags} && @{ $item->{tags} } ? join(',', @{ $item->{tags} }) : '-';
my $due = defined $item->{due} && length $item->{due} ? $item->{due} : '-';
my $line = join("\t",
$item->{id},
$item->{status},
$item->{list} || 'General',
$due,
'p' . ($item->{priority} || 0),
$tags,
$item->{title},
);
print "$line\n";
}
exit 0;
}
usage("Unknown command: $cmd");
__END__
=head1 NAME
acme2026 - Small CLI for ACME::2026 checklists
=head1 SYNOPSIS
acme2026 add "Run a marathon" --list Health --tag fitness --due 2026-10-01
acme2026 complete 1 --note "Signed up"
acme2026 list --status todo --sort due
=head1 DESCRIPTION
This script is a minimal wrapper around ACME::2026 for adding, completing,
and listing checklist items stored as JSON.
=cut
( run in 0.517 second using v1.01-cache-2.11-cpan-d8267643d1d )