changeset 16166:05e71f2b317e

(Fexecute_extended_command): Delete junk lines. Print the key bindings after the command, temporarily; then bring back the previous message.
author Richard M. Stallman <rms@gnu.org>
date Wed, 11 Sep 1996 19:24:19 +0000
parents a95e975275d8
children 651ee074f8b0
files src/keyboard.c
diffstat 1 files changed, 35 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/keyboard.c	Wed Sep 11 19:23:28 1996 +0000
+++ b/src/keyboard.c	Wed Sep 11 19:24:19 1996 +0000
@@ -6901,11 +6901,10 @@
   (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 @@
   if (!NILP (Vsuggest_key_bindings)
       && NILP (Vexecuting_macro)
       && SYMBOLP (function))
+    bindings = Fwhere_is_internal (function, Voverriding_local_map,
+				   Qt, Qnil);
+  else
+    bindings = Qnil;
+
+  value = Qnil;
+  GCPRO2 (bindings, value);
+  value = Fcommand_execute (function, Qt, Qnil, Qnil);
+
+  /* If the command has a key binding, print it now.  */
+  if (!NILP (bindings))
     {
-      Lisp_Object bindings;
-
-      bindings = Fwhere_is_internal (function, Voverriding_local_map,
-				     Qt, Qnil);
-
-      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.