Mercurial > emacs
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. |