]> git.saurik.com Git - apt.git/commitdiff
Add bash-completion support for the "apt" command
authorMichael Vogt <mvo@ubuntu.com>
Sat, 2 Jan 2016 20:18:47 +0000 (21:18 +0100)
committerMichael Vogt <mvo@ubuntu.com>
Sat, 2 Jan 2016 20:44:46 +0000 (21:44 +0100)
The apt bash-completion support was submited to the bash-completion
package as a patch in May 2014. It is still not included to this
date and because it is an important feature for many users it is
now part of apt until the bash-completion package is mantained
more actively again.

Note that the "Relaces" line is only required for Ubuntu it will
have no effect on Debian.

Closes: #747094
debian/apt.bash-completion [new file with mode: 0644]
debian/apt.dirs
debian/apt.install.in
debian/control

diff --git a/debian/apt.bash-completion b/debian/apt.bash-completion
new file mode 100644 (file)
index 0000000..d7104ec
--- /dev/null
@@ -0,0 +1,107 @@
+# 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
index 6d492a30f6155149b7b3e00e24810c5d9a5b6bde..e4bb2c8246affaa1d403aa245ea1fd4bf0d18cbc 100644 (file)
@@ -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
index 9c948957247d47ed07496c5e23756b1de8f1171f..e2bedcca7db8dc7b6896f8d38744f4a8d54b5756 100644 (file)
@@ -4,3 +4,4 @@ bin/methods/* usr/lib/apt/methods/
 scripts/dselect/* usr/lib/dpkg/methods/apt/
 usr/share/locale/*/*/apt.mo
 bin/libapt-private.so.* usr/lib/@DEB_HOST_MULTIARCH@/
+../debian/apt.bash-completion /usr/share/bash-completion/completions/
index f2121e9f03945e0fad9020d5636e898aa5ec2232..bb5bf87ae693c4cc81e04f4fcf2467f55339c65e 100644 (file)
@@ -20,7 +20,7 @@ Testsuite: autopkgtest
 Package: apt
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}, ${apt:keyring}, gpgv | gpgv2, gnupg | gnupg2, adduser
-Replaces: manpages-pl (<< 20060617-3~), manpages-it (<< 2.80-4~), sun-java6-jdk (>> 0), sun-java5-jdk (>> 0), openjdk-6-jdk (<< 6b24-1.11-0ubuntu1~)
+Replaces: manpages-pl (<< 20060617-3~), manpages-it (<< 2.80-4~), sun-java6-jdk (>> 0), sun-java5-jdk (>> 0), openjdk-6-jdk (<< 6b24-1.11-0ubuntu1~), bash-completion (<< 1:2.1-4.2+fakesync1)
 Breaks: manpages-pl (<< 20060617-3~), manpages-it (<< 2.80-4~), sun-java6-jdk (>> 0), sun-java5-jdk (>> 0), openjdk-6-jdk (<< 6b24-1.11-0ubuntu1~), apt-utils (<< 1.1.3)
 Suggests: aptitude | synaptic | wajig, dpkg-dev (>= 1.17.2), apt-doc, python-apt
 Description: commandline package manager