- local env_file="$PWD/$AUTOENV_FILE_ENTER"
-
- # Handle leave event for previously sourced env files.
- if [[ $AUTOENV_HANDLE_LEAVE == 1 ]] && (( $#_autoenv_stack_entered )); then
- for prev_dir in ${_autoenv_stack_entered}; do
- if ! [[ ${PWD}/ == ${prev_dir}/* ]]; then
- local env_file_leave=$prev_dir/$AUTOENV_FILE_LEAVE
- if _autoenv_check_authorized_env_file $env_file_leave; then
- _autoenv_source $env_file_leave leave $prev_dir
- fi
- # Remove this entry from the stack.
- _autoenv_stack_entered=(${_autoenv_stack_entered#$prev_dir})
- fi
- done
- fi
-
- if ! [[ -f $env_file ]] && [[ $AUTOENV_LOOK_UPWARDS == 1 ]]; then
- # Look for files in parent dirs, using an extended Zsh glob.
- setopt localoptions extendedglob
- local m
- m=((../)#${AUTOENV_FILE_ENTER}(N))
- if (( $#m )); then
- env_file=${${m[1]}:A}
- else
- _autoenv_chpwd_prev_dir=$PWD
- return
+ emulate -L zsh
+ (( $AUTOENV_DISABLED )) && return
+ local env_file="$PWD/$AUTOENV_FILE_ENTER"
+ if [[ $AUTOENV_HANDLE_LEAVE == 1 ]] && (( $#_autoenv_stack_entered )); then
+ local prev_file prev_dir
+ for prev_file in ${_autoenv_stack_entered}; do
+ prev_dir=${prev_file:h}
+ if ! [[ ${PWD}/ == ${prev_dir}/* ]]; then
+ local env_file_leave=$prev_dir/$AUTOENV_FILE_LEAVE
+ if _autoenv_check_authorized_env_file $env_file_leave; then
+ varstash_dir=$prev_dir _autoenv_source $env_file_leave leave $prev_dir
+ fi
+ (( $+functions[autostash] )) && varstash_dir=$prev_dir autounstash
+ _autoenv_stack_entered_remove $prev_file
+ fi
+ done