]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle failed attempts to split a side window (Bug#18304).
authorMartin Rudalics <rudalics@gmx.at>
Thu, 21 Aug 2014 08:40:29 +0000 (10:40 +0200)
committerMartin Rudalics <rudalics@gmx.at>
Thu, 21 Aug 2014 08:40:29 +0000 (10:40 +0200)
* window.el (window--side-window-p): New function.
(split-window, window-splittable-p): Use window--side-window-p to
determine whether WINDOW can be split (Bug#18304).
* calendar/calendar.el (calendar-basic-setup): Fix one call of
`window-splittable-p' and add another (Bug#18304).

lisp/ChangeLog
lisp/calendar/calendar.el
lisp/window.el

index 115497c7e41fbcacda39f0ceb3c16bf0c791d3ce..5ac028e91da5e02db2e0e737a6ae4e3645909527 100644 (file)
@@ -1,3 +1,11 @@
+2014-08-21  Martin Rudalics  <rudalics@gmx.at>
+
+       * window.el (window--side-window-p): New function.
+       (split-window, window-splittable-p): Use window--side-window-p to
+       determine whether WINDOW can be split (Bug#18304).
+       * calendar/calendar.el (calendar-basic-setup): Fix one call of
+       `window-splittable-p' and add another (Bug#18304).
+
 2014-08-20  Sam Steingold  <sds@gnu.org>
 
        * progmodes/python.el (python-new-pythonpath): Extract from
index 581dd3437d9a0ce8ee8deadc14a8464c9449f081..7579f07cb2dc5ffcc2b3b871c958e82cc8fe4841 100644 (file)
@@ -1423,10 +1423,16 @@ display the generated calendar."
         ;; the right thing in that case.
         ;;
         ;; Is this a wide frame?  If so, split it horizontally.
-        (if (window-splittable-p t) (split-window-right))
+
+       ;; The following doesn't sound useful: If we split horizontally
+       ;; here, the subsequent `pop-to-buffer' will likely split again
+       ;; horizontally and we end up with three side-by-side windows.
+        (when (window-splittable-p (selected-window) t)
+         (split-window-right))
         (pop-to-buffer calendar-buffer)
         ;; Has the window already been split vertically?
         (when (and (not (window-dedicated-p))
+                  (window-splittable-p (selected-window))
                    (window-full-height-p))
           (let ((win (split-window-below)))
             ;; In the upper window, show whatever was visible before.
index a05dddeac9e6d5cb28d04ada3a67c15c58fd3e55..e159bd967f1f25474561c02ce66acd4ce670636a 100644 (file)
@@ -743,6 +743,15 @@ number of slots on that side."
      (integer :tag "Number" :value 3 :size 5)))
   :group 'windows)
 
+(defun window--side-window-p (window)
+  "Return non-nil if WINDOW is a side window or the parent of one."
+  (or (window-parameter window 'window-side)
+      (and (window-child window)
+          (or (window-parameter
+               (window-child window) 'window-side)
+              (window-parameter
+               (window-last-child window) 'window-side)))))
+
 (defun window--major-non-side-window (&optional frame)
   "Return the major non-side window of frame FRAME.
 The optional argument FRAME must be a live frame and defaults to
@@ -4378,12 +4387,7 @@ frame.  The selected window is not changed by this function."
        ;; side window, throw an error unless `window-combination-resize'
        ;; equals 'side.
        ((and (not (eq window-combination-resize 'side))
-            (or (window-parameter window 'window-side)
-                (and (window-child window)
-                     (or (window-parameter
-                          (window-child window) 'window-side)
-                         (window-parameter
-                          (window-last-child window) 'window-side)))))
+            (window--side-window-p window))
        (error "Cannot split side window or parent of side window"))
        ;; If `window-combination-resize' is 'side and window has a side
        ;; window sibling, bind `window-combination-limit' to t.
@@ -5798,7 +5802,7 @@ hold:
   wide as `split-width-threshold'.
 - When WINDOW is split evenly, the emanating windows are at least
   `window-min-width' or two (whichever is larger) columns wide."
-  (when (window-live-p window)
+  (when (and (window-live-p window) (not (window--side-window-p window)))
     (with-current-buffer (window-buffer window)
       (if horizontal
          ;; A window can be split horizontally when its width is not