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;
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;
{
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);
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. */
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;