diff options
Diffstat (limited to 'plugins/virtualenvwrapper')
| -rw-r--r-- | plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 36 | 
1 files changed, 23 insertions, 13 deletions
| diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 0ed2565b4..35de50874 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -8,26 +8,36 @@ if [[ -f "$wrapsource" ]]; then      # directory name of the project. Virtual environment name can be overridden      # by placing a .venv file in the project root with a virtualenv name in it      function workon_cwd { -        # Check that this is a Git repo -        PROJECT_ROOT=`git rev-parse --show-toplevel 2> /dev/null` -        if (( $? == 0 )); then +        if [ ! $WORKON_CWD ]; then +            WORKON_CWD=1 +            # Check if this is a Git repo +            PROJECT_ROOT=`git rev-parse --show-toplevel 2> /dev/null` +            if (( $? != 0 )); then +                PROJECT_ROOT="." +            fi              # Check for virtualenv name override -            ENV_NAME=`basename "$PROJECT_ROOT"`              if [[ -f "$PROJECT_ROOT/.venv" ]]; then                  ENV_NAME=`cat "$PROJECT_ROOT/.venv"` +            elif [[ "$PROJECT_ROOT" != "." ]]; then +                ENV_NAME=`basename "$PROJECT_ROOT"` +            else +                ENV_NAME=""              fi -            # Activate the environment only if it is not already active -            if [[ "$VIRTUAL_ENV" != "$WORKON_HOME/$ENV_NAME" ]]; then -                if [[ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]]; then -                    workon "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME" +            if [[ "$ENV_NAME" != "" ]]; then +                # Activate the environment only if it is not already active +                if [[ "$VIRTUAL_ENV" != "$WORKON_HOME/$ENV_NAME" ]]; then +                    if [[ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]]; then +                        workon "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME" +                    fi                  fi +            elif [ $CD_VIRTUAL_ENV ]; then +                # We've just left the repo, deactivate the environment +                # Note: this only happens if the virtualenv was activated automatically +                deactivate && unset CD_VIRTUAL_ENV              fi -        elif [ $CD_VIRTUAL_ENV ]; then -            # We've just left the repo, deactivate the environment -            # Note: this only happens if the virtualenv was activated automatically -            deactivate && unset CD_VIRTUAL_ENV +            unset PROJECT_ROOT +            unset WORKON_CWD          fi -        unset PROJECT_ROOT      }      # New cd function that does the virtualenv magic | 
