summaryrefslogtreecommitdiff
path: root/lisp/window.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1998-03-09 00:37:11 +0000
committerRichard M. Stallman <rms@gnu.org>1998-03-09 00:37:11 +0000
commit3d2f23d923f2dbb709359d263deaa1800528809c (patch)
tree7db7b508d152fc445bd3333d9315deb973d353cb /lisp/window.el
parentab228c24d550d34f768077d6c1d047b12c8ff62d (diff)
downloademacs-3d2f23d923f2dbb709359d263deaa1800528809c.tar.gz
(quit-window): New command.
(shrink-window-if-larger-than-buffer): Bind text-height in the let*. (view-return-to-alist): Add defvar.
Diffstat (limited to 'lisp/window.el')
-rw-r--r--lisp/window.el51
1 files changed, 50 insertions, 1 deletions
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)