emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] trunk r113304: lisp/window.el (window-state-put): Remove w


From: Juanma Barranquero
Subject: [Emacs-diffs] trunk r113304: lisp/window.el (window-state-put): Remove window if buffer was not restored.
Date: Sat, 06 Jul 2013 14:25:58 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113304
revision-id: address@hidden
parent: address@hidden
author: Martin Rudalics <address@hidden>
committer: Juanma Barranquero <address@hidden>
branch nick: trunk
timestamp: Sat 2013-07-06 16:24:54 +0200
message:
  lisp/window.el (window-state-put): Remove window if buffer was not restored.
  (window-state-put-stale-windows): New variable.
  (window--state-put-2): Save list of windows without matching buffer.
  (window-state-put): Remove "bufferless" windows if possible.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/window.el                 window.el-20091113204419-o5vbwnq5f7feedwu-94
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-07-06 13:31:59 +0000
+++ b/lisp/ChangeLog    2013-07-06 14:24:54 +0000
@@ -1,3 +1,9 @@
+2013-07-06  Martin Rudalics  <address@hidden>
+
+       * window.el (window-state-put-stale-windows): New variable.
+       (window--state-put-2): Save list of windows without matching buffer.
+       (window-state-put): Remove "bufferless" windows if possible.
+
 2013-07-06  Juanma Barranquero  <address@hidden>
 
        * simple.el (alternatives-define): Remove leftover :group keyword.

=== modified file 'lisp/window.el'
--- a/lisp/window.el    2013-06-25 17:20:19 +0000
+++ b/lisp/window.el    2013-07-06 14:24:54 +0000
@@ -4347,6 +4347,9 @@
 (defvar window-state-put-list nil
   "Helper variable for `window-state-put'.")
 
+(defvar window-state-put-stale-windows nil
+  "Helper variable for `window-state-put'.")
+
 (defun window--state-put-1 (state &optional window ignore totals)
   "Helper function for `window-state-put'."
   (let ((type (car state)))
@@ -4429,9 +4432,14 @@
          (set-window-parameter window (car parameter) (cdr parameter))))
       ;; Process buffer related state.
       (when state
-       ;; We don't want to raise an error here so we create a buffer if
-       ;; there's none.
-       (set-window-buffer window (get-buffer-create (car state)))
+       ;; We don't want to raise an error in case the buffer does not
+       ;; exist anymore, so we switch to a previous one and save the
+       ;; window with the intention of deleting it later if possible.
+       (let ((buffer (get-buffer (car state))))
+         (if buffer
+             (set-window-buffer window buffer)
+           (switch-to-prev-buffer window)
+           (push window window-state-put-stale-windows)))
        (with-current-buffer (window-buffer window)
          (set-window-hscroll window (cdr (assq 'hscroll state)))
          (apply 'set-window-fringes
@@ -4491,6 +4499,7 @@
 sizes and fixed size restrictions.  IGNORE equal `safe' means
 windows can get as small as `window-safe-min-height' and
 `window-safe-min-width'."
+  (setq window-state-put-stale-windows nil)
   (setq window (window-normalize-window window t))
   (let* ((frame (window-frame window))
         (head (car state))
@@ -4539,6 +4548,10 @@
        (set-window-buffer window (current-buffer))
        (window--state-put-1 state window nil totals)
        (window--state-put-2 ignore))
+      (while window-state-put-stale-windows
+       (let ((window (pop window-state-put-stale-windows)))
+         (when (eq (window-deletable-p window) t)
+           (delete-window window))))
       (window--check frame))))
 
 (defun display-buffer-record-window (type window buffer)


reply via email to

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