diff lisp/gnus/gnus-win.el @ 56927:55fd4f77387a after-merge-gnus-5_10

Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-523 Merge from emacs--gnus--5.10, gnus--rel--5.10 Patches applied: * miles@gnu.org--gnu-2004/emacs--gnus--5.10--base-0 tag of miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-464 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-1 Import from CVS branch gnus-5_10-branch * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-2 Merge from lorentey@elte.hu--2004/emacs--multi-tty--0, emacs--cvs-trunk--0 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-3 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-4 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-18 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-19 Remove autoconf-generated files from archive * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-20 Update from CVS
author Miles Bader <miles@gnu.org>
date Sat, 04 Sep 2004 13:13:48 +0000
parents 00a30fe7897a
children df80d19d7a2e cce1c0ee76ee
line wrap: on
line diff
--- a/lisp/gnus/gnus-win.el	Sat Sep 04 13:06:38 2004 +0000
+++ b/lisp/gnus/gnus-win.el	Sat Sep 04 13:13:48 2004 +0000
@@ -1,5 +1,5 @@
 ;;; gnus-win.el --- window configuration functions for Gnus
-;; Copyright (C) 1996, 97, 98, 1999, 2000, 02, 2004
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -29,6 +29,7 @@
 (eval-when-compile (require 'cl))
 
 (require 'gnus)
+(require 'gnus-util)
 
 (defgroup gnus-windows nil
   "Window configuration."
@@ -57,6 +58,13 @@
   :group 'gnus-windows
   :type 'boolean)
 
+(defcustom gnus-use-frames-on-any-display nil
+  "*If non-nil, frames on all displays will be considered useable by Gnus.
+When nil, only frames on the same display as the selected frame will be
+used to display Gnus windows."
+  :group 'gnus-windows
+  :type 'boolean)
+
 (defvar gnus-buffer-configuration
   '((group
      (vertical 1.0
@@ -68,17 +76,6 @@
 	       (if gnus-carpal '(summary-carpal 4))))
     (article
      (cond
-      ((and gnus-use-picons
-	    (eq gnus-picons-display-where 'picons))
-       '(frame 1.0
-	       (vertical 1.0
-			 (summary 0.25 point)
-			 (if gnus-carpal '(summary-carpal 4))
-			 (article 1.0))
-	       (vertical ((height . 5) (width . 15)
-			  (user-position . t)
-			  (left . -1) (top . 1))
-			 (picons 1.0))))
       (gnus-use-trees
        '(vertical 1.0
 		  (summary 0.25 point)
@@ -126,7 +123,7 @@
 	       (post 1.0 point)))
     (reply
      (vertical 1.0
-	       (article-copy 0.5)
+	       (article 0.5)
 	       (message 1.0 point)))
     (forward
      (vertical 1.0
@@ -165,7 +162,10 @@
     (compose-bounce
      (vertical 1.0
 	       (article 0.5)
-	       (message 1.0 point))))
+	       (message 1.0 point)))
+    (display-term
+      (vertical 1.0
+		("*display*" 1.0))))
   "Window configuration for all possible Gnus buffers.
 See the Gnus manual for an explanation of the syntax used.")
 
@@ -187,7 +187,6 @@
     (mail . gnus-message-buffer)
     (post-news . gnus-message-buffer)
     (faq . gnus-faq-buffer)
-    (picons . gnus-picons-buffer-name)
     (tree . gnus-tree-buffer)
     (score-trace . "*Score Trace*")
     (split-trace . "*Split Trace*")
@@ -197,6 +196,11 @@
     (draft . gnus-draft-buffer))
   "Mapping from short symbols to buffer names or buffer variables.")
 
+(defcustom gnus-configure-windows-hook nil
+  "*A hook called when configuring windows."
+  :group 'gnus-windows
+  :type 'hook)
+
 ;;; Internal variables.
 
 (defvar gnus-current-window-configuration nil
@@ -301,7 +305,7 @@
     ;; The SPLIT might be something that is to be evaled to
     ;; return a new SPLIT.
     (while (and (not (assq (car split) gnus-window-to-buffer))
-		(gnus-functionp (car split)))
+		(functionp (car split)))
       (setq split (eval split)))
     (let* ((type (car split))
 	   (subs (cddr split))
@@ -364,7 +368,7 @@
 	  (while subs
 	    (setq sub (append (pop subs) nil))
 	    (while (and (not (assq (car sub) gnus-window-to-buffer))
-			(gnus-functionp (car sub)))
+			(functionp (car sub)))
 	      (setq sub (eval sub)))
 	    (when sub
 	      (push sub comp-subs)
@@ -447,7 +451,7 @@
 		      ;; This is not a `frame' split, so we ignore the
 		      ;; other frames.
 		      (delete-other-windows)
-		    ;; This is a `frame' split, so we delete all windows
+		  ;; This is a `frame' split, so we delete all windows
 		    ;; on all frames.
 		    (gnus-delete-windows-in-gnusey-frames))
 		;; Just remove some windows.
@@ -462,6 +466,7 @@
 	      (switch-to-buffer nntp-server-buffer)
 	    (set-buffer nntp-server-buffer))
 	  (gnus-configure-frame split)
+	  (run-hooks 'gnus-configure-windows-hook)
 	  (when gnus-window-frame-focus
 	    (select-frame (window-frame gnus-window-frame-focus))))))))
 
@@ -502,7 +507,7 @@
       ;; The SPLIT might be something that is to be evaled to
       ;; return a new SPLIT.
       (while (and (not (assq (car split) gnus-window-to-buffer))
-		  (gnus-functionp (car split)))
+		  (functionp (car split)))
 	(setq split (eval split)))
 
       (setq type (elt split 0))
@@ -516,7 +521,7 @@
 	(unless buffer
 	  (error "Invalid buffer type: %s" type))
 	(if (and (setq buf (get-buffer (gnus-window-to-buffer-helper buffer)))
-		 (setq win (get-buffer-window buf 0)))
+		 (setq win (gnus-get-buffer-window buf t)))
 	    (if (memq 'point split)
 		(setq all-visible win))
 	  (setq all-visible nil)))
@@ -548,7 +553,29 @@
 	(if (featurep 'xemacs)
 	    (switch-to-buffer nntp-server-buffer)
 	  (set-buffer nntp-server-buffer)))
-      (mapcar (lambda (b) (delete-windows-on b t)) bufs))))
+      (mapcar (lambda (b) (delete-windows-on b t))
+	      (delq lowest-buf bufs)))))
+
+(eval-and-compile
+  (cond
+   ((fboundp 'frames-on-display-list)
+    (defalias 'gnus-frames-on-display-list 'frames-on-display-list))
+   ((and (featurep 'xemacs) (fboundp 'frame-device))
+    (defun gnus-frames-on-display-list ()
+      (apply 'filtered-frame-list 'identity (list (frame-device nil)))))
+   (t
+    (defalias 'gnus-frames-on-display-list 'frame-list))))
+
+(defun gnus-get-buffer-window (buffer &optional frame)
+  (cond ((and (null gnus-use-frames-on-any-display)
+	      (memq frame '(t 0 visible)))
+	 (car
+	  (let ((frames (gnus-frames-on-display-list)))
+	    (gnus-remove-if (lambda (win) (not (memq (window-frame win)
+						     frames)))
+			    (get-buffer-window-list buffer nil frame)))))
+	(t
+	 (get-buffer-window buffer frame))))
 
 (provide 'gnus-win)