X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=bash-completion%2Fsystemd-bash-completion.sh;h=4398aaaf562481e3f7c077bfb9f69ef695456d36;hb=0caa6ba9691a75ca614840f7bffaddf1d2220a9f;hp=1a7df57649477c288d46c2fa484c17555ee7e19a;hpb=26be51de330e544ade97a9345bbfa60d5674cb7a;p=elogind.git diff --git a/bash-completion/systemd-bash-completion.sh b/bash-completion/systemd-bash-completion.sh index 1a7df5764..4398aaaf5 100644 --- a/bash-completion/systemd-bash-completion.sh +++ b/bash-completion/systemd-bash-completion.sh @@ -55,7 +55,7 @@ __get_masked_units () { __systemctl list-unit-files \ _systemctl () { local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local verb comps + local i verb comps local -A OPTS=( [STANDALONE]='--all -a --defaults --fail --ignore-dependencies --failed --force -f --full --global @@ -122,7 +122,7 @@ _systemctl () { for ((i=0; $i <= $COMP_CWORD; i++)); do if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} && - ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG}]}; then + ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then verb=${COMP_WORDS[i]} break fi @@ -203,7 +203,7 @@ __get_all_seats () { loginctl list-seats | { while read -r a b; do printf _loginctl () { local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local verb comps + local i verb comps local -A OPTS=( [STANDALONE]='--all -a --help -h --no-pager --privileged -P --version' @@ -245,7 +245,7 @@ _loginctl () { for ((i=0; $i <= $COMP_CWORD; i++)); do if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} && - ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG}]}; then + ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then verb=${COMP_WORDS[i]} break fi @@ -283,11 +283,13 @@ complete -F _loginctl loginctl _journalctl() { local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} local -A OPTS=( - [STANDALONE]='-a --all -b --this-boot -f --follow --header - -h --help -l --local --new-id128 --no-pager - --no-tail -q --quiet --setup-keys --verify --version' - [ARG]='-D --directory -F --field --interval -n --lines -o --output - -p --priority --verify-key' + [STANDALONE]='-a --all -b --this-boot --disk-usage -f --follow --header + -h --help -l --local --new-id128 -m --merge --no-pager + --no-tail -q --quiet --setup-keys --this-boot --verify + --version' + [ARG]='-D --directory -F --field -o --output -u --unit' + [ARGUNKNOWN]='-c --cursor --interval -n --lines -p --priority --since --until + --verify-key' ) local journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC} ERRNO SYSLOG_{FACILITY,IDENTIFIER,PID} @@ -301,10 +303,10 @@ _journalctl() { __CURSOR __{REALTIME,MONOTONIC}_TIMESTAMP) - if __contains_word "$prev" ${OPTS[ARG]}; then + if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then case $prev in - --directory|-D|--verify-key) - comps=$(compgen -A file -- "$cur") + --directory|-D) + comps=$(compgen -d -- "$cur") compopt -o filenames ;; --output|-o) @@ -313,6 +315,9 @@ _journalctl() { --field|-F) comps=${journal_fields[*]} ;; + --unit|-u) + comps=$(journalctl -F '_SYSTEMD_UNIT') + ;; *) return 0 ;; @@ -331,17 +336,14 @@ _journalctl() { mapfile -t field_vals < <(journalctl -F "${COMP_WORDS[COMP_CWORD-2]}" 2>/dev/null) COMPREPLY=( $(compgen -W '${field_vals[*]}' -- "$cur") ) else - # append an '=' to the end of the completed field - # TODO: would be nice to be able to tell readline here not to - # append an extra space after the completed word, if such an - # option exists. - COMPREPLY=( $(compgen -W '${journal_fields[*]/%/=}' -- "$cur") ) + compopt -o nospace + COMPREPLY=( $(compgen -W '${journal_fields[*]}' -S= -- "$cur") ) fi } complete -F _journalctl journalctl _timedatectl() { - local verb comps + local i verb comps local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} local OPTS='-h --help --version --adjust-system-clock --no-pager --no-ask-password -H --host' @@ -391,7 +393,7 @@ _timedatectl() { complete -F _timedatectl timedatectl _localectl() { - local verb comps + local i verb comps local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} local OPTS='-h --help --version --no-convert --no-pager --no-ask-password -H --host' @@ -441,7 +443,7 @@ _localectl() { complete -F _localectl localectl _hostnamectl() { - local verb comps + local i verb comps local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} local OPTS='-h --help --version --transient --static --pretty --no-ask-password -H --host' @@ -474,3 +476,78 @@ _hostnamectl() { return 0 } complete -F _hostnamectl hostnamectl + +__get_all_sysdevs() { ls -1 -d /sys/bus/*/devices/* /sys/class/*/*; } + +_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 path_id usb_id uaccess' + fi + + COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) + return 0 +} +complete -F _udevadm udevadm