Awesome
appspec - A Tool for generating pod documentation and shell completion
appspec
is a tool working with specifications for command line tools. These
specifications are typically written in YAML.
The specification for appspec
itself can be found in
share/appspec-spec.yaml
.
It supports commands with and without subcommands, short (-v
) and
long options (--version
) and nested subcommands.
For completion you can specify a static list of values, or you can call an external command. If your program is written in perl and using App::Spec itself, you can also add a callback to your program. which allows quite intelligent completion.
Usage
appspec help
# Generate completion
appspec completion program.yaml --bash >program.bash
appspec completion program.yaml --zsh >_program
# Generate pod documentation
appspec pod program.yaml program.pod
# You could then use pod2man to create a manpage from it
# pod2man program.pod ...
# Generate a new perl App::Spec commandline tool skeleton
appspec help new
appspec new --name myprogram --class My::Program My-Program
Examples
You can see a list of examples in my completion collection [https://github.com/perlpunk/shell-completions].
In the jq
file
you will see a simple example of a static list of values:
- name: indent
type: integer
enum: [1,2,3,4,5,6,7,8]
summary: indent output using given number of spaces
In the mpath
file
you can find an example of how to call an external command:
parameters:
- name: module
summary: Module names
multiple: true
type: string
completion:
command_string: |
perl -E'use ExtUtils::Installed;say for ExtUtils::Installed->new(skip_cwd=>1)->modules'
Installation
This is a perl tool. In order to use it, you either need to install it from CPAN, or try the standalone version.
It should work for any perl version 5.10 or higher.
CPAN installation
You need to install the CPAN module App::AppSpec.
This can be done with the cpan
or cpanm
command:
% cpanm App::AppSpec
# or
% cpan App::AppSpec
The cpanm
command might be easier since it doesn't require configuration.
You need to install cpanminus
for that (e.g. apt-get install cpanminus
).
Standalone version
For a standalone version of the script, checkout the standalone
branch.
There you will find bin/appspec
.
It currently requires perl 5.20 or higher, otherwise you will get an error message.
Completion
You can find the shell completion files in the share/completion
directory.
Then you can complete like this:
appspec <TAB>
appspec completion -<TAB>
appspec completion --zsh file.yaml
bash
$ source share/completion/bash/appspec.bash
zsh
Add path/to/share/completion/zsh
to your .zshrc before the compinit call:
fpath=('path/to/App-AppSpec-p5/share/completion/zsh' $fpath)
and exec zsh
.