;;; gnus-offline.el --- To process mail & news at offline environment.
-;;; Copyright (C) 1998 Tatsuya Ichikawa
-;;; Yukihiro Ito
+;;; Copyright (C) 1998, 2001 Tatsuya Ichikawa
+;;; Copyright (C) 1998, 2001 Yukihiro Ito
;;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
;;; Yukihiro Ito <ito@rs.civil.tohoku.ac.jp>
;;; Hidekazu Nakamura <u90121@uis-inf.co.jp>
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Emacs; see the file COPYING. If not, write to the
-;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;;; Boston, MA 02111-1307, USA.
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;;
;;;; Commentary:
;;; Note.
;;; This file works only with after version of Emacs 19.30.
;;; This file needs miee.el and SEMI.
-;;; If you set gnus-offline-drafts-queue-type to 'agent , you don't need
+;;; If you set gnus-offline-drafts-queue-type to 'agent , you don't need
;;; miee.el
;;; You must use T-gnus 6.12.0 or later.
;;;
(eval '(run-hooks 'gnus-offline-load-hook))
-(eval-when-compile (require 'cl) (require 'static))
+(eval-when-compile (require 'cl))
+
+(eval-when-compile
+ (require 'static)
+ (require 'gnus-agent)
+ (require 'gnus-group))
(require 'custom)
(require 'easymenu)
(provide 'gnus-offline)
-(eval-after-load "eword-decode"
- '(mime-set-field-decoder 'X-Gnus-Offline-Backend nil nil))
-
(defgroup gnus-offline nil
"Offline backend utility for Gnus."
:prefix "gnus-offline-"
;; "A matter of trust"
;; "Modern Woman"
;; "Ahhhhhhh!!" ; 2.10b1
- "Cup of life" ; 2.20
+ "Cup of life" ; 2.20
;; "Code of silence"
)
gnus-offline-version-number))
(eval-when-compile
- (mapc
- (lambda (symbol)
- (unless (boundp symbol)
- (make-local-variable symbol)
- (eval (list 'setq symbol nil))))
- '(nnagent-version
- nnspool-version
- msspool-news-server
- msspool-news-service
- miee-popup-menu
- gnus-group-toolbar)))
-
-(static-if (eq system-type 'windows-nt)
+ (defvar nnagent-version)
+ (defvar nnspool-version)
+ (defvar msspool-news-server)
+ (defvar msspool-news-service)
+ (defvar miee-popup-menu))
+
+(if (featurep 'meadow)
(define-process-argument-editing "/hang\\.exe\\'"
(lambda (x)
(general-process-argument-editing-function
:group 'gnus-offline
:type 'function)
-(defcustom gnus-offline-agent-automatic-expire t
+(defcustom gnus-offline-auto-expire t
"*Non-nil means expire articles on every session."
:group 'gnus-offline
:type 'boolean)
;;; Functions
-(defun gnus-offline-get-message (symbol &optional lang)
+;; Inline functions.
+(defsubst gnus-offline-gettext (symbol &optional lang)
(setq lang (or lang gnus-offline-lang))
(or
(cdr (assq symbol (symbol-value
(intern (format "gnus-offline-resource-%s" lang)))))
(cdr (assq symbol gnus-offline-resource-en))))
+(defsubst gnus-offline-set-online-sendmail-function ()
+ "*Initialize sendmail-function when plugged status."
+ (if (eq gnus-offline-MTA-type 'smtp)
+ (setq message-send-mail-function 'message-send-mail-with-smtp)
+ (setq message-send-mail-function 'message-send-mail-with-sendmail)))
+
+(defsubst gnus-offline-set-offline-sendmail-function ()
+ "*Initialize sendmail-function when unplugged status."
+ (cond ((eq gnus-offline-drafts-queue-type 'miee)
+ (if (eq gnus-offline-news-fetch-method 'nnagent)
+ (setq gnus-agent-send-mail-function
+ 'sendmail-to-spool-in-gnspool-format))
+ (setq message-send-mail-function 'sendmail-to-spool-in-gnspool-format))
+ (t
+ (setq gnus-agent-send-mail-function
+ (gnus-offline-set-online-sendmail-function)
+ message-send-mail-function 'gnus-agent-send-mail))))
+
+(defsubst gnus-offline-set-offline-post-news-function ()
+ "*Initialize sendnews-function when unplugged status."
+ (if (eq gnus-offline-drafts-queue-type 'miee)
+ (setq message-send-news-function 'gnspool-request-post)))
+
+(defsubst gnus-offline-set-online-post-news-function ()
+ "*Initialize sendnews-function when plugged status."
+ (setq message-send-news-function 'message-send-news-with-gnus))
+
+(defsubst gnus-offline-disable-fetch-mail ()
+ "*Set do not fetch mail."
+ (setq mail-sources nil
+ nnmail-spool-file nil))
+
+(defsubst gnus-offline-enable-fetch-mail ()
+ "*Set to fetch mail."
+ (setq gnus-offline-mail-fetch-method 'nnmail)
+ (setq mail-sources gnus-offline-mail-source))
+
+(defsubst gnus-offline-enable-fetch-news ()
+ "*Set to fetch news."
+ (if (eq gnus-offline-news-fetch-method 'nnagent)
+ (progn
+ (setq gnus-agent-handle-level gnus-level-subscribed)
+ (gnus-agent-toggle-plugged t))))
+
+(when (featurep 'gnus-ofsetup)
+ ;; Advice to Gnus functions.
+ (defadvice gnus-group-get-new-news (before gnus-offline-advice
+ activate preactivate)
+ "When called interactively, dial up and get online automatically."
+ (when (interactive-p)
+ (run-hooks 'gnus-offline-before-online-hook)
+ (if (and (memq 'connect gnus-offline-auto-ppp)
+ (functionp gnus-offline-dialup-function))
+ (funcall gnus-offline-dialup-function))
+ (gnus-offline-get-new-news-function)))
+
+ (defadvice gnus-agent-toggle-plugged (around gnus-offline-advice
+ activate preactivate)
+ "Also toggle gnus-offline `connected--disconnected' status."
+ (interactive (list (not gnus-offline-connected)))
+ (cond ((ad-get-arg 0)
+ (setq gnus-offline-connected (ad-get-arg 0))
+ ad-do-it
+ ;; Set send mail/news function to offline functions.
+ (gnus-offline-set-online-sendmail-function)
+ (gnus-offline-set-online-post-news-function))
+ (t
+ ;; Set to offline status
+ (gnus-offline-set-unplugged-state))))
+
+ (defadvice gnus-agent-expire (around gnus-offline-advice activate preactivate)
+ "Advice not to delete new articles."
+ (cond ((eq 0 gnus-agent-expire-days)
+ (let (gnus-agent-expire-all)
+ ad-do-it))
+ (t
+ ad-do-it)))
+
+ (defadvice gnus-agent-mode (around gnus-offline-advice activate preactivate)
+ "Advice not to close PPP connection."
+ (let (gnus-offline-hangup-function)
+ ad-do-it)))
+
;;
;; Setting up...
;;
(defun gnus-offline-setup ()
"*Initialize gnus-offline function"
- ;; Menu and keymap
- (gnus-offline-define-menu-and-key)
+ (when (eq gnus-offline-drafts-queue-type 'agent)
+ (setq gnus-offline-connected gnus-plugged))
+
+ (gnus-offline-processed-by-timer)
+ (gnus-offline-error-check)
;; To transfer Mail/News function.
- (cond ((eq gnus-offline-mail-treat-environ 'offline)
+ (cond ((or (and (eq 'gnus-offline-drafts-queue-type 'agent)
+ gnus-offline-connected)
+ (eq gnus-offline-mail-treat-environ 'online))
;; send mail under offline environ.
- (gnus-offline-set-offline-sendmail-function))
- ((eq gnus-offline-mail-treat-environ 'online)
+ (gnus-offline-set-online-sendmail-function))
+ (t
;; send mail under offline environ.
- (gnus-offline-set-online-sendmail-function))))
+ (gnus-offline-set-offline-sendmail-function))))
;;
;; Setting Error check.
(featurep 'nnagent))
(set-buffer (gnus-get-buffer-create buffer))
(erase-buffer)
- (insert (gnus-offline-get-message 'error-check-1))
+ (insert (gnus-offline-gettext 'error-check-1))
(pop-to-buffer buffer)))
((eq gnus-offline-news-fetch-method 'nnspool)
(unless (featurep 'nnspool)
(set-buffer (gnus-get-buffer-create buffer))
(erase-buffer)
- (insert (gnus-offline-get-message 'error-check-2))
+ (insert (gnus-offline-gettext 'error-check-2))
(pop-to-buffer buffer)))
(t
nil))))
-;;
-;;
-(defun gnus-offline-set-offline-sendmail-function ()
- "*Initialize sendmail-function when unplugged status."
- (cond ((eq gnus-offline-drafts-queue-type 'miee)
- (if (eq gnus-offline-news-fetch-method 'nnagent)
- (setq gnus-agent-send-mail-function
- 'sendmail-to-spool-in-gnspool-format))
- (setq message-send-mail-function 'sendmail-to-spool-in-gnspool-format))
- (t
- (setq gnus-agent-send-mail-function
- (gnus-offline-set-online-sendmail-function)
- message-send-mail-function 'gnus-agent-send-mail))))
-;;
-(defun gnus-offline-set-online-sendmail-function ()
- "*Initialize sendmail-function when plugged status."
- (if (eq gnus-offline-MTA-type 'smtp)
- (setq message-send-mail-function 'message-send-mail-with-smtp)
- (setq message-send-mail-function 'message-send-mail-with-sendmail)))
-;;
-(defun gnus-offline-set-offline-post-news-function ()
- "*Initialize sendnews-function when unplugged status."
- (if (eq gnus-offline-drafts-queue-type 'miee)
- (setq message-send-news-function 'gnspool-request-post)))
-;;
-(defun gnus-offline-set-online-post-news-function ()
- "*Initialize sendnews-function when plugged status."
- (setq message-send-news-function 'message-send-news-with-gnus))
-;;
-;; Get new news jobs. (gnus-agent and nnspool)
-;;
-(defun gnus-offline-gnus-get-new-news (&optional arg)
- "*Override function \"gnus-group-get-new-news\"."
- (interactive "P")
- (run-hooks 'gnus-offline-before-online-hook)
- (if (and (memq 'connect gnus-offline-auto-ppp)
- (functionp gnus-offline-dialup-function))
- (funcall gnus-offline-dialup-function))
- (gnus-offline-get-new-news-function)
- (gnus-group-get-new-news arg))
;;
;; dialup...
;; Dialup if gnus-offline-dialup-program is specified
(if (stringp gnus-offline-dialup-program)
(progn
- (message (gnus-offline-get-message 'connect-server-1))
+ (message "%s" (gnus-offline-gettext 'connect-server-1))
(apply 'call-process gnus-offline-dialup-program nil nil nil
gnus-offline-dialup-program-arguments)
(sleep-for 1)
- (message (gnus-offline-get-message 'connect-server-2)))))
+ (message "%s" (gnus-offline-gettext 'connect-server-2)))))
;;
;; Jobs before get new news , send mail and post news.
;; Set send mail/news functions to online functions.
(gnus-offline-set-online-sendmail-function)
(gnus-offline-set-online-post-news-function)
- (message (gnus-offline-get-message 'get-new-news-function-1))
+ (message "%s" (gnus-offline-gettext 'get-new-news-function-1))
;; fetch only news
(if (eq gnus-offline-articles-to-fetch 'news)
;; fetch only mail for gnus-agent
(if (and (eq gnus-offline-news-fetch-method 'nnagent)
(eq gnus-offline-articles-to-fetch 'mail))
- (setq gnus-agent-handle-level gnus-offline-mail-group-level)))
+ (setq gnus-agent-handle-level gnus-offline-mail-group-level)))
;;
;; Change mail group level to handle only mail.
;;
(defun gnus-offline-after-get-new-news ()
"*After getting news and mail jobs."
- (if (memq gnus-offline-articles-to-fetch '(both mail))
- (progn
- ;; Mail/both
- ;; send mail/news in spool
- (gnus-offline-empting-spool)
- (if (eq gnus-offline-articles-to-fetch 'mail)
- (progn
- ;; Send only mail and hang up...
- (if gnus-offline-connected
- (gnus-offline-set-unplugged-state))
- ;; Disable fetch mail.
- (gnus-offline-disable-fetch-mail)
- (gnus-offline-after-jobs-done)))))
-
- ;; News/Both
- (if (memq gnus-offline-articles-to-fetch '(both news))
- (progn
- (if gnus-offline-connected
- (cond ((eq gnus-offline-news-fetch-method 'nnagent)
- ;; Get New News (gnus-agent)
- (gnus-agent-toggle-plugged t)
-
- ;; fetch articles
- (gnus-agent-fetch-session)
-
- ;; Hang Up line. then set to offline status.
- (gnus-offline-set-unplugged-state)
-
- ;; All online jobs has done.
- (gnus-offline-after-jobs-done))
- (t
- (if (eq gnus-offline-news-fetch-method 'nnspool)
- ;; Get New News (nnspool)
- (gnspool-get-news))))))))
-;;
-;; Disable fetch mail
-;;
-(defun gnus-offline-disable-fetch-mail ()
- "*Set do not fetch mail."
- (setq mail-sources nil
- nnmail-spool-file nil))
-;;
-;; Enable fetch mail
-;;
-(defun gnus-offline-enable-fetch-mail ()
- "*Set to fetch mail."
- (setq gnus-offline-mail-fetch-method 'nnmail)
- (setq mail-sources gnus-offline-mail-source))
-;;
-;; Enable fetch news
-;;
-(defun gnus-offline-enable-fetch-news ()
- "*Set to fetch news."
- (if (eq gnus-offline-news-fetch-method 'nnagent)
- (progn
- (setq gnus-agent-handle-level gnus-level-subscribed)
- (gnus-agent-toggle-plugged t))))
+ (cond (gnus-offline-connected
+ (when (memq gnus-offline-articles-to-fetch '(both mail))
+ ;; Mail/both
+ ;; send mail/news in spool
+ (gnus-offline-empting-spool)
+ (when (eq gnus-offline-articles-to-fetch 'mail)
+ ;; Send only mail and hang up...
+ (if gnus-offline-connected
+ (gnus-offline-set-unplugged-state))
+ ;; Disable fetch mail.
+ (gnus-offline-disable-fetch-mail)
+ (gnus-offline-after-jobs-done)))
+ (when (memq gnus-offline-articles-to-fetch '(both news))
+ ;; News/Both
+ (cond ((eq gnus-offline-news-fetch-method 'nnagent)
+ ;; Get New News (gnus-agent)
+ (gnus-agent-toggle-plugged t)
+ ;; fetch articles
+ (gnus-agent-fetch-session)
+ ;; Hang Up line. then set to offline status.
+ (gnus-offline-set-unplugged-state)
+ ;; All online jobs has done.
+ (gnus-offline-after-jobs-done))
+ (t
+ (if (eq gnus-offline-news-fetch-method 'nnspool)
+ ;; Get New News (nnspool)
+ (gnspool-get-news))))))
+ (t
+ nil)))
\f
;;
;; Add your custom header.
(setq hdr (concat header " "))
(setq str (concat hdr string))
(setq hdr (concat str "\n"))
- (insert-string hdr))))
+ (insert hdr))))
;;
;; Add X-Offline-Backend header.
;;
nnagent-version
nnspool-version))
(str (format "\n with %s" ver)))
- (gnus-offline-add-custom-header
- "X-Gnus-Offline-Backend:" (concat gnus-offline-header-string str)))))
+ (gnus-offline-add-custom-header
+ "X-Gnus-Offline-Backend:" (concat gnus-offline-header-string str)))))
\f
;;
-;; Toggle plugged/unplugged
-;;
-(defun gnus-offline-toggle-plugged (plugged)
- "*Override function \"Jj\" - gnus-agent-toggle-plugged."
- (interactive (list (not gnus-offline-connected)))
- (if plugged
- (progn
- (setq gnus-offline-connected plugged)
- (gnus-agent-toggle-plugged plugged)
- ;; Set send mail/news function to offline functions.
- (gnus-offline-set-online-sendmail-function)
- (gnus-offline-set-online-post-news-function))
- ;; Set to offline status
- (gnus-offline-set-unplugged-state)))
-;;
;; Function of hang up line.
;;
(defun gnus-offline-set-unplugged-state ()
(funcall gnus-offline-hangup-function))
(setq gnus-offline-connected nil)
(if (eq gnus-offline-news-fetch-method 'nnagent)
- (gnus-agent-toggle-plugged nil))
+ (ad-Orig-gnus-agent-toggle-plugged nil))
;; Set send mail/news function to offline functions.
(gnus-offline-set-offline-sendmail-function)
;;
(setenv "MAILHOST" nil))
;;
-;; Hangup line function
+;; Hangup line function
;;
(defun gnus-offline-hangup-line ()
"*Hangup line function."
- (message (gnus-offline-get-message 'hangup-line-1))
+ (message "%s" (gnus-offline-gettext 'hangup-line-1))
(if (stringp gnus-offline-hangup-program)
(apply 'start-process "hup" nil gnus-offline-hangup-program
gnus-offline-hangup-program-arguments))
- (message (gnus-offline-get-message 'hangup-line-2)))
+ (message "%s" (gnus-offline-gettext 'hangup-line-2)))
;;
;; Hang Up line routine whe using nnspool
;;
(run-hooks 'gnus-offline-after-online-hook)
(if (eq gnus-offline-articles-to-fetch 'mail)
(gnus-offline-restore-mail-group-level))
- (if (eq gnus-offline-news-fetch-method 'nnagent)
- (gnus-offline-agent-expire))
- (if (and (featurep 'xemacs)
- (fboundp 'play-sound-file))
- (ding nil 'drum)
+ (if (and (eq gnus-offline-news-fetch-method 'nnagent)
+ gnus-offline-auto-expire)
+ (gnus-agent-expire))
+ (static-if (featurep 'xemacs)
+ (if (fboundp 'play-sound-file)
+ (ding nil 'drum)
+ (ding))
(ding))
(gnus-group-save-newsrc)
- (message (gnus-offline-get-message 'after-jobs-done-1)))
+ (message "%s" (gnus-offline-gettext 'after-jobs-done-1)))
\f
;;
(let ((keys (key-description (this-command-keys)))
menu title str)
(cond ((or (string= "misc-user" keys)
+ (string= "S-mouse-2" keys)
(string-match "^menu-bar" keys)
(string-match "^mouse" keys))
- (setq title (gnus-offline-get-message 'menu-3))
+ (setq title (gnus-offline-gettext 'menu-3))
(setq menu
- (cons
- title
- (gnus-offline-get-menu-items
- '((set-auto-ppp-menu-1
- (progn
- (setq gnus-offline-auto-ppp '(connect disconnect))
- (message (gnus-offline-get-message 'set-auto-ppp-1)))
- t)
- (set-auto-ppp-menu-2
- (progn
- (setq gnus-offline-auto-ppp '(connect))
- (message (gnus-offline-get-message 'set-auto-ppp-2)))
- t)
- (set-auto-ppp-menu-3
- (progn
- (setq gnus-offline-auto-ppp nil)
- (message (gnus-offline-get-message 'set-auto-ppp-3)))
- t)))))
+ (cons title
+ (gnus-offline-get-menu-items
+ '((set-auto-ppp-menu-1
+ (progn
+ (setq gnus-offline-auto-ppp '(connect disconnect))
+ (message "%s"
+ (gnus-offline-gettext 'set-auto-ppp-1)))
+ t)
+ (set-auto-ppp-menu-2
+ (progn
+ (setq gnus-offline-auto-ppp '(connect))
+ (message "%s"
+ (gnus-offline-gettext 'set-auto-ppp-2)))
+ t)
+ (set-auto-ppp-menu-3
+ (progn
+ (setq gnus-offline-auto-ppp nil)
+ (message "%s"
+ (gnus-offline-gettext 'set-auto-ppp-3)))
+ t)))))
(gnus-offline-popup menu title))
(t
(cond ((eq gnus-offline-auto-ppp nil)
(setq gnus-offline-auto-ppp '(connect disconnect))
- (setq str (gnus-offline-get-message 'set-auto-ppp-1)))
+ (setq str (gnus-offline-gettext 'set-auto-ppp-1)))
((memq 'connect gnus-offline-auto-ppp)
(cond ((memq 'disconnect gnus-offline-auto-ppp)
(setq gnus-offline-auto-ppp '(connect))
(setq str
- (gnus-offline-get-message 'set-auto-ppp-2)))
+ (gnus-offline-gettext 'set-auto-ppp-2)))
(t
(setq gnus-offline-auto-ppp nil)
(setq str
- (gnus-offline-get-message 'set-auto-ppp-3))))))
- (message str)))))
+ (gnus-offline-gettext 'set-auto-ppp-3))))))
+ (message "%s" str)))))
;;
;; Toggle offline/online to send mail.
;;
;; Sending mail under online environ.
(gnus-offline-set-online-sendmail-function)
(setq gnus-offline-mail-treat-environ 'online)
- (message (gnus-offline-get-message 'toggle-on/off-send-mail-1)))
+ (message "%s" (gnus-offline-gettext 'toggle-on/off-send-mail-1)))
;; Sending mail under offline environ.
(gnus-offline-set-offline-sendmail-function)
(setq gnus-offline-mail-treat-environ 'offline)
- (message (gnus-offline-get-message 'toggle-on/off-send-mail-2))))
+ (message "%s" (gnus-offline-gettext 'toggle-on/off-send-mail-2))))
;;
;; Toggle articles to fetch ... both -> mail -> news -> both
;;
(defun gnus-offline-toggle-articles-to-fetch ()
"*Set articles to fetch... both(Mail/News) -> mail only -> News only -> both"
(interactive)
- (let ((string (gnus-offline-get-message 'toggle-articles-to-fetch-1))
+ (let ((string (gnus-offline-gettext 'toggle-articles-to-fetch-1))
str)
(cond ((eq gnus-offline-articles-to-fetch 'both)
(setq gnus-offline-articles-to-fetch 'mail
- str (gnus-offline-get-message 'toggle-articles-to-fetch-2)))
+ str (gnus-offline-gettext 'toggle-articles-to-fetch-2)))
((eq gnus-offline-articles-to-fetch 'mail)
(setq gnus-offline-articles-to-fetch 'news
- str (gnus-offline-get-message 'toggle-articles-to-fetch-3)))
+ str (gnus-offline-gettext 'toggle-articles-to-fetch-3)))
(t
(setq gnus-offline-articles-to-fetch 'both
- str (gnus-offline-get-message 'toggle-articles-to-fetch-4))))
- (message (format "%s %s" string str))))
+ str (gnus-offline-gettext 'toggle-articles-to-fetch-4))))
+ (message "%s %s" string str)))
;;
;; Send mail and Post news using Miee or gnus-agent.
;;
(progn
(if (eq gnus-offline-mail-treat-environ 'offline)
(progn
- (message (gnus-offline-get-message 'empting-spool-1))
+ (message "%s" (gnus-offline-gettext 'empting-spool-1))
;; Using miee to send mail.
(mail-spool-send)
- (message (gnus-offline-get-message 'empting-spool-2))))
- (message (gnus-offline-get-message 'empting-spool-3))
+ (message "%s" (gnus-offline-gettext 'empting-spool-2))))
+ (message "%s" (gnus-offline-gettext 'empting-spool-3))
;; Using miee to post news.
(if (and (not (stringp msspool-news-server))
(not msspool-news-service))
(setq msspool-news-server (nth 1 gnus-select-method))
(setq msspool-news-service 119)))
(news-spool-post)
- (message (gnus-offline-get-message 'empting-spool-4)))
+ (message "%s" (gnus-offline-gettext 'empting-spool-4)))
;; Send queued message by gnus-agent
- (message (gnus-offline-get-message 'empting-spool-5))
- (gnus-group-send-drafts)
- (message (gnus-offline-get-message 'empting-spool-6)))
+ (message "%s" (gnus-offline-gettext 'empting-spool-5))
+ (gnus-group-send-queue)
+ (message "%s" (gnus-offline-gettext 'empting-spool-6)))
;;
(run-hooks 'gnus-offline-after-empting-spool-hook))
;;
"*Set interval time for gnus-daemon."
(interactive)
(setq gnus-offline-interval-time
- (string-to-int (read-from-minibuffer
- (format (gnus-offline-get-message 'interval-time-1)
- gnus-offline-interval-time)
- nil)))
+ (string-to-number (read-from-minibuffer
+ (format (gnus-offline-gettext 'interval-time-1)
+ gnus-offline-interval-time)
+ nil)))
(if (< gnus-offline-interval-time 2)
(progn
- (message (gnus-offline-get-message 'interval-time-2))
+ (message "%s" (gnus-offline-gettext 'interval-time-2))
(setq gnus-offline-interval-time 0))
(message
- (format (gnus-offline-get-message 'interval-time-3)
+ (format (gnus-offline-gettext 'interval-time-3)
gnus-offline-interval-time)))
(gnus-offline-processed-by-timer))
-;;
-;; Expire articles using gnus-agent.
-;;
-(defun gnus-offline-agent-expire ()
- "*Expire expirable article on News group."
- (interactive)
- (and gnus-offline-agent-automatic-expire
- (if (eq 0 gnus-agent-expire-days)
- (let (gnus-agent-expire-all)
- (gnus-agent-expire))
- (gnus-agent-expire))))
+
;;
;; Menu.
;;
(defun gnus-offline-define-menu-and-key ()
"*Set key and menu."
- (if (eq gnus-offline-drafts-queue-type 'miee)
- (static-if (featurep 'xemacs)
- (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-miee)
- (gnus-offline-define-menu-on-miee))
- (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-agent))
+ (cond ((eq gnus-offline-drafts-queue-type 'miee)
+ (static-cond
+ ((featurep 'xemacs)
+ (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-miee))
+ (t
+ (gnus-offline-define-menu-on-miee))))
+ (t
+ (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-agent)))
+ ;;
(add-hook 'gnus-group-mode-hook
- '(lambda ()
- (local-set-key "\C-coh" 'gnus-offline-set-unplugged-state)
- (local-set-key "\C-cof" 'gnus-offline-toggle-articles-to-fetch)
- (local-set-key "\C-coo" 'gnus-offline-toggle-on/off-send-mail)
- (local-set-key "\C-cox" 'gnus-offline-set-auto-ppp)
- (local-set-key "\C-cos" 'gnus-offline-set-interval-time)
- (substitute-key-definition
- 'gnus-group-get-new-news 'gnus-offline-gnus-get-new-news
- gnus-group-mode-map)
- (if (eq gnus-offline-news-fetch-method 'nnagent)
- (progn
- (substitute-key-definition
- 'gnus-agent-toggle-plugged 'gnus-offline-toggle-plugged
- gnus-agent-group-mode-map)
- (local-set-key "\C-coe" 'gnus-offline-agent-expire)))))
- (if (eq gnus-offline-news-fetch-method 'nnagent)
- (add-hook 'gnus-summary-mode-hook
- '(lambda ()
- (substitute-key-definition
- 'gnus-agent-toggle-plugged 'gnus-offline-toggle-plugged
- gnus-agent-summary-mode-map))))
- (static-cond
- ((featurep 'xemacs)
- ;; Overwrite the toolbar spec for gnus-group-mode.
- (add-hook 'gnus-startup-hook
- #'(lambda ()
- (catch 'tag
- (mapc (lambda (but)
- (when (eq 'gnus-group-get-new-news (aref but 1))
- (aset but 1 'gnus-offline-gnus-get-new-news)
- (throw 'tag nil)))
- gnus-group-toolbar)))))
- (t
- (add-hook
- 'gnus-group-mode-hook
- `(lambda ()
- (define-key gnus-group-mode-map
- ,(static-if (eq system-type 'windows-nt) [S-mouse-2] [mouse-3])
- 'gnus-offline-popup-menu))))))
+ #'(lambda ()
+ (local-set-key "\C-coh" 'gnus-offline-set-unplugged-state)
+ (local-set-key "\C-cof" 'gnus-offline-toggle-articles-to-fetch)
+ (local-set-key "\C-coo" 'gnus-offline-toggle-on/off-send-mail)
+ (local-set-key "\C-cox" 'gnus-offline-set-auto-ppp)
+ (local-set-key "\C-cos" 'gnus-offline-set-interval-time)
+ (if (eq gnus-offline-news-fetch-method 'nnagent)
+ (local-set-key "\C-coe" 'gnus-agent-expire))
+ (static-unless (featurep 'xemacs)
+ (local-set-key
+ (if (eq system-type 'windows-nt) [S-mouse-2] [mouse-3])
+ 'gnus-offline-popup-menu)))))
+
;;
;;
(defun gnus-offline-popup (menu &optional title)
((featurep 'xemacs)
(popup-menu menu))
(t
- (let ((menu-func (or (and (fboundp 'easy-menu-create-menu)
- 'easy-menu-create-menu)
- 'easy-menu-create-keymaps))
- keymap pop func)
- (static-cond ((< emacs-major-version 20)
- ;; For Emacsen from 19.34 down to 19.28.
- ;; Seems the first item in MENU will be ignored.
- (or (keymapp menu)
- (setq menu
- (append (list "" ;; This will be ignored.
- (or title "Popup Menu")
- "-----"
- "-----")
- (cdr menu))))
- (setq keymap
- (if (keymapp menu)
- (append (list 'keymap
- (if title
- `(nil ,title)
- '(nil "Popup Menu"))
- '(nil "")
- '(nil ""))
- (cdr menu))
- (funcall menu-func (car menu) (cdr menu)))))
- (t
- (setq keymap
- (if (keymapp menu)
- menu
- (funcall menu-func (car menu) (cdr menu))))))
+ (let* ((menu-func (or (and (fboundp 'easy-menu-create-menu)
+ 'easy-menu-create-menu)
+ 'easy-menu-create-keymaps))
+ (keymap (if (keymapp menu)
+ menu
+ (funcall menu-func (car menu) (cdr menu))))
+ pop func)
;; Display the popup menu.
(if (and (setq pop (x-popup-menu t keymap))
(setq func (lookup-key keymap
(funcall func))))))
(defun gnus-offline-get-menu-items (list)
- (mapcar
- #'(lambda (el)
- (if (listp el)
- (apply 'vector
- (cons (gnus-offline-get-message (car el)) (cdr el)))
- el))
- list))
+ (let (result)
+ (dolist (elem list)
+ (setq result
+ (nconc result
+ (list (if (listp elem)
+ (progn
+ (setcar elem (gnus-offline-gettext (car elem)))
+ (vconcat elem))
+ elem)))))
+ result))
(defvar gnus-offline-menu
(gnus-offline-get-menu-items
(menu-2 gnus-offline-toggle-on/off-send-mail t)
(menu-3 gnus-offline-set-auto-ppp t)
"----"
- (menu-4 gnus-offline-agent-expire
+ (menu-4 gnus-agent-expire
(eq gnus-offline-news-fetch-method 'nnagent))
(menu-5 gnus-offline-set-interval-time t)
"----"
;; Timer Function
(defun gnus-offline-processed-by-timer ()
"*Set timer interval."
- (if (and (> gnus-offline-interval-time 0)
- (not gnus-offline-connected))
- ;; Timer call
- (gnus-demon-add-handler 'gnus-offline-gnus-get-new-news
- gnus-offline-interval-time
- gnus-offline-interval-time))
- (if (= gnus-offline-interval-time 0)
- (gnus-demon-remove-handler 'gnus-offline-gnus-get-new-news t)))
+ (let ((func (lambda () (call-interactively 'gnus-group-get-new-news)))
+ (time gnus-offline-interval-time))
+ (cond ((and (> time 0) (not gnus-offline-connected))
+ ;; Timer call
+ (gnus-demon-add-handler func time time))
+ ((= gnus-offline-interval-time 0)
+ (gnus-demon-remove-handler func t)))))
+;;
+;; Code for making Gnus and Gnus Offline cooperate with each other.
+;;
+
+;; Display `X-Gnus-Offline-Backend' message header aesthetically.
+(eval-after-load "eword-decode"
+ '(mime-set-field-decoder 'X-Gnus-Offline-Backend nil nil))
+
+;; Enable key and menu definitions here.
+(eval '(funcall 'gnus-offline-define-menu-and-key))
+
;;
;;
;;; gnus-offline.el ends here