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