mirror of
https://github.com/zdharma-continuum/zinit.git
synced 2026-09-10 07:36:38 -04:00
fix(ices): restore $OLDPWD around plugin directory hooks
Every ice that runs code inside a plugin or snippet directory (atinit, atload, multisrc, atclone, atpull, ps-on-unload) saved and restored $PWD around the temporary cd, but never $OLDPWD. `cd -q' suppresses chpwd hooks and `noautopushd' suppresses the directory stack, but neither suppresses $OLDPWD, so the cd back left it pointing at the directory just visited. Opening a new shell and pressing `cd -' jumped into a zinit plugin directory without the user ever having gone there. Add .zinit-cd-quiet/.zinit-restore-dir, which return to the original $PWD by cd'ing through the original $OLDPWD for real. A plain $OLDPWD assignment is not enough: `cd -' reads zsh's internal previous-directory state, not the parameter, so assigning it leaves the parameter looking correct while `cd -' still navigates to the plugin directory. When the original $OLDPWD is empty or has since been deleted, bounce through $PWD instead, which degrades `cd -' to a harmless no-op rather than emitting an error and leaking the plugin directory anyway. Also gate the restore on the cd having actually happened. It ran unconditionally, so with the nocd ice -- where no cd takes place -- the no-op cd back to $PWD still set OLDPWD=$PWD, silently discarding the user's real previous directory. Sites already protected by a real subshell, and the user-facing `zinit cd' and `zinit create' commands that are meant to leave you in the target directory, are left untouched. Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
This commit is contained in:
parent
6842df0082
commit
712cac1952
|
|
@ -2503,10 +2503,10 @@ print -- "\nAvailable ice-modifiers:\n\n${ice_order[*]}"
|
|||
|
||||
if [[ -n ${sice[ps-on-unload]} ]]; then
|
||||
(( quiet )) || builtin print -r "Running plugin's provided unload code: ${ZINIT[col-info]}${sice[ps-on-unload][1,50]}${sice[ps-on-unload][51]:+…}${ZINIT[col-rst]}"
|
||||
local ___oldcd="$PWD"
|
||||
() { setopt localoptions noautopushd; builtin cd -q "$___dir"; }
|
||||
local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"
|
||||
.zinit-cd-quiet "$___dir"
|
||||
eval "${sice[ps-on-unload]}"
|
||||
() { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }
|
||||
.zinit-restore-dir "$___oldcd" "$___oldoldpwd"
|
||||
fi
|
||||
|
||||
# 1. Delete done bindkeys
|
||||
|
|
|
|||
|
|
@ -2258,19 +2258,15 @@ __zinit-cmake-base-hook () {
|
|||
|
||||
local rc=0
|
||||
[[ -n $atclone ]] && .zinit-countdown atclone && {
|
||||
local ___oldcd=$PWD
|
||||
local ___oldcd=$PWD ___oldoldpwd=$OLDPWD
|
||||
integer ___moved=0
|
||||
|
||||
(( ${+ICE[nocd]} == 0 )) && {
|
||||
() {
|
||||
setopt localoptions noautopushd
|
||||
builtin cd -q "$dir"
|
||||
}
|
||||
}
|
||||
(( ${+ICE[nocd]} == 0 )) && .zinit-cd-quiet "$dir" && ___moved=1
|
||||
|
||||
eval "$atclone"
|
||||
rc="$?"
|
||||
|
||||
() { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }
|
||||
(( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"
|
||||
}
|
||||
|
||||
return "$rc"
|
||||
|
|
@ -2389,13 +2385,12 @@ __zinit-cmake-base-hook () {
|
|||
local rc=0
|
||||
|
||||
.zinit-countdown atpull && {
|
||||
local ___oldcd=$PWD
|
||||
(( ${+ICE[nocd]} == 0 )) && {
|
||||
() { setopt localoptions noautopushd; builtin cd -q "$dir"; }
|
||||
}
|
||||
local ___oldcd=$PWD ___oldoldpwd=$OLDPWD
|
||||
integer ___moved=0
|
||||
(( ${+ICE[nocd]} == 0 )) && .zinit-cd-quiet "$dir" && ___moved=1
|
||||
.zinit-at-eval "$atpull" "$ICE[atclone]"
|
||||
rc="$?"
|
||||
() { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; };
|
||||
(( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"
|
||||
}
|
||||
|
||||
return "$rc"
|
||||
|
|
@ -2415,13 +2410,12 @@ __zinit-cmake-base-hook () {
|
|||
local rc=0
|
||||
|
||||
.zinit-countdown atpull && {
|
||||
local ___oldcd=$PWD
|
||||
(( ${+ICE[nocd]} == 0 )) && {
|
||||
() { setopt localoptions noautopushd; builtin cd -q "$dir"; }
|
||||
}
|
||||
local ___oldcd=$PWD ___oldoldpwd=$OLDPWD
|
||||
integer ___moved=0
|
||||
(( ${+ICE[nocd]} == 0 )) && .zinit-cd-quiet "$dir" && ___moved=1
|
||||
.zinit-at-eval "$atpull" $ICE[atclone]
|
||||
rc="$?"
|
||||
() { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; };
|
||||
(( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"
|
||||
}
|
||||
|
||||
return "$rc"
|
||||
|
|
|
|||
55
zinit.zsh
55
zinit.zsh
|
|
@ -1017,6 +1017,29 @@ builtin setopt noaliases
|
|||
{ : ${(P)2::="$(stat -c %Y "$1")"}; } 2>/dev/null
|
||||
}
|
||||
} # ]]]
|
||||
# FUNCTION: .zinit-cd-quiet [[[
|
||||
# Changes directory without running chpwd hooks or touching the directory stack.
|
||||
#
|
||||
# $1 - directory to change into
|
||||
.zinit-cd-quiet() {
|
||||
() { setopt localoptions noautopushd; builtin cd -q "$1"; } "$1"
|
||||
} # ]]]
|
||||
# FUNCTION: .zinit-restore-dir [[[
|
||||
# Returns to $1 without leaving the visited directory as the `cd -' target.
|
||||
#
|
||||
# The directory `cd -' goes to is tracked internally by zsh and is only updated
|
||||
# by a real cd/pushd/popd, never by assigning to $OLDPWD. The only way to make
|
||||
# `cd -' forget the directory we temporarily visited is to cd through the
|
||||
# original $OLDPWD for real on the way back. Do not simplify this to a single
|
||||
# cd plus an $OLDPWD assignment.
|
||||
#
|
||||
# $1 - the $PWD to return to
|
||||
# $2 - the $OLDPWD to restore; may be empty or since-deleted, in which case we
|
||||
# bounce through $1 so that `cd -' degrades to a harmless no-op
|
||||
.zinit-restore-dir() {
|
||||
[[ -n $2 && -d $2 ]] && .zinit-cd-quiet "$2" || .zinit-cd-quiet "$1"
|
||||
.zinit-cd-quiet "$1"
|
||||
} # ]]]
|
||||
# FUNCTION: .zinit-any-to-user-plugin [[[
|
||||
# Allows elastic plugin-spec across the code.
|
||||
#
|
||||
|
|
@ -1497,7 +1520,7 @@ builtin setopt noaliases
|
|||
return $(( 10 - $? ))
|
||||
done
|
||||
|
||||
(( ${+ICE[atinit]} )) && { local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "$local_dir/$dirname"; } && eval "${ICE[atinit]}"; ((1)); } || eval "${ICE[atinit]}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
(( ${+ICE[atinit]} )) && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$local_dir/$dirname" && { ___moved=1; eval "${ICE[atinit]}" }; ((1)); } || eval "${ICE[atinit]}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
|
||||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:atinit-<-> <->]} )
|
||||
for key in "${reply[@]}"; do
|
||||
|
|
@ -1549,7 +1572,7 @@ builtin setopt noaliases
|
|||
} else { [[ ${+ICE[silent]} -eq 1 || ${+ICE[pick]} -eq 1 && -z ${ICE[pick]} || ${ICE[pick]} = /dev/null ]] || { +zi-log "Snippet not loaded ({url}${id_as}{rst})"; retval=1; } }
|
||||
|
||||
[[ -n ${ICE[src]} ]] && { ZERO="${${(M)ICE[src]##/*}:-$local_dir/$dirname/${ICE[src]}}"; (( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }; }
|
||||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD"; () { setopt localoptions noautopushd; builtin cd -q "$local_dir/$dirname"; }; eval "reply=(${ICE[multisrc]})"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; local fname; for fname in "${reply[@]}"; do ZERO="${${(M)fname:#/*}:-$local_dir/$dirname/$fname}"; (( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }; done; }
|
||||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; .zinit-cd-quiet "$local_dir/$dirname"; eval "reply=(${ICE[multisrc]})"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; local fname; for fname in "${reply[@]}"; do ZERO="${${(M)fname:#/*}:-$local_dir/$dirname/$fname}"; (( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }; done; }
|
||||
|
||||
# Run the atload hooks right before atload ice.
|
||||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atload-<-> <->]} )
|
||||
|
|
@ -1564,7 +1587,7 @@ builtin setopt noaliases
|
|||
.zinit-wrap-functions "$save_url" "" "$id_as"
|
||||
}
|
||||
|
||||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$local_dir/$dirname/-atload-"; local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "$local_dir/$dirname"; } && builtin eval "${ICE[atload]#\!}"; ((1)); } || eval "${ICE[atload]#\!}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$local_dir/$dirname/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$local_dir/$dirname" && { ___moved=1; builtin eval "${ICE[atload]#\!}" }; ((1)); } || eval "${ICE[atload]#\!}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
|
||||
(( -- ZINIT[TMP_SUBST] == 0 )) && { ZINIT[TMP_SUBST]=inactive; builtin setopt noaliases; (( ${+ZINIT[bkp-compdef]} )) && functions[compdef]="${ZINIT[bkp-compdef]}" || unfunction compdef; (( ZINIT[ALIASES_OPT] )) && builtin setopt aliases; }
|
||||
elif [[ -n ${opts[(r)--command]} || ${ICE[as]} = command ]]; then
|
||||
|
|
@ -1603,7 +1626,7 @@ builtin setopt noaliases
|
|||
ZERO="${${(M)ICE[src]##/*}:-$local_dir/$dirname/${ICE[src]}}"
|
||||
(( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }
|
||||
fi
|
||||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD"; () { setopt localoptions noautopushd; builtin cd -q "$local_dir/$dirname"; }; eval "reply=(${ICE[multisrc]})"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; local fname; for fname in "${reply[@]}"; do ZERO="${${(M)fname:#/*}:-$local_dir/$dirname/$fname}"; (( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }; done; }
|
||||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; .zinit-cd-quiet "$local_dir/$dirname"; eval "reply=(${ICE[multisrc]})"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; local fname; for fname in "${reply[@]}"; do ZERO="${${(M)fname:#/*}:-$local_dir/$dirname/$fname}"; (( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }; done; }
|
||||
|
||||
# Run the atload hooks right before atload ice.
|
||||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atload-<-> <->]} )
|
||||
|
|
@ -1618,7 +1641,7 @@ builtin setopt noaliases
|
|||
.zinit-wrap-functions "$save_url" "" "$id_as"
|
||||
}
|
||||
|
||||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$local_dir/$dirname/-atload-"; local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "$local_dir/$dirname"; } && builtin eval "${ICE[atload]#\!}"; ((1)); } || eval "${ICE[atload]#\!}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$local_dir/$dirname/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$local_dir/$dirname" && { ___moved=1; builtin eval "${ICE[atload]#\!}" }; ((1)); } || eval "${ICE[atload]#\!}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
|
||||
[[ -n ${ICE[src]} || -n ${ICE[multisrc]} || ${ICE[atload][1]} = "!" ]] && {
|
||||
(( -- ZINIT[TMP_SUBST] == 0 )) && { ZINIT[TMP_SUBST]=inactive; builtin setopt noaliases; (( ${+ZINIT[bkp-compdef]} )) && functions[compdef]="${ZINIT[bkp-compdef]}" || unfunction compdef; (( ZINIT[ALIASES_OPT] )) && builtin setopt aliases; }
|
||||
|
|
@ -1627,7 +1650,7 @@ builtin setopt noaliases
|
|||
((1))
|
||||
fi
|
||||
|
||||
(( ${+ICE[atload]} )) && [[ ${ICE[atload][1]} != "!" ]] && { ZERO="$local_dir/$dirname/-atload-"; local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "$local_dir/$dirname"; } && builtin eval "${ICE[atload]}"; ((1)); } || eval "${ICE[atload]}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
(( ${+ICE[atload]} )) && [[ ${ICE[atload][1]} != "!" ]] && { ZERO="$local_dir/$dirname/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$local_dir/$dirname" && { ___moved=1; builtin eval "${ICE[atload]}" }; ((1)); } || eval "${ICE[atload]}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
|
||||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:atload-<-> <->]} )
|
||||
for key in "${reply[@]}"; do
|
||||
|
|
@ -1732,7 +1755,7 @@ builtin setopt noaliases
|
|||
return $(( 10 - $? ))
|
||||
done
|
||||
|
||||
[[ ${+ICE[atinit]} = 1 && $ICE[atinit] != '!'* ]] && { local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}"; } && eval "${ICE[atinit]}"; ((1)); } || eval "${ICE[atinit]}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
[[ ${+ICE[atinit]} = 1 && $ICE[atinit] != '!'* ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}" && { ___moved=1; eval "${ICE[atinit]}" }; ((1)); } || eval "${ICE[atinit]}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
|
||||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:atinit-<-> <->]} )
|
||||
for ___key in "${reply[@]}"; do
|
||||
|
|
@ -1823,9 +1846,9 @@ builtin setopt noaliases
|
|||
}
|
||||
|
||||
local ZERO
|
||||
[[ $ICE[atinit] = '!'* ]] && { local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}"; } && eval "${ICE[atinit#!]}"; ((1)); } || eval "${ICE[atinit]#!}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
[[ $ICE[atinit] = '!'* ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}" && { ___moved=1; eval "${ICE[atinit#!]}" }; ((1)); } || eval "${ICE[atinit]#!}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
[[ -n ${ICE[src]} ]] && { ZERO="${${(M)ICE[src]##/*}:-$___pdir_orig/${ICE[src]}}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { ((1)); { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); }; }
|
||||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD"; () { setopt localoptions noautopushd; builtin cd -q "$___pdir_orig"; }; eval "reply=(${ICE[multisrc]})"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; local ___fname; for ___fname in "${reply[@]}"; do ZERO="${${(M)___fname:#/*}:-$___pdir_orig/$___fname}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { ((1)); { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); }; done; }
|
||||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; .zinit-cd-quiet "$___pdir_orig"; eval "reply=(${ICE[multisrc]})"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; local ___fname; for ___fname in "${reply[@]}"; do ZERO="${${(M)___fname:#/*}:-$___pdir_orig/$___fname}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { ((1)); { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); }; done; }
|
||||
|
||||
# Run the atload hooks right before atload ice.
|
||||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atload-<-> <->]} )
|
||||
|
|
@ -1840,7 +1863,7 @@ builtin setopt noaliases
|
|||
.zinit-wrap-functions "$___user" "$___plugin" "$___id_as"
|
||||
}
|
||||
|
||||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$___id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$___pdir_orig/-atload-"; local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "$___pdir_orig"; } && builtin eval "${ICE[atload]#\!}"; } || eval "${ICE[atload]#\!}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$___id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$___pdir_orig/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$___pdir_orig" && { ___moved=1; builtin eval "${ICE[atload]#\!}" }; } || eval "${ICE[atload]#\!}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
|
||||
[[ -n ${ICE[src]} || -n ${ICE[multisrc]} || ${ICE[atload][1]} = "!" ]] && {
|
||||
(( -- ZINIT[TMP_SUBST] == 0 )) && { ZINIT[TMP_SUBST]=inactive; builtin setopt noaliases; (( ${+ZINIT[bkp-compdef]} )) && functions[compdef]="${ZINIT[bkp-compdef]}" || unfunction compdef; (( ZINIT[ALIASES_OPT] )) && builtin setopt aliases; }
|
||||
|
|
@ -1873,10 +1896,10 @@ builtin setopt noaliases
|
|||
(( ${+ICE[blockf]} )) && { local -a fpath_bkp; fpath_bkp=( "${fpath[@]}" ); }
|
||||
local ZERO="$___pdir_path/$___fname"
|
||||
(( ${+ICE[aliases]} )) || builtin setopt noaliases
|
||||
[[ $ICE[atinit] = '!'* ]] && { local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}"; } && eval "${ICE[atinit]#!}"; ((1)); } || eval "${ICE[atinit]#1}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
[[ $ICE[atinit] = '!'* ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}" && { ___moved=1; eval "${ICE[atinit]#!}" }; ((1)); } || eval "${ICE[atinit]#1}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
(( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { ((1)); { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); }
|
||||
[[ -n ${ICE[src]} ]] && { ZERO="${${(M)ICE[src]##/*}:-$___pdir_orig/${ICE[src]}}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { ((1)); { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); }; }
|
||||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD"; () { setopt localoptions noautopushd; builtin cd -q "$___pdir_orig"; }; eval "reply=(${ICE[multisrc]})"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; for ___fname in "${reply[@]}"; do ZERO="${${(M)___fname:#/*}:-$___pdir_orig/$___fname}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); } done; }
|
||||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; .zinit-cd-quiet "$___pdir_orig"; eval "reply=(${ICE[multisrc]})"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; for ___fname in "${reply[@]}"; do ZERO="${${(M)___fname:#/*}:-$___pdir_orig/$___fname}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); } done; }
|
||||
|
||||
# Run the atload hooks right before atload ice.
|
||||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atload-<-> <->]} )
|
||||
|
|
@ -1891,7 +1914,7 @@ builtin setopt noaliases
|
|||
.zinit-wrap-functions "$___user" "$___plugin" "$___id_as"
|
||||
}
|
||||
|
||||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$___id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$___pdir_orig/-atload-"; local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "$___pdir_orig"; } && builtin eval "${ICE[atload]#\!}"; ((1)); } || eval "${ICE[atload]#\!}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$___id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$___pdir_orig/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$___pdir_orig" && { ___moved=1; builtin eval "${ICE[atload]#\!}" }; ((1)); } || eval "${ICE[atload]#\!}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
(( ZINIT[ALIASES_OPT] )) && builtin setopt aliases
|
||||
(( ${+ICE[blockf]} )) && { fpath=( "${fpath_bkp[@]}" ); }
|
||||
|
||||
|
|
@ -1900,7 +1923,7 @@ builtin setopt noaliases
|
|||
[[ $___mode != light(|-b) ]] && .zinit-diff "${ZINIT[CUR_USPL2]}" end
|
||||
fi
|
||||
|
||||
[[ ${+ICE[atload]} = 1 && ${ICE[atload][1]} != "!" ]] && { ZERO="$___pdir_orig/-atload-"; local ___oldcd="$PWD"; (( ${+ICE[nocd]} == 0 )) && { () { setopt localoptions noautopushd; builtin cd -q "$___pdir_orig"; } && builtin eval "${ICE[atload]}"; ((1)); } || eval "${ICE[atload]}"; () { setopt localoptions noautopushd; builtin cd -q "$___oldcd"; }; }
|
||||
[[ ${+ICE[atload]} = 1 && ${ICE[atload][1]} != "!" ]] && { ZERO="$___pdir_orig/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; integer ___moved=0; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$___pdir_orig" && { ___moved=1; builtin eval "${ICE[atload]}" }; ((1)); } || eval "${ICE[atload]}"; (( ___moved )) && .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||||
|
||||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:atload-<-> <->]} )
|
||||
for ___key in "${reply[@]}"; do
|
||||
|
|
@ -1986,7 +2009,7 @@ builtin setopt noaliases
|
|||
integer ___nolast=1
|
||||
fi
|
||||
.zinit-any-to-user-plugin "$1" ""
|
||||
local ___id_as="$1" ___user="${reply[-2]}" ___plugin="${reply[-1]}" ___oldpwd="$PWD"
|
||||
local ___id_as="$1" ___user="${reply[-2]}" ___plugin="${reply[-1]}" ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"
|
||||
() {
|
||||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||||
builtin cd &>/dev/null -q ${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}} || {
|
||||
|
|
@ -1998,7 +2021,7 @@ builtin setopt noaliases
|
|||
(( ___nolast )) && { builtin print -r "$1" >! ${ZINIT[BIN_DIR]}/last-run-object.txt; }
|
||||
ZINIT[last-run-plugin]="$1"
|
||||
eval "${@[2-correct,-1]}"
|
||||
() { setopt localoptions noautopushd; builtin cd -q "$___oldpwd"; }
|
||||
.zinit-restore-dir "$___oldcd" "$___oldoldpwd"
|
||||
else
|
||||
+zi-log "{u-warn}Error{b-warn}:{rst} no such plugin or snippet."
|
||||
fi
|
||||
|
|
|
|||
Loading…
Reference in a new issue