# # Provides for trapping UNIX signals and calling callback functions when a trap # is triggered. # # Authors: # Sorin Ionescu # # Adds a function name to a list to be called when a trap is triggered. add-zsh-trap() { if (( $# < 2 )); then print "usage: $0 type function" >&2 return 1 fi if [[ -z "$signals[(r)$1]" ]]; then print "$0: unknown signal: $1" >&2 return 1 fi local trap_functions="TRAP${1}_FUNCTIONS" if (( ! ${(P)+trap_functions} )); then typeset -gaU "$trap_functions" fi eval "$trap_functions+="$2"" if (( ! $+functions[TRAP${1}] )); then eval " TRAP${1}() { for trap_function in \"\$TRAP${1}_FUNCTIONS[@]\"; do if (( \$+functions[\$trap_function] )); then \"\$trap_function\" \"\$1\" fi done return \$(( 128 + \$1 )) } " fi } add-zsh-trap "$@"