*** empty log message ***
[gnus] / lisp / gnus-win.el
index 03f76f8..0cb2bb8 100644 (file)
@@ -25,7 +25,7 @@
 
 ;;; Code:
 
-(require 'gnus-load)
+(require 'gnus)
 
 (defvar gnus-use-full-window t
   "*If non-nil, use the entire Emacs screen.")
@@ -39,6 +39,9 @@
 (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)))
@@ -183,6 +186,11 @@ buffer configuration.")
     (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 ()
@@ -370,7 +378,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))))
@@ -381,6 +390,8 @@ buffer configuration.")
 (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))
@@ -410,14 +421,7 @@ 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))
@@ -426,6 +430,30 @@ 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))
+               (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
@@ -464,7 +492,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)
@@ -483,39 +511,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)