X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgnus-win.el;h=d66d0c5812236191ba1c2fc44875b9b248860430;hb=42e28f7726b7a79a3cb0fff60c92eea2675570e5;hp=16fd475be74b1ea42bba56925fcf357b986f4f8f;hpb=d0a7c2475a8172dd6358727d726cb301baf8613e;p=gnus diff --git a/lisp/gnus-win.el b/lisp/gnus-win.el index 16fd475be..d66d0c581 100644 --- a/lisp/gnus-win.el +++ b/lisp/gnus-win.el @@ -1,5 +1,5 @@ ;;; 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 ;; Keywords: news @@ -25,22 +25,36 @@ ;;; Code: -(require 'gnus-load) +(eval-when-compile (require 'cl)) -(defvar gnus-use-full-window t - "*If non-nil, use the entire Emacs screen.") +(require 'gnus) + +(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 @@ -52,8 +66,9 @@ (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) @@ -122,9 +137,6 @@ (vertical 1.0 (article 0.5) (message 1.0 point))) - (draft - (vertical 1.0 - (draft 1.0 point))) (pipe (vertical 1.0 (summary 0.25 point) @@ -142,24 +154,15 @@ (vertical 1.0 (summary 0.5 point) ("*Score Words*" 1.0))) + (category + (vertical 1.0 + (category 1.0))) (compose-bounce (vertical 1.0 (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) @@ -181,7 +184,9 @@ buffer configuration.") (faq . gnus-faq-buffer) (picons . "*Picons*") (tree . gnus-tree-buffer) + (score-trace . "*Score Trace*") (info . gnus-info-buffer) + (category . gnus-category-buffer) (article-copy . gnus-article-copy) (draft . gnus-draft-buffer)) "Mapping from short symbols to buffer names or buffer variables.") @@ -197,11 +202,10 @@ buffer configuration.") "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) @@ -225,7 +229,7 @@ buffer configuration.") (memq setting '(group summary article))))) setting (let* ((elem - (cond + (cond ((eq setting 'group) (gnus-window-configuration-element '(group newsgroups ExitNewsgroup))) @@ -378,7 +382,8 @@ buffer configuration.") (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)))) @@ -416,18 +421,11 @@ buffer configuration.") ;; 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)) @@ -436,6 +434,33 @@ buffer configuration.") (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 @@ -474,7 +499,7 @@ should have point." (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) @@ -493,39 +518,35 @@ should have point." ;; 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)