emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/window.c,v


From: Eli Zaretskii
Subject: [Emacs-diffs] Changes to emacs/src/window.c,v
Date: Sat, 08 Sep 2007 10:34:04 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Eli Zaretskii <eliz>    07/09/08 10:34:04

Index: window.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/window.c,v
retrieving revision 1.588
retrieving revision 1.589
diff -u -b -r1.588 -r1.589
--- window.c    7 Sep 2007 19:50:49 -0000       1.588
+++ window.c    8 Sep 2007 10:34:03 -0000       1.589
@@ -163,6 +163,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;
@@ -3653,7 +3660,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)
      Lisp_Object buffer, not_this_window, frame;
 {
@@ -3755,11 +3767,24 @@
       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
              || (NILP (XWINDOW (window)->parent)))
          && (window_height (window)
@@ -3770,16 +3795,27 @@
          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 @@
 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;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]