1999-02-11 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
authorichikawa <ichikawa>
Fri, 12 Feb 1999 01:46:42 +0000 (01:46 +0000)
committerichikawa <ichikawa>
Fri, 12 Feb 1999 01:46:42 +0000 (01:46 +0000)
* lisp/gnus.el (gnus-version-number): Update to 6.10.058.
(gnus-revision-number): Fresh start from 00.

* lisp/message.el (message-forward): Get back to the previous
design.
* lisp/gnus-msg.el (gnus-summary-mail-forward): Ditto.

* lisp/mail-source.el (mail-source-fetch-pop): Ignore program and
authentication scheme..

* lisp/message.el (message-forward-start-separator): Restored.
(message-forward-end-separator): Restored.
(message-signature-before-forwarded-message): Restored.
(message-included-forward-headers): Restored.

* lisp/message.el (message-make-forward-subject): Use "(none)" if
the original article has no subject.

* Sync up with Pterodactyl Gnus v0.76.

* lisp/gnus-ofsetup.el (gnus-setup-for-offline): Change for pGnus 0.76.

32 files changed:
ChangeLog
lisp/ChangeLog
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-cus.el
lisp/gnus-group.el
lisp/gnus-load.el
lisp/gnus-ofsetup.el
lisp/gnus-picon.el
lisp/gnus-range.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus.el
lisp/mail-source.el
lisp/message.el
lisp/mm-bodies.el
lisp/mm-util.el
lisp/mml.el
lisp/nndoc.el
lisp/nnfolder.el
lisp/nnheader.el
lisp/nnmail.el
lisp/nnml.el
lisp/nnvirtual.el
lisp/rfc2047.el
lisp/uudecode.el
texi/ChangeLog
texi/emacs-mime.texi
texi/gnus-ja.texi
texi/gnus.texi
texi/message-ja.texi
texi/message.texi

index bf08704..f32d46c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+1999-02-11  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.10.058.
+       (gnus-revision-number): Fresh start from 00.
+
+       * lisp/message.el (message-forward): Get back to the previous
+       design.
+       * lisp/gnus-msg.el (gnus-summary-mail-forward): Ditto.
+
+       * lisp/mail-source.el (mail-source-fetch-pop): Ignore program and
+       authentication scheme..
+
+       * lisp/message.el (message-forward-start-separator): Restored.
+       (message-forward-end-separator): Restored.
+       (message-signature-before-forwarded-message): Restored.
+       (message-included-forward-headers): Restored.
+
+       * lisp/message.el (message-make-forward-subject): Use "(none)" if
+       the original article has no subject.
+
+       * Sync up with Pterodactyl Gnus v0.76.
+
+       * lisp/gnus-ofsetup.el (gnus-setup-for-offline): Change for pGnus 0.76.
+
 1999-02-09  Katsumi Yamaoka   <yamaoka@jpl.org>
 
        * lisp/gnus.el (gnus-revision-number): Increment to 08.
index 5fb51b3..c9d1a85 100644 (file)
@@ -1,3 +1,230 @@
+Thu Feb 11 04:58:51 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Pterodactyl Gnus v0.76 is released.
+
+1999-02-06  Felix Lee  <flee@cygnus.com>
+
+       * gnus.el (gnus-group-change-level-function): Typo.
+
+1999-02-11 05:47:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-nov-skip-field): Removed.
+       (gnus-nov-field): Ditto.
+       (gnus-nov-parse-extra): Ditto.
+       (gnus-nov-read-integer): Ditto.
+
+1999-02-05 09:44:20  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnheader.el (nnheader-nov-read-message-id): New macro.
+       (nnheader-parse-nov): Use it.
+
+       * gnus-sum.el (gnus-nov-read-message-id): New macro.
+       (gnus-nov-parse-line): Use it; use `(eobp)' instead of
+       `(eq (char-after) ?\n)'.
+
+1999-02-11 05:16:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-other-frame): Always pop up a new frame.
+
+Wed Feb 10 01:03:43 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-range.el (gnus-range-add): Rewrite.
+
+1999-02-02 18:12:00  Carsten Leonhardt  <leo@arioch.oche.de>
+
+       * nnmail.el (nnmail-split-incoming): Added detection of maildir
+       format.
+       (nnmail-process-maildir-mail-format): New function.
+
+       * mail-source.el (mail-source-fetch-maildir): New function.
+       (mail-source-keyword-map): Add default for maildir method.
+       (mail-source-fetcher-alist): Changed "qmail" to "maildir".
+
+1999-02-10 02:29:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetcher-alist): Remove apop.
+
+       * nndoc.el (nndoc-type-alist): Remove MIME-digest.
+       (nndoc-mime-digest-type-p): Removed.
+
+1999-02-09 15:25:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-read-summary-keys): Set the point
+       where it is supposed to be.
+       (gnus-treat-play-sounds): New variable.
+
+       * gnus-sum.el (gnus-newsgroup-ignored-charsets): New variable.
+
+       * gnus-art.el (article-display-x-face): Narrow to head.
+       (gnus-article-washed-types): New variable.
+       (article-hide-pgp): Is not a toggle.
+       (gnus-article-hide-text-type): Save types.
+       (article-decode-charset): Use it.
+
+       * nnmail.el (nnmail-get-new-mail): Ignore procmail.
+
+       * message.el (message-forward-start-separator): Removed.
+       (message-forward-end-separator): Removed.
+       (message-signature-before-forwarded-message): Removed.
+       (message-included-forward-headers): Removed.
+       (message-check-news-body-syntax): Don't check forward.
+       (message-forward): Use MIME.
+
+       * nnvirtual.el (nnvirtual-request-article): Bind
+       gnus-article-decode-hook to nil.
+
+1999-02-06 16:55:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mml.el (mml-parse-singlepart-with-multiple-charsets): Check for
+       us-ascii.
+
+1999-02-04 00:00:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * format-spec.el (format-spec): Be more robust.
+
+       * message.el (message-encode-message-body): Default
+       mail-parse-charset to mail-parse-charset.
+
+       * gnus-sum.el (gnus-summary-edit-article-done): Don't encode.
+       (gnus-summary-edit-article): Bind mail-parse-charset.
+
+       * mml.el (mml-read-tag): Ignore white space after end of tag.
+
+       * message.el (message-goto-body): Also work in separatorless
+       articles.
+
+       * mml.el (mml-translate-from-mime): New function.
+       (mml-insert-mime): Ditto.
+       (mml-to-mime): New function.
+       (mime-to-mml): New name.
+
+       * gnus-sum.el (gnus-summary-edit-article): Always select raw
+       article.
+
+       * gnus-group.el (gnus-group-catchup-current): Unmark groups.
+
+       * gnus-sum.el (gnus-summary-setup-default-charset): Don't
+       special-case nndraft groups.
+
+1999-02-03 16:44:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-get-newsgroup-headers): Bind charset.
+       (gnus-get-newsgroup-headers): Already bound.
+
+       * message.el (message-encode-message-body): Use posting charset.
+
+       * mm-bodies.el (mm-encode-body): Use MIME charsets.
+       (mm-body-encoding): Do CTE.
+       (mm-body-7-or-8): New function.
+
+       * mm-util.el (mm-mime-charset): Always fall back on alist.
+       (mm-mime-mule-charset-alist): Include katakana-jisx0201.
+       (mm-mime-mule-charset-alist): Add arabic-*-column.
+       (mm-find-mime-charset-region): New function.
+
+       * format-spec.el (format-spec-make): New function.
+
+       * mail-source.el (format-spec): Required.
+       (mail-source-fetch-with-program): Removed.
+       (mail-source-fetch-with-program): New function.
+
+       * format-spec.el: New file.
+
+1999-02-03 16:00:41  Tatsuya Ichikawa  <ichikawa@hv.epson.co.jp>
+
+       * mail-source.el (mail-source-fetch-with-program): Take optional
+       parameter.
+
+1999-02-03 00:31:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el: Ignore some groups.
+       (gnus-setup-news): Bind nnmail-fetched-sources.
+
+       * message.el (message-send-mail): Remove all tabs.
+
+       * mm-util.el (mm-find-charset-region): Just check whether
+       find-charset-region is defined.
+
+1999-02-02 23:35:20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-get-new-news): Use
+       nnmail-fetched-sources.
+
+       * nnmail.el (nnmail-fetched-sources): New variable.
+       (nnmail-get-new-mail): Use it.
+
+       * mail-source.el (mail-source-fetched-sources): New variable.
+       (mail-source-fetch): Use it.
+
+1999-02-02 23:20:20  Mark W. Eichin  <eichin@thok.org>
+
+       * gnus.el (gnus-getenv-nntpserver): if the file that
+       gnus-nntpserver-file names has a trailing newline, the
+       string-match will always match, and thus the file will never be
+       read.  (^ matches start of "line", \\` matches start of "buffer",
+       which is what was intended...)
+
+1999-02-02 23:17:40  Kim-Minh Kaplan  <kmkaplan@western.fr>
+
+       * gnus-picon.el (gnus-picons-parse-filenames): Quote group names.
+
+1999-01-28 04:15:46  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-start.el (gnus-read-active-file): Eliminate duplicated
+       select methods.
+
+1999-01-27  Simon Josefsson  <jas@pdc.kth.se>
+
+       * gnus-range.el (gnus-remove-from-range): Sort second argument.
+
+1999-02-02 10:55:23  Scott Hofmann  <shofmann@mindspring.com>
+
+       * nntp.el: Use mail-source-read-passwd instead of nnmail-read-passwd.
+
+Mon Feb  1 23:23:03 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-cus.el (gnus-group-parameters): Charset as symbol, and fix
+       a typo.
+       * gnus-sum.el (gnus-summary-setup-default-charset): Set nndraft's
+       charset to nil.
+       * gnus-agent.el (gnus-agent-queue-setup): Remove charset setting.
+       * gnus-start.el (gnus-start-draft-setup): Ditto.
+
+1999-02-02 22:13:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetch-directory): Use the predicate.
+       (mail-source-value): Don't do variables.
+
+       * nnmail.el (nnmail-get-new-mail): Set the predicate.
+
+       * gnus-sum.el (gnus-summary-toggle-header): Fix, and bound to t.
+
+1999-02-01  Michael Cook  <cook@sightpath.com>
+
+       * Defenestrate spurious ?a.
+
+1999-02-02 21:59:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetch-pop): Instead use
+       :authentication.
+
+1999-02-01  Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/mail-source.el : Support APOP authentication scheme.
+
+1999-02-02 21:56:14  Tatsuya Ichikawa  <t-ichi@niagara.shiojiri.ne.jp>
+
+       * pop3.el (pop3-movemail): Return t.
+
+1999-02-02 21:48:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * rfc2047.el (rfc2047-fold-region): New function.
+       (rfc2047-encode-message-header): Use it.
+
+1999-02-02 21:07:27  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+
+       * gnus-sum.el (gnus-group-charset-alist): Add more.
+
 Mon Feb  1 21:18:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * gnus.el: Pterodactyl Gnus v0.75 is released.
@@ -986,7 +1213,7 @@ Mon Nov 30 23:38:02 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
        * mm-uu.el (mm-uu-dissect): Use mm-make-handle.
 
-1998-12-01 01:53:49  François Pinard  <pinard@iro.umontreal.ca>
+1998-12-01 01:53:49  Fran\e$BmP\e(Bis Pinard  <pinard@iro.umontreal.ca>
 
        * nndoc.el (nndoc-mime-parts-type-p): Do related.
 
@@ -2732,7 +2959,7 @@ Mon Sep 14 18:55:38 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
        * rfc2047.el (rfc2047-q-encode-region): Would bug out.
 
-1998-09-13  François Pinard  <pinard@iro.umontreal.ca>
+1998-09-13  Fran\e$BmP\e(Bis Pinard  <pinard@iro.umontreal.ca>
 
        * nndoc.el: Make nndoc-dissection-alist simpler for MIME, adjust all
           related functions.  Handle message/rfc822 parts.  Display subject on
index 40377bc..eb6f0f0 100644 (file)
@@ -329,7 +329,6 @@ agent minor mode in all Gnus buffers."
     (gnus-request-create-group "queue" '(nndraft ""))
     (let ((gnus-level-default-subscribed 1))
       (gnus-subscribe-group "nndraft:queue" nil '(nndraft "")))
-    (gnus-group-set-parameter "nndraft:queue" 'charset nil)
     (gnus-group-set-parameter
      "nndraft:queue" 'gnus-dummy '((gnus-draft-mode)))))
 
index 30f0ac2..81078a9 100644 (file)
@@ -797,9 +797,15 @@ The format is defined by the `gnus-article-time-format' variable."
   :group 'gnus-article-treat
   :type gnus-article-treat-custom)
 
+(defcustom gnus-treat-play-sounds nil
+  "Fill long lines."
+  :group 'gnus-article-treat
+  :type gnus-article-treat-custom)
+
 ;;; Internal variables
 
 (defvar article-goto-body-goes-to-point-min-p nil)
+(defvar gnus-article-wash-types nil)
 
 (defvar gnus-article-mime-handle-alist-1 nil)
 (defvar gnus-treatment-function-alist
@@ -836,7 +842,8 @@ The format is defined by the `gnus-article-time-format' variable."
     (gnus-treat-buttonize-head gnus-article-add-buttons-to-head)
     (gnus-treat-display-xface gnus-article-display-x-face)
     (gnus-treat-display-smileys gnus-smiley-display)
-    (gnus-treat-display-picons gnus-article-display-picons)))
+    (gnus-treat-display-picons gnus-article-display-picons)
+    (gnus-treat-play-sounds gnus-earcon-display)))
 
 (defvar gnus-article-mime-handle-alist nil)
 (defvar article-lapsed-timer nil)
@@ -906,11 +913,14 @@ Then replace the article with the result."
 
 (defun gnus-article-hide-text-type (b e type)
   "Hide text of TYPE between B and E."
+  (push type gnus-article-wash-types)
   (gnus-article-hide-text
    b e (cons 'article-type (cons type gnus-hidden-properties))))
 
 (defun gnus-article-unhide-text-type (b e type)
   "Unhide text of TYPE between B and E."
+  (setq gnus-article-wash-types
+       (delq type gnus-article-wash-types))
   (remove-text-properties
    b e (cons 'article-type (cons type gnus-hidden-properties)))
   (when (memq 'intangible gnus-hidden-properties)
@@ -1286,6 +1296,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
          (case-fold-search t)
          from last)
       (save-restriction
+       (message-narrow-to-head)
        (goto-char (point-min))
        (setq from (message-fetch-field "from"))
        (goto-char (point-min))
@@ -1355,6 +1366,8 @@ If PROMPT (the prefix), prompt for a coding system to use."
                        (mail-content-type-get ctl 'charset))))
             (mail-parse-charset gnus-newsgroup-charset)
             buffer-read-only)
+       (when (memq charset gnus-newsgroup-ignored-charsets)
+         (setq charset nil))
        (goto-char (point-max))
        (widen)
        (forward-line 1)
@@ -1394,43 +1407,41 @@ or not."
          (when charset
            (mm-decode-body charset)))))))
 
-(defun article-hide-pgp (&optional arg)
-  "Toggle hiding of any PGP headers and signatures in the current article.
-If given a negative prefix, always show; if given a positive prefix,
-always hide."
-  (interactive (gnus-article-hidden-arg))
-  (unless (gnus-article-check-hidden-text 'pgp arg)
-    (save-excursion
-      (let ((inhibit-point-motion-hooks t)
-           buffer-read-only beg end)
-       (widen)
-       (goto-char (point-min))
-       ;; Hide the "header".
-       (when (search-forward "\n-----BEGIN PGP SIGNED MESSAGE-----\n" nil t)
-         (delete-region (1+ (match-beginning 0)) (match-end 0))
-         ;; PGP 5 and GNU PG add a `Hash: <>' comment, hide that too
-         (when (looking-at "Hash:.*$")
-           (delete-region (point) (1+ (gnus-point-at-eol))))
-         (setq beg (point))
-         ;; Hide the actual signature.
-         (and (search-forward "\n-----BEGIN PGP SIGNATURE-----\n" nil t)
-              (setq end (1+ (match-beginning 0)))
-              (delete-region
-               end
-               (if (search-forward "\n-----END PGP SIGNATURE-----\n" nil t)
-                   (match-end 0)
-                 ;; Perhaps we shouldn't hide to the end of the buffer
-                 ;; if there is no end to the signature?
-                 (point-max))))
-         ;; Hide "- " PGP quotation markers.
-         (when (and beg end)
-           (narrow-to-region beg end)
-           (goto-char (point-min))
-           (while (re-search-forward "^- " nil t)
-             (delete-region
-              (match-beginning 0) (match-end 0)))
-           (widen))
-         (gnus-run-hooks 'gnus-article-hide-pgp-hook))))))
+(defun article-hide-pgp ()
+  "Remove any PGP headers and signatures in the current article."
+  (interactive)
+  (save-excursion
+    (let ((inhibit-point-motion-hooks t)
+         buffer-read-only beg end)
+      (widen)
+      (goto-char (point-min))
+      ;; Hide the "header".
+      (when (search-forward "\n-----BEGIN PGP SIGNED MESSAGE-----\n" nil t)
+       (push 'pgp gnus-article-wash-types)
+       (delete-region (1+ (match-beginning 0)) (match-end 0))
+       ;; PGP 5 and GNU PG add a `Hash: <>' comment, hide that too
+       (when (looking-at "Hash:.*$")
+         (delete-region (point) (1+ (gnus-point-at-eol))))
+       (setq beg (point))
+       ;; Hide the actual signature.
+       (and (search-forward "\n-----BEGIN PGP SIGNATURE-----\n" nil t)
+            (setq end (1+ (match-beginning 0)))
+            (delete-region
+             end
+             (if (search-forward "\n-----END PGP SIGNATURE-----\n" nil t)
+                 (match-end 0)
+               ;; Perhaps we shouldn't hide to the end of the buffer
+               ;; if there is no end to the signature?
+               (point-max))))
+       ;; Hide "- " PGP quotation markers.
+       (when (and beg end)
+         (narrow-to-region beg end)
+         (goto-char (point-min))
+         (while (re-search-forward "^- " nil t)
+           (delete-region
+            (match-beginning 0) (match-end 0)))
+         (widen))
+       (gnus-run-hooks 'gnus-article-hide-pgp-hook)))))
 
 (defun article-hide-pem (&optional arg)
   "Toggle hiding of any PEM headers and signatures in the current article.
@@ -1442,23 +1453,23 @@ always hide."
       (let (buffer-read-only end)
        (widen)
        (goto-char (point-min))
-       ;; hide the horrendously ugly "header".
-       (and (search-forward "\n-----BEGIN PRIVACY-ENHANCED MESSAGE-----\n"
-                            nil
-                            t)
-            (setq end (1+ (match-beginning 0)))
-            (gnus-article-hide-text-type
-             end
-             (if (search-forward "\n\n" nil t)
-                 (match-end 0)
-               (point-max))
-             'pem))
-       ;; hide the trailer as well
-       (and (search-forward "\n-----END PRIVACY-ENHANCED MESSAGE-----\n"
-                            nil
-                            t)
-            (gnus-article-hide-text-type
-             (match-beginning 0) (match-end 0) 'pem))))))
+       ;; Hide the horrendously ugly "header".
+       (when (and (search-forward
+                   "\n-----BEGIN PRIVACY-ENHANCED MESSAGE-----\n"
+                   nil t)
+                  (setq end (1+ (match-beginning 0))))
+         (push 'pem gnus-article-wash-types)
+         (gnus-article-hide-text-type
+          end
+          (if (search-forward "\n\n" nil t)
+              (match-end 0)
+            (point-max))
+          'pem)
+         ;; Hide the trailer as well
+         (when (search-forward "\n-----END PRIVACY-ENHANCED MESSAGE-----\n"
+                               nil t)
+           (gnus-article-hide-text-type
+            (match-beginning 0) (match-end 0) 'pem)))))))
 
 (defun article-strip-banner ()
   "Strip the banner specified by the `banner' group parameter."
@@ -2402,6 +2413,7 @@ commands:
   (make-local-variable 'gnus-article-mime-handles)
   (make-local-variable 'gnus-article-decoded-p)
   (make-local-variable 'gnus-article-mime-handle-alist)
+  (make-local-variable 'gnus-article-washed-types)
   (gnus-set-default-directory)
   (buffer-disable-undo)
   (setq buffer-read-only t)
@@ -2630,9 +2642,9 @@ If ALL-HEADERS is non-nil, no headers are hidden."
            (let ((gnus-article-mime-handle-alist-1
                   gnus-article-mime-handle-alist))
              (gnus-set-mode-line 'article))
-           (gnus-configure-windows 'article)
            (article-goto-body)
            (set-window-point (get-buffer-window (current-buffer)) (point))
+           (gnus-configure-windows 'article)
            t))))))
 
 ;;;###autoload
@@ -2834,20 +2846,25 @@ If ALL-HEADERS is non-nil, no headers are hidden."
   (gnus-article-part-wrapper n 'mm-save-part))
 
 (defun gnus-article-interactively-view-part (n)
-  "Pipe MIME part N, which is the numerical prefix."
+  "View MIME part N interactively, which is the numerical prefix."
   (interactive "p")
   (gnus-article-part-wrapper n 'mm-interactively-view-part))
 
 (defun gnus-article-copy-part (n)
-  "Pipe MIME part N, which is the numerical prefix."
+  "Copy MIME part N, which is the numerical prefix."
   (interactive "p")
   (gnus-article-part-wrapper n 'gnus-mime-copy-part))
 
 (defun gnus-article-externalize-part (n)
-  "Pipe MIME part N, which is the numerical prefix."
+  "View MIME part N externally, which is the numerical prefix."
   (interactive "p")
   (gnus-article-part-wrapper n 'gnus-mime-externalize-part))
 
+(defun gnus-article-inline-part (n)
+  "Inline MIME part N, which is the numerical prefix."
+  (interactive "p")
+  (gnus-article-part-wrapper n 'gnus-mime-inline-part))
+
 (defun gnus-article-view-part (n)
   "View MIME part N, which is the numerical prefix."
   (interactive "p")
@@ -2971,7 +2988,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
          ;; may change the point.  So we set the window point.
          (set-window-point window point)))
       (let* ((handles (or ihandles (mm-dissect-buffer) (mm-uu-dissect)))
-            handle name type b e display)
+            buffer-read-only handle name type b e display)
        (unless ihandles
          ;; Top-level call; we clean up.
          (mm-destroy-parts gnus-article-mime-handles)
@@ -3189,13 +3206,13 @@ If ALL-HEADERS is non-nil, no headers are hidden."
   (save-excursion
     (set-buffer gnus-article-buffer)
     (let ((cite (gnus-article-hidden-text-p 'cite))
-         (headers (gnus-article-hidden-text-p 'headers))
-         (boring (gnus-article-hidden-text-p 'boring-headers))
-         (pgp (gnus-article-hidden-text-p 'pgp))
-         (pem (gnus-article-hidden-text-p 'pem))
-         (signature (gnus-article-hidden-text-p 'signature))
-         (overstrike (gnus-article-hidden-text-p 'overstrike))
-         (emphasis (gnus-article-hidden-text-p 'emphasis))
+         (headers (gnus-article-hidden-text-p 'headers))
+         (boring (gnus-article-hidden-text-p 'boring-headers))
+         (pgp (gnus-article-hidden-text-p 'pgp))
+         (pem (gnus-article-hidden-text-p 'pem))
+         (signature (gnus-article-hidden-text-p 'signature))
+         (overstrike (gnus-article-hidden-text-p 'overstrike))
+         (emphasis (gnus-article-hidden-text-p 'emphasis))
          (mime gnus-show-mime))
       (format "%c%c%c%c%c%c%c"
              (if cite ?c ? )
@@ -3445,9 +3462,12 @@ Argument LINES specifies lines to be scrolled down."
           (set-buffer obuf)
           (unless not-restore-window
             (set-window-configuration owin))
-          (unless (or (not (eq selected 'old)) (member keys up-to-top))
+          (when (eq selected 'old)
+           (article-goto-body)
+            (set-window-start (get-buffer-window (current-buffer))
+                              1)
             (set-window-point (get-buffer-window (current-buffer))
-                              opoint))
+                              (point)))
           (let ((win (get-buffer-window gnus-article-current-summary)))
             (when win
               (set-window-point win new-sum-point))))))))
@@ -3675,18 +3695,21 @@ groups."
     (error "The current newsgroup does not support article editing"))
   (gnus-article-date-original)
   (gnus-article-edit-article
+   'ignore
    `(lambda (no-highlight)
+      'ignore
       (gnus-summary-edit-article-done
        ,(or (mail-header-references gnus-current-headers) "")
        ,(gnus-group-read-only-p) ,gnus-summary-buffer no-highlight))))
 
-(defun gnus-article-edit-article (exit-func)
+(defun gnus-article-edit-article (start-func exit-func)
   "Start editing the contents of the current article buffer."
   (let ((winconf (current-window-configuration)))
     (set-buffer gnus-article-buffer)
     (gnus-article-edit-mode)
-    (gnus-article-delete-text-of-type 'annotation)
-    (gnus-set-text-properties (point-min) (point-max) nil)
+    (funcall start-func)
+    ;;(gnus-article-delete-text-of-type 'annotation)
+    ;;(gnus-set-text-properties (point-min) (point-max) nil)
     (gnus-configure-windows 'edit-article)
     (setq gnus-article-edit-done-function exit-func)
     (setq gnus-prev-winconf winconf)
index a560e2a..e50aef0 100644 (file)
@@ -108,7 +108,7 @@ rules as described later).")
                    (const signature)
                    string ) "\
 Banner to be removed from articles.")
-a
+
     (auto-expire (const :tag "Automatic Expire" t) "\
 All articles that are read will be marked as expirable.")
 
@@ -167,7 +167,7 @@ An arbitrary comment on the group.")
 Always display this group, even when there are no unread articles
 in it..")
 
-    (charset (string :tag "Charset") "\
+    (charset (symbol :tag "Charset") "\
 The default charset to use in the group."))
   "Alist of valid group parameters.
 
index 0af00bd..3845b76 100644 (file)
@@ -49,7 +49,7 @@
   :group 'gnus-group-foreign
   :type 'directory)
 
-(defcustom gnus-no-groups-message "No news is no news"
+(defcustom gnus-no-groups-message "No gnus is bad news"
   "*Message displayed by Gnus when no groups are available."
   :group 'gnus-start
   :type 'string)
@@ -2462,6 +2462,7 @@ up is returned."
                 (format "these %d groups" (length groups)))))))
        n
       (while (setq group (pop groups))
+       (gnus-group-remove-mark group)
        ;; Virtual groups have to be given special treatment.
        (let ((method (gnus-find-method-for-group group)))
          (when (eq 'nnvirtual (car method))
@@ -2900,7 +2901,10 @@ If ARG is a number, it specifies which levels you are interested in
 re-scanning.  If ARG is non-nil and not a number, this will force
 \"hard\" re-reading of the active files from all servers."
   (interactive "P")
-  (let ((gnus-inhibit-demon t))
+  (let ((gnus-inhibit-demon t)
+       ;; Binding this variable will inhibit multiple fetchings
+       ;; of the same mail source.
+       (nnmail-fetched-sources (list t)))
     (gnus-run-hooks 'gnus-get-new-news-hook)
 
     ;; Read any slave files.
index 978f272..f89f95e 100644 (file)
@@ -19,7 +19,6 @@
 (put 'gnus-thread 'custom-loads '("gnus-sum"))
 (put 'languages 'custom-loads '("cus-edit"))
 (put 'development 'custom-loads '("cus-edit"))
-(put 'gnus-treading 'custom-loads '("gnus-sum"))
 (put 'nnmail-various 'custom-loads '("nnmail"))
 (put 'extensions 'custom-loads '("wid-edit"))
 (put 'message-various 'custom-loads '("message"))
index ae1c875..57f0841 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus-ofsetup.el --- Setup advisor for Offline reading for Mail/News.
 ;;;
-;;; $Id: gnus-ofsetup.el,v 1.1.2.12 1999-02-03 13:09:33 ichikawa Exp $
+;;; $Id: gnus-ofsetup.el,v 1.1.2.13 1999-02-12 01:45:31 ichikawa Exp $
 ;;;
 ;;; Copyright (C) 1998 Tatsuya Ichikawa
 ;;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
                                      auth
                                      :user user
                                      :server server
-                                     :program prog
-                                     :args (format "%s %s" args
-                                                   (concat "po:" user)))))))
+                                     :program
+                                     (format "%s %s %s %s %s"
+                                             prog
+                                             args
+                                             "po:%u"
+                                             "%t"
+                                             "%p"))))))
                  (setq mail-source
                        (append mail-source
                                (list
index f5e7073..bab2bfd 100644 (file)
@@ -593,9 +593,10 @@ none, and whose CDR is the corresponding element of DOMAINS."
       (setq start-re
            (concat
             ;; dbs
-            "^\\(" (mapconcat 'identity dbs "\\|") "\\)/"
+            "^\\(" (mapconcat 'regexp-quote dbs "\\|") "\\)/"
             ;; host
-            "\\(\\(" (replace-in-string host "\\." "/\\|" t)
+            "\\(\\(" (mapconcat 'regexp-quote
+                                (message-tokenize-header host ".") "/\\|")
             "/\\|MISC/\\)*\\)"
             ;; user
             "\\(" (regexp-quote user) "\\|unknown\\)/"
index 2705795..97197fe 100644 (file)
@@ -226,7 +226,12 @@ Note: LIST has to be sorted over `<'."
 
 (defun gnus-remove-from-range (range1 range2)
   "Return a range that has all articles from RANGE2 removed from
-RANGE1. The returned range is always a list."
+RANGE1. The returned range is always a list. RANGE2 can also be a
+unsorted list of articles."
+  (if (listp (cdr range2))
+      (setq range2 (sort range2 (lambda (e1 e2)
+                                 (< (if (consp e1) (car e1) e1)
+                                    (if (consp e2) (car e2) e2))))))
   (if (or (null range1) (null range2))
       range1
     (let (out r1 r2 r1_min r1_max r2_min r2_max)
@@ -326,19 +331,59 @@ RANGE1. The returned range is always a list."
     sublistp))
 
 (defun gnus-range-add (range1 range2)
-  "Add RANGE2 to RANGE1 destructively."
-  (cond
-   ;; If either are nil, then the job is quite easy.
-   ((or (null range1) (null range2))
-    (or range1 range2))
-   (t
-    ;; I don't like thinking.
-    (gnus-compress-sequence
-     (sort
-      (nconc
-       (gnus-uncompress-range range1)
-       (gnus-uncompress-range range2))
-      '<)))))
+  "Add RANGE2 to RANGE1 (nondestructively)."
+  (unless (listp (cdr range1))
+    (setq range1 (list range1)))
+  (unless (listp (cdr range2))
+    (setq range2 (list range2)))
+  (let ((item1 (pop range1))
+       (item2 (pop range2))
+       range item selector)
+    (while (or item1 item2)
+      (setq selector
+           (cond 
+            ((null item1) nil)
+            ((null item2) t)
+            ((and (numberp item1) (numberp item2)) (< item1 item2))
+            ((numberp item1) (< item1 (car item2)))
+            ((numberp item2) (< (car item1) item2))
+            (t (< (car item1) (car item2)))))
+      (setq item
+           (or
+            (let ((tmp1 item) (tmp2 (if selector item1 item2)))
+              (cond 
+               ((null tmp1) tmp2)
+               ((null tmp2) tmp1)
+               ((and (numberp tmp1) (numberp tmp2))
+                (cond 
+                 ((eq tmp1 tmp2) tmp1)
+                 ((eq (1+ tmp1) tmp2) (cons tmp1 tmp2))
+                 ((eq (1+ tmp2) tmp1) (cons tmp2 tmp1))
+                 (t nil)))
+               ((numberp tmp1)
+                (cond 
+                 ((and (>= tmp1 (car tmp2)) (<= tmp1 (cdr tmp2))) tmp2)
+                 ((eq (1+ tmp1) (car tmp2)) (cons tmp1 (cdr tmp2)))
+                 ((eq (1- tmp1) (cdr tmp2)) (cons (car tmp2) tmp1))
+                 (t nil)))
+               ((numberp tmp2)
+                (cond 
+                 ((and (>= tmp2 (car tmp1)) (<= tmp2 (cdr tmp1))) tmp1)
+                 ((eq (1+ tmp2) (car tmp1)) (cons tmp2 (cdr tmp1)))
+                 ((eq (1- tmp2) (cdr tmp1)) (cons (car tmp1) tmp2))
+                 (t nil)))
+               ((< (1+ (cdr tmp1)) (car tmp2)) nil)
+               ((< (1+ (cdr tmp2)) (car tmp1)) nil)
+               (t (cons (min (car tmp1) (car tmp2)) 
+                        (max (cdr tmp1) (cdr tmp2))))))
+            (progn
+              (if item (push item range))
+              (if selector item1 item2))))
+      (if selector
+         (setq item1 (pop range1))
+       (setq item2 (pop range2))))
+    (if item (push item range))
+    (reverse range)))
 
 (provide 'gnus-range)
 
index f4ebe4a..b952624 100644 (file)
@@ -720,7 +720,6 @@ prompt the user for the name of an NNTP server to use."
   (unless (gnus-gethash "nndraft:drafts" gnus-newsrc-hashtb)
     (let ((gnus-level-default-subscribed 1))
       (gnus-subscribe-group "nndraft:drafts" nil '(nndraft "")))
-    (gnus-group-set-parameter "nndraft:drafts" 'charset nil)
     (gnus-group-set-parameter
      "nndraft:drafts" 'gnus-dummy '((gnus-draft-mode)))))
 
@@ -855,7 +854,10 @@ prompt the user for the name of an NNTP server to use."
   "Setup news information.
 If RAWFILE is non-nil, the .newsrc file will also be read.
 If LEVEL is non-nil, the news will be set up at level LEVEL."
-  (let ((init (not (and gnus-newsrc-alist gnus-active-hashtb (not rawfile)))))
+  (let ((init (not (and gnus-newsrc-alist gnus-active-hashtb (not rawfile))))
+       ;; Binding this variable will inhibit multiple fetchings
+       ;; of the same mail source.
+       (nnmail-fetched-sources (list t)))
 
     (when init
       ;; Clear some variables to re-initialize news information.
@@ -1521,19 +1523,24 @@ newsgroup."
        (cond
         ;; We don't want these groups.
         ((> (gnus-info-level info) level)
-         (setq active nil))
+         (setq active 'ignore))
         ;; Activate groups.
         ((not gnus-read-active-file)
          (setq active (gnus-activate-group group 'scan))
          (inline (gnus-close-group group)))))
 
       ;; Get the number of unread articles in the group.
-      (if active
-         (inline (gnus-get-unread-articles-in-group info active t))
+      (cond
+       ((eq active 'ignore)
+       ;; Don't do anything.
+       )
+       (active
+       (inline (gnus-get-unread-articles-in-group info active t)))
+       (t
        ;; The group couldn't be reached, so we nix out the number of
        ;; unread articles and stuff.
        (gnus-set-active group nil)
-       (setcar (gnus-gethash group gnus-newsrc-hashtb) t)))
+       (setcar (gnus-gethash group gnus-newsrc-hashtb) t))))
 
     (gnus-message 5 "Checking new news...done")))
 
index 32dccd5..4d2eead 100644 (file)
@@ -624,7 +624,7 @@ See `gnus-thread-score-function' for en explanation of what a
 \"thread score\" is.
 
 This variable is local to the summary buffers."
-  :group 'gnus-treading
+  :group 'gnus-threading
   :group 'gnus-score-default
   :type '(choice (const :tag "off" nil)
                 integer))
@@ -817,12 +817,22 @@ which it may alter in any way.")
     ("^cn\\>\\|\\<chinese\\>" cn-gb-2312)
     ("^fj\\>\\|^japan\\>" iso-2022-jp-2)
     ("^relcom\\>" koi8-r)
+    ("^\\(cz\\|hun\\|pl\\|sk\\)\\>" iso-8859-2)
+    ("^israel\\>" iso-8859-1)
+    ("^\\(comp\\|rec\\|alt\\|sci\\|soc\\|news\\|gnu\\|bofh\\)\\>" iso-8859-1)
     (".*" iso-8859-1))
-  "Alist of regexps (to match group names) and default charsets to be used."
+  "Alist of regexps (to match group names) and default charsets to be used when reading."
   :type '(repeat (list (regexp :tag "Group")
                       (symbol :tag "Charset")))
   :group 'gnus-charset)
 
+(defcustom gnus-newsgroup-ignored-charsets '(unknown-8bit)
+  "List of charsets that should be ignored.
+When these charsets are used in the \"charset\" parameter, the
+default charset will be used instead."
+  :type '(repeat symbol)
+  :group 'gnus-charset)
+
 ;;; Internal variables
 
 (defvar gnus-scores-exclude-files nil)
@@ -1270,7 +1280,7 @@ increase the score of each group you read."
     "a" gnus-summary-post-news
     "x" gnus-summary-limit-to-unread
     "s" gnus-summary-isearch-article
-    "t" gnus-article-hide-headers
+    "t" gnus-summary-toggle-header
     "g" gnus-summary-show-article
     "l" gnus-summary-goto-last-article
     "v" gnus-summary-preview-mime-message
@@ -1507,6 +1517,7 @@ increase the score of each group you read."
     "o" gnus-article-save-part
     "c" gnus-article-copy-part
     "e" gnus-article-externalize-part
+    "i" gnus-article-inline-part
     "|" gnus-article-pipe-part)
   )
 
@@ -6964,9 +6975,7 @@ If ARG is a negative number, hide the unwanted header lines."
     (set-buffer gnus-article-buffer)
     (let* ((buffer-read-only nil)
           (inhibit-point-motion-hooks t)
-          (hidden (text-property-any
-                   (goto-char (point-min)) (search-forward "\n\n")
-                   'invisible t))
+          (hidden (gnus-article-hidden-text-p 'headers))
           e)
       (goto-char (point-min))
       (when (search-forward "\n\n" nil t)
@@ -6979,7 +6988,8 @@ If ARG is a negative number, hide the unwanted header lines."
       (insert-buffer-substring gnus-original-article-buffer 1 e)
       (let ((article-inhibit-hiding t))
        (gnus-run-hooks 'gnus-article-display-hook))
-      (if (or (not hidden) (and (numberp arg) (< arg 0)))
+      (if (or hidden
+             (and (numberp arg) (< arg 0)))
          (let ((gnus-treat-hide-headers nil)
                (gnus-treat-hide-boring-headers nil))
            (gnus-treat-article 'head))
@@ -7456,22 +7466,22 @@ This will have permanent effect only in mail groups.
 If FORCE is non-nil, allow editing of articles even in read-only
 groups."
   (interactive "P")
-  (save-excursion
-    (set-buffer gnus-summary-buffer)
-    (gnus-set-global-variables)
-    (when (and (not force)
-              (gnus-group-read-only-p))
-      (error "The current newsgroup does not support article editing"))
-    ;; Select article if needed.
-    (unless (eq (gnus-summary-article-number)
-               gnus-current-article)
-      (gnus-summary-select-article t))
-    (gnus-article-date-original)
-    (gnus-article-edit-article
-     `(lambda (no-highlight)
-       (gnus-summary-edit-article-done
-        ,(or (mail-header-references gnus-current-headers) "")
-        ,(gnus-group-read-only-p) ,gnus-summary-buffer no-highlight)))))
+  (let ((mail-parse-charset gnus-newsgroup-charset))
+    (save-excursion
+      (set-buffer gnus-summary-buffer)
+      (gnus-set-global-variables)
+      (when (and (not force)
+                (gnus-group-read-only-p))
+       (error "The current newsgroup does not support article editing"))
+      (gnus-summary-show-article t)
+      (gnus-article-edit-article
+       'mime-to-mml
+       `(lambda (no-highlight)
+         (let ((mail-parse-charset ',gnus-newsgroup-charset))
+           (mml-to-mime)
+           (gnus-summary-edit-article-done
+            ,(or (mail-header-references gnus-current-headers) "")
+            ,(gnus-group-read-only-p) ,gnus-summary-buffer no-highlight)))))))
 
 (defalias 'gnus-summary-edit-article-postpone 'gnus-article-edit-exit)
 
@@ -7486,7 +7496,7 @@ groups."
       (if (and (not read-only)
               (not (gnus-request-replace-article
                     (cdr gnus-article-current) (car gnus-article-current)
-                    (current-buffer))))
+                    (current-buffer) t)))
          (error "Couldn't replace article")
        ;; Update the summary buffer.
        (if (and references
@@ -9249,7 +9259,8 @@ save those articles instead."
                   (gnus-group-real-name gnus-newsgroup-name))))
     (setq gnus-newsgroup-charset
          (or (and gnus-newsgroup-name
-                  (or (gnus-group-find-parameter gnus-newsgroup-name 'charset)
+                  (or (gnus-group-find-parameter gnus-newsgroup-name
+                                                 'charset)
                       (let ((alist gnus-group-charset-alist)
                             elem (charset nil))
                         (while (setq elem (pop alist))
index 4566bea..05ef770 100644 (file)
@@ -264,13 +264,13 @@ is restarted, and sometimes reloaded."
 (defconst gnus-product-name "T-gnus"
   "Product name of this version of gnus.")
 
-(defconst gnus-version-number "6.10.057"
+(defconst gnus-version-number "6.10.058"
   "Version number for this version of gnus.")
 
-(defconst gnus-revision-number "08"
+(defconst gnus-revision-number "00"
   "Revision number for this version of gnus.")
 
-(defconst gnus-original-version-number "0.75"
+(defconst gnus-original-version-number "0.76"
     "Version number for this version of Gnus.")
 
 (provide 'running-pterodactyl-gnus-0_73-or-later)
@@ -878,7 +878,7 @@ used to 899, you would say something along these lines:
             (insert-file-contents gnus-nntpserver-file)
             (let ((name (buffer-string)))
               (prog1
-                  (if (string-match "^[ \t\n]*$" name)
+                  (if (string-match "\\'[ \t\n]*$" name)
                       nil
                     name)
                 (kill-buffer (current-buffer))))))))
@@ -1178,7 +1178,7 @@ articles.  This is not a good idea."
   :type 'boolean)
 
 (defcustom gnus-use-picons nil
-  "*If non-nil, display picons."
+  "*If non-nil, display picons in a frame of their own."
   :group 'gnus-meta
   :type 'boolean)
 
@@ -1368,7 +1368,7 @@ following hook:
 (defcustom gnus-group-change-level-function nil
   "Function run when a group level is changed.
 It is called with three parameters -- GROUP, LEVEL and OLDLEVEL."
-  :group 'gnus-group-level
+  :group 'gnus-group-levels
   :type 'function)
 
 ;;; Face thingies.
@@ -2905,8 +2905,6 @@ As opposed to `gnus', this command will not connect to the local server."
   (let ((window (get-buffer-window gnus-group-buffer)))
     (cond (window
           (select-frame (window-frame window)))
-         ((= (length (frame-list)) 1)
-          (select-frame (make-frame)))
          (t
           (other-frame 1))))
   (gnus arg))
index dc97dc4..c54332e 100644 (file)
@@ -28,6 +28,7 @@
 (eval-when-compile (require 'cl))
 (eval-and-compile
   (autoload 'pop3-movemail "pop3"))
+(require 'format-spec)
 
 (defgroup mail-source nil
   "The mail-fetching library."
                  (concat "/usr/spool/mail/" (user-login-name)))))
       (directory
        (:path)
-       (:suffix ".spool"))
+       (:suffix ".spool")
+       (:predicate identity))
       (pop
        (:server (getenv "MAILHOST"))
        (:port "pop3")
        (:user (or (user-login-name) (getenv "LOGNAME") (getenv "USER")))
        (:program)
-       (:args)
        (:function)
-       (:password))
+       (:password)
+       (:authentication password))
       (maildir
-       (:path)))
+       (:path "~/Maildir/new/")))
     "Mapping from keywords to default values.
 All keywords that can be used must be listed here."))
 
@@ -83,7 +85,7 @@ All keywords that can be used must be listed here."))
   '((file mail-source-fetch-file)
     (directory mail-source-fetch-directory)
     (pop mail-source-fetch-pop)
-    (qmail mail-source-fetch-qmail))
+    (maildir mail-source-fetch-maildir))
   "A mapping from source type to fetcher function.")
 
 (defvar mail-source-password-cache nil)
@@ -140,10 +142,6 @@ of the `let' form."
    ((and (listp value)
         (functionp (car value)))
     (eval value))
-   ;; Variable
-   ((and (symbolp value)
-        (boundp value))
-    (symbol-value value))
    ;; Just return the value.
    (t
     value)))
@@ -278,9 +276,9 @@ If ARGS, PROMPT is used as an argument to `format'."
        (setq mail-source-read-passwd 'ange-ftp-read-passwd)))
     (funcall mail-source-read-passwd prompt)))
 
-(defun mail-source-fetch-with-program (program args to)
-  (zerop (apply 'call-process program nil nil nil
-               (append (split-string args) (list to)))))
+(defun mail-source-fetch-with-program (program)
+  (zerop (call-process shell-file-name nil nil nil
+                      shell-command-switch program)))
 
 ;;;
 ;;; Different fetchers
@@ -302,6 +300,7 @@ If ARGS, PROMPT is used as an argument to `format'."
       (dolist (file (directory-files
                     path t (concat (regexp-quote suffix) "$")))
        (when (and (file-regular-p file)
+                  (funcall predicate file)
                   (mail-source-movemail file mail-source-crash-box))
          (incf found (mail-source-callback callback file))))
       found)))
@@ -322,17 +321,20 @@ If ARGS, PROMPT is used as an argument to `format'."
        (setenv "MAILHOST" server))
       (if (cond
           (program
-           (when (listp args)
-             (setq args (eval args)))
            (mail-source-fetch-with-program
-            program args mail-source-crash-box))
+            (format-spec
+             program
+             (format-spec-make ?p password ?t mail-source-crash-box
+                               ?s server ?P port ?u user))))
           (function
            (funcall function mail-source-crash-box))
           ;; The default is to use pop3.el.
           (t
            (let ((pop3-password password)
                  (pop3-maildrop user)
-                 (pop3-mailhost server))
+                 (pop3-mailhost server)
+                 (pop3-authentication-scheme
+                  (if (eq authentication 'apop) 'apop 'pass)))
              (save-excursion (pop3-movemail mail-source-crash-box)))))
          (mail-source-callback callback server)
        ;; We nix out the password in case the error
@@ -342,6 +344,17 @@ If ARGS, PROMPT is used as an argument to `format'."
                    mail-source-password-cache))
        0))))
 
+(defun mail-source-fetch-maildir (source callback)
+  "Fetcher for maildir sources."
+  (mail-source-bind (maildir source)
+    (let ((found 0)
+         (mail-source-string (format "maildir:%s" path)))
+      (dolist (file (directory-files path t))
+       (when (and (file-regular-p file)
+                  (not (rename-file file mail-source-crash-box)))
+         (incf found (mail-source-callback callback file))))
+      found)))
+
 (provide 'mail-source)
 
 ;;; mail-source.el ends here
index 8ea8cd3..d3a90dc 100644 (file)
@@ -1735,7 +1735,8 @@ C-c C-a  message-mime-attach-file (attach a file as MIME)."
   (interactive)
   (if (looking-at "[ \t]*\n") (expand-abbrev))
   (goto-char (point-min))
-  (search-forward (concat "\n" mail-header-separator "\n") nil t))
+  (or (search-forward (concat "\n" mail-header-separator "\n") nil t)
+      (search-forward "\n\n" nil t)))
 
 (defun message-goto-eoh ()
   "Move point to the end of the headers."
@@ -2471,6 +2472,7 @@ This sub function is for exclusive use of `message-send-mail'."
       (let ((message-deletable-headers
             (if news nil message-deletable-headers)))
        (message-generate-headers message-required-mail-headers))
+      (untabify (point-min) (point-max))
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
     (if (not (message-check-mail-syntax))
@@ -2705,6 +2707,7 @@ This sub function is for exclusive use of `message-send-news'."
       (message-narrow-to-headers)
       ;; Insert some headers.
       (message-generate-headers message-required-news-headers)
+      (untabify (point-min) (point-max))
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
     (message-cleanup-headers)
@@ -3011,15 +3014,12 @@ This sub function is for exclusive use of `message-send-news'."
    ;; Check the length of the signature.
    (message-check 'signature
      (goto-char (point-max))
-     (if (or (not (re-search-backward message-signature-separator nil t))
-            (search-forward message-forward-end-separator nil t))
-        t
-       (if (> (count-lines (point) (point-max)) 5)
-          (y-or-n-p
-           (format
-            "Your .sig is %d lines; it should be max 4.  Really post? "
-            (1- (count-lines (point) (point-max)))))
-        t)))))
+     (if (> (count-lines (point) (point-max)) 5)
+        (y-or-n-p
+         (format
+          "Your .sig is %d lines; it should be max 4.  Really post? "
+          (1- (count-lines (point) (point-max)))))
+       t))))
 
 (defun message-check-mail-syntax ()
   "Check the syntax of the message."
@@ -4424,14 +4424,14 @@ the message."
       (current-buffer)
       (message-narrow-to-head)
       (let ((funcs message-make-forward-subject-function)
-           (subject (if message-wash-forwarded-subjects
-                        (message-wash-subject
-                         (or (nnheader-decode-subject
-                              (message-fetch-field "Subject"))
-                             ""))
-                      (or (nnheader-decode-subject
-                           (message-fetch-field "Subject"))
-                          ""))))
+           (subject (message-fetch-field "Subject")))
+       (setq subject
+             (if subject
+                 (if message-wash-forwarded-subjects
+                     (message-wash-subject
+                      (nnheader-decode-subject subject))
+                   (nnheader-decode-subject subject))
+               "(none)"))
        ;; Make sure funcs is a list.
        (and funcs
             (not (listp funcs))
@@ -4918,7 +4918,9 @@ TYPE is the MIME type to use."
           type (prin1-to-string file))))
 
 (defun message-encode-message-body ()
-  (let ((mail-parse-charset message-default-charset)
+  (let ((mail-parse-charset (or mail-parse-charset
+                               message-default-charset
+                               message-posting-charset))
        (case-fold-search t)
        lines multipart-p content-type-p)
     (message-goto-body)
index c9b24b5..90de90f 100644 (file)
 ;; BS, vertical TAB, form feed, and ^_
 (defvar mm-8bit-char-regexp "[^\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f]")
 
+(defvar mm-body-charset-encoding-alist
+  '((us-ascii . 7bit)
+    (iso-8859-1 . quoted-printable)
+    (iso-8859-2 . quoted-printable)
+    (iso-8859-3 . quoted-printable)
+    (iso-8859-4 . quoted-printable)
+    (iso-8859-5 . base64)
+    (koi8-r . base64)
+    (iso-8859-7 . quoted-printable)
+    (iso-8859-8 . quoted-printable)
+    (iso-8859-9 . quoted-printable)
+    (iso-2022-jp . base64)
+    (iso-2022-kr . base64)
+    (gb2312 . base64)
+    (cn-gb . base64)
+    (cn-gb-2312 . base64)
+    (euc-kr . base64)
+    (iso-2022-jp-2 . base64)
+    (iso-2022-int-1 . base64))
+  "Alist of MIME charsets to encodings.
+Valid encodings are `7bit', `8bit', `quoted-printable' and `base64'.")
+
 (defun mm-encode-body ()
   "Encode a body.
 Should be called narrowed to the body that is to be encoded.
@@ -58,8 +80,7 @@ If no encoding was done, nil is returned."
          nil))
     (save-excursion
       (goto-char (point-min))
-      (let ((charsets
-            (delq 'ascii (mm-find-charset-region (point-min) (point-max))))
+      (let ((charsets (mm-find-mime-charset-region (point-min) (point-max)))
            charset)
        (cond
         ;; No encoding.
@@ -70,30 +91,44 @@ If no encoding was done, nil is returned."
          charsets)
         ;; We encode.
         (t
-         (let ((mime-charset (mm-mime-charset (car charsets)))
+         (let ((charset (car charsets))
                start)
            (when (or t
                      ;; We always decode.
                      (not (mm-coding-system-equal
-                           mime-charset buffer-file-coding-system)))
+                           charset buffer-file-coding-system)))
              (while (not (eobp))
                (if (eq (char-charset (char-after)) 'ascii)
                    (when start
                      (save-restriction
                        (narrow-to-region start (point))
-                       (mm-encode-coding-region start (point) mime-charset)
+                       (mm-encode-coding-region start (point) charset)
                        (goto-char (point-max)))
                      (setq start nil))
                  (unless start
                    (setq start (point))))
                (forward-char 1))
              (when start
-               (mm-encode-coding-region start (point) mime-charset)
+               (mm-encode-coding-region start (point) charset)
                (setq start nil)))
-           mime-charset)))))))
-
-(defun mm-body-encoding ()
-  "Return the encoding of the current buffer."
+           charset)))))))
+
+(defun mm-body-encoding (charset)
+  "Do Content-Transfer-Encoding and return the encoding of the current buffer."
+  (let ((bits (mm-body-7-or-8)))
+    (cond
+     ((eq bits '7bit)
+      bits)
+     ((eq charset mail-parse-charset)
+      bits)
+     (t
+      (let ((encoding (or (cdr (assq charset mm-body-charset-encoding-alist ))
+                         'quoted-printable)))
+       (mm-encode-content-transfer-encoding encoding "text/plain")
+       encoding)))))
+
+(defun mm-body-7-or-8 ()
+  "Say whether the body is 7bit or 8bit."
   (cond
    ((not (featurep 'mule))
     (if (save-excursion
@@ -161,8 +196,8 @@ The characters in CHARSET should then be decoded."
        (when (and charset
                   (setq mule-charset (mm-charset-to-coding-system charset))
                   ;; buffer-file-coding-system
-                                       ;Article buffer is nil coding system
-                                       ;in XEmacs
+                  ;;Article buffer is nil coding system
+                  ;;in XEmacs
                   enable-multibyte-characters
                   (or (not (eq mule-charset 'ascii))
                       (setq mule-charset mail-parse-charset)))
index 6c597db..1634ce3 100644 (file)
     (iso-8859-7 greek-iso8859-7)
     (iso-8859-8 hebrew-iso8859-8)
     (iso-8859-9 latin-iso8859-9)
+    (viscii vietnamese-viscii-lower)
     (iso-2022-jp-2 japanese-jisx0208)
     (iso-2022-jp latin-jisx0201
                 japanese-jisx0208-1978)
     (euc-kr korean-ksc5601)
     (cn-gb-2312 chinese-gb2312)
     (cn-big5 chinese-big5-1 chinese-big5-2)
+    (tibetan tibetan)
+    (thai-tis620 thai-tis620)
+    (iso-2022-7bit ethiopic arabic-1-column arabic-2-column)
     (iso-2022-jp-2 latin-iso8859-1 greek-iso8859-7
                   latin-jisx0201 japanese-jisx0208-1978
                   chinese-gb2312 japanese-jisx0208
-                  korean-ksc5601 japanese-jisx0212)
+                  korean-ksc5601 japanese-jisx0212
+                  katakana-jisx0201)
     (iso-2022-int-1 latin-iso8859-1 greek-iso8859-7
                    latin-jisx0201 japanese-jisx0208-1978
                    chinese-gb2312 japanese-jisx0208
@@ -200,10 +205,19 @@ used as the line break code type of the coding system."
             'mime-charset))
        (and (eq charset 'ascii)
            'us-ascii)
-       (get-charset-property charset 'prefered-coding-system))
+       (get-charset-property charset 'prefered-coding-system)
+       (mm-mule-charset-to-mime-charset charset))
     ;; This is for XEmacs.
     (mm-mule-charset-to-mime-charset charset)))
 
+(defun mm-find-mime-charset-region (b e)
+  "Return the MIME charsets needed to encode the region between B and E."
+  (let ((charsets
+        (mapcar 'mm-mime-charset
+                (delq 'ascii
+                      (mm-find-charset-region b e)))))
+    (delete-duplicates charsets)))
+
 (defsubst mm-multibyte-p ()
   "Say whether multibyte is enabled."
   (and (boundp 'enable-multibyte-characters)
@@ -238,9 +252,7 @@ See also `with-temp-file' and `with-output-to-string'."
 (defun mm-find-charset-region (b e)
   "Return a list of charsets in the region."
   (cond
-   ((and (boundp 'enable-multibyte-characters)
-        enable-multibyte-characters
-        (fboundp 'find-charset-region))
+   ((fboundp 'find-charset-region)
     (find-charset-region b e))
    ((not (boundp 'current-language-environment))
     (save-excursion
index 8bb6a85..779997c 100644 (file)
@@ -71,7 +71,7 @@
                warn t))
        (setq point (point)
              contents (mml-read-part)
-             charsets (delq 'ascii (mm-find-charset-region point (point))))
+             charsets (mm-find-mime-charset-region point (point)))
        (if (< (length charsets) 2)
            (push (nconc tag (list (cons 'contents contents)))
                  struct)
   (save-excursion
     (narrow-to-region beg end)
     (goto-char (point-min))
-    (let ((current (char-charset (following-char)))
+    (let ((current (mm-mime-charset (char-charset (following-char))))
          charset struct space newline paragraph)
       (while (not (eobp))
        (cond
         ;; The charset remains the same.
-        ((or (eq (setq charset (char-charset (following-char))) 'ascii)
+        ((or (eq (setq charset (mm-mime-charset
+                                (char-charset (following-char)))) 'us-ascii)
              (eq charset current)))
         ;; The initial charset was ascii.
-        ((eq current 'ascii)
+        ((eq current 'us-ascii)
          (setq current charset
                space nil
                newline nil
       (push (cons (intern elem) val) contents)
       (skip-chars-forward " \t\n"))
     (forward-char 1)
+    (skip-chars-forward " \t\n")
     (cons (intern name) (nreverse contents))))
 
 (defun mml-read-part ()
       (setq type (or (cdr (assq 'type cont)) "text/plain"))
       (if (equal (car (split-string type "/")) "text")
          (with-temp-buffer
-           (if (setq filename (cdr (assq 'filename cont)))
-               (insert-file-contents-literally filename)
+           (cond
+            ((cdr (assq 'buffer cont))
+             (insert-buffer-substring (cdr (assq 'buffer cont))))
+            ((setq filename (cdr (assq 'filename cont)))
+             (insert-file-contents-literally filename))
+            (t
              (save-restriction
                (narrow-to-region (point) (point))
                (insert (cdr (assq 'contents cont)))
                (while (re-search-forward
                        "<#!+/?\\(part\\|multipart\\|external\\)" nil t)
                  (delete-region (+ (match-beginning 0) 2)
-                                (+ (match-beginning 0) 3)))))
-           (setq charset (mm-encode-body)
-                 encoding (mm-body-encoding))
+                                (+ (match-beginning 0) 3))))))
+           (setq charset (mm-encode-body))
+           (setq encoding (mm-body-encoding charset))
            (setq coded (buffer-string)))
        (mm-with-unibyte-buffer
-         (if (setq filename (cdr (assq 'filename cont)))
-             (insert-file-contents-literally filename)
-           (insert (cdr (assq 'contents cont))))
+         (cond
+          ((cdr (assq 'buffer cont))
+           (insert-buffer-substring (cdr (assq 'buffer cont))))
+          ((setq filename (cdr (assq 'filename cont)))
+           (insert-file-contents-literally filename))
+          (t
+           (insert (cdr (assq 'contents cont)))))
          (setq encoding (mm-encode-buffer type)
                coded (buffer-string))))
       (mml-insert-mime-headers cont type charset encoding)
     (cond
      ((eq (car cont) 'part)
       (with-temp-buffer
-       (if (setq filename (cdr (assq 'filename cont)))
-           (insert-file-contents-literally filename)
-         (insert (cdr (assq 'contents cont))))
+       (cond
+        ((cdr (assq 'buffer cont))
+         (insert-buffer-substring (cdr (assq 'buffer cont))))
+        ((setq filename (cdr (assq 'filename cont)))
+         (insert-file-contents-literally filename))
+        (t
+         (insert (cdr (assq 'contents cont)))))
        (goto-char (point-min))
        (when (re-search-forward (concat "^--" (regexp-quote mml-boundary))
                                 nil t)
       (goto-char (match-beginning 1))
       (insert "!"))))
 
+;;;
+;;; Transforming MIME to MML
+;;;
+
+(defun mime-to-mml ()
+  "Translate the current buffer (which should be a message) into MML."
+  ;; First decode the head.
+  (save-restriction
+    (message-narrow-to-head)
+    (mail-decode-encoded-word-region (point-min) (point-max)))
+  (let ((handles (mm-dissect-buffer t)))
+    (goto-char (point-min))
+    (search-forward "\n\n" nil t)
+    (delete-region (point) (point-max))
+    (if (stringp (car handles))
+       (mml-insert-mime handles)
+      (mml-insert-mime handles t))
+    (mm-destroy-parts handles)))
+
+(defun mml-to-mime ()
+  "Translate the current buffer from MML to MIME."
+  (message-encode-message-body)
+  (save-restriction
+    (message-narrow-to-headers)
+    (mail-encode-encoded-word-buffer)))
+
+(defun mml-insert-mime (handle &optional no-markup)
+  (let (textp buffer)
+    ;; Determine type and stuff.
+    (unless (stringp (car handle))
+      (unless (setq textp (equal
+                          (car (split-string
+                                (car (mm-handle-type handle)) "/"))
+                          "text"))
+       (save-excursion
+         (set-buffer (setq buffer (generate-new-buffer " *mml*")))
+         (mm-insert-part handle))))
+    (unless no-markup
+      (mml-insert-mml-markup handle buffer))
+    (cond
+     ((stringp (car handle))
+      (mapcar 'mml-insert-mime (cdr handle))
+      (insert "<#/multipart>\n"))
+     (textp
+      (mm-insert-part handle)
+      (goto-char (point-max)))
+     (t
+      (insert "<#/part>\n")))))
+
+(defun mml-insert-mml-markup (handle &optional buffer)
+  "Take a MIME handle and insert an MML tag."
+  (if (stringp (car handle))
+      (insert "<#multipart type=" (cadr (split-string (car handle) "/"))
+             ">\n")
+    (insert "<#part type=" (car (mm-handle-type handle)))
+    (dolist (elem (append (cdr (mm-handle-type handle))
+                         (cdr (mm-handle-disposition handle))))
+      (insert " " (symbol-name (car elem)) "=\"" (cdr elem) "\""))
+    (when buffer
+      (insert " buffer=\"" (buffer-name buffer) "\""))
+    (when (mm-handle-description handle)
+      (insert " description=\"" (mm-handle-description handle) "\""))
+    (equal (split-string (car (mm-handle-type handle)) "/") "text")
+    (insert ">\n")))
+
 (provide 'mml)
 
 ;;; mml.el ends here
index 8d3c64a..094627e 100644 (file)
@@ -38,7 +38,7 @@
 (defvoo nndoc-article-type 'guess
   "*Type of the file.
 One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
-`rfc934', `rfc822-forward', `mime-digest', `mime-parts', `standard-digest',
+`rfc934', `rfc822-forward', `mime-parts', `standard-digest',
 `slack-digest', `clari-briefs' or `guess'.")
 
 (defvoo nndoc-post-type 'mail
@@ -81,12 +81,6 @@ from the document.")
      (head-end . "^\t")
      (generate-head-function . nndoc-generate-clari-briefs-head)
      (article-transform-function . nndoc-transform-clari-briefs))
-    (mime-digest
-     (article-begin . "")
-     (head-end . "^ ?$")
-     (body-end . "")
-     (file-end . "")
-     (subtype digest guess))
     (mime-parts
      (generate-head-function . nndoc-generate-mime-parts-head)
      (article-transform-function . nndoc-transform-mime-parts))
@@ -505,28 +499,6 @@ from the document.")
     (insert "From: " "clari@clari.net (" (or from "unknown") ")"
            "\nSubject: " (or subject "(no subject)") "\n")))
 
-(defun nndoc-mime-digest-type-p ()
-  (let ((case-fold-search t)
-       boundary-id b-delimiter entry)
-    (when (and
-          (re-search-forward
-           (concat "^Content-Type: *multipart/digest;[ \t\n]*[ \t]"
-                   "boundary=\"?\\([^\"\n]*[^\" \t\n]\\)")
-           nil t)
-          (match-beginning 1))
-      (setq boundary-id (match-string 1)
-           b-delimiter (concat "\n--" boundary-id "[\n \t]+"))
-      (setq entry (assq 'mime-digest nndoc-type-alist))
-      (setcdr entry
-             (list
-              (cons 'head-begin "^ ?\n")
-              (cons 'head-end "^ ?$")
-              (cons 'body-begin "^ ?\n")
-              (cons 'article-begin b-delimiter)
-              (cons 'body-end-function 'nndoc-digest-body-end)
-              (cons 'file-end (concat "\n--" boundary-id "--[ \t]*$"))))
-      t)))
-
 (defun nndoc-standard-digest-type-p ()
   (when (and (re-search-forward (concat "^" (make-string 70 ?-) "\n\n") nil t)
             (re-search-forward
index ce32e93..b2713f4 100644 (file)
@@ -783,7 +783,8 @@ deleted.  Point is left where the deleted region was."
 
 ;;;###autoload
 (defun nnfolder-generate-active-file ()
-  "Look for mbox folders in the nnfolder directory and make them into groups."
+  "Look for mbox folders in the nnfolder directory and make them into groups.
+This command does not work if you use short group names."
   (interactive)
   (nnmail-activate 'nnfolder)
   (let ((files (directory-files nnfolder-directory))
index 858bbde..37dc400 100644 (file)
@@ -311,6 +311,12 @@ on your system, you could say something like:
               out)))
      out))
 
+(defmacro nnheader-nov-read-message-id ()
+  '(let ((id (nnheader-nov-field)))
+     (if (string-match "^<[^>]+>$" id)
+        id
+       (nnheader-generate-fake-message-id))))
+
 (defun nnheader-parse-nov ()
   (let ((eol (gnus-point-at-eol)))
     (make-full-mail-header
@@ -318,8 +324,7 @@ on your system, you could say something like:
      (nnheader-nov-field)              ; subject
      (nnheader-nov-field)              ; from
      (nnheader-nov-field)              ; date
-     (or (nnheader-nov-field)
-        (nnheader-generate-fake-message-id)) ; id
+     (nnheader-nov-read-message-id)    ; id
      (nnheader-nov-field)              ; refs
      (nnheader-nov-read-integer)       ; chars
      (nnheader-nov-read-integer)       ; lines
index c0577c0..70c9531 100644 (file)
@@ -785,6 +785,40 @@ If SOURCE is a directory spec, try to return the group name component."
        (goto-char end)
        (forward-line 2)))))
 
+(defun nnmail-process-maildir-mail-format (func artnum-func)
+; In a maildir, every file contains exactly one mail
+  (let ((case-fold-search t)
+       message-id)
+    (goto-char (point-min))
+    ;; Find the end of the head.
+    (narrow-to-region
+     (point-min) 
+     (if (search-forward "\n\n" nil t)
+        (1- (point))
+       ;; This will never happen, but just to be on the safe side --
+       ;; if there is no head-body delimiter, we search a bit manually.
+       (while (and (looking-at "From \\|[^ \t]+:")
+                  (not (eobp)))
+        (forward-line 1)
+        (point))))
+    ;; Find the Message-ID header.
+    (goto-char (point-min))
+    (if (re-search-forward "^Message-ID:[ \t]*\\(<[^>]+>\\)" nil t)
+       (setq message-id (match-string 1))
+      ;; There is no Message-ID here, so we create one.
+      (save-excursion
+           (when (re-search-backward "^Message-ID[ \t]*:" nil t)
+         (beginning-of-line)
+         (insert "Original-")))
+      (forward-line 1)
+      (insert "Message-ID: " (setq message-id (nnmail-message-id)) "\n"))
+    (run-hooks 'nnmail-prepare-incoming-header-hook)
+    ;; Allow the backend to save the article.
+    (widen)
+    (save-excursion
+       (goto-char (point-min))
+       (nnmail-check-duplication message-id func artnum-func))))
+
 (defun nnmail-split-incoming (incoming func &optional exit-func
                                       group artnum-func)
   "Go through the entire INCOMING file and pick out each individual mail.
@@ -812,6 +846,8 @@ FUNC will be called with the buffer narrowed to each mail."
               (nnmail-process-babyl-mail-format func artnum-func))
              ((looking-at "\^A\^A\^A\^A")
               (nnmail-process-mmdf-mail-format func artnum-func))
+             ((looking-at "Return-Path:")
+              (nnmail-process-maildir-mail-format func artnum-func))
              (t
               (nnmail-process-unix-mail-format func artnum-func))))
       (when exit-func
@@ -1288,6 +1324,8 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
 
 ;;; Get new mail.
 
+(defvar nnmail-fetched-sources nil)
+
 (defun nnmail-get-value (&rest args)
   (let ((sym (intern (apply 'format args))))
     (when (boundp sym)
@@ -1313,7 +1351,8 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
       ;; and fetch the mail from each.
       (while (setq source (pop sources))
        ;; Be compatible with old values.
-       (when (stringp source)
+       (cond
+        ((stringp source)
          (setq source
                (cond
                 ((string-match "^po:" source)
@@ -1322,15 +1361,31 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
                  (list 'directory :path source))
                 (t
                  (list 'file :path source)))))
+        ((eq source 'procmail)
+         (message "Invalid value for nnmail-spool-file: `procmail'")
+         nil))
        (nnheader-message 4 "%s: Reading incoming mail from %s..."
                          method (car source))
-       (when (mail-source-fetch
-              source
-              `(lambda (file orig-file)
-                 (nnmail-split-incoming
-                  file ',(intern (format "%s-save-mail" method))
-                  ',spool-func (nnmail-get-split-group orig-file source)
-                  ',(intern (format "%s-active-number" method)))))
+       ;; Hack to only fetch the contents of a single group's spool file.
+       (when (and (eq (car source) 'directory)
+                  group)
+         (setq source (append source
+                              (list :predicate
+                                    `(lambda (file)
+                                       (string-match ,(regexp-quote group)
+                                                     file))))))
+       (when nnmail-fetched-sources
+         (if (member source nnmail-fetched-sources)
+             (setq source nil)
+           (push source nnmail-fetched-sources)))
+       (when (and source
+                  (mail-source-fetch
+                   source
+                   `(lambda (file orig-file)
+                      (nnmail-split-incoming
+                       file ',(intern (format "%s-save-mail" method))
+                       ',spool-func (nnmail-get-split-group orig-file source)
+                       ',(intern (format "%s-active-number" method))))))
          (incf i)))
       ;; If we did indeed read any incoming spools, we save all info.
       (unless (zerop i)
index ed3e365..d4a2a58 100644 (file)
@@ -591,7 +591,7 @@ all.  This may very well take some time.")
        (let ((file (concat (nnmail-group-pathname
                             (caar ga) nnml-directory)
                            (int-to-string (cdar ga)))))
-         (if first
+z        (if first
              ;; It was already saved, so we just make a hard link.
              (funcall nnmail-crosspost-link-function first file t)
            ;; Save the article.
index 61fbc2b..1b745ee 100644 (file)
@@ -219,7 +219,9 @@ to virtual article number.")
          (if buffer
              (save-excursion
                (set-buffer buffer)
-               (gnus-request-article-this-buffer (cdr amap) cgroup))
+               ;; We bind this here to avoid double decoding.
+               (let ((gnus-article-decode-hook nil))
+                 (gnus-request-article-this-buffer (cdr amap) cgroup)))
            (gnus-request-article (cdr amap) cgroup))))))))
 
 
index 7e2e570..f11194c 100644 (file)
@@ -124,7 +124,8 @@ Should be called narrowed to the head of the message."
              (when method
                (cond
                 ((eq method 'mime)
-                 (rfc2047-encode-region (point-min) (point-max)))
+                 (rfc2047-encode-region (point-min) (point-max))
+                 (rfc2047-fold-region (point-min) (point-max)))
                 ;; Hm.
                 (t))))
            (goto-char (point-max)))))
@@ -207,6 +208,27 @@ Should be called narrowed to the head of the message."
        (insert "?=")
        (forward-line 1)))))
 
+(defun rfc2047-fold-region (b e)
+  "Fold the long lines in the region."
+  (save-restriction
+    (narrow-to-region b e)
+    (goto-char (point-min))
+    (let ((break nil))
+      (while (not (eobp))
+       (cond
+        ((memq (char-after) '(?  ?\t))
+         (setq break (point)))
+        ((and (not break)
+              (looking-at "=\\?"))
+         (setq break (point)))
+        ((and (looking-at "\\?=")
+              (> (- (point) (save-excursion (beginning-of-line) (point))) 76))
+         (goto-char break)
+         (insert "\n ")
+         (forward-line 1)))
+       (unless (eobp)
+         (forward-char 1))))))
+
 (defun rfc2047-b-encode-region (b e)
   "Encode the header contained in REGION with the B encoding."
   (base64-encode-region b e t)
index a7a3716..0703974 100644 (file)
@@ -2,7 +2,7 @@
 ;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; $Revision: 5.4 $
+;; $Revision: 5.6 $
 ;; Keywords: uudecode
 
 ;; This file is not part of GNU Emacs, but the same permissions
index eb96ea0..bb263d0 100644 (file)
@@ -1,3 +1,19 @@
+1999-02-09 16:21:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Charsets): New.
+
+1999-02-04 03:45:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * emacs-mime.texi (Conversion): New.
+
+1999-02-03 03:04:18  Miguel de Icaza  <miguel@nuclecu.unam.mx>
+
+       * gnus.texi (Fetching Mail): Typo fix.
+
+1999-02-02 22:28:42  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Mail Source Specifiers): Addition.
+
 1999-02-01 21:05:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus.texi (Article Hiding): Addition.
index 0150301..e681b75 100644 (file)
@@ -242,7 +242,7 @@ Narrow the buffer to the header under point.
 @item mail-encode-encoded-word-region
 @findex mail-encode-encoded-word-region
 Encode the non-ASCII words in the region.  For instance,
-@samp{Naïve} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}.
+@samp{Na\e$B}W\e(Be} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}.
 
 @item mail-encode-encoded-word-buffer
 @findex mail-encode-encoded-word-buffer
@@ -255,7 +255,7 @@ Encode the words that need encoding in a string, and return the result.
 
 @example
 (mail-encode-encoded-word-string
- "This is naïve, baby")
+ "This is na\e$B}W\e(Be, baby")
 @result{} "This is =?iso-8859-1?q?na=EFve,?= baby"
 @end example
 
@@ -270,7 +270,7 @@ Decode the encoded words in the string and return the result.
 @example
 (mail-decode-encoded-word-string
  "This is =?iso-8859-1?q?na=EFve,?= baby")
-@result{} "This is naïve, baby"
+@result{} "This is na\e$B}W\e(Be, baby"
 @end example
 
 @end table
@@ -863,6 +863,7 @@ string containing the @sc{mime} message.
 * Simple MML Example::             An example MML document.
 * MML Definition::                 All valid MML elements.
 * Advanced MML Example::           Another example MML document.
+* Conversion::                     Going from @sc{mime} to MML and vice versa.
 @end menu
 
 
@@ -1084,6 +1085,33 @@ This plain text part is an attachment.
 @end example
 
 
+@node Conversion
+@section Conversion
+
+@findex mime-to-mml
+A (multipart) @sc{mime} message can be converted to MML with the
+@code{mime-to-mml} function.  It works on the message in the current
+buffer, and substitutes MML markup for @sc{mime} boundaries.
+Non-textual parts do not have their contents in the buffer, but instead
+have the contents in separate buffers that are referred to from the MML
+tags.
+
+@findex mml-to-mime
+An MML message can be converted back to @sc{mime} by the
+@code{mml-to-mime} function.
+
+These functions are in certain senses ``lossy''---you will not get back
+an identical message if you run @sc{mime-to-mml} and then
+@sc{mml-to-mime}.  Not only will trivial things like the order of the
+headers differ, but the contents of the headers may also be different.
+For instance, the original message may use base64 encoding on text,
+while @sc{mml-to-mime} may decide to use quoted-printable encoding, and
+so on.
+
+In essence, however, these two functions should be the inverse of each
+other.  The resulting contents of the message should remain equivalent,
+if not identical.
+
 
 @node Standards
 @chapter Standards
index ac008ac..9745ffc 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus-ja
-@settitle Semi-gnus 6.10.057 Manual
+@settitle Semi-gnus 6.10.058 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -345,7 +345,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Semi-gnus 6.10.057 Manual
+@title Semi-gnus 6.10.058 Manual
 
 @author by Lars Magne Ingebrigtsen
 @author by members of Semi-gnus mailing-list
@@ -399,7 +399,7 @@ Semi-gnus \e$B$O!"Bg$-$J3($,F~$C$F$$$?$j$5$^$6$^$J7A<0$rMQ$$$?$j$7$F$$$k$A$g$C\e(B
 \e$B$J8@8l7w$r:9JL$7$^$;$s!#$"$"!"%/%j%s%4%s$NJ}$O\e(B Unicode Next Generation\e$B$r\e(B
 \e$B$*BT$A$/$@$5$$!#\e(B
 
-\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.10.057 \e$B$KBP1~$7$^$9!#\e(B
+\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.10.058 \e$B$KBP1~$7$^$9!#\e(B
 
 @end ifinfo
 
index 3c16f29..b7fe30b 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Semi-gnus 6.10.057 Manual
+@settitle Semi-gnus 6.10.058 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -318,7 +318,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Semi-gnus 6.10.057 Manual
+@title Semi-gnus 6.10.058 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -361,7 +361,7 @@ internationalization/localization and multiscript features based on MULE
 API.  So Semi-gnus does not discriminate various language communities.
 Oh, if you are a Klingon, please wait Unicode Next Generation.
 
-This manual corresponds to Semi-gnus 6.10.057.
+This manual corresponds to Semi-gnus 6.10.058.
 
 @end ifinfo
 
@@ -3259,6 +3259,7 @@ You can have as many summary buffers open as you wish.
 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
 * Article Treatment::           The article buffer can be mangled at will.
 * MIME Commands::               Doing MIMEy things with the articles.
+* Charsets::                    Character set issues.
 * Article Commands::            Doing various things with the article buffer.
 * Summary Sorting::             Sorting the summary buffer in various ways.
 * Finding the Parent::          No child support? Get the parent.
@@ -6033,7 +6034,7 @@ for instance, @code{sox} to convert an @samp{.au} sound file, you could
 say something like:
 @lisp
 (setq gnus-uu-user-view-rules
-      (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
+      (list '("\\\\.au$" "sox %s -t .aiff > /dev/audio")))
 @end lisp
 
 @item gnus-uu-user-view-rules-end
@@ -7044,6 +7045,33 @@ Here's an example function the does the latter:
 @end table
 
 
+@node Charsets
+@section Charsets
+@cindex charsets
+
+People use different charsets, and we have @sc{mime} to let us know what
+charsets they use.  Or rather, we wish we had.  Many people use
+newsreaders and mailers that do not understand or use @sc{mime}, and
+just send out messages without saying what character sets they use.  To
+help a bit with this, some local news hierarchies have policies that say
+what character set is the default.  For instance, the @samp{fj}
+hierarchy uses @code{iso-2022-jp-2}.
+
+@vindex gnus-group-charset-alist
+This knowledge is encoded in the @code{gnus-group-charset-alist}
+variable, which is an alist of regexps (to match group names) and
+default charsets to be used when reading these groups.
+
+In addition, some people do use soi-disant @sc{mime}-aware agents that
+aren't.  These blitely mark messages as being in @code{iso-8859-1} even
+if they really are in @code{koi-8}.  To help here, the
+@code{gnus-newsgroup-ignored-charsets} variable can be used.  The
+charsets that are listed here will be ignored.  The variable can be set
+on a group-by-group basis using the group parameters (@pxref{Group
+Parameters}).  The default value is @code{(unknown-8bit)}, which is
+something some agents insist on having in there.
+
+
 @node Article Commands
 @section Article Commands
 
@@ -9951,6 +9979,13 @@ value.
 @item :suffix
 Only files ending with this suffix are used.  The default is
 @samp{.spool}.
+
+@item :predicate
+Only files that have this predicate return non-@code{nil} are returned.
+The default is @code{identity}.  This is used as an additional
+filter---only files that have the right suffix @emph{and} satisfy this
+predicate are considered.
+
 @end table
 
 An example directory mail source:
@@ -9982,17 +10017,46 @@ The password to give to the POP server.  If not specified, the user is
 prompted.
 
 @item :program
-The program to use to fetch mail from the POP server.
+The program to use to fetch mail from the POP server.  This is should be
+a @code{format}-like string.  Here's an example:
 
-@item :args
-The arguments to give to the program.  If this is a string, it is used
-as such.  If this is a list, it is @code{eval}ed first, and the result
-is used.
+@example
+fetchmail %u@@%s -P %p %t
+@end example
+
+The valid format specifier characters are:
+
+@table @samp
+@item t
+The name of the file the mail is to be moved to.  This must always be
+included in this string.
+
+@item s
+The name of the server.
+
+@item P
+The port number of the server.
+
+@item u
+The user name to use.
+
+@item p
+The password to use.
+@end table
+
+The values used for these specs are taken from the values you give the
+corresponding keywords.
 
 @item :function
 The function to use to fetch mail from the POP server.  The function is
 called with one parameter---the name of the file where the mail should
 be moved to.
+
+@item :authentication
+This can be either the symbol @code{password} or the symbol @code{apop}
+and says what authentication scheme to use.  The default is
+@code{password}.
+
 @end table
 
 If the @code{:program} and @code{:function} keywords aren't specified,
@@ -10080,7 +10144,7 @@ If you want to fetch mail both from your local spool as well as a POP
 mail server, you'd say something like:
 
 @lisp
-(setq mail-spool-file
+(setq nnmail-spool-file
       '((file)
         (pop :server "pop3.mail.server"
              :password "secret")))
@@ -10089,7 +10153,7 @@ mail server, you'd say something like:
 Or, if you don't want to use any of the keyword defaults:
 
 @lisp
-(setq mail-spool-file
+(setq nnmail-spool-file
       '((file :path "/var/spool/mail/user-name")
         (pop :server "pop3.mail.server"
              :user "user-name"
@@ -10875,7 +10939,8 @@ extract some information from it before removing it.
 If you have lots of @code{nnfolder}-like files you'd like to read with
 @code{nnfolder}, you can use the @kbd{M-x nnfolder-generate-active-file}
 command to make @code{nnfolder} aware of all likely files in
-@code{nnfolder-directory}.
+@code{nnfolder-directory}.  This only works if you use long file names,
+though.
 
 
 @node Other Sources
@@ -11024,15 +11089,7 @@ The rnews batch transport format.
 Forwarded articles.
 
 @item mime-parts
-MIME multipart messages, besides digests.
-
-@item mime-digest
-@cindex digest
-@cindex MIME digest
-@cindex 1153 digest
-@cindex RFC 1153 digest
-@cindex RFC 341 digest
-MIME (RFC 1341) digest format.
+MIME multipart messages.
 
 @item standard-digest
 The standard (RFC 1153) digest format.
@@ -11068,9 +11125,8 @@ Virtual server variables:
 @vindex nndoc-article-type
 This should be one of @code{mbox}, @code{babyl}, @code{digest},
 @code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
-@code{rfc822-forward}, @code{mime-parts}, @code{mime-digest},
-@code{standard-digest}, @code{slack-digest}, @code{clari-briefs} or
-@code{guess}.
+@code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
+@code{slack-digest}, @code{clari-briefs} or @code{guess}.
 
 @item nndoc-post-type
 @vindex nndoc-post-type
@@ -12749,10 +12805,10 @@ Score on the author name.
 Score on the subject line.
 
 @item x
-Score on the Xref line---i.e., the cross-posting line.
+Score on the @code{Xref} line---i.e., the cross-posting line.
 
 @item r
-Score on the References line.
+Score on the @code{References} line.
 
 @item d
 Score on the date.
@@ -12761,10 +12817,11 @@ Score on the date.
 Score on the number of lines.
 
 @item i
-Score on the Message-ID.
+Score on the @code{Message-ID} header.
 
 @item f
-Score on followups.
+Score on followups---this matches the author name, and adds scores to
+the followups to this author.
 
 @item b
 Score on the body.
index c74e99b..d38329c 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message-ja
-@settitle Message 6.10.057 Manual
+@settitle Message 6.10.058 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -60,7 +60,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Message 6.10.057 Manual
+@title Message 6.10.058 Manual
 
 @author by Lars Magne Ingebrigtsen
 @translated by members of Semi-gnus mailing-list
@@ -112,7 +112,7 @@ Gnus \e$B$NA4$F$N%a%C%;!<%8$N:n@.\e(B (\e$B%a!<%k$H%K%e!<%9$NN>J}\e(B) \e$B$O%a%C%;!<
 * Key Index::         \e$B%a%C%;!<%8%b!<%I%-!<$N0lMw!#\e(B
 @end menu
 
-\e$B$3$N%^%K%e%"%k$O\e(B Message 6.10.057 \e$B$KBP1~$7$^$9!#\e(BMessage \e$B$O$3$N%^%K%e%"%k$H\e(B
+\e$B$3$N%^%K%e%"%k$O\e(B Message 6.10.058 \e$B$KBP1~$7$^$9!#\e(BMessage \e$B$O$3$N%^%K%e%"%k$H\e(B
 \e$BF1$8HGHV9f$N\e(B Gnus \e$B$NG[I[$H6&$KG[I[$5$l$^$9!#\e(B
 
 
index e336839..cc88832 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Message 6.10.057 Manual
+@settitle Message 6.10.058 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -42,7 +42,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Message 6.10.057 Manual
+@title Message 6.10.058 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -83,7 +83,7 @@ Message mode buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Message 6.10.057.  Message is
+This manual corresponds to Message 6.10.058.  Message is
 distributed with the Gnus distribution bearing the same version number
 as this manual.