From: Eli Zaretskii Date: Sat, 8 Sep 2007 10:34:03 +0000 (+0000) Subject: (prefer_window_split_horizontally): New variable. X-Git-Tag: emacs-pretest-23.0.90~11016 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e01c1b527a0fb64cc3070d5ebe8df11da96e3fb6;p=emacs.git (prefer_window_split_horizontally): New variable. (display_buffer): Consider splitting window horizontally depending on prefer_window_split_horizontally. --- diff --git a/src/window.c b/src/window.c index ae4c419cccd..a34c4200b7f 100644 --- a/src/window.c +++ b/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;