Merge from emacs--devo--0
[gnus] / lisp / gnus-win.el
index 402fc87..13a37e5 100644 (file)
@@ -1,6 +1,7 @@
 ;;; gnus-win.el --- window configuration functions for Gnus
 ;;; gnus-win.el --- window configuration functions for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-;;        Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -9,7 +10,7 @@
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
@@ -19,8 +20,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
 
 ;;; Commentary:
 
@@ -62,6 +63,7 @@
   "*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."
   "*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."
+  :version "22.1"
   :group 'gnus-windows
   :type 'boolean)
 
   :group 'gnus-windows
   :type 'boolean)
 
@@ -76,17 +78,6 @@ used to display Gnus windows."
               (if gnus-carpal '(summary-carpal 4))))
     (article
      (cond
               (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)
       (gnus-use-trees
        '(vertical 1.0
                  (summary 0.25 point)
@@ -129,12 +120,16 @@ used to display Gnus windows."
      (vertical 1.0
               (summary 0.25)
               (edit-score 1.0 point)))
      (vertical 1.0
               (summary 0.25)
               (edit-score 1.0 point)))
+    (edit-server
+     (vertical 1.0
+              (server 0.5)
+              (edit-form 1.0 point)))
     (post
      (vertical 1.0
               (post 1.0 point)))
     (reply
      (vertical 1.0
     (post
      (vertical 1.0
               (post 1.0 point)))
     (reply
      (vertical 1.0
-              (article-copy 0.5)
+              (article 0.5)
               (message 1.0 point)))
     (forward
      (vertical 1.0
               (message 1.0 point)))
     (forward
      (vertical 1.0
@@ -175,8 +170,12 @@ used to display Gnus windows."
               (article 0.5)
               (message 1.0 point)))
     (display-term
               (article 0.5)
               (message 1.0 point)))
     (display-term
-      (vertical 1.0
-               ("*display*" 1.0))))
+     (vertical 1.0
+              ("*display*" 1.0)))
+    (mml-preview
+     (vertical 1.0
+              (message 0.5)
+              (mml-preview 1.0 point))))
   "Window configuration for all possible Gnus buffers.
 See the Gnus manual for an explanation of the syntax used.")
 
   "Window configuration for all possible Gnus buffers.
 See the Gnus manual for an explanation of the syntax used.")
 
@@ -198,16 +197,22 @@ See the Gnus manual for an explanation of the syntax used.")
     (mail . gnus-message-buffer)
     (post-news . gnus-message-buffer)
     (faq . gnus-faq-buffer)
     (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*")
     (info . gnus-info-buffer)
     (category . gnus-category-buffer)
     (article-copy . gnus-article-copy)
     (tree . gnus-tree-buffer)
     (score-trace . "*Score Trace*")
     (split-trace . "*Split Trace*")
     (info . gnus-info-buffer)
     (category . gnus-category-buffer)
     (article-copy . gnus-article-copy)
-    (draft . gnus-draft-buffer))
+    (draft . gnus-draft-buffer)
+    (mml-preview . mml-preview-buffer))
   "Mapping from short symbols to buffer names or buffer variables.")
 
   "Mapping from short symbols to buffer names or buffer variables.")
 
+(defcustom gnus-configure-windows-hook nil
+  "*A hook called when configuring windows."
+  :version "22.1"
+  :group 'gnus-windows
+  :type 'hook)
+
 ;;; Internal variables.
 
 (defvar gnus-current-window-configuration nil
 ;;; Internal variables.
 
 (defvar gnus-current-window-configuration nil
@@ -302,7 +307,7 @@ See the Gnus manual for an explanation of the syntax used.")
     (unless window
       (setq window current-window))
     (select-window window)
     (unless window
       (setq window current-window))
     (select-window window)
-    ;; This might be an old-stylee buffer config.
+    ;; This might be an old-style buffer config.
     (when (vectorp split)
       (setq split (append split nil)))
     (when (or (consp (car split))
     (when (vectorp split)
       (setq split (append split nil)))
     (when (or (consp (car split))
@@ -312,7 +317,7 @@ See the Gnus manual for an explanation of the syntax used.")
     ;; 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))
     ;; 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))
       (setq split (eval split)))
     (let* ((type (car split))
           (subs (cddr split))
@@ -375,7 +380,7 @@ See the Gnus manual for an explanation of the syntax used.")
          (while subs
            (setq sub (append (pop subs) nil))
            (while (and (not (assq (car sub) gnus-window-to-buffer))
          (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)
              (setq sub (eval sub)))
            (when sub
              (push sub comp-subs)
@@ -458,7 +463,7 @@ See the Gnus manual for an explanation of the syntax used.")
                      ;; This is not a `frame' split, so we ignore the
                      ;; other frames.
                      (delete-other-windows)
                      ;; 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.
                    ;; on all frames.
                    (gnus-delete-windows-in-gnusey-frames))
                ;; Just remove some windows.
@@ -473,8 +478,10 @@ See the Gnus manual for an explanation of the syntax used.")
              (switch-to-buffer nntp-server-buffer)
            (set-buffer nntp-server-buffer))
          (gnus-configure-frame split)
              (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
          (when gnus-window-frame-focus
-           (select-frame (window-frame gnus-window-frame-focus))))))))
+           (gnus-select-frame-set-input-focus
+            (window-frame gnus-window-frame-focus))))))))
 
 (defun gnus-delete-windows-in-gnusey-frames ()
   "Do a `delete-other-windows' in all frames that have Gnus windows."
 
 (defun gnus-delete-windows-in-gnusey-frames ()
   "Do a `delete-other-windows' in all frames that have Gnus windows."
@@ -513,7 +520,7 @@ should have point."
       ;; 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))
       ;; 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))
        (setq split (eval split)))
 
       (setq type (elt split 0))
@@ -562,16 +569,28 @@ should have point."
       (mapcar (lambda (b) (delete-windows-on b t))
              (delq lowest-buf 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)))
 (defun gnus-get-buffer-window (buffer &optional frame)
   (cond ((and (null gnus-use-frames-on-any-display)
              (memq frame '(t 0 visible)))
-        (car (gnus-delete-if (lambda (win) 
-                               (not (member (window-frame win)
-                                            (frames-on-display-list))))
-                             (get-buffer-window-list buffer nil frame))))
+        (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)
 
        (t
         (get-buffer-window buffer frame))))
 
 (provide 'gnus-win)
 
+;;; arch-tag: ccd5a394-2ddf-4397-b8f8-6d80d3e46e2b
 ;;; gnus-win.el ends here
 ;;; gnus-win.el ends here