summaryrefslogtreecommitdiff
path: root/share/bash-completions
diff options
context:
space:
mode:
authorMichael Vogt <mvo@debian.org>2014-04-25 15:16:46 +0200
committerMichael Vogt <mvo@debian.org>2014-04-25 15:16:46 +0200
commit697c9314c8ba24f3e393b5de11a3fad7adae4bfc (patch)
tree36e63a73a57e6b31c927d6d1303f3fee7133d8c5 /share/bash-completions
parent6c50447eb443768764f83b3ba86ef32780ba6dde (diff)
add bash completion for the "apt" command
Diffstat (limited to 'share/bash-completions')
-rw-r--r--share/bash-completions/apt95
1 files changed, 95 insertions, 0 deletions
diff --git a/share/bash-completions/apt b/share/bash-completions/apt
new file mode 100644
index 000000000..9929bf755
--- /dev/null
+++ b/share/bash-completions/apt
@@ -0,0 +1,95 @@
+# 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=("install" "remove" "purge" "show" "list"
+ "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|full-upgrade)
+ 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)
+ 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
+ ;;
+ install|show|list)
+ COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
+ 2> /dev/null ) )
+ 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