blob: 2bbadd65adaf012f158267b7dcd273fe59f93f2a (
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
#compdef xinput
local curcontext="$curcontext" xinput=${words[1]} desc subcmd out ret=1
local match mbegin mend
local -a state state_descr line args cmds ids names disp expl
local -A opt_args
cmds=(
'get-feedbacks:display device feedbacks'
'set-ptr-feedback:change pointer acceleration (or feedback) parameters '
'set-integer-feedback:change value of an integer device feedback'
'get-button-map:get the button mapping of a device'
'set-button-map:change the button mapping of a device'
set-pointer
"set-mode:set a device's mode"
'list:list input devices or device features'
"query-state:query a device's state"
'test:perpetual display of extended events from a device'
'create-master:create a new pair of master devices on an XI2-enabled server'
'remove-master:remove a master and its paired master device'
'reattach:reattach a slave to a master'
'float:remove a slave from its current master device'
'set-cp:set the ClientPointer for the client owning window to master'
'test-xi2:perpetual display of XI2 events'
'map-to-output:restrict movements of the absolute device to an RandR crtc'
'list-props:list properties that can be set for a device'
set-int-prop set-float-prop set-atom-prop
'watch-props:perpetual display of property changes'
'delete-prop:delete a property from a device'
'set-prop:set a property to a given value'
'disable:disable a device'
'enable:enable a device'
'help:display usage information'
'version:display version information for program and server'
)
if (( CURRENT == 2 )); then
if [[ -prefix - ]]; then
cmds=( --$^cmds )
desc=option
else
desc=command
fi
_describe -t ${desc}s $desc cmds -M 'r:|-=* r:|=*'
return
fi
subcmd=${words[2]#--}
curcontext="${curcontext%:*}-$subcmd:"
args=( '1:device:->devices' )
case $subcmd in
(set|delete)-*prop) args+=( '2:property:->properties' ) ;|
set-*prop) args+=( '*:value' ) ;|
set-ptr-feedback) args+=( '2:threshold' '3:num' '4:denom' ) ;;
set-integer-feedback) args+=( '2:feedback id' '3:value' ) ;;
set-button-map)
args+=( '*:::button mapping:compadd -F words -o numeric {1..12}' )
;;
set-pointer) args+=( '2:x index' '3:y index' ) ;;
set-mode) args+=( '2:mode:(ABSOLUTE RELATIVE)' ) ;;
list) args+=( '(-)--short' '(-)--long' '(-)--name-only' '(-)--id-only' ) ;;
test) args+=( '-proximity' ) ;;
create-master)
args=(
'1:prefix'
'2:send core events [1]:((0\:false 1\:true))'
'3:enable [1]:((0\:false 1\:true))'
)
;;
remove-master)
args=(
'1:master:->devices'
'2:slave setting:(Floating AttachToMaster)'
'3:pointer master:->devices'
'4:keyboard master:->devices'
)
;;
reattach) args=( '1:slave:->devices' '2:master:->devices' ) ;;
float) args=( '1:slave:->devices' ) ;;
set-cp) args=( '1:window:_x_window' '2:device:->devices' ) ;;
test-xi2) args+=( '--root[select events on the root window only]' ) ;;
map-to-output) args+=( '2:output:->outputs' ) ;;
list-props) args=( '*:device:->devices' ) ;;
set-int-prop) args+=( '3:format:compadd -o numeric 8 16 32' ) ;;
set-prop)
args+=(
'--type=-:type:(atom float int)'
'--format=-:format:compadd -o numeric 8 16 32'
)
;;
help|version) _message 'no more arguments'; return 1 ;;
esac
shift words
(( CURRENT-- ))
_arguments -C -A "-*" $args && ret=0
case $state in
devices)
_description input-devices expl $state_descr
ids=( ${${(f)"$(_call_program input-devices $xinput list --id-only)"}#? } )
names=( ${${(f)"$(_call_program input-devices $xinput list --name-only)"}#? } )
disp=( ${(f)"$(_call_program input-devices $xinput list --short)"} )
if [[ $PREFIX$SUFFIX = [^-]*[^0-9]* ]]; then
# match based on the names but insert IDs
compadd "$expl[@]" -M 'b:=* m:{[:lower:]}={[:upper:]}' -D ids -D disp -a names
compadd "$expl[@]" -U -ld disp -a ids && ret=0
zstyle -s ":completion:${curcontext}:input-devices" insert-ids out || out=menu
case "$out" in
menu) compstate[insert]=menu ;;
single) [[ $#ids -ne 1 && $compstate[insert] != menu ]] &&
compstate[insert]= ;;
*) [[ ${#:-$PREFIX$SUFFIX} -gt ${#compstate[unambiguous]} ]] &&
compstate[insert]=menu ;;
esac
else
compadd "$expl[@]" -M 'B:0=' -o nosort -ld disp -a ids && ret=0
fi
;;
properties)
_description input-properties expl 'property'
disp=( ${${${${(M)${(f)"$(_call_program input-properties
$xinput list-props $line[1]
)"}:#[[:blank:]]*}##[[:blank:]]#}%%:*}:/(#b)(*) \((<->)\)/$match[2]:$match[1]}
)
_describe -t input-properties $state_descr disp -o numeric && ret=0
;;
outputs)
_description outputs expl 'output'
compadd "$expl[@]" - ${${(M)${(f)"$(_call_program outputs
xrandr)"}:#* connected*}%% *} && ret=0
;;
esac
return ret
|