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
|