]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - shell-completion/bash/systemd-cgls
shell-completion: use 4 space indentation too
[thirdparty/systemd.git] / shell-completion / bash / systemd-cgls
index 0570438660bf3ea65e874c433e9d156cfe0766c9..9a5969bee702ad692cd43f95db1de9f0669d06d3 100644 (file)
@@ -1,9 +1,8 @@
 # systemd-cgls(1) completion                  -*- shell-script -*-
+# SPDX-License-Identifier: LGPL-2.1+
 #
 # This file is part of systemd.
 #
-# Copyright 2014 Thomas H.P. Andersen
-#
 # systemd is free software; you can redistribute it and/or modify it
 # under the terms of the GNU Lesser General Public License as published by
 # the Free Software Foundation; either version 2.1 of the License, or
 # along with systemd; If not, see <http://www.gnu.org/licenses/>.
 
 __contains_word() {
-        local w word=$1; shift
-        for w in "$@"; do
-                [[ $w = "$word" ]] && return
-        done
+    local w word=$1; shift
+    for w in "$@"; do
+        [[ $w = "$word" ]] && return
+    done
 }
 
 __get_machines() {
-        local a b
-        machinectl list --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+    local a b
+    machinectl list --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+}
+
+__get_units_have_cgroup() {
+    systemctl $1 list-units | {
+        while read -r a b c d; do
+            [[ $c == "active" && ${a##*.} =~ (service|socket|mount|swap|slice|scope) ]] && echo " $a"
+        done
+    };
 }
 
 _systemd_cgls() {
-        local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
-        local i verb comps
-
-        local -A OPTS=(
-               [STANDALONE]='-h --help --version --all -l --full -k --no-pager'
-                      [ARG]='-M --machine'
-        )
-
-        _init_completion || return
-
-        if __contains_word "$prev" ${OPTS[ARG]}; then
-                case $prev in
-                        --machine|-M)
-                                comps=$( __get_machines )
-                        ;;
-                esac
-                COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
-                return 0
-        fi
-
-        COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
+    local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
+    local i verb comps
+
+    local -A OPTS=(
+        [STANDALONE]='-h --help --version --all -l --full -k --no-pager'
+        [ARG]='-M --machine -u --unit --user-unit'
+    )
+
+    _init_completion || return
+
+    if __contains_word "$prev" ${OPTS[ARG]}; then
+        case $prev in
+            --machine|-M)
+                comps=$( __get_machines )
+                ;;
+            --unit|-u)
+                comps=$( __get_units_have_cgroup --system )
+                ;;
+            --user-unit)
+                comps=$( __get_units_have_cgroup --user )
+                ;;
+        esac
+        COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+        return 0
+    fi
+
+    COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
 }
 
 complete -F _systemd_cgls systemd-cgls