summaryrefslogtreecommitdiffstats
path: root/completions/aptitude
diff options
context:
space:
mode:
Diffstat (limited to 'completions/aptitude')
-rw-r--r--completions/aptitude119
1 files changed, 119 insertions, 0 deletions
diff --git a/completions/aptitude b/completions/aptitude
new file mode 100644
index 0000000..e5ea163
--- /dev/null
+++ b/completions/aptitude
@@ -0,0 +1,119 @@
+# 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()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ 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]}
+ break
+ fi
+ done
+
+ 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))
+ return
+ ;;
+ purge | remove | reinstall | forbid-version)
+ COMPREPLY=(
+ $(_xfunc dpkg _comp_dpkg_installed_packages "$cur"))
+ return
+ ;;
+ unhold)
+ COMPREPLY=($(_comp_dpkg_hold_packages "$cur"))
+ return
+ ;;
+ esac
+ fi
+
+ case $prev in
+ # don't complete anything if these options are found
+ autoclean | clean | forget-new | search | upgrade | update | keep-all)
+ return
+ ;;
+ -!(-*)S)
+ _filedir
+ return
+ ;;
+ --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
+ 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
+ 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"))
+ fi
+
+} &&
+ complete -F _aptitude -o default aptitude aptitude-curses
+
+# ex: filetype=sh