comparison lisp/window.el @ 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 455031002c62
children 97a25a5ed8a9 7eeafaaa9eab
comparison
equal deleted inserted replaced
73446:9895afa2b157 73447:7c85e65e0464
717 717
718 (defun kill-buffer-and-window () 718 (defun kill-buffer-and-window ()
719 "Kill the current buffer and delete the selected window." 719 "Kill the current buffer and delete the selected window."
720 (interactive) 720 (interactive)
721 (let ((window-to-delete (selected-window)) 721 (let ((window-to-delete (selected-window))
722 (buffer-to-kill (current-buffer))
722 (delete-window-hook (lambda () 723 (delete-window-hook (lambda ()
723 (condition-case nil 724 (condition-case nil
724 (delete-window) 725 (delete-window)
725 (error nil))))) 726 (error nil)))))
726 (add-hook 'kill-buffer-hook delete-window-hook t t) 727 (unwind-protect
727 (if (kill-buffer (current-buffer)) 728 (progn
728 ;; If `delete-window' failed before, we rerun it to regenerate 729 (add-hook 'kill-buffer-hook delete-window-hook t t)
729 ;; the error so it can be seen in the minibuffer. 730 (if (kill-buffer (current-buffer))
730 (when (eq (selected-window) window-to-delete) 731 ;; If `delete-window' failed before, we rerun it to regenerate
731 (delete-window)) 732 ;; the error so it can be seen in the echo area.
732 (remove-hook 'kill-buffer-hook delete-window-hook t)))) 733 (when (eq (selected-window) window-to-delete)
734 (delete-window))))
735 ;; If the buffer is not dead for some reason (probably because
736 ;; of a `quit' signal), remove the hook again.
737 (condition-case nil
738 (with-current-buffer buffer-to-kill
739 (remove-hook 'kill-buffer-hook delete-window-hook t))
740 (error nil)))))
733 741
734 (defun quit-window (&optional kill window) 742 (defun quit-window (&optional kill window)
735 "Quit the current buffer. Bury it, and maybe delete the selected frame. 743 "Quit the current buffer. Bury it, and maybe delete the selected frame.
736 \(The frame is deleted if it contains a dedicated window for the buffer.) 744 \(The frame is deleted if it contains a dedicated window for the buffer.)
737 With a prefix argument, kill the buffer instead. 745 With a prefix argument, kill the buffer instead.