1a46c0ec8Sopenharmony_ci#compdef libinput 2a46c0ec8Sopenharmony_ci 3a46c0ec8Sopenharmony_ci(( $+functions[_libinput_commands] )) || _libinput_commands() 4a46c0ec8Sopenharmony_ci{ 5a46c0ec8Sopenharmony_ci local -a commands 6a46c0ec8Sopenharmony_ci commands=( 7a46c0ec8Sopenharmony_ci "list-devices:List all devices recognized by libinput" 8a46c0ec8Sopenharmony_ci "debug-events:Print all events as seen by libinput" 9a46c0ec8Sopenharmony_ci "debug-gui:Show a GUI to visualize libinput's events" 10a46c0ec8Sopenharmony_ci "debug-tablet:Show tablet axis and button values" 11a46c0ec8Sopenharmony_ci "measure:Measure various properties of devices" 12a46c0ec8Sopenharmony_ci "analyze:Analyze device data" 13a46c0ec8Sopenharmony_ci "record:Record the events from a device" 14a46c0ec8Sopenharmony_ci "replay:Replay the events from a device" 15a46c0ec8Sopenharmony_ci ) 16a46c0ec8Sopenharmony_ci 17a46c0ec8Sopenharmony_ci _describe -t commands 'command' commands 18a46c0ec8Sopenharmony_ci} 19a46c0ec8Sopenharmony_ci 20a46c0ec8Sopenharmony_ci__all_seats() 21a46c0ec8Sopenharmony_ci{ 22a46c0ec8Sopenharmony_ci # Obviously only works with logind 23a46c0ec8Sopenharmony_ci local -a seats 24a46c0ec8Sopenharmony_ci seats=${(f)"$(loginctl --no-legend --no-pager list-seats 2>/dev/null)"} 25a46c0ec8Sopenharmony_ci if [[ -z $seats ]]; then 26a46c0ec8Sopenharmony_ci # Can always offer seat0, even if we can't enumerate the seats 27a46c0ec8Sopenharmony_ci compadd "$@" - seat0 28a46c0ec8Sopenharmony_ci else 29a46c0ec8Sopenharmony_ci compadd "$@" - $seats 30a46c0ec8Sopenharmony_ci fi 31a46c0ec8Sopenharmony_ci} 32a46c0ec8Sopenharmony_ci 33a46c0ec8Sopenharmony_ci(( $+functions[_libinput_list-devices] )) || _libinput_list-devices() 34a46c0ec8Sopenharmony_ci{ 35a46c0ec8Sopenharmony_ci _arguments \ 36a46c0ec8Sopenharmony_ci '--help[Show help and exit]' \ 37a46c0ec8Sopenharmony_ci '--version[show version information and exit]' 38a46c0ec8Sopenharmony_ci} 39a46c0ec8Sopenharmony_ci 40a46c0ec8Sopenharmony_ci(( $+functions[_libinput_debug-events] )) || _libinput_debug-events() 41a46c0ec8Sopenharmony_ci{ 42a46c0ec8Sopenharmony_ci _arguments \ 43a46c0ec8Sopenharmony_ci '--help[Show debug-events help and exit]' \ 44a46c0ec8Sopenharmony_ci '--quiet[Only print libinput messages and nothing from this tool]' \ 45a46c0ec8Sopenharmony_ci '--verbose[Use verbose output]' \ 46a46c0ec8Sopenharmony_ci '--show-keycodes[Make all keycodes visible]' \ 47a46c0ec8Sopenharmony_ci '--grab[Exclusively grab all opened devices]' \ 48a46c0ec8Sopenharmony_ci '--device=[Use the given device with the path backend]:device:_files -W /dev/input/ -P /dev/input/' \ 49a46c0ec8Sopenharmony_ci '--udev=[Listen for notifications on the given seat]:seat:__all_seats' \ 50a46c0ec8Sopenharmony_ci '--apply-to=[Apply configuration options where the device name matches the pattern]:pattern' \ 51a46c0ec8Sopenharmony_ci '--disable-sendevents=[Disable send-events option for the devices matching the pattern]:pattern' \ 52a46c0ec8Sopenharmony_ci '--set-click-method=[Set the desired click method]:click-method:(none clickfinger buttonareas)' \ 53a46c0ec8Sopenharmony_ci '--set-scroll-method=[Set the desired scroll method]:scroll-method:(none twofinger edge button)' \ 54a46c0ec8Sopenharmony_ci '--set-scroll-button=[Set the button to the given button code]' \ 55a46c0ec8Sopenharmony_ci '--set-profile=[Set pointer acceleration profile]:accel-profile:(adaptive flat)' \ 56a46c0ec8Sopenharmony_ci '--set-speed=[Set pointer acceleration speed (within range \[-1, 1\])]' \ 57a46c0ec8Sopenharmony_ci '--set-tap-map=[Set button mapping for tapping]:tap-map:(( \ 58a46c0ec8Sopenharmony_ci lrm\:2-fingers\ right-click\ /\ 3-fingers\ middle-click \ 59a46c0ec8Sopenharmony_ci lmr\:2-fingers\ middle-click\ /\ 3-fingers\ right-click \ 60a46c0ec8Sopenharmony_ci ))' \ 61a46c0ec8Sopenharmony_ci + '(tap-to-click)' \ 62a46c0ec8Sopenharmony_ci '--enable-tap[Enable tap-to-click]' \ 63a46c0ec8Sopenharmony_ci '--disable-tap[Disable tap-to-click]' \ 64a46c0ec8Sopenharmony_ci + '(drag)' \ 65a46c0ec8Sopenharmony_ci '--enable-drag[Enable tap-and-drag]' \ 66a46c0ec8Sopenharmony_ci '--disable-drag[Disable tap-and-drag]' \ 67a46c0ec8Sopenharmony_ci + '(drag-lock)' \ 68a46c0ec8Sopenharmony_ci '--enable-drag-lock[Enable drag-lock]' \ 69a46c0ec8Sopenharmony_ci '--disable-drag-lock[Disable drag-lock]' \ 70a46c0ec8Sopenharmony_ci + '(natural-scrolling)' \ 71a46c0ec8Sopenharmony_ci '--enable-natural-scrolling[Enable natural scrolling]' \ 72a46c0ec8Sopenharmony_ci '--disable-natural-scrolling[Disable natural scrolling]' \ 73a46c0ec8Sopenharmony_ci + '(left-handed)' \ 74a46c0ec8Sopenharmony_ci '--enable-left-handed[Enable left handed button configuration]' \ 75a46c0ec8Sopenharmony_ci '--disable-left-handed[Disable left handed button configuration]' \ 76a46c0ec8Sopenharmony_ci + '(middlebutton)' \ 77a46c0ec8Sopenharmony_ci '--enable-middlebutton[Enable middle button emulation]' \ 78a46c0ec8Sopenharmony_ci '--disable-middlebutton[Disable middle button emulation]' \ 79a46c0ec8Sopenharmony_ci + '(dwt)' \ 80a46c0ec8Sopenharmony_ci '--enable-dwt[Enable disable-while-typing]' \ 81a46c0ec8Sopenharmony_ci '--disable-dwt[Disable disable-while-typing]' \ 82a46c0ec8Sopenharmony_ci + '(dwtp)' \ 83a46c0ec8Sopenharmony_ci '--enable-dwtp[Enable disable-while-trackpointing]' \ 84a46c0ec8Sopenharmony_ci '--disable-dwtp[Disable disable-while-trackpointing]' 85a46c0ec8Sopenharmony_ci} 86a46c0ec8Sopenharmony_ci 87a46c0ec8Sopenharmony_ci(( $+functions[_libinput_debug-gui] )) || _libinput_debug-gui() 88a46c0ec8Sopenharmony_ci{ 89a46c0ec8Sopenharmony_ci _arguments \ 90a46c0ec8Sopenharmony_ci '--help[Show debug-gui help and exit]' \ 91a46c0ec8Sopenharmony_ci '--verbose[Use verbose output]' \ 92a46c0ec8Sopenharmony_ci '--grab[Exclusively grab all opened devices]' \ 93a46c0ec8Sopenharmony_ci '--device=[Use the given device with the path backend]:device:_files -W /dev/input/ -P /dev/input/' \ 94a46c0ec8Sopenharmony_ci '--udev=[Listen for notifications on the given seat]:seat:_libinput_all_seats' 95a46c0ec8Sopenharmony_ci} 96a46c0ec8Sopenharmony_ci 97a46c0ec8Sopenharmony_ci(( $+functions[_libinput_debug-tablet] )) || _libinput_debug-tablet() 98a46c0ec8Sopenharmony_ci{ 99a46c0ec8Sopenharmony_ci _arguments \ 100a46c0ec8Sopenharmony_ci '--help[Show debug-tablet help and exit]' \ 101a46c0ec8Sopenharmony_ci '--device=[Use the given device with the path backend]:device:_files -W /dev/input/ -P /dev/input/' \ 102a46c0ec8Sopenharmony_ci '--udev=[Use the first tablet device on the given seat]:seat:_libinput_all_seats' 103a46c0ec8Sopenharmony_ci} 104a46c0ec8Sopenharmony_ci 105a46c0ec8Sopenharmony_ci 106a46c0ec8Sopenharmony_ci(( $+functions[_libinput_measure] )) || _libinput_measure() 107a46c0ec8Sopenharmony_ci{ 108a46c0ec8Sopenharmony_ci local curcontext=$curcontext state line ret=1 109a46c0ec8Sopenharmony_ci local features 110a46c0ec8Sopenharmony_ci features=( 111a46c0ec8Sopenharmony_ci "fuzz:Measure touch fuzz to avoid pointer jitter" 112a46c0ec8Sopenharmony_ci "touch-size:Measure touch size and orientation" 113a46c0ec8Sopenharmony_ci "touchpad-tap:Measure tap-to-click time" 114a46c0ec8Sopenharmony_ci "touchpad-pressure:Measure touch pressure" 115a46c0ec8Sopenharmony_ci ) 116a46c0ec8Sopenharmony_ci 117a46c0ec8Sopenharmony_ci _arguments -C \ 118a46c0ec8Sopenharmony_ci '--help[Print help and exit]' \ 119a46c0ec8Sopenharmony_ci ':feature:->feature' \ 120a46c0ec8Sopenharmony_ci '*:: :->option-or-argument' 121a46c0ec8Sopenharmony_ci 122a46c0ec8Sopenharmony_ci case $state in 123a46c0ec8Sopenharmony_ci (feature) 124a46c0ec8Sopenharmony_ci _describe -t features 'feature' features 125a46c0ec8Sopenharmony_ci ;; 126a46c0ec8Sopenharmony_ci (option-or-argument) 127a46c0ec8Sopenharmony_ci curcontext=${curcontext%:*:*}:libinput-measure-$words[1]: 128a46c0ec8Sopenharmony_ci if ! _call_function ret _libinput_measure_$words[1]; then 129a46c0ec8Sopenharmony_ci _message "unknown feature: $words[1]" 130a46c0ec8Sopenharmony_ci fi 131a46c0ec8Sopenharmony_ci ;; 132a46c0ec8Sopenharmony_ci esac 133a46c0ec8Sopenharmony_ci return ret 134a46c0ec8Sopenharmony_ci} 135a46c0ec8Sopenharmony_ci 136a46c0ec8Sopenharmony_ci(( $+functions[_libinput_measure_fuzz] )) || _libinput_measure_fuzz() 137a46c0ec8Sopenharmony_ci{ 138a46c0ec8Sopenharmony_ci _arguments \ 139a46c0ec8Sopenharmony_ci '--help[Show help message and exit]' \ 140a46c0ec8Sopenharmony_ci ':device:_files -W /dev/input/ -P /dev/input/' 141a46c0ec8Sopenharmony_ci} 142a46c0ec8Sopenharmony_ci 143a46c0ec8Sopenharmony_ci(( $+functions[_libinput_measure_touch-size] )) || _libinput_measure_touch-size() 144a46c0ec8Sopenharmony_ci{ 145a46c0ec8Sopenharmony_ci _arguments \ 146a46c0ec8Sopenharmony_ci '--help[Show help message and exit]' \ 147a46c0ec8Sopenharmony_ci '--touch-threshold=[Assume a touch pressure threshold of "down:up"]' \ 148a46c0ec8Sopenharmony_ci '--palm-threshold=[Assume a palm threshold of N]' \ 149a46c0ec8Sopenharmony_ci ':device:_files -W /dev/input/ -P /dev/input/' 150a46c0ec8Sopenharmony_ci} 151a46c0ec8Sopenharmony_ci 152a46c0ec8Sopenharmony_ci(( $+functions[_libinput_measure_touchpad-pressure] )) || _libinput_measure_touchpad-pressure() 153a46c0ec8Sopenharmony_ci{ 154a46c0ec8Sopenharmony_ci _arguments \ 155a46c0ec8Sopenharmony_ci '--help[Show help message and exit]' \ 156a46c0ec8Sopenharmony_ci '--touch-threshold=[Assume a touch pressure threshold of "down:up"]' \ 157a46c0ec8Sopenharmony_ci '--palm-threshold=[Assume a palm threshold of N]' \ 158a46c0ec8Sopenharmony_ci ':device:_files -W /dev/input/ -P /dev/input/' 159a46c0ec8Sopenharmony_ci} 160a46c0ec8Sopenharmony_ci 161a46c0ec8Sopenharmony_ci(( $+functions[_libinput_measure_touchpad-tap] )) || _libinput_measure_touchpad-tap() 162a46c0ec8Sopenharmony_ci{ 163a46c0ec8Sopenharmony_ci _arguments \ 164a46c0ec8Sopenharmony_ci '--help[Show help message and exit]' \ 165a46c0ec8Sopenharmony_ci '--format=dat[Specify the data format to be printed. The default is "summary"]' 166a46c0ec8Sopenharmony_ci ':device:_files -W /dev/input/ -P /dev/input/' 167a46c0ec8Sopenharmony_ci} 168a46c0ec8Sopenharmony_ci 169a46c0ec8Sopenharmony_ci(( $+functions[_libinput_analyze_per-slot-delta] )) || _libinput_analyze_per-slot-delta() 170a46c0ec8Sopenharmony_ci{ 171a46c0ec8Sopenharmony_ci _arguments \ 172a46c0ec8Sopenharmony_ci '--help[Show help message and exit]' \ 173a46c0ec8Sopenharmony_ci ':recording:_files' 174a46c0ec8Sopenharmony_ci} 175a46c0ec8Sopenharmony_ci 176a46c0ec8Sopenharmony_ci(( $+functions[_libinput_analyze_touch-down-state] )) || _libinput_analyze_touch-down-state() 177a46c0ec8Sopenharmony_ci{ 178a46c0ec8Sopenharmony_ci _arguments \ 179a46c0ec8Sopenharmony_ci '--help[Show help message and exit]' \ 180a46c0ec8Sopenharmony_ci ':recording:_files' 181a46c0ec8Sopenharmony_ci} 182a46c0ec8Sopenharmony_ci 183a46c0ec8Sopenharmony_ci(( $+functions[_libinput_analyze_recording] )) || _libinput_analyze_recording() 184a46c0ec8Sopenharmony_ci{ 185a46c0ec8Sopenharmony_ci _arguments \ 186a46c0ec8Sopenharmony_ci '--help[Show help message and exit]' \ 187a46c0ec8Sopenharmony_ci ':recording:_files' 188a46c0ec8Sopenharmony_ci} 189a46c0ec8Sopenharmony_ci 190a46c0ec8Sopenharmony_ci(( $+functions[_libinput_analyze] )) || _libinput_analyze() 191a46c0ec8Sopenharmony_ci{ 192a46c0ec8Sopenharmony_ci local curcontext=$curcontext state line ret=1 193a46c0ec8Sopenharmony_ci local features 194a46c0ec8Sopenharmony_ci features=( 195a46c0ec8Sopenharmony_ci "per-slot-delta:analyze relative movement per touch per slot" 196a46c0ec8Sopenharmony_ci "recording:analyze a recording by printing a pretty table" 197a46c0ec8Sopenharmony_ci "touch-down-state:analyze a recording for logical touch down states" 198a46c0ec8Sopenharmony_ci ) 199a46c0ec8Sopenharmony_ci 200a46c0ec8Sopenharmony_ci _arguments -C \ 201a46c0ec8Sopenharmony_ci '--help[Print help and exit]' \ 202a46c0ec8Sopenharmony_ci ':feature:->feature' \ 203a46c0ec8Sopenharmony_ci '*:: :->option-or-argument' 204a46c0ec8Sopenharmony_ci 205a46c0ec8Sopenharmony_ci case $state in 206a46c0ec8Sopenharmony_ci (feature) 207a46c0ec8Sopenharmony_ci _describe -t features 'feature' features 208a46c0ec8Sopenharmony_ci ;; 209a46c0ec8Sopenharmony_ci (option-or-argument) 210a46c0ec8Sopenharmony_ci curcontext=${curcontext%:*:*}:libinput-analyze-$words[1]: 211a46c0ec8Sopenharmony_ci if ! _call_function ret _libinput_analyze_$words[1]; then 212a46c0ec8Sopenharmony_ci _message "unknown feature: $words[1]" 213a46c0ec8Sopenharmony_ci fi 214a46c0ec8Sopenharmony_ci ;; 215a46c0ec8Sopenharmony_ci esac 216a46c0ec8Sopenharmony_ci return ret 217a46c0ec8Sopenharmony_ci} 218a46c0ec8Sopenharmony_ci 219a46c0ec8Sopenharmony_ci(( $+functions[_libinput_record] )) || _libinput_record() 220a46c0ec8Sopenharmony_ci{ 221a46c0ec8Sopenharmony_ci _arguments \ 222a46c0ec8Sopenharmony_ci '--help[Show help message and exit]' \ 223a46c0ec8Sopenharmony_ci '--all[Record all /dev/input/event* devices available on the system]' \ 224a46c0ec8Sopenharmony_ci '--autorestart=[Terminate the current recording after s seconds of device inactivity]' \ 225a46c0ec8Sopenharmony_ci {-o+,--output=}'[Specify the output file to use]:file:_files -g "*.yml"' \ 226a46c0ec8Sopenharmony_ci '--multiple[Record multiple devices at once]' \ 227a46c0ec8Sopenharmony_ci '--show-keycodes[Show keycodes as-is in the recording]' \ 228a46c0ec8Sopenharmony_ci '--with-libinput[Record libinput events alongside device events]' \ 229a46c0ec8Sopenharmony_ci '--with-hidraw[Record hidraw events alongside device events]' \ 230a46c0ec8Sopenharmony_ci '*::device:_files -W /dev/input/ -P /dev/input/' 231a46c0ec8Sopenharmony_ci} 232a46c0ec8Sopenharmony_ci 233a46c0ec8Sopenharmony_ci(( $+functions[_libinput_replay] )) || _libinput_replay() 234a46c0ec8Sopenharmony_ci{ 235a46c0ec8Sopenharmony_ci _arguments \ 236a46c0ec8Sopenharmony_ci '--help[Show help message and exit]' \ 237a46c0ec8Sopenharmony_ci ':recording:_files' 238a46c0ec8Sopenharmony_ci} 239a46c0ec8Sopenharmony_ci 240a46c0ec8Sopenharmony_ci_libinput() 241a46c0ec8Sopenharmony_ci{ 242a46c0ec8Sopenharmony_ci local curcontext=$curcontext state line ret=1 243a46c0ec8Sopenharmony_ci 244a46c0ec8Sopenharmony_ci _arguments -C \ 245a46c0ec8Sopenharmony_ci {-h,--help}'[Show help message and exit]' \ 246a46c0ec8Sopenharmony_ci '--version[Show version information and exit]' \ 247a46c0ec8Sopenharmony_ci ':command:->command' \ 248a46c0ec8Sopenharmony_ci '*:: :->option-or-argument' && return 249a46c0ec8Sopenharmony_ci 250a46c0ec8Sopenharmony_ci case $state in 251a46c0ec8Sopenharmony_ci (command) 252a46c0ec8Sopenharmony_ci _libinput_commands && ret=0 253a46c0ec8Sopenharmony_ci ;; 254a46c0ec8Sopenharmony_ci (option-or-argument) 255a46c0ec8Sopenharmony_ci curcontext=${curcontext%:*:*}:libinput-$words[1]: 256a46c0ec8Sopenharmony_ci if ! _call_function ret _libinput_$words[1]; then 257a46c0ec8Sopenharmony_ci _message "unknown libinput command: $words[1]" 258a46c0ec8Sopenharmony_ci fi 259a46c0ec8Sopenharmony_ci ;; 260a46c0ec8Sopenharmony_ci esac 261a46c0ec8Sopenharmony_ci return ret 262a46c0ec8Sopenharmony_ci} 263a46c0ec8Sopenharmony_ci 264a46c0ec8Sopenharmony_ci_libinput 265