mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-26 04:56:05 +02:00
lib/cli.zsh (944 lines) and lib/diagnostics.zsh (353 lines) were parsed on every startup to define functions that most shells never call. Move them to $ZSH/functions/, which is already on $fpath, and autoload the two entry points from oh-my-zsh.sh instead. The `omz` completion moves to $ZSH/completions/_omz where compinit picks it up on its own. Measured on macOS arm64, zsh 5.9: ~1.7 ms less per interactive start. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
91 lines
3.2 KiB
Plaintext
91 lines
3.2 KiB
Plaintext
#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
|