autoenv: look in additional installation locations, redo logic

Fixes #4681

Co-authored-by: Marc Cornellà <marc.cornella@live.com>
This commit is contained in:
Andrew Janke 2015-12-18 18:45:17 -05:00 committed by Marc Cornellà
parent 610b2529d2
commit 58e38155fc
2 changed files with 51 additions and 17 deletions

View 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).

View file

@ -1,12 +1,39 @@
# 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.
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
# 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
} }