Index: lisp/ChangeLog =================================================================== RCS file: /sources/emacs/emacs/lisp/ChangeLog,v retrieving revision 1.11605 diff -u -r1.11605 ChangeLog --- lisp/ChangeLog 22 Aug 2007 22:40:18 -0000 1.11605 +++ lisp/ChangeLog 23 Aug 2007 09:05:20 -0000 @@ -1,3 +1,8 @@ +2007-08-23 Fredrik Axelsson + + * cus-start.el (all): Add prefer-window-split-horizontally from + window.c. + 2007-08-22 Jason Rumney * vc-hooks.el (vc-menu-map-filter): Reapply 2007-08-06 bugfix. Index: lisp/cus-start.el =================================================================== RCS file: /sources/emacs/emacs/lisp/cus-start.el,v retrieving revision 1.104 diff -u -r1.104 cus-start.el --- lisp/cus-start.el 26 Jul 2007 05:26:19 -0000 1.104 +++ lisp/cus-start.el 23 Aug 2007 09:05:20 -0000 @@ -350,6 +350,8 @@ (const :tag "Full screen (t)" :value t) (other :tag "Always" 1))) (display-buffer-reuse-frames windows boolean "21.1") + (prefer-window-split-horizontally + windows (choice boolean integer) "22.1") ;; xdisp.c (scroll-step windows integer) (scroll-conservatively windows integer) Index: src/ChangeLog =================================================================== RCS file: /sources/emacs/emacs/src/ChangeLog,v retrieving revision 1.5796 diff -u -r1.5796 ChangeLog --- src/ChangeLog 23 Aug 2007 08:45:46 -0000 1.5796 +++ src/ChangeLog 23 Aug 2007 09:05:34 -0000 @@ -1,3 +1,9 @@ +2007-08-23 Fredrik Axelsson + + * window.c (prefer_window_split_horizontally): New variable. + (display_buffer): Consider splitting window horizontally depending + on prefer_window_split_horizontally. + 2007-08-23 YAMAMOTO Mitsuharu * Makefile.in (RSVG_LIBS, RSVG_CFLAGS): New variables. Index: src/window.c =================================================================== RCS file: /sources/emacs/emacs/src/window.c,v retrieving revision 1.584 diff -u -r1.584 window.c --- src/window.c 13 Aug 2007 13:41:17 -0000 1.584 +++ src/window.c 23 Aug 2007 09:05:36 -0000 @@ -161,6 +161,13 @@ 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; @@ -3647,7 +3654,12 @@ 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) register Lisp_Object buffer, not_this_window, frame; { @@ -3747,13 +3759,26 @@ 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 = Fsplit_window (window, Qnil, Qnil); @@ -3762,16 +3787,30 @@ 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 = Fsplit_window (window, Qnil, Qnil); + && !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. */ @@ -7344,6 +7383,14 @@ 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;