* gnus.el (gnus-update-message-archive-method): New variable.
authorKatsumi Yamaoka <yamaoka@jpl.org>
Fri, 1 Jun 2007 08:12:45 +0000 (08:12 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Fri, 1 Jun 2007 08:12:45 +0000 (08:12 +0000)
* gnus-start.el (gnus-setup-news): Update saved "archive" method according to
 gnus-message-archive-method if gnus-update-message-archive-method is non-nil.

lisp/ChangeLog
lisp/gnus-start.el
lisp/gnus.el

index 133ab2b..5afdf45 100644 (file)
@@ -1,3 +1,11 @@
+2007-06-01  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.el (gnus-update-message-archive-method): New variable.
+
+       * gnus-start.el (gnus-setup-news): Update saved "archive" method
+       according to gnus-message-archive-method if
+       gnus-update-message-archive-method is non-nil.
+
 2007-05-29  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * gnus-sum.el (gnus-summary-limit-to-address): New function.  Suggested
index 248e418..69ecae3 100644 (file)
@@ -963,30 +963,34 @@ If LEVEL is non-nil, the news will be set up at level LEVEL."
       (gnus-read-newsrc-file rawfile))
 
     ;; Make sure the archive server is available to all and sundry.
-    (when gnus-message-archive-method
-      (unless (assoc "archive" gnus-server-alist)
-       (let ((method (or (and (stringp gnus-message-archive-method)
-                              (gnus-server-to-method
-                               gnus-message-archive-method))
-                         gnus-message-archive-method)))
-         ;; Check whether the archive method is writable.
-         (unless (or (stringp method)
-                     (memq 'respool (assoc (format "%s" (car method))
-                                           gnus-valid-select-methods)))
-           (setq method "archive")) ;; The default.
-         (push (if (stringp method)
-                   `("archive"
-                     nnfolder
-                     ,method
-                     (nnfolder-directory
-                      ,(nnheader-concat message-directory method))
-                     (nnfolder-active-file
-                      ,(nnheader-concat message-directory
-                                        (concat method "/active")))
-                     (nnfolder-get-new-mail nil)
-                     (nnfolder-inhibit-expiry t))
-                 (cons "archive" method))
-               gnus-server-alist))))
+    (let ((method (or (and (stringp gnus-message-archive-method)
+                          (gnus-server-to-method
+                           gnus-message-archive-method))
+                     gnus-message-archive-method)))
+      ;; Check whether the archive method is writable.
+      (unless (or (not method)
+                 (stringp method)
+                 (memq 'respool (assoc (format "%s" (car method))
+                                       gnus-valid-select-methods)))
+       (setq method "archive")) ;; The default.
+      (when (stringp method)
+       (setq method `(nnfolder
+                      ,method
+                      (nnfolder-directory
+                       ,(nnheader-concat message-directory method))
+                      (nnfolder-active-file
+                       ,(nnheader-concat message-directory
+                                         (concat method "/active")))
+                      (nnfolder-get-new-mail nil)
+                      (nnfolder-inhibit-expiry t))))
+      (if (assoc "archive" gnus-server-alist)
+         (when gnus-update-message-archive-method
+           (if method
+               (setcdr (assoc "archive" gnus-server-alist) method)
+             (setq gnus-server-alist (delq (assoc "archive" gnus-server-alist)
+                                           gnus-server-alist))))
+       (when method
+         (push (cons "archive" method) gnus-server-alist))))
 
     ;; If we don't read the complete active file, we fill in the
     ;; hashtb here.
index d52df81..0a922c9 100644 (file)
@@ -1290,12 +1290,29 @@ see the manual for details."
 
 (defcustom gnus-message-archive-method "archive"
   "*Method used for archiving messages you've sent.
-This should be a mail method."
+This should be a mail method.
+
+See also `gnus-update-message-archive-method'."
   :group 'gnus-server
   :group 'gnus-message
   :type '(choice (const :tag "Default archive method" "archive")
                 gnus-select-method))
 
+(defcustom gnus-update-message-archive-method nil
+  "Non-nil means always update the saved \"archive\" method.
+
+The archive method is initially set according to the value of
+`gnus-message-archive-method' and is saved in the \"~/.newsrc.eld\" file
+so that it may be used as a real method of the server which is named
+\"archive\" ever since.  If it once has been saved, it will never be
+updated if the value of this variable is nil, even if you change the
+value of `gnus-message-archive-method' afterward.  If you want the
+saved \"archive\" method to be updated whenever you change the value of
+`gnus-message-archive-method', set this variable to a non-nil value."
+  :group 'gnus-server
+  :group 'gnus-message
+  :type 'boolean)
+
 (defcustom gnus-message-archive-group nil
   "*Name of the group in which to save the messages you've written.
 This can either be a string; a list of strings; or an alist