diff options
Diffstat (limited to 'completions/sbopkg')
-rw-r--r-- | completions/sbopkg | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/completions/sbopkg b/completions/sbopkg new file mode 100644 index 0000000..16bd58f --- /dev/null +++ b/completions/sbopkg @@ -0,0 +1,73 @@ +# bash completion for sbopkg(8) -*- shell-script -*- + +_sbopkg() +{ + local cur prev words cword + _init_completion || return + + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1" -h)' -- "$cur")) + [[ ${COMPREPLY-} ]] && return + fi + + case "$prev" in + -e) + COMPREPLY=($(compgen -W 'ask continue stop' -- "$cur")) + return + ;; + -f) + _filedir + return + ;; + -d) + _filedir -d + return + ;; + -V) + COMPREPLY=($(compgen -W "? + $(sbopkg -V '?' 2>&1 | cut -s -f1)" -- "$cur")) + return + ;; + -i | -b) ;; + + *) + return + ;; + esac + + local i config + config="/etc/sbopkg/sbopkg.conf" + for ((i = ${#words[@]} - 1; i > 0; i--)); do + if [[ ${words[i]} == -f ]]; then + config="${words[i + 1]}" + __expand_tilde_by_ref config + break + fi + done + + [[ -r $config ]] || return + . $config + + for ((i = 1; i < ${#words[@]}; i++)); do + case "${words[i]}" in + -V) + REPO_NAME="${words[i + 1]%%/*}" + REPO_BRANCH="${words[i + 1]#*/}" + ;; + -d) + REPO_ROOT="${words[i + 1]}" + ;; + esac + done + [[ -r $REPO_ROOT/$REPO_NAME/$REPO_BRANCH/SLACKBUILDS.TXT ]] || return + + COMPREPLY=($(command sed -ne "/^SLACKBUILD NAME: $cur/{s/^SLACKBUILD NAME: //;p}" \ + $REPO_ROOT/$REPO_NAME/$REPO_BRANCH/SLACKBUILDS.TXT) + $( + cd $QUEUEDIR + compgen -f -X "!*.sqf" -- "$cur" + )) +} && + complete -F _sbopkg sbopkg + +# ex: filetype=sh |