diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-04-16 20:38:41 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-04-17 00:09:16 -0400 |
commit | caffaf5859f2fda2116ecc403b4411531b4b6678 (patch) | |
tree | 9b188fafd2dec826700f376ee752404863fcb2aa | |
parent | f03dc7c0c58c5cddb62dbd809c1f4ccad3c6e2b6 (diff) |
bash-completion: --property support
Just bash.
-rw-r--r-- | shell-completion/bash/systemctl | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl index f24a145424..3bdf4dc956 100644 --- a/shell-completion/bash/systemctl +++ b/shell-completion/bash/systemctl @@ -22,6 +22,15 @@ __systemctl() { systemctl $mode --full --no-legend "$@" } +__systemd_properties() { + local mode=$1 + { __systemctl $mode show; + systemd --dump-configuration-items; } | + while IFS='=' read -r key value; do + [[ $value ]] && echo "$key" + done +} + __contains_word () { local word=$1; shift for w in $*; do [[ $w = $word ]] && return 0; done @@ -67,6 +76,12 @@ _systemctl () { [ARG]='--host -H --kill-mode --kill-who --property -p --signal -s --type -t --root' ) + if __contains_word "--user" ${COMP_WORDS[*]}; then + mode=--user + else + mode=--system + fi + if __contains_word "$prev" ${OPTS[ARG]}; then case $prev in --signal|-s) @@ -89,7 +104,7 @@ _systemctl () { comps=$(compgen -A hostname) ;; --property|-p) - comps='' + comps=$(__systemd_properties $mode) ;; esac COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) @@ -101,12 +116,6 @@ _systemctl () { return 0 fi - if __contains_word "--user" ${COMP_WORDS[*]}; then - mode=--user - else - mode=--system - fi - local -A VERBS=( [ALL_UNITS]='is-active is-failed is-enabled status show mask preset' [ENABLED_UNITS]='disable' |