summaryrefslogtreecommitdiffstats
path: root/completions/update-alternatives
diff options
context:
space:
mode:
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