]> git.eshelyaron.com Git - emacs.git/commitdiff
(quit-window): Simplify code. Say in doc-string
authorMartin Rudalics <rudalics@gmx.at>
Thu, 30 Oct 2008 15:41:43 +0000 (15:41 +0000)
committerMartin Rudalics <rudalics@gmx.at>
Thu, 30 Oct 2008 15:41:43 +0000 (15:41 +0000)
that it operates on the selected window's buffer.  (Bug#1259)

lisp/ChangeLog
lisp/window.el

index 3ef866e791152ed12aff959b643bdd2b194570ec..ff2e37deb07bc6794dc9d979eb0e35a6562cbb95 100644 (file)
@@ -1,3 +1,8 @@
+2008-10-30  Martin Rudalics  <rudalics@gmx.at>
+
+       * 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  <nickrob@snap.net.nz>
 
        * vc-svn.el (vc-svn-diff): If files is nil don't set oldvers to
index c9e5d7936516f30f33209163d9867d29147541db..403e4a1d8dcbd94aa6d725c9299b265b89f2ffe5 100644 (file)
@@ -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.