1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-01 05:16:05 +01:00

26973: zmathfuncdef enhancements

This commit is contained in:
Peter Stephenson 2009-05-19 15:33:24 +00:00
parent cac27544ff
commit ad3d514ac7
2 changed files with 25 additions and 4 deletions

View file

@ -2371,7 +2371,7 @@ enditem()
See the comments in the function for a few extra tips.
)
findex(zmathfuncdef)
item(tt(zmathfuncdef) var(mathfunc) [ var(body) ])(
item(tt(zmathfuncdef) [ var(mathfunc) [ var(body) ] ])(
A convenient front end to tt(functions -M).
With two arguments, define a mathematical function named var(mathfunc)
@ -2383,10 +2383,15 @@ to refer to optional parameters. Note that the forms must be
strictly adhered to for the function to calculate the correct number
of arguments. The implementation is held in a shell function named
tt(zsh_math_func_)var(mathfunc); usually the user will not need
to refer to the shell function directly.
to refer to the shell function directly. Any existing function
of the same name is silently replaced.
With one argument, remove the mathematical function var(mathfunc)
as well as the shell function implementation.
With no arguments, list all var(mathfunc) functions in a form
suitable for restoring the definition.
The functions have not necessarily been defined by tt(zmathfuncdef).
)
enditem()

View file

@ -5,18 +5,34 @@
emulate -L zsh
setopt extendedglob
local -a match mbegin mend line
local func
if (( $# < 1 || $# > 2 )); then
print "Usage: $0 name [body]" >&2
if (( $# > 2 )); then
print "Usage: $0 [name [body]]" >&2
return 1
fi
zmodload -i zsh/parameter || return 1
if (( $# == 0 )); then
functions -M | while read -A line; do
func=${functions[$line[6]]}
if [[ $func = (#b)[[:space:]]#\(\([[:space:]]#(*[^[:space:]])[[:space:]]#\)\) ]]; then
print "zmathfuncdef $line[3] ${(qq)match[1]}"
fi
done
return 0
fi
local mname=$1
local fname="zsh_math_func_$1"
if (( $# == 1 )); then
functions +M $mname && unfunction $fname
return 0
elif [[ -n $functions[$fname] ]]; then
functions +M $mname
fi
integer iarg=0 ioptarg