changeset 1383:54028d2538a4

* callint.c (Fcall_interactively): Allow multiple 'e' specs. (Finteractive): Doc fix.
author Jim Blandy <jimb@redhat.com>
date Sun, 11 Oct 1992 06:39:13 +0000
parents 9b210c7d6c23
children 416f7f33fe95
files src/callint.c
diffstat 1 files changed, 16 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/callint.c	Sun Oct 11 06:35:04 1992 +0000
+++ b/src/callint.c	Sun Oct 11 06:39:13 1992 +0000
@@ -66,7 +66,9 @@
 C -- Command name: symbol with interactive function definition.\n\
 d -- Value of point as number.  Does not do I/O.\n\
 D -- Directory name.\n\
-e -- Mouse click that invoked this command (value of `last-nonmenu-event').\n\
+e -- Event that invoked this command (value of `last-nonmenu-event').\n\
+     This skips events without parameters.\n\
+     If used more than once, the Nth 'e' returns the Nth parameterized event.\n\
 f -- Existing file name.\n\
 F -- Possibly nonexistent file name.\n\
 k -- Key sequence (string).\n\
@@ -160,6 +162,10 @@
   Lisp_Object enable;
   int speccount = specpdl_ptr - specpdl;
 
+  /* The index of the next element of this_command_keys to examine for
+     the 'e' interactive code.  */
+  int next_event = 0;
+
   Lisp_Object prefix_arg;
   unsigned char *string;
   unsigned char *tem;
@@ -391,13 +397,17 @@
 	  visargs[i] = Fkey_description (teml);
 	  break;
 
-	case 'e':		/* Mouse click.  */
-	  args[i] = last_command_char;
-	  if (NILP (Fmouse_click_p (args[i])))
-	    error ("%s must be bound to a mouse click.",
+	case 'e':		/* The invoking event.  */
+	  /* Find the next parameterized event.  */
+	  while (next_event < this_command_key_count
+		 && ! EVENT_HAS_PARAMETERS (this_command_keys[next_event]))
+	    next_event++;
+	  if (next_event >= this_command_key_count)
+	    error ("%s must be bound to an event with parameters",
 		   (XTYPE (function) == Lisp_Symbol
 		    ? (char *) XSYMBOL (function)->name->data
-		    : "Command"));
+		    : "command"));
+	  args[i] = this_command_keys[next_event++];
 	  varies[i] = -1;
 	  break;