From b4bb96f3f2925a4a6b52400d4aefa40b561835e9 Mon Sep 17 00:00:00 2001 From: Nishal Kulkarni Date: Tue, 14 Dec 2021 14:13:13 +0530 Subject: [PATCH] shell-completion: Add completion for systemd-analyze critical-chain systemd-analyze critical-chain accepts an optional unit argument, however currently there's no shell-completion for it This change provides unit name completion for both bash and zsh. Closes: #20927 --- shell-completion/bash/systemd-analyze | 7 +++++++ shell-completion/zsh/_systemd-analyze | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/shell-completion/bash/systemd-analyze b/shell-completion/bash/systemd-analyze index f6dc972f03..7a1104c0ad 100644 --- a/shell-completion/bash/systemd-analyze +++ b/shell-completion/bash/systemd-analyze @@ -30,6 +30,11 @@ __get_machines() { machinectl list --full --no-legend --no-pager | { while read a b; do echo " $a"; done; }; } +__get_units_all() { + systemctl list-units --no-legend --no-pager --plain --all | \ + { while read -r a b c; do echo " $a"; done } +} + __get_services() { systemctl list-units --no-legend --no-pager --plain -t service --all $1 | \ { while read -r a b c; do [[ $b == "loaded" ]]; echo " $a"; done } @@ -111,6 +116,8 @@ _systemd_analyze() { elif __contains_word "$verb" ${VERBS[CRITICAL_CHAIN]}; then if [[ $cur = -* ]]; then comps='--help --version --system --user --fuzz --no-pager' + else + comps=$( __get_units_all ) fi elif __contains_word "$verb" ${VERBS[DOT]}; then diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze index 9c33d73f98..2ce8a3a088 100644 --- a/shell-completion/zsh/_systemd-analyze +++ b/shell-completion/zsh/_systemd-analyze @@ -11,6 +11,16 @@ _files -W '(/run/systemd/ /etc/systemd/ /usr/lib/systemd/)' -P 'systemd/' } +(( $+functions[_systemd-analyze_critical-chain] )) || + _systemd-analyze_critical-chain() { + local -a _units + systemctl list-units --no-legend --no-pager --plain --all | + while read -r a b c; do + _units+=($a) + done + compadd -a _units + } + (( $+functions[_systemd-analyze_security] )) || _systemd-analyze_security() { _sd_unit_files