diff options
author | Karoly Lorentey <lorentey@elte.hu> | 2006-12-03 12:25:18 +0000 |
---|---|---|
committer | Karoly Lorentey <lorentey@elte.hu> | 2006-12-03 12:25:18 +0000 |
commit | d6e01aa592f7326dffeafa6e97180a1cc39fe7ea (patch) | |
tree | 5a22b785cfee1d77d6452607450a12ca82eeecd3 /lisp/window.el | |
parent | 14bcc1e098410087a837313e2fc822319ff2e8ca (diff) | |
parent | 4975e69596a64247e8995d1ff9084b98a9a5ed0d (diff) | |
download | emacs-d6e01aa592f7326dffeafa6e97180a1cc39fe7ea.tar.gz emacs-d6e01aa592f7326dffeafa6e97180a1cc39fe7ea.tar.bz2 emacs-d6e01aa592f7326dffeafa6e97180a1cc39fe7ea.zip |
Merged from emacs@sv.gnu.org.
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-479
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-480
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-481
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-482
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-483
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-484
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-485
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-153
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-154
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-155
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-585
Diffstat (limited to 'lisp/window.el')
-rw-r--r-- | lisp/window.el | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/lisp/window.el b/lisp/window.el index 0c50bc63a08..ac4fc0b7c96 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -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. |