NAME

Term::CLI::Command::Help - A generic 'help' command for Term::CLI

VERSION

version 0.053003

SYNOPSIS

use Term::CLI;

my $cli = Term::CLI->new(
   name => 'myapp',
   prompt => 'myapp> ',
   commands => [
       Term::CLI::Command::Help->new(),
       Term::CLI::Command->new( name => 'copy', ... ),
       Term::CLI::Command->new( name => 'move', ... ),
   ],
);

$cli->execute('help');
# -> command summary

say "\n----\n";

$cli->execute('help copy');
# -> detailed help on 'copy'.

(See EXAMPLE for a working example.)

DESCRIPTION

The Term::CLI::Command::Help class is derived from Term::CLI::Command(3p) and implements a generic "help" command for Term::CLI(3p) applications.

The help command accepts arguments that it will try to match against the commands of its Term::CLI(3p) parent.

It supports completion, as well as a --pod option to dump raw POD text, and a --all option to show a command summary followed by extended help on each commands.

CONSTRUCTORS

new

Create a new Term::CLI::Command::Help object and return a reference to it.

The object provides appropriate default values for all attributes, so there is no need to provide any.

If you want, you can override the default attributes; in that case, see the Term::CLI::Command(3p) documentation. Attributes that are "safe" to override are:

description => Str

Override the default description for the help command.

name => Str

Override the name for the help command. Default is help.

pager => ArrayRef[Str]

Override the default pager for help display. See OUTPUT PAGING. The value should be a command line split on words, e.g.:

OBJ->pager( [ 'cat', '-n', '-e' ] );

If an empty list is provided, no external pager will be used, and output is printed to STDOUT directly.

See also the pager method.

summary =>

Override the default summary for the help command.

usage =>

Override the automatic usage string for the help command.

METHODS

pager ( [ ArrayRef[Str]> ] )

Get or set the pager command. If an empty list is provided, no external pager will be used, and output is printed to STDOUT directly.

Example:

$help_cmd->pager([]); # Print directly to STDOUT.
$help_cmd->pager([ 'cat', '-n' ]); # Number output lines.

OUTPUT FORMATTING

Help text is assumed to be in POD format, and will be formatted for the terminal using Pod::Text::Termcap(3p).

OUTPUT PAGING

The help command will try to pipe the formatted output through a suitable pager.

At startup, the pager is selected from the following list, in order of preference: less, more, pg, STDOUT.

This can be overridden by supplying a value to the object's pager attribute.

EXAMPLE

Using the following code:

use Term::CLI;

my $cli = Term::CLI->new(
    name => 'myapp',
    prompt => 'myapp> ',
    commands => [
        Term::CLI::Command::Help->new(),

        Term::CLI::Command->new(
            name => 'copy',
            options => [ 'verbose!' ],
            summary => 'copy I<src> to I<dst>',
            description =>
                qq{Copy I<src> to I<dst>.\n}
                .qq{Show progress if C<--verbose> is given.},
            arguments => [
                Term::CLI::Argument::Filename->new(name => 'src'),
                Term::CLI::Argument::Filename->new(name => 'dst'),
            ],
        ),
        Term::CLI::Command->new(
            name => 'move',
            options => [ 'verbose!' ],
            summary => 'move I<src> to I<dst>',
            description =>
                qq{Move I<src> to I<dst>.\n}
                .qq{Move progress if C<--verbose> is given.},
            arguments => [
                Term::CLI::Argument::Filename->new(name => 'src'),
                Term::CLI::Argument::Filename->new(name => 'dst'),
            ],
        )
    ],
);

say "\n----\n";

$cli->execute('help');
# -> command summary

say "\n----\n";

$cli->execute('help copy');
# -> detailed help on 'copy'.

The output would look something like this:

----

  Commands:
    help [cmd ...]                      Show help.
    copy src dst                        copy src to dst
    move src dst                        move src to dst

----

  Usage:
    copy [--verbose] src dst

  Description:
    Copy src to dst. Show progress if "--verbose" is given.

----

SEE ALSO

cat(1), less(1), more(1), perlpod(1), pg(1), Pod::Text::Termcap(3p). Term::CLI(3p), Term::CLI::Command(3p).

AUTHOR

Steven Bakker <sbakker@cpan.org>, 2018.

COPYRIGHT AND LICENSE

Copyright (c) 2018 Steven Bakker

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See "perldoc perlartistic."

This software 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.