From: Martin Rudalics Date: Thu, 30 Oct 2008 15:41:43 +0000 (+0000) Subject: (quit-window): Simplify code. Say in doc-string X-Git-Tag: emacs-pretest-23.0.90~2083 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9045be38cdbf47378af50b0cae7efdca04945ba9;p=emacs.git (quit-window): Simplify code. Say in doc-string that it operates on the selected window's buffer. (Bug#1259) --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3ef866e7911..ff2e37deb07 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2008-10-30 Martin Rudalics + + * window.el (quit-window): Simplify code. Say in doc-string + that it operates on the selected window's buffer. (Bug#1259) + 2008-10-30 Nick Roberts * vc-svn.el (vc-svn-diff): If files is nil don't set oldvers to diff --git a/lisp/window.el b/lisp/window.el index c9e5d793651..403e4a1d8dc 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -1395,51 +1395,33 @@ or if the window is the only window of its frame." (error nil))))) (defun quit-window (&optional kill window) - "Quit the current buffer. Bury it, and maybe delete the selected frame. -\(The frame is deleted if it contains a dedicated window for the buffer.) -With a prefix argument, kill the buffer instead. - -Noninteractively, if KILL is non-nil, then kill the current buffer, -otherwise bury it. - -If WINDOW is non-nil, it specifies a window; we delete that window, -and the buffer that is killed or buried is the one in that window." - (interactive "P") - (let ((buffer (window-buffer window)) - (frame (window-frame (or window (selected-window)))) - (window-solitary - (save-selected-window - (if window - (select-window window)) - (one-window-p t))) - window-handled) - - (save-selected-window - (if window - (select-window window)) - (or (window-minibuffer-p) - (window-dedicated-p (selected-window)) - (switch-to-buffer (other-buffer)))) - - ;; Get rid of the frame, if it has just one dedicated window - ;; and other visible frames exist. - (and (or (window-minibuffer-p) (window-dedicated-p window)) - (delq frame (visible-frame-list)) - window-solitary - (if (and (eq default-minibuffer-frame frame) - (= 1 (length (minibuffer-frame-list)))) - (setq window nil) - (delete-frame frame) - (setq window-handled t))) - + "Bury or kill (with KILL non-nil) the buffer displayed in WINDOW. +KILL defaults to nil, WINDOW to the selected window. If WINDOW +is dedicated or a minibuffer window, delete it and, if it's the +only window on its frame, delete its frame as well provided there +are other frames left. Otherwise, display some other buffer in +the window." + (interactive) + (let* ((window (or window (selected-window))) + (buffer (window-buffer window))) + (if (or (window-minibuffer-p window) (window-dedicated-p window)) + (if (eq window (frame-root-window (window-frame window))) + ;; If this is the only window on its frame, try to delete the + ;; frame (`delete-windows-on' knows how to do that). + (delete-windows-on buffer (selected-frame)) + ;; Other windows are left, delete this window. But don't + ;; throw an error if that fails for some reason. + (condition-case nil + (delete-window window) + (error nil))) + ;; The window is neither dedicated nor a minibuffer window, + ;; display another buffer in it. + (with-selected-window window + (switch-to-buffer (other-buffer)))) ;; Deal with the buffer. (if kill (kill-buffer buffer) - (bury-buffer buffer)) - - ;; Maybe get rid of the window. - (and window (not window-handled) (not window-solitary) - (delete-window window)))) + (bury-buffer buffer)))) (defvar recenter-last-op nil "Indicates the last recenter operation performed.