#!perl

# Note: This script is a CLI  for Riap function /App/GenPericmdCompleterScript/gen_pericmd_completer_script
# and generated automatically using Perinci::CmdLine::Gen version 0.43

our $DATE = '2017-01-12'; # DATE
our $DIST = 'App-GenPericmdCompleterScript'; # DIST
our $VERSION = '0.10'; # VERSION

use 5.010001;
use strict;
use warnings;

use Perinci::CmdLine::Any;

Perinci::CmdLine::Any->new(
    url => "/App/GenPericmdCompleterScript/gen_pericmd_completer_script",
    program_name => "gen-pericmd-completer",
)->run;

# ABSTRACT: Generate Perinci::CmdLine completer script
# PODNAME: gen-pericmd-completer

__END__

=pod

=encoding UTF-8

=head1 NAME

gen-pericmd-completer - Generate Perinci::CmdLine completer script

=head1 VERSION

This document describes version 0.10 of gen-pericmd-completer (from Perl distribution App-GenPericmdCompleterScript), released on 2017-01-12.

=head1 SYNOPSIS

Usage:

 % gen-pericmd-completer [options] <program_name> <url>

=head1 OPTIONS

C<*> marks required options.

=head2 Main options

=over

=item B<--exclude-package-functions-match>=I<s>

Exclude package functions matching this pattern.

=item B<--include-package-functions-match>=I<s>

Only include package functions matching this pattern.

=item B<--interpreter-path>=I<s>

What to put on shebang line.

=item B<--load-module-json>=I<s>

Load extra modules (JSON-encoded).

See C<--load-module>.

=item B<--load-module>=I<s@>

Load extra modules.

Can be specified multiple times.

=item B<--program-name>=I<s>*

Program name that is being completed.

=item B<--subcommands-from-package-functions>

Form subcommands from functions under package's URL.

This is an alternative to the `subcommand` option. Instead of specifying each
subcommand's name and URL, you can also specify that subcommand names are from
functions under the package URL in `url`. So for example if `url` is `/My/App/`,
hen all functions under `/My/App` are listed first. If the functions are:

    foo
    bar
    baz_qux

then the subcommands become:

    foo => /My/App/foo
    bar => /My/App/bar
    "baz-qux" => /My/App/baz_qux


=back

=head2 Configuration options

=over

=item B<--config-path>=I<filename>

Set path to configuration file.

Can be specified multiple times.

=item B<--config-profile>=I<s>

Set configuration profile to use.

=item B<--no-config>

Do not use any configuration file.

=back

=head2 Environment options

=over

=item B<--no-env>

Do not read environment for default options.

=back

=head2 Output options

=over

=item B<--format>=I<s>

Choose output format, e.g. json, text.

Default value:

 undef

=item B<--json>

Set output format to json.

=item B<--naked-res>

When outputing as JSON, strip result envelope.

Default value:

 0

By default, when outputing as JSON, the full enveloped result is returned, e.g.:

    [200,"OK",[1,2,3],{"func.extra"=>4}]

The reason is so you can get the status (1st element), status message (2nd
element) as well as result metadata/extra result (4th element) instead of just
the result (3rd element). However, sometimes you want just the result, e.g. when
you want to pipe the result for more post-processing. In this case you can use
`--naked-res` so you just get:

    [1,2,3]


=item B<--output-file>=I<filename>, B<-o>

Path to output file.

Default value:

 "-"

=item B<--overwrite>

Whether to overwrite output if previously exists.

=back

=head2 Pericmd attribute options

=over

=item B<--completion-json>=I<s>

See C<--completion>.

=item B<--completion>=I<s>

=item B<--default-subcommand>=I<s>

=item B<--get-subcommand-from-arg>=I<i>

Default value:

 1

Valid values:

 [0,1,2]

=item B<--per-arg-json>

=item B<--per-arg-yaml>

=item B<--read-config>

=item B<--read-env>

=item B<--skip-format>

=item B<--subcommands-json>=I<s>, B<-s>

Hash of subcommand names and function URLs (JSON-encoded).

See C<--subcommands>.

=item B<--subcommands>=I<s>

Hash of subcommand names and function URLs.

Optionally, it can be additionally followed by a summary, so:

    URL[:SUMMARY]

Example (on CLI):

    --subcommand "delete=/My/App/delete_item:Delete an item"


=item B<--url>=I<s>*

URL to function (or package, if you have subcommands).

=back

=head2 Other options

=over

=item B<--help>, B<-h>, B<-?>

Display help message and exit.

=item B<--version>, B<-v>

Display program's version and exit.

=back

=head1 CONFIGURATION FILE

This script can read configuration files. Configuration files are in the format of L<IOD>, which is basically INI with some extra features.

By default, these names are searched for configuration filenames (can be changed using C<--config-path>): F<~/.config/gen-pericmd-completer.conf>, F<~/gen-pericmd-completer.conf>, or F</etc/gen-pericmd-completer.conf>.

All found files will be read and merged.

To disable searching for configuration files, pass C<--no-config>.

You can put multiple profiles in a single file by using section names like C<[profile=SOMENAME]> or C<[SOMESECTION profile=SOMENAME]>. Those sections will only be read if you specify the matching C<--config-profile SOMENAME>.

You can also put configuration for multiple programs inside a single file, and use filter C<program=NAME> in section names, e.g. C<[program=NAME ...]> or C<[SOMESECTION program=NAME]>. The section will then only be used when the reading program matches.

Finally, you can filter a section by environment variable using the filter C<env=CONDITION> in section names. For example if you only want a section to be read if a certain environment variable is true: C<[env=SOMEVAR ...]> or C<[SOMESECTION env=SOMEVAR ...]>. If you only want a section to be read when the value of an environment variable has value equals something: C<[env=HOSTNAME=blink ...]> or C<[SOMESECTION env=HOSTNAME=blink ...]>. If you only want a section to be read when the value of an environment variable does not equal something: C<[env=HOSTNAME!=blink ...]> or C<[SOMESECTION env=HOSTNAME!=blink ...]>. If you only want a section to be read when an environment variable contains something: C<[env=HOSTNAME*=server ...]> or C<[SOMESECTION env=HOSTNAME*=server ...]>. Note that currently due to simplistic parsing, there must not be any whitespace in the value being compared because it marks the beginning of a new section filter or section name.

List of available configuration parameters:

 completion (see --completion)
 default_subcommand (see --default-subcommand)
 exclude_package_functions_match (see --exclude-package-functions-match)
 format (see --format)
 get_subcommand_from_arg (see --get-subcommand-from-arg)
 include_package_functions_match (see --include-package-functions-match)
 interpreter_path (see --interpreter-path)
 load_module (see --load-module)
 naked_res (see --naked-res)
 output_file (see --output-file)
 overwrite (see --overwrite)
 per_arg_json (see --per-arg-json)
 per_arg_yaml (see --per-arg-yaml)
 program_name (see --program-name)
 read_config (see --read-config)
 read_env (see --read-env)
 skip_format (see --skip-format)
 subcommands (see --subcommands)
 subcommands_from_package_functions (see --subcommands-from-package-functions)
 url (see --url)

=head1 ENVIRONMENT

=head2 GEN_PERICMD_COMPLETER_OPT => str

Specify additional command-line options

=head1 FILES

~/.config/gen-pericmd-completer.conf

~/gen-pericmd-completer.conf

/etc/gen-pericmd-completer.conf

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/App-GenPericmdCompleterScript>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-App-GenPericmdCompleterScript>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=App-GenPericmdCompleterScript>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 AUTHOR

perlancar <perlancar@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut
