about summary refs log tree commit diff
path: root/Functions/Misc
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2009-05-19 15:33:24 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2009-05-19 15:33:24 +0000
commitad3d514ac79b573ce43fa7089175de519f39f21d (patch)
treec5dc3b1284102a6e51c01d210bae81d8bb475f85 /Functions/Misc
parentcac27544ff9d42069acd89a7587a2f9b581a9a2b (diff)
downloadzsh-ad3d514ac79b573ce43fa7089175de519f39f21d.tar.gz
zsh-ad3d514ac79b573ce43fa7089175de519f39f21d.tar.xz
zsh-ad3d514ac79b573ce43fa7089175de519f39f21d.zip
26973: zmathfuncdef enhancements
Diffstat (limited to 'Functions/Misc')
-rw-r--r--Functions/Misc/zmathfuncdef20
1 files changed, 18 insertions, 2 deletions
diff --git a/Functions/Misc/zmathfuncdef b/Functions/Misc/zmathfuncdef
index 21d3c249e..e5692e769 100644
--- a/Functions/Misc/zmathfuncdef
+++ b/Functions/Misc/zmathfuncdef
@@ -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