# 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 showsrc source versions' -- "$cur")) fi } && complete -F _aptitude -o default aptitude aptitude-curses # ex: filetype=sh