Mercurial > emacs
changeset 14662:9e8607589f03
(redisplay_internal): Renamed from redisplay.
New arg PRESERVE_ECHO_AREA.
(redisplay): New wrapper function calls redisplay_internal.
(redisplay_window, redisplay_windows): New arg PRESERVE_ECHO_AREA.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 25 Feb 1996 06:44:48 +0000 |
parents | 46ba65e7976c |
children | d9cafe0ebb7d |
files | src/xdisp.c |
diffstat | 1 files changed, 32 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Sat Feb 24 20:03:07 1996 +0000 +++ b/src/xdisp.c Sun Feb 25 06:44:48 1996 +0000 @@ -159,6 +159,7 @@ /* Nonzero means display mode line highlighted */ int mode_line_inverse_video; +static void redisplay_internal (); static int message_log_check_duplicate (); static void echo_area_display (); void mark_window_display_accurate (); @@ -808,6 +809,18 @@ void redisplay () { + redisplay_internal (0); +} + +/* If PRESERVE_ECHO_AREA is nonzero, it means this redisplay + is not in response to any user action; therefore, we should + preserve the echo area. Perhaps in the future avoid recentering windows + if it is not necessary; currently that causes some problems. */ + +static void +redisplay_internal (preserve_echo_area) + int preserve_echo_area; +{ register struct window *w = XWINDOW (selected_window); register int pause; int must_finish = 0; @@ -1068,7 +1081,7 @@ (*condemn_scroll_bars_hook) (f); if (FRAME_VISIBLE_P (f)) - redisplay_windows (FRAME_ROOT_WINDOW (f)); + redisplay_windows (FRAME_ROOT_WINDOW (f), preserve_echo_area); /* Any scroll bars which redisplay_windows should have nuked should now go away. */ @@ -1079,7 +1092,7 @@ } else if (FRAME_VISIBLE_P (selected_frame)) { - redisplay_window (selected_window, 1); + redisplay_window (selected_window, 1, preserve_echo_area); if (XFASTINT (w->width) != FRAME_WIDTH (selected_frame)) preserve_other_columns (w); } @@ -1233,11 +1246,11 @@ if (echo_area_glyphs == 0 && previous_echo_glyphs != 0) { echo_area_glyphs = previous_echo_glyphs; - redisplay (); + redisplay_internal (1); echo_area_glyphs = 0; } else - redisplay (); + redisplay_internal (1); } void @@ -1371,19 +1384,20 @@ /* Redisplay WINDOW and its subwindows and siblings. */ static void -redisplay_windows (window) +redisplay_windows (window, preserve_echo_area) Lisp_Object window; + int preserve_echo_area; { for (; !NILP (window); window = XWINDOW (window)->next) - redisplay_window (window, 0); + redisplay_window (window, 0, preserve_echo_area); } /* Redisplay window WINDOW and its subwindows. */ static void -redisplay_window (window, just_this_one) +redisplay_window (window, just_this_one, preserve_echo_area) Lisp_Object window; - int just_this_one; + int just_this_one, preserve_echo_area; { register struct window *w = XWINDOW (window); FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); @@ -1679,8 +1693,16 @@ goto done; } else if (startp >= BEGV && startp <= ZV - /* Avoid starting display at end of buffer! */ - && (startp < ZV || startp == BEGV + && (startp < ZV + /* Avoid starting at end of buffer. */ +#if 0 /* This change causes trouble for M-! finger & RET. + It will have to be considered later. */ + || ! EQ (window, selected_window) + /* Don't do the recentering if redisplay + is not for no user action. */ + || preserve_echo_area +#endif + || startp == BEGV || (XFASTINT (w->last_modified) >= MODIFF))) { /* Try to redisplay starting at same place as before */