diff options
author | Richard M. Stallman <rms@gnu.org> | 1996-09-11 19:24:19 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1996-09-11 19:24:19 +0000 |
commit | b8af1a29963da5801c3b5b7cd13f4bced0b9cf70 (patch) | |
tree | 9e121923fbb26c6424543204b2d439e802f3bc69 | |
parent | d27ceca6e8d77f35163f9f770ed23472a02fd7d3 (diff) | |
download | emacs-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.c | 47 |
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. |