]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
zsh: _journalctl: improve support for handling mode args (#3952)
authorDaniel Hahler <github@thequod.de>
Sat, 13 Aug 2016 14:41:22 +0000 (16:41 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 13 Aug 2016 14:41:22 +0000 (10:41 -0400)
This only completes fields from `journalctl --user` in _journal_fields when `--user`
is used.

It also changes $_sys_service_mgr to include both `--system` and `--user`,
because `journalctl` behaves different from `systemctl` in this regard.
No attempt is made to filter out invalid combinations, e.g. when using both
`--directory` and `--system` (see https://github.com/systemd/systemd/issues/3949).

shell-completion/zsh/_journalctl

index 2271f7fa9c5d4a09026753321b1ffea4828a94b6..e6549e863f15b15a74a8da1cb80b0a5ede680a5d 100644 (file)
@@ -33,7 +33,7 @@ _journal_none() {
 
 _journal_fields() {
     local -a _fields cmd
-    cmd=("journalctl" "-F ${@[-1]}" "2>/dev/null" )
+    cmd=("journalctl $_sys_service_mgr" "-F ${@[-1]}" "2>/dev/null" )
     _fields=$(_call_program fields $cmd[@])
     _fields=${_fields//'\'/'\\'}
     _fields=${_fields//':'/'\:'}
@@ -51,8 +51,22 @@ _journal_boots() {
     "bootid:boot ids:compadd -a _bootid"
 }
 
-local -a _modes; _modes=("--user" "--system")
-local _sys_service_mgr=${${words:*_modes}[(R)(${(j.|.)_modes})]:---system}
+# Build arguments for "journalctl" to be used in completion.
+# Use both --user and --system modes, they are not exclusive.
+local -a _modes; _modes=(--user --system)
+local -a _modes_with_arg; _modes_with_arg=(--directory -D --file -M --machine)
+typeset -a _sys_service_mgr
+local w i=0 n=$#words
+while (( i++ < n )); do
+    w=$words[$i]
+    if (( $_modes[(I)$w] )); then
+        _sys_service_mgr+=($w)
+    else
+        if (( ${_modes_with_arg[(I)$w]} )); then
+            _sys_service_mgr+=($w ${words[((++i))]})
+        fi
+    fi
+done
 _arguments -s \
     {-h,--help}'[Show this help]' \
     '--version[Show package version]' \