zsh-workers
 help / color / mirror / code / Atom feed
bccd1159ac67ded17d1d112cc35a074b7544cc3b blob 1892 bytes (raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
# Add to HOOK the given FUNCTION.
# HOOK is one of chpwd, precmd, preexec, periodic, zshaddhistory,
# zshexit, zsh_directory_name (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
  zsh_directory_name
)

local opt
local -a autoopts
integer del list help

while getopts "dDhLUzk" opt; do
  case $opt in
    (d)
    del=1
    ;;

    (D)
    del=2
    ;;

    (h)
    help=1
    ;;

    (L)
    list=1
    ;;

    ([Uzk])
    autoopts+=(-$opt)
    ;;

    (*)
    return 1
    ;;
  esac
done
shift $(( OPTIND - 1 ))

if (( list )); then
  typeset -mp "(${1:-${(@j:|:)hooktypes}})_functions"
  return $?
elif (( help || $# != 2 || ${hooktypes[(I)$1]} == 0 )); then
  local usage="Usage: $0 hook function\nValid hooks are:\n  $hooktypes"
  print -u$(( 2 - help )) $usage
  return $(( 1 - help ))
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
debug log:

solving bccd115 ...
found bccd115 in https://inbox.vuxu.org/zsh-workers/560EF1CD.6060009@tthamilton.com/
found ee37d67 in https://git.vuxu.org/mirror/zsh/
preparing index
index prepared:
100644 ee37d674dc805f5c80352966ee2043db44313063	Functions/Misc/add-zsh-hook

applying [1/1] https://inbox.vuxu.org/zsh-workers/560EF1CD.6060009@tthamilton.com/
diff --git a/Functions/Misc/add-zsh-hook b/Functions/Misc/add-zsh-hook
index ee37d67..bccd115 100644

Checking patch Functions/Misc/add-zsh-hook...
Applied patch Functions/Misc/add-zsh-hook cleanly.

index at:
100644 bccd1159ac67ded17d1d112cc35a074b7544cc3b	Functions/Misc/add-zsh-hook

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).