(prefer_window_split_horizontally): New variable.
(display_buffer): Consider splitting window horizontally depending on prefer_window_split_horizontally.
This commit is contained in:
parent
5edcabcbc6
commit
e01c1b527a
1 changed files with 57 additions and 13 deletions
70
src/window.c
70
src/window.c
|
@ -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,13 +3767,26 @@ 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))
|
||||
&& (window_height (window) >= split_height_threshold
|
||||
|| (NILP (XWINDOW (window)->parent)))
|
||||
&& !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
|
||||
|| (NILP (XWINDOW (window)->parent)))
|
||||
&& (window_height (window)
|
||||
>= (2 * window_min_size_2 (XWINDOW (window), 0))))
|
||||
window = call1 (Vsplit_window_preferred_function, window);
|
||||
|
@ -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))
|
||||
&& ((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);
|
||||
&& !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 = 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;
|
||||
|
|
Loading…
Add table
Reference in a new issue