summaryrefslogtreecommitdiffstats
path: root/completions/aptitude
diff options
context:
space:
mode:
Diffstat (limited to 'completions/aptitude')
-rw-r--r--completions/aptitude74
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