;;; Code:
-(require 'gnus-load)
+(require 'gnus)
(defvar gnus-use-full-window t
"*If non-nil, use the entire Emacs screen.")
(defvar gnus-window-min-height 1
"*Minimum height of Gnus buffers.")
+(defvar gnus-always-force-window-configuration nil
+ "*If non-nil, always force the Gnus window configurations.")
+
(defvar gnus-buffer-configuration
'((group
(vertical 1.0
(vertical 1.0
(summary 0.5 point)
("*Score Trace*" 1.0)))
- (score-trace
+ (score-words
(vertical 1.0
(summary 0.5 point)
("*Score Words*" 1.0)))
(draft . gnus-draft-buffer))
"Mapping from short symbols to buffer names or buffer variables.")
+;;; Internal variables.
+
+(defvar gnus-current-window-configuration nil
+ "The most recently set window configuration.")
+
(defvar gnus-created-frames nil)
(defun gnus-kill-gnus-frames ()
(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))))
(defvar gnus-frame-split-p nil)
(defun gnus-configure-windows (setting &optional force)
+ (setq gnus-current-window-configuration setting)
+ (setq force (or force gnus-always-force-window-configuration))
(setq setting (gnus-windows-old-to-new setting))
(let ((split (if (symbolp setting)
(cadr (assq setting gnus-buffer-configuration))
(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))
+ (get-buffer (symbol-value (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)