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.
This commit is contained in:
Jérémy Compostella 2012-05-07 12:09:51 -04:00 committed by Stefan Monnier
parent 9a4b36f891
commit b120cc17ae
3 changed files with 27 additions and 5 deletions

View file

@ -1,3 +1,11 @@
2012-05-07 Jérémy Compostella <jeremy.compostella@gmail.com>
Fix up display of the *Minibuf-0* buffer in the mini window.
* keyboard.c (read_char): Don't clear the echo area if there's no
message to clear.
* xdisp.c (redisplay_internal): Redisplay the mini window (with the
contents of *Minibuf-0*) if there' no message displayed in its stead.
2012-05-07 Michael Albinus <michael.albinus@gmx.de>
* dbusbind.c (XD_DEBUG_MESSAGE): Don't print message twice in

View file

@ -2996,8 +2996,10 @@ read_char (int commandflag, ptrdiff_t nmaps, Lisp_Object *maps,
&& !(EQ (Qselect_window, XCAR (c)))))
{
if (!NILP (echo_area_buffer[0]))
safe_run_hooks (Qecho_area_clear_hook);
clear_message (1, 0);
{
safe_run_hooks (Qecho_area_clear_hook);
clear_message (1, 0);
}
}
reread_for_input_method:

View file

@ -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. */