5个版本
使用旧的Rust 2015
0.1.5 | 2017年1月18日 |
---|---|
0.1.4 | 2016年12月10日 |
0.1.3 | 2016年10月29日 |
0.1.1 | 2016年7月30日 |
0.1.0 | 2016年7月14日 |
#596 in Unix API
19KB
230 行
clapcomp - clap完成生成器作为命令
CLI参数解析工具 - clap - 具有生成shell完成脚本的功能,本项目公开了这一能力!
现在,您可以通过单个命令生成shell完成脚本!
即使 非Rust项目 也可以从clap的完成生成器中受益,只需提供您的参数配置!
目录
安装
从 crate.io
$ cargo install clapcomp
从GitHub
$ cargo install --git https://github.com/wdv4758h/clapcomp/
下载预构建二进制文件
# by curl $ curl -O -J -L https://github.com/wdv4758h/clapcomp/releases/download/v0.1.5/clapcomp-v0.1.5-x86_64-unknown-linux-gnu.tar.gz # by wget $ wget https://github.com/wdv4758h/clapcomp/releases/download/v0.1.5/clapcomp-v0.1.5-x86_64-unknown-linux-gnu.tar.gz
用法
$ clapcomp --help clapcomp 0.1.5 clap completion generator as command USAGE: clapcomp [FLAGS] [OPTIONS] <input> FLAGS: -h, --help Prints help information --stdout output result to STDOUT -V, --version Prints version information OPTIONS: -f, --format <format> input format [default: yaml] [values: yaml] -d, --outdir <outdir> output directory -o, --outfile <outfile> output file -s, --shell <shell> target shell for completion [default: bash] [values: bash, fish, zsh, powershell] ARGS: <input> input file
# src/cli.yml.yml is this project's setting $ clapcomp src/cli.yml.yml --shell bash $ cat clapcomp.bash-completion _clapcomp() { local i cur prev opts cmds COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" cmd="" opts="" for i in ${COMP_WORDS[@]} do case "${i}" in clapcomp) cmd="clapcomp" ;; clapcomp) cmd+="_clapcomp" ;; *) ;; esac done case "${cmd}" in clapcomp) opts=" -f -s -d -o -h -V --format --shell --outdir --outfile --stdout --help --version <input> " if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 fi case "${prev}" in --format) COMPREPLY=($(compgen -W "yaml" -- ${cur})) return 0 ;; -f) COMPREPLY=($(compgen -W "yaml" -- ${cur})) return 0 ;; --shell) COMPREPLY=($(compgen -W "bash fish" -- ${cur})) return 0 ;; -s) COMPREPLY=($(compgen -W "bash fish" -- ${cur})) return 0 ;; --outdir) COMPREPLY=("<outdir>") return 0 ;; -d) COMPREPLY=("<outdir>") return 0 ;; --outfile) COMPREPLY=("<outfile>") return 0 ;; -o) COMPREPLY=("<outfile>") return 0 ;; *) COMPREPLY=() ;; esac COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 ;; esac } complete -F _clapcomp clapcomp
# src/cli.yml.yml is this project's setting $ clapcomp src/cli.yml.yml --shell fish $ cat clapcomp.fish function __fish_using_command set cmd (commandline -opc) if [ (count $cmd) -eq (count $argv) ] for i in (seq (count $argv)) if [ $cmd[$i] != $argv[$i] ] return 1 end end return 0 end return 1 end complete -c clapcomp -n "__fish_using_command clapcomp" -s f -l format -d "input format" -r -f -a "yaml" complete -c clapcomp -n "__fish_using_command clapcomp" -s s -l shell -d "target shell for completion" -r -f -a "bash fish" complete -c clapcomp -n "__fish_using_command clapcomp" -s d -l outdir -d "output directory" complete -c clapcomp -n "__fish_using_command clapcomp" -s o -l outfile -d "output file" complete -c clapcomp -n "__fish_using_command clapcomp" -l stdout -d "output result to STDOUT" complete -c clapcomp -n "__fish_using_command clapcomp" -s h -l help -d "Prints help information" complete -c clapcomp -n "__fish_using_command clapcomp" -s V -l version -d "Prints version information"
$ clapcomp src/cli.yml.yml --shell bash fish zsh powershell
关于二进制文件的信息
大小
x86_64, Linux(基于Arch Linux构建)
文件名 | 版本 | 是否经过精简? | 大小(字节) | 大小(MB) |
clapcomp | v0.1.5 | 否 | 3475304 | 3.4M |
clapcomp | v0.1.5 | 是 | 1142296 | 1.1M |
x86_64, Linux, musl(基于Arch Linux构建)
文件名 | 版本 | 是否经过精简? | 大小(字节) | 大小(MB) |
clapcomp | v0.1.5 | 否 | 3413112 | 3.3M |
clapcomp | v0.1.5 | 是 | 1185832 | 1.2M |
共享库依赖
x86_64, Linux(基于Arch Linux构建)
$ ldd ./target/release/clapcomp linux-vdso.so.1 (0x00007ffd8d5d1000) libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f8019d89000) libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f8019b73000) libc.so.6 => /usr/lib/libc.so.6 (0x00007f80197d2000) /lib64/ld-linux-x86-64.so.2 (0x00007f8019fa6000)
x86_64, Linux, musl(基于Arch Linux构建)
$ ldd ./target/x86_64-unknown-linux-musl/release/clapcomp not a dynamic executable
更新日志
尚未实现(计划)
- 支持从原始帮助信息生成
v0.1.5(2017-01-18)
其他
- 更新依赖关系
v0.1.4(2016-12-10)
功能
- 支持 zsh
- 支持powershell
v0.1.3(2016-10-29)
功能
- 添加fish完成
v0.1.2(2016-08-03)
功能
- 支持输出到STDOUT和特定文件
- 支持一次输出多个完成文件
v0.1.1(2016-07-30)
功能
- 支持 fish shell完成
v0.1.0(2016-07-14)
功能
- 支持 bash 完成脚本
注意
我只在我的x86_64 Linux上进行了测试。其他平台由CI构建。如果它们无法正常工作,请告诉我。
开发
制作发行版
- 在以下位置更新版本src/cli.yml
- 在以下位置更新版本Cargo.toml
- 在以下位置更新版本Cargo.lock
- 添加git标签
特别感谢
- rust-everywhere 用于CI集成
- clap-rs 用于参数解析
- Rust团队
- 以及我使用的每个项目
许可证
clapcomp遵循MIT许可证(与clap相同) - 详细信息请参阅LICENSE文件
依赖项
~1MB
~11K SLoC