diff options
author | Michael Biebl <biebl@debian.org> | 2013-03-02 22:34:01 +0100 |
---|---|---|
committer | Michael Biebl <biebl@debian.org> | 2013-03-03 14:39:51 +0100 |
commit | d611dadcc74db10ba533ee6859308f5fc505aee1 (patch) | |
tree | 65197630b8706b4edb0200278464551a7d2518e2 /shell-completion/bash/udevadm | |
parent | 076a24adf4bfbb9c5aa8167e102c253c7e1c651e (diff) |
bash-completion: split completions and move to new location
Split the large bash completion script into separate, smaller files each
named after the binary it is used for and move the files to
/usr/share/bash-completion/completions. This way the completions can be
loaded on demand and we only install the completions for the tools we
actually build. The old path /etc/bash_completion.d/ is deprecated and
will disappear in the future.
Diffstat (limited to 'shell-completion/bash/udevadm')
-rw-r--r-- | shell-completion/bash/udevadm | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm new file mode 100644 index 0000000000..a31d465d35 --- /dev/null +++ b/shell-completion/bash/udevadm @@ -0,0 +1,103 @@ +# udevadm(8) completion -*- shell-script -*- +# +# This file is part of systemd. +# +# Copyright 2010 Ran Benita +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. +# +# systemd is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with systemd; If not, see <http://www.gnu.org/licenses/>. + +__contains_word () { + local word=$1; shift + for w in $*; do [[ $w = $word ]] && return 0; done + return 1 +} + +__get_all_sysdevs() { + local -a devs=(/sys/bus/*/devices/*/ /sys/class/*/*/) + printf '%s\n' "${devs[@]%/}" +} + +_udevadm() { + local i verb comps + local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} + local OPTS='-h --help --version --debug' + + local -A VERBS=( + [INFO]='info' + [TRIGGER]='trigger' + [SETTLE]='settle' + [CONTROL]='control' + [MONITOR]='monitor' + [HWDB]='hwdb' + [TESTBUILTIN]='test-builtin' + [TEST]='test' + ) + + for ((i=0; $i <= $COMP_CWORD; i++)); do + if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} && + ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then + verb=${COMP_WORDS[i]} + break + fi + done + + if [[ -z $verb && $cur = -* ]]; then + COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) + return 0 + fi + + if [[ -z $verb ]]; then + comps=${VERBS[*]} + + elif __contains_word "$verb" ${VERBS[INFO]}; then + if [[ $cur = -* ]]; then + comps='--help --query= --path= --name= --root --attribute-walk --export-db --cleanup-db' + else + comps=$( __get_all_sysdevs ) + fi + + elif __contains_word "$verb" ${VERBS[TRIGGER]}; then + comps='--help --verbose --dry-run --type= --action= --subsystem-match= + --subsystem-nomatch= --attr-match= --attr-nomatch= --property-match= + --tag-match= --sysname-match= --parent-match=' + + elif __contains_word "$verb" ${VERBS[SETTLE]}; then + comps='--help --timeout= --seq-start= --seq-end= --exit-if-exists= --quiet' + + elif __contains_word "$verb" ${VERBS[CONTROL]}; then + comps='--help --exit --log-priority= --stop-exec-queue --start-exec-queue + --reload --property= --children-max= --timeout=' + + elif __contains_word "$verb" ${VERBS[MONITOR]}; then + comps='--help --kernel --udev --property --subsystem-match= --tag-match=' + + elif __contains_word "$verb" ${VERBS[HWDB]}; then + comps='--help --update --test=' + + elif __contains_word "$verb" ${VERBS[TEST]}; then + if [[ $cur = -* ]]; then + comps='--help --action=' + else + comps=$( __get_all_sysdevs ) + fi + + elif __contains_word "$verb" ${VERBS[TESTBUILTIN]}; then + comps='blkid btrfs firmware hwdb input_id kmod net_id path_id usb_id uaccess' + fi + + COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) + return 0 +} + +complete -F _udevadm udevadm |