diff options
Diffstat (limited to 'completions/slapt-src')
-rw-r--r-- | completions/slapt-src | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/completions/slapt-src b/completions/slapt-src new file mode 100644 index 0000000..1e3828c --- /dev/null +++ b/completions/slapt-src @@ -0,0 +1,68 @@ +# slapt-src(8) completion -*- shell-script -*- + +_slapt_src() +{ + local cur prev words cword split + _init_completion -s -n : || return + + case "$prev" in + --config | -c) + _filedir + return + ;; + --search | -s | --postprocess | -p) + # argument required but no completions available + return + ;; + esac + + $split && return + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur")) + if [[ ${COMPREPLY-} ]]; then + [[ $COMPREPLY == *= ]] && compopt -o nospace + return + fi + fi + + local i t + # search for last action (-i|-w|-b|-f) + for ((i = ${#words[@]} - 1; i > 0; i--)); do + if [[ ${words[i]} == -@([iwfb]|-install|-show|-build|-fetch) ]]; then + t="all" + break + fi + done + if [[ $t != all ]]; then + return + fi + + local config="/etc/slapt-get/slapt-srcrc" # default config location + # search for config + for ((i = ${#words[@]} - 1; i > 0; i--)); do + if [[ ${words[i]} == -@(c|-config) ]]; then + config="${words[i + 1]}" + __expand_tilde_by_ref config + break + fi + if [[ ${words[i]} == --config=?* ]]; then + config="${words[i]#*=}" + break + fi + done + [[ -r $config ]] || return + + if [[ $cur == *:* ]]; then + local name=${cur%:*} + COMPREPLY=($(LC_ALL=C "$1" --config "$config" --search "^$name" \ + 2>/dev/null | LC_ALL=C command sed -ne \ + "/^$cur/{s/^$name:\([^ ]*\) .*$/\1/;p}")) + else + COMPREPLY=($(LC_ALL=C "$1" --config "$config" --search "^$cur" \ + 2>/dev/null | LC_ALL=C command sed -ne "/^$cur/{s/ .*$//;p}")) + fi +} && + complete -F _slapt_src slapt-src + +# ex: filetype=sh |