X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=shell-completion%2Fbash%2Fudevadm;h=8ad855060c652ad130d5850be4042495a79a99f9;hp=a31d465d354b5dc32baa87eb43358255ce090a2b;hb=b5b7ea750388919eee6087eb63f08903b57447cf;hpb=d611dadcc74db10ba533ee6859308f5fc505aee1 diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm index a31d465d3..8ad855060 100644 --- a/shell-completion/bash/udevadm +++ b/shell-completion/bash/udevadm @@ -18,9 +18,10 @@ # along with systemd; If not, see . __contains_word () { - local word=$1; shift - for w in $*; do [[ $w = $word ]] && return 0; done - return 1 + local w word=$1; shift + for w in "$@"; do + [[ $w = "$word" ]] && return + done } __get_all_sysdevs() { @@ -33,68 +34,61 @@ _udevadm() { 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' - ) + local verbs=(info trigger settle control monitor hwdb test-builtin test) - for ((i=0; $i <= $COMP_CWORD; i++)); do - if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} && + 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") ) + if [[ -z $verb ]]; then + COMPREPLY=( $(compgen -W '${OPTS[*]} ${verbs[*]}' -- "$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 + case $verb in + 'info') + if [[ $cur = -* ]]; then + comps='--help --query= --path= --name= --root --attribute-walk --export-db --cleanup-db' + else + comps=$( __get_all_sysdevs ) + fi + ;; + 'trigger') + comps='--help --verbose --dry-run --type= --action= --subsystem-match= + --subsystem-nomatch= --attr-match= --attr-nomatch= --property-match= + --tag-match= --sysname-match= --parent-match=' + ;; + 'settle') + comps='--help --timeout= --seq-start= --seq-end= --exit-if-exists= --quiet' + ;; + 'control') + comps='--help --exit --log-priority= --stop-exec-queue --start-exec-queue + --reload --property= --children-max= --timeout=' + ;; + 'monitor') + comps='--help --kernel --udev --property --subsystem-match= --tag-match=' + ;; + 'hwdb') + comps='--help --update --test=' + ;; + 'test') + if [[ $cur = -* ]]; then + comps='--help --action=' + else + comps=$( __get_all_sysdevs ) + fi + ;; + 'test-builtin') + comps='blkid btrfs hwdb input_id keyboard kmod net_id path_id usb_id uaccess' + ;; + *) + comps=${VERBS[*]} + ;; + esac COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) return 0