From 076d692dac8b6969039ec0c6c1b54462f8ba59e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=A1=E9=A3=8E?= <1795771535y@gmail.com> Date: Thu, 6 Aug 2026 00:56:19 +0800 Subject: [PATCH] fix(per-directory-history): prevent fc -p from clearing preexec (#13815) Co-authored-by: Carlo Sala --- .../per-directory-history.zsh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/plugins/per-directory-history/per-directory-history.zsh b/plugins/per-directory-history/per-directory-history.zsh index 926373ae0..bdcf949a3 100644 --- a/plugins/per-directory-history/per-directory-history.zsh +++ b/plugins/per-directory-history/per-directory-history.zsh @@ -91,13 +91,14 @@ bindkey -M vicmd $PER_DIRECTORY_HISTORY_TOGGLE per-directory-history-toggle-hist #------------------------------------------------------------------------------- _per_directory_history_directory="$HISTORY_BASE${PWD:A}/history" +_per_directory_history_global="$HISTFILE" function _per-directory-history-change-directory() { _per_directory_history_directory="$HISTORY_BASE${PWD:A}/history" mkdir -p ${_per_directory_history_directory:h} if [[ $_per_directory_history_is_global == false ]]; then #save to the global history - fc -AI $HISTFILE + fc -AI "$_per_directory_history_global" #save history to previous file local prev="$HISTORY_BASE${OLDPWD:A}/history" mkdir -p ${prev:h} @@ -125,10 +126,9 @@ function _per-directory-history-addhistory() { if [[ -o share_history ]] || \ [[ -o inc_append_history ]] || \ [[ -o inc_append_history_time ]]; then - fc -AI $HISTFILE + fc -AI "$_per_directory_history_global" fc -AI $_per_directory_history_directory fi - fc -p $_per_directory_history_directory fi } @@ -147,12 +147,13 @@ function _per-directory-history-precmd() { } function _per-directory-history-set-directory-history() { - fc -AI $HISTFILE + fc -AI "$_per_directory_history_global" local original_histsize=$HISTSIZE HISTSIZE=0 HISTSIZE=$original_histsize if [[ -e "$_per_directory_history_directory" ]]; then fc -R "$_per_directory_history_directory" + fc -p "$_per_directory_history_directory" fi } @@ -161,8 +162,9 @@ function _per-directory-history-set-global-history() { local original_histsize=$HISTSIZE HISTSIZE=0 HISTSIZE=$original_histsize - if [[ -e "$HISTFILE" ]]; then - fc -R "$HISTFILE" + if [[ -e "$_per_directory_history_global" ]]; then + fc -R "$_per_directory_history_global" + fc -p "$_per_directory_history_global" fi }