mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-29 22:46:06 +02:00
feat(pipenv): add completion for >= 2026.5.0 (#13686)
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
This commit is contained in:
co-authored by
Carlo Sala
parent
a4a224b3fe
commit
ab84cca50a
@@ -2,15 +2,49 @@ if (( ! $+commands[pipenv] )); then
|
||||
return
|
||||
fi
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `pipenv`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_pipenv" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _pipenv
|
||||
_comps[pipenv]=_pipenv
|
||||
# Compatibility note:
|
||||
# pipenv < 2026.5.0 used Click-based shell completion driven by the
|
||||
# _PIPENV_COMPLETE environment variable.
|
||||
#
|
||||
# pipenv >= 2026.5.0 removed this mechanism and switched to argcomplete-based
|
||||
# completion using register-python-argcomplete instead.
|
||||
|
||||
autoload -Uz is-at-least
|
||||
|
||||
_pipenv_version_cache="$ZSH_CACHE_DIR/pipenv_version"
|
||||
|
||||
if [[ -f "$_pipenv_version_cache" ]]; then
|
||||
_pipenv_version="$(< "$_pipenv_version_cache" 2>/dev/null)"
|
||||
else
|
||||
_pipenv_version="${$(pipenv --version 2>/dev/null)#pipenv, version }"
|
||||
fi
|
||||
|
||||
_PIPENV_COMPLETE=zsh_source pipenv >| "$ZSH_CACHE_DIR/completions/_pipenv" &|
|
||||
{
|
||||
_pipenv_fresh_version="${$(pipenv --version 2>/dev/null)#pipenv, version }"
|
||||
[[ -n "$_pipenv_fresh_version" ]] && print -r -- "$_pipenv_fresh_version" >| "$_pipenv_version_cache"
|
||||
} &|
|
||||
|
||||
if is-at-least 2026.5.0 "$_pipenv_version"; then
|
||||
# pipenv >= 2026.5.0: argcomplete-based completion (no legacy fallback)
|
||||
if (( $+commands[register-python-argcomplete] )); then
|
||||
autoload -Uz bashcompinit
|
||||
bashcompinit
|
||||
|
||||
eval "$(register-python-argcomplete pipenv)"
|
||||
fi
|
||||
else
|
||||
# legacy Click-based completion via _PIPENV_COMPLETE
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `pipenv`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_pipenv" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _pipenv
|
||||
_comps[pipenv]=_pipenv
|
||||
fi
|
||||
|
||||
_PIPENV_COMPLETE=zsh_source pipenv >| "$ZSH_CACHE_DIR/completions/_pipenv" &|
|
||||
fi
|
||||
|
||||
if zstyle -T ':omz:plugins:pipenv' auto-shell; then
|
||||
# Automatic pipenv shell activation/deactivation
|
||||
@@ -34,6 +68,7 @@ if zstyle -T ':omz:plugins:pipenv' auto-shell; then
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook chpwd _togglePipenvShell
|
||||
_togglePipenvShell
|
||||
|
||||
Reference in New Issue
Block a user