#compdef memo #autoload function _memo { local line _arguments \ "1:action:(( add\:'add a text to a topic' rm\:'delete a topic folder with all its content' copy\:'copy a file to a topic' search\:'search for text in all topics' show\:'show a topic' edit\:'edit a topic' list\:'print a list of all topics' git\:'run git command' ))" \ "*::arg:->args" case $line[1] in add|rm|copy|show|edit) _memo_topics ;; git) _git ;; *) ;; esac } function _memo_topics { MEMO_FOLDER="${MEMO_DIR:-$HOME/memo}" topics=($(ls ${MEMO_FOLDER})) compadd -X "A vailable Topics" $topics } function _git { local -a subcommands subcommands=( "init:Initialize git repository" "status:Status of git repository" "push:Push to remote repository" "pull:Pull from remote repository" "config:Show git config" "log:Show git log" "reflog:Show git reflog" ) _describe -t commands 'git' subcommands }