#compdef zinit setopt localoptions warncreateglobal typesetsilent local curcontext="$curcontext" state state_descr line ret=1 local -a expl typeset -a commands commands=( zstatus:'overall Zinit status' times:'statistics on plugin loading times' self-update:'updates Zinit' help:'usage information' man:'manual' env-whitelist:'specify names (also patterns) of parameters to be left unchanged during an unload' load:'load plugin' delete:'delete plugin' unload:'unload plugin' snippet:"source (or add to PATH with --command) local or remote file (-f: force - don't use cache)" update:'Git update plugin (or all plugins and snippets if --all passed)' status:'Git status for plugin (or all plugins if --all passed)' report:'show plugin'"'"'s report (or all plugins'"'"' if --all passed)' loaded:'show what plugins are loaded' list:'show what plugins are loaded' ls:'list snippets in formatted and colorized manner' cd:"go into plugin's directory" create:'create plugin (also together with Github repository)' edit:"edit plugin's file with \$EDITOR" glance:"look at plugin's source (pygmentize, {,source-}highlight)" stress:'test plugin for compatibility with set of options' changes:"view plugin's git log" recently:"show plugins that changed recently, argument is e.g. 1 month 2 days" clist:'list completions in use' cclear:'clear stray and improper completions' completions:'list completions in use' cdisable:'disable completion' cenable:'enable completion' creinstall:'install completions for plugin' cuninstall:'uninstall completions for plugin' csearch:'search for available completions from any plugin' compinit:'refresh installed completions' dtrace:"start tracking what's going on in session" dstart:"start tracking what's going on in session" dstop:"stop tracking what's going on in session" dunload:'revert changes recorded between dstart and dstop' dreport:"report what was going on in session" dclear:'clear report of what was going on in session' compile:'compile plugin (or all plugins if --all passed)' uncompile:'remove compiled version of plugin (or of all plugins if --all passed)' compiled:'show which plugins are compiled' cdlist:'show compdef replay list' cdreplay:'replay compdefs (to be done after compinit)' cdclear:'clear compdef replay list' srv:'control a service, command can be: stop,start,restart,next,quit; `next'' moves the service to another Zshell' recall:'fetch saved ice modifiers and construct `zinit ice ...'' command' env-whitelist:'allows to specify names (also patterns) of variables left unchanged during an unload. -v - verbose' bindkeys:'lists bindkeys set up by each plugin' module:'manage binary Zsh module shipped with Zinit, see `zinit module help''' run:"execute code inside plugin's folder" {add-fpath,fpath}:'add plugin folder to $fpath' ) _arguments -C \ '1: :->command'\ '*: :->argument' && ret=0 case $state in command) _describe -t commands "Zinit command" commands && ret=0 ;; argument) case $words[2] in help) _message "Hit enter to get usage information" && ret=0 ;; man) _message "Hit enter to view manual" && ret=0 ;; zstatus) _message "Hit enter to get overall status information" && ret=0 ;; times) _message "Hit enter to get plugin load time statistics" && ret=0 ;; load|light) typeset -a plugins plugins=( "${ZINIT[PLUGINS_DIR]}"/*(N:t) ) plugins=( "${plugins[@]//---//}" ) plugins=( "${plugins[@]:#_local/zinit}" ) plugins=( "${plugins[@]:#custom}" ) _alternative \ 'plugins:-- Plugin --:compadd -a - plugins' \ 'directories:-- Directory --:_directories' && \ ret=0 ;; run|fpath|add-fpath) typeset -a plugins plugins=( "${ZINIT[PLUGINS_DIR]}"/*(N:t) ) plugins=( "${plugins[@]//---//}" ) plugins=( "${plugins[@]:#_local/zinit}" ) plugins=( "${plugins[@]:#custom}" ) local -a opts if [[ $words[2] = run ]]; then opts=( -l ) else opts=( -f --front ) fi _alternative \ 'plugins:-- Plugin --:compadd -a - plugins' \ 'directories:-- Directory --:_directories' \ 'opts:-- Option --:compadd -a - opts' && \ ret=0 ;; compile|stress|edit|glance|recall|update|status|cd|changes|delete) # Plugins typeset -a plugins plugins=( "${ZINIT[PLUGINS_DIR]}"/*(N:t) ) plugins=( "${plugins[@]//---//}" ) plugins=( "${plugins[@]:#_local/zinit}" ) plugins=( "${plugins[@]:#custom}" ) # Snippets local -a snippets snippets_alreadyld local sni snippets=( "${ZINIT[SNIPPETS_DIR]}"/**/._zinit(D/:h) ) snippets=( ${snippets[@]#${ZINIT[SNIPPETS_DIR]}/} ) snippets=( ${snippets[@]/(#b)(http|https|ftp|ftps|scp)--/${match[1]}://} ) snippets=( ${snippets[@]/--//} ) for sni ( ${snippets[@]} ) { if [[ -n ${ZINIT_SNIPPETS[$sni]} ]]; then snippets_alreadyld+=( $sni ) snippets=( ${snippets[@]:#$sni} ) fi } _alternative 'dsnippets:-- Downloaded Snippet --:compadd -a - snippets' \ 'lsnippets:-- Already Loaded Snippet --:compadd -a - snippets_alreadyld' \ 'plugins:-- Plugin --:compadd -a - plugins' && \ ret=0 ;; unload|report) typeset -a plugins absolute normal plugins=( "${ZINIT_REGISTERED_PLUGINS[@]:#_local/zinit}" ) normal=( "${plugins[@]:#%*}" ) absolute=( "${(M)plugins[@]:#%*}" ) absolute=( "${absolute[@]/\%\/\//%/}" ) local hm="${HOME%/}" absolute=( "${absolute[@]/$hm/HOME}" ) plugins=( $normal $absolute ) _wanted plugins expl "-- Plugin --" \ compadd "$@" -a - plugins && \ ret=0 ;; all-reports) _message "Hit enter to get all reports (for all loaded plugins)" && ret=0 ;; loaded|list) _message "Hit enter or give part of plugin name" && ret=0 ;; clist|completions) _message "Hit enter to get list of completions" && ret=0 ;; cclear) _message "Hit enter to clear stray and improper completions" && ret=0 ;; cdisable) # Find enabled completions typeset -a completions completions=( "${ZINIT[COMPLETIONS_DIR]}"/_*(N:t) ) completions=( "${completions[@]#_}" ) _wanted plugins expl "-- Completion --" \ compadd "$@" -a - completions && \ ret=0 ;; cenable) # Find disabled typeset -a completions completions=( "${ZINIT[COMPLETIONS_DIR]}"/[^_]*(N:t) ) _wanted plugins expl "-- Completion --" \ compadd "$@" -a - completions && \ ret=0 ;; creinstall) # Complete only plugins that have any completions # We must iterate each plugin to check # for completions that can be installed typeset -a plugins completions local p c user plugin for p in "${ZINIT[PLUGINS_DIR]}"/*; do completions=( "$p"/**/_[^_.]*~*(*.zwc|*.html|*.txt|*.png|*.jpg|*.jpeg|*.js|*.md|_zsh_highlight*|/zsdoc/*)(DN) ) for c in "${completions[@]}"; do p="${p:t}" user="${p%%---*}" plugin="${p#*---}" [[ "$user" = "$plugin" && "${user}---${plugin}" != "$p" ]] && user="" plugins+=( "${user:+$user/}$plugin" ) break done done _wanted plugins expl "-- Plugin --" \ compadd "$@" -a - plugins && \ ret=0 ;; cuninstall) # We must iterate each plugin and check if # it has completions that are installed typeset -a plugins completions local p c user plugin cfile bkpfile for p in "${ZINIT[PLUGINS_DIR]}"/*; do completions=( "$p"/**/_[^_.][^.]#(N) ) for c in "${completions[@]}"; do cfile="${c:t}" bkpfile="${cfile#_}" # Completion installed, either enabled or disabled? if [[ -e "${ZINIT[COMPLETIONS_DIR]}"/"$cfile" || -e "${ZINIT[COMPLETIONS_DIR]}"/"$bkpfile" ]]; then p="${p:t}" user="${p%%---*}" plugin="${p#*---}" [[ "$user" = "$plugin" && "${user}---${plugin}" != "$p" ]] && user="" plugins+=( "${user:+$user/}$plugin" ) break fi done done _wanted plugins expl "-- Plugin --" \ compadd "$@" -a - plugins && \ ret=0 ;; compinit) _message "Hit enter to refresh completion system" && ret=0 ;; snippet) local -a snippets snippets_alreadyld local sni snippets=( "${ZINIT[SNIPPETS_DIR]}"/**/._zinit(D/:h) ) snippets=( ${snippets[@]#${ZINIT[SNIPPETS_DIR]}/} ) snippets=( ${snippets[@]/(#b)(http|https|ftp|ftps|scp)--/${match[1]}://} ) snippets=( ${snippets[@]/--//} ) for sni ( ${snippets[@]} ) { if [[ -n ${ZINIT_SNIPPETS[$sni]} ]]; then snippets_alreadyld+=( $sni ) snippets=( ${snippets[@]:#$sni} ) fi } _alternative 'dsnippets:-- Downloaded Snippet --:compadd -a - snippets' \ 'lsnippets:-- Already Loaded Snippet --:compadd -a - snippets_alreadyld' \ 'files:-- File --:_files' && \ ret=0 ;; dstart|dtrace) _message "Hit enter to start tracking this session" && ret=0 ;; dstop) _message "Hit enter to stop tracking this session" && ret=0 ;; dunload) _message "Hit enter to revert changes recorded between dstart and dstop" && ret=0 ;; dreport) _message "Hit enter to show report of what was going on in session" && ret=0 ;; dclear) _message "Hit enter to clear report of what was going on in session" && ret=0 ;; compile-all) _message 'Hit enter to compile all downloaded plugins' && ret=0 ;; uncompile) typeset -a plugins plugins=( "${ZINIT[PLUGINS_DIR]}"/*(N) ) typeset -a show_plugins p matches for p in "${plugins[@]}"; do matches=( $p/*.zwc(N) ) if [ "$#matches" -ne "0" ]; then p="${p:t}" [ "$p" = "_local---zinit" ] && continue [ "$p" = "custom" ] && continue p="${p//---//}" show_plugins+=( "$p" ) fi done _wanted show_plugins expl "-- Plugin --" \ compadd "$@" -a - show_plugins && \ ret=0 ;; uncompile-all) _message 'Hit enter remove compiled versions of all downloaded plugins' && ret=0 ;; compiled) _message 'Hit enter to get list of compiled plugins' && ret=0 ;; cdlist) _message 'Hit enter to show compdef replay list' && ret=0 ;; cdreplay) _message 'Hit enter to replay recorded compdefs' && ret=0 ;; cdclear) _message 'Hit enter to clear compdef replay list' && ret=0 ;; recently) typeset -a timespecs timespecs=( "3 days":"code modified during last 3 days" "1 week":"code modified during last 7 days (default)" "1 month":"code modified during last month" ) _describe -t timespecs "Time spec" timespecs && ret=0 ;; create) _message 'Plugin spec or just enter, to create new plugin' && ret=0 ;; env-whitelist) _wanted plugins expl "-- Parameter To White List During Any Plugin Unload --" \ _parameters && ret=0 ;; *) ret=1 ;; esac esac return $ret