zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: numeric arg (was: Re: pws-22)
@ 1999-06-17  7:23 Sven Wischnowsky
  0 siblings, 0 replies; only message in thread
From: Sven Wischnowsky @ 1999-06-17  7:23 UTC (permalink / raw)
  To: zsh-workers


Peter Stephenson wrote:

> we probably have to change $NUMERIC in zle widgets so
> that it's not set if there is no prefix.

This makes NUMERIC be unset when no numeric argument was typed. It
also allows unsetting NUMERIC to make called widgets behave as if no
num arg was given. Finally, it also allows `unset NUMERIC;NUMERIC=9'
in a way that the assignment treats NUMERIC as a special parameter
even after that `unset'. For this to work I had to change the
`pm-level = locallevel' to `...locallevel + 1'. Hm, this is nice to
have at least in this case and somehow it feals right (after all, we
are creating parameters for a function that is still to be called),
but I'd like to hear if you all agree.

Bye
 Sven

P.S.: The uses in the completion code have been changed. Are there
      others?


diff -u -r os/Zle/compctl.c Src/Zle/compctl.c
--- os/Zle/compctl.c	Wed Jun 16 10:31:46 1999
+++ Src/Zle/compctl.c	Thu Jun 17 09:13:31 1999
@@ -2223,7 +2223,7 @@
 	DPUTS(!pm, "param not set in addcompparams");
 
 	*pp = pm;
-	pm->level = locallevel;
+	pm->level = locallevel + 1;
 	if ((pm->u.data = cp->var)) {
 	    switch(PM_TYPE(cp->type)) {
 	    case PM_SCALAR:
diff -u -r os/Zle/zle_params.c Src/Zle/zle_params.c
--- os/Zle/zle_params.c	Wed Jun 16 10:31:47 1999
+++ Src/Zle/zle_params.c	Thu Jun 17 09:13:32 1999
@@ -69,8 +69,8 @@
         zleunsetfn, NULL },
     { "keys", PM_ARRAY | PM_READONLY, NULL, FN(get_keys),
         zleunsetfn, NULL },
-    { "NUMERIC", PM_INTEGER, FN(set_numeric), FN(get_numeric),
-        zleunsetfn, NULL },
+    { "NUMERIC", PM_INTEGER | PM_UNSET, FN(set_numeric), FN(get_numeric),
+        unset_numeric, NULL },
     { "HISTNO", PM_INTEGER | PM_READONLY, NULL, FN(get_histno),
         zleunsetfn, NULL },
     { NULL, 0, NULL, NULL, NULL, NULL }
@@ -89,7 +89,7 @@
 	    pm = (Param) paramtab->getnode(paramtab, zp->name);
 	DPUTS(!pm, "param not set in makezleparams");
 
-	pm->level = locallevel;
+	pm->level = locallevel + 1;
 	pm->u.data = zp->data;
 	switch(PM_TYPE(zp->type)) {
 	    case PM_SCALAR:
@@ -107,6 +107,8 @@
 		break;
 	}
 	pm->unsetfn = zp->unsetfn;
+	if ((zp->type & PM_UNSET) && (zmod.flags & MOD_MULT))
+	    pm->flags &= ~PM_UNSET;
     }
 }
 
@@ -267,6 +269,7 @@
 set_numeric(Param pm, zlong x)
 {
     zmult = x;
+    zmod.flags = MOD_MULT;
 }
 
 /**/
@@ -274,6 +277,17 @@
 get_numeric(Param pm)
 {
     return zmult;
+}
+
+/**/
+static void
+unset_numeric(Param pm, int exp)
+{
+    if (exp) {
+	stdunsetfn(pm, exp);
+	zmod.flags = 0;
+	zmult = 1;
+    }
 }
 
 /**/
diff -u -r od/Zsh/zle.yo Doc/Zsh/zle.yo
--- od/Zsh/zle.yo	Thu Jun 17 09:09:42 1999
+++ Doc/Zsh/zle.yo	Thu Jun 17 09:13:33 1999
@@ -162,7 +162,11 @@
 )
 vindex(NUMERIC)
 item(tt(NUMERIC) (integer))(
-The numeric argument.
+The numeric argument. If no numeric argument was given, this parameter
+is unset. When this is set inside a widget function, builtin widgets
+called with the tt(zle) builtin command will use the value
+assigned. If it is unset inside awidget function, builtin widgets
+called behave as if no numeric argument was given.
 )
 vindex(HISTNO)
 item(tt(HISTNO) (integer))(
diff -u -r oc/Base/_first Completion/Base/_first
--- oc/Base/_first	Wed Jun 16 10:31:21 1999
+++ Completion/Base/_first	Thu Jun 17 09:13:32 1999
@@ -40,9 +40,9 @@
 #       PREFIX="$PREFIX[1,-2]"
 #       # If a numeric prefix is given, we use it as the number of
 #       # lines (multiplied by ten below) in the history to search.
-#       if [[ NUMERIC -gt 1 ]]; then
+#       if [[ ${NUMERIC:-1} -gt 1 ]]; then
 #         max=$NUMERIC
-#         NUMERIC=1
+#         unset NUMERIC
 #       else
 #         # The default is to search the last 100 lines.
 #         max=10
diff -u -r oc/Commands/_correct_filename Completion/Commands/_correct_filename
--- oc/Commands/_correct_filename	Wed Jun 16 10:31:24 1999
+++ Completion/Commands/_correct_filename	Thu Jun 17 09:13:32 1999
@@ -23,7 +23,7 @@
   file=$1
   local IPREFIX
 else
-  (( NUMERIC > 1 )) && max_approx=$NUMERIC
+  (( ${NUMERIC:-1} > 1 )) && max_approx=$NUMERIC
 fi
 
 if [[ $file = \~*/* ]]; then
diff -u -r oc/Commands/_most_recent_file Completion/Commands/_most_recent_file
--- oc/Commands/_most_recent_file	Wed Jun 16 10:31:24 1999
+++ Completion/Commands/_most_recent_file	Thu Jun 17 09:13:32 1999
@@ -14,9 +14,9 @@
 if [[ $PREFIX = \~*/* ]]; then
   tilde=${PREFIX%%/*}
   etilde=${~tilde}
-  file=($~PREFIX*$~SUFFIX(om[$NUMERIC]N))
+  file=($~PREFIX*$~SUFFIX(om[${NUMERIC:-1}]N))
   file=(${file/#$etilde/$tilde})
 else
-  file=($~PREFIX*$~SUFFIX(om[$NUMERIC]N))
+  file=($~PREFIX*$~SUFFIX(om[${NUMERIC:-1}]N))
 fi
 (( $#file )) && compadd -U -i "$IPREFIX" -I "$ISUFFIX" -f -Q $file
diff -u -r oc/Core/_approximate Completion/Core/_approximate
--- oc/Core/_approximate	Wed Jun 16 10:31:26 1999
+++ Completion/Core/_approximate	Thu Jun 17 09:13:32 1999
@@ -89,14 +89,14 @@
 
 # Get the number of errors to accept.
 
-if [[ "$cfgacc" = *[nN]* && NUMERIC -ne 1 ]]; then
+if [[ "$cfgacc" = *[nN]* && ${NUMERIC:-1} -ne 1 ]]; then
   # Stop if we also have a `!'.
 
   [[ "$cfgacc" = *\!* ]] && return 1
 
   # Prefer the numeric argument if that has a sensible value.
 
-  comax="$NUMERIC"
+  comax="${NUMERIC:-1}"
 else
   comax="${cfgacc//[^0-9]}"
 fi
diff -u -r oc/Core/_expand Completion/Core/_expand
--- oc/Core/_expand	Wed Jun 16 10:31:26 1999
+++ Completion/Core/_expand	Thu Jun 17 09:13:33 1999
@@ -17,7 +17,7 @@
 #    In this case, expansion of substitutions will be done if the
 #    expression evaluates to `1'. For example, with
 #
-#      compconf expand_substitute='NUMERIC != 1'
+#      compconf expand_substitute='${NUMERIC:-1} != 1'
 #
 #    substitution will be performed only if given an explicit numeric
 #    argument other than `1', as by typing ESC 2 TAB.
diff -u -r oc/Core/_list Completion/Core/_list
--- oc/Core/_list	Wed Jun 16 10:31:26 1999
+++ Completion/Core/_list	Thu Jun 17 09:13:33 1999
@@ -14,7 +14,7 @@
 #    will be done if the expression evaluates to `1'.
 #    For example, with
 #
-#      compconf list_condition='NUMERIC != 1'
+#      compconf list_condition='${NUMERIC:-1} != 1'
 #
 #    delaying will be done only if given an explicit numeric argument
 #    other than `1'.

--
Sven Wischnowsky                         wischnow@informatik.hu-berlin.de


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~1999-06-17  7:24 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-06-17  7:23 PATCH: numeric arg (was: Re: pws-22) Sven Wischnowsky

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).