blob: fd035743f4c7a88a8f934b0eabc4a59a1a1dd56f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#compdef dbus-send dbus-monitor
local curcontext="$curcontext" state line expl find end ret=1
typeset -A opt_args
local -a suf introspect interfaces
case $service in
dbus-send)
_arguments -A "--*" -C \
'(--session)--system' '(--system)--session' \
'--address=-:bus address:->addresses' \
'--dest=-:connection:->connections' \
'--print-reply=-::format:(literal)' \
'--reply-timeout=-:timeout (ms)' \
'--type=-:type:(method_call signal)' \
'(* -)--help' \
':object path:->objectpaths' \
':message name:->methods' \
':content:->contents' && ret=0
;;
dbus-monitor)
_arguments -A "--*" -C \
'*:watch expression:->expressions' \
- '(bus)' \
--system --session
'--address=-:bus address:->addresses' \
- '(format)' \
--monitor --profile --pcap --binary && ret=0
;;
esac
case $state in
addresses)
compset -P '*;'
if compset -P 1 '*='; then
_files && ret=0
else
_message -e addresses address
fi
;;
connections)
_wanted connections expl connection compadd ${=${(M)PREFIX:#*.*}:+-M 'r:|.=* r:|=*'} ${$(_call_program connections dbus-send ${opt_args[(I)--system]} --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListActivatableNames 2>/dev/null):#(array|\[|\])} ${$(_call_program connections dbus-send ${opt_args[(I)--system]} --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames 2>/dev/null):#(array|\[|\])} && ret=0
;;
objectpaths)
if [[ -prefix / ]]; then
compset -P ${PREFIX%%[^/]#}
_wanted objectpaths expl 'object path' compadd -qS/ ${${${(M)${(f)"$(_call_program objectpaths dbus-send --print-reply ${(M)words:#(--dest=|--system|--address=)*} ${${IPREFIX%/}:-/} org.freedesktop.DBus.Introspectable.Introspect 2>/dev/null)"}:#*node name=[^/]##\"*}#*\"}%\"*} && ret=0
else
_wanted objectpaths expl 'object path' compadd -S '/' -r '-=' '' && ret=0
fi
;;
methods)
introspect=( ${(M)${(f)"$(_call_program methods dbus-send --print-reply ${(M)words:#(--dest=|--system|--address=|/)*} org.freedesktop.DBus.Introspectable.Introspect 2>/dev/null)"}:#*name=*} )
interfaces=( ${${${(M)introspect:#*interface name=*}#*\"}%\"*} )
_wanted interfaces expl interface compadd -qS. -M 'r:|.=* r:|=*' -a interfaces && ret=0
if [[ $compstate[nmatches] != $#interfaces ]] && compset -P '*.'; then
find="*interface name=?${IPREFIX%.}??"
end=${interfaces[(i)${IPREFIX%.}]}
_wanted methods expl method compadd ${${${(M)${${introspect[${introspect[(i)$find]}+1,(in.end+1.)*interface name=*]}:#*interface name=*}:#*${${opt_args[--type]%_*}:-method} name=*}#*\"}%\"*} && ret=0
fi
;;
contents)
compset -S ':*' || suf=( -S : )
while compset -P '(array|dict|variant):'; do
:
done
if compset -P '*:'; then
_message -e value 'value'
else
_alternative -O suf \
'containers:container:(array dict variant)' \
'types:type:(string double byte boolean objpath '${(j. .):-{,u}int{16,32,64}}\) && ret=0
fi
;;
expressions)
_values -w -s , 'expression' \
'type:message type:(signal method_call method_return error)' \
'sender:bus or name' \
'interface:interface' \
'member:member' \
'path:path' \
'path_namespace:path' \
'destination:unique name' \
arg{0..9}:value \
'arg0namespace:namespace' \
'eavesdrop:eavesdropping:(true false)' && ret=0
;;
esac
return ret
|