emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 59526c3: 2015-07-22 Martin Rudalics <address@hidden


From: Martin Rudalics
Subject: [Emacs-diffs] master 59526c3: 2015-07-22 Martin Rudalics <address@hidden>
Date: Wed, 22 Jul 2015 10:21:40 +0000

branch: master
commit 59526c325e7c857776bcfe7560d533391bf045b4
Author: Martin Rudalics <address@hidden>
Commit: Martin Rudalics <address@hidden>

    2015-07-22  Martin Rudalics  <address@hidden>
    
    Optionally even widths of `display-buffer' windows.  (Bug#21100)
    
    * lisp/window.el (quit-restore-window): Restore width if
    requested.
    (display-buffer-record-window): Record width when window is
    reused and horizontally combined.
    (even-window-sizes): New option to allow evening window widths.
    (even-window-heights): Defalias to `even-window-sizes'.
    (window--even-window-heights): Rename to
    `window--even-window-sizes'.  Handle side-by-side windows.
    (display-buffer-use-some-window): Call `window--even-window-sizes'
    instead of `window--even-window-heights'.
    * lisp/help.el (resize-temp-buffer-window): Fix indentation.
    
    * doc/lispref/windows.texi (Choosing Window Options): Describe
    `even-window-sizes'.
    (Coordinates and Windows): Fix typo.
---
 doc/lispref/windows.texi |   17 ++++++++++-
 etc/NEWS                 |    4 ++
 lisp/help.el             |    4 +-
 lisp/window.el           |   70 +++++++++++++++++++++++++++------------------
 4 files changed, 64 insertions(+), 31 deletions(-)

diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi
index b2bc637..750397c 100644
--- a/doc/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -2547,6 +2547,21 @@ least that many columns.  If the value is @code{nil}, 
that means not
 to split this way.
 @end defopt
 
address@hidden even-window-sizes
+This variable, if non-nil, causes @code{display-buffer} to even window
+sizes whenever it reuses an existing window and that window is adjacent
+to the selected one.
+
+If its value is @code{width-only}, sizes are evened only if the reused
+window is on the left or right of the selected one and the selected
+window is wider than the reused one.  If its value is @code{height-only}
+sizes are evened only if the reused window is above or beneath the
+selected window and the selected window is higher than the reused one.
+Any other address@hidden value means to even sizes in any of these cases
+provided the selected window is larger than the reused one in the sense
+of their combination.
address@hidden defopt
+
 @defopt pop-up-frames
 If the value of this variable is address@hidden, that means
 @code{display-buffer} may display buffers by making new frames.  The
@@ -3690,7 +3705,7 @@ The coordinates are in the header line of @var{window}.
 The coordinates are in the divider separating @var{window} from a
 window on the right.
 
address@hidden right-divider
address@hidden bottom-divider
 The coordinates are in the divider separating @var{window} from a
 window beneath.
 
diff --git a/etc/NEWS b/etc/NEWS
index 69ebb72..666cccf 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1106,6 +1106,10 @@ and `window-divider-default-right-width'.
 how `switch-to-buffer' proceeds interactively when the selected window
 is strongly dedicated to its buffer.
 
++++
+** The option `even-window-heights' has been renamed to
+`even-window-sizes' and now handles window widths as well.
+
 ** Tearoff menus and detachable toolbars for Gtk+ has been removed.
 Those features have been deprecated in Gtk+ for a long time.
 
diff --git a/lisp/help.el b/lisp/help.el
index 1826cb7..46136d9 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -1163,8 +1163,8 @@ size of WINDOW."
                       (and (window-combined-p window t)
                            fit-window-to-buffer-horizontally)))
              (and (eq quit-cadr 'frame)
-                    fit-frame-to-buffer
-                    (eq window (frame-root-window window))))
+                   fit-frame-to-buffer
+                   (eq window (frame-root-window window))))
        (fit-window-to-buffer window height nil width nil t))))
 
 ;;; Help windows.
diff --git a/lisp/window.el b/lisp/window.el
index a4ed9ea..1a76ece 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -4358,11 +4358,18 @@ nil means to not handle the buffer in a particular way. 
 This
           (eq (nth 3 quit-restore) buffer))
       ;; Show another buffer stored in quit-restore parameter.
       (when (and (integerp (nth 3 quad))
-                (/= (nth 3 quad) (window-total-height window)))
+                (if (window-combined-p window)
+                     (/= (nth 3 quad) (window-total-height window))
+                   (/= (nth 3 quad) (window-total-width window))))
        ;; Try to resize WINDOW to its old height but don't signal an
        ;; error.
        (condition-case nil
-           (window-resize window (- (nth 3 quad) (window-total-height window)))
+           (window-resize
+             window
+             (- (nth 3 quad) (if (window-combined-p window)
+                                 (window-total-height window)
+                               (window-total-width window)))
+             (window-combined-p window t))
          (error nil)))
       (set-window-dedicated-p window nil)
       ;; Restore WINDOW's previous buffer, start and point position.
@@ -5500,7 +5507,9 @@ element is BUFFER."
                     ;; Preserve window-point-insertion-type (Bug#12588).
                     (copy-marker
                      (window-point window) window-point-insertion-type)
-                    (window-total-height window))
+                    (if (window-combined-p window)
+                         (window-total-height window)
+                       (window-total-width window)))
               (selected-window) buffer)))))
    ((eq type 'window)
     ;; WINDOW has been created on an existing frame.
@@ -6081,33 +6090,38 @@ represents a live window, nil otherwise."
                        ))
        frame))))
 
-(defcustom even-window-heights t
-  "If non-nil `display-buffer' will try to even window heights.
+(defcustom even-window-sizes t
+  "If non-nil `display-buffer' will try to even window sizes.
 Otherwise `display-buffer' will leave the window configuration
-alone.  Heights are evened only when `display-buffer' chooses a
-window that appears above or below the selected window."
+alone.  Special values are `height-only' to even heights only and
+`width-only' to even widths only.  Any other value means to even
+any of them."
   :type 'boolean
   :group 'windows)
-
-(defun window--even-window-heights (window)
-  "Even heights of WINDOW and selected window.
-Do this only if these windows are vertically adjacent to each
-other, `even-window-heights' is non-nil, and the selected window
-is higher than WINDOW."
-  (when (and even-window-heights
-            ;; Even iff WINDOW forms a vertical combination with the
-            ;; selected window, and WINDOW's height exceeds that of the
-            ;; selected window, see also bug#11880.
-            (window-combined-p window)
-            (= (window-child-count (window-parent window)) 2)
-            (eq (window-parent) (window-parent window))
-            (> (window-total-height) (window-total-height window)))
-    ;; Don't throw an error if we can't even window heights for
-    ;; whatever reason.
-    (condition-case nil
-       (enlarge-window
-        (/ (- (window-total-height window) (window-total-height)) 2))
-      (error nil))))
+(defvaralias 'even-window-heights 'even-window-sizes)
+
+(defun window--even-window-sizes (window)
+  "Even sizes of WINDOW and selected window.
+Even only if these windows are the only children of their parent,
+`even-window-sizes' has the appropriate value and the selected
+window is larger than WINDOW."
+  (when (and (= (window-child-count (window-parent window)) 2)
+             (eq (window-parent) (window-parent window)))
+    (cond
+     ((and (not (memq even-window-sizes '(nil height-only)))
+           (window-combined-p window t)
+           (> (window-total-width) (window-total-width window)))
+      (condition-case nil
+          (enlarge-window
+           (/ (- (window-total-width window) (window-total-width)) 2) t)
+        (error nil)))
+     ((and (not (memq even-window-sizes '(nil width-only)))
+           (window-combined-p window)
+           (> (window-total-height) (window-total-height window)))
+      (condition-case nil
+          (enlarge-window
+           (/ (- (window-total-height window) (window-total-height)) 2))
+        (error nil))))))
 
 (defun window--display-buffer (buffer window type &optional alist dedicated)
   "Display BUFFER in WINDOW.
@@ -6767,7 +6781,7 @@ that frame."
 
       (prog1
          (window--display-buffer buffer window 'reuse alist)
-       (window--even-window-heights window)
+       (window--even-window-sizes window)
        (unless (cdr (assq 'inhibit-switch-frame alist))
          (window--maybe-raise-frame (window-frame window)))))))
 



reply via email to

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