;;; 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>
+;;; Tsukamoto Tetsuo <czkmt@remus.dti.ne.jp>
-;;; Version: 1.53
+;;; Version: 2.20
;;; Keywords: news , mail , offline , gnus
;;;
;;; SPECIAL THANKS
;;; 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 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...
;;; 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.53")
+(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" ; 1.52
- "Longest night" ; 1.53
-;; "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
(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 'agent
- "*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
: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.
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
+ . "\e$B7Y9p\e(B!!: gnus-agent.el \e$B$^$?$O\e(B nnagent.el \e$B$,%m!<%I$5$l$F$$$^$;$s!#\e(B
+.emacs \e$B$^$?$O\e(B .gnus.el \e$B$N\e(B gnus-agent \e$B$N@_Dj$r@5$7$/$7$F$/$@$5$$!#\e(B")
+ (error-check-2 ."\e$B7Y9p\e(B!!: nnspool.el \e$B$,%m!<%I$5$l$F$$$^$;$s!#\e(B
+.emacs \e$B$^$?$O\e(B .gnus.el \e$B$N\e(B nnspool \e$B$N@_Dj$r@5$7$/$7$F$/$@$5$$!#\e(B")
+ (connect-server-1 . "\e$B@\B3$7$F$$$^$9\e(B...")
+ (connect-server-2 . "\e$B@\B3$7$F$$$^$9\e(B...\e$B40N;!#\e(B")
+ (get-new-news-function-1 . "\e$B%*%s%i%$%s>uBV$G$9!#\e(B")
+ (set-auto-ppp-1 . "\e$B<+F0E*$K\e(B PPP \e$B@\B3!&@ZCG$7$^$9!#\e(B")
+ (set-auto-ppp-2 . "\e$B<+F0E*$K\e(B PPP \e$B@\B3$7$^$9!#\e(B")
+ (set-auto-ppp-3 . "\e$B<jF0$G\e(B PPP \e$B@\B3!&@ZCG$7$^$9!#\e(B")
+ (hangup-line-1 . "\e$B@ZCG$7$F$$$^$9\e(B...")
+ (hangup-line-2 . "\e$B@ZCG$7$F$$$^$9\e(B...\e$B40N;!#\e(B")
+ (after-jobs-done-1 . "\e$BA4$F$N%*%s%i%$%s=hM}$r40N;$7$^$7$?!#\e(B")
+ (toggle-on/off-send-mail-1 . "\e$B%a!<%k$rD>@\Aw?.$7$^$9!#\e(B")
+ (toggle-on/off-send-mail-2 . "\e$B%a!<%k$O%-%e!<$KAw$i$l$^$9!#\e(B")
+ (toggle-articles-to-fetch-1 . "\e$B<u?.$9$k%a%C%;!<%8$O\e(B... ")
+ (toggle-articles-to-fetch-2 . "\e$B%a!<%k$N$_$G$9!#\e(B")
+ (toggle-articles-to-fetch-3 . "\e$B%K%e!<%9$N$_$G$9!#\e(B")
+ (toggle-articles-to-fetch-4 . "\e$B%a!<%k$H%K%e!<%9$NN>J}$G$9!#\e(B")
+ (empting-spool-1 . "\e$B%-%e!<$N%a!<%k$rAw?.Cf\e(B...")
+ (empting-spool-2 . "\e$B%-%e!<$N%a!<%k$rAw?.Cf\e(B... \e$B40N;!#\e(B")
+ (empting-spool-3 . "\e$B%-%e!<$N%K%e!<%95-;v$rAw?.Cf\e(B...")
+ (empting-spool-4 . "\e$B%-%e!<$N%K%e!<%95-;v$rAw?.Cf\e(B... \e$B40N;!#\e(B")
+ (empting-spool-5 . "\e$B%-%e!<$N%a%C%;!<%8$rAw?.Cf\e(B...")
+ (empting-spool-6 . "\e$B%-%e!<$N%a%C%;!<%8$rAw?.Cf\e(B... \e$B40N;!#\e(B")
+ (interval-time-1 . "\e$BAw<u?.%8%g%V$N4V3V\e(B (\e$B8=:_$N@_Dj$O\e(B %d \e$BJ,$G$9\e(B) : ")
+ (interval-time-2 . "\e$B<+F0Aw<u?.5!G=$r\e(B \e$B%*%U\e(B \e$B$K$7$^$7$?!#\e(B")
+ (interval-time-3 . "\e$B<+F0Aw<u?.$N4V3V$r\e(B %d \e$BJ,$K@_Dj$7$^$7$?!#\e(B")))
+
+(defvar gnus-offline-resource-ja_complete
+ (append
+ gnus-offline-resource-ja
+ '((menu-miee-1 . "Spool \e$B$K$"$k5-;v$NAw?.\e(B")
+ (menu-miee-2 . "Spool \e$B$K$"$k\e(B Mail \e$B$NAw?.\e(B")
+ (menu-miee-3 . "Offline \e$B>uBV$X\e(B")
+ (menu-miee-4 . "Online \e$B>uBV$X\e(B")
+ (menu-1 . "\e$B<hF@5-;v<oN`$NJQ99\e(B")
+ (menu-2 . "Mail \e$BAw?.J}K!\e(B(On/Off)\e$B$N@ZBX$(\e(B")
+ (menu-3 . "\e$B<+F0\e(B PPP \e$B@)8f$N@_Dj\e(B")
+ (menu-4 . "\e$B<hF@:Q5-;v$r>C$9\e(B")
+ (menu-5 . "\e$B5-;v<hF@4V3V;~4V$N@_Dj\e(B")
+ (menu-6 . "\e$B2s@~$N@ZCG\e(B")
+ (menu-7 . "\e$B%W%m%Q%F%#\e(B...")
+ (set-auto-ppp-menu-1 . "\e$B<+F0E*$K\e(B PPP \e$B@\B3!&@ZCG\e(B")
+ (set-auto-ppp-menu-2 . "\e$B<+F0E*$K\e(B PPP \e$B@\B3\e(B")
+ (set-auto-ppp-menu-3 . "\e$B<jF0$G\e(B PPP \e$B@\B3!&@ZCG\e(B"))))
+
;;; 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)
- (progn
- (if (not (file-exists-p gnus-offline-mail-spool-directory))
- (make-directory gnus-offline-mail-spool-directory t))
- (setq sendmail-to-spool-directory gnus-offline-mail-spool-directory)
- (if (not (file-exists-p gnus-offline-news-spool-directory))
- (make-directory gnus-offline-news-spool-directory t))
- (setq 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.
(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)
(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.
"*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)
"*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 (append
- pop3-fma-local-spool-file-alist
- (mapcar
- (lambda (spool)
- (car spool))
- 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)))
\f
;;
;; Add your custom header.
(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 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)))))
+
\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 ()
"*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)
;;
(setenv "MAILHOST" nil))
;;
-;; Hangup line function
+;; Hangup line function
;;
(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))
;;
(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)))
\f
;;
-;; 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.
;;
;; 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.
;;
(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))
(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 ...")
- (gnus-group-send-drafts)
- (message "Sending messages in spool ... done."))
+ (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 "Interval time (now %s minutes) : "
- 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 "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 (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
+ (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")))))
\f
;;
;; 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