]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix up display of the *Minibuf-0* buffer in the mini window.
authorJérémy Compostella <jeremy.compostella@gmail.com>
Mon, 7 May 2012 16:09:51 +0000 (12:09 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 7 May 2012 16:09:51 +0000 (12:09 -0400)
* 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.

src/ChangeLog
src/keyboard.c
src/xdisp.c

index fcf5ef976ff136b64bc02a60c5f733cec6e46460..3a9e9a5f539f09d723a311e61861ba7047450756 100644 (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
index 249e5ee954459ab3aa4ca9a56da442f79d7f4eee..fcd5c0e683717fd279c0402c323d3a2beca93fe0 100644 (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:
index da44281a55e821abf72f7706259b56dfdc8853cd..eaad5455212725e3314c57353a7ed025067605c6 100644 (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.  */