zsh/Completion/Linux/Command/_lsusb

36 lines
1.2 KiB
Plaintext

#compdef lsusb
local usbidsline vendorid pair ret=1
local curcontext="$curcontext" state line expl
typeset -A opt_args
_arguments -C \
'(-v --verbose -t --tree)'{-v,--verbose}'[be verbose]' \
'-s+[filter devices by bus and/or device number]:bus and/or devnum to show' \
'-d+[filter devices by vendor/product ID]:vendor and product to show:->vendorproduct' \
'-D+[display only specified device]:device:_files -g "*(-%)" -P / -W /' \
'(-t --tree -v --verbose)'{-t,--tree}'[dump the physical USB device hierarchy as a tree]' \
'(-)'{-V,--version}'[print version information]' \
'(-)'{-h,--help}'[print help information]' && ret=0
if [[ -n $state && ${+_lsusb_vendors} -eq 0 ]]; then
typeset -A _lsusb_vendors _lsusb_devices
cat /usr/share/(misc|hwdata)/usb.ids | while IFS="" read usbidsline
do
case "$usbidsline" in
((#b)([0-9a-f]##) ##(*))
vendorid="$match[1]"
_lsusb_vendors[$vendorid]="$match[2]"
;;
( (#b)([0-9a-f]##) ##(*)))
pair="$vendorid:$match[1]"
_lsusb_devices[${pair}]="$match[2]"
;;
esac
done
fi
_wanted products expl 'vendor ID:product ID' compadd -k _lsusb_devices && ret=0
return ret