summaryrefslogtreecommitdiff
path: root/completions/update-alternatives
diff options
context:
space:
mode:
authorDavid Paleino <dapal@debian.org>2011-02-06 21:26:41 +0100
committerDavid Paleino <dapal@debian.org>2011-02-06 21:26:41 +0100
commit9920a8faedf704420571d8072ccab27e9dac40ba (patch)
tree733edf3b07be06c130d04aaa1884213326722cad /completions/update-alternatives
parentf9748115fb4b2950fb4df7535fb723c4affde078 (diff)
downloadbash-completion-9920a8faedf704420571d8072ccab27e9dac40ba.tar.gz
Imported Upstream version 1.3upstream/1.3
Diffstat (limited to 'completions/update-alternatives')
-rw-r--r--completions/update-alternatives100
1 files changed, 100 insertions, 0 deletions
diff --git a/completions/update-alternatives b/completions/update-alternatives
new file mode 100644
index 00000000..ebed294d
--- /dev/null
+++ b/completions/update-alternatives
@@ -0,0 +1,100 @@
+# bash completion for update-alternatives
+
+have update-alternatives && {
+_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 < COMP_CWORD; i++ )); do
+ if [[ "${COMP_WORDS[i]}" == --admindir ]]; then
+ admindir=${COMP_WORDS[i+1]}
+ break
+ fi
+ done
+ COMPREPLY=( $( compgen -W '$( command ls $admindir )' -- "$cur" ) )
+}
+
+_update_alternatives()
+{
+ local cur prev mode args i
+
+ COMPREPLY=()
+ _get_comp_words_by_ref cur prev
+
+ case $prev in
+ --altdir|--admindir)
+ _filedir -d
+ return 0
+ ;;
+ --help|--usage|--version)
+ return 0
+ ;;
+ esac
+
+ # find which mode to use and how many real args used so far
+ for (( i=1; i < COMP_CWORD; i++ )); do
+ if [[ "${COMP_WORDS[i]}" == --@(install|remove|auto|display|config|remove-all|set) ]]; then
+ mode=${COMP_WORDS[i]}
+ args=$(($COMP_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 '--verbose --quiet --help --version \
+ --altdir --admindir --install --remove --auto --display \
+ --config --set' -- "$cur" ) )
+ esac
+}
+complete -F _update_alternatives update-alternatives alternatives
+}
+
+# Local variables:
+# mode: shell-script
+# sh-basic-offset: 4
+# sh-indent-comment: t
+# indent-tabs-mode: nil
+# End:
+# ex: ts=4 sw=4 et filetype=sh