]> Sergey Matveev's repositories - zsh-autoenv.git/blobdiff - autoenv.zsh
Update README.md
[zsh-autoenv.git] / autoenv.zsh
index 3ec01e910407b4d8c3afaf5043409ea23606e6b8..aa4414125baffc896634f9b0ee6f2b6986ba19ab 100644 (file)
@@ -1,17 +1,17 @@
 # Initially based on
 # https://github.com/joshuaclayton/dotfiles/blob/master/zsh_profile.d/autoenv.zsh
 
-export AUTOENV_ENV_FILENAME=$HOME/.env_auth
-[ -e $AUTOENV_ENV_FILENAME ] || touch $AUTOENV_ENV_FILENAME
+# File to store confirmed authentication into.
+: ${AUTOENV_ENV_FILENAME:=~/.env_auth}
 
-# Name of file to look for when entering directories.
+# Name of the file to look for when entering directories.
 : ${AUTOENV_FILE_ENTER:=.env}
 
-# Name of file to look for when leaving directories.
+# Name of the file to look for when leaving directories.
 # Requires AUTOENV_HANDLE_LEAVE=1.
-: ${AUTOENV_FILE_LEAVE:=.env.leave}
+: ${AUTOENV_FILE_LEAVE:=.env_leave}
 
-# Look for .env in parent dirs?
+# Look for .env files in parent dirs?
 : ${AUTOENV_LOOK_UPWARDS:=1}
 
 # Handle leave events when changing away from a subtree, where an "enter"
@@ -41,10 +41,8 @@ autoenv_source_parent() {
 # Internal functions. {{{
 # Internal: stack of entered (and handled) directories. {{{
 typeset -g -a _autoenv_stack_entered
-_autoenv_stack_entered=()
 # -g: make it global, this is required when used with antigen.
 typeset -g -A _autoenv_stack_entered_mtime
-_autoenv_stack_entered_mtime=()
 
 # Add an entry to the stack, and remember its mtime.
 _autoenv_stack_entered_add() {
@@ -68,8 +66,14 @@ if ! zmodload -F zsh/stat b:zstat 2>/dev/null; then
   # terse output instead of format, which is not supported by busybox.
   # Assume '+mtime' as $1.
   _autoenv_get_file_mtime() {
-    setopt localoptions pipefail
-    stat -t $1 2>/dev/null | cut -f13 -d ' ' || echo 0
+    # setopt localoptions pipefail
+    local stat
+    stat=$(stat -t $1 2>/dev/null)
+    if [[ -n $stat ]]; then
+      echo ${${(s: :)stat}[13]}
+    else
+      echo 0
+    fi
   }
 else
   _autoenv_get_file_mtime() {
@@ -237,12 +241,11 @@ _autoenv_source() {
     # ${env_file:h}.
   fi
 
-  # Change to directory of env file, source it and cd back.
-  local new_dir=$PWD
+  # Source the env file.
   _autoenv_debug "== SOURCE: ${bold_color:-}$env_file${reset_color:-}\n      PWD: $PWD"
-  (( _autoenv_debug_indent++ ))
+  : $(( _autoenv_debug_indent++ ))
   source $env_file
-  (( _autoenv_debug_indent-- ))
+  : $(( _autoenv_debug_indent-- ))
   _autoenv_debug "== END SOURCE =="
 
   if [[ $autoenv_event == enter ]]; then
@@ -253,6 +256,9 @@ _autoenv_source() {
   # This should not get done for recursion (via autoenv_source_parent),
   # and can be useful to have in general after autoenv was used.
   # unset autoenv_event autoenv_from_dir autoenv_to_dir autoenv_env_file
+  if [[ $autoenv_event == leave ]]; then
+    unset autoenv_env_file
+  fi
 }
 
 _autoenv_get_file_upwards() {
@@ -339,7 +345,7 @@ _autoenv_chpwd_handler() {
 
   _autoenv_chpwd_prev_dir=$PWD
 
-  (( _autoenv_debug_indent++ ))
+  : $(( _autoenv_debug_indent++ ))
 }
 # }}}