diff --git a/plugins/mise/mise.plugin.zsh b/plugins/mise/mise.plugin.zsh index 1fcf24919..2330a302a 100644 --- a/plugins/mise/mise.plugin.zsh +++ b/plugins/mise/mise.plugin.zsh @@ -1,5 +1,5 @@ if (( $+commands[mise] )); then - _mise_bin=mise + _mise_bin=$commands[mise] elif [[ -x ~/.local/bin/mise ]]; then _mise_bin=~/.local/bin/mise else @@ -8,7 +8,6 @@ fi # Load mise hooks eval "$($_mise_bin activate zsh)" -unset _mise_bin # If the completion file doesn't exist yet, we need to autoload it and # bind it to `mise`. Otherwise, compinit will have already done that. @@ -18,9 +17,13 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_mise" ]]; then _comps[mise]=_mise fi -# Generate and load mise completion -zmodload -F zsh/files b:zf_mv -() { - local TMPPREFIX="$ZSH_CACHE_DIR/completions/._mise" - zf_mv -f -- =( mise completion zsh ) "$ZSH_CACHE_DIR/completions/_mise" -} &| +# Generate completion only when missing/empty or stale relative to the mise binary. +if [[ ! -s "$ZSH_CACHE_DIR/completions/_mise" || "$_mise_bin" -nt "$ZSH_CACHE_DIR/completions/_mise" ]]; then + zmodload -F zsh/files b:zf_mv + () { + local TMPPREFIX="$ZSH_CACHE_DIR/completions/._mise" + zf_mv -f -- =( "$_mise_bin" completion zsh ) "$ZSH_CACHE_DIR/completions/_mise" + } &| +fi + +unset _mise_bin