summaryrefslogtreecommitdiffstats
path: root/completions
diff options
context:
space:
mode:
Diffstat (limited to 'completions')
-rw-r--r--completions/CMakeLists.txt4
-rw-r--r--completions/bash/apt227
2 files changed, 231 insertions, 0 deletions
diff --git a/completions/CMakeLists.txt b/completions/CMakeLists.txt
new file mode 100644
index 0000000..4ef62a8
--- /dev/null
+++ b/completions/CMakeLists.txt
@@ -0,0 +1,4 @@
+set(BASH_COMPLETION_DIR "${CMAKE_INSTALL_DATAROOTDIR}/bash-completion/completions"
+ CACHE PATH "Path to the bash-completion completions directory")
+
+install(FILES bash/apt DESTINATION ${BASH_COMPLETION_DIR})
diff --git a/completions/bash/apt b/completions/bash/apt
new file mode 100644
index 0000000..bc2a7ef
--- /dev/null
+++ b/completions/bash/apt
@@ -0,0 +1,227 @@
+# Debian apt(8) completion -*- shell-script -*-
+
+_apt()
+{
+ local sourcesdir="/etc/apt/sources.list.d"
+ local cur prev words cword
+ _init_completion || return
+
+ local GENERIC_APT_GET_OPTIONS='
+ -d --download-only
+ -y --assume-yes
+ --assume-no
+ -u --show-upgraded
+ -m --ignore-missing
+ -t --target-release
+ --download
+ --fix-missing
+ --ignore-hold
+ --upgrade
+ --only-upgrade
+ --allow-change-held-packages
+ --allow-remove-essential
+ --allow-downgrades
+ --print-uris
+ --trivial-only
+ --remove
+ --arch-only
+ --allow-unauthenticated
+ --allow-insecure-repositories
+ --install-recommends
+ --install-suggests
+ --no-install-recommends
+ --no-install-suggests
+ --fix-policy
+ '
+
+ # see if the user selected a command already
+ local COMMANDS=(
+ "list"
+ "search"
+ "show" "showsrc"
+ "install" "remove" "purge" "autoremove" "autopurge"
+ "update"
+ "upgrade" "full-upgrade" "dist-upgrade"
+ "edit-sources"
+ "help"
+ "source" "build-dep"
+ "clean" "autoclean"
+ "download" "changelog"
+ "moo"
+ "depends" "rdepends"
+ "policy")
+
+ local command i
+ for (( i=0; i < ${#words[@]}-1; i++ )); do
+ if [[ ${COMMANDS[@]} =~ ${words[i]} ]]; then
+ command=${words[i]}
+ break
+ fi
+ done
+
+ # Complete a -t<SPACE><TAB>
+ case $prev in
+ -t|--target-release)
+ COMPREPLY=( $( compgen -W "$(apt-cache policy | egrep -o 'a=[^,]*|n=[^,]*' | cut -f2- -d= | sort -u)" -- "$cur" ) )
+ return 0
+ ;;
+ esac
+
+ # 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
+ -s --simulate --dry-run
+ --download
+ --fix-missing
+ --fix-policy
+ --ignore-hold
+ --force-yes
+ --trivial-only
+ --reinstall --solver
+ -t --target-release'"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
+ return 0
+ ;;
+ update)
+ COMPREPLY=( $( compgen -W '--list-cleanup
+ --print-uris
+ --allow-insecure-repositories
+ ' -- "$cur" ) )
+ return 0
+ ;;
+ list)
+ COMPREPLY=( $( compgen -W '--installed --upgradable
+ --manual-installed
+ -v --verbose
+ -a --all-versions
+ -t --target-release
+ ' -- "$cur" ) )
+ return 0
+ ;;
+ show)
+ COMPREPLY=( $( compgen -W '-a --all-versions
+ ' -- "$cur" ) )
+ return 0
+ ;;
+ depends|rdepends)
+ COMPREPLY=( $( compgen -W '-i
+ --important
+ --installed
+ --pre-depends
+ --depends
+ --recommends
+ --suggests
+ --replaces
+ --breaks
+ --conflicts
+ --enhances
+ --recurse
+ --implicit' -- "$cur" ) )
+ return 0
+ ;;
+ search)
+ COMPREPLY=( $( compgen -W '
+ -n --names-only
+ -f --full' -- "$cur" ) )
+ return 0
+ ;;
+ showsrc)
+ COMPREPLY=( $( compgen -W '
+ --only-source' -- "$cur" ) )
+ return 0
+ ;;
+ source)
+ COMPREPLY=( $( compgen -W '
+ -s --simulate --dry-run
+ -b --compile --build
+ -P --build-profiles
+ --diff-only --debian-only
+ --tar-only
+ --dsc-only
+ -t --target-release
+ '"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
+ return 0
+ ;;
+ build-dep)
+ COMPREPLY=( $( compgen -W '
+ -a --host-architecture
+ -s --simulate --dry-run
+ -P --build-profiles
+ -t --target-release
+ --purge --solver
+ '"$GENERIC_APT_GET_OPTIONS" -- "$cur" ) )
+ return 0
+ ;;
+ moo)
+ COMPREPLY=( $( compgen -W '
+ --color
+ ' -- "$cur" ) )
+ return 0
+ ;;
+ clean|autoclean)
+ COMPREPLY=( $( compgen -W '
+ -s --simulate --dry-run
+ ' -- "$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|download|changelog|depends|rdepends)
+ COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
+ 2> /dev/null ) )
+ return 0
+ ;;
+ install)
+ COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
+ 2> /dev/null ) )
+ if [[ "$cur" == ./* || "$cur" == /* ]]; then
+ _filedir "deb"
+ fi
+ return 0
+ ;;
+ source|build-dep|showsrc|policy)
+ COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
+ 2> /dev/null ) $( apt-cache dumpavail | \
+ command grep "^Source: $cur" | sort -u | cut -f2 -d" " ) )
+ return 0
+ ;;
+ edit-sources)
+ COMPREPLY=( $( compgen -W '$( command ls $sourcesdir )' \
+ -- "$cur" ) )
+ return 0
+ ;;
+ moo)
+ COMPREPLY=( $( compgen -W 'moo' \
+ -- "$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