#compdef multipass _multipass_get_command_list () { # Sample output: # $ multipass --help # ... # Options: # -h, --help Display this help # -v, --verbose Increase logging verbosity. Repeat the 'v' in the short option # for more detail. Maximum verbosity is obtained with 4 (or more) # v's, i.e. -vvvv. # ... # Available commands: # alias Create an alias # aliases List available aliases # ... # $_comp_command1 --help | sed '1,/Available commands/d' | awk '/^[ \t]*[a-z]+/ { print $1 }' } _multipass_get_args_list () { # Sample output: # $ multpass help stop # ... # Options: # -h, --help Display this help # -v, --verbose Increase logging verbosity. Repeat the 'v' in the short # option for more detail. Maximum verbosity is obtained with # 4 (or more) v's, i.e. -vvvv. # --all Stop all instances # -t, --time <time> Time from now, in minutes, to delay shutdown of the # instance # -c, --cancel Cancel a pending delayed shutdown # # Arguments: # name Names of instances to stop. If omitted, and without the # --all option, 'primary' will be assumed. # local arg_name=$($_comp_command1 help ${words[2]} | sed '1,/Arguments/d' | awk '/^[ \t]*[a-z]+/ { print $1; exit }') case $arg_name in name) # Sample output: # $ multipass list # Name State IPv4 Image # workable-poacher Running 10.2.0.28 Ubuntu openHAB Home Appliance # $_comp_command1 list | sed '1d' | awk '/^[ \t]*[^ ]+/ { print $1 }' ;; command) _multipass_get_command_list ;; esac } _multipass () { typeset -A opt_args _arguments \ '1: :->command'\ '*: :->args' case $state in command) compadd $(_multipass_get_command_list) ;; *) compadd $(_multipass_get_args_list) ;; esac } _multipass "$@"