: ${AUTOENV_DISABLED:=0}
# Public helper functions, which can be used from your .autoenv.zsh files:
-#
+
# Source the next .autoenv.zsh file from parent directories.
# This is useful if you want to use a base .autoenv.zsh file for a directory
# subtree.
}
# Internal functions. {{{
-# Internal: stack of entered (and handled) directories. {{{
+# Internal: stack of loaded env files (i.e. entered directories). {{{
typeset -g -a _autoenv_stack_entered
# -g: make it global, this is required when used with antigen.
typeset -g -A _autoenv_stack_entered_mtime
# Source varstash library once.
# XXX: pollutes environment with e.g. `stash`, and `autostash` will cause
# an overwritten `stash` function to be called!
- if [[ -z "$functions[(I)autostash]" ]]; then
+ if ! (( $+functions[autostash] )); then
if \grep -qE '\b(autostash|autounstash|stash)\b' $autoenv_env_file; then
source ${${funcsourcetrace[1]%:*}:h}/lib/varstash
fi
done
}
+autoenv-edit() {
+ local env_file
+ local -a files
+ local -A check
+ check[enter]=$AUTOENV_FILE_ENTER
+ if [[ "$AUTOENV_FILE_ENTER" != "$AUTOENV_FILE_LEAVE" ]]; then
+ check[leave]=$AUTOENV_FILE_LEAVE
+ fi
+ local f t
+ for t f in ${(kv)check}; do
+ env_file="$f"
+ if ! [[ -f $env_file ]]; then
+ env_file=$(_autoenv_get_file_upwards . $f)
+ if [[ -z $env_file ]]; then
+ echo "No $f file found ($t)." >&2
+ continue
+ fi
+ if ! [[ $AUTOENV_LOOK_UPWARDS == 1 ]]; then
+ echo "Note: found $env_file, but AUTOENV_LOOK_UPWARDS is disabled."
+ fi
+ fi
+ files+=($env_file)
+ done
+ if [[ -z "$files" ]]; then
+ return 1
+ fi
+ echo "Editing $files.."
+ local editor
+ editor="${${AUTOENV_EDITOR:-$EDITOR}:-vim}"
+ eval $editor "$files"
+}
_autoenv_chpwd_handler() {
_autoenv_debug "Calling chpwd handler: PWD=$PWD"
fi
local env_file="$PWD/$AUTOENV_FILE_ENTER"
- _autoenv_debug "env_file: $env_file"
+ _autoenv_debug "looking for env_file: $env_file"
# Handle leave event for previously sourced env files.
if [[ $AUTOENV_HANDLE_LEAVE == 1 ]] && (( $#_autoenv_stack_entered )); then
fi
# Unstash any autostashed stuff.
- if [[ -n "$functions[(I)autostash]" ]]; then
+ if (( $+functions[autostash] )); then
varstash_dir=$prev_dir autounstash
fi
if ! [[ -f $env_file ]] && [[ $AUTOENV_LOOK_UPWARDS == 1 ]]; then
env_file=$(_autoenv_get_file_upwards $PWD)
if [[ -z $env_file ]]; then
+ _autoenv_debug "No env_file found when looking upwards"
return
fi
+ _autoenv_debug "Found env_file: $env_file"
fi
# Load the env file only once: check if $env_file is in the stack of entered