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:
@@ -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]"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user