diff options
| author | Michael Gonzo <feasuro@protonmail.com> | 2024-05-07 21:30:23 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-07 21:30:23 +0200 |
| commit | 22bbc233e90f18ad7a02625c66d1867a5486fcbb (patch) | |
| tree | 5148b5ffae851402bccbed0fbcd2b58ab22923d3 /plugins | |
| parent | 668ca3a32dae5ff5d164fc3be565f1e2ece248db (diff) | |
| download | zsh-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>
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/python/README.md | 7 | ||||
| -rw-r--r-- | plugins/python/python.plugin.zsh | 19 |
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 |
