summaryrefslogtreecommitdiff
path: root/completions/aptitude
diff options
context:
space:
mode:
Diffstat (limited to 'completions/aptitude')
-rw-r--r--completions/aptitude108
1 files changed, 70 insertions, 38 deletions
diff --git a/completions/aptitude b/completions/aptitude
index 3f4e5500..e5ea1636 100644
--- a/completions/aptitude
+++ b/completions/aptitude
@@ -1,16 +1,16 @@
# 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()
+ {
+ 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 }"
-}
+ _comp_dpkg_hold_packages()
+ {
+ command grep -B 2 'hold' /var/lib/dpkg/status |
+ awk "/Package: $1/ { print \$2 }"
+ }
}
_aptitude()
@@ -18,37 +18,29 @@ _aptitude()
local cur prev words cword
_init_completion || return
- local dashoptions='-S -u -i -h --help --version -s --simulate -d
- --download-only -P --prompt -y --assume-yes -F --display-format -O
- --sort -w --width -f -r -g --with-recommends -R -G --without-recommends
- -t --target-release -V --show-versions -D --show-deps -Z -v --verbose
- --purge-unused --schedule-only'
-
local special i
- for (( i=0; i < ${#words[@]}-1; i++ )); do
+ 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]}
+ break
fi
- #exclude some mutually exclusive options
- [[ ${words[i]} == '-u' ]] && dashoptions=${dashoptions/-i}
- [[ ${words[i]} == '-i' ]] && dashoptions=${dashoptions/-u}
done
- if [[ -n "$special" ]]; then
+ if [[ -v 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) )
+ 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))
return
;;
- purge|remove|reinstall|forbid-version)
- COMPREPLY=( \
- $(_xfunc dpkg _comp_dpkg_installed_packages "$cur") )
+ purge | remove | reinstall | forbid-version)
+ COMPREPLY=(
+ $(_xfunc dpkg _comp_dpkg_installed_packages "$cur"))
return
;;
unhold)
- COMPREPLY=( $(_comp_dpkg_hold_packages "$cur") )
+ COMPREPLY=($(_comp_dpkg_hold_packages "$cur"))
return
;;
esac
@@ -56,32 +48,72 @@ _aptitude()
case $prev in
# don't complete anything if these options are found
- autoclean|clean|forget-new|search|upgrade|update|keep-all)
+ autoclean | clean | forget-new | search | upgrade | update | keep-all)
return
;;
-!(-*)S)
_filedir
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) )
+ --display-format | --width | -!(-*)[wFo])
+ return
+ ;;
+ --sort | -!(-*)O)
+ COMPREPLY=($(compgen -W 'installsize installsizechange debsize
+ name priority version' -- "$cur"))
+ 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))
return
;;
esac
- if [[ "$cur" == -* ]]; then
- COMPREPLY=( $(compgen -W "$dashoptions" -- "$cur") )
+ 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' ' ') "
+
+ # Exclude some mutually exclusive options
+ for i in "${words[@]}"; do
+ [[ $i == -u ]] && opts=${opts/ -i / }
+ [[ $i == -i ]] && opts=${opts/ -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 ;;
+ -s) COMPREPLY[i]=--simulate ;;
+ -d) COMPREPLY[i]=--download-only ;;
+ -P) COMPREPLY[i]=--prompt ;;
+ -y) COMPREPLY[i]=--assume-yes ;;
+ -F) COMPREPLY[i]=--display-format ;;
+ -O) COMPREPLY[i]=--sort ;;
+ -W) COMPREPLY[i]=--show-why ;;
+ -w) COMPREPLY[i]=--width ;;
+ -V) COMPREPLY[i]=--show-versions ;;
+ -D) COMPREPLY[i]=--show-deps ;;
+ -v) COMPREPLY[i]=--verbose ;;
+ -t) COMPREPLY[i]=--target-release ;;
+ -q) COMPREPLY[i]=--quiet ;;
+ esac
+ done
+
+ COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$cur"))
else
- COMPREPLY=( $(compgen -W 'update upgrade safe-upgrade forget-new
+ COMPREPLY=($(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' -- "$cur"))
fi
} &&
-complete -F _aptitude -o default aptitude aptitude-curses
+ complete -F _aptitude -o default aptitude aptitude-curses
# ex: filetype=sh