1 ;;; gnus-ofsetup.el --- Setup advisor for Offline reading for Mail/News.
3 ;;; Copyright (C) 1998 Tatsuya Ichikawa
4 ;;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
6 ;;; This file is part of Semi-gnus.
8 ;;; GNU Emacs is free software; you can redistribute it and/or modify
9 ;;; it under the terms of the GNU General Public License as published by
10 ;;; the Free Software Foundation; either version 2, or (at your option)
11 ;;; any later version.
13 ;;; GNU Emacs is distributed in the hope that it will be useful,
14 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ;;; GNU General Public License for more details.
18 ;;; You should have received a copy of the GNU General Public License
19 ;;; along with GNU Emacs; see the file COPYING. If not, write to the
20 ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 ;;; Boston, MA 02111-1307, USA.
26 ;;; M-x load[RET]gnus-ofsetup
27 ;;; M-x gnus-setup-for-offline
32 (defvar gnus-offline-setting-file "~/.gnus-offline.el")
33 (defvar gnus-offline-use-miee nil)
34 (defvar gnus-offline-news-fetch-method nil)
35 (defvar gnus-offline-mail-fetch-method nil)
36 (defvar gnus-offline-hangup-program nil)
37 (defvar gnus-offline-dialup-program nil)
38 (defvar pop3-fma-spool-file-alist nil)
39 (defvar pop3-fma-movemail-type nil)
40 (defvar pop3-fma-movemail-arguments nil)
43 (defvar mail-source nil)
46 ;;; To silence byte compiler
48 (fboundp 'eval-when-compile)
52 (eval-region (point-min) (point)))
53 (let (case-fold-search)
57 (unless (boundp symbol)
58 (make-local-variable symbol)
59 (eval (list 'setq symbol nil)))))
62 sendmail-to-spool-directory
63 news-spool-request-post-directory
71 gnus-agent-handle-level
73 (make-local-variable 'byte-compile-warnings)
74 (setq byte-compile-warnings nil))))
76 (defun gnus-setup-for-offline ()
77 "*Set up Gnus for offline environment."
80 (if (not (file-exists-p gnus-offline-setting-file))
84 "Method for offline News reading (TAB to completion): "
85 '(("gnus-agent" 1) ("nnspool" 2))
89 (read-file-name "Dialup/Hangup program(type nil or null string you do not use): "))
92 "Select MTA type for sending mail (TAB to completion): "
93 '(("smtp" 1) ("sendmail" 2))
96 (read-from-minibuffer "How many e-mail address do you have: "))
98 (if (string-equal news-method "nnspool")
100 (setq use-miee (y-or-n-p "Use MIEE post/send message ")))
103 (if (string-equal news-method "gnus-agent")
104 (setq gnus-offline-news-fetch-method 'nnagent)
105 (setq gnus-offline-news-fetch-method 'nnspool))
107 (setq gnus-offline-mail-fetch-method mail-method)
108 (setq gnus-offline-use-miee use-miee)
111 (if (or (string-equal program "nil")
112 (string-equal program ""))
114 (setq gnus-offline-hangup-program nil)
115 (setq gnus-offline-dialup-program nil))
117 (read-from-minibuffer "Dialup program options: ")))
118 (setq gnus-offline-dialup-program-arguments
119 (split-string options "[\t ]+")))
121 (read-from-minibuffer "Hangup program options: ")))
122 (setq gnus-offline-hangup-program-arguments
123 (split-string options "[\t ]+")))
124 (setq gnus-offline-hangup-program program)
125 (setq gnus-offline-dialup-program program))
127 ;; Set spool directory for outgoing messages.
130 ;; Setting for MIEE with nnspool.
132 (read-from-minibuffer
133 "News spool directory for sending: "
134 "/usr/spool/news.out"))
136 (read-from-minibuffer
137 "Mail spool directory for sending: "
138 "/usr/spool/mail.out")))
139 (setq gnus-offline-mail-spool-directory mail-spool)
140 (setq gnus-offline-news-spool-directory news-spool)
141 (setq gnus-offline-drafts-queue-type 'miee)
145 ;; Set news post function for MIEE.
146 (setq message-send-news-function 'gnspool-request-post)
147 ;; Spool directory setting - MIEE.
148 (if (not (file-exists-p gnus-offline-mail-spool-directory))
149 (make-directory gnus-offline-mail-spool-directory t))
150 (setq sendmail-to-spool-directory
151 gnus-offline-mail-spool-directory)
152 (if (not (file-exists-p gnus-offline-news-spool-directory))
153 (make-directory gnus-offline-news-spool-directory t))
154 (setq news-spool-request-post-directory
155 gnus-offline-news-spool-directory)))
157 ;; Set drafts type gnus-agent.
158 (setq gnus-offline-drafts-queue-type 'agent))
160 ;; Setting for gnus-agent.
161 (if (eq gnus-offline-news-fetch-method 'nnagent)
162 (let ((agent-directory
163 (read-from-minibuffer "Agent directory: " "~/News/agent")))
164 (setq gnus-agent-directory agent-directory)))
166 ;; Determin MTA type.
167 (if (string-equal mta-type "smtp")
168 (setq gnus-offline-MTA-type 'smtp)
169 (setq gnus-offline-MTA-type 'sendmail)
172 ;; Set E-Mail Address and pop3 movemail type.
173 (setq i (string-to-int num-of-address))
175 (if (not (locate-library "mail-source"))
183 (read-from-minibuffer
184 "Email address (user@mailhost): "))
186 "Authentification Method (TAB to completion): "
187 '(("pass" 1) ("apop" 2)) nil t nil)))))
189 ;; Replace "hoge" -> 'hoge
192 (if (string-equal (nth 1 x) "pass")
193 (setcar (cdr x) 'pass)
194 (setcar (cdr x) 'apop)))
196 (setq pop3-fma-spool-file-alist address)
197 ;; Set movemail type.
200 "Select movemail type for retreave mail (TAB to completion): "
201 '(("exe" 1) ("lisp" 2))
204 (if (string-equal movemail-type "exe")
206 (read-from-minibuffer "movemail options: ")))
207 (setq pop3-fma-movemail-arguments (split-string options "[\t ]+"))))
208 (if (string-equal movemail-type "exe")
209 (setq pop3-fma-movemail-type 'exe)
210 (setq pop3-fma-movemail-type 'lisp))))
212 ;; Use mail-source.el
213 (setq mail-source nil)
215 (let ((user (read-from-minibuffer "Mail Account name : "))
216 (server (read-from-minibuffer "Mail server : "))
217 (auth (completing-read
218 "Authentification Method (TAB to completion): "
219 '(("pop" 1) ("apop" 2)) nil t nil))
220 (islisp (y-or-n-p "Do you use pop3.el to fetch mail? ")))
222 (let ((prog (read-file-name "movemail program name: "
223 exec-directory "movemail"))
224 (args (read-from-minibuffer "movemail options: " "-pf")))
233 (format "%s %s %s %s %s"
239 :authentication auth)))))
247 :authentication auth))))))
249 ;; Replace "hoge" -> 'hoge
252 (if (string-equal (car (last x)) "pop")
253 (setcar (last x) (quote 'pop))
254 (setcar (last x) (quote 'apop))))
256 (setq gnus-offline-mail-source mail-source)))
259 (y-or-n-p "Do you save password information to newsrc file? "))
261 ;; Write to setting file.
262 (setq tmp-buffer (get-buffer-create "* Setting"))
263 (set-buffer "* Setting")
266 (insert ";; This file is created by gnus-ofsetup.el\n")
267 (insert ";; Creation date : ")
268 (insert (current-time-string))
272 ;; write Basic setting
273 (insert "(setq gnus-offline-news-fetch-method '")
274 (insert (prin1-to-string gnus-offline-news-fetch-method))
276 (insert "(setq gnus-offline-mail-fetch-method '")
277 (insert (prin1-to-string gnus-offline-mail-fetch-method))
279 (insert "(setq gnus-offline-use-miee ")
280 (insert (prin1-to-string gnus-offline-use-miee))
282 (insert "(setq gnus-offline-dialup-program ")
283 (insert (prin1-to-string gnus-offline-dialup-program))
286 ;; write dialup/hangup program and options.
287 (if (stringp gnus-offline-dialup-program)
289 (insert "(setq gnus-offline-dialup-program-arguments '")
290 (insert (prin1-to-string gnus-offline-dialup-program-arguments))
292 (insert "(setq gnus-offline-hangup-program ")
293 (insert (prin1-to-string gnus-offline-hangup-program))
295 (if (stringp gnus-offline-hangup-program)
297 (insert "(setq gnus-offline-hangup-program-arguments '")
298 (insert (prin1-to-string gnus-offline-hangup-program-arguments))
301 ;; write setting about MIEE.
302 (if gnus-offline-use-miee
304 (insert "(setq gnus-offline-mail-spool-directory ")
305 (insert (prin1-to-string gnus-offline-mail-spool-directory))
307 (insert "(setq gnus-offline-news-spool-directory ")
308 (insert (prin1-to-string gnus-offline-news-spool-directory))
310 (insert "(setq sendmail-to-spool-directory gnus-offline-mail-spool-directory)\n")
311 (insert "(setq news-spool-request-post-directory gnus-offline-news-spool-directory)\n")
312 (insert "(load \"miee\")\n")
313 (insert "(setq message-send-news-function '")
314 (insert (prin1-to-string message-send-news-function))
317 ;; write setting about nnspool and gnus-agent.
318 (if (equal gnus-offline-news-fetch-method 'nnspool)
319 (insert "(message-offline-state)\n")
320 (insert "(setq gnus-agent-directory ")
321 (insert (prin1-to-string gnus-agent-directory))
324 ;; write setting about queue type -- MIEE or nnagent.
325 (insert "(setq gnus-offline-drafts-queue-type '")
326 (insert (prin1-to-string gnus-offline-drafts-queue-type))
328 (insert "(setq gnus-offline-MTA-type '")
329 (insert (prin1-to-string gnus-offline-MTA-type))
332 ;; Offline setting for gnus-nntp-*
333 (insert "(setq gnus-nntp-service nil)\n")
334 (insert "(setq gnus-nntp-server nil)\n")
336 ;; Write setting about hooks.
337 (insert "(add-hook 'gnus-group-mode-hook 'gnus-offline-processed-by-timer t)\n")
338 (insert "(add-hook 'gnus-group-mode-hook 'gnus-offline-error-check t)\n")
339 (insert "(add-hook 'gnus-after-getting-new-news-hook 'gnus-offline-after-get-new-news)\n")
340 (insert "(add-hook 'gnus-after-getting-news-hook 'gnus-offline-after-get-new-news)\n")
341 (if (eq gnus-offline-news-fetch-method 'nnspool)
343 (insert "(add-hook 'after-getting-news-hook 'gnus-offline-nnspool-hangup-line)\n")
344 (insert "(add-hook 'gnus-before-startup-hook (lambda () (setq nnmail-spool-file nil)))\n")))
345 (insert "(add-hook 'message-send-hook 'gnus-offline-message-add-header)\n")
346 (insert "(autoload 'gnus-offline-setup \"gnus-offline\")\n")
347 (insert "(add-hook 'gnus-load-hook 'gnus-offline-setup)\n")
349 (if (not (locate-library "mail-source"))
351 ;; Write setting about pop3-fma.
352 (insert "(require 'pop3-fma)\n")
353 (insert "(add-hook 'message-send-hook 'pop3-fma-message-add-header)\n")
354 (insert "(setq pop3-fma-spool-file-alist '")
355 (insert (prin1-to-string pop3-fma-spool-file-alist))
357 (insert "(setq pop3-fma-movemail-type '")
358 (insert (prin1-to-string pop3-fma-movemail-type))
361 (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"))
362 (if (eq pop3-fma-movemail-type 'exe)
364 (insert "(setq pop3-fma-movemail-arguments '")
365 (insert (prin1-to-string pop3-fma-movemail-arguments))
367 ;; Write stting about mail-source.el
368 (insert "(setq gnus-offline-mail-source '")
369 (insert (prin1-to-string gnus-offline-mail-source))
371 (insert "(setq nnmail-spool-file gnus-offline-mail-source)\n")
372 (insert "(require 'read-passwd)\n")
373 (insert "(setq mail-source-read-passwd 'read-pw-read-passwd)\n")
374 (insert "(add-hook 'gnus-setup-news-hook 'read-pw-set-mail-source-passwd-cache)\n")
376 (insert "(add-hook 'gnus-setup-news-hook \n (lambda ()\n (add-to-list 'gnus-variable-list 'mail-source-password-cache)))\n"))
378 (write-region (point-min) (point-max) gnus-offline-setting-file)
379 (kill-buffer "* Setting"))
381 (load gnus-offline-setting-file))
382 ;; gnus-ofsetup.el Ends here.