about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--Completion/Unix/Command/_yp3
-rw-r--r--Functions/Misc/zcalc36
3 files changed, 45 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 7e1982ef6..249ecb77b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2001-11-15  Peter Stephenson  <pws@csr.com>
+
+	* 16255: Function/Misc/zcalc: allow -#base or -## base to
+	specify default output base.
+
+	* 16254: Completion/Unix/Command/_yp: allow completion of map
+	names after ypmatch.
+
 2001-11-15 Chmouel Boudjnah <chmouel@mandrakesoft.com>
 
 	* 16253: Src/Zle/complete.mdd: Add Mandrake completion directory to
diff --git a/Completion/Unix/Command/_yp b/Completion/Unix/Command/_yp
index 76c59fac7..96e50ebb4 100644
--- a/Completion/Unix/Command/_yp
+++ b/Completion/Unix/Command/_yp
@@ -19,7 +19,8 @@ ypcat)
   _arguments -C -s "$_yp_args[@]" ':map name:->map' && ret=0
   ;;
 ypmatch)
-  _arguments -C -s "$_yp_args[@]" '*::key map:->keymap' && ret=0
+  _arguments -C -s "$_yp_args[@]" '::key map:->keymap' ':map name:->map' && 
+    ret=0
   ;;
 yppasswd)
   _users
diff --git a/Functions/Misc/zcalc b/Functions/Misc/zcalc
index 78a48b9b0..5d0264922 100644
--- a/Functions/Misc/zcalc
+++ b/Functions/Misc/zcalc
@@ -74,6 +74,10 @@
 # also understood.  However, leading 0 for octal is not understood --- it's
 # too confusing in a calculator.  Use 8#777 etc.
 #
+# Options: -#<base> is the same as a line containing just `[#<base>],
+# similarly -##<base>; they set the default output base, with and without
+# a base discriminator in front, respectively.
+#
 #
 # To do:
 # - separate zcalc history from shell history using arrays --- or allow
@@ -84,7 +88,7 @@
 emulate -L zsh
 setopt extendedglob
 
-local line latest base defbase match mbegin mend psvar
+local line latest base defbase match mbegin mend psvar optlist opt arg
 integer num
 
 zmodload -i zsh/mathfunc 2>/dev/null
@@ -95,6 +99,36 @@ zmodload -i zsh/mathfunc 2>/dev/null
 float PI E
 (( PI = 4 * atan(1), E = exp(1) ))
 
+# Process command line
+while [[ -n $1 && $1 = -(|[#-]*) ]]; do
+  optlist=${1[2,-1]}
+  shift
+  [[ $optlist = (|-) ]] && break
+  while [[ -n $optlist ]]; do
+    opt=${optlist[1]}
+    optlist=${optlist[2,-1]}
+    case $opt in
+      ('#') # Default base
+            if [[ -n $optlist ]]; then
+	       arg=$optlist
+	       optlist=
+	    elif [[ -n $1 ]]; then
+	       arg=$1
+	       shift
+	    else
+	       print "-# requires an argument" >&2
+	       return 1
+	    fi
+	    if [[ $arg != (|\#)[[:digit:]]## ]]; then
+	      print - "-# requires a decimal number as an argument" >&2
+	      return 1
+	    fi
+            defbase="[#${arg}]"
+	    ;;
+    esac
+  done
+done
+
 for (( num = 1; num <= $#; num++ )); do
   # Make sure all arguments have been evaluated.
   # The `$' before the second argv forces string rather than numeric