Mercurial > emacs
changeset 11086:22693a280a42
(one-window-p, walk-windows, minibuffer-window-active-p): Functions moved here.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 22 Mar 1995 16:57:58 +0000 |
parents | a9c7a7f91693 |
children | e3c06f791fd8 |
files | lisp/window.el |
diffstat | 1 files changed, 66 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/window.el Wed Mar 22 14:50:50 1995 +0000 +++ b/lisp/window.el Wed Mar 22 16:57:58 1995 +0000 @@ -22,6 +22,70 @@ ;;; Code: +;;;; Window tree functions. + +(defun one-window-p (&optional nomini all-frames) + "Returns non-nil if the selected window is the only window (in its frame). +Optional arg NOMINI non-nil means don't count the minibuffer +even if it is active. + +The optional arg ALL-FRAMES t means count windows on all frames. +If it is `visible', count windows on all visible frames. +ALL-FRAMES nil or omitted means count only the selected frame, +plus the minibuffer it uses (which may be on another frame). +If ALL-FRAMES is neither nil nor t, count only the selected frame." + (let ((base-window (selected-window))) + (if (and nomini (eq base-window (minibuffer-window))) + (setq base-window (next-window base-window))) + (eq base-window + (next-window base-window (if nomini 'arg) all-frames)))) + +(defun walk-windows (proc &optional minibuf all-frames) + "Cycle through all visible windows, calling PROC for each one. +PROC is called with a window as argument. + +Optional second arg MINIBUF t means count the minibuffer window even +if not active. MINIBUF nil or omitted means count the minibuffer iff +it is active. MINIBUF neither t nor nil means not to count the +minibuffer even if it is active. + +Several frames may share a single minibuffer; if the minibuffer +counts, all windows on all frames that share that minibuffer count +too. Therefore, when a separate minibuffer frame is active, +`walk-windows' includes the windows in the frame from which you +entered the minibuffer, as well as the minibuffer window. But if the +minibuffer does not count, only windows from WINDOW's frame count. + +Optional third arg ALL-FRAMES t means include windows on all frames. +ALL-FRAMES nil or omitted means cycle within the frames as specified +above. ALL-FRAMES = `visible' means include windows on all visible frames. +ALL-FRAMES = 0 means include windows on all visible and iconified frames. +Anything else means restrict to WINDOW's frame." + ;; If we start from the minibuffer window, don't fail to come back to it. + (if (window-minibuffer-p (selected-window)) + (setq minibuf t)) + (let* ((walk-windows-start (selected-window)) + (walk-windows-current walk-windows-start)) + (while (progn + (setq walk-windows-current + (next-window walk-windows-current minibuf all-frames)) + (funcall proc walk-windows-current) + (not (eq walk-windows-current walk-windows-start)))))) + +(defun minibuffer-window-active-p (window) + "Return t if WINDOW (a minibuffer window) is now active." + ;; nil nil means include WINDOW's frame + ;; and other frames using WINDOW as minibuffer, + ;; and include minibuffer if active. + (let ((prev (previous-window window nil nil))) + ;; If PREV equals WINDOW, WINDOW must be on a minibuffer-only frame + ;; and it's not currently being used. So return nil. + (and (not (eq window prev)) + (let ((should-be-same (next-window prev nil nil))) + ;; If next-window doesn't reverse previous-window, + ;; WINDOW must be outside the cycle specified by nil nil. + (eq should-be-same window))))) + (defun count-windows (&optional minibuf) "Returns the number of visible windows. Optional arg NO-MINI non-nil means don't count the minibuffer @@ -73,7 +137,7 @@ (enlarge-window (- newsize (window-height)))))) 'nomini))) - + ;;; I think this should be the default; I think people will prefer it--rms. (defvar split-window-keep-point t "*If non-nil, split windows keeps the original point in both children. @@ -133,7 +197,7 @@ (and size (< size 0) (setq size (+ (window-width) size))) (split-window nil size t))) - + (defun enlarge-window-horizontally (arg) "Make current window ARG columns wider." (interactive "p")