From 1942f68fa421e1e41b56558e9254d493f8afb6ef Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 20 Oct 1994 04:33:34 +0000 Subject: [PATCH] (Fdisplay_buffer): If the other window is smaller than its peer, even out their heights. --- src/window.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/window.c b/src/window.c index c6c95e6840..96588a8623 100644 --- a/src/window.c +++ b/src/window.c @@ -1946,6 +1946,8 @@ Returns the window displaying BUFFER.") window = Fsplit_window (window, Qnil, Qnil); else { + Lisp_Object upper, lower, other; + window = Fget_lru_window (frames); /* If the LRU window is selected, and big enough, and can be split, split it. */ @@ -1974,6 +1976,24 @@ Returns the window displaying BUFFER.") if (NILP (window)) window = Fframe_first_window (Fselected_frame ()); #endif + /* If window appears above or below another, + even out their heights. */ + if (!NILP (XWINDOW (window)->prev)) + other = upper = XWINDOW (window)->prev, lower = window; + if (!NILP (XWINDOW (window)->next)) + other = lower = XWINDOW (window)->next, upper = window; + if (!NILP (other) + /* Check that OTHER and WINDOW are vertically arrayed. */ + && XWINDOW (other)->top != XWINDOW (window)->top + && XWINDOW (other)->height > XWINDOW (window)->height) + { + int total = XWINDOW (other)->height + XWINDOW (window)->height; + struct window *old_selected_window = selected_window; + + selected_window = XWINDOW (upper); + change_window_height (total / 2 - XWINDOW (upper)->height, 0); + selected_window = old_selected_window; + } } } else -- 2.20.1