]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Support Bash completions for short option group in journalctl (#40214)
authorGuiorgy <Guiorgy123@gmail.com>
Wed, 31 Dec 2025 14:58:58 +0000 (18:58 +0400)
committerGitHub <noreply@github.com>
Wed, 31 Dec 2025 14:58:58 +0000 (14:58 +0000)
Currently, the Bash completions for journalctl tries to match the
previous word _**exactly**_, which leads to the following issue:
`journalctl -u dock` correctly auto completes to `journalctl -u
docker.service`, but `journalctl -eu` provides no completions at all,
which is a shame since I never use the `-u` option alone (almost always
`-eu` or `-efu`, I wish the `-e` option was the default but I digress).

The proposed solution is to assume words that start with only a single
dash and consist of only letters are short option groups and handle them
as if the previous word was the short option using the last character,
e.g. `-efu` -> `-u`.

shell-completion/bash/journalctl

index fc0fbba664256287542fd53adf7355ba609f88b6..f33f938e300e5da63c73f2959f0987a378030a3e 100644 (file)
@@ -65,6 +65,13 @@ _journalctl() {
         return 0
     fi
 
+    # If the previous word looks like a short options group,
+    # handle it as if it were just the last short option.
+    # e.g. "-aefu" -> "-u"
+    if [[ "$prev" =~ ^-[a-zA-Z]{2,}$ ]]; then
+        prev="-${prev:(-1)}"
+    fi
+
     if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then
         case $prev in
             --boot|-b)