Release T-gnus 6.13.0.
[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.1 1999-08-04 08:19:12 yamaoka Exp $
4 ;;;
5 ;;; Copyright (C) 1998 Tatsuya Ichikawa
6 ;;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
7 ;;;
8 ;;; This file is part of Semi-gnus.
9 ;;;
10 ;;; GNU Emacs is free software; you can redistribute it and/or modify
11 ;;; it under the terms of the GNU General Public License as published by
12 ;;; the Free Software Foundation; either version 2, or (at your option)
13 ;;; any later version.
14
15 ;;; GNU Emacs is distributed in the hope that it will be useful,
16 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;;; GNU General Public License for more details.
19
20 ;;; You should have received a copy of the GNU General Public License
21 ;;; along with GNU Emacs; see the file COPYING.  If not, write to the
22 ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;;; Boston, MA 02111-1307, USA.
24 ;;;
25 ;;;; Commentary:
26 ;;; How to use.
27 ;;;
28 ;;;      M-x load[RET]gnus-ofsetup
29 ;;;      M-x gnus-setup-for-offline
30 ;;;
31
32 ;;; Code:
33
34 (defvar gnus-offline-setting-file "~/.gnus-offline.el")
35 (defvar gnus-offline-use-miee nil)
36 (defvar gnus-offline-news-fetch-method nil)
37 (defvar gnus-offline-mail-fetch-method nil)
38 (defvar gnus-offline-hangup-program nil)
39 (defvar gnus-offline-dialup-program nil)
40 (defvar gnus-offline-mail-spool-directory nil)
41 (defvar gnus-offline-news-spool-directory nil)
42 (defvar pop3-fma-spool-file-alist nil)
43 (defvar pop3-fma-movemail-type nil)
44 (defvar pop3-fma-movemail-arguments nil)
45 (defvar use-miee nil)
46 (defvar address nil)
47 (defvar mail-source nil)
48 (defvar options nil)
49
50 ;;; To silence byte compiler
51 (and
52  (fboundp 'eval-when-compile)
53  (eval-when-compile
54    (save-excursion
55      (beginning-of-defun)
56      (eval-region (point-min) (point)))
57    (let (case-fold-search)
58      (mapcar
59       (function
60        (lambda (symbol)
61          (unless (boundp symbol)
62            (make-local-variable symbol)
63            (eval (list 'setq symbol nil)))))
64       '(:group
65         :prefix :type
66         sendmail-to-spool-directory
67         news-spool-request-post-directory
68         nnspool-version
69         nnagent-version
70         msspool-news-server
71         msspool-news-service
72         gnspool-get-news
73         mail-spool-send
74         news-spool-post
75         gnus-agent-handle-level
76         ))
77      (make-local-variable 'byte-compile-warnings)
78      (setq byte-compile-warnings nil))))
79
80 (defun gnus-setup-for-offline ()
81   "*Set up Gnus for offline environment."
82   (interactive)
83   
84   (if (not (file-exists-p gnus-offline-setting-file))
85       (progn
86         (let ((news-method
87                (completing-read
88                 "Method for offline News reading (TAB to completion): "
89                 '(("gnus-agent" 1) ("nnspool" 2))
90                 nil t nil))
91               (mail-method 'nnmail)
92               (program
93                (read-file-name "Dialup/Hangup program(type nil or null string you do not use): "))
94               (mta-type
95                (completing-read
96                 "Select MTA type for sending mail (TAB to completion): "
97                 '(("smtp" 1) ("sendmail" 2))
98                 nil t nil))
99               (num-of-address
100                (read-from-minibuffer "How many e-mail address do you have: "))
101               )
102           (if (string-equal news-method "nnspool")
103               (setq use-miee t)
104             (setq use-miee (y-or-n-p "Use MIEE post/send message ")))
105           ;;
106           ;; Set variables.
107           (if (string-equal news-method "gnus-agent")
108               (setq gnus-offline-news-fetch-method 'nnagent)
109             (setq gnus-offline-news-fetch-method 'nnspool))
110           ;;
111           (setq gnus-offline-mail-fetch-method mail-method)
112           (setq gnus-offline-use-miee use-miee)
113           
114           ;; Set programs.
115           (if (or (string-equal program "nil")
116                   (string-equal program ""))
117               (progn
118                 (setq gnus-offline-hangup-program nil)
119                 (setq gnus-offline-dialup-program nil))
120             (let ((options
121                    (read-from-minibuffer "Dialup program options: ")))
122               (setq gnus-offline-dialup-program-arguments
123                     (split-string options "[\t ]+")))
124             (let ((options
125                    (read-from-minibuffer "Hangup program options: ")))
126               (setq gnus-offline-hangup-program-arguments
127                     (split-string options "[\t ]+")))
128             (setq gnus-offline-hangup-program program)
129             (setq gnus-offline-dialup-program program))
130             
131             ;; Set spool directory for outgoing messages.
132           (if use-miee
133               (progn
134                 ;; Setting for MIEE with nnspool.
135                 (let ((news-spool
136                        (read-from-minibuffer
137                         "News spool directory for sending: "
138                         "/usr/spool/news.out"))
139                       (mail-spool
140                        (read-from-minibuffer
141                         "Mail spool directory for sending: "
142                         "/usr/spool/mail.out")))
143                   (setq gnus-offline-mail-spool-directory mail-spool)
144                   (setq gnus-offline-news-spool-directory news-spool)
145                   (setq gnus-offline-drafts-queue-type 'miee)
146                   
147                   (gnus-ofsetup-prepare-for-miee)))
148             
149             ;; Set drafts type gnus-agent.
150             (setq gnus-offline-drafts-queue-type 'agent))
151           
152           ;; Setting for gnus-agent.
153           (if (eq gnus-offline-news-fetch-method 'nnagent)
154               (let ((agent-directory
155                      (read-from-minibuffer "Agent directory: " "~/News/agent")))
156                 (setq gnus-agent-directory agent-directory)))
157             
158           ;; Determin MTA type.
159           (if (string-equal mta-type "smtp")
160               (setq gnus-offline-MTA-type 'smtp)
161             (setq gnus-offline-MTA-type 'sendmail)
162             )
163           ;;
164           ;; Set E-Mail Address and pop3 movemail type.
165           (setq i (string-to-int num-of-address))
166           (setq address nil)
167           (if (not (locate-library "mail-source"))
168               (progn
169                 (while (> i 0)
170                   (setq address
171                         (append address
172                                 (list
173                                  (list
174                                   (concat "po:"
175                                           (read-from-minibuffer
176                                            "Email address (user@mailhost): "))
177                                   (completing-read
178                                    "Authentification Method (TAB to completion): "
179                                    '(("pass" 1) ("apop" 2)) nil t nil)))))
180                   (setq i (- i 1)))
181                 ;; Replace "hoge" -> 'hoge
182                 (mapcar
183                  (lambda (x)
184                    (if (string-equal (nth 1 x) "pass")
185                        (setcar (cdr x) 'pass)
186                      (setcar (cdr x) 'apop)))
187                  address)
188                 (setq pop3-fma-spool-file-alist address)
189                 ;; Set movemail type.
190                 (let ((movemail-type
191                        (completing-read
192                         "Select movemail type for retreave mail (TAB to completion): "
193                         '(("exe" 1) ("lisp" 2))
194                         nil t nil))
195                       )
196                   (if (string-equal movemail-type "exe")
197                       (let ((options
198                              (read-from-minibuffer "movemail options: ")))
199                         (setq pop3-fma-movemail-arguments (split-string options "[\t ]+"))))
200                   (if (string-equal movemail-type "exe")
201                       (setq pop3-fma-movemail-type 'exe)
202                     (setq pop3-fma-movemail-type 'lisp))))
203             ;;
204             ;; Use mail-source.el
205             (setq mail-source nil)
206             (while (> i 0)
207               (let ((user (read-from-minibuffer "Mail Account name : "))
208                     (server (read-from-minibuffer "Mail server : "))
209                     (auth (completing-read
210                           "Authentification Method (TAB to completion): "
211                           '(("password") ("apop")) nil t nil))
212                     (islisp (y-or-n-p "Do you use pop3.el to fetch mail? "))
213                     source)
214                 (if (not islisp)
215                     (let ((prog (read-file-name "movemail program name: "
216                                                 exec-directory "movemail"))
217                           (args (read-from-minibuffer "movemail options: "
218                                                       "-pf")))
219                       (setq source (list 'pop
220                                          :user user
221                                          :server server
222                                          :program (format "%s %s %s %s %s"
223                                                           prog
224                                                           args
225                                                           "po:%u"
226                                                           "%t"
227                                                           "%p"))))
228                   (setq source (list 'pop
229                                      :user user
230                                      :server server)))
231                 (setq mail-source
232                       (nconc mail-source
233                              (list
234                               (if (string-equal "apop" auth)
235                                   (nconc source '(:authentication apop))
236                                 source)))))
237               (setq i (1- i)))
238             (setq gnus-offline-mail-source mail-source)))
239
240         (setq save-passwd
241               (y-or-n-p "Do you save password information to newsrc file? "))
242         
243         (gnus-ofsetup-write-setting-file)))
244   (load gnus-offline-setting-file))
245
246 (defun gnus-ofsetup-prepare-for-miee ()
247   ;; Load MIEE.
248   (if (not (boundp 'miee-version))
249       (load "miee"))
250   ;; Set news post function for MIEE.
251   (setq message-send-news-function 'gnspool-request-post)
252   ;; Spool directory setting - MIEE.
253   (if (not (file-exists-p gnus-offline-mail-spool-directory))
254       (make-directory gnus-offline-mail-spool-directory t))
255   (setq sendmail-to-spool-directory
256         gnus-offline-mail-spool-directory)
257   (if (not (file-exists-p gnus-offline-news-spool-directory))
258       (make-directory gnus-offline-news-spool-directory t))
259   (setq news-spool-request-post-directory
260         gnus-offline-news-spool-directory))
261
262 (defun gnus-ofsetup-write-setting-file ()
263   ;; Write to setting file.
264   (setq tmp-buffer (get-buffer-create "* Setting"))
265   (set-buffer "* Setting")
266   (erase-buffer)
267   (insert ";;\n");
268   (insert ";; This file is created by gnus-ofsetup.el\n")
269   (insert ";; Creation date : ")
270   (insert (current-time-string))
271   (insert "\n")
272   (insert ";;\n")
273   
274   ;; write Basic setting
275   (insert "(setq gnus-offline-news-fetch-method '")
276   (insert (prin1-to-string gnus-offline-news-fetch-method))
277   (insert ")\n")
278   (insert "(setq gnus-offline-mail-fetch-method '")
279   (insert (prin1-to-string gnus-offline-mail-fetch-method))
280   (insert ")\n")
281   (insert "(setq gnus-offline-use-miee ")
282   (insert (prin1-to-string gnus-offline-use-miee))
283   (insert ")\n")
284   (insert "(setq gnus-offline-dialup-program ")
285   (insert (prin1-to-string gnus-offline-dialup-program))
286   (insert ")\n")
287   
288   ;; write dialup/hangup program and options.
289   (if (stringp gnus-offline-dialup-program)
290       (progn
291         (insert "(setq gnus-offline-dialup-program-arguments '")
292         (insert (prin1-to-string gnus-offline-dialup-program-arguments))
293         (insert ")\n")))
294   (insert "(setq gnus-offline-hangup-program ")
295   (insert (prin1-to-string gnus-offline-hangup-program))
296   (insert ")\n")
297   (if (stringp gnus-offline-hangup-program)
298       (progn
299         (insert "(setq gnus-offline-hangup-program-arguments '")
300         (insert (prin1-to-string gnus-offline-hangup-program-arguments))
301         (insert ")\n")))
302
303   (if (boundp 'gnus-offline-interval-time)
304       (progn
305         (insert "(setq gnus-offline-interval-time ")
306         (insert (prin1-to-string gnus-offline-interval-time))
307         (insert ")\n")))
308
309   ;; write setting about MIEE.
310   (if gnus-offline-use-miee
311       (progn
312         (insert "(setq gnus-offline-mail-spool-directory ")
313         (insert (prin1-to-string gnus-offline-mail-spool-directory))
314         (insert ")\n")
315         (insert "(setq gnus-offline-news-spool-directory ")
316         (insert (prin1-to-string gnus-offline-news-spool-directory))
317         (insert ")\n")
318         (insert "(setq sendmail-to-spool-directory gnus-offline-mail-spool-directory)\n")
319         (insert "(setq news-spool-request-post-directory gnus-offline-news-spool-directory)\n")
320         (insert "(load \"miee\")\n")
321         (insert "(setq message-send-news-function '")
322         (insert (prin1-to-string message-send-news-function))
323         (insert ")\n")))
324   
325   ;; write setting about nnspool and gnus-agent.
326   (if (equal gnus-offline-news-fetch-method 'nnspool)
327       (insert "(message-offline-state)\n")
328     (insert "(setq gnus-agent-directory ")
329     (insert (prin1-to-string gnus-agent-directory))
330     (insert ")\n"))
331   
332   ;; write setting about queue type -- MIEE or nnagent.
333   (insert "(setq gnus-offline-drafts-queue-type '")
334   (insert (prin1-to-string gnus-offline-drafts-queue-type))
335   (insert ")\n")
336   (insert "(setq gnus-offline-MTA-type '")
337   (insert (prin1-to-string gnus-offline-MTA-type))
338   (insert ")\n")
339   
340   ;; Offline setting for gnus-nntp-*
341   (insert "(setq gnus-nntp-service nil)\n")
342   (insert "(setq gnus-nntp-server nil)\n")
343   
344   ;; Write setting about hooks.
345   (insert "(add-hook 'gnus-group-mode-hook 'gnus-offline-processed-by-timer t)\n")
346   (insert "(add-hook 'gnus-group-mode-hook 'gnus-offline-error-check t)\n")
347   (insert "(add-hook 'gnus-after-getting-new-news-hook 'gnus-offline-after-get-new-news)\n")
348   (insert "(add-hook 'gnus-after-getting-news-hook 'gnus-offline-after-get-new-news)\n")
349   (if (eq gnus-offline-news-fetch-method 'nnspool)
350       (progn
351         (insert "(add-hook 'after-getting-news-hook 'gnus-offline-nnspool-hangup-line)\n")
352         (insert "(add-hook 'gnus-before-startup-hook (lambda () (setq nnmail-spool-file nil)))\n")))
353   (insert "(add-hook 'message-send-hook 'gnus-offline-message-add-header)\n")
354   (insert "(autoload 'gnus-offline-setup \"gnus-offline\")\n")
355   (insert "(add-hook 'gnus-load-hook 'gnus-offline-setup)\n")
356   
357   (if (not (locate-library "mail-source"))
358       (progn
359         ;; Write setting about pop3-fma.
360         (insert "(require 'pop3-fma)\n")
361         (insert "(add-hook 'message-send-hook 'pop3-fma-message-add-header)\n")
362         (insert "(setq pop3-fma-spool-file-alist '")
363         (insert (prin1-to-string pop3-fma-spool-file-alist))
364         (insert ")\n")
365         (insert "(setq pop3-fma-movemail-type '")
366         (insert (prin1-to-string pop3-fma-movemail-type))
367         (insert ")\n")
368         (if save-passwd
369             (insert "(add-hook 'gnus-setup-news-hook \n    (lambda ()\n        (setq pop3-fma-save-password-information t)\n        (add-to-list 'gnus-variable-list 'pop3-fma-password)))\n"))
370         (if (eq pop3-fma-movemail-type 'exe)
371             (progn
372               (insert "(setq pop3-fma-movemail-arguments '")
373               (insert (prin1-to-string pop3-fma-movemail-arguments))
374               (insert ")\n"))))
375     ;; Write stting about mail-source.el
376     (insert "(setq gnus-offline-mail-source '")
377     (insert (prin1-to-string gnus-offline-mail-source))
378     (insert ")\n")
379     (insert "(setq nnmail-spool-file gnus-offline-mail-source)\n")
380     (insert "(require 'read-passwd)\n")
381     (insert "(setq mail-source-read-passwd 'read-pw-read-passwd)\n")
382     (insert "(add-hook 'gnus-setup-news-hook 'read-pw-set-mail-source-passwd-cache)\n")
383     (if save-passwd
384         (insert "(add-hook 'gnus-setup-news-hook \n    (lambda ()\n        (add-to-list 'gnus-variable-list 'mail-source-password-cache)))\n"))
385     )
386   (write-region (point-min) (point-max) gnus-offline-setting-file)
387   (kill-buffer "* Setting"))
388
389
390 ;;; Suppport for customizing gnus-ofsetup parameters.
391
392 (autoload 'gnus-custom-mode "gnus-cus" nil t)
393
394 (defun gnus-ofsetup-parameters ()
395   "Return alist of gnus-offline configuration parameters."
396   `((news-method
397      (choice :tag "News Method" :value ,gnus-offline-news-fetch-method
398              (const :tag "Gnus Agent" nnagent)
399              (const :tag "nnspool"    nnspool)) "\
400 Method to fetch news articles.")
401
402     (dialup-program
403      (choice :tag "Dialup Program" :value ,gnus-offline-dialup-program
404              (string :tag "Use Program..")
405              (const :tag "Don't auto-dial." nil)) "\
406 Program which does dial.")
407
408     (dialup-prog-args
409      (repeat :tag "Dialup Program Arguments"
410              :value ,gnus-offline-dialup-program-arguments
411              (string :tag "Argument"))"\
412 Program arguments of gnus-offline-dialup-program.")
413
414     (hangup-program
415      (choice :tag "Hangup Program" :value ,gnus-offline-hangup-program
416              (string :tag "Use Program..")
417              (const :tag "Don't auto-hangup." nil)) "\
418 Program which does hangup.")
419
420     (hangup-prog-args
421      (repeat :tag "Hangup Program Arguments"
422              :value ,gnus-offline-hangup-program-arguments
423              (string :tag "Argument")) "\
424 Program arguments of gnus-offline-hangup-program.")
425
426     (interval
427      (integer :tag "Interval between Jobs"
428               :value ,gnus-offline-interval-time) "\
429 Interval time(minutes) to do online jobs.
430 If set to 0 , timer call is disabled.")
431
432     (draft-type
433      (choice :tag "Drafts Queue Type" :value ,gnus-offline-drafts-queue-type
434              (const :tag "Gnus Draft for queuing."    agent)
435              (const :tag "I prefer MIEE for queuing." miee)) "\
436 Type of queue used for draft messages.
437
438 If the select method for news is nnspool, you must choose MIEE.
439 MIEE is another library for offline messaging. It isn't part of
440 Semi-gnus. If you want to know about MIEE, see README-offline.{en,ja}.")
441
442     (mail-spool
443      (directory :tag "Mail Spool Directory for MIEE"
444                 :value ,(cond (gnus-offline-mail-spool-directory
445                                gnus-offline-mail-spool-directory)
446                               ((and (boundp 'sendmail-to-spool-directory)
447                                     sendmail-to-spool-directory)
448                                sendmail-to-spool-directory)
449                               (t "~/"))))
450
451     (news-spool
452      (directory :tag "News Spool Directory for MIEE"
453                 :value ,(cond (gnus-offline-news-spool-directory
454                                gnus-offline-news-spool-directory)
455                               ((and (boundp 'news-spool-request-post-directory)
456                                     news-spool-request-post-directory)
457                                news-spool-request-post-directory)
458                               (t "~/"))))
459
460     (mta-type
461      (choice :tag "MTA Type" :value ,gnus-offline-MTA-type
462              (const :tag "Use smtp.el"  smtp)
463              (const :tag "Use sendmail" sendmail)) "\
464 Type of MTA used for sending mail.")
465
466     (save-password
467      (choice :tag "Save Password in Startup File"
468              :value ,(if (memq 'mail-source-password-cache gnus-variable-list)
469                          t
470                          nil)
471              (const :tag "OK, I'm sure it's safe."     t)
472              (const :tag "No way, it's too dangerous!" nil)) "\
473 Whether you want your POP passwords written in .newsrc.eld or not.")
474     
475     (mail-source
476      (sexp :tag "Mail Sources" :value ,gnus-offline-mail-source) "\
477 Information of mail sources. Actually, a list of `Mail Source Specifiers'.
478
479 The format of this variable is just the same as `mail-sources' (or
480 `nnmail-spool-file' which seems obsolete).
481
482 `Mail Source Specifiers' can take a lot of keywords. For example,
483 if you want to use movemail instead of pop3.el which comes with
484 Gnus, you can set a specifier using the kerword :program as shown
485 below:
486
487           (pop :program \"movemail -pf po:%u %t %p\")
488
489 If you want to know more about mail source specifiers and keywords,
490 click the button below.")))
491
492 (defun gnus-ofsetup-customize ()
493   "Edit the gnus-offline parameters."
494   (interactive)
495   (let* ((params (gnus-ofsetup-parameters))
496          (types (mapcar (lambda (entry)
497                          `(cons :format "%v%h\n"
498                                 :doc ,(nth 2 entry)
499                                 (const :format "" ,(nth 0 entry))
500                                 ,(nth 1 entry)))
501                         params)))
502   ;; Ready.
503   (kill-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
504   (switch-to-buffer (gnus-get-buffer-create "*Gnus Offline Customize*"))
505   (gnus-custom-mode)
506   (widget-insert "Customize the Gnus Offline Parameters, and press ")
507   (widget-create 'push-button
508                    :tag "done"
509                    :help-echo "Push me when done customizing."
510                    :action 'gnus-ofsetup-customize-done)
511   (widget-insert "\n\n")
512   (make-local-variable 'gnus-ofsetup-params)
513   (setq gnus-ofsetup-params
514         (widget-create 'group
515                        `(set :inline t
516                              :greedy t
517                              :tag "Parameters"
518                              :format "%t:\n%h%v"
519                              :doc "\
520 These paramerters will be saved in ~/.gnus-offline.el.
521
522 Note: Touching these parameters may require Gnus or even Emacs to be
523 restarted."
524                              ,@types)))
525   
526   (widget-create 'info-link
527                  :help-echo "Push me to learn more."
528                  :tag "<Info> mail sources"
529                  "(gnus)Mail Sources")
530
531   (use-local-map widget-keymap)
532   (local-set-key "q" 'bury-buffer)
533   (widget-setup)
534   (goto-char (point-min))))
535
536 (defun gnus-ofsetup-customize-done (&rest ignore)
537   "Apply changes and bury the buffer."
538   (interactive)
539   (let ((params (widget-value gnus-ofsetup-params))
540         (combi '((news-method . gnus-offline-news-fetch-method)
541                  (dialup-program . gnus-offline-dialup-program)
542                  (dialup-prog-args . gnus-offline-dialup-program-arguments)
543                  (hangup-program . gnus-offline-hangup-program)
544                  (hangup-prog-args . gnus-offline-hangup-program-arguments)
545                  (interval . gnus-offline-interval-time)
546                  (draft-type . gnus-offline-drafts-queue-type)
547                  (mail-spool . gnus-offline-mail-spool-directory)
548                  (news-spool . gnus-offline-news-spool-directory)
549                  (mta-type . gnus-offline-MTA-type)
550                  (mail-source . gnus-offline-mail-source)
551                  (save-password . save-passwd)))
552         (save-passwd (and (memq 'mail-source-password-cache gnus-variable-list)
553                           t)))
554     (if (null params)
555         (gnus-message 4 "(No changes need to be saved)")
556       (mapcar (lambda (el)
557                 (let ((sym (car el))
558                       (val (cdr el)))
559                   (set (cdr (assq sym combi)) val)
560                   (cond ((eq sym 'news-method)
561                          (if (eq val 'nnspool)
562                              (setq gnus-offline-use-miee t)))
563                         ((eq sym 'draft-type)
564                          (setq gnus-offline-use-miee
565                                (if (eq val 'miee) t nil)))
566                         ((eq sym 'save-password)
567                          (if val
568                              (add-to-list 'gnus-variable-list
569                                           'mail-source-password-cache)
570                            (setq gnus-variable-list
571                                  (delq 'mail-source-password-cache
572                                        gnus-variable-list)))))))
573               params)
574       (if (and (eq gnus-offline-news-fetch-method 'nnspool)
575                (not (eq gnus-offline-drafts-queue-type 'miee)))
576           (error "Invalid parameters. Check the news method and drafts queue type."))
577       (if gnus-offline-use-miee
578           (gnus-ofsetup-prepare-for-miee))
579       (gnus-ofsetup-write-setting-file)))
580   (bury-buffer)
581   (switch-to-buffer gnus-group-buffer))
582
583 ;; gnus-ofsetup.el Ends here.