changeset 21118:2aa0dc203036

(quit-window): New command. (shrink-window-if-larger-than-buffer): Bind text-height in the let*. (view-return-to-alist): Add defvar.
author Richard M. Stallman <rms@gnu.org>
date Mon, 09 Mar 1998 00:37:11 +0000
parents a88d2c555a06
children 7d8bbe35875e
files lisp/window.el
diffstat 1 files changed, 50 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/window.el	Mon Mar 09 00:25:30 1998 +0000
+++ b/lisp/window.el	Mon Mar 09 00:37:11 1998 +0000
@@ -198,6 +198,9 @@
                  (select-window new-w)))))
     (split-window-save-restore-data new-w old-w)))
 
+;; This is to avoid compiler warnings.
+(defvar view-return-to-alist)
+
 (defun split-window-save-restore-data (new-w old-w)
   (save-excursion
     (set-buffer (window-buffer))
@@ -246,7 +249,8 @@
 	       (eq ?\n (char-after (1- (point-max))))))
 	 (params (frame-parameters (window-frame window)))
 	 (mini (cdr (assq 'minibuffer params)))
-	 (edges (window-edges (selected-window))))
+	 (edges (window-edges (selected-window)))
+	 text-height)
     (if (and (< 1 (save-selected-window
 		    (select-window window)
 		    (count-windows)))
@@ -287,6 +291,51 @@
 	(kill-buffer buffer))
     (error "Aborted")))
 
+(defun quit-window (&optional kill window)
+  "Quit the current buffer.  Bury it, and maybe delete the selected frame.
+\(The frame is deleted if it is 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 (if window (window-frame 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))
+      (switch-to-buffer (other-buffer)))
+
+    ;; Get rid of the frame, if it has just one dedicated window
+    ;; and other visible frames exist.
+    (and (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)))
+
+    ;; 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))))
+
 (define-key ctl-x-map "2" 'split-window-vertically)
 (define-key ctl-x-map "3" 'split-window-horizontally)
 (define-key ctl-x-map "}" 'enlarge-window-horizontally)