#compdef ghq function _ghq () { local context curcontext=$curcontext state line declare -A opt_args local ret=1 _arguments -C \ '(-h --help)'{-h,--help}'[show help]' \ '(-v --version)'{-v,--version}'[print the version]' \ '1: :__ghq_commands' \ '*:: :->args' \ && ret=0 case $state in (args) case $words[1] in (get) _arguments -C \ '(-u --update)'{-u,--update}'[Update local repository if cloned already]' \ '-p[Clone with SSH]' \ '--shallow[Do a shallow clone]' \ '(-l --look)'{-l,--look}'[Look after get]' \ '--vcs[Specify vcs backend for cloning]' \ '(-s --silent)'{-s,--silent}'[Clone or update silently]' \ '--no-recursive[Prevent recursive fetching]' \ '(-b --branch)'{-b,--branch}'[Specify branch name]' \ '(-P --parallel)'{-P,--parallel}'[Import parallely]' \ '(-)*:: :->null_state' \ && ret=0 ;; (list) _arguments -C \ '(-e --exact)'{-e,--exact}'[Perform an exact match]' \ '--vcs[Specify vcs backend for matching]' \ '(-p --full-path)'{-p,--full-path}'[Print full paths]' \ '--unique[Print unique subpaths]' \ '(-)*:: :->null_state' \ && ret=0 ;; (root) _arguments -C \ '--all[Show all roots]' \ '(-)*:: :->null_state' \ && ret=0 ;; (create) _arguments -C \ '--vcs[Specify vcs backend explicitly]' \ '(-)*:: :->null_state' \ && ret=0 ;; (help|h) __ghq_commands && ret=0 ;; esac ;; esac return ret } __ghq_repositories () { local -a _repos _repos=( ${(@f)"$(_call_program repositories ghq list --unique)"} ) _describe -t repositories Repositories _repos } __ghq_commands () { local -a _c _c=( 'get:Clone/sync with a remote repository' 'list:List local repositories' 'create:Create a new repository' "root:Show repositories' root" 'help:Show a list of commands or help for one command' ) _describe -t commands Commands _c } _ghq "$@"