#compdef sandbox __sandboxes() { local -a sandboxes sandboxes=(${(fo)"$(ls $SANDBOX_ROOT 2> /dev/null)"}) _describe 'in' sandboxes } _sandbox() { local context curcontext="$curcontext" state line typeset -A opt_args _arguments -C \ '1: :->cmd' \ '*:: :->args' case $state in (cmd) local commands; commands=( 'create:Create a new sandbox' 'rename:Rename an existing sandbox' 'destroy:Destroy an existing sandbox' 'list:Show all existing sandboxes' 'enable:Enable an existing sandbox' 'disable:Disable the current sandbox' ) _describe -t commands 'sandbox command' commands "$@" ;; (args) curcontext="${curcontext%:*:*}:sandbox-cmd-$words[1]:" case $line[1] in (create) _arguments -C '--git[repository to clone]: :' ;; (rename|enable|destroy) _arguments -C '1:: :__sandboxes' ;; (list|disable) ;; esac esac } _sandbox "$@"