X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fgnus-offline.el;h=0e4d1a2a0713c8e100a9c644b6e5932bb946b8b9;hb=1f2b93a24df7b9914dbbc1a26a6e76c8da6511d1;hp=4705ecf14f4ef22f7afd7d0513c6012a73227a4e;hpb=fe0ce09c86be123adec806fbd1b865b6df3e9be3;p=elisp%2Fgnus.git- diff --git a/lisp/gnus-offline.el b/lisp/gnus-offline.el index 4705ecf..0e4d1a2 100644 --- a/lisp/gnus-offline.el +++ b/lisp/gnus-offline.el @@ -1,12 +1,13 @@ ;;; 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 ;;; Yukihiro Ito ;;; Hidekazu Nakamura +;;; Tsukamoto Tetsuo -;;; Version: 1.51 +;;; Version: 2.20 ;;; Keywords: news , mail , offline , gnus ;;; ;;; SPECIAL THANKS @@ -37,42 +38,30 @@ ;;; This file needs miee.el and SEMI. ;;; If you set gnus-offline-drafts-queue-type to 'agent , you don't need ;;; miee.el -;;; You must use Semi-gnus 6.X.X. +;;; You must use T-gnus 6.12.0 or later. ;;; ;;; How to use. -;;; put following code in you .emacs , after the setting of Gnus. ;;; -;;; (setq gnus-offline-connect-program "/dir/program.exe") -;;; (setq gnus-offline-connect-program-arguments '("-a" "-b")) -;;; (setq gnus-offline-hangup-program "/dir/program") -;;; (setq gnus-offline-hangup-program-arguments '("-c" "-d")) -;;; (setq gnus-offline-mail-spool-directory "your-send-mail-spool-directory") -;;; (setq gnus-offline-news-spool-directory "your-send-news-spool-directory") -;;; (autoload 'gnus-offline-setup "gnus-offline") -;;; (add-hook 'gnus-load-hook 'gnus-offline-setup) +;;; Add following code at the end in your .emacs +;;; +;;; (load "gnus-ofsetup") +;;; (gnus-setup-for-offline) ;;; ;;; If you use gnus-agent as souper , put gnus-agent setup code in you .gnus.el ;;; ;;; If you use nnspool as souper , put following code in your .emacs before ;;; gnus-offline setting. ;;; -;;; (load "miee") -;;; (message-offline-state) -;;; ;;; Then , put hang.exe in exec-path directory. ;;; ;;; In Gnus group buffer , type g to get all news and mail. ;;; Then send mail and news in spool directory. ;;; ;;; Variables. -;;; gnus-offline-connect-program ... Dialup program name. -;;; gnus-offline-connect-program-arguments +;;; gnus-offline-dialup-program-arguments ;;; ... List of dialup program arguments. -;;; gnus-offline-hangup-program ... Program name that used hanup line. ;;; gnus-offline-hangup-program-arguments ;;; ... List of hangup program arguments. -;;; gnus-offline-mail-spool-directory... spool directory sending mail. -;;; gnus-offline-news-spool-directory... spool directory sending news. ;;; gnus-offline-mail-treat-environ ... toggle sending mail online/offline. ;;; gnus-offline-articles-to-fetch ... toggle fetch articles. ;;; both->mail->news->both... @@ -81,102 +70,70 @@ ;;; gnus-offline-after-online-hook ... hook after all online jobs. ;;; gnus-offline-interval-time ... Interval time to do all online jobs. ;;; (minutes) -;;; gnus-offline-MTA-type ... Type of MTA. -;;; 'smtp ... Use smtp.el. -;;; 'sendmail ... Use sendmail.el. -;;; gnus-offline-drafts-queue-type ... Method type queuing message to spool. -;;; 'miee means queue message to spool -;;; using miee.el. -;;; 'agent means queue message to spool -;;; using gnus-agent.el. +;;; gnus-offline-dialup-function ... Function to diualup. +;;; gnus-offline-hangup-function ... Function to hangup. ;;; Code: (eval '(run-hooks 'gnus-offline-load-hook)) -(require 'cl) +(eval-when-compile (require 'cl)) + +(eval-when-compile + (require 'static) + (require 'gnus-agent) + (require 'gnus-group)) (require 'custom) -(require 'pop3-fma) - -(unless (and (condition-case () - (require 'custom) - (file-error nil)) - (fboundp 'defgroup) - (fboundp 'defcustom)) - (require 'backquote) - (defmacro defgroup (&rest args)) - (defmacro defcustom (symbol value &optional doc &rest args) - (` (defvar (, symbol) (, value) (, doc)))) - ) +(require 'easymenu) +(provide 'gnus-offline) + (defgroup gnus-offline nil "Offline backend utility for Gnus." :prefix "gnus-offline-" + :group 'gnus :group 'mail :group 'news) -(defconst gnus-offline-version-number "1.51") +(defconst gnus-offline-version-number "2.20") (defconst gnus-offline-codename -;; "You may be right" ; 1.40 -;; "Chilstie Lee" ; 1.45 -;; "Uptown Girl" ; 1.46 -;; "Easy money" ; 1.47 -;; "An Innocent man" ; 1.48 -;; "Tell her about it" ; 1.50 - "This night" ; 1.51 -;; "Movin'out" -;; "Longest night" -;; "Leave a tender moment alone" -;; "Back in the U.S.S.R" -;; "Running on ice" -;; "This is the time" +;; "Beta5" ; Beta +;; "This is the time" ; 2.00 ;; "A matter of trust" ;; "Modern Woman" +;; "Ahhhhhhh!!" ; 2.10b1 + "Cup of life" ; 2.20 ;; "Code of silence" ) (defconst gnus-offline-version (format "Gnus offline backend utiliy v%s" gnus-offline-version-number)) -(defcustom gnus-offline-connect-program nil - "*Program name to dial-up dialup network. -If nil , use auto-dialup if required to connect the Internet." - :group 'gnus-offline - :type 'string) - -(defcustom gnus-offline-connect-program-arguments nil - "*Program arguments of gnus-offline-connect-program." - :group 'gnus-offline - :type '(repeat (string :tag "Argument"))) - -(defcustom gnus-offline-hangup-program nil - "*Program name to hang-up dialup network." - :group 'gnus-offline - :type 'string) - -(defcustom gnus-offline-hangup-program-arguments nil - "*Program arguments of gnus-offline-hangup-program." - :group 'gnus-offline - :type '(repeat (string :tag "Argument"))) - -(defcustom gnus-offline-auto-hangup t - "*Whether dialup-network automatically hang up when all online jobs has done." - :group 'gnus-offline - :type 'boolean) - -(defcustom gnus-offline-mail-spool-directory "~/News/mail.out" - "*Spool directory sending mail." - :group 'gnus-offline - :type 'directory) - -(defcustom gnus-offline-news-spool-directory "~/News/news.out" - "*Spool directory sending news." +(eval-when-compile + (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 + x nil t t nil t t)))) + +(defcustom gnus-offline-auto-ppp '(connect disconnect) + "*This variable decides whether to connect and/or disconnect automatically." :group 'gnus-offline - :type 'directory) + :type '(choice + (const :tag "Connection and Disconnection" (connect disconnect)) + (const :tag "Connection Only" (connect)) + (const :tag "Do Everything Manually" nil))) (defcustom gnus-offline-load-hook nil "*Hook to be run after the gnus-offline package has been loaded." :group 'gnus-offline :type 'hook) + (defcustom gnus-offline-before-online-hook nil "*Hook to be run before all online jobs." :group 'gnus-offline @@ -203,33 +160,11 @@ If mail , gnus-offline only fetch mail articles. (const mail) (const news))) -(defcustom gnus-offline-interval-time 0 - "*Interval time(minutes) to do online jobs. -If set to 0 , timer call is disabled." - :group 'gnus-offline - :type 'integer) - (defcustom gnus-offline-mail-group-level 1 "*Group level for mail group." :group 'gnus-offline :type 'integer) -(defcustom gnus-offline-MTA-type 'smtp - "*Type of MTA program. -smtp means use smtp.el. - sendmail means use sendmail.el." - :group 'gnus-offline - :type '(choice (const smtp) - (const sendmail))) - -(defcustom gnus-offline-drafts-queue-type 'miee - "*Type of to queue drafts method. -'miee means drafts are queued and sent by miee.el. -'agent means drafts are queued and sent by gnus-agent.el" - :group 'gnus-offline - :type '(choice (const miee) - (const agent))) - (defcustom gnus-offline-after-empting-spool-hook nil "*Hook to be run before empting spool." :group 'gnus-offline @@ -250,6 +185,36 @@ smtp means use smtp.el. :group 'gnus-offline :type 'function) +(defcustom gnus-offline-auto-expire t + "*Non-nil means expire articles on every session." + :group 'gnus-offline + :type 'boolean) + +;; These variables should be customized using `gnus-offline-customize', +;; not by `customize'. + +(defvar gnus-offline-dialup-program nil + "*Program name for dialup.") + +(defvar gnus-offline-hangup-program nil + "*Program name for hangup.") + +(defvar gnus-offline-dialup-program-arguments nil + "*Program arguments of gnus-offline-dialup-program.") + +(defvar gnus-offline-hangup-program-arguments nil + "*Program arguments of gnus-offline-hangup-program.") + +(defvar gnus-offline-interval-time 0 + "*Interval time(minutes) to do online jobs. +If set to 0 , timer call is disabled.") + +(defvar gnus-offline-drafts-queue-type 'agent + "*Queuing function used for draft messages.") + +(defvar gnus-offline-MTA-type 'smtp + "*Type of MTA, sendmail or smtp.el.") + ;;; Internal variables. (defvar gnus-offline-connected nil "*If value is t , dialup line is connected status. @@ -267,145 +232,259 @@ If value is nil , dialup line is disconnected status.") gnus-offline-codename) "*Header string for gnus-offline.") -(defvar gnus-offline-auto-hangup-indicator "Hup" - "*Indicator whether auto hang up is enabled.") - (defvar gnus-offline-stored-group-level nil "*Mail Group level before changing.") -(defvar gnus-offline-movemail-arguments nil - "*All command line arguments of exec-directory/movemail.") - -;;; Temporary variable: -(defvar string) -(defvar hdr) -(defvar str) -(defvar passwd) -(defvar num) -(defvar gnus-offline-map (make-sparse-keymap)) - -(autoload 'message-offline-state "miee" - "Set current status to offline state" t) -;; -;; mode-line control -(if (not (member 'gnus-offline-auto-hangup-indicator mode-line-format)) - (progn - (delete "-%-" mode-line-format) - (setq-default mode-line-format - (append mode-line-format - (list "--" 'gnus-offline-auto-hangup-indicator - "-%-"))))) -(put 'gnus-offline-set-unplugged-state 'menu-enable 'gnus-offline-connected) -(add-hook 'gnus-startup-hook 'gnus-offline-setup) +(defvar gnus-offline-mail-source nil + "*mail-sources save variable.") + +(defvar gnus-offline-lang) + +(defvar gnus-offline-resource-en + '((error-check-1 + . "WARNING!!: gnus-agent.el or nnagent.el is not loaded. +Please check your .emacs or .gnus.el to work gnus-agent fine.") + (error-check-2 ."WARNING!!: nnspool.el is not loaded. +Please check your .emacs or .gnus.el to work nnspool fine.") + (connect-server-1 . "Dialing ...") + (connect-server-2 . "Dialing ... done.") + (get-new-news-function-1 . "Set to online status.") + (hangup-line-1 . "Hang up line ... ") + (hangup-line-2 . "Hang up line ... done.") + (after-jobs-done-1 . "All online jobs has done.") + (set-auto-ppp-1 . "Connect and disconnect automatically.") + (set-auto-ppp-2 . "Connect automatically.") + (set-auto-ppp-3 . "Connect and disconnect manually.") + (set-auto-ppp-menu-1 . "Automatically Connect/Disconnect") + (set-auto-ppp-menu-2 . "Automatically Connect") + (set-auto-ppp-menu-3 . "Manually Connect/Disconnect") + (toggle-on/off-send-mail-1 . "Sending mail immidiately.") + (toggle-on/off-send-mail-2 . "Sending mail temporary to spool directory.") + (toggle-articles-to-fetch-1 . "Articles fetch from server.") + (toggle-articles-to-fetch-2 . "Only Mail") + (toggle-articles-to-fetch-3 . "Only News") + (toggle-articles-to-fetch-4 . "Mail/News both") + (empting-spool-1 . "Sending mails in spool ...") + (empting-spool-2 . "Sending mails in spool ... done.") + (empting-spool-3 . "Posting news in spool ...") + (empting-spool-4 . "Posting news in spool ... done.") + (empting-spool-5 . "Sending messages in spool ...") + (empting-spool-6 . "Sending messages in spool ... done.") + (interval-time-1 . "Interval time (now %d minutes) : ") + (interval-time-2 . "Retrieving message logic by timer is disabled.") + (interval-time-3 . "Interval time set to %d minutes") + (menu-miee-1 . "Post news in spool") + (menu-miee-2 . "Send mails in spool") + (menu-miee-3 . "Message Offline") + (menu-miee-4 . "Message Online") + (menu-1 . "Toggle articles to fetch") + (menu-2 . "Toggle online/offline send mail") + (menu-3 . "Set auto PPP") + (menu-4 . "Expire articles") + (menu-5 . "Set interval time") + (menu-6 . "Hang up Line.") + (menu-7 . "Customize options..."))) + +(defvar gnus-offline-resource-ja + '((error-check-1 + . "警告!!: gnus-agent.el または nnagent.el がロードされていません。 +.emacs または .gnus.el の gnus-agent の設定を正しくしてください。") + (error-check-2 ."警告!!: nnspool.el がロードされていません。 +.emacs または .gnus.el の nnspool の設定を正しくしてください。") + (connect-server-1 . "接続しています...") + (connect-server-2 . "接続しています...完了。") + (get-new-news-function-1 . "オンライン状態です。") + (set-auto-ppp-1 . "自動的に PPP 接続・切断します。") + (set-auto-ppp-2 . "自動的に PPP 接続します。") + (set-auto-ppp-3 . "手動で PPP 接続・切断します。") + (hangup-line-1 . "切断しています...") + (hangup-line-2 . "切断しています...完了。") + (after-jobs-done-1 . "全てのオンライン処理を完了しました。") + (toggle-on/off-send-mail-1 . "メールを直接送信します。") + (toggle-on/off-send-mail-2 . "メールはキューに送られます。") + (toggle-articles-to-fetch-1 . "受信するメッセージは... ") + (toggle-articles-to-fetch-2 . "メールのみです。") + (toggle-articles-to-fetch-3 . "ニュースのみです。") + (toggle-articles-to-fetch-4 . "メールとニュースの両方です。") + (empting-spool-1 . "キューのメールを送信中...") + (empting-spool-2 . "キューのメールを送信中... 完了。") + (empting-spool-3 . "キューのニュース記事を送信中...") + (empting-spool-4 . "キューのニュース記事を送信中... 完了。") + (empting-spool-5 . "キューのメッセージを送信中...") + (empting-spool-6 . "キューのメッセージを送信中... 完了。") + (interval-time-1 . "送受信ジョブの間隔 (現在の設定は %d 分です) : ") + (interval-time-2 . "自動送受信機能を オフ にしました。") + (interval-time-3 . "自動送受信の間隔を %d 分に設定しました。"))) + +(defvar gnus-offline-resource-ja_complete + (append + gnus-offline-resource-ja + '((menu-miee-1 . "Spool にある記事の送信") + (menu-miee-2 . "Spool にある Mail の送信") + (menu-miee-3 . "Offline 状態へ") + (menu-miee-4 . "Online 状態へ") + (menu-1 . "取得記事種類の変更") + (menu-2 . "Mail 送信方法(On/Off)の切替え") + (menu-3 . "自動 PPP 制御の設定") + (menu-4 . "取得済記事を消す") + (menu-5 . "記事取得間隔時間の設定") + (menu-6 . "回線の切断") + (menu-7 . "プロパティ...") + (set-auto-ppp-menu-1 . "自動的に PPP 接続・切断") + (set-auto-ppp-menu-2 . "自動的に PPP 接続") + (set-auto-ppp-menu-3 . "手動で PPP 接続・切断")))) + ;;; Functions -;; -;; Setting up... -;; -(defun gnus-offline-setup () - "*Initialize gnus-offline function" - (if (eq system-type 'windows-nt) - (define-process-argument-editing "/hang\\.exe\\'" - (lambda (x) (general-process-argument-editing-function - x nil t t nil t t)))) - ;; Initialize Internal Variable - (gnus-offline-initialize-variables) - - ;; Disable fetch mail when startup. - (gnus-offline-disable-fetch-mail) - - ;; To transfer Mail/News function. - (cond ((eq gnus-offline-mail-treat-environ 'offline) - ;; send mail under online environ. - (gnus-offline-set-offline-sendmail-function)) - ((eq gnus-offline-mail-treat-environ 'online) - ;; send mail under offline environ. - (gnus-offline-set-online-sendmail-function))) - ;; always treat news under offline environ. - (gnus-offline-set-offline-post-news-function) - - ;; Spool directory setting - Miee - (if (eq gnus-offline-drafts-queue-type 'miee) - (setq sendmail-to-spool-directory gnus-offline-mail-spool-directory - news-spool-request-post-directory gnus-offline-news-spool-directory)) - - ;; When startup ... state is offline. - (setq gnus-nntp-service nil - gnus-nntp-server nil) - - ;; Setup needed Hooks - (gnus-offline-setup-needed-hooks)) -;; -;; -(defun gnus-offline-initialize-variables () - "*Initialize gnus-offline internal variable." - (if (featurep 'nnmail) - (setq gnus-offline-mail-fetch-method 'nnmail)) - (if (featurep 'gnus-agent) - (setq gnus-offline-news-fetch-method 'nnagent)) - (if (featurep 'nnspool) - (setq gnus-offline-news-fetch-method 'nnspool)) - (if (eq gnus-offline-drafts-queue-type 'miee) - (load "miee")) - (gnus-offline-define-menu-and-key)) -;; -;; -(defun gnus-offline-set-offline-sendmail-function () - "*Initialize sendmail-function when unplugged status." - (if (eq gnus-offline-drafts-queue-type 'miee) - (setq message-send-mail-function 'sendmail-to-spool-in-gnspool-format) - (setq message-send-mail-function 'gnus-agent-send-mail))) -;; -(defun gnus-offline-set-online-sendmail-function () +;; 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))) -;; -(defun gnus-offline-set-offline-post-news-function () + +(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))) -;; -(defun gnus-offline-set-online-post-news-function () + +(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-needed-hooks () - "*Initialize needed hooks for gnus-offline." - (add-hook 'gnus-group-mode-hook 'gnus-offline-processed-by-timer) - (add-hook 'gnus-after-getting-new-news-hook 'gnus-offline-after-get-new-news) - (add-hook 'gnus-after-getting-news-hook 'gnus-offline-after-get-new-news) - (if (eq gnus-offline-news-fetch-method 'nnspool) - (add-hook 'after-getting-news-hook 'gnus-offline-nnspool-hangup-line)) - (add-hook 'message-send-hook 'gnus-offline-message-add-header) - (if (featurep 'pop3-fma) - (add-hook 'message-send-hook 'pop3-fma-message-add-header))) -;; -;; Get new news jobs. (gnus-agent and nnspool) -;; -(defun gnus-offline-gnus-get-new-news (&optional arg) - "*Override function \"gnus-grou-get-new-news\"." - (interactive "P") - (run-hooks 'gnus-offline-before-online-hook) - (if (functionp gnus-offline-dialup-function) - (funcall gnus-offline-dialup-function)) - (gnus-offline-get-new-news-function) - (gnus-group-get-new-news arg)) +(defun gnus-offline-setup () + "*Initialize gnus-offline function" + + (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 ((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-online-sendmail-function)) + (t + ;; send mail under offline environ. + (gnus-offline-set-offline-sendmail-function)))) + +;; +;; Setting Error check. +(defun gnus-offline-error-check () + ;; Check gnus-agent and nnspool setting. + (let ((buffer " *Offline Error*")) + (cond ((eq gnus-offline-news-fetch-method 'nnagent) + ;; nnagent and gnus-agent loaded ?? + (unless (and (featurep 'gnus-agent) + (featurep 'nnagent)) + (set-buffer (gnus-get-buffer-create buffer)) + (erase-buffer) + (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-gettext 'error-check-2)) + (pop-to-buffer buffer))) + (t + nil)))) ;; ;; dialup... ;; (defun gnus-offline-connect-server () "*Dialup function." - ;; Dialup if gnus-offline-connect-program is specified - (if (stringp gnus-offline-connect-program) + ;; Dialup if gnus-offline-dialup-program is specified + (if (stringp gnus-offline-dialup-program) (progn - (message "Dialing ...") - (apply 'call-process gnus-offline-connect-program nil nil nil - gnus-offline-connect-program-arguments) + (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 "Dialing ... done.")))) + (message "%s" (gnus-offline-gettext 'connect-server-2))))) ;; ;; Jobs before get new news , send mail and post news. @@ -416,18 +495,13 @@ If value is nil , dialup line is disconnected status.") (if (eq gnus-offline-articles-to-fetch 'mail) (gnus-offline-set-mail-group-level gnus-offline-mail-group-level)) - ;; Re initialize internal variable...if failed. - (if (or (not gnus-offline-mail-fetch-method) - (not gnus-offline-news-fetch-method)) - (gnus-offline-initialize-variables)) - ;; Set to online environ. (setq gnus-offline-connected t) ;; Set send mail/news functions to online functions. (gnus-offline-set-online-sendmail-function) (gnus-offline-set-online-post-news-function) - (message "Set to online status.") + (message "%s" (gnus-offline-gettext 'get-new-news-function-1)) ;; fetch only news (if (eq gnus-offline-articles-to-fetch 'news) @@ -439,9 +513,9 @@ If value is nil , dialup line is disconnected status.") (gnus-offline-enable-fetch-mail)) ;; fetch only mail for gnus-agent - (if (eq gnus-offline-news-fetch-method 'nnagent) - (if (eq gnus-offline-articles-to-fetch 'mail) - (setq gnus-agent-handle-level gnus-offline-mail-group-level)))) + (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))) ;; ;; Change mail group level to handle only mail. @@ -450,7 +524,7 @@ If value is nil , dialup line is disconnected status.") "*Set nnm* group level." (switch-to-buffer gnus-group-buffer) (goto-char (point-min)) - + ;; Save current level (if (not gnus-offline-stored-group-level) (while (re-search-forward " nnm" nil t) @@ -473,81 +547,46 @@ If value is nil , dialup line is disconnected status.") "*Restore nnm* group level." (switch-to-buffer gnus-group-buffer) (goto-char (point-min)) - (setq num 0) - (while (re-search-forward " nnm" nil t) - (gnus-group-set-current-level 1 (nth num gnus-offline-stored-group-level)) - (forward-line 1) - (setq num (+ num 1)) - (beginning-of-line))) + (let ((num 0)) + (while (re-search-forward " nnm" nil t) + (gnus-group-set-current-level 1 (nth num gnus-offline-stored-group-level)) + (forward-line 1) + (setq num (+ num 1)) + (beginning-of-line)))) ;; ;; Jobs after getting new news. ;; (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 (and gnus-offline-connected - gnus-offline-auto-hangup) - (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 - (progn - (if (eq gnus-offline-news-fetch-method 'nnagent) - (progn - ;; Get New News (gnus-agent) - (gnus-agent-toggle-plugged t) - - ;; fetch articles - (gnus-agent-fetch-session) - - ;; Hang Up line. then set to offline status. - (if (and gnus-offline-connected - gnus-offline-auto-hangup) - (gnus-offline-set-unplugged-state)) - - ;; All online jobs has done. - (gnus-offline-after-jobs-done))) - (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." - (if (eq gnus-offline-mail-fetch-method 'nnmail) - (setq nnmail-spool-file nil))) -;; -;; Enable fetch mail -;; -(defun gnus-offline-enable-fetch-mail () - "*Set to fetch mail." - (if (eq gnus-offline-mail-fetch-method 'nnmail) - (progn - (setq gnus-offline-mail-fetch-method 'nnmail) - (setq nnmail-movemail-program 'pop3-fma-movemail) - (setq nnmail-spool-file pop3-fma-spool-file-alist)))) -;; -;; 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))) ;; ;; Add your custom header. @@ -558,58 +597,44 @@ If value is nil , dialup line is disconnected status.") (progn (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "\n")) - (point-marker)))) + (point-marker))) + hdr str) (goto-char (point-min)) - (or (re-search-forward (concat "^" header) delimline t) - (progn - (goto-char delimline) - (forward-line -1) - (beginning-of-line) - (setq hdr (concat header " ")) - (setq str (concat hdr string)) - (setq hdr (concat str "\n")) - (insert-string hdr))))) + (unless (re-search-forward (concat "^" header) delimline t) + (goto-char delimline) + (forward-line -1) + (beginning-of-line) + (setq hdr (concat header " ")) + (setq str (concat hdr string)) + (setq hdr (concat str "\n")) + (insert-string hdr)))) ;; ;; Add X-Offline-Backend header. ;; (defun gnus-offline-message-add-header () "*Add X-Gnus-Offline-Backend header to Mail/News message." - (if (eq gnus-offline-mail-treat-environ 'offline) - (progn - (if (eq gnus-offline-news-fetch-method 'nnagent) - (setq str (format "\n with %s" nnagent-version) - string (concat gnus-offline-header-string str)) - (setq str (format "\n with %s" nnspool-version) - string (concat gnus-offline-header-string str))) - (gnus-offline-add-custom-header "X-Gnus-Offline-Backend:" string)))) - + (when (eq gnus-offline-mail-treat-environ 'offline) + (let* ((ver (if (eq gnus-offline-news-fetch-method 'nnagent) + 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))))) + ;; -;; 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 () "*Set to unplugged state." (interactive) ;; Hang Up Line. - (if (functionp gnus-offline-hangup-function) + (if (and (memq 'disconnect gnus-offline-auto-ppp) + (functionp gnus-offline-hangup-function)) (funcall gnus-offline-hangup-function)) (setq gnus-offline-connected nil) - (gnus-agent-toggle-plugged nil) + (if (eq gnus-offline-news-fetch-method 'nnagent) + (ad-Orig-gnus-agent-toggle-plugged nil)) ;; Set send mail/news function to offline functions. (gnus-offline-set-offline-sendmail-function) @@ -621,17 +646,16 @@ If value is nil , dialup line is disconnected status.") ;; (defun gnus-offline-hangup-line () "*Hangup line function." - (message "Hang up line ... ") + (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 "Hang up line ... done.")) + (message "%s" (gnus-offline-gettext 'hangup-line-2))) ;; ;; Hang Up line routine whe using nnspool ;; (defun gnus-offline-nnspool-hangup-line () - (if (and gnus-offline-connected - gnus-offline-auto-hangup) + (if gnus-offline-connected (gnus-offline-set-unplugged-state)) (gnus-offline-after-jobs-done)) ;; @@ -642,28 +666,67 @@ If value is nil , dialup line is disconnected status.") (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)) - (ding) - (message "All online jobs have done.")) + (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 "%s" (gnus-offline-gettext 'after-jobs-done-1))) ;; -;; Toggle auto hang up +;; Set auto PPP ;; -(defun gnus-offline-toggle-auto-hangup () - "*Toggle auto hangup flag." +(defun gnus-offline-set-auto-ppp () + "*Decide whether to connect and/or disconnect automatically." (interactive) - (setq string "Auto hang up logic") - (if gnus-offline-auto-hangup - (progn - (setq gnus-offline-auto-hangup nil - gnus-offline-auto-hangup-indicator "Con" - str "disabled.")) - (setq gnus-offline-auto-hangup t - gnus-offline-auto-hangup-indicator "Hup" - str "enabled.")) - (message (format "%s %s" string str))) + (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-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 "%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-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-gettext 'set-auto-ppp-2))) + (t + (setq gnus-offline-auto-ppp nil) + (setq str + (gnus-offline-gettext 'set-auto-ppp-3)))))) + (message "%s" str))))) ;; ;; Toggle offline/online to send mail. ;; @@ -675,42 +738,29 @@ If value is nil , dialup line is disconnected status.") ;; Sending mail under online environ. (gnus-offline-set-online-sendmail-function) (setq gnus-offline-mail-treat-environ 'online) - (message "Sending mail immidiately.")) + (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 "Sending mail temporary to spool directory."))) + (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) - (setq string "Articles fetch from server.") - (cond ((eq gnus-offline-articles-to-fetch 'both) - (setq gnus-offline-articles-to-fetch 'mail - str "Only Mail")) - ((eq gnus-offline-articles-to-fetch 'mail) + (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-gettext 'toggle-articles-to-fetch-2))) + ((eq gnus-offline-articles-to-fetch 'mail) (setq gnus-offline-articles-to-fetch 'news - str "Only News")) - (t - (setq gnus-offline-articles-to-fetch 'both - str "Mail/News both"))) - (message (format "%s %s" string str))) -;; -;; Toggle movemail program pop3.el -> movemail -> pop3.el -;; -(defun gnus-offline-toggle-movemail-program () - "*Toggle movemail program movemail -> pop3.el -> movemail ->..." - (interactive) - (setq string "Set nnmail-movemail-program") - (cond ((eq pop3-fma-movemail-type 'lisp) - (setq pop3-fma-movemail-type 'exe - str "to movemail")) - (t - (setq pop3-fma-movemail-type 'lisp - str "to pop3.el"))) - (message (format "%s %s" string str))) + str (gnus-offline-gettext 'toggle-articles-to-fetch-3))) + (t + (setq gnus-offline-articles-to-fetch 'both + str (gnus-offline-gettext 'toggle-articles-to-fetch-4)))) + (message "%s %s" string str))) ;; ;; Send mail and Post news using Miee or gnus-agent. ;; @@ -722,11 +772,11 @@ If value is nil , dialup line is disconnected status.") (progn (if (eq gnus-offline-mail-treat-environ 'offline) (progn - (message "Sending mails in spool ...") + (message "%s" (gnus-offline-gettext 'empting-spool-1)) ;; Using miee to send mail. (mail-spool-send) - (message "Sending mails in spool ... done."))) - (message "Posting news in spool ...") + (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)) @@ -734,11 +784,11 @@ If value is nil , dialup line is disconnected status.") (setq msspool-news-server (nth 1 gnus-select-method)) (setq msspool-news-service 119))) (news-spool-post) - (message "Posting news in spool ... done.")) + (message "%s" (gnus-offline-gettext 'empting-spool-4))) ;; Send queued message by gnus-agent - (message "Sending messages in spool ...") + (message "%s" (gnus-offline-gettext 'empting-spool-5)) (gnus-group-send-drafts) - (message "Sending messages in spool ... done.")) + (message "%s" (gnus-offline-gettext 'empting-spool-6))) ;; (run-hooks 'gnus-offline-after-empting-spool-hook)) ;; @@ -749,217 +799,180 @@ If value is nil , dialup line is disconnected status.") (interactive) (setq gnus-offline-interval-time (string-to-int (read-from-minibuffer - (format "Interval time (now %s minutes) : " + (format (gnus-offline-gettext 'interval-time-1) gnus-offline-interval-time) nil))) (if (< gnus-offline-interval-time 2) (progn - (message "Retrieving message logic by timer is disabled.") + (message "%s" (gnus-offline-gettext 'interval-time-2)) (setq gnus-offline-interval-time 0)) - (message (format "Interval time set to %d minutes" gnus-offline-interval-time))) + (message + (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) - (gnus-agent-expire)) + ;; ;; Menu. ;; (defun gnus-offline-define-menu-and-key () "*Set key and menu." - (if (eq gnus-offline-drafts-queue-type 'miee) - (add-hook 'gnus-group-mode-hook '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-com" 'gnus-offline-toggle-movemail-program) - (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-toggle-auto-hangup) - (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))))) + #'(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) + (static-cond + ((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)))))) + ;; Display the popup menu. + (if (and (setq pop (x-popup-menu t keymap)) + (setq func (lookup-key keymap + (apply 'vector pop)))) + (funcall func)))))) + +(defun gnus-offline-get-menu-items (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-1 gnus-offline-toggle-articles-to-fetch t) + (menu-2 gnus-offline-toggle-on/off-send-mail t) + (menu-3 gnus-offline-set-auto-ppp t) + "----" + (menu-4 gnus-agent-expire + (eq gnus-offline-news-fetch-method 'nnagent)) + (menu-5 gnus-offline-set-interval-time t) + "----" + (menu-6 gnus-offline-set-unplugged-state gnus-offline-connected) + "----" + (menu-7 gnus-ofsetup-customize t)))) (defun gnus-offline-define-menu-on-miee () - "*Set menu bar on MIEE menu." - (global-set-key - [menu-bar - miee - gnus-offline-hup-separator] - '("--")) - - (global-set-key - [menu-bar - miee - gnus-offline] - (cons "Gnus Offline Utility" - (make-sparse-keymap "Gnus Offline Utiliry"))) - - (if (featurep 'pop3-fma) - (global-set-key - [menu-bar - miee - gnus-offline - gnus-offline-toggle-movemail-program] - '("Toggle movemail program" . - gnus-offline-toggle-movemail-program))) - - (global-set-key - [menu-bar - miee - gnus-offline - gnus-offline-toggle-articles-to-fetch] - '("Toggle articles to fetch" . - gnus-offline-toggle-articles-to-fetch)) - - (global-set-key - [menu-bar - miee - gnus-offline - gnus-offline-toggle-on/off-send-mail] - '("Toggle online/offline send mail" . - gnus-offline-toggle-on/off-send-mail)) - - (global-set-key - [menu-bar - miee - gnus-offline - gnus-offline-toggle-auto-hangup] - '("Toggle auto hang up" . gnus-offline-toggle-auto-hangup)) - - (global-set-key - [menu-bar - miee - gnus-offline - gnus-offline-expire-separator] - '("--")) - - (if (eq gnus-offline-news-fetch-method 'nnagent) - (global-set-key - [menu-bar - miee - gnus-offline - gnus-offline-agent-expire] - '("Expire articles" . gnus-offline-agent-expire))) - - (global-set-key - [menu-bar - miee - gnus-offline - gnus-offline-set-interval-time] - '("Set interval time." . gnus-offline-set-interval-time)) - - (global-set-key - [menu-bar - miee - gnus-offline - gnus-offline-hup-separator] - '("--")) - - (global-set-key - [menu-bar - miee - gnus-offline - gnus-offline-set-unplugged-state] - '("Hang Up Line." . gnus-offline-set-unplugged-state))) + "*Set and change menu bar on MIEE menu." + (let ((miee-menu + (gnus-offline-get-menu-items + '((menu-miee-1 news-spool-post t) + (menu-miee-2 mail-spool-send t) + "----" + (menu-miee-3 message-offline-state (not message-offline-state)) + (menu-miee-4 message-online-state message-offline-state) + "----"))) + menu) + (setq menu + (easy-menu-change + nil "Miee" + (append miee-menu + (list (cons "Gnus Offline" gnus-offline-menu))))) + (static-if (featurep 'xemacs) + (easy-menu-add menu)))) ;; ;; define menu without miee. ;; (defun gnus-offline-define-menu-on-agent () "*Set menu bar on OFFLINE menu." - (define-key-after - (lookup-key global-map [menu-bar]) - [offline] - (cons "Offline" (make-sparse-keymap "Offline")) - 'help) ;; Actually this adds before "Help". - - (if (featurep 'pop3-fma) - (global-set-key - [menu-bar - offline - gnus-offline-toggle-movemail-program] - '("Toggle movemail program" . gnus-offline-toggle-movemail-program))) - - (global-set-key - [menu-bar - offline - gnus-offline-toggle-articles-to-fetch] - '("Toggle articles to fetch" . gnus-offline-toggle-articles-to-fetch)) - - (global-set-key - [menu-bar - offline - gnus-offline-toggle-on/off-send-mail] - '("Toggle online/offline send mail" . gnus-offline-toggle-on/off-send-mail)) - - (global-set-key - [menu-bar - offline - gnus-offline-toggle-auto-hangup] - '("Toggle auto hang up" . gnus-offline-toggle-auto-hangup)) - - (global-set-key - [menu-bar - offline - gnus-offline-separator] - '("--")) - - (if (eq gnus-offline-news-fetch-method 'nnagent) - (progn - (global-set-key - [menu-bar - offline - gnus-offline-agent-expire] - '("Expire articles" . gnus-offline-agent-expire)))) - - (global-set-key - [menu-bar - offline - gnus-offline-set-interval-time] - '("Set interval time." . gnus-offline-set-interval-time)) - - (global-set-key - [menu-bar - offline - gnus-offline-hup-separator] - '("--")) - - (global-set-key - [menu-bar - offline - gnus-offline-set-unplugged-state] - '("Hang Up Line." . gnus-offline-set-unplugged-state))) + (easy-menu-define + gnus-offline-menu-on-agent gnus-group-mode-map "Gnus offline Menu" + (cons "Offline" gnus-offline-menu)) + (static-if (featurep 'xemacs) + (easy-menu-add gnus-offline-menu-on-agent))) +;; +;; Popup menu within the group buffer (under Emacs). +;; +(static-unless (featurep 'xemacs) + (defun gnus-offline-popup-menu (event) + "Popup menu for Gnus Offline." + (interactive "e") + (apply 'gnus-offline-popup + (if (boundp 'miee-popup-menu) + (list (or (assq 'keymap + (assq 'Miee (assq 'menu-bar global-map))) + miee-popup-menu) + "Miee") + (list (symbol-value 'gnus-offline-menu-on-agent) + "Offline"))))) ;; ;; 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)) + ;; ;; -(provide 'gnus-offline) ;;; gnus-offline.el ends here