summaryrefslogtreecommitdiffstats
path: root/completions/update-alternatives
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:14:42 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:14:42 +0000
commit0bc58b66a4850cdb8458a86c3d9a2fc81de82aa3 (patch)
treeea0fe36eb5e6f40e0a1f765d44c4b0c0b2bfb089 /completions/update-alternatives
parentInitial commit. (diff)
downloadbash-completion-upstream/1%2.11.tar.xz
bash-completion-upstream/1%2.11.zip
Adding upstream version 1:2.11.upstream/1%2.11upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--completions/update-alternatives92
1 files changed, 92 insertions, 0 deletions
diff --git a/completions/update-alternatives b/completions/update-alternatives
new file mode 100644
index 0000000..25d2ce6
--- /dev/null
+++ b/completions/update-alternatives
@@ -0,0 +1,92 @@
+# bash completion for update-alternatives -*- shell-script -*-
+
+_installed_alternatives()
+{
+ local admindir
+ # find the admin dir
+ for i in alternatives dpkg/alternatives rpm/alternatives; do
+ [[ -d /var/lib/$i ]] && admindir=/var/lib/$i && break
+ done
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == --admindir ]]; then
+ admindir=${words[i + 1]}
+ break
+ fi
+ done
+ COMPREPLY=($(compgen -W '$(command ls $admindir)' -- "$cur"))
+}
+
+_update_alternatives()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ --altdir | --admindir)
+ _filedir -d
+ return
+ ;;
+ --help | --usage | --version)
+ return
+ ;;
+ esac
+
+ local mode args i
+
+ # find which mode to use and how many real args used so far
+ for ((i = 1; i < cword; i++)); do
+ if [[ ${words[i]} == --@(install|remove|auto|display|config|remove-all|set) ]]; then
+ mode=${words[i]}
+ args=$((cword - i))
+ break
+ fi
+ done
+
+ case ${mode-} in
+ --install)
+ case $args in
+ 1 | 3)
+ _filedir
+ ;;
+ 2)
+ _installed_alternatives
+ ;;
+ 4)
+ # priority - no completions
+ ;;
+ *)
+ case $((args % 4)) in
+ 0 | 2)
+ _filedir
+ ;;
+ 1)
+ COMPREPLY=($(compgen -W '--slave' -- "$cur"))
+ ;;
+ 3)
+ _installed_alternatives
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ --remove | --set)
+ case $args in
+ 1)
+ _installed_alternatives
+ ;;
+ 2)
+ _filedir
+ ;;
+ esac
+ ;;
+ --auto | --remove-all | --display | --config)
+ _installed_alternatives
+ ;;
+ *)
+ COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ ;;
+ esac
+} &&
+ complete -F _update_alternatives update-alternatives alternatives
+
+# ex: filetype=sh