Fix.
[elisp/gnus.git-] / lisp / gnus-ofsetup.el
index e6d05a1..839db29 100644 (file)
@@ -1,32 +1,35 @@
 ;;; gnus-ofsetup.el --- Setup advisor for Offline reading for Mail/News.
 ;;; gnus-ofsetup.el --- Setup advisor for Offline reading for Mail/News.
-;;;
-;;; Copyright (C) 1998 Tatsuya Ichikawa
-;;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
-;;;      Tsukamoto Tetsuo <czkmt@remus.dti.ne.jp>
-;;;
-;;; This file is part of Semi-gnus.
-;;;
-;;; 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)
-;;; any later version.
-
-;;; GNU Emacs is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-
-;;; 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.
-;;;
-;;;; Commentary:
-;;; How to use.
-;;;
-;;;      M-x load[RET]gnus-ofsetup
-;;;      M-x gnus-setup-for-offline
-;;;
+
+;; Copyright (C) 1998, 2001 Tatsuya Ichikawa
+
+;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+;;     Tsukamoto Tetsuo <czkmt@remus.dti.ne.jp>
+;;
+;; This file is part of Semi-gnus.
+
+;; 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)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; 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.
+;;
+
+;;; Commentary:
+
+;; How to use.
+;;
+;;      M-x load[RET]gnus-ofsetup
+;;      M-x gnus-setup-for-offline
+;;
 
 ;;; Code:
 
 
 ;;; Code:
 
@@ -45,6 +48,7 @@
     "This variable decides which language will be used for display."))
 
 (eval-when-compile
     "This variable decides which language will be used for display."))
 
 (eval-when-compile
+  (require 'gnus)
   (require 'gnus-offline))
 
 (defvar gnus-offline-setting-file
   (require 'gnus-offline))
 
 (defvar gnus-offline-setting-file
@@ -74,7 +78,7 @@
            (if (not (file-exists-p news-spool))
                (make-directory news-spool t)))
        (error
            (if (not (file-exists-p news-spool))
                (make-directory news-spool t)))
        (error
-        (error (gnus-ofsetup-get-message 'prepare-miee-1))))))
+        (error (gnus-ofsetup-gettext 'prepare-miee-1))))))
 
   (defvar gnus-ofsetup-update-setting-file
     '((save-excursion
 
   (defvar gnus-ofsetup-update-setting-file
     '((save-excursion
        (insert "(setq gnus-offline-MTA-type '"
                (prin1-to-string MTA-type) ")\n")
 
        (insert "(setq gnus-offline-MTA-type '"
                (prin1-to-string MTA-type) ")\n")
 
-       ;; Offline setting for gnus-nntp-*
-       (insert "(setq gnus-nntp-service nil)\n")
-       (insert "(setq gnus-nntp-server nil)\n")
-
        ;; Write setting about hooks.
        ;; Write setting about hooks.
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'gnus-group-mode-hook"
-                       "'gnus-offline-processed-by-timer t)"))
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'gnus-group-mode-hook"
-                       "'gnus-offline-error-check t)"))
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'gnus-after-getting-new-news-hook"
-                       "'gnus-offline-after-get-new-news)"))
        (when (eq news-method 'nnspool)
          (insert (format "%s %s %s\n"
                          "(add-hook"
        (when (eq news-method 'nnspool)
          (insert (format "%s %s %s\n"
                          "(add-hook"
                          "(add-hook"
                          "'gnus-before-startup-hook"
                          "(lambda () (setq nnmail-spool-file nil)
                          "(add-hook"
                          "'gnus-before-startup-hook"
                          "(lambda () (setq nnmail-spool-file nil)
-           (setq mail-sources nil)))")))
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'message-send-hook"
-                       "'gnus-offline-message-add-header)"))
-       (insert "(autoload 'gnus-offline-setup \"gnus-offline\")\n")
-       (insert "(add-hook 'gnus-load-hook 'gnus-offline-setup)\n")
+          (setq mail-sources nil)))")))
 
        ;; Write stting about mail-source.el
        (insert "(setq gnus-offline-mail-source '"
                (prin1-to-string mail-source) ")\n")
        (insert "(setq mail-sources gnus-offline-mail-source)\n")
 
        ;; Write stting about mail-source.el
        (insert "(setq gnus-offline-mail-source '"
                (prin1-to-string mail-source) ")\n")
        (insert "(setq mail-sources gnus-offline-mail-source)\n")
-       (insert "(require 'read-passwd)\n")
-       (insert "(setq mail-source-read-passwd 'read-pw-read-passwd)\n")
-       (insert (format "%s %s %s\n"
-                       "(add-hook"
-                       "'gnus-setup-news-hook"
-                       "'read-pw-set-mail-source-passwd-cache)"))
        (if save-passwd
            (insert "(add-hook 'gnus-setup-news-hook
          (lambda ()
        (if save-passwd
            (insert "(add-hook 'gnus-setup-news-hook
          (lambda ()
     (setup-8 . "Use MIEE post/send message ")
     (setup-9 . "News spool directory for sending: ")
     (setup-10 . "Mail spool directory for sending: ")
     (setup-8 . "Use MIEE post/send message ")
     (setup-9 . "News spool directory for sending: ")
     (setup-10 . "Mail spool directory for sending: ")
-    (setup-11 . "How many e-mail address do you have: ")
-    (setup-12 . "Mail Account name : ")
-    (setup-13 . "Mail server : ")
-    (setup-14 . "Authentification Method (TAB to completion): ")
-    (setup-15 . "Do you use pop3.el to fetch mail? ")
-    (setup-16 . "movemail program name: ")
-    (setup-17 . "movemail options: ")
-    (setup-18 . "Do you save password information to newsrc file? ")
+    (setup-11 . "How many mail sources will get mails from? : ")
+    (setup-12 . "What type of the mail source? ")
+    (setup-13 . "Mail Account name : ")
+    (setup-14 . "Mail server : ")
+    (setup-15 . "Authentification Method ")
+    (setup-16 . "Do you use pop3.el to fetch mail? ")
+    (setup-17 . "movemail program name: ")
+    (setup-18 . "movemail options: ")
+    (setup-19 . "What network stream? ")
+    (setup-20 . "File: ")
+    (setup-21 . "Directory: ")
+    (setup-22 . "Do you save password information to newsrc file? ")
+
     (param-news-method-1 . "News Method")
     (param-news-method-2 . "Gnus Agent")
     (param-news-method-3 . "nnspool")
     (param-news-method-1 . "News Method")
     (param-news-method-2 . "Gnus Agent")
     (param-news-method-3 . "nnspool")
@@ -268,7 +249,7 @@ if you want to use movemail instead of pop3.el which comes with
 Gnus, you can set a specifier using the kerword :program as shown
 below:
 
 Gnus, you can set a specifier using the kerword :program as shown
 below:
 
-          (pop :program \"movemail -pf po:%u %t %p\")
+         (pop :program \"movemail -pf po:%u %t %p\")
 
 If you want to know more about mail source specifiers and keywords,
 click the button below.")
 
 If you want to know more about mail source specifiers and keywords,
 click the button below.")
@@ -302,14 +283,18 @@ restarted.")
     (setup-8 . "\e$B%a%C%;!<%8$NAw?.$K\e(B MIEE \e$B$r;H$$$^$9$+\e(B? ")
     (setup-9 . "\e$B%K%e!<%9$N%9%W!<%k%G%#%l%/%H%j\e(B: ")
     (setup-10 . "\e$B%a!<%k$N%9%W!<%k%G%#%l%/%H%j\e(B: ")
     (setup-8 . "\e$B%a%C%;!<%8$NAw?.$K\e(B MIEE \e$B$r;H$$$^$9$+\e(B? ")
     (setup-9 . "\e$B%K%e!<%9$N%9%W!<%k%G%#%l%/%H%j\e(B: ")
     (setup-10 . "\e$B%a!<%k$N%9%W!<%k%G%#%l%/%H%j\e(B: ")
-    (setup-11 . "\e$B%a!<%k%"%+%&%s%H$N?t$rEz$($F$/$@$5$$\e(B: ")
-    (setup-12 . "\e$B%a!<%k$N%"%+%&%s%HL>\e(B: ")
-    (setup-13 . "\e$B$=$N%"%+%&%s%H$N$"$k%a!<%k%5!<%PL>\e(B: ")
-    (setup-14 . "\e$B$=$N%5!<%P$G$NG'>ZJ}<0$O\e(B? (TAB \e$B$GJd40$7$^$9\e(B): ")
-    (setup-15 . "\e$B%a!<%k$N<u?.$K$O\e(B pop3.el \e$B$r;H$$$^$9$+\e(B? ")
-    (setup-16 . "movemail \e$B%W%m%0%i%`$NL>A0\e(B: ")
-    (setup-17 . "movemail \e$B%W%m%0%i%`$KEO$90z?t\e(B: ")
-    (setup-18 . "newsrc \e$B%U%!%$%k$K\e(B POP \e$B%Q%9%o!<%I$rJ]B8$7$^$9$+\e(B? ")
+    (setup-11 . "\e$B@_Dj$9$k%a!<%k<hF@@h$N?t$O\e(B? (\e$B8e$GDI2C$G$-$^$9\e(B): ")
+    (setup-12 . "\e$B%a!<%k<hF@@h$N%?%$%W$O\e(B? ")
+    (setup-13 . "\e$B%a!<%k$N%"%+%&%s%HL>\e(B: ")
+    (setup-14 . "\e$B$=$N%"%+%&%s%H$N$"$k%a!<%k%5!<%PL>\e(B: ")
+    (setup-15 . "\e$BG'>ZJ}<0$O\e(B? ")
+    (setup-16 . "\e$B%a!<%k$N<u?.$K$O\e(B pop3.el \e$B$r;H$$$^$9$+\e(B? ")
+    (setup-17 . "movemail \e$B%W%m%0%i%`$NL>A0\e(B: ")
+    (setup-18 . "movemail \e$B%W%m%0%i%`$KEO$90z?t\e(B: ")
+    (setup-19 . "\e$B@\B3J}<0$O\e(B? ")
+    (setup-20 . "\e$B%U%!%$%k\e(B: ")
+    (setup-21 . "\e$B%G%#%l%/%H%j\e(B: ")
+    (setup-22 . "newsrc \e$B%U%!%$%k$K\e(B POP \e$B%Q%9%o!<%I$rJ]B8$7$^$9$+\e(B? ")
 
     (param-news-method-4 . "\
 \e$B%K%e!<%95-;v$r<hF@$9$kJ}K!$G$9!#\e(B")
 
     (param-news-method-4 . "\
 \e$B%K%e!<%95-;v$r<hF@$9$kJ}K!$G$9!#\e(B")
@@ -347,7 +332,7 @@ POP \e$B%Q%9%o!<%I$r\e(B .newsrc.eld \e$B$KJ]B8$9$k$+H]$+$r;XDj$7$^$9!#\e(B")
 (movemail \e$B$J$I\e(B) \e$B$r;H$$$?$$!"$H$$$&>l9g$K$O!"\e(B:program \e$B$r$$$&%-!<%o!<\e(B
 \e$B%I$r;XDj$7$F0J2<$NMM$K5-=R$7$^$9!#\e(B
 
 (movemail \e$B$J$I\e(B) \e$B$r;H$$$?$$!"$H$$$&>l9g$K$O!"\e(B:program \e$B$r$$$&%-!<%o!<\e(B
 \e$B%I$r;XDj$7$F0J2<$NMM$K5-=R$7$^$9!#\e(B
 
-        (pop :program \"movemail -pf po:%u %t %p\")
+       (pop :program \"movemail -pf po:%u %t %p\")
 
 mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
 \e$BCN$j$?$$>l9g$O!"0J2<$N%\%?%s$r%/%j%C%/$7$F$/$@$5$$!#\e(B(Info \e$B$N3:Ev2U=j\e(B
 
 mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
 \e$BCN$j$?$$>l9g$O!"0J2<$N%\%?%s$r%/%j%C%/$7$F$/$@$5$$!#\e(B(Info \e$B$N3:Ev2U=j\e(B
@@ -400,7 +385,7 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
      (param-save-passwd-3 . "\e$B4m81$@$+$i$d$a$H$/\e(B")
      (param-mail-source-1 . "\e$B%a!<%k<hF@@h$N>pJs\e(B"))))
 
      (param-save-passwd-3 . "\e$B4m81$@$+$i$d$a$H$/\e(B")
      (param-mail-source-1 . "\e$B%a!<%k<hF@@h$N>pJs\e(B"))))
 
-(defun gnus-ofsetup-get-message (symbol &optional lang)
+(defsubst gnus-ofsetup-gettext (symbol &optional lang)
   (setq lang (or lang gnus-offline-lang))
   (or
    (cdr (assq symbol (symbol-value
   (setq lang (or lang gnus-offline-lang))
   (or
    (cdr (assq symbol (symbol-value
@@ -411,119 +396,149 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
   (intern
    (completing-read (concat
                     msg
   (intern
    (completing-read (concat
                     msg
-                    (gnus-ofsetup-get-message 'completing-read-symbol-1))
+                    (gnus-ofsetup-gettext 'completing-read-symbol-1))
                    (mapcar
                    (mapcar
-                    (lambda (sym)
-                      (list (symbol-name sym)))
+                    #'(lambda (sym)
+                        (list (symbol-name sym)))
                     syms)
                    nil t nil)))
 
                     syms)
                    nil t nil)))
 
-(defun gnus-setup-for-offline ()
+(defun gnus-setup-for-offline (&optional force)
   "*Set up Gnus for offline environment."
   "*Set up Gnus for offline environment."
-  (interactive)
-  (unless (file-exists-p gnus-offline-setting-file)
+  (interactive "P")
+  (unless (and (file-exists-p gnus-offline-setting-file) (not force))
     (let (news-method
          mail-method agent-directory drafts-queue-type news-spool mail-spool
          use-miee MTA-type dialup-program dialup-program-arguments
          hangup-program hangup-program-arguments interval
     (let (news-method
          mail-method agent-directory drafts-queue-type news-spool mail-spool
          use-miee MTA-type dialup-program dialup-program-arguments
          hangup-program hangup-program-arguments interval
-         num-of-address i mail-source save-passwd)
+         num-of-address i n mail-source save-passwd)
       (setq news-method
            (gnus-ofsetup-completing-read-symbol
       (setq news-method
            (gnus-ofsetup-completing-read-symbol
-            (gnus-ofsetup-get-message 'setup-1)
+            (gnus-ofsetup-gettext 'setup-1)
             'nnagent 'nnspool))
       ;; Setting for gnus-agent.
       (if (eq news-method 'nnagent)
          (setq agent-directory
                (read-from-minibuffer
             'nnagent 'nnspool))
       ;; Setting for gnus-agent.
       (if (eq news-method 'nnagent)
          (setq agent-directory
                (read-from-minibuffer
-                (gnus-ofsetup-get-message 'setup-2) "~/News/agent")))
+                (gnus-ofsetup-gettext 'setup-2) "~/News/agent")))
       (setq mail-method 'nnmail)
       (setq dialup-program
            (read-file-name
       (setq mail-method 'nnmail)
       (setq dialup-program
            (read-file-name
-            (gnus-ofsetup-get-message 'setup-3)
+            (gnus-ofsetup-gettext 'setup-3)
             nil nil t))
       (if (string-match "^[ \t]*$" dialup-program)
          (setq dialup-program nil)
        (setq dialup-program-arguments
              (delete "" (split-string
                          (read-from-minibuffer
             nil nil t))
       (if (string-match "^[ \t]*$" dialup-program)
          (setq dialup-program nil)
        (setq dialup-program-arguments
              (delete "" (split-string
                          (read-from-minibuffer
-                          (gnus-ofsetup-get-message 'setup-4))
+                          (gnus-ofsetup-gettext 'setup-4))
                          "[\t ]+"))))
       (setq hangup-program
            (read-file-name
                          "[\t ]+"))))
       (setq hangup-program
            (read-file-name
-            (gnus-ofsetup-get-message 'setup-5)
+            (gnus-ofsetup-gettext 'setup-5)
             nil nil t))
       (if (string-match "^[ \t]*$" hangup-program)
          (setq hangup-program nil)
        (setq hangup-program-arguments
              (delete "" (split-string
                          (read-from-minibuffer
             nil nil t))
       (if (string-match "^[ \t]*$" hangup-program)
          (setq hangup-program nil)
        (setq hangup-program-arguments
              (delete "" (split-string
                          (read-from-minibuffer
-                          (gnus-ofsetup-get-message 'setup-6))
+                          (gnus-ofsetup-gettext 'setup-6))
                          "[\t ]+"))))
       (setq MTA-type (gnus-ofsetup-completing-read-symbol
                          "[\t ]+"))))
       (setq MTA-type (gnus-ofsetup-completing-read-symbol
-                     (gnus-ofsetup-get-message 'setup-7)
+                     (gnus-ofsetup-gettext 'setup-7)
                      'smtp 'sendmail))
       (if (eq news-method 'nnspool)
          (setq use-miee t)
                      'smtp 'sendmail))
       (if (eq news-method 'nnspool)
          (setq use-miee t)
-       (setq use-miee (y-or-n-p (gnus-ofsetup-get-message 'setup-8))))
+       (setq use-miee (y-or-n-p (gnus-ofsetup-gettext 'setup-8))))
       (if use-miee
          (progn
            ;; Setting for MIEE.
            (setq news-spool
                  (read-from-minibuffer
       (if use-miee
          (progn
            ;; Setting for MIEE.
            (setq news-spool
                  (read-from-minibuffer
-                  (gnus-ofsetup-get-message 'setup-9)
+                  (gnus-ofsetup-gettext 'setup-9)
                   "/usr/spool/news.out"))
            (setq mail-spool
                  (read-from-minibuffer
                   "/usr/spool/news.out"))
            (setq mail-spool
                  (read-from-minibuffer
-                  (gnus-ofsetup-get-message 'setup-10)
+                  (gnus-ofsetup-gettext 'setup-10)
                   "/usr/spool/mail.out"))
            (setq drafts-queue-type 'miee)
            (gnus-ofsetup-prepare gnus-ofsetup-prepare-for-miee))
        ;; Set drafts type gnus-agent.
        (setq drafts-queue-type 'agent))
                   "/usr/spool/mail.out"))
            (setq drafts-queue-type 'miee)
            (gnus-ofsetup-prepare gnus-ofsetup-prepare-for-miee))
        ;; Set drafts type gnus-agent.
        (setq drafts-queue-type 'agent))
-      ;; Set E-Mail Address and pop3 movemail type.
+      ;; Create a list of mail source specifiers.
       (setq num-of-address
       (setq num-of-address
-           (read-from-minibuffer (gnus-ofsetup-get-message 'setup-11)))
-      (setq i (string-to-int num-of-address))
+           (read-from-minibuffer (gnus-ofsetup-gettext 'setup-11)))
+      (setq i (setq n (string-to-int num-of-address)))
+      ;;
       (while (> i 0)
       (while (> i 0)
-       (let ((user (read-from-minibuffer (gnus-ofsetup-get-message 'setup-12)))
-             (server (read-from-minibuffer
-                      (gnus-ofsetup-get-message 'setup-13)))
-             (auth (completing-read
-                    (gnus-ofsetup-get-message 'setup-14)
-                    '(("password") ("apop")) nil t nil))
-             (islisp (y-or-n-p (gnus-ofsetup-get-message 'setup-15)))
-             source)
-         (if (not islisp)
-             (let ((prog (read-file-name (gnus-ofsetup-get-message 'setup-16)
-                                         exec-directory "movemail"))
-                   (args (read-from-minibuffer
-                          (gnus-ofsetup-get-message 'setup-17)
-                          "-pf")))
-               (setq source `(pop
-                              :user ,user
-                              :server ,server
-                              :program ,(format "%s %s %s %s %s"
-                                                prog
-                                                args
-                                                "po:%u"
-                                                "%t"
-                                                "%p"))))
-           (setq source `(pop
-                          :user ,user
-                          :server ,server)))
-         (setq mail-source
-               (nconc mail-source
-                      (list
-                       (if (string-equal "apop" auth)
-                           (nconc source '(:authentication apop))
-                         source)))))
+       (let* ((j (- n (1- i)))
+              (type (gnus-ofsetup-completing-read-symbol
+                     (format "<%d of %d> %s" j n
+                             (gnus-ofsetup-gettext 'setup-12))
+                     'pop 'imap 'file 'directory 'maildir))
+              user server authentication stream islisp source
+              prog args program path)
+         ;; Prepare.
+         (when (or (string= type "pop") (string= type "imap"))
+           (setq user (read-from-minibuffer
+                       (format "<%d of %d> %s" j n
+                               (gnus-ofsetup-gettext 'setup-13))))
+           (setq server (read-from-minibuffer
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-14)))))
+         (when (string= type "pop")
+           (setq authentication (gnus-ofsetup-completing-read-symbol
+                                 (format "<%d of %d> %s" j n
+                                         (gnus-ofsetup-gettext 'setup-15))
+                                 'password 'apop))
+           (setq islisp (y-or-n-p
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-16))))
+           (unless islisp
+             (setq prog (read-file-name
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-17))
+                         exec-directory "movemail"))
+             (setq args (read-from-minibuffer
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-18) "-pf")))
+             (setq program (format "%s %s %s %s %s"
+                                   prog args "po:%u" "%t" "%p"))))
+         (when (string= type "imap")
+           (setq stream (gnus-ofsetup-completing-read-symbol
+                         (format "<%d of %d> %s" j n
+                                 (gnus-ofsetup-gettext 'setup-19))
+                         'kerberos4 'starttls 'ssl 'network))
+           (setq authentication (gnus-ofsetup-completing-read-symbol
+                                 (format "<%d of %d> %s" j n
+                                         (gnus-ofsetup-gettext 'setup-14))
+                                 'kerberos4 'digest-md5 'cram-md5 'login
+                                 'anonymous)))
+         (when (string= type "file")
+           (setq path (read-file-name
+                       (format "<%d of %d> %s" j n
+                               (gnus-ofsetup-gettext 'setup-20)))))
+         (when (or (string= type "directory") (string= type "maildir"))
+           (setq path (read-file-name
+                       (format "<%d of %d> %s" j n
+                               (gnus-ofsetup-gettext 'setup-21)))))
+         ;; Now set a mail source specifier.
+         (setq source (list type))
+         (let (value)
+           (dolist (symbol '(path user server authentication stream program))
+             (when (setq value (symbol-value symbol))
+               (setq source (nconc source
+                                   (list (make-symbol (format ":%s" symbol))
+                                         value))))))
+         (setq mail-source (nconc mail-source (list source))))
        (setq i (1- i)))
       (setq save-passwd
        (setq i (1- i)))
       (setq save-passwd
-           (y-or-n-p (gnus-ofsetup-get-message 'setup-18)))
+           (y-or-n-p (gnus-ofsetup-gettext 'setup-22)))
       ;;
       (gnus-ofsetup-prepare gnus-ofsetup-update-setting-file)))
   (load gnus-offline-setting-file))
 
       ;;
       (gnus-ofsetup-prepare gnus-ofsetup-update-setting-file)))
   (load gnus-offline-setting-file))
 
+
 ;; Suppport for customizing gnus-ofsetup parameters.
 
 (defvar sendmail-to-spool-directory)
 ;; Suppport for customizing gnus-ofsetup parameters.
 
 (defvar sendmail-to-spool-directory)
@@ -532,60 +547,60 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
 (defun gnus-ofsetup-find-parameters ()
   "Return the each current value of gnus-offline parameters."
   `((news-method
 (defun gnus-ofsetup-find-parameters ()
   "Return the each current value of gnus-offline parameters."
   `((news-method
-     (choice :tag ,(gnus-ofsetup-get-message 'param-news-method-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-news-method-1)
             :value ,gnus-offline-news-fetch-method
             :value ,gnus-offline-news-fetch-method
-            (const :tag ,(gnus-ofsetup-get-message 'param-news-method-2)
+            (const :tag ,(gnus-ofsetup-gettext 'param-news-method-2)
                    nnagent)
                    nnagent)
-            (const :tag ,(gnus-ofsetup-get-message 'param-news-method-3)
+            (const :tag ,(gnus-ofsetup-gettext 'param-news-method-3)
                    nnspool))
                    nnspool))
-     ,(gnus-ofsetup-get-message 'param-news-method-4))
+     ,(gnus-ofsetup-gettext 'param-news-method-4))
 
     (dialup-program
 
     (dialup-program
-     (choice :tag ,(gnus-ofsetup-get-message 'param-dialup-program-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-dialup-program-1)
             :value ,gnus-offline-dialup-program
             :value ,gnus-offline-dialup-program
-            (string :tag ,(gnus-ofsetup-get-message 'param-dialup-program-2))
-            (const :tag ,(gnus-ofsetup-get-message
+            (string :tag ,(gnus-ofsetup-gettext 'param-dialup-program-2))
+            (const :tag ,(gnus-ofsetup-gettext
                           'param-dialup-program-3) nil))
                           'param-dialup-program-3) nil))
-     ,(gnus-ofsetup-get-message 'param-dialup-program-4))
+     ,(gnus-ofsetup-gettext 'param-dialup-program-4))
 
     (dialup-program-arguments
 
     (dialup-program-arguments
-     (repeat :tag ,(gnus-ofsetup-get-message 'param-dialup-program-arg-1)
+     (repeat :tag ,(gnus-ofsetup-gettext 'param-dialup-program-arg-1)
             :value ,gnus-offline-dialup-program-arguments
             :value ,gnus-offline-dialup-program-arguments
-            (string :tag ,(gnus-ofsetup-get-message
+            (string :tag ,(gnus-ofsetup-gettext
                            'param-dialup-program-arg-2)))
                            'param-dialup-program-arg-2)))
-     ,(gnus-ofsetup-get-message 'param-dialup-program-arg-3))
+     ,(gnus-ofsetup-gettext 'param-dialup-program-arg-3))
 
     (hangup-program
 
     (hangup-program
-     (choice :tag ,(gnus-ofsetup-get-message 'param-hangup-program-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-hangup-program-1)
             :value ,gnus-offline-hangup-program
             :value ,gnus-offline-hangup-program
-            (string :tag ,(gnus-ofsetup-get-message 'param-hangup-program-2))
-            (const :tag ,(gnus-ofsetup-get-message 'param-hangup-program-3)
+            (string :tag ,(gnus-ofsetup-gettext 'param-hangup-program-2))
+            (const :tag ,(gnus-ofsetup-gettext 'param-hangup-program-3)
                    nil))
                    nil))
-     ,(gnus-ofsetup-get-message 'param-hangup-program-4))
+     ,(gnus-ofsetup-gettext 'param-hangup-program-4))
 
     (hangup-program-arguments
 
     (hangup-program-arguments
-     (repeat :tag ,(gnus-ofsetup-get-message 'param-hangup-program-arg-1)
+     (repeat :tag ,(gnus-ofsetup-gettext 'param-hangup-program-arg-1)
             :value ,gnus-offline-hangup-program-arguments
             :value ,gnus-offline-hangup-program-arguments
-            (string :tag ,(gnus-ofsetup-get-message
+            (string :tag ,(gnus-ofsetup-gettext
                            'param-hangup-program-arg-2)))
                            'param-hangup-program-arg-2)))
-     ,(gnus-ofsetup-get-message 'param-hangup-program-arg-3))
+     ,(gnus-ofsetup-gettext 'param-hangup-program-arg-3))
 
     (interval
 
     (interval
-     (integer :tag ,(gnus-ofsetup-get-message 'param-interval-1)
+     (integer :tag ,(gnus-ofsetup-gettext 'param-interval-1)
              :value ,gnus-offline-interval-time)
              :value ,gnus-offline-interval-time)
-     ,(gnus-ofsetup-get-message 'param-interval-2))
+     ,(gnus-ofsetup-gettext 'param-interval-2))
 
     (drafts-queue-type
 
     (drafts-queue-type
-     (choice :tag ,(gnus-ofsetup-get-message 'param-drafts-queue-type-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-drafts-queue-type-1)
             :value ,gnus-offline-drafts-queue-type
             :value ,gnus-offline-drafts-queue-type
-            (const :tag ,(gnus-ofsetup-get-message 'param-drafts-queue-type-2)
+            (const :tag ,(gnus-ofsetup-gettext 'param-drafts-queue-type-2)
                    agent)
                    agent)
-            (const :tag ,(gnus-ofsetup-get-message 'param-drafts-queue-type-3)
+            (const :tag ,(gnus-ofsetup-gettext 'param-drafts-queue-type-3)
                    miee))
                    miee))
-     ,(gnus-ofsetup-get-message 'param-drafts-queue-type-4))
+     ,(gnus-ofsetup-gettext 'param-drafts-queue-type-4))
 
     (mail-spool
 
     (mail-spool
-     (directory :tag ,(gnus-ofsetup-get-message 'param-mail-spool-1)
+     (directory :tag ,(gnus-ofsetup-gettext 'param-mail-spool-1)
                :value ,(cond ((and (boundp 'sendmail-to-spool-directory)
                                    sendmail-to-spool-directory)
                               sendmail-to-spool-directory)
                :value ,(cond ((and (boundp 'sendmail-to-spool-directory)
                                    sendmail-to-spool-directory)
                               sendmail-to-spool-directory)
@@ -593,7 +608,7 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
                               "/usr/spool/mail.out"))))
 
     (news-spool
                               "/usr/spool/mail.out"))))
 
     (news-spool
-     (directory :tag ,(gnus-ofsetup-get-message 'param-news-spool-1)
+     (directory :tag ,(gnus-ofsetup-gettext 'param-news-spool-1)
                :value ,(cond ((and (boundp 'news-spool-request-post-directory)
                                    news-spool-request-post-directory)
                               news-spool-request-post-directory)
                :value ,(cond ((and (boundp 'news-spool-request-post-directory)
                                    news-spool-request-post-directory)
                               news-spool-request-post-directory)
@@ -601,26 +616,26 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
                               "/usr/spool/news.out"))))
 
     (MTA-type
                               "/usr/spool/news.out"))))
 
     (MTA-type
-     (choice :tag ,(gnus-ofsetup-get-message 'param-MTA-type-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-MTA-type-1)
             :value ,gnus-offline-MTA-type
             :value ,gnus-offline-MTA-type
-            (const :tag ,(gnus-ofsetup-get-message 'param-MTA-type-2) smtp)
-            (const :tag ,(gnus-ofsetup-get-message 'param-MTA-type-3)
+            (const :tag ,(gnus-ofsetup-gettext 'param-MTA-type-2) smtp)
+            (const :tag ,(gnus-ofsetup-gettext 'param-MTA-type-3)
                    sendmail))
                    sendmail))
-     ,(gnus-ofsetup-get-message 'param-MTA-type-4))
+     ,(gnus-ofsetup-gettext 'param-MTA-type-4))
 
     (save-passwd
 
     (save-passwd
-     (choice :tag ,(gnus-ofsetup-get-message 'param-save-passwd-1)
+     (choice :tag ,(gnus-ofsetup-gettext 'param-save-passwd-1)
             :value ,(if (memq 'mail-source-password-cache gnus-variable-list)
                         t
             :value ,(if (memq 'mail-source-password-cache gnus-variable-list)
                         t
-                        nil)
-            (const :tag ,(gnus-ofsetup-get-message 'param-save-passwd-2) t)
-            (const :tag ,(gnus-ofsetup-get-message 'param-save-passwd-3) nil))
-     ,(gnus-ofsetup-get-message 'param-save-passwd-4))
+                      nil)
+            (const :tag ,(gnus-ofsetup-gettext 'param-save-passwd-2) t)
+            (const :tag ,(gnus-ofsetup-gettext 'param-save-passwd-3) nil))
+     ,(gnus-ofsetup-gettext 'param-save-passwd-4))
 
     (mail-source
 
     (mail-source
-     (sexp :tag ,(gnus-ofsetup-get-message 'param-mail-source-1)
+     (sexp :tag ,(gnus-ofsetup-gettext 'param-mail-source-1)
           :value ,gnus-offline-mail-source)
           :value ,gnus-offline-mail-source)
-     ,(gnus-ofsetup-get-message 'param-mail-source-2))))
+     ,(gnus-ofsetup-gettext 'param-mail-source-2))))
 
 (defvar gnus-ofsetup-params)
 
 
 (defvar gnus-ofsetup-params)
 
@@ -628,42 +643,42 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
   "Edit the gnus-offline parameters."
   (interactive)
   (let* ((params (gnus-ofsetup-find-parameters))
   "Edit the gnus-offline parameters."
   (interactive)
   (let* ((params (gnus-ofsetup-find-parameters))
-        (types (mapcar (lambda (entry)
-                        `(cons :format "%v%h\n"
-                               :doc ,(nth 2 entry)
-                               (const :format "" ,(nth 0 entry))
-                               ,(nth 1 entry)))
+        (types (mapcar #'(lambda (entry)
+                           `(cons :format "%v%h\n"
+                                  :doc ,(nth 2 entry)
+                                  (const :format "" ,(nth 0 entry))
+                                  ,(nth 1 entry)))
                        params)))
                        params)))
-  (kill-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
-  (switch-to-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
-  (gnus-custom-mode)
-  (widget-insert (gnus-ofsetup-get-message 'customize-1))
-  (widget-create 'push-button
-                  :tag (gnus-ofsetup-get-message 'customize-2)
-                  :help-echo (gnus-ofsetup-get-message 'customize-3)
+    (kill-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
+    (switch-to-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
+    (gnus-custom-mode)
+    (widget-insert (gnus-ofsetup-gettext 'customize-1))
+    (widget-create 'push-button
+                  :tag (gnus-ofsetup-gettext 'customize-2)
+                  :help-echo (gnus-ofsetup-gettext 'customize-3)
                   :action 'gnus-ofsetup-customize-done)
                   :action 'gnus-ofsetup-customize-done)
-  (widget-insert "\n\n")
-  (make-local-variable 'gnus-ofsetup-params)
-  (setq gnus-ofsetup-params
-       (widget-create 'group
-                      `(set :inline t
-                            :greedy t
-                            :tag ,(gnus-ofsetup-get-message 'customize-4)
-                            :format "%t:\n%h%v"
-                            :doc ,(gnus-ofsetup-get-message 'customize-5)
-                            ,@types)))
-
-  (widget-create 'info-link
-                :help-echo (gnus-ofsetup-get-message 'customize-6)
-                :tag "<Info> mail sources"
-                (if (string-match "^ja" gnus-offline-lang)
-                    "(gnus-ja)Mail Sources"
-                  "(gnus)Mail Sources"))
-
-  (use-local-map widget-keymap)
-  (local-set-key "q" 'bury-buffer)
-  (widget-setup)
-  (goto-char (point-min))))
+    (widget-insert "\n\n")
+    (make-local-variable 'gnus-ofsetup-params)
+    (setq gnus-ofsetup-params
+         (widget-create 'group
+                        `(set :inline t
+                              :greedy t
+                              :tag ,(gnus-ofsetup-gettext 'customize-4)
+                              :format "%t:\n%h%v"
+                              :doc ,(gnus-ofsetup-gettext 'customize-5)
+                              ,@types)))
+
+    (widget-create 'info-link
+                  :help-echo (gnus-ofsetup-gettext 'customize-6)
+                  :tag "<Info> mail sources"
+                  (if (string-match "^ja" gnus-offline-lang)
+                      "(gnus-ja)Mail Sources"
+                    "(gnus)Mail Sources"))
+
+    (use-local-map widget-keymap)
+    (local-set-key "q" 'bury-buffer)
+    (widget-setup)
+    (goto-char (point-min))))
 
 (defun gnus-ofsetup-customize-done (&rest ignore)
   "Apply changes and bury the buffer."
 
 (defun gnus-ofsetup-customize-done (&rest ignore)
   "Apply changes and bury the buffer."
@@ -692,28 +707,27 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
        (save-passwd (and (memq 'mail-source-password-cache gnus-variable-list)
                          t)))
     (if (null params)
        (save-passwd (and (memq 'mail-source-password-cache gnus-variable-list)
                          t)))
     (if (null params)
-       (gnus-message 4 (gnus-ofsetup-get-message 'customize-done-1))
-      (mapc #'(lambda (el)
-               (let ((sym (car el))
-                     (val (cdr el)))
-                 (set sym val)
-                 (cond ((eq sym 'news-method)
-                        (if (eq val 'nnspool)
-                            (setq use-miee t)))
-                       ((eq sym 'drafts-queue-type)
-                        (setq use-miee
-                              (if (eq val 'miee) t nil)))
-                       ((eq sym 'save-passwd)
-                        (if val
-                            (add-to-list 'gnus-variable-list
-                                         'mail-source-password-cache)
-                          (setq gnus-variable-list
-                                (delq 'mail-source-password-cache
-                                      gnus-variable-list)))))))
-           params)
+       (gnus-message 4 (gnus-ofsetup-gettext 'customize-done-1))
+      (let (symbol value)
+       (dolist (elem params)
+         (setq symbol (car elem)
+               value (cdr elem))
+         (set symbol value)
+         (cond ((eq symbol 'news-method)
+                (if (eq value 'nnspool)
+                    (setq use-miee t)))
+               ((eq symbol 'drafts-queue-type)
+                (setq use-miee (eq value 'miee)))
+               ((eq symbol 'save-passwd)
+                (if value
+                    (add-to-list 'gnus-variable-list
+                                 'mail-source-password-cache)
+                  (setq gnus-variable-list
+                        (delq 'mail-source-password-cache
+                              gnus-variable-list)))))))
       (if (and (eq news-method 'nnspool)
               (not (eq drafts-queue-type 'miee)))
       (if (and (eq news-method 'nnspool)
               (not (eq drafts-queue-type 'miee)))
-         (error (gnus-ofsetup-get-message 'customize-done-2)))
+         (error (gnus-ofsetup-gettext 'customize-done-2)))
       (if use-miee
          (gnus-ofsetup-prepare gnus-ofsetup-prepare-for-miee))
       (gnus-ofsetup-prepare gnus-ofsetup-update-setting-file)
       (if use-miee
          (gnus-ofsetup-prepare gnus-ofsetup-prepare-for-miee))
       (gnus-ofsetup-prepare gnus-ofsetup-update-setting-file)
@@ -721,4 +735,23 @@ mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
   (bury-buffer)
   (switch-to-buffer gnus-group-buffer))
 
   (bury-buffer)
   (switch-to-buffer gnus-group-buffer))
 
-;; gnus-ofsetup.el Ends here.
+
+;;; Code for making Gnus and Gnus Offline cooperate with each other.
+
+;; Advice.
+(defadvice gnus (around gnus-ofsetup-advice activate preactivate)
+  "Setup offline environment when Gnus is invoked."
+  (require 'gnus-offline) ad-do-it (gnus-offline-setup))
+
+;; Miscellaneous settings.
+
+(setq gnus-nntp-service nil)
+(setq gnus-nntp-server nil)
+(eval-after-load "gnus-start"
+  '(add-hook 'gnus-after-getting-new-news-hook 'gnus-offline-after-get-new-news))
+(eval-after-load "message"
+  '(add-hook 'message-send-hook 'gnus-offline-message-add-header))
+
+(provide 'gnus-ofsetup)
+
+;;; gnus-ofsetup.el ends here