568584a9f5f42d51a08de8b71347f6463b9211e6

Author
Marc Cornellà <hello@mcornella.com>
Committer
Marc Cornellà <hello@mcornella.com>
Date

Message

fix(per-directory-history): fix use of global history on shell start (#9008)

Updated from upstream: https://github.com/jimhester/per-directory-history/blob/d2e291d/per-directory-history.zsh

Fixes #9007
Closese #9008

Co-authored-by: Sebastian Marsching <sebastian-git-2016@marsching.com>

Diff

This diff is truncated to protect this page.

  1diff --git a/plugins/per-directory-history/per-directory-history.zsh b/plugins/per-directory-history/per-directory-history.zsh
  2index 41de2f91dc5accd12f3dac24cc80a13c58e74583..7cd673cdbb712a21219d3277cd7b4ed6ccc51134 100644
  3--- a/plugins/per-directory-history/per-directory-history.zsh
  4+++ b/plugins/per-directory-history/per-directory-history.zsh
  5@@ -32,7 +32,7 @@
  6 #
  7 # Copyright (c) 2014 Jim Hester
  8 #
  9-# This software is provided 'as-is', without any express or implied warranty. 
 10+# This software is provided 'as-is', without any express or implied warranty.
 11 # In no event will the authors be held liable for any damages arising from the
 12 # use of this software.
 13 #
 14@@ -57,6 +57,7 @@
 15 #-------------------------------------------------------------------------------
 16 
 17 [[ -z $HISTORY_BASE ]] && HISTORY_BASE="$HOME/.directory_history"
 18+[[ -z $HISTORY_START_WITH_GLOBAL ]] && HISTORY_START_WITH_GLOBAL=false
 19 [[ -z $PER_DIRECTORY_HISTORY_TOGGLE ]] && PER_DIRECTORY_HISTORY_TOGGLE='^G'
 20 
 21 #-------------------------------------------------------------------------------
 22@@ -66,9 +67,11 @@
 23 function per-directory-history-toggle-history() {
 24   if [[ $_per_directory_history_is_global == true ]]; then
 25     _per-directory-history-set-directory-history
 26+    _per_directory_history_is_global=false
 27     print -n "\nusing local history"
 28   else
 29     _per-directory-history-set-global-history
 30+    _per_directory_history_is_global=true
 31     print -n "\nusing global history"
 32   fi
 33   zle .push-line
 34@@ -114,43 +117,58 @@ function _per-directory-history-addhistory() {
 35       true
 36   else
 37       print -Sr -- "${1%%$'\n'}"
 38+      # instantly write history if set options require it.
 39+      if [[ -o share_history ]] || \
 40+         [[ -o inc_append_history ]] || \
 41+         [[ -o inc_append_history_time ]]; then
 42+          fc -AI $HISTFILE
 43+          fc -AI $_per_directory_history_directory
 44+      fi
 45       fc -p $_per_directory_history_directory
 46   fi
 47 }
 48 
 49+function _per-directory-history-precmd() {
 50+  if [[ $_per_directory_history_initialized == false ]]; then
 51+    _per_directory_history_initialized=true
 52 
 53-function _per-directory-history-set-directory-history() {
 54-  if [[ $_per_directory_history_is_global == true ]]; then
 55-    fc -AI $HISTFILE
 56-    local original_histsize=$HISTSIZE
 57-    HISTSIZE=0
 58-    HISTSIZE=$original_histsize
 59-    if [[ -e "$_per_directory_history_directory" ]]; then
 60-      fc -R "$_per_directory_history_directory"
 61+    if [[ $HISTORY_START_WITH_GLOBAL == true ]]; then
 62+      _per-directory-history-set-global-history
 63+      _per_directory_history_is_global=true
 64+    else
 65+      _per-directory-history-set-directory-history
 66+      _per_directory_history_is_global=false
 67     fi
 68   fi
 69-  _per_directory_history_is_global=false
 70 }
 71+
 72+function _per-directory-history-set-directory-history() {
 73+  fc -AI $HISTFILE
 74+  local original_histsize=$HISTSIZE
 75+  HISTSIZE=0
 76+  HISTSIZE=$original_histsize
 77+  if [[ -e "$_per_directory_history_directory" ]]; then
 78+    fc -R "$_per_directory_history_directory"
 79+  fi
 80+}
 81+
 82 function _per-directory-history-set-global-history() {
 83-  if [[ $_per_directory_history_is_global == false ]]; then
 84-    fc -AI $_per_directory_history_directory
 85-    local original_histsize=$HISTSIZE
 86-    HISTSIZE=0
 87-    HISTSIZE=$original_histsize
 88-    if [[ -e "$HISTFILE" ]]; then
 89-      fc -R "$HISTFILE"
 90-    fi
 91+  fc -AI $_per_directory_history_directory
 92+  local original_histsize=$HISTSIZE
 93+  HISTSIZE=0
 94+  HISTSIZE=$original_histsize
 95+  if [[ -e "$HISTFILE" ]]; then
 96+    fc -R "$HISTFILE"
 97   fi
 98-  _per_directory_history_is_global=true
 99 }
100 
101+mkdir -p ${_per_directory_history_directory:h}
102 
103 #add functions to the exec list for chpwd and zshaddhistory
104 autoload -U add-zsh-hook