From 697c9314c8ba24f3e393b5de11a3fad7adae4bfc Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 25 Apr 2014 15:16:46 +0200 Subject: [PATCH] add bash completion for the "apt" command --- debian/apt.dirs | 1 + debian/rules | 2 + share/bash-completions/apt | 95 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 share/bash-completions/apt diff --git a/debian/apt.dirs b/debian/apt.dirs index 6d492a30..e4bb2c82 100644 --- a/debian/apt.dirs +++ b/debian/apt.dirs @@ -15,3 +15,4 @@ var/lib/apt/mirrors/partial var/lib/apt/periodic var/log/apt usr/share/bug/apt +usr/share/bash-completion/completions/ \ No newline at end of file diff --git a/debian/rules b/debian/rules index eec01660..19676144 100755 --- a/debian/rules +++ b/debian/rules @@ -189,6 +189,8 @@ apt: build-binary build-manpages debian/apt.install cp debian/apt.conf.autoremove debian/$@/etc/apt/apt.conf.d/01autoremove cp debian/apt.auto-removal.sh debian/$@/etc/kernel/postinst.d/apt-auto-removal chmod 755 debian/$@/etc/kernel/postinst.d/apt-auto-removal + # install bash completion + cp share/bash-completions/* debian/$@/usr/share/bash-completion/completions/ # make rosetta happy and remove pot files in po/ (but leave stuff # in po/domains/* untouched) and cp *.po into each domain dir diff --git a/share/bash-completions/apt b/share/bash-completions/apt new file mode 100644 index 00000000..9929bf75 --- /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 -- 2.20.1