]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve how 'balance-windows' handles fixed-size windows (Bug#33254)
authorMartin Rudalics <rudalics@gmx.at>
Sat, 8 Dec 2018 08:01:23 +0000 (09:01 +0100)
committerMartin Rudalics <rudalics@gmx.at>
Sat, 8 Dec 2018 08:01:23 +0000 (09:01 +0100)
* lisp/window.el (balance-windows-2): When a child window has
fixed size, don't count it as resizable (Bug#33254).
Handle case where a window has no resizable child windows.

lisp/window.el

index 2634955a755f57f61a81764997fa5d83c69b7f29..a16ceb4eb995994cc26580a902dec80d18d9d342 100644 (file)
@@ -5317,11 +5317,12 @@ is non-nil)."
         (total-sum parent-size)
         failed size sub-total sub-delta sub-amount rest)
     (while sub
-      (setq number-of-children (1+ number-of-children))
-      (when (window-size-fixed-p sub horizontal)
-       (setq total-sum
-             (- total-sum (window-size sub horizontal t)))
-       (set-window-new-normal sub 'ignore))
+      (if (window-size-fixed-p sub horizontal)
+          (progn
+            (setq total-sum
+                 (- total-sum (window-size sub horizontal t)))
+           (set-window-new-normal sub 'ignore))
+        (setq number-of-children (1+ number-of-children)))
       (setq sub (window-right sub)))
 
     (setq failed t)
@@ -5346,16 +5347,16 @@ is non-nil)."
            (set-window-new-normal sub 'skip)))
        (setq sub (window-right sub))))
 
-    ;; How can we be sure that `number-of-children' is NOT zero here ?
-    (setq rest (% total-sum number-of-children))
-    ;; Fix rounding by trying to enlarge non-stuck windows by one line
-    ;; (column) until `rest' is zero.
-    (setq sub first)
-    (while (and sub (> rest 0))
-      (unless (window--resize-child-windows-skip-p window)
-       (set-window-new-pixel sub (min rest char-size) t)
-       (setq rest (- rest char-size)))
-      (setq sub (window-right sub)))
+    (when (> number-of-children 0)
+      (setq rest (% total-sum number-of-children))
+      ;; Fix rounding by trying to enlarge non-stuck windows by one line
+      ;; (column) until `rest' is zero.
+      (setq sub first)
+      (while (and sub (> rest 0))
+        (unless (window--resize-child-windows-skip-p window)
+         (set-window-new-pixel sub (min rest char-size) t)
+         (setq rest (- rest char-size)))
+        (setq sub (window-right sub))))
 
     ;; Fix rounding by trying to enlarge stuck windows by one line
     ;; (column) until `rest' equals zero.