+2002-02-19  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus-sum.el (gnus-summary-toggle-header): Fix handling of
+       articles with no body and no blank line after the header.
+
+2002-02-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-dissect-multipart): Consider the case of empty
+       parts.
+
+       * ietf-drums.el (ietf-drums-syntax-table): Modify syntax of
+       non-ascii chars.
+
+       * rfc2231.el (rfc2231-parse-string): Support non-ascii chars.
+
+       * gnus-art.el (gnus-article-wash-html-with-w3): Remove
+       w3-delay-image-loads.
+       * mm-view.el (mm-inline-text-html-render-with-w3): Ditto.
+       (mm-w3-prepare-buffer): Ditto.
+
+       * mail-source.el (mail-source-fetch-directory): Run scripts.
+
+2002-02-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-respond-to-confirmation): Do the right thing
+       for Majordomo confirmations.
+
+2002-02-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-respond-to-confirmation): New command.
+
+2002-02-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-retrieve-headers): Clean up.
+
 2002-02-18  Paul Jarc  <prj@po.cwru.edu>
 
        * gnus-util.el (gnus-parent-id): Ignore trailing whitespace in the
        * gnus-sum.el (gnus-summary-edit-article): Remove a hack.
        * gnus-art.el (gnus-mime-save-part-and-strip): New function.
        (gnus-mime-action-alist): Use it.
-       (gnus-mime-button-commands): USe it.
+       (gnus-mime-button-commands): Use it.
        * mm-extern.el (mm-extern-local-file): Error when the file is gone.
        (mm-inline-external-body): unwind-protect.
 
 
   (let ((w3-strict-width (window-width))
        (url-standalone-mode t)
        (url-gateway-unplugged t)
-       (w3-honor-stylesheets nil)
-       (w3-delay-image-loads t))
+       (w3-honor-stylesheets nil))
     (condition-case var
        (w3-region (point-min) (point-max))
       (error))))
 
     (gnus-convert-image-to-gray-x-face (concat file ".gif") 3)
     (delete-file (concat file ".gif"))))
 
+(defun gnus-respond-to-confirmation ()
+  "Respond to a Gmane confirmation message."
+  (interactive)
+  (gnus-summary-show-article 'raw)
+  (set-buffer gnus-article-buffer)
+  (let ((buffer-read-only nil))
+    (goto-char (point-min))
+    (gnus-article-goto-header "Original-To")
+    (replace-match "To:"))
+  (let ((auth nil))
+    (when (and (search-forward "Majordomo" nil t)
+              (re-search-forward "auth.*subscribe.*$" nil t))
+      (setq auth (match-string 0)))
+    (message-wide-reply)
+    (goto-char (point-min))
+    (gnus-article-goto-header "Cc")
+    (replace-match "From:")
+    (message-goto-body)
+    (delete-region (point) (point-max))
+    (when auth
+      (insert auth "\n"))))
+
 (provide 'gnus-fun)
 
 ;;; gnus-fun.el ends here
 
       (let* ((buffer-read-only nil)
             (inhibit-point-motion-hooks t)
             hidden e)
-       (setq hidden
-             (if (numberp arg)
-                 (>= arg 0)
-               (save-restriction
-                 (article-narrow-to-head)
-                 (gnus-article-hidden-text-p 'headers))))
-       (goto-char (point-min))
-       (when (search-forward "\n\n" nil t)
-         (delete-region (point-min) (1- (point))))
+        (save-restriction
+          (article-narrow-to-head)
+          (setq e (point-max)
+                hidden (if (numberp arg)
+                           (>= arg 0)
+                         (gnus-article-hidden-text-p 'headers))))
+        (delete-region (point-min) e)
        (goto-char (point-min))
        (save-excursion
          (set-buffer gnus-original-article-buffer)
          (goto-char (point-min))
-         (setq e (1- (or (search-forward "\n\n" nil t) (point-max)))))
+          (setq e (search-forward "\n\n" nil t)
+                e (if e (1- e) (point-max))))
        (insert-buffer-substring gnus-original-article-buffer 1 e)
        (save-restriction
          (narrow-to-region (point-min) (point))
 
     (modify-syntax-entry ?* " " table)
     (modify-syntax-entry ?\; " " table)
     (modify-syntax-entry ?\' " " table)
+    (if (featurep 'xemacs)
+       (let ((i 128))
+         (while (< i 256)
+           (modify-syntax-entry i "w" table)
+           (setq i (1+ i)))))
     table))
 
 (defun ietf-drums-token-to-list (token)
 
 ;;; mail-source.el --- functions for fetching mail
-;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
        (:path (or (getenv "MAIL")
                  (expand-file-name (user-login-name) rmail-spool-directory))))
       (directory
+       (:prescript)
+       (:prescript-delay)
+       (:postscript)
        (:path)
        (:suffix ".spool")
        (:predicate identity))
 (defun mail-source-fetch-directory (source callback)
   "Fetcher for directory sources."
   (mail-source-bind (directory source)
+    (mail-source-run-script
+     prescript (format-spec-make ?t path)
+     prescript-delay)
     (let ((found 0)
          (mail-source-string (format "directory:%s" path)))
       (dolist (file (directory-files
                   (funcall predicate file)
                   (mail-source-movemail file mail-source-crash-box))
          (incf found (mail-source-callback callback file))))
+      (mail-source-run-script
+       postscript (format-spec-make ?t path))
       found)))
 
 (defun mail-source-fetch-pop (source callback)
 
          (save-restriction
            (narrow-to-region start (point))
            (setq parts (nconc (list (mm-dissect-buffer t)) parts)))))
-      (forward-line 2)
+      (end-of-line 2)
+      (or (looking-at boundary)
+         (forward-line 1))
       (setq start (point)))
     (when (and start (< start end))
       (save-excursion
 
        (url-standalone-mode t)
        (url-gateway-unplugged t)
        (w3-honor-stylesheets nil)
-       (w3-delay-image-loads t)
        (url-current-object
         (url-generic-parse-url (format "cid:%s" (mm-handle-id handle))))
        (width (window-width))
   (require 'w3)
   (let ((url-standalone-mode t)
        (url-gateway-unplugged t)
-       (w3-honor-stylesheets nil)
-       (w3-delay-image-loads t))
+       (w3-honor-stylesheets nil))
     (w3-prepare-buffer)))
 
 (defun mm-view-message ()
 
                    datel nil))
            (pop datel))
          (when date
-           (setq date (delete "" (split-string
-                                  date "[-, \n\t\r    ]")))
-           (if (or (member "AM" date)
-                   (member "PM" date))
-               (setq date (format
-                           "%s %s %s %s"
-                           (nth 1 date)
-                           (if (and (>= (length (nth 0 date)) 3)
-                                    (assoc (downcase
-                                            (substring (nth 0 date) 0 3))
-                                           parse-time-months))
-                               (substring (nth 0 date) 0 3)
-                             (car (rassq (string-to-number (nth 0 date))
-                                         parse-time-months)))
-                           (nth 2 date) (nth 3 date)))
-             (setq date (format "%s %s %s %s"
-                                (car (rassq (string-to-number (nth 1 date))
-                                            parse-time-months))
-                                (nth 0 date) (nth 2 date) (nth 3 date)))))
+           (setq date (delete "" (split-string date "[-, \n\t\r    ]")))
+           (setq date
+                 (if (or (member "AM" date)
+                         (member "PM" date))
+                     (format
+                      "%s %s %s %s"
+                      (nth 1 date)
+                      (if (and (>= (length (nth 0 date)) 3)
+                               (assoc (downcase
+                                       (substring (nth 0 date) 0 3))
+                                      parse-time-months))
+                          (substring (nth 0 date) 0 3)
+                        (car (rassq (string-to-number (nth 0 date))
+                                    parse-time-months)))
+                      (nth 2 date) (nth 3 date))
+                   (format "%s %s %s %s"
+                           (car (rassq (string-to-number (nth 1 date))
+                                       parse-time-months))
+                           (nth 0 date) (nth 2 date) (nth 3 date)))))
          (push
           (cons
            article
 
 ;;; rfc2231.el --- Functions for decoding rfc2231 headers
 
-;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
              (setq value
                    (buffer-substring (1+ (point))
                                      (progn (forward-sexp 1) (1- (point))))))
-            ((and (memq c ttoken)
+            ((and (or (memq c ttoken)
+                      (> c ?\177)) ;; EXTENSION: Support non-ascii chars.
                   (not (memq c stoken)))
              (setq value (buffer-substring
-                          (point) (progn (forward-sexp 1) (point)))))
+                          (point) (progn (forward-sexp) (point)))))
             (t
              (error "Invalid header: %s" string)))
            (when encoded