# HG changeset patch # User Richard M. Stallman # Date 889403831 0 # Node ID 2aa0dc203036a6e94ea62cb7d4ac1d54f2cf1b66 # Parent a88d2c555a0608890b4292c2157ca3c93362bebe (quit-window): New command. (shrink-window-if-larger-than-buffer): Bind text-height in the let*. (view-return-to-alist): Add defvar. diff -r a88d2c555a06 -r 2aa0dc203036 lisp/window.el --- 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)