diff --git a/Completion/X/Command/_xwit b/Completion/X/Command/_xwit new file mode 100644 index 000000000..8676ef484 --- /dev/null +++ b/Completion/X/Command/_xwit @@ -0,0 +1,176 @@ +#compdef xwit + +local word=$'[^\0]#\0' +local nul=$'\0' + +local guard='-_xwit_guard ${match[1]%?}' + +_xwit_guard () { + local opt="$1" o + (( no[$opt]-- )) + for o in ${=eo[$opt]}; do + no[$o]=0 + done + : +} + +_xwit_compopts () { + local expl + local opt tmp + + tmp=() + for opt in ${(k)no[(R)*~0]} + do + if (( $+desc[$opt] )); then + tmp=("$tmp[@]" "$opt:$desc[$opt]") + else + tmp=("$tmp[@]" "$opt") + fi + done + _describe -o options tmp -- || + _describe -o options allopts -- + +# compadd "$expl[@]" - ${(k)no[(R)*~0]} || +# compadd "$expl[@]" - ${(k)no} +} + +_regex_arguments _xwit_parse \ + "/$word/" \ + \( "/-display$nul/" "$guard" "/$word/" ':option-display:display:_x_display' \ + \| "/-(sync|pop|open|iconify|unmap|root|current|select|(no|)(save|backingstore|saveunder))$nul/" "$guard" \ + \| "/-resize$nul/" "$guard" \ + "/$word/" ':option-resize-width:width:' \ + "/$word/" ':option-resize-height:height:' \ + \| "/-rows$nul/" "$guard" "/$word/" ':option-rows:rows:' \ + \| "/-columns$nul/" "$guard" "/$word/" ':option-columns:columns:' \ + \| "/-move$nul/" "$guard" \ + "/$word/" ':option-move-x:x:' \ + "/$word/" ':option-move-y:y:' \ + \| "/-rmove$nul/" "$guard" \ + "/$word/" ':option-rmove-x:x:' \ + "/$word/" ':option-rmove-y:y:' \ + \| "/-warp$nul/" "$guard" \ + "/$word/" ':option-warp-x:x:' \ + "/$word/" ':option-warp-y:y:' \ + \| "/-rwarp$nul/" "$guard" \ + "/$word/" ':option-rwarp-x:x:' \ + "/$word/" ':option-rwarp-y:y:' \ + \| "/-colormap$nul/" "$guard" \ + "/$word/" ':option-colormap:colormapid:_x_colormapid' \ + \| "/-(name|label)$nul/" "$guard" \ + "/$word/" ':option-name:name:_x_name' \ + \| "/-iconname$nul/" "$guard" \ + "/$word/" ':option-name:iconname:_x_name' \ + \| "/-bitmap$nul/" "$guard" \ + "/$word/" ':option-bitmap:bitmap file:_files -g *.xbm' \ + \| "/-mask$nul/" "$guard" \ + "/$word/" ':option-mask:mask file:_files -g *.xbm' \ + \| "/-iconmove$nul/" "$guard" \ + "/$word/" ':option-iconmove-x:x:' \ + "/$word/" ':option-iconmove-y:y:' \ + \| "/-id$nul/" "$guard" "/$word/" ':option-id:window id:_x_window' \ + \| "/-(no|)keyrepeat$nul/" "$guard" \ + \( "/[0-9]##$nul/" ':option-keyrepeat-keycode:keycode:{[[ -prefix [0-9]# ]] && _message keycode}' \ + \( "/-$nul/" "/[0-9]##$nul/" \ + ':option-keyrepeat-last-keycode:last keycode:{[[ -prefix [0-9]# ]] && _message "last keycode"}' \| \) \) \# \ + \| "/-names$nul/" "$guard" \ + "/$word/" ':option-names:window name:_x_window -n' \# \ + \| "/[]/" ':options:option:_xwit_compopts' \ + \) \# + +_xwit () { + local expl allopts + typeset -A desc no eo + + desc=( + -display 'specify display' + -sync 'synchronous mode' + -pop 'pop up window' + -open 'pop up window' + -iconify 'iconify window' + -unmap 'iconify window by unmapping' + -root 'select the root window' + -current 'select the window under current pointer' + -select 'select the window interactively' + -save 'activate screen saver' + -backingstore 'enable backingstore' + -saveunder 'enable saveunder' + -nosave 'reset screen saver' + -nobackingstore 'disable backingstore' + -nosaveunder 'disable saveunder' + -resize 'resize window' + -rows 'resize window rows' + -columns 'resize window columns' + -move 'move window' + -rmove 'move window relatively' + -warp 'warp pointer' + -rwarp 'warp pointer relatively' + -colormap 'install colormap' + -name 'specify window name' + -label 'specify window name' + -iconname 'specify icon name' + -bitmap 'specify icon bitmap' + -mask 'specify icon mask' + -iconmove 'move icon' + -id 'select the window by window-ID' + -keyrepeat 'enable keyrepeat' + -nokeyrepeat 'disable keyrepeat' + -names 'select the window by name' + ) + + no=( + -display 1 + -sync 1 + -pop 1 -open 0 + -iconify 1 + -unmap 1 + -root 1 + -current 1 + -select 1 + -save 1 + -backingstore 1 + -saveunder 1 + -nosave 1 + -nobackingstore 1 + -nosaveunder 1 + -resize 1 + -rows 1 + -columns 1 + -move 1 + -rmove 1 + -warp 1 + -rwarp 1 + -colormap 1 + -name 1 -label 0 + -iconname 1 + -bitmap 1 + -mask 1 + -iconmove 1 + -id 1 + -keyrepeat 1 + -nokeyrepeat 1 + -names 1 + ) + + allopts=() + for opt in ${(k)no} + do + if (( $+desc[$opt] )); then + allopts=("$allopts[@]" "$opt:$desc[$opt]") + else + allopts=("$allopts[@]" "$opt") + fi + done + + eo=( + -root '-root -current -select -id -names' + -current '-root -current -select -id -names' + -select '-root -current -select -id -names' + -id '-root -current -select -id -names' + -names '-root -current -select -id -names' + ) + + _xwit_parse +} + +_xwit "$@"