summaryrefslogtreecommitdiff
path: root/lisp/window.el
diff options
context:
space:
mode:
authorKaroly Lorentey <lorentey@elte.hu>2006-12-03 12:25:18 +0000
committerKaroly Lorentey <lorentey@elte.hu>2006-12-03 12:25:18 +0000
commitd6e01aa592f7326dffeafa6e97180a1cc39fe7ea (patch)
tree5a22b785cfee1d77d6452607450a12ca82eeecd3 /lisp/window.el
parent14bcc1e098410087a837313e2fc822319ff2e8ca (diff)
parent4975e69596a64247e8995d1ff9084b98a9a5ed0d (diff)
downloademacs-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.el22
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.