* 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).