#compdef xinput # ------------------------------------------------------------------------------ # Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the zsh-users nor the # names of its contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ------------------------------------------------------------------------------ # Description # ----------- # # Completion script for xinput # TODO: Add property handler # TODO: Add buttons handler # ------------------------------------------------------------------------------ # Authors # ------- # # * Timofey Titovets # # ------------------------------------------------------------------------------ _xinput(){ # list of xinput arguments local -a _1st_arguments _1st_arguments=( 'version:show version' '--version:show version' 'help:show help options' '--help:show help options' get-feedbacks set-ptr-feedback set-integer-feedback get-button-map set-button-map set-pointer 'set-mode:change the mode of device' '--set-mode:change the mode of device' 'list:show devices' '--list:show devices' query-state test --test create-master remove-master reattach float set-cp test-xi2 map-to-output list-props set-int-prop set-float-prop set-atom-prop watch-props delete-prop set-prop 'disable:disable the device' '--disable:disable the device' 'enable:enable the device' '--enable:enable the device' --get-feedbacks --set-ptr-feedback --set-integer-feedback --get-button-map --set-button-map --set-pointer --query-state --create-master --remove-master --reattach --float --set-cp --test-xi2 --map-to-output --list-props --set-int-prop --set-float-prop --set-atom-prop --watch-props --delete-prop --set-prop ) local context state line expl local -A opt_args _arguments '*:: :->subcmds' && return 0 if (( CURRENT == 1 )); then _describe -t commands "xinput commands" _1st_arguments -V1 return fi typeset -a xinput_devices_id xinput_devices typeset -A xinput_devices_name xinput_devices_id=($(xinput list --id-only)) for i in $(xinput list --id-only) do xinput_devices_name[$i]="$(xinput list --name-only $i)" done xinput_devices=( $xinput_devices_id $xinput_devices_name ) # xinput arguments handler case "$words[1]" in --get-feedbacks|--set-ptr-feedback|--get-button-map|--query-state|--list-props|--watch-props|get-feedbacks|set-ptr-feedback|get-button-map|query-state|list-props|watch-props|--enable|enable|--map-to-output|map-to-output|--disable|disable) _arguments \ ':list option:($xinput_devices)' ;; --list|list) _arguments \ ':list option:($xinput_devices --short --long --name-only --id-only)' \ ':list option:(--short --long --name-only --id-only)' ;; --set-integer-feedback|set-integer-feedback) _arguments \ ':list option:($xinput_devices)' \ ':list option:( feedback )' \ ':list option:( $xinput_devices_id )' ;; --set-button-map|set-button-map) _arguments \ ':list option:($xinput_devices)' #map button 1 [map button 2 [...]] ;; --set-pointer|set-pointer) _arguments \ ':list option:($xinput_devices)' # [x index y index] ;; --set-mode|set-mode) _arguments \ ':list option:($xinput_devices)' \ ':list option:(ABSOLUTE RELATIVE)' ;; --test|test) _arguments \ ':list option:(-proximity $xinput_devices )' \ ':list option:($xinput_devices)' ;; --reattach|reattach) _arguments \ ':list option:($xinput_devices)' \ ':list option:(master slave)' ;; --float|float) _arguments \ ':list option:($xinput_devices_id)' ;; --test-xi2|test-xi2) _arguments \ ':list option:($xinput_devices --root)' \ ':list option:($xinput_devices)' ;; --delete-prop|delete-prop) _arguments \ ':list option:($xinput_devices)' #property ;; --create-master|create-master) _arguments \ ':list option:($xinput_devices_id)' # [sendCore (dflt:1)] [enable (dflt:1)] ;; --remove-master|remove-master) _arguments \ ':list option:($xinput_devices_id)' # [Floating|AttachToMaster (dflt:Floating)] [returnPointer] [returnKeyboard] ;; # --set-cp|set-cp); window device;; --set-prop|set-prop) _arguments \ ':list option:($xinput_devices)' \ ':list option:(--type={atom,float,int} --format={8,16,32})' \ ':list option:(--type={atom,float,int} --format={8,16,32})' # property val [val ...] ;; --set-int-prop|set-int-prop) _arguments \ ':list option:($xinput_devices)' # property format (8, 16, 32) val [val ...] ;; --set-float-prop|set-float-prop) _arguments \ ':list option:($xinput_devices)' # property val [val ...] ;; --set-atom-prop|set-atom-prop) _arguments \ ':list option:($xinput_devices)' # property val [val ...] ;; esac } _xinput "$@"