diff options
Diffstat (limited to 'completions/aptitude')
-rw-r--r-- | completions/aptitude | 74 |
1 files changed, 31 insertions, 43 deletions
diff --git a/completions/aptitude b/completions/aptitude index e5ea163..827395a 100644 --- a/completions/aptitude +++ b/completions/aptitude @@ -1,24 +1,11 @@ # Debian aptitude(1) completion -*- shell-script -*- -_have grep-status && { - _comp_dpkg_hold_packages() - { - grep-status -P -e "^$1" -a -FStatus 'hold' -n -s Package - } -} || { - _comp_dpkg_hold_packages() - { - command grep -B 2 'hold' /var/lib/dpkg/status | - awk "/Package: $1/ { print \$2 }" - } -} - -_aptitude() +_comp_cmd_aptitude() { - local cur prev words cword - _init_completion || return + local cur prev words cword comp_args + _comp_initialize -- "$@" || return - local special i + local special="" i for ((i = 1; i < ${#words[@]} - 1; i++)); do if [[ ${words[i]} == @(@(|re)install|@(|un)hold|@(|un)markauto|@(dist|full|safe)-upgrade|download|show|forbid-version|purge|remove|changelog|why@(|-not)|keep@(|-all)|build-dep|@(add|remove)-user-tag|versions) ]]; then special=${words[i]} @@ -26,65 +13,65 @@ _aptitude() fi done - if [[ -v special ]]; then + if [[ $special ]]; then case $special in install | hold | markauto | unmarkauto | dist-upgrade | full-upgrade | \ safe-upgrade | download | show | changelog | why | why-not | build-dep | \ add-user-tag | remove-user-tag | versions) - COMPREPLY=($(_xfunc apt-cache _apt_cache_packages)) + _comp_compgen -x apt-cache packages return ;; purge | remove | reinstall | forbid-version) - COMPREPLY=( - $(_xfunc dpkg _comp_dpkg_installed_packages "$cur")) + _comp_compgen -x dpkg installed_packages return ;; unhold) - COMPREPLY=($(_comp_dpkg_hold_packages "$cur")) + _comp_compgen -x dpkg held_packages return ;; esac fi + local noargopts='!(-*|*[SwFoOt]*)' + # shellcheck disable=SC2254 case $prev in # don't complete anything if these options are found autoclean | clean | forget-new | search | upgrade | update | keep-all) return ;; - -!(-*)S) - _filedir + -${noargopts}S) + _comp_compgen_filedir return ;; - --display-format | --width | -!(-*)[wFo]) + --display-format | --width | -${noargopts}[wFo]) return ;; - --sort | -!(-*)O) - COMPREPLY=($(compgen -W 'installsize installsizechange debsize - name priority version' -- "$cur")) + --sort | -${noargopts}O) + _comp_compgen -- -W 'installsize installsizechange debsize name + priority version' return ;; - --target-release | --default-release | -!(-*)t) - COMPREPLY=($(apt-cache policy | - command grep "release.o=Debian,a=$cur" | - command sed -e "s/.*a=\(\w*\).*/\1/" | uniq 2>/dev/null)) + --target-release | --default-release | -${noargopts}t) + _comp_compgen_split -l -- "$(apt-cache policy | + command sed -ne 's/.*release.o=Debian,a=\([_[:alnum:]]*\).*/\1/p')" return ;; esac if [[ $cur == -* ]]; then - local opts=" $($1 --help 2>&1 | command sed -e \ - 's/--with(out)-recommends/--without-recommends\n--with-recommends/' | - _parse_help - | tr '\n' ' ') " + _comp_compgen -R help - <<<"$("$1" --help 2>&1 | command sed -e \ + 's/--with(out)-recommends/--without-recommends\n--with-recommends/')" + ((${#COMPREPLY[@]})) || return 0 # Exclude some mutually exclusive options + local exclude_flags="" for i in "${words[@]}"; do - [[ $i == -u ]] && opts=${opts/ -i / } - [[ $i == -i ]] && opts=${opts/ -u / } + [[ $i == -u ]] && exclude_flags+=i + [[ $i == -i ]] && exclude_flags+=u done # Do known short -> long replacements; at least up to 0.8.12, --help # outputs mostly only short ones. - COMPREPLY=($opts) for i in "${!COMPREPLY[@]}"; do case ${COMPREPLY[i]} in -h) COMPREPLY[i]=--help ;; @@ -104,16 +91,17 @@ _aptitude() esac done - COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$cur")) + _comp_compgen -- -W '"${COMPREPLY[@]}"' \ + ${exclude_flags:+-X "-[$exclude_flags]"} else - COMPREPLY=($(compgen -W 'update upgrade safe-upgrade forget-new - clean autoclean install reinstall remove hold unhold purge markauto + _comp_compgen -- -W 'update upgrade safe-upgrade forget-new clean + autoclean install reinstall remove hold unhold purge markauto unmarkauto why why-not dist-upgrade full-upgrade download search show forbid-version changelog keep keep-all build-dep add-user-tag - remove-user-tag versions' -- "$cur")) + remove-user-tag versions' fi } && - complete -F _aptitude -o default aptitude aptitude-curses + complete -F _comp_cmd_aptitude -o default aptitude aptitude-curses # ex: filetype=sh |