changeset 43785:5f25ad91cf88

(echo_char): Make sure to add a separator between keys even if echo_dash hasn't been called.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 08 Mar 2002 11:34:00 +0000
parents f7e9e74a6ccd
children e48a85f46eca
files src/keyboard.c
diffstat 1 files changed, 27 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/keyboard.c	Fri Mar 08 11:05:16 2002 +0000
+++ b/src/keyboard.c	Fri Mar 08 11:34:00 2002 +0000
@@ -707,7 +707,7 @@
      Lisp_Object str;
 {
   current_kboard->echo_string = str;
-  current_kboard->echo_after_prompt = XSTRING (str)->size;
+  current_kboard->echo_after_prompt = SCHARS (str);
   echo_now ();
 }
 
@@ -726,6 +726,8 @@
       char *ptr = buffer;
       Lisp_Object echo_string;
 
+      echo_string = current_kboard->echo_string;
+      
       /* If someone has passed us a composite event, use its head symbol.  */
       c = EVENT_HEAD (c);
 
@@ -736,21 +738,21 @@
       else if (SYMBOLP (c))
 	{
 	  struct Lisp_String *name = XSYMBOL (c)->name;
+	  int nbytes = STRING_BYTES (name);
 	  
-	  if (size - (ptr - buffer) < STRING_BYTES (name))
+	  if (size - (ptr - buffer) < nbytes)
 	    {
 	      int offset = ptr - buffer;
-	      size = max (2 * size, size + STRING_BYTES (name));
+	      size = max (2 * size, size + nbytes);
 	      buffer = (char *) alloca (size);
 	      ptr = buffer + offset;
 	    }
 
-	  ptr += copy_text (name->data, ptr, STRING_BYTES (name),
+	  ptr += copy_text (name->data, ptr, nbytes,
 			    name->size_byte >= 0, 1);
 	}
 
-      if ((NILP (current_kboard->echo_string)
-	   || XSTRING (current_kboard->echo_string)->size == 0)
+      if ((NILP (echo_string) || SCHARS (echo_string) == 0)
 	  && help_char_p (c))
 	{
 	  const char *text = " (Type ? for further options)";
@@ -768,14 +770,21 @@
 	  ptr += len;
 	}
 
-      echo_string = current_kboard->echo_string;
-      
-      /* Replace a dash from echo_dash with a space.  */
+      /* Replace a dash from echo_dash with a space, otherwise
+	 add a space at the end as a separator between keys.  */
       if (STRINGP (echo_string)
-	  && (size = STRING_BYTES (XSTRING (echo_string)),
-	      (size > 0
-	       && XSTRING (echo_string)->data[size - 1] == '-')))
-	XSTRING (echo_string)->data[size - 1] = ' ';
+	  && SCHARS (echo_string) > 0)
+	{
+	  Lisp_Object last_char, idx;
+
+	  idx = make_number (SCHARS (echo_string) - 1);
+	  last_char = Faref (echo_string, idx);
+
+	  if (XINT (last_char) == '-')
+	    Faset (echo_string, idx, make_number (' '));
+	  else
+	    echo_string = concat2 (echo_string, build_string (" "));
+	}
 
       current_kboard->echo_string
 	= concat2 (echo_string, make_string (buffer, ptr - buffer));
@@ -795,12 +804,12 @@
     return;
 
   if (!current_kboard->immediate_echo
-      && XSTRING (current_kboard->echo_string)->size == 0)
+      && SCHARS (current_kboard->echo_string) == 0)
     return;
       
   /* Do nothing if we just printed a prompt.  */
   if (current_kboard->echo_after_prompt
-      == XSTRING (current_kboard->echo_string)->size)
+      == SCHARS (current_kboard->echo_string))
     return;
       
   /* Put a dash at the end of the buffer temporarily,
@@ -834,8 +843,8 @@
 
   echoing = 1;
   message3_nolog (current_kboard->echo_string,
-		  STRING_BYTES (XSTRING (current_kboard->echo_string)),
-		  STRING_MULTIBYTE (current_kboard->echo_string));
+		  SBYTES (current_kboard->echo_string),
+		  SMBP (current_kboard->echo_string));
   echoing = 0;
 
   /* Record in what buffer we echoed, and from which kboard.  */
@@ -865,7 +874,7 @@
 echo_length ()
 {
   return (STRINGP (current_kboard->echo_string)
-	  ? XSTRING (current_kboard->echo_string)->size
+	  ? SCHARS (current_kboard->echo_string)
 	  : 0);
 }