From: Simon Ruderich Date: Thu, 30 Aug 2012 17:47:16 +0000 (+0200) Subject: zsh/rc: Don't use add-zsh-hook. X-Git-Url: https://ruderich.org/simon/gitweb/?a=commitdiff_plain;h=c4e301f244c36103c028cf5067fdd8844aa3dbe6;hp=b11cfa198df10f9f764f592d08c884a37df8af2c;p=config%2Fdotfiles.git zsh/rc: Don't use add-zsh-hook. Instead append to *_functions directly. Also delete old compatibility file. --- diff --git a/zsh/functions/compatibility/add-zsh-hook b/zsh/functions/compatibility/add-zsh-hook deleted file mode 100644 index aedc1e7..0000000 --- a/zsh/functions/compatibility/add-zsh-hook +++ /dev/null @@ -1,76 +0,0 @@ -# Add to HOOK the given FUNCTION. -# HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory, -# zshexit (the _functions subscript is not required). -# -# With -d, remove the function from the hook instead; delete the hook -# variable if it is empty. -# -# -D behaves like -d, but pattern characters are active in the -# function name, so any matching function will be deleted from the hook. -# -# Without -d, the FUNCTION is marked for autoload; -U is passed down to -# autoload if that is given, as are -z and -k. (This is harmless if the -# function is actually defined inline.) - -emulate -L zsh - -local -a hooktypes -hooktypes=(chpwd precmd preexec periodic zshaddhistory zshexit) - -local opt -local -a autoopts -integer del - -while getopts "dDUzk" opt; do - case $opt in - (d) - del=1 - ;; - - (D) - del=2 - ;; - - ([Uzk]) - autoopts+=(-$opt) - ;; - - (*) - return 1 - ;; - esac -done -shift $(( OPTIND - 1 )) - -if (( $# != 2 || ${hooktypes[(I)$1]} == 0 )); then - print "Usage: $0 hook function\nValid hooks are:\n $hooktypes" - return 1 -fi - -local hook="${1}_functions" -local fn="$2" - -if (( del )); then - # delete, if hook is set - if (( ${(P)+hook} )); then - if (( del == 2 )); then - set -A $hook ${(P)hook:#${~fn}} - else - set -A $hook ${(P)hook:#$fn} - fi - # unset if no remaining entries --- this can give better - # performance in some cases - if (( ! ${(P)#hook} )); then - unset $hook - fi - fi -else - if (( ${(P)+hook} )); then - if (( ${${(P)hook}[(I)$fn]} == 0 )); then - set -A $hook ${(P)hook} $fn - fi - else - set -A $hook $fn - fi - autoload $autoopts -- $fn -fi diff --git a/zsh/rc b/zsh/rc index 7e817ac..55e9242 100644 --- a/zsh/rc +++ b/zsh/rc @@ -82,13 +82,7 @@ fi # Simulate hooks using _functions arrays for Zsh versions older than 4.3.4. At # the moment only precmd(), preexec() and chpwd() are simulated. -# -# At least 4.3.4 (not sure about later versions) has an error in add-zsh-hook -# so the compatibility version is used there too. -if [[ $ZSH_VERSION != (4.3.<5->*|4.<4->*|<5->*) ]]; then - # Provide add-zsh-hook which was added in 4.3.4. - fpath=(~/.zsh/functions/compatibility $fpath) - +if [[ $ZSH_VERSION != (4.3.<4->*|4.<4->*|<5->*) ]]; then # Run all functions defined in the ${precmd,preexec,chpwd}_functions # arrays. function precmd() { @@ -108,9 +102,6 @@ if [[ $ZSH_VERSION != (4.3.<5->*|4.<4->*|<5->*) ]]; then } fi -# Autoload add-zsh-hook to add/remove zsh hook functions easily. -autoload -Uz add-zsh-hook - # Load zmv (zsh move) which is a powerful file renamer. autoload -Uz zmv @@ -266,7 +257,7 @@ if [[ $ZSH_VERSION == (4.3.<9->*|4.<4->*|<5->*) || prompt_chpwd() { FORCE_RUN_VCS_INFO=1 } - add-zsh-hook chpwd prompt_chpwd + chpwd_functions+=(prompt_chpwd) # Used by prompt code below to determine if vcs_info should be run. RUN_VCS_INFO=1 @@ -325,7 +316,7 @@ $blue%B'%b$default\ $green%B%n%b$default@$green%B%m%b$default %(1j.$yellow%j$default.)%# \ %(?..($red%B%?%b$default%) )" } -add-zsh-hook precmd prompt_precmd +precmd_functions+=(prompt_precmd) # When screen, tmux, xterm or rxvt is used set the name of the window to the @@ -468,8 +459,8 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then fi # Add the preexec() and precmd() hooks. - add-zsh-hook preexec window_preexec - add-zsh-hook precmd window_precmd + preexec_functions+=(window_preexec) + precmd_functions+=(window_precmd) else # Fallback if another TERM is used, necessary to run screen (see below in # "RUN COMMANDS").