Commit 58e38155 authored by Andrew Janke's avatar Andrew Janke Committed by Marc Cornellà
Browse files

autoenv: look in additional installation locations, redo logic



Fixes #4681
Co-authored-by: default avatarMarc Cornellà <marc.cornella@live.com>
parent 610b2529
...@@ -7,8 +7,14 @@ To use it, add `autoenv` to the plugins array in your zshrc file: ...@@ -7,8 +7,14 @@ To use it, add `autoenv` to the plugins array in your zshrc file:
```zsh ```zsh
plugins=(... autoenv) plugins=(... autoenv)
``` ```
## Functions
* `use_env()`: creates and/or activates a virtualenv. For use in `.env` files.
See the source code for details.
## Requirements ## Requirements
In order to make this work, you will need to have the autoenv installed. In order to make this work, you will need to have the autoenv installed.
More info on the usage and install: https://github.com/inishchith/autoenv More info on the usage and install at [the project's homepage](https://github.com/inishchith/autoenv).
# Activates autoenv or reports its failure # Initialization: activate autoenv or report its absence
() { () {
local d autoenv_dir install_locations
if ! type autoenv_init >/dev/null; then if ! type autoenv_init >/dev/null; then
for d (~/.autoenv ~/.local/bin /usr/local/opt/autoenv /usr/local/bin); do # Check if activate.sh is in $PATH
if (( $+commands[activate.sh] )); then
autoenv_dir="${commands[activate.sh]:h}"
fi
# Locate autoenv installation
if [[ -z $autoenv_dir ]]; then
install_locations=(
~/.autoenv
~/.local/bin
/usr/local/opt/autoenv
/usr/local/bin
/usr/share/autoenv-git
~/Library/Python/bin
)
for d ( $install_locations ); do
if [[ -e $d/activate.sh ]]; then
autoenv_dir=$d
break
fi
done
fi
# Look for Homebrew path as a last resort
if [[ -z "$autoenv_dir" ]] && (( $+commands[brew] )); then
d=$(brew --prefix)/opt/autoenv
if [[ -e $d/activate.sh ]]; then if [[ -e $d/activate.sh ]]; then
autoenv_dir=$d autoenv_dir=$d
break
fi fi
done fi
# Complain if autoenv is not installed
if [[ -z $autoenv_dir ]]; then if [[ -z $autoenv_dir ]]; then
cat <<END >&2 cat <<END >&2
-------- AUTOENV --------- -------- AUTOENV ---------
...@@ -17,6 +44,7 @@ In the meantime the autoenv plugin is DISABLED. ...@@ -17,6 +44,7 @@ In the meantime the autoenv plugin is DISABLED.
END END
return 1 return 1
fi fi
# Load autoenv
source $autoenv_dir/activate.sh source $autoenv_dir/activate.sh
fi fi
} }
...@@ -27,17 +55,17 @@ fi ...@@ -27,17 +55,17 @@ fi
# It only performs an action if the requested virtualenv is not the current one. # It only performs an action if the requested virtualenv is not the current one.
use_env() { use_env() {
typeset venv local venv
venv="$1" venv="$1"
if [[ "${VIRTUAL_ENV:t}" != "$venv" ]]; then if [[ "${VIRTUAL_ENV:t}" != "$venv" ]]; then
if workon | grep -q "$venv"; then if workon | grep -q "$venv"; then
workon "$venv" workon "$venv"
else else
echo -n "Create virtualenv $venv now? (Yn) " echo -n "Create virtualenv $venv now? (Yn) "
read answer read answer
if [[ "$answer" == "Y" ]]; then if [[ "$answer" == "Y" ]]; then
mkvirtualenv "$venv" mkvirtualenv "$venv"
fi fi
fi
fi fi
fi
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment