diff options
| author | Martin Rudalics | 2013-07-06 16:24:54 +0200 |
|---|---|---|
| committer | Juanma Barranquero | 2013-07-06 16:24:54 +0200 |
| commit | 34ada5f476dbd018cf523b127586f44ebb191e3a (patch) | |
| tree | 3ebb64c5c78fa2ec190d629768a7cedaa0484cf7 | |
| parent | 11e03d8900001e858fdecbe557469245de03e7fa (diff) | |
| download | emacs-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/ChangeLog | 6 | ||||
| -rw-r--r-- | lisp/window.el | 19 |
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 @@ | |||
| 1 | 2013-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 | |||
| 1 | 2013-07-06 Juanma Barranquero <lekktu@gmail.com> | 7 | 2013-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 | |||
| 4491 | sizes and fixed size restrictions. IGNORE equal `safe' means | 4499 | sizes and fixed size restrictions. IGNORE equal `safe' means |
| 4492 | windows can get as small as `window-safe-min-height' and | 4500 | windows 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) |