Mercurial > emacs
changeset 73447:7c85e65e0464
(kill-buffer-and-window): Fix a bug where an aborted
operation would still cause some window to collapse later.
author | David Kastrup <dak@gnu.org> |
---|---|
date | Fri, 20 Oct 2006 15:12:31 +0000 |
parents | 9895afa2b157 |
children | 1fd4b3c12646 |
files | lisp/ChangeLog lisp/window.el |
diffstat | 2 files changed, 21 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Fri Oct 20 12:40:30 2006 +0000 +++ b/lisp/ChangeLog Fri Oct 20 15:12:31 2006 +0000 @@ -1,3 +1,8 @@ +2006-10-20 David Kastrup <dak@gnu.org> + + * window.el (kill-buffer-and-window): Fix a bug where an aborted + operation would still cause some window to collapse later. + 2006-10-20 Stefan Monnier <monnier@iro.umontreal.ca> * vc.el (vc-switch-backend): Try to be more careful with unwanted @@ -574,7 +579,7 @@ * autoinsert.el (auto-insert-alist): Doc fix. -2006-10-07 Johan Bockg,be(Brd <bojohan@dd.chalmers.se> +2006-10-07 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se> * mouse-sel.el (mouse-insert-selection-internal): Use insert-for-yank, so that yank handlers are run.
--- a/lisp/window.el Fri Oct 20 12:40:30 2006 +0000 +++ b/lisp/window.el Fri Oct 20 15:12:31 2006 +0000 @@ -719,17 +719,25 @@ "Kill the current buffer and delete the selected window." (interactive) (let ((window-to-delete (selected-window)) + (buffer-to-kill (current-buffer)) (delete-window-hook (lambda () (condition-case nil (delete-window) (error nil))))) - (add-hook 'kill-buffer-hook delete-window-hook t t) - (if (kill-buffer (current-buffer)) - ;; If `delete-window' failed before, we rerun it to regenerate - ;; the error so it can be seen in the minibuffer. - (when (eq (selected-window) window-to-delete) - (delete-window)) - (remove-hook 'kill-buffer-hook delete-window-hook t)))) + (unwind-protect + (progn + (add-hook 'kill-buffer-hook delete-window-hook t t) + (if (kill-buffer (current-buffer)) + ;; If `delete-window' failed before, we rerun it to regenerate + ;; the error so it can be seen in the echo area. + (when (eq (selected-window) window-to-delete) + (delete-window)))) + ;; If the buffer is not dead for some reason (probably because + ;; of a `quit' signal), remove the hook again. + (condition-case nil + (with-current-buffer buffer-to-kill + (remove-hook 'kill-buffer-hook delete-window-hook t)) + (error nil))))) (defun quit-window (&optional kill window) "Quit the current buffer. Bury it, and maybe delete the selected frame.