Commit e01c1b52 authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

(prefer_window_split_horizontally): New variable.

(display_buffer): Consider splitting window horizontally depending on
prefer_window_split_horizontally.
parent 5edcabcb
......@@ -163,6 +163,13 @@ Lisp_Object Vdisplay_buffer_function;
Lisp_Object Veven_window_heights;
/* Non-nil means that windows are split horizontally, i.e. side-by-side,
instead of vertically by `display-buffer'. An integer value means that
windows may only be split horizontally if the newly created window is at
least as wide as that value. */
Lisp_Object Vprefer_window_split_horizontally;
/* List of buffer *names* for buffers that should have their own frames. */
Lisp_Object Vspecial_display_buffer_names;
......@@ -3653,7 +3660,12 @@ the buffer, it may be split, subject to the value of the variable
If `even-window-heights' is non-nil, window heights will be evened out
if displaying the buffer causes two vertically adjacent windows to be
displayed. */)
displayed.
If `prefer-window-split-horizontally' is non-nil, windows are split
horizontally, i.e. side-by-side, instead of vertically if possible. If the
variable has an integer value, windows may only be split horizontally if the
newly created window is at least as wide as that value. */)
(buffer, not_this_window, frame)
Lisp_Object buffer, not_this_window, frame;
{
......@@ -3755,9 +3767,22 @@ displayed. */)
else
window = Fget_largest_window (frames, Qt);
/* If the largest window is tall enough, full-width, and either eligible
for splitting or the only window, split it. */
/* If we prefer to split horizontally and the window is wide
enough, split it horizontally. */
if (!NILP (window)
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
&& WINDOW_FULL_WIDTH_P (XWINDOW (window))
&& !NILP (Vprefer_window_split_horizontally)
&& (!NUMBERP (Vprefer_window_split_horizontally) ||
(window_width(window) >=
2 * XINT (Vprefer_window_split_horizontally)))
&& (window_width(window)) >= (2 * window_min_width))
{
window = Fsplit_window (window, Qnil, Qt);
}
/* Else, if the largest window is tall enough, full-width, and either
eligible for splitting or the only window, split it. */
else if (!NILP (window)
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
&& WINDOW_FULL_WIDTH_P (XWINDOW (window))
&& (window_height (window) >= split_height_threshold
......@@ -3770,16 +3795,27 @@ displayed. */)
Lisp_Object upper, lower, other;
window = Fget_lru_window (frames, Qt);
/* If the LRU window is tall enough, and either eligible for
splitting and selected or the only window, split it. */
/* If we prefer to split horizontally and the LRU window is
wide enough, split it horizontally. */
if (!NILP (window)
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
&& !NILP (Vprefer_window_split_horizontally)
&& window_width(window) >= (2 * window_min_width)
&& (!NUMBERP (Vprefer_window_split_horizontally) ||
window_width(window) >=
(2 * XINT (Vprefer_window_split_horizontally))))
window = Fsplit_window (window, Qnil, Qt);
/* Else if the LRU window is tall enough, and either
eligible for splitting and selected, or the only window,
split it. */
else if (!NILP (window)
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
&& ((EQ (window, selected_window)
&& window_height (window) >= split_height_threshold)
|| (NILP (XWINDOW (window)->parent)))
&& (window_height (window)
>= (2 * window_min_size_2 (XWINDOW (window), 0))))
window = call1 (Vsplit_window_preferred_function, window);
window = Fsplit_window (window, Qnil, Qnil);
else
window = Fget_lru_window (frames, Qnil);
/* If Fget_lru_window returned nil, try other approaches. */
......@@ -7354,6 +7390,14 @@ work using this function. */);
If nil, `display-buffer' will leave the window configuration alone. */);
Veven_window_heights = Qt;
DEFVAR_LISP ("prefer-window-split-horizontally", &Vprefer_window_split_horizontally,
doc: /* *Non-nil means that windows are split horizontally, i.e.
side-by-side, instead
of vertically by `display-buffer'.
An integer value means that windows may only be split horizontally if the newly
created window is at least as wide as that value. */);
Vprefer_window_split_horizontally = Qnil;
DEFVAR_LISP ("minibuffer-scroll-window", &Vminibuf_scroll_window,
doc: /* Non-nil means it is the window that C-M-v in minibuffer should scroll. */);
Vminibuf_scroll_window = Qnil;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment