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=833af71b643b47342679a6ad8acf30a7b676096e;hp=636c800310436e22b195e06fd5b02c43d0cccfe8;hb=1d870ac769c70bae86fed63d9c5a1c42d2af9da3;hpb=44e2f7316cd3815cfdddaafef9d72efaa828bba3 diff --git a/bash-completion/systemd-bash-completion.sh b/bash-completion/systemd-bash-completion.sh index 636c80031..833af71b6 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 @@ -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' @@ -284,10 +284,12 @@ _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' + -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' @@ -439,3 +441,38 @@ _localectl() { return 0 } complete -F _localectl localectl + +_hostnamectl() { + 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' + + if [[ $cur = -* ]]; then + COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) + return 0 + fi + + local -A VERBS=( + [STANDALONE]='status' + [ICONS]='set-icon-name' + [NAME]='set-hostname' + ) + + for ((i=0; i <= COMP_CWORD; i++)); do + if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then + verb=${COMP_WORDS[i]} + break + fi + done + + if [[ -z $verb ]]; then + comps=${VERBS[*]} + elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[ICONS]} ${VERBS[NAME]}; then + comps='' + fi + + COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) + return 0 +} +complete -F _hostnamectl hostnamectl