summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-04-05 07:45:30 -0400
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-04-05 11:44:01 -0400
commit9e542e0b3a5069f340072c93b5d2283848a42a2e (patch)
tree7f60a5334e976ff1c7972d031e535f1d1508aa28
parentac2b34e155da16cde2cb9a0b25d8c3bf9dcaa018 (diff)
shell-completion: work on session shell is --user is used
https://bugs.freedesktop.org/show_bug.cgi?id=61695
-rw-r--r--shell-completion/bash/systemctl66
-rw-r--r--shell-completion/systemd-zsh-completion.zsh6
2 files changed, 40 insertions, 32 deletions
diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl
index 27d89ec13..ce46d50a9 100644
--- a/shell-completion/bash/systemctl
+++ b/shell-completion/bash/systemctl
@@ -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
diff --git a/shell-completion/systemd-zsh-completion.zsh b/shell-completion/systemd-zsh-completion.zsh
index a8f708145..46a6a1900 100644
--- a/shell-completion/systemd-zsh-completion.zsh
+++ b/shell-completion/systemd-zsh-completion.zsh
@@ -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