prezto_config/modules/helper/functions/add-zsh-trap
2012-09-08 19:23:39 -04:00

50 lines
1.2 KiB
Text

#
# Provides for trapping UNIX signals and calling callback functions when a trap
# is triggered.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
# Trap signals were generated with 'kill -l'.
# DEBUG, EXIT, and ZERR are Zsh signals.
_trap_signals=(
ABRT ALRM BUS CHLD CONT EMT FPE HUP ILL INFO INT IO KILL PIPE PROF QUIT
SEGV STOP SYS TERM TRAP TSTP TTIN TTOU URG USR1 USR2 VTALRM WINCH XCPU XFSZ
DEBUG EXIT ZERR
)
# Adds a function name to a list to be called when a trap is triggered.
function add-zsh-trap {
if (( $# < 2 )); then
print "usage: $0 type function" >&2
return 1
fi
if [[ -z "$_trap_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 "
function 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 "$@"