From 3d2f23d923f2dbb709359d263deaa1800528809c Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 9 Mar 1998 00:37:11 +0000 Subject: [PATCH] (quit-window): New command. (shrink-window-if-larger-than-buffer): Bind text-height in the let*. (view-return-to-alist): Add defvar. --- lisp/window.el | 51 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/lisp/window.el b/lisp/window.el index 2ac97ffd62c..6b8709b00f3 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -198,6 +198,9 @@ new mode line." (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 @@ or if the window is the only window of its frame." (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 @@ or if the window is the only window of its frame." (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) -- 2.39.2