Browse Source

autoenv: look in additional installation locations, redo logic

Fixes #4681

Co-authored-by: Marc Cornellà <marc.cornella@live.com>
Andrew Janke 8 years ago
parent
commit
58e38155fc
2 changed files with 51 additions and 17 deletions
  1. 7 1
      plugins/autoenv/README.md
  2. 44 16
      plugins/autoenv/autoenv.plugin.zsh

+ 7 - 1
plugins/autoenv/README.md

@@ -7,8 +7,14 @@ To use it, add `autoenv` to the plugins array in your zshrc file:
 ```zsh
 plugins=(... autoenv)
 ```
+
+## Functions
+
+* `use_env()`: creates and/or activates a virtualenv. For use in `.env` files.
+  See the source code for details.
+
 ## Requirements
 
 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).

+ 44 - 16
plugins/autoenv/autoenv.plugin.zsh

@@ -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
-  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
       autoenv_dir=$d
-      break
     fi
-  done
+  fi
+
+  # Complain if autoenv is not installed
   if [[ -z $autoenv_dir ]]; then 
     cat <<END >&2
 -------- AUTOENV ---------
@@ -17,6 +44,7 @@ In the meantime the autoenv plugin is DISABLED.
 END
     return 1
   fi
+  # Load autoenv
   source $autoenv_dir/activate.sh
 fi
 }
@@ -27,17 +55,17 @@ fi
 # It only performs an action if the requested virtualenv is not the current one.
 
 use_env() {
-    typeset venv
-    venv="$1"
-    if [[ "${VIRTUAL_ENV:t}" != "$venv" ]]; then
-        if workon | grep -q "$venv"; then
-            workon "$venv"
-        else
-            echo -n "Create virtualenv $venv now? (Yn) "
-            read answer
-            if [[ "$answer" == "Y" ]]; then
-                mkvirtualenv "$venv"
-            fi
-        fi
+  local venv
+  venv="$1"
+  if [[ "${VIRTUAL_ENV:t}" != "$venv" ]]; then
+    if workon | grep -q "$venv"; then
+      workon "$venv"
+    else
+      echo -n "Create virtualenv $venv now? (Yn) "
+      read answer
+      if [[ "$answer" == "Y" ]]; then
+        mkvirtualenv "$venv"
+      fi
     fi
+  fi
 }