* gnus-offline.el: Rewrite to work with pGnus v0.74 based T-gnus.
authoryamaoka <yamaoka>
Sun, 31 Jan 1999 23:06:20 +0000 (23:06 +0000)
committeryamaoka <yamaoka>
Sun, 31 Jan 1999 23:06:20 +0000 (23:06 +0000)
* gnus-ofsetup.el: Ditto.
* pop3-fma.el: Removed because after pGnus0.73 , pGnus can treat multiple pop3
account.
* gnus.el (running-pterodactyl-gnus-0_73-or-later): Provide as a new feature.
* mail-source.el (mail-source-read-passwd): Don't load "passwd" if the
function `read-passwd' already exists.
* gnus-start.el (gnus-read-active-file): Eliminate duplicated select methods.
* gnus-group.el (gnus-group-catchup-current): Fix typo.
* gnus.el (gnus-version-number): Update to 6.10.056.
* Sync up with Pterodactyl Gnus v0.74.

lisp/ChangeLog
lisp/gnus-art.el
lisp/gnus-cite.el
lisp/gnus-demon.el
lisp/gnus-group.el
lisp/gnus-kill.el
lisp/gnus-logic.el
lisp/gnus-msg.el
lisp/gnus-offline.el

index 92ab5a5..ead5bb5 100644 (file)
@@ -1,3 +1,136 @@
+Wed Jan 27 05:24:53 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Pterodactyl Gnus v0.74 is released.
+
+1999-01-27 05:56:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (article-fill-long-lines): Renamed.
+       (article-fill-long-lines): New keystroke.
+
+1999-01-26 06:35:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-setup-posting-charset): Check for group.
+
+       * gnus-group.el (gnus-group-catchup-current): Skip groups now
+       displayed.
+       (gnus-group-catchup-current): Be more robus.
+
+       * gnus-sum.el (gnus-summary-select-article): Reselect for showing
+       headers.
+
+1999-01-25  Dave Love  <fx@gnu.org>
+
+       * message.el (message-mode-menu): Add message-mime-attach-file.
+       (message-mode): Doc fix.
+
+1999-01-26 05:24:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnmail.el (nnmail-check-duplication): Insert the mail source
+       string.
+
+       * mail-source.el (mail-source-fetch-pop): Bind mail-source-string.
+       (mail-source-fetch-directory): Ditto.
+       (mail-source-fetch-file): Ditto.
+       (mail-source-string): New variable.
+
+       * gnus-start.el (gnus-get-unread-articles): Nix out groups over
+       the level.
+
+       * rfc2047.el (rfc2047-encodable-p): Convert to MIME charsets
+       before handling.
+
+       * mm-util.el (mm-mime-charset): Use the parameters.
+       (mm-mime-charset): Removed region paremeters.
+
+       * nnmail.el (nnmail-get-new-mail): Don't message the entire
+       source.
+
+1999-01-25 12:05:16  Lloyd Zusman  <ljz@asfast.com>
+
+       * nnmail.el (nnmail-get-split-group): Quote right.
+
+1999-01-25 05:55:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-movemail): Would kill an arbitrary
+       buffer.
+
+1999-01-24 03:02:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-clear-inboxes-moved): Removed.
+       (gnus-group-mode): Don't hook.
+
+       * mail-source.el (mail-source-bind): Doc fix.
+       (mail-source-bind): Take only one param.
+
+       * gnus-art.el (gnus-treat-highlight-signature): typep.
+
+       * mail-source.el (mail-source-movemail): Ignore empty file.
+       (mail-source-callback): Check before deleting.
+
+       * message.el (message-mime-attach-file): Include name.
+
+1999-01-23 17:01:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-util.el (mm-read-charset): Return a symbol.
+
+       * mm-view.el (mm-inline-text): Insert signature separator.
+
+       * gnus-art.el (gnus-treat-predicate): New function.
+       (gnus-treat-article): Allow all types to be checked.
+
+       * gnus-util.el (gnus-or): New function.
+       (gnus-and): Ditto.
+
+       * gnus-art.el (gnus-mime-display-single): Use override.
+
+       * mm-decode.el (mm-attachment-override-types): New variable.
+       (mm-attachment-override-p): New function.
+
+       * gnus-picon.el (gnus-group-display-picons): Don't go backward.
+
+1999-01-23 16:45:06  Andrew J. Cosgriff  <ajc@bing.wattle.id.au>
+
+       * mm-view.el (mm-inline-text): Do vcards.
+
+Sat Jan 23 14:23:27 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Pterodactyl Gnus v0.73 is released.
+
+1999-01-23 11:38:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnmail.el (nnmail-spool-file): Changed to use mail-source.
+       (nnmail-crash-box, nnmail-use-procmail, nnmail-procmail-directory,
+       nnmail-procmail-suffix, nnmail-resplit-incoming): Removed.
+       (nnmail-movemail-program): Removed.
+       (nnmail-movemail-args): Removed.
+       (nnmail-pop-password-required): Ditto.
+       (nnmail-tmp-directory): Ditto.
+       (nnmail-delete-incoming): Removed.
+       (nnmail-pop-password, nnmail-moved-inboxes,
+       nnmail-internal-password, nnmail-move-inbox): Removed.
+       (nnmail-read-passwd): Ditto.
+       (nnmail-get-spool-files): Removed.
+       (nnmail-resplit-incoming): Reinstated.
+
+       * mail-source.el: New file.
+
+1999-01-23 09:08:31  James H. Cloos, Jr.  <cloos@jhcloos.com>
+
+       * gnus-art.el (gnus-article-mode-map): Bind backspace.
+
+1999-01-23 09:05:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (article-make-date-line): Fix iso8601 display.
+
+1999-01-20 02:53:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-treat-display-smileys): Check xpm.
+
+       * gnus-picon.el (gnus-group-display-picons): Goto body.
+
+       * gnus.el: Indented all functions; broke long lines; changed all
+       instances of illegal/legal to invalid/valid.  Yes, I'm bored.
+
 Wed Jan 20 00:50:53 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Pterodactyl Gnus v0.72 is released.
index 6545081..289d910 100644 (file)
@@ -437,8 +437,7 @@ The following additional specs are available:
   :group 'gnus-article-various)
 
 (defcustom gnus-article-prepare-hook nil
-  "*A hook called after an article has been prepared in the article buffer.
-If you want to run a special decoding program like nkf, use this hook."
+  "*A hook called after an article has been prepared in the article buffer."
   :type 'hook
   :group 'gnus-article-various)
 
@@ -638,7 +637,7 @@ displayed by the first non-nil matching CONTENT face."
 (defvar gnus-inhibit-treatment nil
   "Whether to inhibit treatment.")
 
-(defcustom gnus-treat-highlight-signature 'last
+(defcustom gnus-treat-highlight-signature '(or last (typep "text/x-vcard"))
   "Highlight the signature."
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
@@ -759,7 +758,9 @@ displayed by the first non-nil matching CONTENT face."
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
-(defcustom gnus-treat-display-smileys (if gnus-xemacs t nil)
+(defcustom gnus-treat-display-smileys (if (and gnus-xemacs
+                                              (featurep 'xpm))
+                                         t nil)
   "Display smileys."
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
@@ -778,7 +779,6 @@ displayed by the first non-nil matching CONTENT face."
   '((gnus-treat-highlight-signature gnus-article-highlight-signature)
     (gnus-treat-buttonize gnus-article-add-buttons)
     (gnus-treat-buttonize-head gnus-article-add-buttons-to-head)
-    (gnus-treat-emphasize gnus-article-emphasize)
     (gnus-treat-fill-article gnus-article-fill-cited-article)
     (gnus-treat-strip-cr gnus-article-remove-cr)
     (gnus-treat-hide-headers gnus-article-hide-headers)
@@ -790,6 +790,7 @@ displayed by the first non-nil matching CONTENT face."
     (gnus-treat-highlight-headers gnus-article-highlight-headers)
     (gnus-treat-highlight-citation gnus-article-highlight-citation)
     (gnus-treat-highlight-signature gnus-article-highlight-signature)
+    (gnus-treat-emphasize gnus-article-emphasize)
     (gnus-treat-date-ut gnus-article-date-ut)
     (gnus-treat-date-local gnus-article-date-local)
     (gnus-treat-date-lapsed gnus-article-date-lapsed)
@@ -1184,22 +1185,24 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
              (put-text-property
               (point) (1+ (point)) 'face 'underline)))))))))
 
-(defun article-fill ()
-  "Format too long lines."
+(defun article-fill-long-lines ()
+  "Fill lines that are wider than the window width."
   (interactive)
   (save-excursion
-    (let ((buffer-read-only nil))
-      (widen)
-      (article-goto-body)
-      (end-of-line 1)
-      (let ((paragraph-start "^[>|#:<;* ]*[ \t]*$")
-           (adaptive-fill-regexp "[ \t]*\\([|#:<;>*]+ *\\)?")
-           (adaptive-fill-mode t))
-       (while (not (eobp))
-         (and (>= (current-column) (min fill-column (window-width)))
-              (/= (preceding-char) ?:)
-              (fill-paragraph nil))
-         (end-of-line 2))))))
+    (let ((buffer-read-only nil)
+         (width (window-width (get-buffer-window (current-buffer)))))
+      (save-restriction
+       (widen)
+       (article-goto-body)
+       (let ((adaptive-fill-mode nil))
+         (while (not (eobp))
+           (end-of-line)
+           (when (>= (current-column) (min fill-column width))
+             (narrow-to-region (point) (gnus-point-at-bol))
+             (fill-paragraph nil)
+             (goto-char (point-max))
+             (widen))
+           (forward-line 1)))))))
 
 (defun article-remove-cr ()
   "Translate CRLF pairs into LF, and then CR into LF.."
@@ -1733,7 +1736,7 @@ how much time has lapsed since DATE."
      ((eq type 'iso8601)
       (concat
        "Date: "
-       (format-time-string "%Y%M%DT%h%m%s" time)))
+       (format-time-string "%Y%m%dT%H%M%S" time)))
      ;; Do an X-Sent lapsed format.
      ((eq type 'lapsed)
       ;; If the date is seriously mangled, the timezone functions are
@@ -2186,7 +2189,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
    '(article-hide-headers
      article-hide-boring-headers
      article-treat-overstrike
-     (article-fill . gnus-article-word-wrap)
+     article-fill-long-lines
      article-remove-cr
      article-display-x-face
      article-de-quoted-unreadable
@@ -2225,6 +2228,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
   " " gnus-article-goto-next-page
   "\177" gnus-article-goto-prev-page
   [delete] gnus-article-goto-prev-page
+  [backspace] gnus-article-goto-prev-page
   "\C-c^" gnus-article-refer-article
   "h" gnus-article-show-summary
   "s" gnus-article-show-summary
@@ -2975,7 +2979,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
        (if (and (setq not-attachment
                       (or (not (mm-handle-disposition handle))
                           (equal (car (mm-handle-disposition handle))
-                                 "inline")))
+                                 "inline")
+                          (mm-attachment-override-p type)))
                 (mm-automatic-display-p type)
                 (or (mm-inlinable-part-p type)
                     (mm-automatic-external-display-p type)))
@@ -4397,34 +4402,59 @@ For example:
   (let ((length (- (point-max) (point-min)))
        (alist gnus-treatment-function-alist)
        (article-goto-body-goes-to-point-min-p t)
+       (treated-type
+        (or (not type)
+            (catch 'found
+              (let ((list gnus-article-treat-types))
+                (while list
+                  (when (string-match (pop list) type)
+                    (throw 'found t)))))))
        val elem)
-    (when (and (gnus-visual-p 'article-highlight 'highlight)
-              (or (not type)
-                  (catch 'found
-                    (let ((list gnus-article-treat-types))
-                      (while list
-                        (when (string-match (pop list) type)
-                          (throw 'found t)))))))
+    (when (gnus-visual-p 'article-highlight 'highlight)
       (gnus-run-hooks 'gnus-part-display-hook)
       (while (setq elem (pop alist))
        (setq val (symbol-value (car elem)))
-       (when (cond
-              (condition
-               (eq condition val))
-              ((null val)
-               nil)
-              ((eq val t)
-               t)
-              ((eq val 'head)
-               nil)
-              ((eq val 'last)
-               (eq part-number total-parts))
-              ((numberp val)
-               (< length val))
-              (t
-               (eval val)))
+       (when (and (or (consp val)
+                      treated-type)
+                  (gnus-treat-predicate val))
          (funcall (cadr elem)))))))
 
+;; Dynamic variables.
+(defvar part-number)
+(defvar total-parts)
+(defvar type)
+(defvar condition)
+(defvar length)
+(defun gnus-treat-predicate (val)
+  (cond
+   (condition
+    (eq condition val))
+   ((null val)
+    nil)
+   ((eq val t)
+    t)
+   ((eq val 'head)
+    nil)
+   ((eq val 'last)
+    (eq part-number total-parts))
+   ((numberp val)
+    (< length val))
+   ((listp val)
+    (let ((pred (pop val)))
+      (cond
+       ((eq pred 'or)
+       (apply 'gnus-or (mapcar 'gnus-treat-predicate val)))
+       ((eq pred 'and)
+       (apply 'gnus-and (mapcar 'gnus-tread-predicate val)))
+       ((eq pred 'not)
+       (not (gnus-treat-predicate val)))
+       ((eq pred 'typep)
+       (equal (cadr val) type))
+       (t
+       (error "%S is not a valid predicate" pred)))))
+   (t
+    (error "%S is not a valid value" val))))
+
 
 ;;; @ for mime-view
 ;;;
index db4b9dd..8845d19 100644 (file)
@@ -71,7 +71,7 @@ Set it to nil to parse all articles."
                 integer))
 
 (defcustom gnus-cite-prefix-regexp
-  "^[]>|:}+ ]*[]>|:}+]\\(.*>\\)?\\|^.*>"
+  "^[]>»|:}+ ]*[]>»|:}+]\\(.*>»\\)?\\|^.*>"
   "*Regexp matching the longest possible citation prefix on a line."
   :group 'gnus-cite
   :type 'regexp)
index 178cb66..3401ed4 100644 (file)
@@ -273,7 +273,6 @@ minutes, the connection is closed."
   (save-window-excursion
     (let ((servers gnus-opened-servers)
          server)
-      (gnus-clear-inboxes-moved)
       (while (setq server (car (pop servers)))
        (and (gnus-check-backend-function 'request-scan (car server))
             (or (gnus-server-opened server)
index bef88e8..0af00bd 100644 (file)
@@ -782,8 +782,6 @@ The following commands are available:
   (gnus-set-default-directory)
   (gnus-update-format-specifications nil 'group 'group-mode)
   (gnus-update-group-mark-positions)
-  (make-local-hook 'post-command-hook)
-  (add-hook 'post-command-hook 'gnus-clear-inboxes-moved nil t)
   (when gnus-use-undo
     (gnus-undo-mode 1))
   (when gnus-slave
@@ -804,9 +802,6 @@ The following commands are available:
            (list (cons 'process (and (search-forward "\200" nil t)
                                      (- (point) 2))))))))
 
-(defun gnus-clear-inboxes-moved ()
-  (setq nnmail-moved-inboxes nil))
-
 (defun gnus-mouse-pick-group (e)
   "Enter the group under the mouse pointer."
   (interactive "e")
@@ -851,8 +846,6 @@ Also see the `gnus-group-use-permanent-levels' variable."
            (gnus-group-default-level nil t)
            gnus-group-default-list-level
            gnus-level-subscribed))))
-  ;; Just do this here, for no particular good reason.
-  (gnus-clear-inboxes-moved)
   (unless level
     (setq level (car gnus-group-list-mode)
          unread (cdr gnus-group-list-mode)))
@@ -2453,7 +2446,8 @@ The number of newsgroups that this function was unable to catch
 up is returned."
   (interactive "P")
   (let ((groups (gnus-group-process-prefix n))
-       (ret 0))
+       (ret 0)
+       group)
     (unless groups (error "No groups selected"))
     (if (not
         (or (not gnus-interactive-catchup) ;Without confirmation?
@@ -2467,21 +2461,20 @@ up is returned."
                   (car groups)
                 (format "these %d groups" (length groups)))))))
        n
-      (while groups
+      (while (setq group (pop groups))
        ;; Virtual groups have to be given special treatment.
-       (let ((method (gnus-find-method-for-group (car groups))))
+       (let ((method (gnus-find-method-for-group group)))
          (when (eq 'nnvirtual (car method))
            (nnvirtual-catchup-group
-            (gnus-group-real-name (car groups)) (nth 1 method) all)))
-       (gnus-group-remove-mark (car groups))
-       (if (>= (gnus-group-group-level) gnus-level-zombie)
+            (gnus-group-real-name group) (nth 1 method) all)))
+       (if (>= (gnus-info-level (gnus-get-info group))
+               gnus-level-zombie)
            (gnus-message 2 "Dead groups can't be caught up")
          (if (prog1
-                 (gnus-group-goto-group (car groups))
-               (gnus-group-catchup (car groups) all))
+                 (gnus-group-goto-group group)
+               (gnus-group-catchup group all))
              (gnus-group-update-group-line)
-           (setq ret (1+ ret))))
-       (setq groups (cdr groups)))
+           (setq ret (1+ ret)))))
       (gnus-group-next-unread-group 1)
       ret)))
 
@@ -2582,7 +2575,7 @@ or nil if no action could be taken."
                              gnus-level-default-subscribed))
         s)))))
   (unless (and (>= level 1) (<= level gnus-level-killed))
-    (error "Illegal level: %d" level))
+    (error "Invalid level: %d" level))
   (let ((groups (gnus-group-process-prefix n))
        group)
     (while (setq group (pop groups))
@@ -2824,7 +2817,7 @@ yanked) a list of yanked groups is returned."
       (gnus-make-hashtable-from-newsrc-alist)
       (gnus-group-list-groups)))
    (t
-    (error "Can't kill; illegal level: %d" level))))
+    (error "Can't kill; invalid level: %d" level))))
 
 (defun gnus-group-list-all-groups (&optional arg)
   "List all newsgroups with level ARG or lower.
index 8c3ff51..d0cbe27 100644 (file)
@@ -444,7 +444,7 @@ Returns the number of articles marked as read."
             (setq beg (point))
             (setq form (ignore-errors (read (current-buffer)))))
       (unless (listp form)
-       (error "Illegal kill entry (possibly rn kill file?): %s" form))
+       (error "Invalid kill entry (possibly rn kill file?): %s" form))
       (if (or (eq (car form) 'gnus-kill)
              (eq (car form) 'gnus-raise)
              (eq (car form) 'gnus-lower))
index f345524..0b14ce0 100644 (file)
                      ((memq type '(s S string String))
                       'search-forward)
                      (t
-                      (error "Illegal match type: %s" type)))))
+                      (error "Invalid match type: %s" type)))))
          (goto-char (point-min))
          (prog1
              (funcall search-func match nil t)
index d6c0062..0314ae6 100644 (file)
@@ -240,15 +240,16 @@ Thank you for your help in stamping out bugs.
 (defun gnus-setup-posting-charset (group)
   (let ((alist gnus-group-posting-charset-alist)
        elem)
-    (catch 'found
-      (while (setq elem (pop alist))
-       (when (or (and (stringp (car elem))
-                      (string-match (car elem) group))
-                 (and (gnus-functionp (car elem))
-                      (funcall (car elem) group))
-                 (and (symbolp (car elem))
-                      (symbol-value (car elem))))
-         (throw 'found (cadr elem)))))))
+    (when group
+      (catch 'found
+       (while (setq elem (pop alist))
+         (when (or (and (stringp (car elem))
+                        (string-match (car elem) group))
+                   (and (gnus-functionp (car elem))
+                        (funcall (car elem) group))
+                   (and (symbolp (car elem))
+                        (symbol-value (car elem))))
+           (throw 'found (cadr elem))))))))
 
 (defun gnus-inews-add-send-actions (winconf buffer article)
   (make-local-hook 'message-sent-hook)
index 2a9ca81..568e2c5 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-offline.el --- To process mail & news at offline environment.
-;;; $Id: gnus-offline.el,v 1.1.2.5.2.27 1999-01-26 02:35:37 ichikawa Exp $
+;;; $Id: gnus-offline.el,v 1.1.2.5.2.28 1999-01-31 23:06:20 yamaoka Exp $
 
 ;;; Copyright (C) 1998 Tatsuya Ichikawa
 ;;;                    Yukihiro Ito
@@ -8,7 +8,7 @@
 ;;;         Hidekazu Nakamura <u90121@uis-inf.co.jp>
 ;;;         Tsukamoto Tetsuo <czkmt@remus.dti.ne.jp>
 
-;;; Version: 2.02
+;;; Version: 2.10
 ;;; Keywords: news , mail , offline , gnus
 ;;;
 ;;; SPECIAL THANKS
@@ -59,7 +59,7 @@
 ;;; In Gnus group buffer , type g to get all news and mail.
 ;;; Then send mail and news in spool directory.
 ;;;
-;;; Security Notice.
+;;; Security Notice. (This is available before version 2.02)
 ;;;
 ;;; You can set the variable gnus-offline-pop-password-file to save your POP
 ;;; passwords. But TAKE CARE. Use it at your own risk.
 
 (require 'cl)
 (require 'custom)
-(require 'pop3-fma)
 (require 'easymenu)
 
 (unless (and (condition-case ()
   :group 'mail
   :group 'news)
 
-(defconst gnus-offline-version-number "2.02")
+(defconst gnus-offline-version-number "2.10b1")
 (defconst gnus-offline-codename
 ;;  "Beta5"                    ; Beta
 ;;  "This is the time"         ; 2.00
 ;;  "A matter of trust"
-  "Modern Woman"
+;;  "Modern Woman"
+  "Ahhhhhhh!!"                 ; 2.10b1
 ;;  "Code of silence"
   )
 
@@ -253,6 +253,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)
@@ -381,25 +384,30 @@ If value is nil , dialup line is disconnected status.")
   (if (functionp gnus-offline-dialup-function)
       (funcall gnus-offline-dialup-function))
   (gnus-offline-get-new-news-function)
-  (let (buffer)
-    (unwind-protect
-       (progn
-         (save-excursion
-           (or pop3-fma-password
-               (when gnus-offline-pop-password-file
-                 (setq pop3-fma-save-password-information t)
-                 (setq buffer (get-buffer-create "*offline-temp*"))
-                 (set-buffer buffer)
-                 (erase-buffer)
-                 (insert-file-contents-as-binary gnus-offline-pop-password-file)
-                 (and gnus-offline-pop-password-decoding-function
-                      (funcall gnus-offline-pop-password-decoding-function))
-                 (eval-buffer))))
-         (gnus-group-get-new-news arg))
-      (when gnus-offline-pop-password-file
-       (setq pop3-fma-password nil)
-       (setq pop3-fma-save-password-information nil)
-       (kill-buffer buffer)))))
+  (if (not (locate-library "mail-source"))
+      (progn
+       (let (buffer)
+         (unwind-protect
+             (progn
+               (save-excursion
+                 (or pop3-fma-password
+                     (when gnus-offline-pop-password-file
+                       (setq pop3-fma-save-password-information t)
+                       (setq buffer (get-buffer-create "*offline-temp*"))
+                       (set-buffer buffer)
+                       (erase-buffer)
+                       (insert-file-contents-as-binary gnus-offline-pop-password-file)
+                       (and gnus-offline-pop-password-decoding-function
+                            (funcall gnus-offline-pop-password-decoding-function))
+                       (eval-buffer))))
+               (gnus-group-get-new-news arg))
+           (when gnus-offline-pop-password-file
+             (setq pop3-fma-password nil)
+             (setq pop3-fma-save-password-information nil)
+             (kill-buffer buffer)))))
+    ;;
+    ;; Use mail-source.el
+    (gnus-group-get-new-news arg)))
 
 ;;
 ;; dialup...
@@ -536,13 +544,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 (locate-library "mail-source"))
+      (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
 ;;
@@ -786,7 +797,8 @@ If value is nil , dialup line is disconnected status.")
   (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 (locate-library "mail-source"))
+                  (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)
@@ -837,7 +849,8 @@ If value is nil , dialup line is disconnected status.")
         ["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 t]
+         ["movemail \e$B$N@ZBX$(\e(B" gnus-offline-toggle-movemail-program
+          (not (locate-library "mail-source"))]
          ["\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]
@@ -858,7 +871,8 @@ If value is nil , dialup line is disconnected status.")
        ["Message Online" message-online-state message-offline-state]
        "----"
        ("Gnus Offline"
-       ["Toggle movemail program" gnus-offline-toggle-movemail-program t]
+       ["Toggle movemail program" gnus-offline-toggle-movemail-program
+        (not (locate-library "mail-source"))]
        ["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]
@@ -881,7 +895,8 @@ If value is nil , dialup line is disconnected status.")
    "Gnus offline Menu"
    (if (featurep 'meadow)
        '("Offline"
-        ["movemail \e$B$N@ZBX$(\e(B" gnus-offline-toggle-movemail-program t]
+        ["movemail \e$B$N@ZBX$(\e(B" gnus-offline-toggle-movemail-program
+         (not (locate-library "mail-source"))]
         ["\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]
@@ -891,7 +906,8 @@ If value is nil , dialup line is disconnected status.")
         "----"
         ["\e$B2s@~$N@ZCG\e(B" gnus-offline-set-unplugged-state gnus-offline-connected])
      '("Offline"
-       ["Toggle movemail program" gnus-offline-toggle-movemail-program t]
+       ["Toggle movemail program" gnus-offline-toggle-movemail-program
+       (not (locate-library "mail-source"))]
        ["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]