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 "$@"
 |