mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2025-11-04 13:21:19 +08: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
					
				
							
								
								
									
										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
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@ alias-finder() {
 | 
			
		||||
    case $i in
 | 
			
		||||
      -e|--exact) exact=true;;
 | 
			
		||||
      -l|--longer) longer=true;;
 | 
			
		||||
      *) 
 | 
			
		||||
      *)
 | 
			
		||||
        if [[ -z $cmd ]]; then
 | 
			
		||||
          cmd=$i
 | 
			
		||||
        else
 | 
			
		||||
@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user