}
__contains_word () {
- local word=$1; shift
- for w in $*; do [[ $w = $word ]] && return 0; done
- return 1
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
}
__filter_units_by_property () {
local i verb comps mode
local -A OPTS=(
- [STANDALONE]='--all -a --defaults --fail --ignore-dependencies --failed --force -f --full --global
+ [STANDALONE]='--all -a --reverse --after --before --defaults --fail --ignore-dependencies --failed --force -f --full -l --global
--help -h --no-ask-password --no-block --no-legend --no-pager --no-reload --no-wall
--quiet -q --privileged -P --system --user --version --runtime'
- [ARG]='--host -H --kill-mode --kill-who --property -p --signal -s --type -t --root'
+ [ARG]='--host -H --kill-mode --kill-who --property -p --signal -s --type -t --state --root'
)
if __contains_word "--user" ${COMP_WORDS[*]}; then
--type|-t)
comps='automount device mount path service snapshot socket swap target timer'
;;
+ --state)
+ comps='loaded not-found stub
+ active inactive
+ dead elapsed exited listening mounted plugged running waiting'
+ ;;
--kill-who)
comps='all control main'
;;
fi
local -A VERBS=(
- [ALL_UNITS]='is-active is-failed is-enabled status show mask preset'
+ [ALL_UNITS]='is-active is-failed is-enabled status show cat mask preset help list-dependencies'
[ENABLED_UNITS]='disable'
[DISABLED_UNITS]='enable'
[REENABLABLE_UNITS]='reenable'
[JOBS]='cancel'
[SNAPSHOTS]='delete'
[ENVS]='set-environment unset-environment'
- [STANDALONE]='daemon-reexec daemon-reload default dump
+ [STANDALONE]='daemon-reexec daemon-reload default
emergency exit halt hibernate hybrid-sleep kexec list-jobs
- list-units list-unit-files poweroff reboot rescue
- show-environment suspend'
+ list-sockets list-timers list-units list-unit-files poweroff
+ reboot rescue show-environment suspend get-default'
[NAME]='snapshot load'
[FILE]='link'
+ [TARGETS]='set-default'
)
for ((i=0; $i <= $COMP_CWORD; i++)); do
elif __contains_word "$verb" ${VERBS[FILE]}; then
comps=$( compgen -A file -- "$cur" )
compopt -o filenames
+ elif __contains_word "$verb" ${VERBS[TARGETS]}; then
+ comps=$( __systemctl $mode list-unit-files --type target --full --all \
+ | { while read -r a b; do echo " $a"; done; } )
fi
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )