summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Gonzo <feasuro@protonmail.com>2024-05-07 21:30:23 +0200
committerGitHub <noreply@github.com>2024-05-07 21:30:23 +0200
commit22bbc233e90f18ad7a02625c66d1867a5486fcbb (patch)
tree5148b5ffae851402bccbed0fbcd2b58ab22923d3
parent668ca3a32dae5ff5d164fc3be565f1e2ece248db (diff)
downloadzsh-22bbc233e90f18ad7a02625c66d1867a5486fcbb.tar.gz
zsh-22bbc233e90f18ad7a02625c66d1867a5486fcbb.tar.bz2
zsh-22bbc233e90f18ad7a02625c66d1867a5486fcbb.zip
feat(python): autovenv keeps activated on subdirs (#12396)
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
-rw-r--r--plugins/python/README.md7
-rw-r--r--plugins/python/python.plugin.zsh19
2 files changed, 18 insertions, 8 deletions
diff --git a/plugins/python/README.md b/plugins/python/README.md
index c99697b22..b990a26b9 100644
--- a/plugins/python/README.md
+++ b/plugins/python/README.md
@@ -32,8 +32,9 @@ virtual environments:
`venv`) in the current directory.
- `auto_vrun`: Automatically activate the venv virtual environment when entering a directory containing
- `<venv-name>/bin/activate`, and automatically deactivate it when navigating out of it (including
- subdirectories!).
+ `<venv-name>/bin/activate`, and automatically deactivate it when navigating out of it (keeps venv activated
+ in subdirectories).
- To enable the feature, set `export PYTHON_AUTO_VRUN=true` before sourcing oh-my-zsh.
- - The default virtual environment name is `venv`. To use a different name, set
+ - Plugin activates first virtual environment in lexicographic order whose name begins with `<venv-name>`.
+ The default virtual environment name is `venv`. To use a different name, set
`export PYTHON_VENV_NAME=<venv-name>`. For example: `export PYTHON_VENV_NAME=".venv"`
diff --git a/plugins/python/python.plugin.zsh b/plugins/python/python.plugin.zsh
index f6ea85027..7256aa04f 100644
--- a/plugins/python/python.plugin.zsh
+++ b/plugins/python/python.plugin.zsh
@@ -86,11 +86,20 @@ function mkv() {
if [[ "$PYTHON_AUTO_VRUN" == "true" ]]; then
# Automatically activate venv when changing dir
- auto_vrun() {
- if [[ -f "${PYTHON_VENV_NAME}/bin/activate" ]]; then
- source "${PYTHON_VENV_NAME}/bin/activate" > /dev/null 2>&1
- else
- (( $+functions[deactivate] )) && deactivate > /dev/null 2>&1
+ function auto_vrun() {
+ # deactivate if we're on a different dir than VIRTUAL_ENV states
+ # we don't deactivate subdirectories!
+ if (( $+functions[deactivate] )) && [[ $PWD != ${VIRTUAL_ENV:h}* ]]; then
+ deactivate > /dev/null 2>&1
+ fi
+
+ if [[ $PWD != ${VIRTUAL_ENV:h} ]]; then
+ for _file in "${PYTHON_VENV_NAME}"*/bin/activate(N.); do
+ # make sure we're not in a venv already
+ (( $+functions[deactivate] )) && deactivate > /dev/null 2>&1
+ source $_file > /dev/null 2>&1
+ break
+ done
fi
}
add-zsh-hook chpwd auto_vrun