209 lines
6.4 KiB
Plaintext
209 lines
6.4 KiB
Plaintext
|
#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 <nefelim4ag@gmail.com>
|
|||
|
#
|
|||
|
# ------------------------------------------------------------------------------
|
|||
|
_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
|
|||
|
local -A opt_args
|
|||
|
# Used with "-O expl" for unsorted.
|
|||
|
local -a expl
|
|||
|
expl=(-Vx)
|
|||
|
|
|||
|
_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 xinput_devices_name
|
|||
|
local i name
|
|||
|
for i in ${(on)$(xinput list --id-only)}; do
|
|||
|
# Removing prefixes, e.g. from "∼ 7" (floating slave).
|
|||
|
i=${i##[^[:digit:]]#}
|
|||
|
[[ -n "$i" ]] || continue
|
|||
|
xinput_devices_id+=($i)
|
|||
|
name="$(xinput list --name-only $i)"
|
|||
|
xinput_devices_name+=(${name//:/\\:})
|
|||
|
xinput_devices+=($i\:$name)
|
|||
|
done
|
|||
|
xinput_devices+=($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 -O expl \
|
|||
|
':list option:(($xinput_devices))'
|
|||
|
;;
|
|||
|
--list|list)
|
|||
|
_arguments -O expl \
|
|||
|
'--short' \
|
|||
|
'--long' \
|
|||
|
'--name-only' \
|
|||
|
'--id-only' \
|
|||
|
':list option:(($xinput_devices))' \
|
|||
|
;;
|
|||
|
--set-integer-feedback|set-integer-feedback)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))' \
|
|||
|
':list option:( feedback )' \
|
|||
|
':list option:( $xinput_devices_id )'
|
|||
|
;;
|
|||
|
--set-button-map|set-button-map)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))' #map button 1 [map button 2 [...]]
|
|||
|
;;
|
|||
|
--set-pointer|set-pointer)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))' # [x index y index]
|
|||
|
;;
|
|||
|
--set-mode|set-mode)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))' \
|
|||
|
':list option:(ABSOLUTE RELATIVE)'
|
|||
|
;;
|
|||
|
--test|test)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(-proximity ($xinput_devices ))' \
|
|||
|
':list option:(($xinput_devices))'
|
|||
|
;;
|
|||
|
--reattach|reattach)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))' \
|
|||
|
':list option:(master slave)'
|
|||
|
;;
|
|||
|
--float|float)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))'
|
|||
|
;;
|
|||
|
--test-xi2|test-xi2)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices --root))' \
|
|||
|
':list option:(($xinput_devices))'
|
|||
|
;;
|
|||
|
--delete-prop|delete-prop)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))' #property
|
|||
|
;;
|
|||
|
--create-master|create-master)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))' # [sendCore (dflt:1)] [enable (dflt:1)]
|
|||
|
;;
|
|||
|
--remove-master|remove-master)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:($xinput_devices_id)' # [Floating|AttachToMaster (dflt:Floating)] [returnPointer] [returnKeyboard]
|
|||
|
;;
|
|||
|
# --set-cp|set-cp); window device;;
|
|||
|
--set-prop|set-prop)
|
|||
|
_arguments -O expl \
|
|||
|
':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 -O expl \
|
|||
|
':list option:(($xinput_devices))' # property format (8, 16, 32) val [val ...]
|
|||
|
;;
|
|||
|
--set-float-prop|set-float-prop)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))' # property val [val ...]
|
|||
|
;;
|
|||
|
--set-atom-prop|set-atom-prop)
|
|||
|
_arguments -O expl \
|
|||
|
':list option:(($xinput_devices))' # property val [val ...]
|
|||
|
;;
|
|||
|
esac
|
|||
|
}
|
|||
|
|
|||
|
_xinput "$@"
|