diff --git a/completions/_omz b/completions/_omz new file mode 100644 index 000000000..97112678d --- /dev/null +++ b/completions/_omz @@ -0,0 +1,90 @@ +#compdef omz + +local -a cmds subcmds +cmds=( + 'changelog:Print the changelog' + 'help:Usage information' + 'plugin:Manage plugins' + 'pr:Manage Oh My Zsh Pull Requests' + 'reload:Reload the current zsh session' + 'shop:Open the Oh My Zsh shop' + 'theme:Manage themes' + 'update:Update Oh My Zsh' + 'version:Show the version' +) + +if (( CURRENT == 2 )); then + _describe 'command' cmds +elif (( CURRENT == 3 )); then + case "$words[2]" in + changelog) local -a refs + refs=("${(@f)$(builtin cd -q "$ZSH"; command git for-each-ref --format="%(refname:short):%(subject)" refs/heads refs/tags)}") + _describe 'command' refs ;; + plugin) subcmds=( + 'disable:Disable plugin(s)' + 'enable:Enable plugin(s)' + 'info:Get plugin information' + 'list:List plugins' + 'load:Load plugin(s)' + ) + _describe 'command' subcmds ;; + pr) subcmds=('clean:Delete all Pull Request branches' 'test:Test a Pull Request') + _describe 'command' subcmds ;; + theme) subcmds=('list:List themes' 'set:Set a theme in your .zshrc file' 'use:Load a theme') + _describe 'command' subcmds ;; + esac +elif (( CURRENT == 4 )); then + case "${words[2]}::${words[3]}" in + plugin::(disable|enable|load)) + local -aU valid_plugins + + if [[ "${words[3]}" = disable ]]; then + # if command is "disable", only offer already enabled plugins + valid_plugins=($plugins) + else + valid_plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t)) + # if command is "enable", remove already enabled plugins + [[ "${words[3]}" = enable ]] && valid_plugins=(${valid_plugins:|plugins}) + fi + + _describe 'plugin' valid_plugins ;; + plugin::info) + local -aU plugins + plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t)) + _describe 'plugin' plugins ;; + plugin::list) + local -a opts + opts=('--enabled:List enabled plugins only') + _describe -o 'options' opts ;; + theme::(set|use)) + local -aU themes + themes=("$ZSH"/themes/*.zsh-theme(-.N:t:r) "$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::)) + _describe 'theme' themes ;; + esac +elif (( CURRENT > 4 )); then + case "${words[2]}::${words[3]}" in + plugin::(enable|disable|load)) + local -aU valid_plugins + + if [[ "${words[3]}" = disable ]]; then + # if command is "disable", only offer already enabled plugins + valid_plugins=($plugins) + else + valid_plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t)) + # if command is "enable", remove already enabled plugins + [[ "${words[3]}" = enable ]] && valid_plugins=(${valid_plugins:|plugins}) + fi + + # Remove plugins already passed as arguments + # NOTE: $(( CURRENT - 1 )) is the last plugin argument completely passed, i.e. that which + # has a space after them. This is to avoid removing plugins partially passed, which makes + # the completion not add a space after the completed plugin. + local -a args + args=(${words[4,$(( CURRENT - 1))]}) + valid_plugins=(${valid_plugins:|args}) + + _describe 'plugin' valid_plugins ;; + esac +fi + +return 0 diff --git a/lib/cli.zsh b/functions/omz similarity index 86% rename from lib/cli.zsh rename to functions/omz index a86434411..5a75fcb84 100644 --- a/lib/cli.zsh +++ b/functions/omz @@ -1,5 +1,3 @@ -#!/usr/bin/env zsh - function omz { setopt localoptions noksharrays [[ $# -gt 0 ]] || { @@ -20,102 +18,6 @@ function omz { _omz::$command "$@" } -function _omz { - local -a cmds subcmds - cmds=( - 'changelog:Print the changelog' - 'help:Usage information' - 'plugin:Manage plugins' - 'pr:Manage Oh My Zsh Pull Requests' - 'reload:Reload the current zsh session' - 'shop:Open the Oh My Zsh shop' - 'theme:Manage themes' - 'update:Update Oh My Zsh' - 'version:Show the version' - ) - - if (( CURRENT == 2 )); then - _describe 'command' cmds - elif (( CURRENT == 3 )); then - case "$words[2]" in - changelog) local -a refs - refs=("${(@f)$(builtin cd -q "$ZSH"; command git for-each-ref --format="%(refname:short):%(subject)" refs/heads refs/tags)}") - _describe 'command' refs ;; - plugin) subcmds=( - 'disable:Disable plugin(s)' - 'enable:Enable plugin(s)' - 'info:Get plugin information' - 'list:List plugins' - 'load:Load plugin(s)' - ) - _describe 'command' subcmds ;; - pr) subcmds=('clean:Delete all Pull Request branches' 'test:Test a Pull Request') - _describe 'command' subcmds ;; - theme) subcmds=('list:List themes' 'set:Set a theme in your .zshrc file' 'use:Load a theme') - _describe 'command' subcmds ;; - esac - elif (( CURRENT == 4 )); then - case "${words[2]}::${words[3]}" in - plugin::(disable|enable|load)) - local -aU valid_plugins - - if [[ "${words[3]}" = disable ]]; then - # if command is "disable", only offer already enabled plugins - valid_plugins=($plugins) - else - valid_plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t)) - # if command is "enable", remove already enabled plugins - [[ "${words[3]}" = enable ]] && valid_plugins=(${valid_plugins:|plugins}) - fi - - _describe 'plugin' valid_plugins ;; - plugin::info) - local -aU plugins - plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t)) - _describe 'plugin' plugins ;; - plugin::list) - local -a opts - opts=('--enabled:List enabled plugins only') - _describe -o 'options' opts ;; - theme::(set|use)) - local -aU themes - themes=("$ZSH"/themes/*.zsh-theme(-.N:t:r) "$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::)) - _describe 'theme' themes ;; - esac - elif (( CURRENT > 4 )); then - case "${words[2]}::${words[3]}" in - plugin::(enable|disable|load)) - local -aU valid_plugins - - if [[ "${words[3]}" = disable ]]; then - # if command is "disable", only offer already enabled plugins - valid_plugins=($plugins) - else - valid_plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t)) - # if command is "enable", remove already enabled plugins - [[ "${words[3]}" = enable ]] && valid_plugins=(${valid_plugins:|plugins}) - fi - - # Remove plugins already passed as arguments - # NOTE: $(( CURRENT - 1 )) is the last plugin argument completely passed, i.e. that which - # has a space after them. This is to avoid removing plugins partially passed, which makes - # the completion not add a space after the completed plugin. - local -a args - args=(${words[4,$(( CURRENT - 1))]}) - valid_plugins=(${valid_plugins:|args}) - - _describe 'plugin' valid_plugins ;; - esac - fi - - return 0 -} - -# If run from a script, do not set the completion function -if (( ${+functions[compdef]} )); then - compdef _omz omz -fi - ## Utility functions function _omz::confirm { @@ -942,3 +844,5 @@ function _omz::version { printf "%s (%s)\n" "$version" "$commit" ) } + +omz "$@" diff --git a/lib/diagnostics.zsh b/functions/omz_diagnostic_dump similarity index 99% rename from lib/diagnostics.zsh rename to functions/omz_diagnostic_dump index 29929f3fc..41d7a477d 100644 --- a/lib/diagnostics.zsh +++ b/functions/omz_diagnostic_dump @@ -1,4 +1,4 @@ -# diagnostics.zsh +# omz_diagnostic_dump # # Diagnostic and debugging support for oh-my-zsh @@ -351,3 +351,5 @@ function _omz_diag_dump_os_specific_version() { done } + +omz_diagnostic_dump "$@" diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh index b4e95e0ff..e8b8cdc63 100644 --- a/oh-my-zsh.sh +++ b/oh-my-zsh.sh @@ -78,6 +78,9 @@ fpath=($ZSH/{functions,completions} $ZSH_CUSTOM/{functions,completions} $fpath) # Load all stock functions (from $fpath files) called below. autoload -U compaudit compinit zrecompile +# The omz CLI and omz_diagnostic_dump are loaded on first use +autoload -Uz omz omz_diagnostic_dump + is_plugin() { local base_dir=$1 local name=$2