summaryrefslogtreecommitdiff
path: root/src/xdisp.c
diff options
context:
space:
mode:
authorJérémy Compostella <jeremy.compostella@gmail.com>2012-05-07 12:09:51 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2012-05-07 12:09:51 -0400
commitb120cc17aede4b15b4d6737f03e936a621e72962 (patch)
treedbea6eb7617ab67ac84d00272e76cc408a8e8b52 /src/xdisp.c
parent9a4b36f891acd6e620c1d7e6f3fcedc368003ee7 (diff)
downloademacs-b120cc17aede4b15b4d6737f03e936a621e72962.tar.gz
Fix up display of the *Minibuf-0* buffer in the mini window.
* src/keyboard.c (read_char): Don't clear the echo area if there's no message to clear. * src/xdisp.c (redisplay_internal): Redisplay the mini window (with the contents of *Minibuf-0*) if there' no message displayed in its stead.
Diffstat (limited to 'src/xdisp.c')
-rw-r--r--src/xdisp.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index da44281a55e..eaad5455212 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -12727,6 +12727,9 @@ redisplay_internal (void)
frames. Zero means, only selected_window is considered. */
int consider_all_windows_p;
+ /* Non-zero means redisplay has to redisplay the miniwindow */
+ int update_miniwindow_p = 0;
+
TRACE ((stderr, "redisplay_internal %d\n", redisplaying_p));
/* No redisplay if running in batch mode or frame is not yet fully
@@ -12913,6 +12916,10 @@ redisplay_internal (void)
&& !MINI_WINDOW_P (XWINDOW (selected_window))))
{
int window_height_changed_p = echo_area_display (0);
+
+ if (message_cleared_p)
+ update_miniwindow_p = 1;
+
must_finish = 1;
/* If we don't display the current message, don't clear the
@@ -12949,7 +12956,7 @@ redisplay_internal (void)
/* FIXME: this causes all frames to be updated, which seems unnecessary
since only the current frame needs to be considered. This function needs
to be rewritten with two variables, consider_all_windows and
- consider_all_frames. */
+ consider_all_frames. */
consider_all_windows_p = 1;
++windows_or_buffers_changed;
++update_mode_lines;
@@ -13135,7 +13142,8 @@ redisplay_internal (void)
then we can't just move the cursor. */
else if (! (!NILP (Vtransient_mark_mode)
&& !NILP (BVAR (current_buffer, mark_active)))
- && (EQ (selected_window, BVAR (current_buffer, last_selected_window))
+ && (EQ (selected_window,
+ BVAR (current_buffer, last_selected_window))
|| highlight_nonselected_windows)
&& NILP (w->region_showing)
&& NILP (Vshow_trailing_whitespace)
@@ -13288,7 +13296,7 @@ redisplay_internal (void)
}
else if (FRAME_VISIBLE_P (sf) && !FRAME_OBSCURED_P (sf))
{
- Lisp_Object mini_window;
+ Lisp_Object mini_window = FRAME_MINIBUF_WINDOW (sf);
struct frame *mini_frame;
displayed_buffer = XBUFFER (XWINDOW (selected_window)->buffer);
@@ -13297,6 +13305,10 @@ redisplay_internal (void)
internal_condition_case_1 (redisplay_window_1, selected_window,
list_of_error,
redisplay_window_error);
+ if (update_miniwindow_p)
+ internal_condition_case_1 (redisplay_window_1, mini_window,
+ list_of_error,
+ redisplay_window_error);
/* Compare desired and current matrices, perform output. */