function __fish_bind_test1 set -l args set -l use_keys no for i in (commandline -pxc) switch $i case -k --k --ke --key set use_keys yes case "-*" case "*" set -a args $i end end switch $use_keys case yes switch (count $args) case 1 return 0 end end return 1 end function __fish_bind_test2 set -l args for i in (commandline -pxc) switch $i case "-*" case "*" set -a args $i end end switch (count $args) case 2 return 0 end return 1 end complete -c bind -f complete -c bind -s a -l all -d 'Show unavailable key bindings/erase all bindings' complete -c bind -s e -l erase -d 'Erase mode' complete -c bind -s f -l function-names -d 'Print names of available functions' complete -c bind -s h -l help -d "Display help and exit" complete -c bind -s k -l key -d 'Specify key name, not sequence' complete -c bind -s K -l key-names -d 'Print names of available keys' complete -c bind -s M -l mode -d 'Specify the bind mode that the bind is used in' -xa '(bind -L)' complete -c bind -s m -l sets-mode -d 'Change current mode after bind is executed' -xa '(bind -L)' complete -c bind -s L -l list-modes -d 'Display a list of defined bind modes' complete -c bind -s s -l silent -d 'Operate silently' complete -c bind -l preset -d 'Operate on preset bindings' complete -c bind -l user -d 'Operate on user bindings' complete -c bind -n __fish_bind_test2 -a '(bind --function-names)' -d 'Function name' -x function __fish_bind_complete argparse M/mode= m/sets-mode= preset user s/silent \ a/all function-names list-modes e/erase -- (commandline -xpc)[2..] 2>/dev/null or return 1 set -l token (commandline -ct) if test (count $argv) = 0 && set -l prefix (string match -r -- '(.*,)?(ctrl-|alt-|shift-)*' $token) printf '%sctrl-\tCtrl modifier…\n' $prefix printf '%salt-\tAlt modifier…\n' $prefix printf '%sshift-\tShift modifier…\n' $prefix set -l key_names plus minus comma backspace delete escape \ enter up down left right pageup pagedown home end insert tab \ space F(seq 12) printf '%s\tNamed key\n' $prefix$key_names end end complete -c bind -k -a '(__fish_bind_complete)' -f