summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dispnew.c17
-rw-r--r--src/window.h6
2 files changed, 20 insertions, 3 deletions
diff --git a/src/dispnew.c b/src/dispnew.c
index 2d5259f38df..9ec88d9f45d 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -317,9 +317,20 @@ remake_frame_glyphs (frame)
free_frame_glyphs (frame, FRAME_TEMP_GLYPHS (frame));
if (FRAME_MESSAGE_BUF (frame))
- FRAME_MESSAGE_BUF (frame)
- = (char *) xrealloc (FRAME_MESSAGE_BUF (frame),
- FRAME_WIDTH (frame) + 1);
+ {
+ /* Reallocate the frame's message buffer; remember that
+ echo_area_glyphs may be pointing here. */
+ char *old_message_buf = FRAME_MESSAGE_BUF (frame);
+
+ FRAME_MESSAGE_BUF (frame)
+ = (char *) xrealloc (FRAME_MESSAGE_BUF (frame),
+ FRAME_WIDTH (frame) + 1);
+
+ if (echo_area_glyphs == old_message_buf)
+ echo_area_glyphs = FRAME_MESSAGE_BUF (frame);
+ if (previous_echo_glyphs == old_message_buf)
+ previous_echo_glyphs = FRAME_MESSAGE_BUF (frame);
+ }
else
FRAME_MESSAGE_BUF (frame)
= (char *) xmalloc (FRAME_WIDTH (frame) + 1);
diff --git a/src/window.h b/src/window.h
index 51a27157d59..000afe3466b 100644
--- a/src/window.h
+++ b/src/window.h
@@ -225,6 +225,12 @@ extern int minibuf_prompt_width;
minibuf_prompt as well as the buffer. */
extern char *echo_area_glyphs;
+/* Value of echo_area_glyphs when it was last acted on.
+ If this is nonzero, there is a message on the frame
+ in the minibuffer and it should be erased as soon
+ as it is no longer requested to appear. */
+extern char *previous_echo_glyphs;
+
/* Depth in recursive edits. */
extern int command_loop_level;