summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1996-09-11 19:24:19 +0000
committerRichard M. Stallman <rms@gnu.org>1996-09-11 19:24:19 +0000
commitb8af1a29963da5801c3b5b7cd13f4bced0b9cf70 (patch)
tree9e121923fbb26c6424543204b2d439e802f3bc69
parentd27ceca6e8d77f35163f9f770ed23472a02fd7d3 (diff)
downloademacs-b8af1a29963da5801c3b5b7cd13f4bced0b9cf70.tar.gz
(Fexecute_extended_command): Delete junk lines.
Print the key bindings after the command, temporarily; then bring back the previous message.
-rw-r--r--src/keyboard.c47
1 files changed, 34 insertions, 13 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index f0a95c3e5ab..19f8dbb3b57 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -6901,11 +6901,10 @@ DEFUN ("execute-extended-command", Fexecute_extended_command, Sexecute_extended_
(prefixarg)
Lisp_Object prefixarg;
{
- defsubr (&Sfocus_frame);
- defsubr (&Sunfocus_frame);
Lisp_Object function;
char buf[40];
Lisp_Object saved_keys;
+ Lisp_Object bindings, value;
struct gcpro gcpro1, gcpro2;
saved_keys = Fvector (this_command_key_count,
@@ -6988,24 +6987,46 @@ DEFUN ("execute-extended-command", Fexecute_extended_command, Sexecute_extended_
if (!NILP (Vsuggest_key_bindings)
&& NILP (Vexecuting_macro)
&& SYMBOLP (function))
- {
- Lisp_Object bindings;
+ bindings = Fwhere_is_internal (function, Voverriding_local_map,
+ Qt, Qnil);
+ else
+ bindings = Qnil;
- bindings = Fwhere_is_internal (function, Voverriding_local_map,
- Qt, Qnil);
+ value = Qnil;
+ GCPRO2 (bindings, value);
+ value = Fcommand_execute (function, Qt, Qnil, Qnil);
- if (!NILP (bindings))
+ /* If the command has a key binding, print it now. */
+ if (!NILP (bindings))
+ {
+ /* But first wait, and skip the message if there is input. */
+ if (!NILP (Fsit_for ((NUMBERP (Vsuggest_key_bindings)
+ ? Vsuggest_key_bindings : make_number (2)),
+ Qnil, Qnil)))
{
- message ("You can run the command `%s' by typing %s",
+ Lisp_Object binding;
+ char *newmessage;
+ char *oldmessage = echo_area_glyphs;
+ int oldmessage_len = echo_area_glyphs_length;
+
+ binding = Fkey_description (bindings);
+
+ newmessage
+ = (char *) alloca (XSYMBOL (function)->name->size
+ + XSTRING (binding)->size
+ + 100);
+ sprintf (newmessage, "You can run the command `%s' by typing %s",
XSYMBOL (function)->name->data,
- XSTRING (Fkey_description (bindings))->data);
- Fsit_for ((NUMBERP (Vsuggest_key_bindings)
- ? Vsuggest_key_bindings : make_number (2)),
- Qnil, Qnil);
+ XSTRING (binding)->data);
+ message1_nolog (newmessage);
+ if (!NILP (Fsit_for ((NUMBERP (Vsuggest_key_bindings)
+ ? Vsuggest_key_bindings : make_number (2)),
+ Qnil, Qnil)))
+ message2_nolog (oldmessage, oldmessage_len);
}
}
- return Fcommand_execute (function, Qt, Qnil, Qnil);
+ RETURN_UNGCPRO (value);
}
/* Find the set of keymaps now active.