aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Rudalics2013-07-06 16:24:54 +0200
committerJuanma Barranquero2013-07-06 16:24:54 +0200
commit34ada5f476dbd018cf523b127586f44ebb191e3a (patch)
tree3ebb64c5c78fa2ec190d629768a7cedaa0484cf7
parent11e03d8900001e858fdecbe557469245de03e7fa (diff)
downloademacs-34ada5f476dbd018cf523b127586f44ebb191e3a.tar.gz
emacs-34ada5f476dbd018cf523b127586f44ebb191e3a.zip
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.
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/window.el19
2 files changed, 22 insertions, 3 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 49fc7449a35..0b7c65b218d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
12013-07-06 Martin Rudalics <rudalics@gmx.at>
2
3 * window.el (window-state-put-stale-windows): New variable.
4 (window--state-put-2): Save list of windows without matching buffer.
5 (window-state-put): Remove "bufferless" windows if possible.
6
12013-07-06 Juanma Barranquero <lekktu@gmail.com> 72013-07-06 Juanma Barranquero <lekktu@gmail.com>
2 8
3 * simple.el (alternatives-define): Remove leftover :group keyword. 9 * simple.el (alternatives-define): Remove leftover :group keyword.
diff --git a/lisp/window.el b/lisp/window.el
index fc50bbb0d49..a2acd2a81b0 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -4347,6 +4347,9 @@ value can be also stored on disk and read back in a new session."
4347(defvar window-state-put-list nil 4347(defvar window-state-put-list nil
4348 "Helper variable for `window-state-put'.") 4348 "Helper variable for `window-state-put'.")
4349 4349
4350(defvar window-state-put-stale-windows nil
4351 "Helper variable for `window-state-put'.")
4352
4350(defun window--state-put-1 (state &optional window ignore totals) 4353(defun window--state-put-1 (state &optional window ignore totals)
4351 "Helper function for `window-state-put'." 4354 "Helper function for `window-state-put'."
4352 (let ((type (car state))) 4355 (let ((type (car state)))
@@ -4429,9 +4432,14 @@ value can be also stored on disk and read back in a new session."
4429 (set-window-parameter window (car parameter) (cdr parameter)))) 4432 (set-window-parameter window (car parameter) (cdr parameter))))
4430 ;; Process buffer related state. 4433 ;; Process buffer related state.
4431 (when state 4434 (when state
4432 ;; We don't want to raise an error here so we create a buffer if 4435 ;; We don't want to raise an error in case the buffer does not
4433 ;; there's none. 4436 ;; exist anymore, so we switch to a previous one and save the
4434 (set-window-buffer window (get-buffer-create (car state))) 4437 ;; window with the intention of deleting it later if possible.
4438 (let ((buffer (get-buffer (car state))))
4439 (if buffer
4440 (set-window-buffer window buffer)
4441 (switch-to-prev-buffer window)
4442 (push window window-state-put-stale-windows)))
4435 (with-current-buffer (window-buffer window) 4443 (with-current-buffer (window-buffer window)
4436 (set-window-hscroll window (cdr (assq 'hscroll state))) 4444 (set-window-hscroll window (cdr (assq 'hscroll state)))
4437 (apply 'set-window-fringes 4445 (apply 'set-window-fringes
@@ -4491,6 +4499,7 @@ Optional argument IGNORE non-nil means ignore minimum window
4491sizes and fixed size restrictions. IGNORE equal `safe' means 4499sizes and fixed size restrictions. IGNORE equal `safe' means
4492windows can get as small as `window-safe-min-height' and 4500windows can get as small as `window-safe-min-height' and
4493`window-safe-min-width'." 4501`window-safe-min-width'."
4502 (setq window-state-put-stale-windows nil)
4494 (setq window (window-normalize-window window t)) 4503 (setq window (window-normalize-window window t))
4495 (let* ((frame (window-frame window)) 4504 (let* ((frame (window-frame window))
4496 (head (car state)) 4505 (head (car state))
@@ -4539,6 +4548,10 @@ windows can get as small as `window-safe-min-height' and
4539 (set-window-buffer window (current-buffer)) 4548 (set-window-buffer window (current-buffer))
4540 (window--state-put-1 state window nil totals) 4549 (window--state-put-1 state window nil totals)
4541 (window--state-put-2 ignore)) 4550 (window--state-put-2 ignore))
4551 (while window-state-put-stale-windows
4552 (let ((window (pop window-state-put-stale-windows)))
4553 (when (eq (window-deletable-p window) t)
4554 (delete-window window))))
4542 (window--check frame)))) 4555 (window--check frame))))
4543 4556
4544(defun display-buffer-record-window (type window buffer) 4557(defun display-buffer-record-window (type window buffer)