# Debian apt(8) completion -*- shell-script -*- _apt() { local sourcesdir="/etc/apt/sources.list.d" local cur prev words cword _init_completion || return # see if the user selected a command already local COMMANDS=( "list" "search" "show" "install" "remove" "purge" "autoremove" "update" "upgrade" "full-upgrade" "dist-upgrade" "edit-sources" "help") local command i for (( i=0; i < ${#words[@]}-1; i++ )); do if [[ ${COMMANDS[@]} =~ ${words[i]} ]]; then command=${words[i]} break fi done # supported options per command if [[ "$cur" == -* ]]; then case $command in install|remove|purge|upgrade|dist-upgrade|full-upgrade|autoremove) COMPREPLY=( $( compgen -W '--show-progress --fix-broken --purge --verbose-versions --auto-remove --simulate --dry-run --download --fix-missing --fix-policy --ignore-hold --force-yes --trivial-only --reinstall --solver' -- "$cur" ) ) return 0 ;; update) COMPREPLY=( $( compgen -W '--list-cleanup ' -- "$cur" ) ) return 0 ;; list) COMPREPLY=( $( compgen -W '--installed --upgradable --manual-installed -v --verbose -a --all-versions ' -- "$cur" ) ) return 0 ;; show) COMPREPLY=( $( compgen -W '-a --all-versions ' -- "$cur" ) ) return 0 ;; esac fi # specific command arguments if [[ -n $command ]]; then case $command in remove|purge|autoremove) if [[ -f /etc/debian_version ]]; then # Debian system COMPREPLY=( $( \ _xfunc dpkg _comp_dpkg_installed_packages $cur ) ) else # assume RPM based _xfunc rpm _rpm_installed_packages fi return 0 ;; show|list) COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \ 2> /dev/null ) ) return 0 ;; install) COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \ 2> /dev/null ) ) _filedir "*.deb" return 0 ;; edit-sources) COMPREPLY=( $( compgen -W '$( command ls $sourcesdir )' \ -- "$cur" ) ) return 0 ;; esac fi # no command yet, show what commands we have if [ "$command" = "" ]; then COMPREPLY=( $( compgen -W '${COMMANDS[@]}' -- "$cur" ) ) fi return 0 } && complete -F _apt apt # ex: ts=4 sw=4 et filetype=sh