diff options
Diffstat (limited to 'completions/slapt-src')
-rw-r--r-- | completions/slapt-src | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/completions/slapt-src b/completions/slapt-src new file mode 100644 index 00000000..976ef65e --- /dev/null +++ b/completions/slapt-src @@ -0,0 +1,60 @@ +# slapt-src completion -*- shell-script -*- + +_slapt_src() +{ + local cur prev words cword + _init_completion -n : || return + + case "$prev" in + --config|-c) + _filedir + return 0 + ;; + --search|-s|--postprocess|-p) + # argument required but no completions available + return 0 + ;; + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '$( _parse_help "$1" --help )' -- "$cur" ) ) + [[ $COMPREPLY == *= ]] && compopt -o nospace + [[ $COMPREPLY ]] && return 0 + fi + + local i t + # search for last action (-i|-w|-b|-f) + for (( i=${#words[@]}-1; i>0; i-- )); do + if [[ ${words[i]} == -@(i|w|f|b|-install|-show|-build|-fetch) ]]; then + t="all" + break + fi + done + if [ "$t" != "all" ]; then + return 0 + 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]}" + break + fi + done + if [ ! -r "$config" ]; then + return 0 + fi + + if [[ "$cur" == *:* ]]; then + local name=${cur%:*} + local version=${cur##*:} + COMPREPLY=( $( slapt-src --config $config --search "^$name" 2> \ + /dev/null | sed -ne "/^$cur/{s/^$name:\([^ ]*\) .*$/\1/;p}" ) ) + else + COMPREPLY=( $( slapt-src --config $config --search "^$cur" 2>/dev/null \ + | sed -ne "/^$cur/{s/ .*$//;p}" ) ) + fi +} && complete -F _slapt_src slapt-src + +# ex: ts=4 sw=4 et filetype=sh |