(kill-buffer-and-window): Fix a bug where an aborted

operation would still cause some window to collapse later.
This commit is contained in:
David Kastrup 2006-10-20 15:12:31 +00:00
parent 98d763e7e7
commit f5da083ed9
2 changed files with 21 additions and 8 deletions

View file

@ -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.

View file

@ -719,17 +719,25 @@ or if the window is the only window of its frame."
"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.