Remove bindkeys from autoenv snapshots

This turned out to be a buggy mess so will be handled manually in
`.exit` files
This commit is contained in:
2026-03-05 11:34:43 +00:00
parent 09340b74e8
commit 719ce5f992

View File

@@ -134,9 +134,8 @@ _autoenv_entered=()
# Per-directory shell state snapshots for computing enter/exit diffs. # Per-directory shell state snapshots for computing enter/exit diffs.
typeset -gA _autoenv_snap_pre_funcs _autoenv_snap_pre_aliases _autoenv_snap_pre_env typeset -gA _autoenv_snap_pre_funcs _autoenv_snap_pre_aliases _autoenv_snap_pre_env
typeset -gA _autoenv_snap_pre_path _autoenv_snap_pre_ps1 _autoenv_snap_pre_bindkeys typeset -gA _autoenv_snap_pre_path _autoenv_snap_pre_ps1
typeset -gA _autoenv_snap_diff_funcs _autoenv_snap_diff_aliases _autoenv_snap_diff_env typeset -gA _autoenv_snap_diff_funcs _autoenv_snap_diff_aliases _autoenv_snap_diff_env
typeset -gA _autoenv_snap_new_bindkeys
# Snapshot shell state before .enter modifications. Call in .enter BEFORE # Snapshot shell state before .enter modifications. Call in .enter BEFORE
# sourcing scripts: _autoenv_snap_pre ${0:A:h} # sourcing scripts: _autoenv_snap_pre ${0:A:h}
@@ -147,7 +146,6 @@ _autoenv_snap_pre() {
_autoenv_snap_pre_env[$dir]="${(F)$(typeset +gx 2>/dev/null)}" _autoenv_snap_pre_env[$dir]="${(F)$(typeset +gx 2>/dev/null)}"
_autoenv_snap_pre_path[$dir]="$PATH" _autoenv_snap_pre_path[$dir]="$PATH"
_autoenv_snap_pre_ps1[$dir]="$PS1" _autoenv_snap_pre_ps1[$dir]="$PS1"
_autoenv_snap_pre_bindkeys[$dir]="$(bindkey -L)"
} }
# Snapshot shell state after .enter modifications and compute the diff. # Snapshot shell state after .enter modifications and compute the diff.
@@ -170,20 +168,6 @@ _autoenv_snap_post() {
_autoenv_snap_diff_funcs[$dir]="${(pj:\n:)diff_funcs}" _autoenv_snap_diff_funcs[$dir]="${(pj:\n:)diff_funcs}"
_autoenv_snap_diff_aliases[$dir]="${(pj:\n:)diff_aliases}" _autoenv_snap_diff_aliases[$dir]="${(pj:\n:)diff_aliases}"
_autoenv_snap_diff_env[$dir]="${(pj:\n:)diff_env}" _autoenv_snap_diff_env[$dir]="${(pj:\n:)diff_env}"
# Diff bindkeys: find truly new bindings (key sequence didn't exist in pre).
# Changed bindings (same key, different widget) are restored via eval of pre.
local -a pre_bk=("${(f)_autoenv_snap_pre_bindkeys[$dir]}")
typeset -A pre_keyspecs
local bkline
for bkline in "${pre_bk[@]}"; do
[[ -n "$bkline" ]] && pre_keyspecs[${bkline% *}]=1
done
local -a new_bk=()
for bkline in "${(f)$(bindkey -L)}"; do
(( ${pre_bk[(Ie)$bkline]} )) && continue
(( ${+pre_keyspecs[${bkline% *}]} )) || new_bk+="$bkline"
done
_autoenv_snap_new_bindkeys[$dir]="${(pj:\n:)new_bk}"
unset "_autoenv_snap_pre_funcs[$dir]" "_autoenv_snap_pre_aliases[$dir]" \ unset "_autoenv_snap_pre_funcs[$dir]" "_autoenv_snap_pre_aliases[$dir]" \
"_autoenv_snap_pre_env[$dir]" "_autoenv_snap_pre_env[$dir]"
} }
@@ -203,15 +187,7 @@ _autoenv_snap_restore() {
done done
PATH="${_autoenv_snap_pre_path[$dir]}" PATH="${_autoenv_snap_pre_path[$dir]}"
PS1="${_autoenv_snap_pre_ps1[$dir]}" PS1="${_autoenv_snap_pre_ps1[$dir]}"
# Restore changed bindkeys to their pre values.
eval "${_autoenv_snap_pre_bindkeys[$dir]}"
# Remove truly new bindkeys (key sequence didn't exist before .enter).
local bkline
for bkline in "${(f)_autoenv_snap_new_bindkeys[$dir]}"; do
[[ -n "$bkline" ]] && eval "${${bkline% *}/bindkey/bindkey -r}"
done
unset "_autoenv_snap_pre_path[$dir]" "_autoenv_snap_pre_ps1[$dir]" \ unset "_autoenv_snap_pre_path[$dir]" "_autoenv_snap_pre_ps1[$dir]" \
"_autoenv_snap_pre_bindkeys[$dir]" "_autoenv_snap_new_bindkeys[$dir]" \
"_autoenv_snap_diff_funcs[$dir]" "_autoenv_snap_diff_aliases[$dir]" \ "_autoenv_snap_diff_funcs[$dir]" "_autoenv_snap_diff_aliases[$dir]" \
"_autoenv_snap_diff_env[$dir]" "_autoenv_snap_diff_env[$dir]"
} }