diff options
-rw-r--r-- | src/dispnew.c | 17 | ||||
-rw-r--r-- | src/window.h | 6 |
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; |