From 9ec69989bba6d4590c4c66a5d497d4a16186eae4 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Wed, 24 Jun 2020 00:10:15 +0200 Subject: 46105: new xinput completion --- Completion/X/Command/_xinput | 140 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 Completion/X/Command/_xinput (limited to 'Completion/X') diff --git a/Completion/X/Command/_xinput b/Completion/X/Command/_xinput new file mode 100644 index 000000000..00a976d5d --- /dev/null +++ b/Completion/X/Command/_xinput @@ -0,0 +1,140 @@ +#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 -a names + compadd "$expl[@]" -M 'b:=* m:{[:lower:]}={[:upper:]}' -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 -- cgit 1.4.1