zsh-workers
 help / color / mirror / code / Atom feed
00a976d5d273523c8e98da9943cf72efb8e91a5e blob 4982 bytes (raw)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
 
#compdef xinput

local curcontext="$curcontext" xinput=${words[1]} desc subcmd out ret=1
local match mbegin mend
local -a state state_descr line args cmds ids names disp expl
local -A opt_args

cmds=(
  'get-feedbacks:display device feedbacks'
  'set-ptr-feedback:change pointer acceleration (or feedback) parameters '
  'set-integer-feedback:change value of an integer device feedback'
  'get-button-map:get the button mapping of a device'
  'set-button-map:change the button mapping of a device'
  set-pointer
  "set-mode:set a device's mode"
  'list:list input devices or device features'
  "query-state:query a device's state"
  'test:perpetual display of extended events from a device'
  'create-master:create a new pair of master devices on an XI2-enabled server'
  'remove-master:remove a master and its paired master device'
  'reattach:reattach a slave to a master'
  'float:remove a slave from its current master device'
  'set-cp:set the ClientPointer for the client owning window to master'
  'test-xi2:perpetual display of XI2 events'
  'map-to-output:restrict movements of the absolute device to an RandR crtc'
  'list-props:list properties that can be set for a device'
  set-int-prop set-float-prop set-atom-prop
  'watch-props:perpetual display of property changes'
  'delete-prop:delete a property from a device'
  'set-prop:set a property to a given value'
  'disable:disable a device'
  'enable:enable a device'
  'help:display usage information'
  'version:display version information for program and server'
)

if (( CURRENT == 2 )); then
  if [[ -prefix - ]]; then
    cmds=( --$^cmds )
    desc=option
  else
    desc=command
  fi
  _describe -t ${desc}s $desc cmds -M 'r:|-=* r:|=*'
  return
fi

subcmd=${words[2]#--}
curcontext="${curcontext%:*}-$subcmd:"

args=( '1:device:->devices' )
case $subcmd in
  (set|delete)-*prop) args+=( '2:property:->properties' ) ;|
  set-*prop) args+=( '*:value' ) ;|
  set-ptr-feedback) args+=( '2:threshold' '3:num' '4:denom' ) ;;
  set-integer-feedback) args+=( '2:feedback id' '3:value' ) ;;
  set-button-map)
    args+=( '*:::button mapping:compadd -F words -o numeric {1..12}' )
  ;;
  set-pointer) args+=( '2:x index' '3:y index' ) ;;
  set-mode) args+=( '2:mode:(ABSOLUTE RELATIVE)' ) ;;
  list) args+=( '(-)--short' '(-)--long' '(-)--name-only' '(-)--id-only' ) ;;
  test) args+=( '-proximity' ) ;;
  create-master)
    args=(
      '1:prefix'
      '2:send core events [1]:((0\:false 1\:true))'
      '3:enable [1]:((0\:false 1\:true))'
    )
  ;;
  remove-master)
    args=(
      '1:master:->devices'
      '2:slave setting:(Floating AttachToMaster)'
      '3:pointer master:->devices'
      '4:keyboard master:->devices'
    )
  ;;
  reattach) args=( '1:slave:->devices' '2:master:->devices' ) ;;
  float) args=( '1:slave:->devices' ) ;;
  set-cp) args=( '1:window:_x_window' '2:device:->devices' ) ;;
  test-xi2) args+=( '--root[select events on the root window only]' ) ;;
  map-to-output) args+=( '2:output:->outputs' ) ;;
  list-props) args=( '*:device:->devices' ) ;;
  set-int-prop) args+=( '3:format:compadd -o numeric 8 16 32' ) ;;
  set-prop)
    args+=(
      '--type=-:type:(atom float int)'
      '--format=-:format:compadd -o numeric 8 16 32'
    )
  ;;
  help|version) _message 'no more arguments'; return 1 ;;
esac

shift words
(( CURRENT-- ))
_arguments -C -A "-*" $args && ret=0

case $state in
  devices)
    _description input-devices expl $state_descr

    ids=( ${${(f)"$(_call_program input-devices $xinput list --id-only)"}#? } )
    names=( ${${(f)"$(_call_program input-devices $xinput list --name-only)"}#? } )
    disp=( ${(f)"$(_call_program input-devices $xinput list --short)"} )

    if [[ $PREFIX$SUFFIX = [^-]*[^0-9]* ]]; then
      # match based on the names but insert IDs
      compadd "$expl[@]" -M 'b:=* m:{[:lower:]}={[:upper:]}' -D ids -a names
      compadd "$expl[@]" -M 'b:=* m:{[:lower:]}={[:upper:]}' -D disp -a names
      compadd "$expl[@]" -U -ld disp -a ids && ret=0

      zstyle -s ":completion:${curcontext}:input-devices" insert-ids out || out=menu
      case "$out" in
        menu)   compstate[insert]=menu ;;
        single) [[ $#ids -ne 1 && $compstate[insert] != menu ]] &&
                    compstate[insert]= ;;
        *)      [[ ${#:-$PREFIX$SUFFIX} -gt ${#compstate[unambiguous]} ]] &&
                    compstate[insert]=menu ;;
      esac
    else
      compadd "$expl[@]" -M 'B:0=' -o nosort -ld disp -a ids && ret=0
    fi
  ;;
  properties)
    _description input-properties expl 'property'
    disp=( ${${${${(M)${(f)"$(_call_program input-properties
        $xinput list-props $line[1]
        )"}:#[[:blank:]]*}##[[:blank:]]#}%%:*}:/(#b)(*) \((<->)\)/$match[2]:$match[1]}
    )
    _describe -t input-properties $state_descr disp -o numeric && ret=0
  ;;
  outputs)
    _description outputs expl 'output'
    compadd "$expl[@]" - ${${(M)${(f)"$(_call_program outputs
        xrandr)"}:#* connected*}%% *} && ret=0
  ;;
esac

return ret
debug log:

solving 00a976d5d ...
found 00a976d5d in https://git.vuxu.org/mirror/zsh/

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).