# HG changeset patch # User Jim Blandy # Date 718785553 0 # Node ID 54028d2538a495951e01d56d467f2e0911033e75 # Parent 9b210c7d6c23ca05117dc3cacc6953c9fcbc3f37 * callint.c (Fcall_interactively): Allow multiple 'e' specs. (Finteractive): Doc fix. diff -r 9b210c7d6c23 -r 54028d2538a4 src/callint.c --- 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;