X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=bash-completion%2Fsystemd-bash-completion.sh;h=8d232688ccca1ff48e51d0d0208e3c0e4483ba58;hp=82c25a3894f57f2d9e444031319e4b81cd611e55;hb=35cdd0437d0650f7640264529417fa2f4abcce5e;hpb=0dd17959075e9ffe1e851c75fcc6a162d225feea diff --git a/bash-completion/systemd-bash-completion.sh b/bash-completion/systemd-bash-completion.sh index 82c25a389..8d232688c 100644 --- a/bash-completion/systemd-bash-completion.sh +++ b/bash-completion/systemd-bash-completion.sh @@ -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 @@ -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 ;; @@ -471,3 +476,81 @@ _hostnamectl() { return 0 } complete -F _hostnamectl hostnamectl + +__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 path_id usb_id uaccess' + fi + + COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) + return 0 +} +complete -F _udevadm udevadm