From b5b7ea750388919eee6087eb63f08903b57447cf Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Tue, 30 Jul 2013 13:00:00 -0400 Subject: [PATCH] bash-completion: simplify udevadm completion The AA is unnecessary and only adds needless complexity. Replace it with a case statement instead of repeatedly calling __contains_word to overglorify string equalities. --- shell-completion/bash/udevadm | 97 ++++++++++++++++------------------- 1 file changed, 45 insertions(+), 52 deletions(-) diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm index e521a3bbb..8ad855060 100644 --- a/shell-completion/bash/udevadm +++ b/shell-completion/bash/udevadm @@ -34,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 hwdb input_id keyboard 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 -- 2.30.2