have grep-status && { _comp_dpkg_installed_packages() { grep-status -P -e "^$1" -a -FStatus 'install ok installed' -n -s Package } } || { _comp_dpkg_installed_packages() { command grep -A 1 "Package: $1" /var/lib/dpkg/status | \ command grep -B 1 -Ee "ok installed|half-installed|unpacked| \ half-configured" \ -Ee "^Essential: yes" | \ command grep "Package: $1" | cut -d\ -f2 } } 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 | \ command grep "Package: $1" | cut -d\ -f2 } } have wajig && _wajig() { local cur dashoptions prev special i COMPREPLY=() _get_comp_words_by_ref cur prev dashoptions='-h --help -V --version' for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do if [[ ${COMP_WORDS[i]} == @(addcdrom|addrepo|autoalts|autoclean|autodownload|autoremove|build|builddeps|changelog|clean|contents|dailyupgrade|dependents|describe|describenew|distupgrade|download|editsources|extract|fixconfigure|fixinstall|fixmissing|force|hold|info|init|install|installsuggested|integrity|large|lastupdate|listalternatives|listcache|listcommands|listdaemons|listfiles|listhold|listinstalled|listnames|listpackages|listscripts|listsection|listsections|liststatus|madison|move|new|newdetail|news|newupgrades|nonfree|orphans|policy|purge|purgeorphans|purgeremoved|rbuilddeps|readme|recdownload|recommended|reconfigure|reinstall|reload|remove|removeorphans|repackage|reportbug|restart|rpm2deb|rpminstall|search|searchapt|show|sizes|snapshot|source|start|status|statusmatch|stop|syslog|tasksel|todo|toupgrade|tutorial|unhold|unofficial|update|updatealternatives|updatepciids|updateusbids|upgrade|upgradesecurity|verify|versions|whichpackage) ]]; then special=${COMP_WORDS[i]} fi done if [[ -n "$special" ]]; then case $special in install|hold|distupgrade|download|show|changelog|builddeps) COMPREPLY=( $( apt-cache pkgnames $cur 2> /dev/null ) ) return 0 ;; purge|remove|reinstall|listinstalled) COMPREPLY=( $( _comp_dpkg_installed_packages "$cur" ) ) return 0 ;; unhold) COMPREPLY=( $( _comp_dpkg_hold_packages "$cur" ) ) return 0 ;; esac fi case $prev in # don't complete anything if these options are found autoclean|clean|search|upgrade|update) return 0 ;; -S) _filedir return 0 ;; esac if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "$dashoptions" -- "$cur" ) ) elif [[ -z "$special" ]]; then commands=(addcdrom addrepo autoalts autoclean autodownload autoremove build builddeps changelog clean contents dailyupgrade dependents describe describenew distupgrade download editsources extract fixconfigure fixinstall fixmissing force hold info init install installsuggested integrity large lastupdate listalternatives listcache listcommands listdaemons listfiles listhold listinstalled listnames listpackages listscripts listsection listsections liststatus madison move new newdetail news newupgrades nonfree orphans policy purge purgeorphans purgeremoved rbuilddeps readme recdownload recommended reconfigure reinstall reload remove removeorphans repackage reportbug restart rpm2deb rpminstall search searchapt show sizes snapshot source start status statusmatch stop syslog tasksel todo toupgrade tutorial unhold unofficial update updatealternatives updatepciids updateusbids upgrade upgradesecurity verify versions whichpackage) local option oldNoCaseMatch=$(shopt -p nocasematch) shopt -s nocasematch COMPREPLY=( $( for command in "${commands[@]}"; do [[ ${command:0:${#cur}} == "$cur" ]] && printf '%s\n' $command done ) ) eval "$oldNoCaseMatch" 2> /dev/null fi return 0 } complete -F _wajig -o default wajig