#compdef xset local word=$'[^\0]#\0' local nul=$'\0' local guard='-_xset_guard ${match[1]%?}' _xset_guard () { local opt="$1" o (( no[$opt]-- )) for o in ${=eo[$opt]}; do no[$o]=0 done : } _xset_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 -- } _xset_compfpadd () { _wanted directories expl directory _files -/ } _xset_compfpdel () { _wanted directories expl directory compadd - ${(s:,:)${"$(xset q)"##* Font Path: #}%% *} } _regex_arguments _xset_parse \ "/$word/" \ \( "/-d(isplay|)$nul/" "$guard" "/$word/" ":_x_display" \ \| "/-c$nul/" "$guard" \ \| "/c$nul/" "$guard" \ \( "/(on|off)$nul/" ':_wanted values expl click compadd on off' \ \| "/[0-9]##$nul/" ':_message volume' \ \| \) \ \| "/-b$nul/" "$guard" \ \| "/b$nul/" "$guard" \ \( "/(on|off)$nul/" ':_wanted values expl bell compadd on off' \ \| "/[0-9]##$nul/" ':_message volume' \ \( "/[0-9]##$nul/" ':_message pitch' \ \( "/[0-9]##$nul/" ':_message duration' \ \| \) \ \| \) \ \| \) \ \| "/bc$nul/" "$guard" \ \| "/-bc$nul/" "$guard" \ \| "/fp$nul/" "$guard" "/$word/" ':_wanted values expl "font path" compadd default rehash' \ \| "/(fp[+=]|[+]fp)$nul/" "$guard" "/$word/" ':compset -P "*,"; _xset_compfpadd' \ \| "/(fp-|-fp)$nul/" "$guard" "/$word/" ':compset -P "*,"; _xset_compfpdel' \ \| "/-led$nul/" "$guard" \ \( "/[0-9]##$nul/" ':_message integer' \ \| \) \ \| "/led$nul/" "$guard" \ \( "/(on|off)$nul/" ':_wanted values expl led compadd on off' \ \| "/[0-9]##$nul/" ':_message integer' \ \| \) \ \| "/m(ouse|)$nul/" "$guard" \ \( "/default$nul/" ':_wanted values expl "mouse parameter" compadd default' \ \| "/[0-9]##(/[0-9]##|)$nul/" ':_message accel_mult/accel_div' \ \( "/[0-9]##$nul/" ':_message threshold' \ \| \) \ \| \) \ \| "/[-+]dpms$nul/" "$guard" \ \| "/dpms$nul/" "$guard" \ \( "/[0-9]##$nul/" ':_message "standby timeout"' \ \( "/[0-9]##$nul/" ':_message "suspend timeout"' \ \( "/[0-9]##$nul/" ':_message "off timeout"' \ \| \) \ \| \) \ \| "/(on|standby|suspend|off)$nul/" ':_wanted values expl DPMS compadd on standby suspend off' \ \) \ \| "/s$nul/" "$guard" \ \( "/(blank|noblank|expose|noexpose|default|on|activate|reset)$nul/" \ ':_wanted values expl "screen saver" compadd blank noblank expose noexpose default on activate reset off' \ \| "/off$nul/" \( "/off$nul/" ':compadd off' \| \) \ \| "/[0-9]##$nul/" ':_message length' \ \( "/[0-9]##$nul/" ':_message period' \ \| \) \ \| \) \ \| "/-r$nul/" "$guard" \ \( "/[0-9]##$nul/" ':_message keycode' \ \| \) \ \| "/r$nul/" "$guard" \ \( "/(on|off)$nul/" ':_wanted values expl autorepeat compadd on off' \ \| "/[0-9]##$nul/" ':_message keycode' \ \| \) \ \| "/p$nul/" "$guard" \ "/[0-9]##$nul/" ':_message pixel' \ "/$word/" ':_x_color' \ \| "/(-|)k$nul/" "$guard" \ \| "/(-|)q$nul/" "$guard" \ \| "/[]/" ':_xset_compopts' \ \) \# _xset () { local expl allopts typeset -A desc no eo desc=( b 'specify bell parameters' -b 'disable bell' bc 'enable bug compatibility' -bc 'disable bug compatibility' c 'control key click' -c 'disable key click' -dpms 'disable DPMS' +dpms 'enable DPMS' dpms 'specify DPMS parameter' fp\= 'set font path' fp 'control font path' -fp 'remove font path elements' fp- 'remove font path elements' +fp 'prepend font path elements' fp+ 'append font path elements' led 'control keyboard LEDs' -led 'turn off all LEDs' m 'specify mouse parameters' mouse 'specify mouse parameters' p 'specify pixel color values' r 'enable autorepeat' -r 'disable autorepeat' s 'specify screen saver parameters' q 'query current information' k 'enable lock' -k 'disable lock' -display 'display' ) no=( -display 1 -d 0 -c 1 c 1 -b 1 b 1 -bc 1 bc 1 fp 1 fp= 1 +fp 1 fp+ 1 -fp 1 fp- 1 -led 1 led 1 mouse 1 m 0 +dpms 1 -dpms 1 dpms 1 s 1 -r 1 r 1 p 1 -k 1 k 1 -q 0 q 1 ) allopts=() for opt in ${(k)no} do if (( $+desc[$opt] )); then allopts=("$allopts[@]" "$opt:$desc[$opt]") else allopts=("$allopts[@]" "$opt") fi done eo=( -display '-display -d' -d '-display -d' -c '-c c' c '-c c' -b '-b b' b '-b b' -bc '-bc bc' bc '-bc bc' fp+ 'fp fp=' fp- 'fp fp=' +fp 'fp fp=' -fp 'fp fp=' m 'm mouse' mouse 'm mouse' -dpms '+dpms -dpms dpms' +dpms '+dpms -dpms dpms' dpms '+dpms -dpms dpms' -k '-k k' k '-k k' ) _xset_parse } [[ -o kshautoload ]] || _xset "$@"