* lisp/gnus.el (gnus-revision-number): Increment to 01.
[elisp/gnus.git-] / lisp / gnus-offline.el
index bcba491..30be109 100644 (file)
@@ -1,13 +1,14 @@
 ;;; gnus-offline.el --- To process mail & news at offline environment.
-;;; $Id: gnus-offline.el,v 1.1.2.5.2.16 1998-12-11 02:06:34 ichikawa Exp $
+;;; $Id: gnus-offline.el,v 1.1.2.5.2.35.2.1 1999-07-20 15:01:17 czkmt Exp $
 
 ;;; Copyright (C) 1998 Tatsuya Ichikawa
 ;;;                    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: 2.00
+;;; Version: 2.10
 ;;; Keywords: news , mail , offline , gnus
 ;;;
 ;;; SPECIAL THANKS
@@ -80,8 +81,8 @@
 
 (require 'cl)
 (require 'custom)
-(require 'pop3-fma)
 (require 'easymenu)
+(provide 'gnus-offline)
 
 (unless (and (condition-case ()
                 (require 'custom)
   :group 'mail
   :group 'news)
 
-(defconst gnus-offline-version-number "2.00")
+(defconst gnus-offline-version-number "2.20")
 (defconst gnus-offline-codename
 ;;  "Beta5"                    ; Beta
-  "This is the time"           ; 2.00
+;;  "This is the time"         ; 2.00
 ;;  "A matter of trust"
 ;;  "Modern Woman"
+;;  "Ahhhhhhh!!"               ; 2.10b1
+  "Cup of life"                 ; 2.20
 ;;  "Code of silence"
   )
 
@@ -211,6 +214,9 @@ If value is nil , dialup line is disconnected status.")
 (defvar gnus-offline-movemail-arguments nil
   "*All command line arguments of exec-directory/movemail.")
 
+(defvar gnus-offline-mail-source nil
+  "*nnmail-spool-file save variable.")
+
 ;;; Temporary variable:
 (defvar string)
 (defvar hdr)
@@ -308,10 +314,11 @@ If value is nil , dialup line is disconnected status.")
 (defun gnus-offline-set-offline-sendmail-function ()
   "*Initialize sendmail-function when unplugged status."
   (if (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)
-    (setq gnus-agent-send-mail-function message-send-mail-function
+      (progn
+       (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))
+    (setq gnus-agent-send-mail-function (gnus-offline-set-online-sendmail-function)
          message-send-mail-function 'gnus-agent-send-mail)))
 ;;
 (defun gnus-offline-set-online-sendmail-function ()
@@ -475,13 +482,16 @@ If value is nil , dialup line is disconnected status.")
 (defun gnus-offline-enable-fetch-mail ()
   "*Set to fetch mail."
   (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))))
+  (if (not (featurep 'running-pterodactyl-gnus-0_73-or-later))
+      (progn
+       (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))))
+    (setq nnmail-spool-file gnus-offline-mail-source)))
 ;;
 ;; Enable fetch news
 ;;
@@ -587,7 +597,7 @@ If value is nil , dialup line is disconnected status.")
   (if (eq gnus-offline-articles-to-fetch 'mail)
       (gnus-offline-restore-mail-group-level))
   (if (eq gnus-offline-news-fetch-method 'nnagent)
-      (or (featurep 'xemacs)
+      (or gnus-agent-expire-all
          (gnus-offline-agent-expire)))
   (if (and (featurep 'xemacs)
           (fboundp 'play-sound-file))
@@ -718,12 +728,15 @@ If value is nil , dialup line is disconnected status.")
 (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)
+      (if (featurep 'xemacs)
+         (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-miee)
+       (gnus-offline-define-menu-on-miee))
     (add-hook 'gnus-group-mode-hook 'gnus-offline-define-menu-on-agent))
   (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)
+              (if (not (featurep 'running-pterodactyl-gnus-0_73-or-later))
+                  (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)
@@ -736,57 +749,149 @@ If value is nil , dialup line is disconnected status.")
                     (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)))))
+                    (local-set-key "\C-coe" 'gnus-offline-agent-expire)))
+              (or (featurep 'xemacs)
+                  (define-key gnus-group-mode-map 
+                    (if (eq system-type 'windows-nt) [S-mouse-2] [mouse-3])
+                    'gnus-offline-popup-menu))))
   (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)))))
+                   gnus-agent-summary-mode-map))))
+  (if (featurep 'xemacs)
+      ;; Overwrite the toolbar spec for gnus-group-mode.
+      (add-hook 'gnus-startup-hook
+               (lambda ()
+                 (catch 'tag
+                   (mapcar (lambda (but)
+                             (when (eq 'gnus-group-get-new-news (aref but 1))
+                               (aset but 1 'gnus-offline-gnus-get-new-news)
+                               (throw 'tag nil)))
+                           gnus-group-toolbar))))))
 ;;
 ;;
 (defun gnus-offline-define-menu-on-miee ()
   "*Set and change menu bar on MIEE menu."
-  (easy-menu-change
-   nil
-   "Miee"
-   '(nil
-     ["Post news in spool" news-spool-post t]
-     ["Send mails in spool" mail-spool-send t]
-     "----"
-     ["Message Offline" message-offline-state (not message-offline-state)]
-     ["Message Online" message-online-state message-online-state]
-     "----"
-     ("Gnus Offline"
-      ["Toggle movemail program" gnus-offline-toggle-movemail-program t]
-      ["Toggle articles to fetch" gnus-offline-toggle-articles-to-fetch t]
-      ["Toggle online/offline send mail" gnus-offline-toggle-on/off-send-mail t]
-      ["Toggle auto hangup" gnus-offline-toggle-auto-hangup t]
-      "----"
-      ["Expire articles" gnus-offline-agent-expire (eq gnus-offline-news-fetch-method 'nnagent)]
-      ["Set interval time" gnus-offline-set-interval-time t]
-      "----"
-      ["Hang up Line." gnus-offline-set-unplugged-state (gnus-offline-connected)]
-      ))))
+  (let ((menu
+  (if (featurep 'meadow)
+      (easy-menu-change
+       nil
+       "Miee"
+       '(
+        ["Spool \e$B$K$"$k5-;v$NAw?.\e(B" news-spool-post t]
+        ["Spool \e$B$K$"$k\e(B Mail \e$B$NAw?.\e(B" mail-spool-send t]
+        "----"
+        ["Offline \e$B>uBV$X\e(B" message-offline-state (not message-offline-state)]
+        ["Online \e$B>uBV$X\e(B" message-online-state message-offline-state]
+        "----"
+        ("Gnus Offline"
+         ["movemail \e$B$N@ZBX$(\e(B" gnus-offline-toggle-movemail-program
+          (not (featurep 'running-pterodactyl-gnus-0_73-or-later))]
+         ["\e$B<hF@5-;v<oN`$NJQ99\e(B" gnus-offline-toggle-articles-to-fetch t]
+         ["Mail \e$BAw?.J}K!\e(B(On/Off)\e$B$N@ZBX$(\e(B" gnus-offline-toggle-on/off-send-mail t]
+         ["\e$B<+F0@ZCG$N@ZBX$(\e(B" gnus-offline-toggle-auto-hangup t]
+         "----"
+         ["\e$B<hF@:Q5-;v$r>C$9\e(B" gnus-offline-agent-expire (eq gnus-offline-news-fetch-method 'nnagent)]
+         ["\e$B5-;v<hF@4V3V;~4V$N@_Dj\e(B" gnus-offline-set-interval-time t]
+         "----"
+         ["\e$B2s@~$N@ZCG\e(B" gnus-offline-set-unplugged-state gnus-offline-connected]
+         "----"
+         ["\e$B%W%m%Q%F%#\e(B..." gnus-ofsetup-customize t])
+        ))
+    (easy-menu-change
+     nil
+     "Miee"
+     '(
+       ["Post news in spool" news-spool-post t]
+       ["Send mails in spool" mail-spool-send t]
+       "----"
+       ["Message Offline" message-offline-state (not message-offline-state)]
+       ["Message Online" message-online-state message-offline-state]
+       "----"
+       ("Gnus Offline"
+       ["Toggle movemail program" gnus-offline-toggle-movemail-program
+        (not (featurep 'running-pterodactyl-gnus-0_73-or-later))]
+       ["Toggle articles to fetch" gnus-offline-toggle-articles-to-fetch t]
+       ["Toggle online/offline send mail" gnus-offline-toggle-on/off-send-mail t]
+       ["Toggle auto hangup" gnus-offline-toggle-auto-hangup t]
+       "----"
+       ["Expire articles" gnus-offline-agent-expire (eq gnus-offline-news-fetch-method 'nnagent)]
+       ["Set interval time" gnus-offline-set-interval-time t]
+       "----"
+       ["Hang up Line." gnus-offline-set-unplugged-state gnus-offline-connected]
+       "----"
+       ["Customize options..." gnus-ofsetup-customize t]
+       ))))))
+  (and (featurep 'xemacs)
+       (easy-menu-add menu))))
 ;;
 ;; define menu without miee.
 ;;
 (defun gnus-offline-define-menu-on-agent ()
   "*Set menu bar on OFFLINE menu."
   (easy-menu-define 
-   gnus-offline-menu-on-agent gnus-group-mode-map "Gnus offline Menu"
-   '("Offline"
-     ["Toggle movemail program" gnus-offline-toggle-movemail-program t]
-     ["Toggle articles to fetch" gnus-offline-toggle-articles-to-fetch t]
-     ["Toggle online/offline send mail" gnus-offline-toggle-on/off-send-mail t]
-     ["Toggle auto hangup" gnus-offline-toggle-auto-hangup t]
-     "----"
-     ["Expire articles" gnus-offline-agent-expire (eq gnus-offline-news-fetch-method 'nnagent)]
-     ["Set interval time" gnus-offline-set-interval-time t]
-     "----"
-     ["Hang up Line." gnus-offline-set-unplugged-state (gnus-offline-connected)]))
+   gnus-offline-menu-on-agent
+   gnus-group-mode-map
+   "Gnus offline Menu"
+   (if (featurep 'meadow)
+       '("Offline"
+        ["movemail \e$B$N@ZBX$(\e(B" gnus-offline-toggle-movemail-program
+         (not (featurep 'running-pterodactyl-gnus-0_73-or-later))]
+        ["\e$B<hF@5-;v<oN`$NJQ99\e(B" gnus-offline-toggle-articles-to-fetch t]
+        ["Mail \e$BAw?.J}K!\e(B(On/Off)\e$B$N@ZBX$(\e(B" gnus-offline-toggle-on/off-send-mail t]
+        ["\e$B<+F0@ZCG$N@ZBX$(\e(B" gnus-offline-toggle-auto-hangup t]
+        "----"
+        ["\e$B<hF@:Q5-;v$r>C$9\e(B" gnus-offline-agent-expire (eq gnus-offline-news-fetch-method 'nnagent)]
+        ["\e$B5-;v<hF@4V3V;~4V$N@_Dj\e(B" gnus-offline-set-interval-time t]
+        "----"
+        ["\e$B2s@~$N@ZCG\e(B" gnus-offline-set-unplugged-state gnus-offline-connected]
+        "----"
+        ["\e$B%W%m%Q%F%#\e(B..." gnus-ofsetup-customize t])
+     '("Offline"
+       ["Toggle movemail program" gnus-offline-toggle-movemail-program
+       (not (featurep 'running-pterodactyl-gnus-0_73-or-later))]
+       ["Toggle articles to fetch" gnus-offline-toggle-articles-to-fetch t]
+       ["Toggle online/offline send mail" gnus-offline-toggle-on/off-send-mail t]
+       ["Toggle auto hangup" gnus-offline-toggle-auto-hangup t]
+       "----"
+       ["Expire articles" gnus-offline-agent-expire (eq gnus-offline-news-fetch-method 'nnagent)]
+       ["Set interval time" gnus-offline-set-interval-time t]
+       "----"
+       ["Hang up Line." gnus-offline-set-unplugged-state gnus-offline-connected]
+       "----"
+       ["Customize options..." gnus-ofsetup-customize t])))
   (and (featurep 'xemacs)
        (easy-menu-add gnus-offline-menu-on-agent)))
+;;
+;; Popup menu within the group buffer (under Emacs).
+;;
+(defvar gnus-offline-popup-menu nil)
+(defun gnus-offline-popup-menu (event)
+  "Popup menu for Gnus offline."
+  (interactive "e")
+  (unless gnus-offline-popup-menu
+    (setq gnus-offline-popup-menu
+         (let ((menu
+                (if (boundp 'miee-popup-menu)
+                    (or (assoc 'keymap
+                               (assoc 'Miee (assoc 'menu-bar global-map)))
+                        miee-popup-menu)
+                  gnus-offline-menu-on-agent)))
+           (if (string< emacs-version "20")
+               (append (list 'keymap
+                             (if (boundp 'miee-popup-menu)
+                                 '(nil "Miee")
+                               '(nil "Offline"))
+                             '(nil "")
+                             '(nil ""))
+                       (cdr menu))
+             menu))))
+  (let* ((pop (x-popup-menu t gnus-offline-popup-menu))
+        (func (and pop (lookup-key gnus-offline-popup-menu
+                                   (apply 'vector pop)))))
+    (and pop func (funcall func))))
 \f
 ;;
 ;; Timer Function
@@ -802,5 +907,4 @@ If value is nil , dialup line is disconnected status.")
       (gnus-demon-remove-handler 'gnus-offline-gnus-get-new-news t)))
 ;;
 ;;
-(provide 'gnus-offline)
 ;;; gnus-offline.el ends here