#compdef ctt _ctt() { local curcontext="$curcontext" state line typeset -A opt_args _arguments \ '1: :->opts_cmds'\ '*: :->opts' case $state in opts_cmds) _arguments '1:Options and commands:(listprojects track report -h --help -d --debug -v --verbose)' ;; *) case $words[2] in track|report) projects=($(ls ~/.ctt)) ;; esac case $words[2] in listprojects|-*) opts=(-h --help -d --debug -v --verbose) compadd "$@" -- $opts ;; track) opts=(-h --help -d --debug -v --verbose --sd --start --ed --end -n --no-comment) compadd "$@" -- $opts $projects ;; report) opts=(-h --help -d --debug -v --verbose --sd --start --ed --end -a --all -e --regexp -i --ignore-case -f -format -s --summary) compadd "$@" -- $opts $projects ;; *) ;; esac esac } _ctt "$@"