diff --git a/Tools/completion/zsh/_ap_autotest b/Tools/completion/zsh/_ap_autotest index a69e60a4b8..bed7e00df9 100644 --- a/Tools/completion/zsh/_ap_autotest +++ b/Tools/completion/zsh/_ap_autotest @@ -6,17 +6,16 @@ _ap_autotest() { local context state line curcontext="$curcontext" _arguments -C \ '(- 1 *)'{-h,--help}'[show help options and exit]' \ - ': :_ap_autotest_cmds' \ - '*:: :->args' && - ret=0 + '(- 1 *)--list[list the available steps]' \ + '(- 1 *)--list-subtests[list available subtests e.g. test.Copter]' \ + ':first parameter:_ap_autotest_cmds' \ + '*:: :->args' + case "$state" in (args) _arguments -C \ '--skip[list of steps to skip (comma separated)]' \ '(-j --jobs)'{-j,--jobs}'[number of processors to use during build]:int:' \ - '--skip[list of steps to skip (comma separated)]' \ - '--list[list the available steps]' \ - '--list-subtests[list available subtests e.g. test.Copter]' \ '--viewerip[IP address to send MAVLink and fg packets to]:VIEWERIP:' \ '--map[show map]' \ '--experimental[enable experimental tests]' \ @@ -30,20 +29,60 @@ _ap_autotest() { '--debug[make built binaries debug binaries]' \ '--speedup[speedup to run the simulations at]:SPEEDUP:' \ '--valgrind[run ArduPilot binaries under valgrind]' \ - '--gdb[run ArduPilot binaries under gdb]' \ + '--gdb[run ArduPilot ot binaries under gdb]' \ '--gdbserver[run ArduPilot binaries under gdbserver]' \ '(-B --breakpoint)'{-B,--breakpoint}'[add a breakpoint at given location in debugger]:BREAKPOINT:' \ '--disable-breakpoints[disable all breakpoints before starting]' \ '*: :_ap_autotest_cmds' \ - && ret=0 ;; esac } (( $+functions[_ap_autotest_cmds] )) || _ap_autotest_cmds() { - default_options=( $($caller --list)) - _describe -t default-options 'default_options' default_options "$@" && ret=0 + local suf + local tasks + # check we are on something like test.Copter + if compset -P '*[.]*[.]'; then + local type; type="$(echo ${words[$CURRENT]} | cut -d'.' -f1)" + local vehicle; vehicle="$(echo ${words[$CURRENT]} | cut -d'.' -f2)" + # check that we want completing test + case $type in + test) + tasks=( $($caller --list-subtests-for-vehicle $vehicle) ) + suf=( -qS '.' ) + _wanted "vehiclfdsfses" expl "vehifdsfcle" compadd $tasks && return 0 + ;; + esac + else + # check we are on something like test. + if compset -P '*[.]'; then + local type; type="$(echo ${words[$CURRENT]} | cut -d'.' -f1)" + case $type in + test) + tasks=( $($caller --list-vehicles-test) ) + # add dot after vehicle name for further completion + suf=( -qS '.' ) + ;; + build) + # remove first and last line, get the lines starting with build, replace line return by space + tasks=( $($caller --list | sed -e '1d' -e '$d' | sed -n 's/\bbuild\b.*\.//p' | tr '\n' ' ') ) + # don't add more dot on non test + suf=( ) + ;; + run) + # remove first and last line, get the lines starting with run, replace line return by space + tasks=( $($caller --list | sed -e '1d' -e '$d' | sed -n 's/\brun\b.*\.//p' | tr '\n' ' ' ) ) + # don't add more dot on non test + suf=( ) + ;; + esac + else + tasks=(build test run) + suf=( -qS '.' ) + fi + _wanted "schemes" expl "scheme" compadd $suf[@] $tasks && return 0 + fi } # get the calling program, remove anything after the space == all commands arguments