: ${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
# Source the env file.
_autoenv_debug "== SOURCE: ${bold_color:-}$autoenv_env_file${reset_color:-}\n PWD: $PWD"
: $(( _autoenv_debug_indent++ ))
+
+ local restore_xtrace
+ if [[ $AUTOENV_DEBUG -gt 2 && ! -o xtrace ]]; then
+ restore_xtrace=1
+ setopt localoptions xtrace
+ fi
source $autoenv_env_file
+ if (( restore_xtrace )); then
+ setopt noxtrace
+ fi
: $(( _autoenv_debug_indent-- ))
_autoenv_debug "== END SOURCE =="
# performance reasons, which is only available in zsh-5.0.5-146-g9381bb6.
local last
local parent_dir="$look_from/.."
+ local abs_parent_dir
while true; do
- parent_dir=${parent_dir:A}
- if [[ $parent_dir == $last ]]; then
+ abs_parent_dir=${parent_dir:A}
+ if [[ $abs_parent_dir == $last ]]; then
break
fi
local parent_file="${parent_dir}/${look_for}"
if [[ -f $parent_file ]]; then
- echo $parent_file
+ if [[ ${parent_file[1,2]} == './' ]]; then
+ echo ${parent_file#./}
+ else
+ echo ${parent_file:A}
+ fi
break
fi
- if [[ $parent_dir == $look_until ]]; then
+ if [[ $abs_parent_dir == $look_until ]]; then
break
fi
last=$parent_dir
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
# Unstash any autostashed stuff.
- if [[ -n "$functions[(I)autostash]" ]]; then
+ if (( $+functions[autostash] )); then
varstash_dir=$prev_dir autounstash
fi