mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-27 13:57:26 +03:00
shell-completion: work on session shell is --user is used
https://bugs.freedesktop.org/show_bug.cgi?id=61695
This commit is contained in:
parent
ac2b34e155
commit
9e542e0b3a
@ -18,7 +18,8 @@
|
||||
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
__systemctl() {
|
||||
systemctl --full --no-legend "$@"
|
||||
local mode=$1; shift 1
|
||||
systemctl $mode --full --no-legend "$@"
|
||||
}
|
||||
|
||||
__contains_word () {
|
||||
@ -28,11 +29,11 @@ __contains_word () {
|
||||
}
|
||||
|
||||
__filter_units_by_property () {
|
||||
local property=$1 value=$2 ; shift 2
|
||||
local mode=$1 property=$2 value=$3 ; shift 3
|
||||
local units=("$@")
|
||||
local props
|
||||
IFS=$'\n' read -rd '' -a props < \
|
||||
<(__systemctl show --property "$property" -- "${units[@]}")
|
||||
<(__systemctl $mode show --property "$property" -- "${units[@]}")
|
||||
for ((i=0; $i < ${#units[*]}; i++)); do
|
||||
if [[ "${props[i]}" = "$property=$value" ]]; then
|
||||
printf "%s\n" "${units[i]}"
|
||||
@ -40,24 +41,24 @@ __filter_units_by_property () {
|
||||
done
|
||||
}
|
||||
|
||||
__get_all_units () { __systemctl list-units --all \
|
||||
__get_all_units () { __systemctl $1 list-units --all \
|
||||
| { while read -r a b; do printf "%s\n" "$a"; done; }; }
|
||||
__get_active_units () { __systemctl list-units \
|
||||
__get_active_units () { __systemctl $1 list-units \
|
||||
| { while read -r a b; do printf "%s\n" "$a"; done; }; }
|
||||
__get_inactive_units () { __systemctl list-units --all \
|
||||
__get_inactive_units () { __systemctl $1 list-units --all \
|
||||
| { while read -r a b c d; do [[ $c == "inactive" ]] && printf "%s\n" "$a"; done; }; }
|
||||
__get_failed_units () { __systemctl list-units \
|
||||
__get_failed_units () { __systemctl $1 list-units \
|
||||
| { while read -r a b c d; do [[ $c == "failed" ]] && printf "%s\n" "$a"; done; }; }
|
||||
__get_enabled_units () { __systemctl list-unit-files \
|
||||
__get_enabled_units () { __systemctl $1 list-unit-files \
|
||||
| { while read -r a b c ; do [[ $b == "enabled" ]] && printf "%s\n" "$a"; done; }; }
|
||||
__get_disabled_units () { __systemctl list-unit-files \
|
||||
__get_disabled_units () { __systemctl $1 list-unit-files \
|
||||
| { while read -r a b c ; do [[ $b == "disabled" ]] && printf "%s\n" "$a"; done; }; }
|
||||
__get_masked_units () { __systemctl list-unit-files \
|
||||
__get_masked_units () { __systemctl $1 list-unit-files \
|
||||
| { while read -r a b c ; do [[ $b == "masked" ]] && printf "%s\n" "$a"; done; }; }
|
||||
|
||||
_systemctl () {
|
||||
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
local i verb comps
|
||||
local i verb comps mode
|
||||
|
||||
local -A OPTS=(
|
||||
[STANDALONE]='--all -a --defaults --fail --ignore-dependencies --failed --force -f --full --global
|
||||
@ -95,12 +96,17 @@ _systemctl () {
|
||||
return 0
|
||||
fi
|
||||
|
||||
|
||||
if [[ "$cur" = -* ]]; then
|
||||
COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
|
||||
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 reenable'
|
||||
@ -135,58 +141,58 @@ _systemctl () {
|
||||
comps="${VERBS[*]}"
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[ALL_UNITS]}; then
|
||||
comps=$( __get_all_units )
|
||||
comps=$( __get_all_units $mode )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[ENABLED_UNITS]}; then
|
||||
comps=$( __get_enabled_units )
|
||||
comps=$( __get_enabled_units $mode )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[DISABLED_UNITS]}; then
|
||||
comps=$( __get_disabled_units )
|
||||
comps=$( __get_disabled_units $mode )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[STARTABLE_UNITS]}; then
|
||||
comps=$( __filter_units_by_property CanStart yes \
|
||||
$( __get_inactive_units \
|
||||
comps=$( __filter_units_by_property $mode CanStart yes \
|
||||
$( __get_inactive_units $mode \
|
||||
| while read -r line; do \
|
||||
[[ "$line" =~ \.(device|snapshot)$ ]] || printf "%s\n" "$line"; \
|
||||
done ))
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[RESTARTABLE_UNITS]}; then
|
||||
comps=$( __filter_units_by_property CanStart yes \
|
||||
$( __get_all_units \
|
||||
comps=$( __filter_units_by_property $mode CanStart yes \
|
||||
$( __get_all_units $mode \
|
||||
| while read -r line; do \
|
||||
[[ "$line" =~ \.(device|snapshot|socket|timer)$ ]] || printf "%s\n" "$line"; \
|
||||
done ))
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[STOPPABLE_UNITS]}; then
|
||||
comps=$( __filter_units_by_property CanStop yes \
|
||||
$( __get_active_units ) )
|
||||
comps=$( __filter_units_by_property $mode CanStop yes \
|
||||
$( __get_active_units $mode ) )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[RELOADABLE_UNITS]}; then
|
||||
comps=$( __filter_units_by_property CanReload yes \
|
||||
$( __get_active_units ) )
|
||||
comps=$( __filter_units_by_property $mode CanReload yes \
|
||||
$( __get_active_units $mode ) )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[ISOLATABLE_UNITS]}; then
|
||||
comps=$( __filter_units_by_property AllowIsolate yes \
|
||||
$( __get_all_units ) )
|
||||
comps=$( __filter_units_by_property $mode AllowIsolate yes \
|
||||
$( __get_all_units $mode ) )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[FAILED_UNITS]}; then
|
||||
comps=$( __get_failed_units )
|
||||
comps=$( __get_failed_units $mode )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[MASKED_UNITS]}; then
|
||||
comps=$( __get_masked_units )
|
||||
comps=$( __get_masked_units $mode )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[NAME]}; then
|
||||
comps=''
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[JOBS]}; then
|
||||
comps=$( __systemctl list-jobs | { while read -r a b; do printf "%s\n" "$a"; done; } )
|
||||
comps=$( __systemctl $mode list-jobs | { while read -r a b; do printf "%s\n" "$a"; done; } )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[SNAPSHOTS]}; then
|
||||
comps=$( __systemctl list-units --type snapshot --full --all \
|
||||
comps=$( __systemctl $mode list-units --type snapshot --full --all \
|
||||
| { while read -r a b; do printf "%s\n" "$a"; done; } )
|
||||
|
||||
elif __contains_word "$verb" ${VERBS[ENVS]}; then
|
||||
comps=$( __systemctl show-environment \
|
||||
comps=$( __systemctl $mode show-environment \
|
||||
| while read -r line; do printf "%s\n" "${line%%=*}=";done )
|
||||
compopt -o nospace
|
||||
|
||||
|
@ -404,7 +404,9 @@ _outputmodes() {
|
||||
|
||||
__systemctl()
|
||||
{
|
||||
systemctl --full --no-legend --no-pager "$@"
|
||||
local -a _modes
|
||||
_modes=("--user" "--system")
|
||||
systemctl ${words:*_modes} --full --no-legend --no-pager "$@"
|
||||
}
|
||||
|
||||
|
||||
@ -556,7 +558,7 @@ done
|
||||
(( $+functions[_systemctl_delete] )) || _systemctl_delete()
|
||||
{
|
||||
compadd "$@" - $(__systemctl list-units --type snapshot --all \
|
||||
| cut -d' ' -f1 2>/dev/null ) || _message "no snampshot found"
|
||||
| cut -d' ' -f1 2>/dev/null ) || _message "no snapshot found"
|
||||
}
|
||||
|
||||
# Completion functions for ENVS
|
||||
|
Loading…
x
Reference in New Issue
Block a user