]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - shell-completion/bash/busctl
Merge pull request #11827 from keszybz/pkgconfig-variables
[thirdparty/systemd.git] / shell-completion / bash / busctl
index aa4c1d74d98a9bd3cdfd62c6246817b0790e46e9..63a7644cbfeff742b5e585d4fb6ce2221ccf5427 100644 (file)
@@ -3,9 +3,6 @@
 #
 # This file is part of systemd.
 #
-# Copyright 2013 Zbigniew JÄ™drzejewski-Szmek
-# 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
@@ -28,28 +25,32 @@ __contains_word () {
 
 __get_machines() {
         local a b
-        machinectl list --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+        machinectl list --no-legend --no-pager 2>/dev/null |
+                { while read a b; do echo " $a"; done; };
 }
 
 __get_busnames() {
         local mode=$1
         local a b
-        busctl $mode list --no-legend --no-pager | { while read a b; do echo " $a"; done; };
+        busctl $mode list --no-legend --no-pager 2>/dev/null |
+                { while read a b; do echo " $a"; done; };
 }
 
 __get_objects() {
         local mode=$1
         local busname=$2
         local a b
-        busctl $mode tree --list --no-legend --no-pager $busname | { while read a b; do echo " $a"; done; };
+        busctl $mode tree --list --no-legend --no-pager $busname 2>/dev/null |
+                { while read a b; do echo " $a"; done; };
 }
 
 __get_interfaces() {
         local mode=$1
         local busname=$2
         local path=$3
-        local a b
-        busctl $mode introspect --list --no-legend --no-pager $busname $path | { while read a b c; do [[ "$b" == "interface" ]] && echo " $a"; done; };
+        local a b c
+        busctl $mode introspect --list --no-legend --no-pager $busname $path 2>/dev/null |
+                { while read a b c; do [[ "$b" == "interface" ]] && echo " $a"; done; };
 }
 
 __get_members() {
@@ -58,8 +59,11 @@ __get_members() {
         local path=$3
         local interface=$4
         local type=$5
-        local a b
-        busctl $mode introspect --list --no-legend --no-pager $busname $path $interface | sed -e 's/^\.//' | { while read a b c; do [[ "$b" == "$type" ]] && echo " $a"; done; };
+        local flags=$6
+        local a b c d e
+        busctl $mode introspect --list --no-legend --no-pager $busname $path $interface 2>/dev/null |
+                sed -e 's/^\.//' |
+                { while read a b c d e; do [[ "$b" == "$type" && ( -z $flags || "$e" == "$flags" ) ]] && echo " $a"; done; };
 }
 
 __get_signature() {
@@ -68,19 +72,22 @@ __get_signature() {
         local path=$3
         local interface=$4
         local member=$5
-        local a b
-        busctl $mode introspect --list --no-legend --no-pager $busname $path $interface | sed -e 's/^\.//' | { while read a b c d; do [[ "$a" == "$member" ]] && echo " \"$c\""; done; };
+        local a b c d
+        busctl $mode introspect --list --no-legend --no-pager $busname $path $interface 2>/dev/null |
+                sed -e 's/^\.//' | { while read a b c d; do [[ "$a" == "$member" && "$c" != '-' ]] && echo " \"$c\""; done; };
 }
 
 _busctl() {
-        local i verb comps mode
+        local i verb comps mode
         local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
         local -A OPTS=(
                [STANDALONE]='-h --help --version --no-pager --no-legend --system --user
                              --show-machine --unique --acquired --activatable --list
-                             --quiet --verbose --expect-reply=no --auto-start=no
-                             --allow-interactive-authorization=yes --augment-creds=no'
-                      [ARG]='-H --host -M --machine --address --match --timeout'
+                             -q --quiet --verbose --expect-reply=no --auto-start=no
+                             --allow-interactive-authorization=no --augment-creds=no
+                             --watch-bind=yes -j'
+                      [ARG]='--address -H --host -M --machine --match --timeout --size --json
+                             --destination'
         )
 
         if __contains_word "--user" ${COMP_WORDS[*]}; then
@@ -96,6 +103,13 @@ _busctl() {
                         ;;
                         --machine|-M)
                                 comps=$( __get_machines )
+                        ;;
+                        --json)
+                                comps=$( busctl --json=help 2>/dev/null )
+                        ;;
+                        --destination)
+                                comps=$( __get_busnames $mode )
+                        ;;
                 esac
                 COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
                 return 0
@@ -111,6 +125,7 @@ _busctl() {
                 [BUSNAME]='status monitor capture tree'
                 [OBJECT]='introspect'
                 [METHOD]='call'
+                [EMIT]='emit'
                 [PROPERTY_GET]='get-property'
                 [PROPERTY_SET]='set-property'
         )
@@ -155,6 +170,8 @@ _busctl() {
                 else
                         comps=''
                 fi
+        elif __contains_word "$verb" ${VERBS[EMIT]}; then
+                comps=''
         elif __contains_word "$verb" ${VERBS[PROPERTY_GET]}; then
                 if [[ $n -eq 1 ]] ; then
                         comps=$( __get_busnames $mode)
@@ -175,7 +192,7 @@ _busctl() {
                 elif [[ $n -eq 3 ]] ; then
                         comps=$( __get_interfaces $mode ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]})
                 elif [[ $n -eq 4 ]] ; then
-                        comps=$( __get_members $mode ${COMP_WORDS[COMP_CWORD-3]} ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]} property)
+                        comps=$( __get_members $mode ${COMP_WORDS[COMP_CWORD-3]} ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]} property writable)
                 elif [[ $n -eq 5 ]] ; then
                         comps=$( __get_signature $mode ${COMP_WORDS[COMP_CWORD-4]} ${COMP_WORDS[COMP_CWORD-3]} ${COMP_WORDS[COMP_CWORD-2]} ${COMP_WORDS[COMP_CWORD-1]})
                 else