Add trap shellscript function
darcs-hash:20051217213052-ac50b-fdab838ea9595fac7572068ea3a1f12b8bb0ea68.gz
This commit is contained in:
parent
61706b4490
commit
7bdcfacee4
@ -105,8 +105,8 @@ CMD_DOC_SRC := doc_src/count.txt doc_src/dirh.txt doc_src/dirs.txt \
|
|||||||
doc_src/fishd.txt doc_src/help.txt doc_src/mimedb.txt \
|
doc_src/fishd.txt doc_src/help.txt doc_src/mimedb.txt \
|
||||||
doc_src/nextd.txt doc_src/open.txt doc_src/popd.txt \
|
doc_src/nextd.txt doc_src/open.txt doc_src/popd.txt \
|
||||||
doc_src/prevd.txt doc_src/psub.txt doc_src/pushd.txt \
|
doc_src/prevd.txt doc_src/psub.txt doc_src/pushd.txt \
|
||||||
doc_src/set_color.txt doc_src/tokenize.txt doc_src/type.txt \
|
doc_src/set_color.txt doc_src/tokenize.txt doc_src/trap.txt \
|
||||||
doc_src/umask.txt doc_src/vared.txt
|
doc_src/type.txt doc_src/umask.txt doc_src/vared.txt
|
||||||
|
|
||||||
#
|
#
|
||||||
# Files generated by running doxygen on the files in $(CMD_DOC_SRC)
|
# Files generated by running doxygen on the files in $(CMD_DOC_SRC)
|
||||||
|
37
doc_src/trap.txt
Normal file
37
doc_src/trap.txt
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
\section trap trap - perform an action when the shell recives a signal
|
||||||
|
|
||||||
|
\subsection trap-synopsis Synopsis
|
||||||
|
<tt>trap [OPTIONS] [[ARG] SIGSPEC ... ]</tt>
|
||||||
|
|
||||||
|
\subsection trap-description Description
|
||||||
|
|
||||||
|
Trap is a shellscript wrapper around the fish event delivery
|
||||||
|
framework. IT is defined for backwards compatibility reasons. For
|
||||||
|
other uses, it is recomended to define a <a
|
||||||
|
href='index.html#event'>event handler</a>.
|
||||||
|
|
||||||
|
- ARG is the command to be executed on signal delivary
|
||||||
|
- SIGSPEC is the name of the signal to trap
|
||||||
|
- \c -h or \c --help Display help and exit
|
||||||
|
- \c -l or \c --list-signals print a list of signal names
|
||||||
|
- \c -p or \c --print print all defined signal handlers
|
||||||
|
|
||||||
|
If ARG and SIGSPEC are both specified, ARG is the command to be
|
||||||
|
executed when the signal specified by SIGSPEC is delivered.
|
||||||
|
|
||||||
|
If ARG is absent (and there is a single SIGSPEC) or -, each specified
|
||||||
|
signal is reset to its original disposition (the value it had upon
|
||||||
|
entrance to the shell). If ARG is the null string the signal
|
||||||
|
specified by each SIGSPEC is ignored by the shell and by the commands
|
||||||
|
it invokes.
|
||||||
|
|
||||||
|
If ARG is not present and -p has been supplied, then the trap commands
|
||||||
|
associated with each SIGSPEC are displayed. If no arguments are
|
||||||
|
supplied or if only -p is given, trap prints the list of commands
|
||||||
|
associated with each signal.
|
||||||
|
|
||||||
|
Signal names are case insensitive and the SIG prefix is optional.
|
||||||
|
|
||||||
|
The return status is 1 if any SIGSPEC is invalid; otherwise trap
|
||||||
|
returns 0.
|
@ -545,6 +545,144 @@ function __bold -d "Print argument in bold"
|
|||||||
set_color normal
|
set_color normal
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function __trap_translate_signal
|
||||||
|
set upper (echo $argv[1]|tr a-z A-Z)
|
||||||
|
if expr $upper : 'SIG.*' >/dev/null
|
||||||
|
echo $upper | cut -c 4-
|
||||||
|
else
|
||||||
|
echo $upper
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function __trap_switch
|
||||||
|
|
||||||
|
switch $argv[1]
|
||||||
|
case EXIT
|
||||||
|
echo --on-exit %self
|
||||||
|
|
||||||
|
case '*'
|
||||||
|
echo --on-signal $argv[1]
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function trap -d 'Perform an action when the shell recives a signal'
|
||||||
|
|
||||||
|
set -l mode
|
||||||
|
set -l cmd
|
||||||
|
set -l sig
|
||||||
|
set -l shortopt
|
||||||
|
set -l longopt
|
||||||
|
|
||||||
|
set shortopt -o lph
|
||||||
|
if getopt -T >/dev/null
|
||||||
|
set longopt
|
||||||
|
else
|
||||||
|
set longopt -l print,help,list-signals
|
||||||
|
end
|
||||||
|
|
||||||
|
if not getopt -n type -Q $shortopt $longopt -- $argv
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l tmp (getopt $shortopt $longopt -- $argv)
|
||||||
|
|
||||||
|
eval set opt $tmp
|
||||||
|
|
||||||
|
while count $opt >/dev/null
|
||||||
|
switch $opt[1]
|
||||||
|
case -h --help
|
||||||
|
help trap
|
||||||
|
return 0
|
||||||
|
|
||||||
|
case -p --print
|
||||||
|
set mode print
|
||||||
|
|
||||||
|
case -l --list-signals
|
||||||
|
set mode list
|
||||||
|
|
||||||
|
case --
|
||||||
|
set -e opt[1]
|
||||||
|
break
|
||||||
|
|
||||||
|
end
|
||||||
|
set -e opt[1]
|
||||||
|
end
|
||||||
|
|
||||||
|
if not count $mode >/dev/null
|
||||||
|
|
||||||
|
switch (count $opt)
|
||||||
|
|
||||||
|
case 0
|
||||||
|
set mode print
|
||||||
|
|
||||||
|
case 1
|
||||||
|
set mode clear
|
||||||
|
|
||||||
|
case '*'
|
||||||
|
if test opt[1] = -
|
||||||
|
set -e opt[1]
|
||||||
|
set mode clear
|
||||||
|
else
|
||||||
|
set mode set
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
switch $mode
|
||||||
|
case clear
|
||||||
|
for i in $opt
|
||||||
|
set -- sig (__trap_translate_signal $i)
|
||||||
|
if test $sig
|
||||||
|
functions -e __trap_handler_$sig
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
case set
|
||||||
|
set -l cmd $opt[1]
|
||||||
|
set -e opt[1]
|
||||||
|
|
||||||
|
for i in $opt
|
||||||
|
|
||||||
|
set -l -- sig (__trap_translate_signal $i)
|
||||||
|
set -- sw (__trap_switch $sig)
|
||||||
|
|
||||||
|
if test $sig
|
||||||
|
eval "function __trap_handler_$sig $sw; $cmd; end"
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
case print
|
||||||
|
set -l names
|
||||||
|
|
||||||
|
if count $opt >/dev/null
|
||||||
|
set -- names $opt
|
||||||
|
else
|
||||||
|
set -- names (functions -na|grep "^__trap_handler_"|sed -re 's/__trap_handler_//' )
|
||||||
|
end
|
||||||
|
|
||||||
|
for i in $names
|
||||||
|
|
||||||
|
set -- sig (__trap_translate_signal $i)
|
||||||
|
|
||||||
|
if test sig
|
||||||
|
functions __trap_handler_$i
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
case list
|
||||||
|
kill -l
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
function __fish_type_help -d "Help for the type shellscript function"
|
function __fish_type_help -d "Help for the type shellscript function"
|
||||||
|
|
||||||
set bullet \*
|
set bullet \*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user