(gnus-ofsetup-customize): Info link to gnus-ja instead of gnus if Japanese
[elisp/gnus.git-] / lisp / gnus-ofsetup.el
1 ;;; gnus-ofsetup.el --- Setup advisor for Offline reading for Mail/News.
2 ;;;
3 ;;; $Id: gnus-ofsetup.el,v 1.1.2.19.4.8 1999-10-06 16:02:53 czkmt Exp $
4 ;;;
5 ;;; Copyright (C) 1998 Tatsuya Ichikawa
6 ;;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
7 ;;;      Tsukamoto Tetsuo <czkmt@remus.dti.ne.jp>
8 ;;;
9 ;;; This file is part of Semi-gnus.
10 ;;;
11 ;;; GNU Emacs is free software; you can redistribute it and/or modify
12 ;;; it under the terms of the GNU General Public License as published by
13 ;;; the Free Software Foundation; either version 2, or (at your option)
14 ;;; any later version.
15
16 ;;; GNU Emacs is distributed in the hope that it will be useful,
17 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ;;; GNU General Public License for more details.
20
21 ;;; You should have received a copy of the GNU General Public License
22 ;;; along with GNU Emacs; see the file COPYING.  If not, write to the
23 ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24 ;;; Boston, MA 02111-1307, USA.
25 ;;;
26 ;;;; Commentary:
27 ;;; How to use.
28 ;;;
29 ;;;      M-x load[RET]gnus-ofsetup
30 ;;;      M-x gnus-setup-for-offline
31 ;;;
32
33 ;;; Code:
34
35 (eval-and-compile
36   (defvar gnus-offline-lang
37     (cond ((and (featurep 'meadow)
38                 (string= current-language-environment "Japanese"))
39            "ja_complete")
40           ((and (boundp 'current-language-environment)
41                 (string= current-language-environment "Japanese"))
42            "ja")
43           (t
44            "en"))
45     "This variable decides which language will be used for display."))
46
47 (eval-when-compile
48   (require 'gnus-offline))
49
50 (defvar gnus-offline-setting-file
51   (let ((user (user-login-name))
52         (real-user (user-real-login-name)))
53     (if (string= user real-user)
54         "~/.gnus-offline.el"
55       ;; Seems it is after "su".
56       (let ((file (concat "~" user "/.gnus-offline.el"))
57             (real-file (concat "~" real-user "/.gnus-offline.el")))
58         (cond ((file-exists-p real-file)
59                real-file)
60               ((file-exists-p file)
61                file)
62               (t
63                real-file))))))
64
65 (eval-when-compile
66   (defvar gnus-ofsetup-prepare-for-miee
67     '(;; Spool directory setting - MIEE.
68       (setq mail-spool (or mail-spool "/usr/spool/mail.out"))
69       (setq news-spool (or news-spool "/usr/spool/news.out"))
70       (condition-case nil
71           (progn
72             (if (not (file-exists-p mail-spool))
73                 (make-directory mail-spool t))
74             (if (not (file-exists-p news-spool))
75                 (make-directory news-spool t)))
76         (error
77          (error (gnus-ofsetup-get-message 'prepare-miee-1))))))
78
79   (defvar gnus-ofsetup-update-setting-file
80     '((save-excursion
81         (set-buffer (get-buffer-create "* Setting"))
82         (erase-buffer)
83         (insert ";;\n")
84         (insert ";; This file is created by gnus-ofsetup.el\n")
85         (insert ";; Creation date : " (current-time-string) "\n")
86         (insert ";;\n")
87
88         ;; write Basic setting
89         (insert "(setq gnus-offline-news-fetch-method '"
90                 (prin1-to-string news-method) ")\n")
91         (insert "(setq gnus-offline-mail-fetch-method '"
92                 (prin1-to-string mail-method) ")\n")
93
94         ;; write dialup/hangup program and options.
95         (insert "(setq gnus-offline-dialup-program "
96                 (prin1-to-string dialup-program) ")\n")
97         (if (stringp dialup-program)
98             (insert "(setq gnus-offline-dialup-program-arguments '"
99                     (prin1-to-string dialup-program-arguments) ")\n"))
100         (insert "(setq gnus-offline-hangup-program "
101                 (prin1-to-string hangup-program) ")\n")
102         (if (stringp hangup-program)
103             (insert "(setq gnus-offline-hangup-program-arguments '"
104                     (prin1-to-string hangup-program-arguments) ")\n"))
105
106         (if (integerp interval)
107             (insert "(setq gnus-offline-interval-time "
108                     (prin1-to-string interval) ")\n"))
109
110         ;; write setting about MIEE.
111         (when use-miee
112           (insert "(setq sendmail-to-spool-directory "
113                   (prin1-to-string mail-spool) ")\n")
114           (insert "(setq news-spool-request-post-directory "
115                   (prin1-to-string news-spool) ")\n")
116           (insert "(if (not (boundp 'miee-version))
117     (load \"miee\"))\n")
118           (insert "(setq message-send-news-function 'gnspool-request-post)\n"))
119
120         ;; write setting about nnspool and gnus-agent.
121         (if (eq news-method 'nnspool)
122             (insert "(message-offline-state)\n")
123           (insert "(setq gnus-agent-directory "
124                   (prin1-to-string agent-directory) ")\n"))
125
126         ;; write setting about queue type -- MIEE or nnagent.
127         (insert "(setq gnus-offline-drafts-queue-type '"
128                 (prin1-to-string drafts-queue-type) ")\n")
129         (insert "(setq gnus-offline-MTA-type '"
130                 (prin1-to-string MTA-type) ")\n")
131
132         ;; Offline setting for gnus-nntp-*
133         (insert "(setq gnus-nntp-service nil)\n")
134         (insert "(setq gnus-nntp-server nil)\n")
135
136         ;; Write setting about hooks.
137         (insert (format "%s %s %s\n"
138                         "(add-hook"
139                         "'gnus-group-mode-hook"
140                         "'gnus-offline-processed-by-timer t)"))
141         (insert (format "%s %s %s\n"
142                         "(add-hook"
143                         "'gnus-group-mode-hook"
144                         "'gnus-offline-error-check t)"))
145         (insert (format "%s %s %s\n"
146                         "(add-hook"
147                         "'gnus-after-getting-new-news-hook"
148                         "'gnus-offline-after-get-new-news)"))
149         (insert (format "%s %s %s\n"
150                         "(add-hook"
151                         "'gnus-after-getting-news-hook"
152                         "'gnus-offline-after-get-new-news)"))
153         (when (eq news-method 'nnspool)
154           (insert (format "%s %s %s\n"
155                           "(add-hook"
156                           "'after-getting-news-hook"
157                           "'gnus-offline-nnspool-hangup-line)"))
158           (insert (format "%s %s %s\n"
159                           "(add-hook"
160                           "'gnus-before-startup-hook"
161                           "(lambda () (setq nnmail-spool-file nil)
162            (setq mail-sources nil)))")))
163         (insert (format "%s %s %s\n"
164                         "(add-hook"
165                         "'message-send-hook"
166                         "'gnus-offline-message-add-header)"))
167         (insert "(autoload 'gnus-offline-setup \"gnus-offline\")\n")
168         (insert "(add-hook 'gnus-load-hook 'gnus-offline-setup)\n")
169
170         ;; Write stting about mail-source.el
171         (insert "(setq gnus-offline-mail-source '"
172                 (prin1-to-string mail-source) ")\n")
173         (insert "(setq mail-sources gnus-offline-mail-source)\n")
174         (insert "(require 'read-passwd)\n")
175         (insert "(setq mail-source-read-passwd 'read-pw-read-passwd)\n")
176         (insert (format "%s %s %s\n"
177                         "(add-hook"
178                         "'gnus-setup-news-hook"
179                         "'read-pw-set-mail-source-passwd-cache)"))
180         (if save-passwd
181             (insert "(add-hook 'gnus-setup-news-hook
182           (lambda ()
183             (add-to-list 'gnus-variable-list 'mail-source-password-cache)))\n"))
184
185         ;;
186         (write-region (point-min) (point-max) gnus-offline-setting-file))
187       (kill-buffer "* Setting")))
188
189   (defmacro gnus-ofsetup-prepare (list)
190     (let ((forms (symbol-value list)))
191       `(progn ,@forms))))
192
193 (defvar gnus-ofsetup-resource-en
194   '((prepare-miee-1
195      . "Making directories failed. Set mail/news spool directories properly.")
196     (completing-read-symbol-1 . " (TAB to completion): ")
197     (setup-1 . "Method for offline News reading")
198     (setup-2 . "Agent directory: ")
199     (setup-3 . "Dialup program (give a null string if you do not use): ")
200     (setup-4 . "Dialup program options: ")
201     (setup-5 . "Hangup program (give a null string if you do not use): ")
202     (setup-6 . "Hangup program options: ")
203     (setup-7 . "Select MTA type for sending mail")
204     (setup-8 . "Use MIEE post/send message ")
205     (setup-9 . "News spool directory for sending: ")
206     (setup-10 . "Mail spool directory for sending: ")
207     (setup-11 . "How many e-mail address do you have: ")
208     (setup-12 . "Mail Account name : ")
209     (setup-13 . "Mail server : ")
210     (setup-14 . "Authentification Method (TAB to completion): ")
211     (setup-15 . "Do you use pop3.el to fetch mail? ")
212     (setup-16 . "movemail program name: ")
213     (setup-17 . "movemail options: ")
214     (setup-18 . "Do you save password information to newsrc file? ")
215     (param-news-method-1 . "News Method")
216     (param-news-method-2 . "Gnus Agent")
217     (param-news-method-3 . "nnspool")
218     (param-news-method-4 . "\
219 Method to fetch news articles.")
220     (param-dialup-program-1 . "Dialup Program")
221     (param-dialup-program-2 . "Use program..")
222     (param-dialup-program-3 . "Don't auto-dial.")
223     (param-dialup-program-4 . "\
224 Program which does dial.")
225     (param-dialup-program-arg-1 . "Dialup Program Arguments")
226     (param-dialup-program-arg-2 . "Argument")
227     (param-dialup-program-arg-3 . "\
228 Program arguments of gnus-offline-dialup-program.")
229     (param-hangup-program-1 . "Hangup Program")
230     (param-hangup-program-2 . "Use program..")
231     (param-hangup-program-3 . "Don't auto-hangup.")
232     (param-hangup-program-4 . "\
233 Program which does hangup.")
234     (param-hangup-program-arg-1 . "Hangup Program Arguments")
235     (param-hangup-program-arg-2 . "Argument")
236     (param-hangup-program-arg-3 . "\
237 Program arguments of gnus-offline-hangup-program.")
238     (param-interval-1 . "Interval between Jobs")
239     (param-interval-2 . "\
240 Interval time(minutes) to do online jobs.
241 If set to 0 , timer call is disabled.")
242     (param-drafts-queue-type-1 . "Drafts Queue Type")
243     (param-drafts-queue-type-2 . "Gnus Draft for queuing.")
244     (param-drafts-queue-type-3 . "I prefer MIEE for queuing.")
245     (param-drafts-queue-type-4 . "\
246 Type of queue used for draft messages.
247
248 If the select method for news is nnspool, you must choose MIEE.
249 MIEE is another library for offline messaging. It isn't part of
250 Semi-gnus. If you want to know about MIEE, see README-offline.{en,ja}.")
251     (param-mail-spool-1 . "Mail Spool Directory for MIEE")
252     (param-news-spool-1 . "News Spool Directory for MIEE")
253     (param-MTA-type-1 . "MTA Type")
254     (param-MTA-type-2 . "Use smtp.el")
255     (param-MTA-type-3 . "Use sendmail")
256     (param-MTA-type-4 . "\
257 Type of MTA used for sending mail.")
258     (param-save-passwd-1 . "Save Password in Startup File")
259     (param-save-passwd-2 . "OK, I'm sure it's safe.")
260     (param-save-passwd-3 . "No way, it's too dangerous!")
261     (param-save-passwd-4 . "\
262 Whether you want your POP passwords written in .newsrc.eld or not.")
263     (param-mail-source-1 . "Mail Sources")
264     (param-mail-source-2 . "\
265 Information of mail sources. Actually, a list of `Mail Source Specifiers'.
266
267 The format of this variable is just the same as `mail-sources' (or
268 `nnmail-spool-file' which seems obsolete).
269
270 `Mail Source Specifiers' can take a lot of keywords. For example,
271 if you want to use movemail instead of pop3.el which comes with
272 Gnus, you can set a specifier using the kerword :program as shown
273 below:
274
275           (pop :program \"movemail -pf po:%u %t %p\")
276
277 If you want to know more about mail source specifiers and keywords,
278 click the button below.")
279     (customize-1 . "Customize the Gnus Offline Parameters, and press ")
280     (customize-2 . "done")
281     (customize-3 . "Push me when done customizing.")
282     (customize-4 . "Parameters")
283     (customize-5 . "\
284 These parameters will be saved in ~/.gnus-offline.el.
285
286 Note: Touching these parameters may require Gnus or even Emacs to be
287 restarted.")
288     (customize-6 . "Push me to learn more.")
289     (customize-done-1 . "(No changes need to be saved)")
290     (customize-done-2
291      . "Invalid parameters. Check the news method and drafts queue type.")))
292
293 (defvar gnus-ofsetup-resource-ja
294   '((prepare-miee-1
295      . "\e$B%G%#%l%/%H%j$,:n$l$^$;$s!#%9%W!<%k$N@_Dj$r@5$7$/$7$F$/$@$5$$!#\e(B")
296     (completing-read-symbol-1 . "(TAB \e$B$GJd40$7$^$9\e(B): ")
297     (setup-1 . "\e$B%*%U%i%$%s$G%K%e!<%9$rFI$`J}K!$rA*$s$G$/$@$5$$\e(B ")
298     (setup-2 . "Gnus Agent \e$B$N%G%#%l%/%H%j\e(B: ")
299     (setup-3
300      . "\e$B%@%$%d%k@\B3%W%m%0%i%`L>\e(B (\e$B;H$o$J$$>l9g$O6uJ8;zNs$rJV$7$F2<$5$$\e(B): ")
301     (setup-4 . "\e$B%@%$%d%k@\B3%W%m%0%i%`$N0z?t\e(B: ")
302     (setup-5
303      . "\e$B%@%$%d%k@ZCG%W%m%0%i%`L>\e(B (\e$B;H$o$J$$>l9g$O6uJ8;zNs$rJV$7$F2<$5$$\e(B): ")
304     (setup-6 . "\e$B%@%$%d%k@ZCG%W%m%0%i%`$N0z?t\e(B: ")
305     (setup-7 . "\e$B%a!<%kAw?.$K;H$&\e(B MTA \e$B$rA*$s$G2<$5$$\e(B ")
306     (setup-8 . "\e$B%a%C%;!<%8$NAw?.$K\e(B MIEE \e$B$r;H$$$^$9$+\e(B? ")
307     (setup-9 . "\e$B%K%e!<%9$N%9%W!<%k%G%#%l%/%H%j\e(B: ")
308     (setup-10 . "\e$B%a!<%k$N%9%W!<%k%G%#%l%/%H%j\e(B: ")
309     (setup-11 . "\e$B%a!<%k%"%+%&%s%H$N?t$rEz$($F$/$@$5$$\e(B: ")
310     (setup-12 . "\e$B%a!<%k$N%"%+%&%s%HL>\e(B: ")
311     (setup-13 . "\e$B$=$N%"%+%&%s%H$N$"$k%a!<%k%5!<%PL>\e(B: ")
312     (setup-14 . "\e$B$=$N%5!<%P$G$NG'>ZJ}<0$O\e(B? (TAB \e$B$GJd40$7$^$9\e(B): ")
313     (setup-15 . "\e$B%a!<%k$N<u?.$K$O\e(B pop3.el \e$B$r;H$$$^$9$+\e(B? ")
314     (setup-16 . "movemail \e$B%W%m%0%i%`$NL>A0\e(B: ")
315     (setup-17 . "movemail \e$B%W%m%0%i%`$KEO$90z?t\e(B: ")
316     (setup-18 . "newsrc \e$B%U%!%$%k$K\e(B POP \e$B%Q%9%o!<%I$rJ]B8$7$^$9$+\e(B? ")
317     
318     (param-news-method-4 . "\
319 \e$B%K%e!<%95-;v$r<hF@$9$kJ}K!$G$9!#\e(B")
320     (param-dialup-program-4 . "\
321 \e$B<+F0%@%$%d%k@\B3$K;H$&%W%m%0%i%`!#\e(B")
322     (param-dialup-program-arg-3 . "\
323 \e$B%@%$%d%k@\B3%W%m%0%i%`$KEO$90z?t!#\e(B")
324     (param-hangup-program-4 . "\
325 \e$B<+F0%@%$%d%k@ZCG$K;H$&%W%m%0%i%`!#\e(B")
326     (param-hangup-program-arg-3 . "\
327 \e$B%@%$%d%k@ZCG%W%m%0%i%`$KEO$90z?t!#\e(B")
328     (param-interval-2 . "\
329 \e$BAw<u?.%8%g%V$r9T$&4V3V!#J,C10L$G;XDj$7$^$9!#\e(B
330
331 \e$B$3$l$r\e(B 0 \e$B$K@_Dj$9$k$H<+F0Aw<u?.5!G=$O%*%U$K$J$j$^$9!#\e(B")
332     (param-drafts-queue-type-4 . "\
333 \e$B%I%i%U%H5-;v$rJ]B8$9$k%-%e!<$N<oN`$r;XDj$7$^$9!#\e(B
334
335 \e$B%K%e!<%9$N9VFI<jCJ$,\e(B nnspool \e$B$N>l9g!"\e(BMIEE \e$B$r;XDj$9$kI,MW$,$"$j$^$9!#\e(B
336 MIEE \e$B$O%*%U%i%$%s$G$N%a!<%k\e(B/\e$B%K%e!<%9Aw?.5!G=$rDs6!$9$k%i%$%V%i%j$G$9$,!"\e(B
337 Semi-gnus \e$B$K$OIUB0$7$F$$$^$;$s!#\e(BMIEE \e$B$K$D$$$FCN$j$?$$>l9g$O\e(B
338 README-offline.{en,ja} \e$B$r;2>H$7$F$/$@$5$$!#\e(B")
339     (param-MTA-type-4 . "\
340 MTA \e$B$O%a!<%k$NAw?.$r<u$1;}$D%W%m%0%i%`$G$9!#$=$N<oN`$r;XDj$7$^$9!#\e(B")
341     (param-save-passwd-4 . "\
342 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")
343     (param-mail-source-2 . "\
344 \e$B%a!<%k<hF@@h$d<hF@J}K!$r;XDj$7$^$9!#\e(B
345
346 \e$B$3$N%*%W%7%g%s$N=q<0$O\e(B `mail-sources' \e$B$H$$$&JQ?t$HF1$8$G$"$j!"\e(B
347 `mail source specifier' \e$B$H8F$P$l$k$b$N$N%j%9%H$H$7$F5-=R$7$^$9!#\e(B
348
349 \e$B3F!9$N\e(B `mail source specifier' \e$B$K$O?'!9$J%-!<%o!<%I$r;XDj$9$k$3$H$,\e(B
350 \e$B$G$-$^$9!#Nc$($P%a!<%k$N<hF@$K$O\e(B pop3.el \e$B$NBe$o$j$K30It%W%m%0%i%`\e(B
351 (movemail \e$B$J$I\e(B) \e$B$r;H$$$?$$!"$H$$$&>l9g$K$O!"\e(B:program \e$B$r$$$&%-!<%o!<\e(B
352 \e$B%I$r;XDj$7$F0J2<$NMM$K5-=R$7$^$9!#\e(B
353
354         (pop :program \"movemail -pf po:%u %t %p\")
355
356 mail source specifier \e$B$H$+>e5-$N$h$&$J%-!<%o!<%I$K$D$$$F$b$C$H$h$/\e(B
357 \e$BCN$j$?$$>l9g$O!"0J2<$N%\%?%s$r%/%j%C%/$7$F$/$@$5$$!#\e(B(Info \e$B$N3:Ev2U=j\e(B
358 \e$B$X$N%j%s%/$K$J$C$F$$$^$9!#\e(B)" )
359
360      (customize-1
361       . "Gnus Offline \e$B$N%Q%i%a!<%?!#=*$o$C$?$i1&$N%\%?%s$r2!$7$F$/$@$5$$!#\e(B")
362      (customize-2 . "done")
363      (customize-3 . "\e$B@_Dj$7=*$o$C$?$i%\%/$r2!$7$F$M!#\e(B")
364      (customize-4 . "\e$B%Q%i%a!<%?\e(B")
365      (customize-5 . "\
366 \e$B$3$l$i$N%Q%i%a!<%?$O\e(B ~/.gnus-offline.el \e$B$KJ]B8$5$l$^$9!#\e(B
367
368 \e$BCm0U\e(B: \e$B$3$l$i$N%Q%i%a!<%?$NJQ99$O>l9g$K$h$C$F$O\e(B Gnus (\e$B$5$i$K>l9g$K\e(B
369 \e$B$h$C$F$O\e(B Emacs) \e$B$N:F5/F0$rI,MW$H$9$k$3$H$,$"$j$^$9!#\e(B")
370      (customize-6 . "\e$B$b$C$HCN$j$?$$>l9g$O%\%/$r2!$7$F$M!#\e(B")
371      (customize-done-1 . "(\e$BJ]B8$9$Y$-JQ99$O$"$j$^$;$s\e(B)")
372      (customize-done-2
373       . "\e$B%K%e!<%99VFI<jCJ$H%I%i%U%H5-;v<h$j07$$<jCJ$N@_Dj$r8+D>$7$F$/$@$5$$!#\e(B")
374   ))
375
376 (defvar gnus-ofsetup-resource-ja_complete
377   (append
378    gnus-ofsetup-resource-ja
379    '((param-news-method-1 . "\e$B%K%e!<%99VFIJ}K!\e(B")
380      (param-news-method-2 . "Gnus Agent")
381      (param-news-method-3 . "nnspool")
382      (param-dialup-program-1 . "\e$B%@%$%d%k@\B3%W%m%0%i%`\e(B")
383      (param-dialup-program-2 . "\e$B%W%m%0%i%`$r;H$&\e(B..")
384      (param-dialup-program-3 . "\e$B<+F0%@%$%d%k@\B3$O$7$J$$\e(B")
385      (param-dialup-program-arg-1 . "\e$B%@%$%d%k@\B3%W%m%0%i%`$N0z?t\e(B")
386      (param-dialup-program-arg-2 . "\e$B0z?t\e(B")
387      (param-hangup-program-1 . "\e$B%@%$%d%k@ZCG%W%m%0%i%`\e(B")
388      (param-hangup-program-2 . "\e$B%W%m%0%i%`$r;H$&\e(B..")
389      (param-hangup-program-3 . "\e$B<+F0%@%$%d%k@ZCG$O$7$J$$\e(B")
390      (param-hangup-program-arg-1 . "\e$B%@%$%d%k@ZCG%W%m%0%i%`$N0z?t\e(B")
391      (param-hangup-program-arg-2 . "\e$B0z?t\e(B")
392      (param-interval-1 . "\e$B<+F0Aw<u?.%8%g%V$N4V3V\e(B")
393      (param-drafts-queue-type-1 . "\e$B%I%i%U%H5-;v$rJ]B8$9$k%-%e!<$N<oN`\e(B")
394      (param-drafts-queue-type-2 . "Gnus Draft \e$B$N5!G=$rMxMQ$9$k\e(B")
395      (param-drafts-queue-type-3 . "MIEE \e$B$N5!G=$rMxMQ$9$k\e(B")
396      (param-mail-spool-1 . "MIEE \e$B$,;H$&%a!<%k$N%9%W!<%k%G%#%l%/%H%j\e(B")
397      (param-news-spool-1 . "MIEE \e$B$,;H$&%K%e!<%9$N%9%W!<%k%G%#%l%/%H%j\e(B")
398      (param-MTA-type-1 . "MTA \e$B$N<oN`\e(B")
399      (param-MTA-type-2 . "smtp.el \e$B$r;H$&\e(B")
400      (param-MTA-type-3 . "sendmail \e$B$r;H$&\e(B")
401      (param-save-passwd-1
402       . "\e$B%U%!%$%k$K\e(B POP \e$B%Q%9%o!<%I$rJ]B8$9$k\e(B")
403      (param-save-passwd-2 . "\e$B0BA4$J$N$GJ]B8$9$k\e(B")
404      (param-save-passwd-3 . "\e$B4m81$@$+$i$d$a$H$/\e(B")
405      (param-mail-source-1 . "\e$B%a!<%k<hF@@h$N>pJs\e(B"))))
406
407 (defun gnus-ofsetup-get-message (symbol &optional lang)
408   (setq lang (or lang gnus-offline-lang))
409   (or
410    (cdr (assq symbol (symbol-value
411                       (intern (format "gnus-ofsetup-resource-%s" lang)))))
412    (cdr (assq symbol gnus-ofsetup-resource-en))))
413
414 (defun gnus-ofsetup-completing-read-symbol (msg &rest syms)
415   (intern
416    (completing-read (concat
417                      msg
418                      (gnus-ofsetup-get-message 'completing-read-symbol-1))
419                     (mapcar
420                      (lambda (sym)
421                        (list (symbol-name sym)))
422                      syms)
423                     nil t nil)))
424
425 (defun gnus-setup-for-offline ()
426   "*Set up Gnus for offline environment."
427   (interactive)
428   (unless (file-exists-p gnus-offline-setting-file)
429     (let (news-method
430           mail-method agent-directory drafts-queue-type news-spool mail-spool
431           use-miee MTA-type dialup-program dialup-program-arguments
432           hangup-program hangup-program-arguments interval
433           num-of-address i mail-source save-passwd)
434       (setq news-method
435             (gnus-ofsetup-completing-read-symbol
436              (gnus-ofsetup-get-message 'setup-1)
437              'nnagent 'nnspool))
438       ;; Setting for gnus-agent.
439       (if (eq news-method 'nnagent)
440           (setq agent-directory
441                 (read-from-minibuffer
442                  (gnus-ofsetup-get-message 'setup-2) "~/News/agent")))
443       (setq mail-method 'nnmail)
444       (setq dialup-program
445             (read-file-name
446              (gnus-ofsetup-get-message 'setup-3)
447              nil nil t))
448       (if (string-match "^[ \t]*$" dialup-program)
449           (setq dialup-program nil)
450         (setq dialup-program-arguments
451               (delete "" (split-string
452                           (read-from-minibuffer
453                            (gnus-ofsetup-get-message 'setup-4))
454                           "[\t ]+"))))
455       (setq hangup-program
456             (read-file-name
457              (gnus-ofsetup-get-message 'setup-5)
458              nil nil t))
459       (if (string-match "^[ \t]*$" hangup-program)
460           (setq hangup-program nil)
461         (setq hangup-program-arguments
462               (delete "" (split-string
463                           (read-from-minibuffer
464                            (gnus-ofsetup-get-message 'setup-6))
465                           "[\t ]+"))))
466       (setq MTA-type (gnus-ofsetup-completing-read-symbol
467                       (gnus-ofsetup-get-message 'setup-7)
468                       'smtp 'sendmail))
469       (if (eq news-method 'nnspool)
470           (setq use-miee t)
471         (setq use-miee (y-or-n-p (gnus-ofsetup-get-message 'setup-8))))
472       (if use-miee
473           (progn
474             ;; Setting for MIEE.
475             (setq news-spool
476                   (read-from-minibuffer
477                    (gnus-ofsetup-get-message 'setup-9)
478                    "/usr/spool/news.out"))
479             (setq mail-spool
480                   (read-from-minibuffer
481                    (gnus-ofsetup-get-message 'setup-10)
482                    "/usr/spool/mail.out"))
483             (setq drafts-queue-type 'miee)
484             (gnus-ofsetup-prepare gnus-ofsetup-prepare-for-miee))
485         ;; Set drafts type gnus-agent.
486         (setq drafts-queue-type 'agent))
487       ;; Set E-Mail Address and pop3 movemail type.
488       (setq num-of-address
489             (read-from-minibuffer (gnus-ofsetup-get-message 'setup-11)))
490       (setq i (string-to-int num-of-address))
491       (while (> i 0)
492         (let ((user (read-from-minibuffer (gnus-ofsetup-get-message 'setup-12)))
493               (server (read-from-minibuffer
494                        (gnus-ofsetup-get-message 'setup-13)))
495               (auth (completing-read
496                      (gnus-ofsetup-get-message 'setup-14)
497                      '(("password") ("apop")) nil t nil))
498               (islisp (y-or-n-p (gnus-ofsetup-get-message 'setup-15)))
499               source)
500           (if (not islisp)
501               (let ((prog (read-file-name (gnus-ofsetup-get-message 'setup-16)
502                                           exec-directory "movemail"))
503                     (args (read-from-minibuffer
504                            (gnus-ofsetup-get-message 'setup-17)
505                            "-pf")))
506                 (setq source `(pop
507                                :user ,user
508                                :server ,server
509                                :program ,(format "%s %s %s %s %s"
510                                                  prog
511                                                  args
512                                                  "po:%u"
513                                                  "%t"
514                                                  "%p"))))
515             (setq source `(pop
516                            :user ,user
517                            :server ,server)))
518           (setq mail-source
519                 (nconc mail-source
520                        (list
521                         (if (string-equal "apop" auth)
522                             (nconc source '(:authentication apop))
523                           source)))))
524         (setq i (1- i)))
525       (setq save-passwd
526             (y-or-n-p (gnus-ofsetup-get-message 'setup-18)))
527       ;;
528       (gnus-ofsetup-prepare gnus-ofsetup-update-setting-file)))
529   (load gnus-offline-setting-file))
530
531 ;; Suppport for customizing gnus-ofsetup parameters.
532
533 (defvar sendmail-to-spool-directory)
534 (defvar news-spool-request-post-directory)
535
536 (defun gnus-ofsetup-find-parameters ()
537   "Return the each current value of gnus-offline parameters."
538   `((news-method
539      (choice :tag ,(gnus-ofsetup-get-message 'param-news-method-1)
540              :value ,gnus-offline-news-fetch-method
541              (const :tag ,(gnus-ofsetup-get-message 'param-news-method-2)
542                     nnagent)
543              (const :tag ,(gnus-ofsetup-get-message 'param-news-method-3)
544                     nnspool))
545      ,(gnus-ofsetup-get-message 'param-news-method-4))
546
547     (dialup-program
548      (choice :tag ,(gnus-ofsetup-get-message 'param-dialup-program-1)
549              :value ,gnus-offline-dialup-program
550              (string :tag ,(gnus-ofsetup-get-message 'param-dialup-program-2))
551              (const :tag ,(gnus-ofsetup-get-message
552                            'param-dialup-program-3) nil))
553      ,(gnus-ofsetup-get-message 'param-dialup-program-4))
554
555     (dialup-program-arguments
556      (repeat :tag ,(gnus-ofsetup-get-message 'param-dialup-program-arg-1)
557              :value ,gnus-offline-dialup-program-arguments
558              (string :tag ,(gnus-ofsetup-get-message
559                             'param-dialup-program-arg-2)))
560      ,(gnus-ofsetup-get-message 'param-dialup-program-arg-3))
561
562     (hangup-program
563      (choice :tag ,(gnus-ofsetup-get-message 'param-hangup-program-1)
564              :value ,gnus-offline-hangup-program
565              (string :tag ,(gnus-ofsetup-get-message 'param-hangup-program-2))
566              (const :tag ,(gnus-ofsetup-get-message 'param-hangup-program-3)
567                     nil))
568      ,(gnus-ofsetup-get-message 'param-hangup-program-4))
569
570     (hangup-program-arguments
571      (repeat :tag ,(gnus-ofsetup-get-message 'param-hangup-program-arg-1)
572              :value ,gnus-offline-hangup-program-arguments
573              (string :tag ,(gnus-ofsetup-get-message
574                             'param-hangup-program-arg-2)))
575      ,(gnus-ofsetup-get-message 'param-hangup-program-arg-3))
576
577     (interval
578      (integer :tag ,(gnus-ofsetup-get-message 'param-interval-1)
579               :value ,gnus-offline-interval-time)
580      ,(gnus-ofsetup-get-message 'param-interval-2))
581
582     (drafts-queue-type
583      (choice :tag ,(gnus-ofsetup-get-message 'param-drafts-queue-type-1)
584              :value ,gnus-offline-drafts-queue-type
585              (const :tag ,(gnus-ofsetup-get-message 'param-drafts-queue-type-2)
586                     agent)
587              (const :tag ,(gnus-ofsetup-get-message 'param-drafts-queue-type-3)
588                     miee))
589      ,(gnus-ofsetup-get-message 'param-drafts-queue-type-4))
590
591     (mail-spool
592      (directory :tag ,(gnus-ofsetup-get-message 'param-mail-spool-1)
593                 :value ,(cond ((and (boundp 'sendmail-to-spool-directory)
594                                     sendmail-to-spool-directory)
595                                sendmail-to-spool-directory)
596                               (t
597                                "/usr/spool/mail.out"))))
598
599     (news-spool
600      (directory :tag ,(gnus-ofsetup-get-message 'param-news-spool-1)
601                 :value ,(cond ((and (boundp 'news-spool-request-post-directory)
602                                     news-spool-request-post-directory)
603                                news-spool-request-post-directory)
604                               (t
605                                "/usr/spool/news.out"))))
606
607     (MTA-type
608      (choice :tag ,(gnus-ofsetup-get-message 'param-MTA-type-1)
609              :value ,gnus-offline-MTA-type
610              (const :tag ,(gnus-ofsetup-get-message 'param-MTA-type-2) smtp)
611              (const :tag ,(gnus-ofsetup-get-message 'param-MTA-type-3)
612                     sendmail))
613      ,(gnus-ofsetup-get-message 'param-MTA-type-4))
614
615     (save-passwd
616      (choice :tag ,(gnus-ofsetup-get-message 'param-save-passwd-1)
617              :value ,(if (memq 'mail-source-password-cache gnus-variable-list)
618                          t
619                          nil)
620              (const :tag ,(gnus-ofsetup-get-message 'param-save-passwd-2) t)
621              (const :tag ,(gnus-ofsetup-get-message 'param-save-passwd-3) nil))
622      ,(gnus-ofsetup-get-message 'param-save-passwd-4))
623
624     (mail-source
625      (sexp :tag ,(gnus-ofsetup-get-message 'param-mail-source-1)
626            :value ,gnus-offline-mail-source)
627      ,(gnus-ofsetup-get-message 'param-mail-source-2))))
628
629 (defvar gnus-ofsetup-params)
630
631 (eval-and-compile
632   (autoload 'gnus-custom-mode "gnus-cus"))
633
634 (defun gnus-ofsetup-customize ()
635   "Edit the gnus-offline parameters."
636   (interactive)
637   (let* ((params (gnus-ofsetup-find-parameters))
638          (types (mapcar (lambda (entry)
639                          `(cons :format "%v%h\n"
640                                 :doc ,(nth 2 entry)
641                                 (const :format "" ,(nth 0 entry))
642                                 ,(nth 1 entry)))
643                         params)))
644   (kill-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
645   (switch-to-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
646   (gnus-custom-mode)
647   (widget-insert (gnus-ofsetup-get-message 'customize-1))
648   (widget-create 'push-button
649                    :tag (gnus-ofsetup-get-message 'customize-2)
650                    :help-echo (gnus-ofsetup-get-message 'customize-3)
651                    :action 'gnus-ofsetup-customize-done)
652   (widget-insert "\n\n")
653   (make-local-variable 'gnus-ofsetup-params)
654   (setq gnus-ofsetup-params
655         (widget-create 'group
656                        `(set :inline t
657                              :greedy t
658                              :tag ,(gnus-ofsetup-get-message 'customize-4)
659                              :format "%t:\n%h%v"
660                              :doc ,(gnus-ofsetup-get-message 'customize-5)
661                              ,@types)))
662
663   (widget-create 'info-link
664                  :help-echo (gnus-ofsetup-get-message 'customize-6)
665                  :tag "<Info> mail sources"
666                  (if (string-match "^ja" gnus-offline-lang)
667                      "(gnus-ja)Mail Sources"
668                    "(gnus)Mail Sources"))
669
670   (use-local-map widget-keymap)
671   (local-set-key "q" 'bury-buffer)
672   (widget-setup)
673   (goto-char (point-min))))
674
675 (defun gnus-ofsetup-customize-done (&rest ignore)
676   "Apply changes and bury the buffer."
677   (interactive)
678   (let ((params (widget-value gnus-ofsetup-params))
679         (news-method gnus-offline-news-fetch-method)
680         (mail-method gnus-offline-mail-fetch-method)
681         (agent-directory gnus-agent-directory)
682         (dialup-program gnus-offline-dialup-program)
683         (dialup-program-arguments gnus-offline-dialup-program-arguments)
684         (hangup-program gnus-offline-hangup-program)
685         (hangup-program-arguments gnus-offline-hangup-program-arguments)
686         (drafts-queue-type gnus-offline-drafts-queue-type)
687         (interval gnus-offline-interval-time)
688         (use-miee (and (boundp 'miee-version)
689                        (or (eq gnus-offline-news-fetch-method 'nnspool)
690                            (eq gnus-offline-drafts-queue-type 'miee))))
691         (mail-spool (or (and (boundp 'sendmail-to-spool-directory)
692                              sendmail-to-spool-directory)
693                         "/usr/spool/mail.out"))
694         (news-spool (or (and (boundp 'news-spool-request-post-directory)
695                              news-spool-request-post-directory)
696                         "/usr/spool/news.out"))
697         (MTA-type gnus-offline-MTA-type)
698         (mail-source gnus-offline-mail-source)
699         (save-passwd (and (memq 'mail-source-password-cache gnus-variable-list)
700                           t)))
701     (if (null params)
702         (gnus-message 4 (gnus-ofsetup-get-message 'customize-done-1))
703       (mapc #'(lambda (el)
704                 (let ((sym (car el))
705                       (val (cdr el)))
706                   (set sym val)
707                   (cond ((eq sym 'news-method)
708                          (if (eq val 'nnspool)
709                              (setq use-miee t)))
710                         ((eq sym 'drafts-queue-type)
711                          (setq use-miee
712                                (if (eq val 'miee) t nil)))
713                         ((eq sym 'save-passwd)
714                          (if val
715                              (add-to-list 'gnus-variable-list
716                                           'mail-source-password-cache)
717                            (setq gnus-variable-list
718                                  (delq 'mail-source-password-cache
719                                        gnus-variable-list)))))))
720             params)
721       (if (and (eq news-method 'nnspool)
722                (not (eq drafts-queue-type 'miee)))
723           (error (gnus-ofsetup-get-message 'customize-done-2)))
724       (if use-miee
725           (gnus-ofsetup-prepare gnus-ofsetup-prepare-for-miee))
726       (gnus-ofsetup-prepare gnus-ofsetup-update-setting-file)
727       (load gnus-offline-setting-file)))
728   (bury-buffer)
729   (switch-to-buffer gnus-group-buffer))
730
731 ;; gnus-ofsetup.el Ends here.