aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim F. Storm <[email protected]>2004-10-26 12:56:47 +0000
committerKim F. Storm <[email protected]>2004-10-26 12:56:47 +0000
commit39900c4efc3e5ffe5854cbc25d8c6453e0e86142 (patch)
treeeab134209cd39b5cc5c1d96ae5f3e2e16a5118c4
parent3baa952d8bd2d0ad1587440a559ae10616ea2a4e (diff)
(Fcall_interactively): Add 'U' code to get the up-event discarded by a
previous 'k' or 'K' argument.
-rw-r--r--src/callint.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/callint.c b/src/callint.c
index 8b8cb03209..da88693cd7 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -110,6 +110,7 @@ P -- Prefix arg in raw form. Does not do I/O.
r -- Region: point and mark as 2 numeric args, smallest first. Does no I/O.
s -- Any string. Does not inherit the current input method.
S -- Any symbol.
+U -- Mouse up event discarded by a previous k or K argument.
v -- Variable name: symbol that is user-variable-p.
x -- Lisp expression read but not evaluated.
X -- Lisp expression read and evaluated.
@@ -268,6 +269,7 @@ If KEYS is omitted or nil, the return value of `this-command-keys' is used. */)
Lisp_Object specs;
Lisp_Object filter_specs;
Lisp_Object teml;
+ Lisp_Object up_event;
Lisp_Object enable;
int speccount = SPECPDL_INDEX ();
@@ -289,7 +291,7 @@ If KEYS is omitted or nil, the return value of `this-command-keys' is used. */)
char prompt1[100];
char *tem1;
int arg_from_tty = 0;
- struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
+ struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
int key_count;
int record_then_fail = 0;
@@ -328,6 +330,9 @@ If KEYS is omitted or nil, the return value of `this-command-keys' is used. */)
The feature is not fully implemented. */
filter_specs = Qnil;
+ /* If k or K discard an up-event, save it here so it can be retrieved with U */
+ up_event = Qnil;
+
/* Decode the kind of function. Either handle it and return,
or go to `lose' if not interactive, or go to `retry'
to specify a different function, or set either STRING or SPECS. */
@@ -499,7 +504,7 @@ If KEYS is omitted or nil, the return value of `this-command-keys' is used. */)
varies[i] = 0;
}
- GCPRO4 (prefix_arg, function, *args, *visargs);
+ GCPRO5 (prefix_arg, function, *args, *visargs, up_event);
gcpro3.nvars = (count + 1);
gcpro4.nvars = (count + 1);
@@ -628,7 +633,7 @@ If KEYS is omitted or nil, the return value of `this-command-keys' is used. */)
/* Ignore first element, which is the base key. */
tem2 = Fmemq (intern ("down"), Fcdr (teml));
if (! NILP (tem2))
- Fread_event (Qnil, Qnil);
+ up_event = Fread_event (Qnil, Qnil);
}
}
break;
@@ -656,11 +661,21 @@ If KEYS is omitted or nil, the return value of `this-command-keys' is used. */)
/* Ignore first element, which is the base key. */
tem2 = Fmemq (intern ("down"), Fcdr (teml));
if (! NILP (tem2))
- Fread_event (Qnil, Qnil);
+ up_event = Fread_event (Qnil, Qnil);
}
}
break;
+ case 'U': /* Up event from last k or K */
+ if (!NILP (up_event))
+ {
+ args[i] = Fmake_vector (make_number (1), up_event);
+ up_event = Qnil;
+ teml = args[i];
+ visargs[i] = Fkey_description (teml, Qnil);
+ }
+ break;
+
case 'e': /* The invoking event. */
if (next_event >= key_count)
error ("%s must be bound to an event with parameters",