App-Cmd
view release on metacpan or search on metacpan
lib/App/Cmd/Command/commands.pm view on Meta::CPAN
use strict;
use warnings;
package App::Cmd::Command::commands 0.340;
use App::Cmd::Command;
BEGIN { our @ISA = 'App::Cmd::Command' };
# ABSTRACT: list the application's commands
#pod =head1 DESCRIPTION
#pod
#pod This command will list all of the application commands available and their
#pod abstracts.
#pod
#pod =method execute
#pod
#pod This is the command's primary method and raison d'etre. It prints the
#pod application's usage text (if any) followed by a sorted listing of the
#pod application's commands and their abstracts.
#pod
#pod The commands are printed in sorted groups (created by C<sort_commands>); each
#pod group is set off by blank lines.
#pod
#pod =cut
sub opt_spec {
return (
[ 'stderr' => 'hidden' ],
[ 'for-completion', 'one per line, for use in tab completion scripts' ],
[ 'bash-completion', 'output a bash completion script for this application' ],
[ 'zsh-completion', 'output a zsh completion script for this application' ],
);
}
sub execute {
my ($self, $opt, $args) = @_;
my $target = $opt->stderr ? *STDERR : *STDOUT;
my @cmd_groups = $self->app->command_groups;
my @primary_commands = map { @$_ if ref $_ } @cmd_groups;
if (!@cmd_groups) {
@primary_commands =
grep { $_ ne 'version' or $self->app->{show_version} }
map { ($_->command_names)[0] }
$self->app->command_plugins;
@cmd_groups = $self->sort_commands(@primary_commands);
}
if ($opt->for_completion) {
print "$_\n" for map {; @$_ } @cmd_groups;
return;
}
if ($opt->bash_completion) {
$self->_print_bash_completion(\@cmd_groups);
return;
}
if ($opt->zsh_completion) {
$self->_print_zsh_completion(\@cmd_groups);
return;
}
my $fmt_width = 0;
for (@primary_commands) { $fmt_width = length if length > $fmt_width }
$fmt_width += 2; # pretty
foreach my $cmd_set (@cmd_groups) {
if (!ref $cmd_set) {
print { $target } "$cmd_set:\n";
next;
}
for my $command (@$cmd_set) {
my $abstract = $self->app->plugin_for($command)->abstract;
printf { $target } "%${fmt_width}s: %s\n", $command, $abstract;
}
print { $target } "\n";
}
}
#pod =method C<sort_commands>
#pod
#pod my @sorted = $cmd->sort_commands(@unsorted);
#pod
#pod This method orders the list of commands into groups which it returns as a list of
#pod arrayrefs, and optional group header strings.
#pod
#pod By default, the first group is for the "help" and "commands" commands, and all
#pod other commands are in the second group.
#pod
#pod This method can be overridden by implementing the C<commands_groups> method in
#pod your application base clase.
#pod
#pod =cut
( run in 1.641 second using v1.01-cache-2.11-cpan-f56aa216473 )