aboutsummaryrefslogtreecommitdiffstats
path: root/src/keyboard.c
diff options
context:
space:
mode:
authorGerd Moellmann <[email protected]>2002-03-08 11:34:25 +0000
committerGerd Moellmann <[email protected]>2002-03-08 11:34:25 +0000
commit0d121f7c6a7f2c60bf73e66ef63667b35ab43840 (patch)
tree413ae3bba5c7a140a5c7b9e7504fad1db0cde641 /src/keyboard.c
parent2051c264a322b8227eac662889f99d1f14a9c384 (diff)
(echo_char): Make sure to add a separator between
keys even if echo_dash hasn't been called.
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c45
1 files changed, 27 insertions, 18 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index 8187659c81..72a7e8c0af 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -707,7 +707,7 @@ echo_prompt (str)
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 @@ echo_char (c)
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 @@ echo_char (c)
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 @@ echo_char (c)
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 @@ echo_dash ()
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 @@ echo_now ()
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 @@ static int
echo_length ()
{
return (STRINGP (current_kboard->echo_string)
- ? XSTRING (current_kboard->echo_string)->size
+ ? SCHARS (current_kboard->echo_string)
: 0);
}