;;; gnus-win.el --- window configuration functions for Gnus
-;; Copyright (C) 1996 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
;;; Code:
-(require 'gnus-load)
+(require 'gnus)
-(defvar gnus-use-full-window t
- "*If non-nil, use the entire Emacs screen.")
+(defgroup gnus-windows nil
+ "Window configuration."
+ :group 'gnus)
+
+(defcustom gnus-use-full-window t
+ "*If non-nil, use the entire Emacs screen."
+ :group 'gnus-windows
+ :type 'boolean)
(defvar gnus-window-configuration nil
"Obsolete variable. See `gnus-buffer-configuration'.")
-(defvar gnus-window-min-width 2
- "*Minimum width of Gnus buffers.")
+(defcustom gnus-window-min-width 2
+ "*Minimum width of Gnus buffers."
+ :group 'gnus-windows
+ :type 'integer)
-(defvar gnus-window-min-height 1
- "*Minimum height of Gnus buffers.")
+(defcustom gnus-window-min-height 1
+ "*Minimum height of Gnus buffers."
+ :group 'gnus-windows
+ :type 'integer)
-(defvar gnus-always-force-window-configuration nil
- "*If non-nil, always force the Gnus window configurations.")
+(defcustom gnus-always-force-window-configuration nil
+ "*If non-nil, always force the Gnus window configurations."
+ :group 'gnus-windows
+ :type 'boolean)
(defvar gnus-buffer-configuration
'((group
(summary 1.0 point)
(if gnus-carpal '(summary-carpal 4))))
(article
- (cond
- ((and gnus-use-picons (not (eq gnus-picons-display-where 'article)))
+ (cond
+ ((and gnus-use-picons
+ (eq gnus-picons-display-where 'picons))
'(frame 1.0
(vertical 1.0
(summary 0.25 point)
(article 0.5)
(message 1.0 point))))
"Window configuration for all possible Gnus buffers.
-This variable is a list of lists. Each of these lists has a NAME and
-a RULE. The NAMEs are commonsense names like `group', which names a
-rule used when displaying the group buffer; `summary', which names a
-rule for what happens when you enter a group and do not display an
-article buffer; and so on. See the value of this variable for a
-complete list of NAMEs.
-
-Each RULE is a list of vectors. The first element in this vector is
-the name of the buffer to be displayed; the second element is the
-percentage of the screen this buffer is to occupy (a number in the
-0.0-0.99 range); the optional third element is `point', which should
-be present to denote which buffer point is to go to after making this
-buffer configuration.")
+See the Gnus manual for an explanation of the syntax used.")
(defvar gnus-window-to-buffer
'((group . gnus-group-buffer)
"Kill all frames Gnus has created."
(while gnus-created-frames
(when (frame-live-p (car gnus-created-frames))
- ;; We slap a condition-case around this `delete-frame' to ensure
+ ;; We slap a condition-case around this `delete-frame' to ensure
;; against errors if we try do delete the single frame that's left.
- (condition-case ()
- (delete-frame (car gnus-created-frames))
- (error nil)))
+ (ignore-errors
+ (delete-frame (car gnus-created-frames))))
(pop gnus-created-frames)))
(defun gnus-window-configuration-element (list)
(memq setting '(group summary article)))))
setting
(let* ((elem
- (cond
+ (cond
((eq setting 'group)
(gnus-window-configuration-element
'(group newsgroups ExitNewsgroup)))
(split-window window (cadar comp-subs)
(eq type 'horizontal))))
(setq result (or (gnus-configure-frame
- (car comp-subs) window) result))
+ (car comp-subs) window)
+ result))
(select-window new-win)
(setq window new-win)
(setq comp-subs (cdr comp-subs))))
;; We want to remove all other windows.
(if (not gnus-frame-split-p)
;; This is not a `frame' split, so we ignore the
- ;; other frames.
+ ;; other frames.
(delete-other-windows)
;; This is a `frame' split, so we delete all windows
;; on all frames.
- (mapcar
- (lambda (frame)
- (unless (eq (cdr (assq 'minibuffer
- (frame-parameters frame)))
- 'only)
- (select-frame frame)
- (delete-other-windows)))
- (frame-list)))
+ (gnus-delete-windows-in-gnusey-frames))
;; Just remove some windows.
(gnus-remove-some-windows)
(switch-to-buffer nntp-server-buffer))
(switch-to-buffer nntp-server-buffer)
(gnus-configure-frame split (get-buffer-window (current-buffer))))))
+(defun gnus-delete-windows-in-gnusey-frames ()
+ "Do a `delete-other-windows' in all frames that have Gnus windows."
+ (let ((buffers
+ (mapcar
+ (lambda (elem)
+ (if (symbolp (cdr elem))
+ (when (and (boundp (cdr elem))
+ (symbol-value (cdr elem)))
+ (get-buffer (symbol-value (cdr elem))))
+ (when (cdr elem)
+ (get-buffer (cdr elem)))))
+ gnus-window-to-buffer)))
+ (mapcar
+ (lambda (frame)
+ (unless (eq (cdr (assq 'minibuffer
+ (frame-parameters frame)))
+ 'only)
+ (select-frame frame)
+ (let (do-delete)
+ (walk-windows
+ (lambda (window)
+ (when (memq (window-buffer window) buffers)
+ (setq do-delete t))))
+ (when do-delete
+ (delete-other-windows)))))
+ (frame-list))))
+
(defun gnus-all-windows-visible-p (split)
"Say whether all buffers in SPLIT are currently visible.
In particular, the value returned will be the window that
(setq win (get-buffer-window buf t)))
(if win
(when (memq 'point split)
- (setq all-visible win))
+ (setq all-visible win))
(setq all-visible nil)))
(t
(when (eq type 'frame)
;; Remove windows on all known Gnus buffers.
(while buffers
(setq buf (cdar buffers))
- (if (symbolp buf)
- (setq buf (and (boundp buf) (symbol-value buf))))
+ (when (symbolp buf)
+ (setq buf (and (boundp buf) (symbol-value buf))))
(and buf
(get-buffer-window buf)
(progn
- (setq bufs (cons buf bufs))
+ (push buf bufs)
(pop-to-buffer buf)
- (if (or (not lowest)
- (< (gnus-window-top-edge) lowest))
- (progn
- (setq lowest (gnus-window-top-edge))
- (setq lowest-buf buf)))))
+ (when (or (not lowest)
+ (< (gnus-window-top-edge) lowest))
+ (setq lowest (gnus-window-top-edge))
+ (setq lowest-buf buf))))
(setq buffers (cdr buffers)))
;; Remove windows on *all* summary buffers.
(walk-windows
(lambda (win)
(let ((buf (window-buffer win)))
- (if (string-match "^\\*Summary" (buffer-name buf))
- (progn
- (setq bufs (cons buf bufs))
- (pop-to-buffer buf)
- (if (or (not lowest)
- (< (gnus-window-top-edge) lowest))
- (progn
- (setq lowest-buf buf)
- (setq lowest (gnus-window-top-edge)))))))))
- (and lowest-buf
- (progn
- (pop-to-buffer lowest-buf)
- (switch-to-buffer nntp-server-buffer)))
+ (when (string-match "^\\*Summary" (buffer-name buf))
+ (push buf bufs)
+ (pop-to-buffer buf)
+ (when (or (not lowest)
+ (< (gnus-window-top-edge) lowest))
+ (setq lowest-buf buf)
+ (setq lowest (gnus-window-top-edge)))))))
+ (when lowest-buf
+ (pop-to-buffer lowest-buf)
+ (switch-to-buffer nntp-server-buffer))
(while bufs
- (and (not (eq (car bufs) lowest-buf))
- (delete-windows-on (car bufs)))
+ (when (not (eq (car bufs) lowest-buf))
+ (delete-windows-on (car bufs)))
(setq bufs (cdr bufs))))))
(provide 'gnus-win)