mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-11 00:10:08 +00:00
Use safer append to hook function arrays (#8406)
Use add-zsh-hook to add functions to hooks. That way they won't be added again when doing `source ~/.zshrc` multiple times. Co-authored-by: Marc Cornellà <marc.cornella@live.com>
This commit is contained in:
parent
d4f32e9f3a
commit
1ba0af650a
12 changed files with 29 additions and 23 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -4,3 +4,4 @@ custom/
|
|||
# temp files directories
|
||||
cache/
|
||||
log/
|
||||
*.swp
|
||||
|
|
|
@ -75,8 +75,9 @@ function omz_termsupport_preexec {
|
|||
title '$CMD' '%100>...>$LINE%<<'
|
||||
}
|
||||
|
||||
precmd_functions+=(omz_termsupport_precmd)
|
||||
preexec_functions+=(omz_termsupport_preexec)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook precmd omz_termsupport_precmd
|
||||
add-zsh-hook preexec omz_termsupport_preexec
|
||||
|
||||
|
||||
# Keep Apple Terminal.app's current working directory updated
|
||||
|
@ -99,7 +100,7 @@ if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
|
|||
}
|
||||
|
||||
# Use a precmd hook instead of a chpwd hook to avoid contaminating output
|
||||
precmd_functions+=(update_terminalapp_cwd)
|
||||
add-zsh-hook precmd update_terminalapp_cwd
|
||||
# Run once to get initial cwd set
|
||||
update_terminalapp_cwd
|
||||
fi
|
||||
|
|
|
@ -43,4 +43,5 @@ preexec_alias-finder() {
|
|||
fi
|
||||
}
|
||||
|
||||
preexec_functions+=(preexec_alias-finder)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook preexec preexec_alias-finder
|
||||
|
|
|
@ -53,7 +53,8 @@ function push_future() {
|
|||
}
|
||||
|
||||
# Called by zsh when directory changes
|
||||
chpwd_functions+=(chpwd_dirhistory)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook chpwd chpwd_dirhistory
|
||||
function chpwd_dirhistory() {
|
||||
push_past $PWD
|
||||
# If DIRHISTORY_CD is not set...
|
||||
|
|
|
@ -11,7 +11,8 @@ if [[ -f ${dirstack_file} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
|
|||
[[ -d $dirstack[1] ]] && cd $dirstack[1] && cd $OLDPWD
|
||||
fi
|
||||
|
||||
chpwd_functions+=(chpwd_dirpersist)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook chpwd chpwd_dirpersist
|
||||
chpwd_dirpersist() {
|
||||
if (( $DIRSTACKSIZE <= 0 )) || [[ -z $dirstack_file ]]; then return; fi
|
||||
local -ax my_stack
|
||||
|
|
|
@ -20,9 +20,10 @@ function precmd_update_git_vars() {
|
|||
fi
|
||||
}
|
||||
|
||||
chpwd_functions+=(chpwd_update_git_vars)
|
||||
precmd_functions+=(precmd_update_git_vars)
|
||||
preexec_functions+=(preexec_update_git_vars)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook chpwd chpwd_update_git_vars
|
||||
add-zsh-hook precmd precmd_update_git_vars
|
||||
add-zsh-hook preexec preexec_update_git_vars
|
||||
|
||||
|
||||
## Function definitions
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
typeset -g ZSH_LAST_WORKING_DIRECTORY
|
||||
|
||||
# Updates the last directory once directory is changed
|
||||
chpwd_functions+=(chpwd_last_working_dir)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook chpwd chpwd_last_working_dir
|
||||
chpwd_last_working_dir() {
|
||||
if [ "$ZSH_SUBSHELL" = 0 ]; then
|
||||
local cache_file="$ZSH_CACHE_DIR/last-working-dir"
|
||||
|
|
|
@ -23,7 +23,8 @@ _togglePipenvShell() {
|
|||
fi
|
||||
fi
|
||||
}
|
||||
chpwd_functions+=(_togglePipenvShell)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook chpwd _togglePipenvShell
|
||||
|
||||
# Aliases
|
||||
alias pch="pipenv check"
|
||||
|
|
|
@ -25,5 +25,6 @@ __timer_display_timer_precmd() {
|
|||
fi
|
||||
}
|
||||
|
||||
preexec_functions+=(__timer_save_time_preexec)
|
||||
precmd_functions+=(__timer_display_timer_precmd)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook preexec __timer_save_time_preexec
|
||||
add-zsh-hook precmd __timer_display_timer_precmd
|
||||
|
|
|
@ -96,7 +96,6 @@ if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then
|
|||
|
||||
# Append workon_cwd to the chpwd_functions array, so it will be called on cd
|
||||
# http://zsh.sourceforge.net/Doc/Release/Functions.html
|
||||
if ! (( $chpwd_functions[(I)workon_cwd] )); then
|
||||
chpwd_functions+=(workon_cwd)
|
||||
fi
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook chpwd workon_cwd
|
||||
fi
|
||||
|
|
|
@ -28,7 +28,8 @@ prompt_setup_pygmalion(){
|
|||
base_prompt_nocolor=$(echo "$base_prompt" | perl -pe "s/%\{[^}]+\}//g")
|
||||
post_prompt_nocolor=$(echo "$post_prompt" | perl -pe "s/%\{[^}]+\}//g")
|
||||
|
||||
precmd_functions+=(prompt_pygmalion_precmd)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook precmd prompt_pygmalion_precmd
|
||||
}
|
||||
|
||||
prompt_pygmalion_precmd(){
|
||||
|
@ -46,5 +47,3 @@ prompt_pygmalion_precmd(){
|
|||
}
|
||||
|
||||
prompt_setup_pygmalion
|
||||
|
||||
|
||||
|
|
|
@ -12,7 +12,8 @@ prompt_setup_pygmalion(){
|
|||
base_prompt_nocolor=$(echo "$base_prompt" | perl -pe "s/%\{[^}]+\}//g")
|
||||
post_prompt_nocolor=$(echo "$post_prompt" | perl -pe "s/%\{[^}]+\}//g")
|
||||
|
||||
precmd_functions+=(prompt_pygmalion_precmd)
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook precmd prompt_pygmalion_precmd
|
||||
}
|
||||
|
||||
prompt_pygmalion_precmd(){
|
||||
|
@ -30,5 +31,3 @@ prompt_pygmalion_precmd(){
|
|||
}
|
||||
|
||||
prompt_setup_pygmalion
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue