+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
* autoinsert.el (auto-insert-alist): Doc fix.
-2006-10-07 Johan Bockg\e,be\e(Brd <bojohan@dd.chalmers.se>
+2006-10-07 Johan Bockg\e,Ae\e(Brd <bojohan@dd.chalmers.se>
* mouse-sel.el (mouse-insert-selection-internal):
Use insert-for-yank, so that yank handlers are run.
"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.