Patches between 0.5 and 0.6

Lars Magne Ingebrigtsen <[email protected]> Tue, 01 May 2007 17:20:39 +0200
Newsgroups gmane.emacs.gnus.patches
Message-ID <[email protected]>
Index: gnus/ChangeLog
diff -u gnus/ChangeLog:7.91 gnus/ChangeLog:7.97
--- gnus/ChangeLog:7.91	Wed Apr 19 00:21:56 2006
+++ gnus/ChangeLog	Wed Apr 11 15:19:30 2007
@@ -1,3 +1,23 @@
+2007-04-11  Didier Verna  <[email protected]>
+
+	* GNUS-NEWS: Generated.
+
+2007-04-01  Reiner Steib  <[email protected]>
+
+	* GNUS-NEWS: Generated.
+
+2007-03-23  Katsumi Yamaoka  <[email protected]>
+
+	* README: Bump ngnus version.
+
+2006-12-26  Reiner Steib  <[email protected]>
+
+	* GNUS-NEWS: Generated.
+
+2006-10-09  Romain Francoise  <[email protected]>
+
+	* todo: Fix some typos.
+
 2006-04-19  Reiner Steib  <[email protected]>
 
 	* make.bat: Use "echo *" to clarify the output.
@@ -382,7 +402,7 @@
 	* GNUS-NEWS: Added Article Buttons.  Added Upgrading (from Simon
 	Josefsson).  Add gnus-mime-delete-part, markup fixes and some
 	other corrections.  Mention Gnus FAQ.
-	
+
 
 2003-04-30  Jesper Harder  <[email protected]>
 
@@ -434,19 +454,19 @@
 
 	* GNUS-NEWS: Add IDNA.  Add TLS.  Fix USEFOR reference.
 
-2003-03-22  Frank Schmitt  <[email protected]> 
-	
+2003-03-22  Frank Schmitt  <[email protected]>
+
 	* make.bat: Redone from scratch; supports both Emacs and XEmacs
 	now; correctly generate gnus-load.el; check for errors; use
 	makeinfo if available, infohack.el if it isn't; be less verbose
 	when copying files; copy files from etc/gnus and etc/smilies, too
 
-2003-03-22  Frank Schmitt  <[email protected]> 
-	
+2003-03-22  Frank Schmitt  <[email protected]>
+
 	* make-x.bat: Removed, make.bat does its job now.
 
-2003-03-22  Frank Schmitt  <[email protected]> 
-	
+2003-03-22  Frank Schmitt  <[email protected]>
+
 	* etc/gnus-tut.txt: Include Gnus FAQ from http://my.gnus.org.
 
 2003-02-19  Reiner Steib  <[email protected]>
@@ -522,9 +542,9 @@
 2002-02-22  Steve Youngs  <[email protected]>
 
 	* aclocal.m4 (AC_PATH_LISPDIR): Default to
-	.../site-packages/lisp/gnus for XEmacs. 
+	.../site-packages/lisp/gnus for XEmacs.
 	(AC_PATH_ETCDIR): Default to .../site-packages/etc/gnus for
-	XEmacs. 
+	XEmacs.
 
 2002-02-01  ShengHuo ZHU  <[email protected]>
 
@@ -534,7 +554,7 @@
 
 	* etc/gnus/oort.xface (X-Face): Oort X-Face from
 	Raymond Scholz <[email protected]>.
-	
+
 2002-01-02  ShengHuo ZHU  <[email protected]>
 
 	* etc/gnus/describe-group.xpm: Set pixels of first line to
@@ -591,14 +611,14 @@
 	Contributed by Kim F. Storm <[email protected]>.
 
 2001-10-19  Kai Gro,A_(Bjohann  <[email protected]>
-	From Frank Schmitt <[email protected]>. 
-	
+	From Frank Schmitt <[email protected]>.
+
 	* make-x.bat: Use correct directory structure for XEmacs on Windows.
 
 2001-10-06 08:00:00  ShengHuo ZHU  <[email protected]>
 
 	* Makefile.in (uninstall): Add.
-	
+
 	* etc/Makefile.in (uninstall): Add.
 
 2001-09-27 14:00:00  ShengHuo ZHU  <[email protected]>
@@ -695,6 +715,7 @@
 
 ;; Local Variables:
 ;; coding: iso-2022-7bit
+;; fill-column: 79
 ;; End:
 
 ;;; arch-tag: 60301ba8-b152-41b3-8fb2-173bba77f2a8
Index: gnus/GNUS-NEWS
diff -u gnus/GNUS-NEWS:7.47 gnus/GNUS-NEWS:7.52
--- gnus/GNUS-NEWS:7.47	Fri Mar 31 21:33:09 2006
+++ gnus/GNUS-NEWS	Wed Apr 11 15:19:31 2007
@@ -1,7 +1,8 @@
 GNUS NEWS -- history of user-visible changes.
+
 Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006 Free Software Foundation, Inc.
-See the end for copying conditions.
+   2006, 2007 Free Software Foundation, Inc.
+See the end of the file for license conditions.
 
 Please send Gnus bug reports to [email protected].
 For older news, see Gnus info node "New Features".
@@ -61,6 +62,10 @@
 (`gnus-summary-limit-to-replied') and `/ R'
 (`gnus-summary-limit-to-recipient').  *Note Limiting::.
 
+** You can now fetch all ticked articles from the server using `Y t'
+(`gnus-summary-insert-ticked-articles').  *Note Summary Generation
+Commands::.
+
 ** Gnus supports a new sort command in the Summary buffer: `C-c C-s C-t'
 (`gnus-summary-sort-by-recipient').  *Note Summary Sorting::.
 
@@ -97,6 +102,7 @@
 ** The option `mm-fill-flowed' can be used to disable treatment of
 format=flowed messages.  Also, flowed text is disabled when sending
 inline PGP signed messages.  *Note Flowed text: (emacs-mime)Flowed text.
+(New in Gnus 5.10.7)
 
 
 
@@ -118,6 +124,14 @@
 use `(setq message-hidden-headers nil)'.  *Note Message Headers:
 (message)Message Headers.
 
+** You can highlight different levels of citations like in the article
+buffer.  See `gnus-message-highlight-citation'.
+
+** `auto-fill-mode' is enabled by default in Message mode.  See
+`message-fill-column'.  *Note Message Headers: (message)Various Message
+Variables.
+
+
 
 * Changes in back ends
 
@@ -147,6 +161,14 @@
 ** The nnml back end allows other compression programs beside `gzip' for
 compressed message files.  *Note Mail Spool::.
 
+** The nnml back end supports group compaction.
+
+This feature, accessible via the functions `gnus-group-compact-group'
+(`G z' in the group buffer) and `gnus-server-compact-server' (`z' in the
+server buffer) renumbers all articles in a group, starting from 1 and
+removing gaps.  As a consequence, you get a correct total article count
+(until messages are deleted again).
+
 
 * Appearance
 
@@ -180,20 +202,24 @@
 * For older news, see Gnus info node "New Features".
 
 ----------------------------------------------------------------------
-Copyright information:
+
+This file is part of GNU Emacs.
 
-Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006 Free Software Foundation, Inc.
+GNU Emacs is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.
 
-   Permission is granted to anyone to make or distribute verbatim copies
-   of this document as received, in any medium, provided that the
-   copyright notice and this permission notice are preserved,
-   thus giving the recipient permission to redistribute in turn.
-
-   Permission is granted to distribute modified versions
-   of this document, or of portions of it,
-   under the above conditions, provided also that they
-   carry prominent notices stating who last changed them.
 
 Local variables:
 mode: outline
Index: gnus/README
diff -u gnus/README:7.6 gnus/README:7.7
--- gnus/README:7.6	Tue Apr 11 16:17:52 2006
+++ gnus/README	Fri Mar 23 11:56:32 2007
@@ -19,7 +19,7 @@
 Then you have to tell Emacs where Gnus is.  You might put something
 like
 
-   (setq load-path (cons (expand-file-name "~/ngnus-0.4/lisp") load-path))
+   (setq load-path (cons (expand-file-name "~/ngnus-0.6/lisp") load-path))
    (require 'gnus-load)
 
 in your .emacs file, or wherever you keep such things.  
@@ -28,8 +28,8 @@
 
   (require 'info)
   (if (featurep 'xemacs)
-      (add-to-list 'Info-directory-list "~/ngnus-0.4/texi/")
-    (add-to-list 'Info-default-directory-list "~/ngnus-0.4/texi/"))
+      (add-to-list 'Info-directory-list "~/ngnus-0.6/texi/")
+    (add-to-list 'Info-default-directory-list "~/ngnus-0.6/texi/"))
 
 No Gnus does absolutely not work with anything older than Emacs 21.1 or
 XEmacs 21.4.
Index: gnus/todo
diff -u gnus/todo:7.4 gnus/todo:7.5
--- gnus/todo:7.4	Wed Mar 29 17:56:06 2006
+++ gnus/todo	Mon Oct  9 21:12:13 2006
@@ -230,7 +230,7 @@
   so one could do things like limiting on, to do whatever one likes with
   these articles.
 
-* A possibility to add notes to messages. If thouse could include links
+* A possibility to add notes to messages. If those could include links
   to other (stored) messages this would be very practical.
 
 * Allow article editing in groups which do not support it, but
@@ -342,7 +342,7 @@
 * Allow a user-defined picons directory for personal groups.
 
 * Annotations as discussed last autumn. Be able to make comments to
-  articles for all bakends. The comments amybe should go into a
+  articles for all backends. The comments maybe should go into a
   seperate "backend", like nndraft.
 
 * Catchup on a topic and all its subtopics. I.e. do "c y" when on a
Index: gnus/contrib/ChangeLog
diff -u gnus/contrib/ChangeLog:7.23 gnus/contrib/ChangeLog:7.46
--- gnus/contrib/ChangeLog:7.23	Tue Apr 11 18:22:01 2006
+++ gnus/contrib/ChangeLog	Tue Apr 10 01:44:06 2007
@@ -1,4 +1,121 @@
-2006-04-11  Sascha Wilde  <[email protected]>  (tiny patch)
+2007-04-06  Chong Yidong  <[email protected]>
+
+	* sendmail.el (mail-text, mail-mode): Revert extant pieces of
+	1995-05-19 doc changes.
+
+2007-03-26  Andreas Seltenreich  <[email protected]>
+
+	* nnir.el (gnus-group-make-nnir-group): Put a message-unique-id into
+	names of ephemeral groups to avoid gnus-backlog related caching
+	problems on repeated searches.
+
+2007-03-24  Reiner Steib  <[email protected]>
+
+	* smtpmail.el: Signal an error when used with Emacs 22+ or XEmacs.
+	(smtpmail-send-it): Remove NOMODIFY argument of
+	`set-buffer-file-coding-system' for compatibility with Emacs 21.
+
+2007-02-20  Juanma Barranquero  <[email protected]>
+
+	* smtpmail.el (smtpmail-smtp-service, smtpmail-queue-index-file):
+	Fix typos in docstrings.
+	(smtpmail-local-domain, smtpmail-queue-mail): Doc fixes.
+
+2007-01-06  Simon Josefsson  <[email protected]>
+
+	* README: Mention that smtpmail.el doesn't work on XEmacs.
+
+2006-11-24  Eli Zaretskii  <[email protected]>
+
+	* smtpmail.el (smtpmail-send-it):
+	Copy buffer-file-coding-system from the mail buffer.  Possibly add a
+	MIME header for the message encoding.
+	Bind coding-system-for-write around the call to mail-do-fcc.
+	Use smtpmail-code-conv-from to encode queued mail messages.
+
+2006-10-02  MIYOSHI Masanori <[email protected]>  (tiny change)
+
+	* smtpmail.el (smtpmail-try-auth-methods): Fix typo in
+	2006-09-28 commit.
+
+2006-09-28  Osamu Yamane  <[email protected]> (tiny change)
+
+	* smtpmail.el (smtpmail-try-auth-methods): Do not break long
+	lines in base64-encoded authentication response.
+
+2006-09-04  Chong Yidong  <[email protected]>
+
+	* sendmail.el (sendmail-program): Moved here from pathe.el.
+
+2006-08-09  Katsumi Yamaoka  <[email protected]>
+
+	* compface.el (uncompface): Use binary rather than raw-text-unix.
+
+2006-08-09  Katsumi Yamaoka  <[email protected]>
+
+	* compface.el (uncompface): Make sure the eol conversion doesn't take
+	place when communicating with the external programs.  Reported by
+	ARISAWA Akihiro <[email protected]>.
+
+2006-07-17  Sascha Wilde  <[email protected]>
+
+	* nnir.el: Removed support for non free backends glimpse and excite.
+	Changed and updated copyright to Free Software Foundation.  Moved all
+	authors to head.
+
+2006-06-15  Chong Yidong  <[email protected]>
+
+	* sendmail.el (mail-send): Search explicitly for
+	mail-header-separator when checking for corrupted header lines.
+
+2006-06-10  Andreas Seltenreich  <[email protected]>
+
+	* nnir.el (nnir-read-server-parm): Do not unconditionally fall back to
+	global variables if nnir-mail-backend is nil.
+	(nnir-retrieve-headers): Error on void novitem.  It would just result
+	in a more obscure error later.
+
+2006-06-09  Andreas Seltenreich  <[email protected]>
+
+	* nnir.el (nnir-group-server): DTRT when called on native groups.  The
+	macro is called on groups without checking for foreigness, although the
+	docstring stated it was only for foreign ones.
+
+2006-06-08  Andreas Seltenreich  <[email protected]>
+
+	* nnir.el (nnir-retrieve-headers): Bind gnus-override-method before
+	calling gnus-retrieve-headers.  If we hit a group that isn't in
+	gnus-newsrc-hashtb, gnus-find-method-for-group invented a new select
+	method with empty parameters, possibly corrupting
+	gnus-server-method-cache on the next call to gnus-method-to-server.
+
+2006-06-01  Andreas Seltenreich  <[email protected]>
+
+	* nnir.el (nnir-retrieve-headers): Revert last change; we might as well
+	see message-ids instead of article numbers.
+	(nnir-request-article): Actually check for message-ids.
+
+2006-06-01  Reiner Steib  <[email protected]>
+
+	* nnir.el (nnir-run-swish++): Compressed files might not have .gz
+	extension.
+
+2006-05-31  Andreas Seltenreich  <[email protected]>
+
+	* nnir.el (nnir-retrieve-headers, nnir-request-article): Move check for
+	message-id request.
+
+2006-05-30  Andreas Seltenreich  <[email protected]>
+
+	* nnir.el (nnir-retrieve-headers): Return correct article numbers when
+	less than the full range is selected.
+
+2006-05-12  Simon Josefsson  <[email protected]>
+
+	* nnir.el: Compare servers using gnus-server-equal, otherwise
+	string methods in nnir-mail-backend won't work.
+
+2006-04-11  Sascha Wilde  <[email protected]>
 
 	* nnir.el (nnir-run-swish++): Allow matching gzipped files.
 
@@ -334,6 +451,7 @@
 
 ;; Local Variables:
 ;; coding: iso-2022-7bit
+;; fill-column: 79
 ;; End:
 
 ;;; arch-tag: 105a2bf0-3f04-4ba6-a991-619aece2c04f
Index: gnus/contrib/README
diff -u gnus/contrib/README:7.7 gnus/contrib/README:7.8
--- gnus/contrib/README:7.7	Sat Feb 11 23:25:03 2006
+++ gnus/contrib/README	Mon Jan  8 09:53:37 2007
@@ -46,7 +46,8 @@
 	Copies of the corresponding files from the Emacs lisp/mail/
 	directory, to provide features (occasionally) needed by Gnus which
 	may not be provided by the versions of these files in older Emacs
-	distributions.
+	distributions.  XEmacs users should NOT use this, since it doesn't
+	work.  See the XEmacs mail-lib module instead.
 
 ssl.el
 
Index: gnus/contrib/compface.el
diff -u gnus/contrib/compface.el:7.4 gnus/contrib/compface.el:7.6
--- gnus/contrib/compface.el:7.4	Wed Jul  6 08:42:01 2005
+++ gnus/contrib/compface.el	Thu Aug 10 00:07:20 2006
@@ -81,24 +81,28 @@
 	((eq uncompface-use-external t)
 	 (with-temp-buffer
 	   (insert face)
-	   (and (eq 0 (apply 'call-process-region (point-min) (point-max)
-			     "uncompface"
-			     'delete '(t nil) nil))
-		(progn
-		  (goto-char (point-min))
-		  (insert "/* Width=48, Height=48 */\n")
-		  ;; I just can't get "icontopbm" to work correctly on its
-		  ;; own in XEmacs.  And Emacs doesn't understand un-raw pbm
-		  ;; files.
-		  (if (not (featurep 'xemacs))
-		      (eq 0 (call-process-region (point-min) (point-max)
-						 "icontopbm"
-						 'delete '(t nil)))
-		    (shell-command-on-region (point-min) (point-max)
-					     "icontopbm | pnmnoraw"
-					     (current-buffer) t)
-		    t))
-		(buffer-string))))
+	   (let ((coding-system-for-read 'raw-text)
+		 ;; At least "icontopbm" doesn't work with Windows because
+		 ;; the line-break code is converted into CRLF by default.
+		 (coding-system-for-write 'binary))
+	     (and (eq 0 (apply 'call-process-region (point-min) (point-max)
+			       "uncompface"
+			       'delete '(t nil) nil))
+		  (progn
+		    (goto-char (point-min))
+		    (insert "/* Width=48, Height=48 */\n")
+		    ;; I just can't get "icontopbm" to work correctly on its
+		    ;; own in XEmacs.  And Emacs doesn't understand un-raw pbm
+		    ;; files.
+		    (if (not (featurep 'xemacs))
+			(eq 0 (call-process-region (point-min) (point-max)
+						   "icontopbm"
+						   'delete '(t nil)))
+		      (shell-command-on-region (point-min) (point-max)
+					       "icontopbm | pnmnoraw"
+					       (current-buffer) t)
+		      t))
+		  (buffer-string)))))
 	(t
 	 (let* ((gc-cons-threshold (eval '(lsh -1 -1)))
 		(start (current-time)))
Index: gnus/contrib/nnir.el
diff -u gnus/contrib/nnir.el:7.10 gnus/contrib/nnir.el:7.20
--- gnus/contrib/nnir.el:7.10	Tue Apr 11 18:22:01 2006
+++ gnus/contrib/nnir.el	Mon Mar 26 19:25:12 2007
@@ -1,10 +1,16 @@
 ;;; nnir.el --- search mail with various search engines -*- coding: iso-8859-1 -*-
-;; Copyright (C) 1998 Kai Großjohann
+
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <[email protected]>
-;; Keywords: news, mail, searching, ir, glimpse, wais, hyrex
+;; Swish-e and Swish++ backends by: 
+;;   Christoph Conrad <[email protected]>.
+;; Imap backend by: Simon Josefsson <[email protected]>.
+
+;; Keywords: news mail searching ir
 
-;; This file is not part of GNU Emacs.
+;; This file is part of GNU Emacs.
 
 ;; This is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -31,7 +37,7 @@
 ;; with your ideas.
 
 ;; What does it do?  Well, it allows you to index your mail using some
-;; search engine (freeWAIS-sf, Glimpse and others -- see later),
+;; search engine (freeWAIS-sf, swish-e and others -- see later),
 ;; then type `G G' in the Group buffer and issue a query to the search
 ;; engine.  You will then get a buffer which shows all articles
 ;; matching the query, sorted by Retrieval Status Value (score).
@@ -55,7 +61,6 @@
 ;;   others doesn't support nnfolder.
 ;; * It can only search the mail backend's which are supported by one
 ;;   search engine, because of different query languages.
-;; * There are restrictions to the Glimpse setup.
 ;; * There are restrictions to the Wais setup.
 ;; * There are restrictions to the imap setup.
 ;; * gnus-summary-nnir-goto-thread: Fetches whole group first, before
@@ -156,18 +161,7 @@
 ;; this prefix.  It defaults to `$HOME/Mail/' (note the trailing
 ;; slash).
 
-;; 2. Glimpse
-;;
-;; The code expects you to have one Glimpse index which contains all
-;; your mail files.  The Lisp setup involves setting the
-;; `nnir-glimpse-*' variables.  The most difficult to understand
-;; variable is probably `nnir-glimpse-remove-prefix', it corresponds
-;; to `nnir-wais-remove-prefix', see above.  The `nnir-glimpse-home'
-;; variable should be set to the value of the `-H' option which allows
-;; one to search this Glimpse index.  I have indexed my whole home
-;; directory with Glimpse, so I assume a default of `$HOME'.
-
-;; 3. Namazu
+;; 2. Namazu
 ;;
 ;; The Namazu backend requires you to have one directory containing all
 ;; index files, this is controlled by the `nnir-namazu-index-directory'
@@ -211,7 +205,7 @@
 ;; For maximum searching efficiency I have a cron job set to run this
 ;; command every four hours.
 
-;; 4. HyREX
+;; 3. HyREX
 ;;
 ;; The HyREX backend requires you to have one directory from where all
 ;; your relative paths are to, if you use them. This directory must be
@@ -242,7 +236,7 @@
 ;; the second element should be the article number, and the third
 ;; element should be the Retrieval Status Value (RSV) as returned from
 ;; the search engine.  An RSV is the score assigned to the document by
-;; the search engine.  For Boolean search engines like Glimpse, the
+;; the search engine.  For Boolean search engines, the
 ;; RSV is always 1000 (or 1 or 100, or whatever you like).
 
 ;; The sorting order of the articles in the summary buffer created by
@@ -261,8 +255,6 @@
 
 ;; Todo, or future ideas:
 
-;; * Make it so that Glimpse can also be called without `-F'.
-;;
 ;; * It should be possible to restrict search to certain groups.
 ;;
 ;; * There is currently no error checking.
@@ -302,6 +294,7 @@
 (require 'nnoo)
 (require 'gnus-group)
 (require 'gnus-sum)
+(require 'message)
 (eval-and-compile
   (require 'gnus-util))
 (eval-when-compile
@@ -330,12 +323,8 @@
 ;;; Developer Extension Variable:
 
 (defvar nnir-engines
-  `((glimpse nnir-run-glimpse
-             ((group . "Group spec: ")))
-    (wais    nnir-run-waissearch
+  `((wais    nnir-run-waissearch
              ())
-    (excite  nnir-run-excite-search
-	     ())
     (imap    nnir-run-imap
              ((criteria 
 	       "Search in: "                      ; Prompt
@@ -376,7 +365,7 @@
 ;;; User Customizable Variables:
 
 (defgroup nnir nil
-  "Search nnmh and nnml groups in Gnus with Glimpse, freeWAIS-sf, or EWS."
+  "Search nnmh and nnml groups in Gnus with swish-e, freeWAIS-sf, or EWS."
   :group 'gnus)
 
 ;; Mail backend.
@@ -407,47 +396,6 @@
   :type '(sexp)
   :group 'nnir)
 
-;; Glimpse engine.
-
-(defcustom nnir-glimpse-program "glimpse"
-  "*Name of Glimpse executable."
-  :type '(string)
-  :group 'nnir)
-
-(defcustom nnir-glimpse-home (getenv "HOME")
-  "*Value of `-H' glimpse option.
-`~' and environment variables must be expanded, see the functions
-`expand-file-name' and `substitute-in-file-name'."
-  :type '(directory)
-  :group 'nnir)
-
-(defcustom nnir-glimpse-remove-prefix (concat (getenv "HOME") "/Mail/")
-  "*The prefix to remove from each file name returned by Glimpse
-in order to get a group name (albeit with / instead of .).  This is a
-regular expression.
-
-For example, suppose that Glimpse returns file names such as
-\"/home/john/Mail/mail/misc/42\".  For this example, use the following
-setting:  (setq nnir-glimpse-remove-prefix \"/home/john/Mail/\")
-Note the trailing slash.  Removing this prefix gives \"mail/misc/42\".
-`nnir' knows to remove the \"/42\" and to replace \"/\" with \".\" to
-arrive at the correct group name, \"mail.misc\"."
-  :type '(regexp)
-  :group 'nnir)
-
-(defcustom nnir-glimpse-additional-switches '("-i")
-  "*A list of strings, to be given as additional arguments to glimpse.
-The switches `-H', `-W', `-l' and `-y' are always used -- calling
-glimpse without them does not make sense in our situation.
-Suggested elements to put here are `-i' and `-w'.
-
-Note that this should be a list.  Ie, do NOT use the following:
-    (setq nnir-glimpse-additional-switches \"-i -w\") ; wrong!
-Instead, use this:
-    (setq nnir-glimpse-additional-switches '(\"-i\" \"-w\"))"
-  :type '(repeat (string))
-  :group 'nnir)
-
 ;; freeWAIS-sf.
 
 (defcustom nnir-wais-program "waissearch"
@@ -470,37 +418,15 @@
 in order to get a group name (albeit with / instead of .).  This is a
 regular expression.
 
-This variable is similar to `nnir-glimpse-remove-prefix', only for Wais,
-not Glimpse."
-  :type '(regexp)
-  :group 'nnir)
-
-;; EWS (Excite for Web Servers) engine.
-
-(defcustom nnir-excite-aquery-program "aquery.pl"
-  "*Name of the EWS query program.  Should be `aquery.pl' or a path to same."
-  :type '(string)
-  :group 'nnir)
-
-(defcustom nnir-excite-collection "Mail"
-  "*Name of the EWS collection to search."
-  :type '(string)
-  :group 'nnir)
-
-(defcustom nnir-excite-remove-prefix (concat (getenv "HOME") "/Mail/")
-  "*The prefix to remove from each file name returned by EWS
-in order to get a group name (albeit with / instead of .).  This is a
-regular expression.
-
-This variable is very similar to `nnir-glimpse-remove-prefix', except
-that it is for EWS, not Glimpse."
+For example, suppose that Wais returns file names such as
+\"/home/john/Mail/mail/misc/42\".  For this example, use the following
+setting:  (setq nnir-wais-remove-prefix \"/home/john/Mail/\")
+Note the trailing slash.  Removing this prefix gives \"mail/misc/42\".
+`nnir' knows to remove the \"/42\" and to replace \"/\" with \".\" to
+arrive at the correct group name, \"mail.misc\"."
   :type '(regexp)
   :group 'nnir)
 
-;; Swish++.  Next three variables Copyright (C) 2000, 2001 Christoph
-;; Conrad <[email protected]>.
-;; Swish++ home page: http://homepage.mac.com/pauljlucas/software/swish/
-
 (defcustom nnir-swish++-configuration-file
   (expand-file-name "~/Mail/swish++.conf")
   "*Configuration file for swish++."
@@ -527,8 +453,8 @@
 in order to get a group name (albeit with / instead of .).  This is a
 regular expression.
 
-This variable is very similar to `nnir-glimpse-remove-prefix', except
-that it is for swish++, not Glimpse."
+This variable is very similar to `nnir-wais-remove-prefix', except
+that it is for swish++, not Wais."
   :type '(regexp)
   :group 'nnir)
 
@@ -537,7 +463,6 @@
 ;; New version: http://www.boe.es/swish-e
 ;; Variables `nnir-swish-e-index-file', `nnir-swish-e-program' and
 ;; `nnir-swish-e-additional-switches'
-;; Copyright (C) 2000 Christoph Conrad <[email protected]>.
 
 (make-obsolete-variable 'nnir-swish-e-index-file
 			'nnir-swish-e-index-files)
@@ -580,8 +505,8 @@
 in order to get a group name (albeit with / instead of .).  This is a
 regular expression.
 
-This variable is very similar to `nnir-glimpse-remove-prefix', except
-that it is for swish-e, not Glimpse.
+This variable is very similar to `nnir-wais-remove-prefix', except
+that it is for swish-e, not Wais.
 
 This could be a server parameter."
   :type '(regexp)
@@ -649,8 +574,8 @@
   "*The prefix to remove from each file name returned by Namazu
 in order to get a group name (albeit with / instead of .).
 
-This variable is very similar to `nnir-glimpse-remove-prefix', except
-that it is for Namazu, not Glimpse."
+This variable is very similar to `nnir-wais-remove-prefix', except
+that it is for Namazu, not Wais."
   :type '(directory)
   :group 'nnir)
 
@@ -686,6 +611,7 @@
     (if extra-parms
         (setq parms (nnir-read-parms query))
       (setq parms (list (cons 'query query))))
+    (add-to-list 'parms (cons 'unique-id (message-unique-id)) t)
     (gnus-group-read-ephemeral-group
      (concat "nnir:" (prin1-to-string parms)) '(nnir "") t
      (cons (current-buffer)
@@ -704,16 +630,17 @@
 (add-hook 'gnus-group-mode-hook 'nnir-group-mode-hook)
 
 (defmacro nnir-group-server (group)
-  "Return the server for a foreign newsgroup GROUP.
+  "Return the server for a newsgroup GROUP.
 The returned format is as `gnus-server-to-method' needs it.  See
 `gnus-group-real-prefix' and `gnus-group-real-name'."
   `(let ((gname ,group))
      (if (string-match "^\\([^:]+\\):" gname)
-	 (setq gname (match-string 1 gname))
-       nil)
-     (if (string-match "^\\([^+]+\\)\\+\\(.+\\)$" gname)
-	 (format "%s:%s" (match-string 1 gname) (match-string 2 gname))
-       (concat gname ":"))))
+	 (progn
+	   (setq gname (match-string 1 gname))
+	   (if (string-match "^\\([^+]+\\)\\+\\(.+\\)$" gname)
+	       (format "%s:%s" (match-string 1 gname) (match-string 2 gname))
+	     (concat gname ":")))
+       "native")))
 
 ;; Summary mode commands.
 
@@ -790,7 +717,6 @@
 (deffoo nnir-retrieve-headers (articles &optional group server fetch-old)
   (save-excursion
     (let ((artlist (copy-sequence articles))
-          (idx 1)
           (art nil)
           (artitem nil)
           (artgroup nil) (artno nil)
@@ -817,27 +743,30 @@
         ;; NOV data and prepend to `novdata'
         (set-buffer nntp-server-buffer)
 	(nnir-possibly-change-server server)
-        (case (setq foo (gnus-retrieve-headers (list artno) artfullgroup nil))
-          (nov
-           (goto-char (point-min))
-           (setq novitem (nnheader-parse-nov))
-           (unless novitem
-             (pop-to-buffer nntp-server-buffer)
-             (error
-              "nnheader-parse-nov returned nil for article %s in group %s"
-              artno artfullgroup)))
-          (headers
-           (goto-char (point-min))
-           (setq novitem (nnheader-parse-head))
-           (unless novitem
-             (pop-to-buffer nntp-server-buffer)
-             (error
-              "nnheader-parse-head returned nil for article %s in group %s"
-              artno artfullgroup)))
-          (t (nnheader-report 'nnir "Don't support header type %s." foo)))
-       ;; replace article number in original group with article number
+        (let ((gnus-override-method
+	       (gnus-server-to-method server)))
+	  (case (setq foo (gnus-retrieve-headers (list artno) artfullgroup nil))
+	    (nov
+	     (goto-char (point-min))
+	     (setq novitem (nnheader-parse-nov))
+	     (unless novitem
+	       (pop-to-buffer nntp-server-buffer)
+	       (error
+		"nnheader-parse-nov returned nil for article %s in group %s"
+		artno artfullgroup)))
+	    (headers
+	     (goto-char (point-min))
+	     (setq novitem (nnheader-parse-head))
+	     (unless novitem
+	       (pop-to-buffer nntp-server-buffer)
+	       (error
+		"nnheader-parse-head returned nil for article %s in group %s"
+		artno artfullgroup)))
+	    (t (error "Unknown header type %s while requesting article %s of group %s"
+		      foo artno artfullgroup))))
+	;; replace article number in original group with article number
         ;; in nnir group
-        (mail-header-set-number novitem idx)
+        (mail-header-set-number novitem art)
         (mail-header-set-from novitem
                               (mail-header-from novitem))
         (mail-header-set-subject
@@ -847,8 +776,7 @@
                  (mail-header-subject novitem)))
         ;;-(mail-header-set-extra novitem nil)
         (push novitem novdata)
-        (setq artlist (cdr artlist))
-        (setq idx (1+ idx)))
+        (setq artlist (cdr artlist)))
       (setq novdata (nreverse novdata))
       (set-buffer nntp-server-buffer) (erase-buffer)
       (mapcar 'nnheader-insert-nov novdata)
@@ -856,99 +784,33 @@
 
 (deffoo nnir-request-article (article
                               &optional group server to-buffer)
-  (save-excursion
-    (let* ((artitem (nnir-artlist-article nnir-artlist
-                                          article))
-           (artfullgroup (nnir-artitem-group artitem))
-           (artno (nnir-artitem-number artitem))
-           ;; Bug?
-           ;; Why must we bind nntp-server-buffer here?  It won't
-           ;; work if `buf' is used, say.  (Of course, the set-buffer
-           ;; line below must then be updated, too.)
-           (nntp-server-buffer (or to-buffer nntp-server-buffer)))
-      (set-buffer nntp-server-buffer)
-      (erase-buffer)
-      (message "Requesting article %d from group %s"
-               artno artfullgroup)
-      (gnus-request-article artno artfullgroup nntp-server-buffer)
-      (cons artfullgroup artno))))
+  (if (stringp article)
+      (nnheader-report
+       'nnir
+       "nnir-retrieve-headers doesn't grok message ids: %s"
+       article)
+    (save-excursion
+      (let* ((artitem (nnir-artlist-article nnir-artlist
+					    article))
+	     (artfullgroup (nnir-artitem-group artitem))
+	     (artno (nnir-artitem-number artitem))
+	     ;; Bug?
+	     ;; Why must we bind nntp-server-buffer here?  It won't
+	     ;; work if `buf' is used, say.  (Of course, the set-buffer
+	     ;; line below must then be updated, too.)
+	     (nntp-server-buffer (or to-buffer nntp-server-buffer)))
+	(set-buffer nntp-server-buffer)
+	(erase-buffer)
+	(message "Requesting article %d from group %s"
+		 artno artfullgroup)
+	(gnus-request-article artno artfullgroup nntp-server-buffer)
+	(cons artfullgroup artno)))))
 
 
 (nnoo-define-skeleton nnir)
 
 ;;; Search Engine Interfaces:
 
-;; Glimpse interface.
-(defun nnir-run-glimpse (query server &optional group)
-  "Run given query against glimpse.  Returns a vector of (group name, file name)
-pairs (also vectors, actually)."
-  (save-excursion
-    (let ((artlist nil)
-          (groupspec (cdr (assq 'group query)))
-          (qstring (cdr (assq 'query query)))
-	  (prefix (nnir-read-server-parm 'nnir-glimpse-remove-prefix server))
-	  artno dirnam)
-      (when (and group groupspec)
-        (error (concat "It does not make sense to use a group spec"
-                       " with process-marked groups.")))
-      (when group
-        (setq groupspec (gnus-group-real-name group)))
-      (set-buffer (get-buffer-create nnir-tmp-buffer))
-      (erase-buffer)
-      (if groupspec
-          (message "Doing glimpse query %s on %s..." query groupspec)
-        (message "Doing glimpse query %s..." query))
-      (let* ((cp-list
-              `( ,nnir-glimpse-program
-                 nil                    ; input from /dev/null
-                 t                      ; output
-                 nil                    ; don't redisplay
-                 "-H" ,(nnir-read-server-parm 'nnir-glimpse-home server) ; search home dir
-                 "-W"                   ; match pattern in file
-                 "-l" "-y"              ; misc options
-                 ,@(nnir-read-server-parm 'nnir-glimpse-additional-switches server)
-                 "-F" ,prefix           ; restrict output to mail
-                 ,qstring               ; the query, in glimpse format
-		 ))
-             (exitstatus
-              (progn
-                (message "%s args: %s" nnir-glimpse-program
-                         (mapconcat 'identity (cddddr cp-list) " "))
-                (apply 'call-process cp-list))))
-        (unless (or (null exitstatus)
-                    (zerop exitstatus))
-          (nnheader-report 'nnir "Couldn't run glimpse: %s" exitstatus)
-          ;; Glimpse failure reason is in this buffer, show it if
-          ;; the user wants it.
-          (when (> gnus-verbose 6)
-            (display-buffer nnir-tmp-buffer))))
-      (when groupspec
-        (keep-lines groupspec))
-      (if groupspec
-          (message "Doing glimpse query %s on %s...done" query groupspec)
-        (message "Doing glimpse query %s...done" query))
-      (sit-for 0)
-      ;; remove superfluous stuff from glimpse output
-      (goto-char (point-min))
-      (delete-non-matching-lines "/[0-9]+$")
-      ;;(delete-matching-lines "\\.overview~?$")
-      (goto-char (point-min))
-      (while (re-search-forward (concat "^" prefix "\\(.+\\)" "/\\([0-9]\\)+$") nil t)
-	;; replace / with . in group names
-        (setq dirnam (substitute ?. ?/ (match-string 1))
-	      artno  (match-string 2))
-	(push (vector (nnir-group-full-name dirnam server)
-		      (string-to-int artno)) artlist))
-
-      (sort* artlist
-             (function (lambda (x y)
-                         (if (string-lessp (nnir-artitem-group x)
-                                           (nnir-artitem-group y))
-                             t
-                           (< (nnir-artitem-number x)
-                              (nnir-artitem-number y))))))
-      )))
-
 ;; freeWAIS-sf interface.
 (defun nnir-run-waissearch (query server &optional group)
   "Run given query agains waissearch.  Returns vector of (group name, file name)
@@ -994,50 +856,7 @@
                                 (> (nnir-artitem-rsv x)
                                    (nnir-artitem-rsv y)))))))))
 
-;; EWS (Excite for Web Servers) interface
-(defun nnir-run-excite-search (query server &optional group)
-  "Run a given query against EWS.  Returns vector of (group name, file name)
-pairs (also vectors, actually)."
-  (when group
-    (error "Searching specific groups not implemented for EWS."))
-  (save-excursion
-    (let ((qstring (cdr (assq 'query query)))
-	  (prefix (nnir-read-server-parm 'nnir-excite-remove-prefix server))
-	  artlist group article-num article)
-      (setq nnir-current-query query)
-      (set-buffer (get-buffer-create nnir-tmp-buffer))
-      (erase-buffer)
-      (message "Doing EWS query %s..." qstring)
-      (call-process nnir-excite-aquery-program
-		    nil			; input from /dev/null
-		    t			; output to current buffer
-		    nil			; don't redisplay
-		    (nnir-read-server-parm 'nnir-excite-collection server)
-		    (if (string= (substring qstring 0 1) "(")
-			qstring
-		      (format "(concept %s)" qstring)))
-      (message "Gathering query output...")
-
-      (goto-char (point-min))
-      (while (re-search-forward
-	      "^[0-9]+\\s-[0-9]+\\s-[0-9]+\\s-\\(\\S-*\\)" nil t)
-	(setq article (match-string 1))
-	(unless (string-match
-		 (concat "^" (regexp-quote prefix)
-			 "\\(.*\\)/\\([0-9]+\\)") article)
-	  (nnheader-report 'nnir "Dir name %s doesn't contain prefix %s"
-			   article prefix))
-	(setq group (substitute ?. ?/ (match-string 1 article)))
-	(setq group (nnir-group-full-name group server))
-	(setq article-num (match-string 2 article))
-	(setq artlist (vconcat artlist (vector (vector group
-						       (string-to-int article-num)
-						       1000)))))
-      (message "Gathering query output...done")
-      artlist)))
-
-;; IMAP interface.  The following function is Copyright (C) 1998 Simon
-;; Josefsson <[email protected]>.
+;; IMAP interface.
 ;; todo:
 ;; nnir invokes this two (2) times???!
 ;; we should not use nnimap at all but open our own server connection
@@ -1074,8 +893,7 @@
         (quit nil))
       (reverse artlist))))
 
-;; Swish++ interface.  The following function is Copyright (C) 2000,
-;; 2001 Christoph Conrad <[email protected]>.
+;; Swish++ interface.
 ;; -cc- Todo
 ;; Search by
 ;; - group
@@ -1147,7 +965,11 @@
               dirnam (file-name-directory (match-string 2)))
 
         ;; don't match directories
-        (when (string-match "^[0-9]+\\(\\.gz\\)?$" artno)
+        (when (string-match "^[0-9]+\\(\\.[a-z0-9]+\\)?$" artno)
+	  ;; nnml-use-compressed-files might be any string, but probably this
+	  ;; is sufficient.  Note that we can't only use the value of
+	  ;; nnml-use-compressed-files because old articles might have been
+	  ;; saved with a different value.
           (when (not (null dirnam))
 
 	    ;; maybe limit results to matching groups.
@@ -1181,8 +1003,7 @@
                                 (> (nnir-artitem-rsv x)
                                    (nnir-artitem-rsv y)))))))))
 
-;; Swish-E interface.  The following function is Copyright (C) 2000,
-;; 2001 by Christoph Conrad <[email protected]>.
+;; Swish-E interface.
 (defun nnir-run-swish-e (query server &optional group)
   "Run given query against swish-e.
 Returns a vector of (group name, file name) pairs (also vectors,
@@ -1495,9 +1316,7 @@
     (cond ((and method (assq key (cddr method)))
 	   (nth 1 (assq key (cddr method))))
 	  ((and nnir-mail-backend
-		(gnus-method-equal method nnir-mail-backend))
-	   (symbol-value key))
-	  ((null nnir-mail-backend)
+		(gnus-server-equal method nnir-mail-backend))
 	   (symbol-value key))
 	  (t nil))))
 ;;     (if method
@@ -1549,7 +1368,7 @@
 
 (defun nnir-artlist-artitem-rsv (artlist n)
   "Returns from ARTLIST the Retrieval Status Value of the Nth artitem
-(counting from 1)."
+\(counting from 1)."
   (nnir-artitem-rsv (nnir-artlist-article artlist n)))
 
 ;; unused?
Index: gnus/contrib/sendmail.el
diff -u gnus/contrib/sendmail.el:7.1 gnus/contrib/sendmail.el:7.5
--- gnus/contrib/sendmail.el:7.1	Sat Feb 11 23:25:03 2006
+++ gnus/contrib/sendmail.el	Tue Apr 10 01:44:06 2007
@@ -1,7 +1,7 @@
 ;;; sendmail.el --- mail sending commands for Emacs.  -*- byte-compile-dynamic: t -*-
 
 ;; Copyright (C) 1985, 1986, 1992, 1993, 1994, 1995, 1996, 1998, 2000,
-;;   2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: mail
@@ -48,6 +48,16 @@
   :group 'sendmail
   :version "22.1")
 
+(defcustom sendmail-program
+  (cond
+    ((file-exists-p "/usr/sbin/sendmail") "/usr/sbin/sendmail")
+    ((file-exists-p "/usr/lib/sendmail") "/usr/lib/sendmail")
+    ((file-exists-p "/usr/ucblib/sendmail") "/usr/ucblib/sendmail")
+    (t "fakemail"))			;In ../etc, to interface to /bin/mail.
+  "Program used to send messages."
+  :group 'mail
+  :type 'file)
+
 ;;;###autoload
 (defcustom mail-from-style 'angles
   "Specifies how \"From:\" fields look.
@@ -610,16 +620,16 @@
 \\[mail-send-and-exit]  mail-send-and-exit (send the message and exit)
 
 Here are commands that move to a header field (and create it if there isn't):
-	 \\[mail-to]  move to To:	\\[mail-subject]  move to Subject:
-	 \\[mail-cc]  move to CC:	\\[mail-bcc]  move to BCC:
+	 \\[mail-to]  move to To:	\\[mail-subject]  move to Subj:
+	 \\[mail-bcc]  move to BCC:	\\[mail-cc]  move to CC:
 	 \\[mail-fcc]  move to FCC:	\\[mail-reply-to] move to Reply-To:
          \\[mail-mail-reply-to]  move to Mail-Reply-To:
          \\[mail-mail-followup-to] move to Mail-Followup-To:
-\\[mail-text]  mail-text (move to beginning of message text).
+\\[mail-text]  move to message text.
 \\[mail-signature]  mail-signature (insert `mail-signature-file' file).
 \\[mail-yank-original]  mail-yank-original (insert current message, in Rmail).
 \\[mail-fill-yanked-message]  mail-fill-yanked-message (fill what was yanked).
-\\[mail-sent-via]  mail-sent-via (add a Sent-via field for each To or CC).
+\\[mail-sent-via]  mail-sent-via (add a sent-via field for each To or CC).
 Turning on Mail mode runs the normal hooks `text-mode-hook' and
 `mail-mode-hook' (in that order)."
   (make-local-variable 'mail-reply-action)
@@ -863,11 +873,14 @@
 		(error "Message contains non-ASCII characters"))))
 	;; Complain about any invalid line.
 	(goto-char (point-min))
-	(while (< (point) (mail-header-end))
-	  (unless (looking-at "[ \t]\\|.*:\\|$")
-	    (push-mark opoint)
-	    (error "Invalid header line (maybe a continuation line lacks initial whitespace)"))
-	  (forward-line 1))
+	(re-search-forward (regexp-quote mail-header-separator) (point-max) t)
+	(let ((header-end (or (match-beginning 0) (point-max))))
+	  (goto-char (point-min))
+	  (while (< (point) header-end)
+	    (unless (looking-at "[ \t]\\|.*:\\|$")
+	      (push-mark opoint)
+	      (error "Invalid header line (maybe a continuation line lacks initial whitespace)"))
+	    (forward-line 1)))
 	(goto-char opoint)
 	(run-hooks 'mail-send-hook)
 	(message "Sending...")
@@ -1379,7 +1392,7 @@
       nil)))
 
 (defun mail-text ()
-  "Move point to beginning of message text."
+  "Move point to beginning of text field."
   (interactive)
   (expand-abbrev)
   (goto-char (mail-text-start)))
Index: gnus/contrib/smtpmail.el
diff -u gnus/contrib/smtpmail.el:7.1 gnus/contrib/smtpmail.el:7.10
--- gnus/contrib/smtpmail.el:7.1	Sat Feb 11 23:25:03 2006
+++ gnus/contrib/smtpmail.el	Sat Mar 24 20:16:54 2007
@@ -1,7 +1,7 @@
 ;;; smtpmail.el --- simple SMTP protocol (RFC 821) for sending mail
 
 ;; Copyright (C) 1995, 1996, 2001, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;;   2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Tomoji Kagatani <[email protected]>
 ;; Maintainer: Simon Josefsson <[email protected]>
@@ -68,6 +68,12 @@
 
 ;;; Code:
 
+;; This version of `smtpmail.el' should only be used with Emacs 21.
+(if (featurep 'xemacs)
+    (error "Please use `smtpmail.el' from the mail-lib package.")
+  (when (>= emacs-major-version 22)
+    (error "Please use `smtpmail.el' bundled with Emacs.")))
+
 (require 'sendmail)
 (autoload 'starttls-open-stream "starttls")
 (autoload 'starttls-negotiate "starttls")
@@ -99,13 +105,13 @@
 
 (defcustom smtpmail-smtp-service 25
   "*SMTP service port number.
-The default value would be \"smtp\" or 25 ."
+The default value would be \"smtp\" or 25."
   :type '(choice (integer :tag "Port") (string :tag "Service"))
   :group 'smtpmail)
 
 (defcustom smtpmail-local-domain nil
   "*Local domain name without a host name.
-If the function (system-name) returns the full internet address,
+If the function `system-name' returns the full internet address,
 don't define this value."
   :type '(choice (const nil) string)
   :group 'smtpmail)
@@ -145,7 +151,7 @@
   :group 'smtpmail)
 
 (defcustom smtpmail-queue-mail nil
-  "*Specify if mail is queued (if t) or sent immediately (if nil).
+  "*If set, mail is queued; otherwise it is sent immediately.
 If queued, it is stored in the directory `smtpmail-queue-dir'
 and sent with `smtpmail-send-queued-mail'."
   :type 'boolean
@@ -176,7 +182,12 @@
 (defcustom smtpmail-starttls-credentials '(("" 25 "" ""))
   "Specify STARTTLS keys and certificates for servers.
 This is a list of four-element list with `servername' (a string),
-`port' (an integer), `key' (a filename) and `certificate' (a filename)."
+`port' (an integer), `key' (a filename) and `certificate' (a
+filename).
+If you do not have a certificate/key pair, leave the `key' and
+`certificate' fields as `nil'.  A key/certificate pair is only
+needed if you want to use X.509 client authenticated
+connections."
   :type '(repeat (list (string  :tag "Server")
 		       (integer :tag "Port")
 		       (file    :tag "Key")
@@ -193,7 +204,7 @@
   :group 'smtpmail)
 
 (defvar smtpmail-queue-index-file "index"
-  "File name of queued mail index,
+  "File name of queued mail index.
 This is relative to `smtpmail-queue-dir'.")
 
 (defvar smtpmail-address-buffer)
@@ -239,6 +250,17 @@
 	(save-excursion
 	  (set-buffer tembuf)
 	  (erase-buffer)
+	  ;; Use the same buffer-file-coding-system as in the mail
+	  ;; buffer, otherwise any write-region invocations (e.g., in
+	  ;; mail-do-fcc below) will annoy with asking for a suitable
+	  ;; encoding.
+	  ;;
+	  ;; This file (`gnus/contrib/smtpmail.el') is only useful for Emacs
+	  ;; which doesn't support the third argument (NOMODIFY) of
+	  ;; `set-buffer-file-coding-system'.
+	  (set-buffer-file-coding-system smtpmail-code-conv-from nil)
+	  (set-buffer-modified-p nil)
+	  (force-mode-line-update)
 	  (insert-buffer-substring mailbuf)
 	  (goto-char (point-max))
 	  ;; require one newline at the end.
@@ -321,6 +343,22 @@
 	    (goto-char (point-min))
 	    (unless (re-search-forward "^Date:" delimline t)
 	      (insert "Date: " (message-make-date) "\n"))
+	    ;; Possibly add a MIME header for the current coding system
+	    (let (charset)
+	      (goto-char (point-min))
+	      (and (eq mail-send-nonascii 'mime)
+		   (not (re-search-forward "^MIME-version:" delimline t))
+		   (progn (skip-chars-forward "\0-\177")
+			  (/= (point) (point-max)))
+		   smtpmail-code-conv-from
+		   (setq charset
+			 (coding-system-get smtpmail-code-conv-from
+					    'mime-charset))
+		   (goto-char delimline)
+		   (insert "MIME-version: 1.0\n"
+			   "Content-type: text/plain; charset="
+			   (symbol-name charset)
+			   "\nContent-Transfer-Encoding: 8bit\n")))
 	    ;; Insert an extra newline if we need it to work around
 	    ;; Sun's bug that swallows newlines.
 	    (goto-char (1+ delimline))
@@ -329,7 +367,10 @@
 	    ;; Find and handle any FCC fields.
 	    (goto-char (point-min))
 	    (if (re-search-forward "^FCC:" delimline t)
-		(mail-do-fcc delimline))
+		;; Force mail-do-fcc to use the encoding of the mail
+		;; buffer to encode outgoing messages on FCC files.
+		(let ((coding-system-for-write smtpmail-code-conv-from))
+		  (mail-do-fcc delimline)))
 	    (if mail-interactive
 		(with-current-buffer errbuf
 		  (erase-buffer))))
@@ -365,6 +406,7 @@
 		(make-directory smtpmail-queue-dir t))
 	      (with-current-buffer buffer-data
 		(erase-buffer)
+		(set-buffer-file-coding-system smtpmail-code-conv-from nil)
 		(insert-buffer-substring tembuf)
 		(write-file file-data)
 		(set-buffer buffer-elisp)
@@ -536,7 +578,18 @@
 		 (decoded (base64-decode-string challenge))
 		 (hash (rfc2104-hash 'md5 64 16 passwd decoded))
 		 (response (concat (smtpmail-cred-user cred) " " hash))
-		 (encoded (base64-encode-string response)))
+		 ;; Osamu Yamane <[email protected]>:
+		 ;; SMTP auth fails because the SMTP server identifies
+		 ;; only the first part of the string (delimited by
+		 ;; new line characters) as a response from the
+		 ;; client, and the rest as distinct commands.
+
+		 ;; In my case, the response string is 80 characters
+		 ;; long.  Without the no-line-break option for
+		 ;; base64-encode-sting, only the first 76 characters
+		 ;; are taken as a response to the server, and the
+		 ;; authentication fails.
+		 (encoded (base64-encode-string response t)))
 	    (smtpmail-send-command process (format "%s" encoded))
 	    (if (or (null (car (setq ret (smtpmail-read-response process))))
 		    (not (integerp (car ret)))
@@ -549,12 +602,12 @@
 		(>= (car ret) 400))
 	    (throw 'done nil))
 	(smtpmail-send-command
-	 process (base64-encode-string (smtpmail-cred-user cred)))
+	 process (base64-encode-string (smtpmail-cred-user cred) t))
 	(if (or (null (car (setq ret (smtpmail-read-response process))))
 		(not (integerp (car ret)))
 		(>= (car ret) 400))
 	    (throw 'done nil))
-	(smtpmail-send-command process (base64-encode-string passwd))
+	(smtpmail-send-command process (base64-encode-string passwd t))
 	(if (or (null (car (setq ret (smtpmail-read-response process))))
 		(not (integerp (car ret)))
 		(>= (car ret) 400))
@@ -571,7 +624,7 @@
 					(concat "\0"
 						(smtpmail-cred-user cred)
 						"\0"
-						passwd))))
+						passwd) t)))
 	(if (or (null (car (setq ret (smtpmail-read-response process))))
 		(not (integerp (car ret)))
 		(not (equal (car ret) 235)))
Index: gnus/etc/gnus-tut.txt
diff -u gnus/etc/gnus-tut.txt:7.5 gnus/etc/gnus-tut.txt:7.6
--- gnus/etc/gnus-tut.txt:7.5	Wed Feb  8 05:17:16 2006
+++ gnus/etc/gnus-tut.txt	Wed Jan 24 08:15:39 2007
@@ -25,8 +25,8 @@
 heart's delight at <URL:http://www.gnus.org/> and
 <URL:http://quimby.gnus.org/lmi/>.
 
-;; Copyright (C) 1995, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005,
+;;   2006, 2007  Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/etc/images/gnus/bar.xbm
diff -u gnus/etc/images/gnus/bar.xbm:1.2 gnus/etc/images/gnus/bar.xbm:removed
--- gnus/etc/images/gnus/bar.xbm:1.2	Sat Feb 19 06:08:40 2005
+++ gnus/etc/images/gnus/bar.xbm	Tue May  1 17:20:37 2007
@@ -1,7 +0,0 @@
-#define noname_width 6
-#define noname_height 48
-static char noname_bits[] = {
- 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
- 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
- 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
- 0x0c,0x0c,0x0c};
Index: gnus/etc/images/gnus/bar.xpm
diff -u gnus/etc/images/gnus/bar.xpm:1.2 gnus/etc/images/gnus/bar.xpm:removed
--- gnus/etc/images/gnus/bar.xpm:1.2	Sat Feb 19 06:08:40 2005
+++ gnus/etc/images/gnus/bar.xpm	Tue May  1 17:20:37 2007
@@ -1,54 +0,0 @@
-/* XPM */
-static char * picon-bar_xpm[] = {
-"6 48 2 1",
-" 	c white s background",
-".	c black",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  ",
-"  ..  "};
Index: gnus/etc/images/gnus/rot13.pbm
Index: gnus/etc/images/gnus/rot13.xpm
diff -u gnus/etc/images/gnus/rot13.xpm:1.2 gnus/etc/images/gnus/rot13.xpm:1.3
--- gnus/etc/images/gnus/rot13.xpm:1.2	Sat Feb 19 06:08:41 2005
+++ gnus/etc/images/gnus/rot13.xpm	Fri Mar  2 00:43:24 2007
@@ -1,32 +1,128 @@
 /* XPM */
 static char * rot13_xpm[] = {
-"24 24 5 1",
-" 	c None",
-".	c #A5A5A5A59595",
-"X	c #C7C7C6C6C6C6",
-"o	c #E1E1E0E0E0E0",
-"O	c #919187876969",
-"                        ",
-"                        ",
-"                        ",
-"             .          ",
-"           ..X.         ",
-"         ..XXX.         ",
-"       ..XXXXXo.        ",
-"    ...XXXXXXooo.       ",
-"    .o.XXXXXoooo.       ",
-"    .oo.XXXooOooo.      ",
-"    .oo..XXoOXOOoo.     ",
-"    .oo.XXoOXooOXoo.    ",
-"    .o.XoooOOXXOXooX.   ",
-"     .XXooOOXOOXoooo.   ",
-"     .XooOOOooooooo.    ",
-"      .oOOXOXooooo.     ",
-"      .oOOXoooooo.      ",
-"       .oOOXooo..       ",
-"       .oooooo.         ",
-"        .ooo..          ",
-"        .oo.            ",
-"         ..             ",
-"                        ",
-"                        "};
+"24 24 101 2",
+"  	g None",
+". 	g #000000",
+"+ 	g #212121",
+"@ 	g #9E9E9E",
+"# 	g #E6E6E6",
+"$ 	g #E7E7E7",
+"% 	g #C8C8C8",
+"& 	g #A0A0A0",
+"* 	g #131313",
+"= 	g #5F5F5F",
+"- 	g #EDEDED",
+"; 	g #D6D6D6",
+"> 	g #D5D5D5",
+", 	g #DDDDDD",
+"' 	g #D8D8D8",
+") 	g #A1A1A1",
+"! 	g #3C3C3C",
+"~ 	g #353535",
+"{ 	g #EFEFEF",
+"] 	g #CFCFCF",
+"^ 	g #4C4C4C",
+"/ 	g #141414",
+"( 	g #6A6A6A",
+"_ 	g #D0D0D0",
+": 	g #B2B2B2",
+"< 	g #454545",
+"[ 	g #E2E2E2",
+"} 	g #292929",
+"| 	g #0F0F0F",
+"1 	g #949494",
+"2 	g #E9E9E9",
+"3 	g #C3C3C3",
+"4 	g #1C1C1C",
+"5 	g #E1E1E1",
+"6 	g #272727",
+"7 	g #DEDEDE",
+"8 	g #B6B6B6",
+"9 	g #0C0C0C",
+"0 	g #262626",
+"a 	g #1F1F1F",
+"b 	g #616161",
+"c 	g #5B5B5B",
+"d 	g #232323",
+"e 	g #111111",
+"f 	g #181818",
+"g 	g #3D3D3D",
+"h 	g #636363",
+"i 	g #545454",
+"j 	g #2E2E2E",
+"k 	g #242424",
+"l 	g #070707",
+"m 	g #DCDCDC",
+"n 	g #D3D3D3",
+"o 	g #C5C5C5",
+"p 	g #C2C2C2",
+"q 	g #BFBFBF",
+"r 	g #B5B5B5",
+"s 	g #696969",
+"t 	g #ACACAC",
+"u 	g #999999",
+"v 	g #8F8F8F",
+"w 	g #868686",
+"x 	g #686868",
+"y 	g #B1B1B1",
+"z 	g #9A9A9A",
+"A 	g #909090",
+"B 	g #878787",
+"C 	g #DBDBDB",
+"D 	g #A6A6A6",
+"E 	g #979797",
+"F 	g #8A8A8A",
+"G 	g #8D8D8D",
+"H 	g #838383",
+"I 	g #666666",
+"J 	g #BBBBBB",
+"K 	g #9F9F9F",
+"L 	g #8B8B8B",
+"M 	g #828282",
+"N 	g #676767",
+"O 	g #A3A3A3",
+"P 	g #8E8E8E",
+"Q 	g #888888",
+"R 	g #8C8C8C",
+"S 	g #BABABA",
+"T 	g #818181",
+"U 	g #757575",
+"V 	g #DADADA",
+"W 	g #AFAFAF",
+"X 	g #848484",
+"Y 	g #7F7F7F",
+"Z 	g #7B7B7B",
+"` 	g #B8B8B8",
+" .	g #D9D9D9",
+"..	g #ABABAB",
+"+.	g #929292",
+"@.	g #939393",
+"#.	g #808080",
+"$.	g #919191",
+"%.	g #ADADAD",
+"&.	g #969696",
+"*.	g #4A4A4A",
+"                                                ",
+"                                                ",
+"                    . . . . .                   ",
+"                . + @ # $ % & *                 ",
+"              . = - # ; > , ' ) ! .             ",
+"              ~ { ] ^ . . / ( _ : <             ",
+"            . [ ' } .       | ( % 1 .           ",
+"            * 2 3 .           4 5 @ .           ",
+"            6 7 8 .           . $ 8 .           ",
+"        9 0 a b c d e 6 a f a g h i j k l       ",
+"        . 7 m ' ; n o p p p p q r r r s .       ",
+"        . 7 p 8 : t t t t t t t u v w x .       ",
+"        . m p 8 y t t t t t t t z A B s .       ",
+"        . C p r D E E E E E E A F G H I .       ",
+"        . , p 8 J t t t t t t t K L M N .       ",
+"        . m p y O E E E E E E P Q R H ( .       ",
+"        . m p r S t t t t t t t K L T U .       ",
+"        . V p W & E E E E E E F X B Y Z .       ",
+"        . C p y ` t t t t t t t K F B T .       ",
+"        .  .p W ..E E E E E E E +.G @.#..       ",
+"        . $.%.z &.A L F F G $.A A P X *..       ",
+"          . . . . . . . . . . . . . . .         ",
+"                                                ",
+"                                                "};
Index: gnus/etc/images/smilies/reverse-smile.xpm
diff -u gnus/etc/images/smilies/reverse-smile.xpm:1.1 gnus/etc/images/smilies/reverse-smile.xpm:removed
--- gnus/etc/images/smilies/reverse-smile.xpm:1.1	Sat Feb 19 06:08:44 2005
+++ gnus/etc/images/smilies/reverse-smile.xpm	Tue May  1 17:20:37 2007
@@ -1,20 +0,0 @@
-/* XPM */
-static char * reverse_smile_xpm[] = {
-"13 14 3 1",
-" 	c None",
-".	c #000000",
-"+	c #FFDD00",
-"   .......   ",
-"  ..+++++..  ",
-" .+++++++++. ",
-".+++.....+++.",
-".++.+++++.++.",
-".++.+++++.++.",
-".+++++++++++.",
-".+++++++++++.",
-".++..+++..++.",
-".++..+++..++.",
-".+++++++++++.",
-" .+++++++++. ",
-"  ..+++++..  ",
-"   .......   "};
Index: gnus/lisp/ChangeLog
diff -u gnus/lisp/ChangeLog:7.1237 gnus/lisp/ChangeLog:7.1539
--- gnus/lisp/ChangeLog:7.1237	Mon May  1 17:14:44 2006
+++ gnus/lisp/ChangeLog	Tue May  1 17:16:54 2007
@@ -1,8 +1,1768 @@
+2007-05-01 Lars Magne Ingebrigtsen <[email protected]>
+
+	* gnus.el: No Gnus v0.6 is released.
+
+2007-04-27  Didier Verna  <[email protected]>
+
+	* gnus-util.el (gnus-orify-regexp): Moved and renamed to ...
+	* gmm-utils.el (gmm-regexp-concat): here.
+	* message.el: Don't require 'gnus-util.
+	(message-dont-reply-to-names): Handle name change above.
+	* gnus-sum.el (gnus-ignored-from-addresses): Ditto.
+
+2007-04-26  Katsumi Yamaoka  <[email protected]>
+
+	* mm-util.el (mm-charset-synonym-alist): Don't make it a user option
+	since the initial value varies according to the system.
+
+2007-04-25  Katsumi Yamaoka  <[email protected]>
+
+	* mm-util.el (mm-charset-synonym-alist): Defcustom.
+
+2007-04-25  NAKAJI Hiroyuki  <[email protected]>  (tiny change)
+
+	* mm-util.el (mm-charset-synonym-alist): Map iso8859-1 to iso-8859-1.
+
+2007-04-24  Didier Verna  <[email protected]>
+
+	Improve the type of gnus-ignored-from-addresses.
+	* gnus-util.el (gnus-orify-regexp): New function.
+	* message.el (gnus-util): Require it.
+	* message.el (message-dont-reply-to-names): Use gnus-orify-regexp.
+	* gnus-sum.el (gnus-ignored-from-addresses): New function.
+	* gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Use it.
+
+2007-04-24  Didier Verna  <[email protected]>
+
+	* gnus-sum.el:
+	* gnus-utils.el: Fix some trailing whitespaces.
+
+2007-04-23  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-msg.el (gnus-summary-resend-message-edit): Add Gcc header.
+	(gnus-summary-resend-bounced-mail): Ditto; search whole body for parent
+	article's Message-ID; refer parent article in summary buffer.
+
+	* message.el (message-bounce): Call mime-to-mml.
+
+	* dgnushack.el (byte-optimize-form-code-walker): Fix the form which was
+	not helpful to Emacs 21.1 and 21.2 for detecting a bug that does not
+	optimize and/or forms properly.
+
+2007-04-22  Reiner Steib  <[email protected]>
+
+	* dgnushack.el (with-syntax-table): XEmacs bug has been fixed.  Add
+	URL.
+
+2007-04-20  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-msg.el (gnus-summary-supersede-article): Add Gcc header.
+
+2007-04-19  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (gnus-mime-strip-charset-parameters): New function.
+	(gnus-mime-view-part-as-charset): Use it; redisplay subpart currently
+	displayed of multipart/alternative part if it is invoked from summary
+	buffer.
+
+	* mm-view.el (mm-inline-text-html-render-with-w3m)
+	(mm-inline-text-html-render-with-w3m-standalone)
+	(mm-inline-render-with-function): Use mail-parse-charset by default.
+
+2007-04-17  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-uu.el (gnus-uu-digest-mail-forward): Pull articles processed
+	from gnus-newsgroup-processable.
+
+2007-04-16  Didier Verna  <[email protected]>
+
+	* gnus-msg.el (gnus-configure-posting-styles): Handle
+	message-signature-directory properly with :file syntax. Reported by
+	"Leo".
+
+2007-04-11  Didier Verna  <[email protected]>
+
+	New user option: message-signature-directory.
+	* gnus-msg.el (gnus-configure-posting-styles): Support it.
+	* message.el (message-insert-signature): Ditto.
+	* message.el (message-signature-file): Doc update.
+	* message.el (message-signature-directory): New.
+
+2007-04-10  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-msg.el (gnus-inews-yank-articles): Use
+	message-exchange-point-and-mark instead of exchange-point-and-mark.
+
+2007-04-09  Katsumi Yamaoka  <[email protected]>
+
+	* message.el (message-yank-original): Make sure cited text ends with
+	newline; don't exchange point and mark.
+
+2007-04-07  Chong Yidong  <[email protected]>
+
+	* tls.el (open-tls-stream): Properly handle case where there
+	is no associated buffer.
+
+2007-04-03  Thien-Thi Nguyen  <[email protected]>
+
+	* gnus-msg.el (gnus-inews-yank-articles): Fix bug: After
+	message-yank-original, make sure (< mark TEXT point).
+
+2007-03-31  Reiner Steib  <[email protected]>
+
+	* message.el (message-fill-column): New variable.
+	(message-mode): Use it.  Add comment on a possible new hook.
+
+	* nnmail.el (nnmail-spool-file): Mark as obsolete.
+	(nnmail-get-new-mail): Reformat.
+
+	* gnus-registry.el (gnus-registry-cache-save): Add FIXME comment.
+
+	* gmm-utils.el: Fix Commentary.
+	(gmm-tool-bar-from-list): Fix typo in doc string.
+
+2007-03-27  Thien-Thi Nguyen  <[email protected]>
+
+	* message.el (message-yank-original): Don't switch point and mark
+	unnecessarily to put point and mark as documented.
+
+2007-03-27  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* message.el (message-put-addresses-in-ecomplete): Only fetch headers
+	from the message heads.
+
+2007-03-25  Kevin Greiner  <[email protected]>
+
+	* gnus-art.el (gnus-article-set-window-start): Do nothing when the
+	article buffer does not have a window.  This may not be the best
+	solution but is certainly better than setting the start of the null,
+	that is the current, window.
+
+2007-03-24  Reiner Steib  <[email protected]>
+
+	* gnus-draft.el (gnus-draft-setup-hook): New hook.
+	(gnus-draft-setup): Run it.
+
+	* gnus-score.el (gnus-inhibit-slow-scoring): New variable, renamed from
+	gnus-score-fast-scoring.  Allow regexp.
+	(gnus-score-headers): Use it.
+
+	* gnus-util.el (gnus-emacs-version): Include "no MULE" in no-MULE
+	XEmacs.
+
+	* gnus-art.el (gnus-article-browse-html-article): Fix typo in doc
+	string.
+	(gnus-button-alist): Also catch `<f1> k ...'.
+	(gnus-treat-display-x-face): Fix doc string.
+
+2007-03-25  Andreas Seltenreich  <[email protected]>
+
+	* gnus-msg.el (gnus-setup-message, gnus-inews-add-send-actions): Move
+	evaluation of gnus-extended-version to ensure correct generation of the
+	User-Agent header when message-generate-headers-first is used.
+
+2007-03-24  Simon Josefsson  <[email protected]>
+
+	* hashcash.el (hashcash-generate-payment-async): Don't crash if
+	hashcash-path is nil.  Don't call callback with incorrect number of
+	parameters if val is 0.
+
+2007-03-20  Andreas Seltenreich  <[email protected]>
+
+	* message.el (message-required-news-headers):
+	* gnus-util.el (gnus-intern-safe): Fix typo in docstring.
+
+2007-03-18  Thien-Thi Nguyen  <[email protected]>
+
+	* tls.el (open-tls-stream): In handshake-waiting loop,
+	don't wait more if there is output available to process.
+
+2007-03-17  Thien-Thi Nguyen  <[email protected]>
+
+	* tls.el (tls-program): Doc fix.
+
+2007-03-15  Katsumi Yamaoka  <[email protected]>
+
+	* message.el (message-generate-new-buffers): Change the meaning of the
+	nil value; add `standard' to the choices; treat t as `unique'; improve
+	doc string.
+	(gnus-select-frame-set-input-focus): Autoload.
+	(message-buffer-name): Search for the existing message buffer if
+	message-generate-new-buffers is nil or `standard'; treat the value t of
+	message-generate-new-buffers as `unique'.
+	(message-pop-to-buffer): Raise the frame already displaying the message
+	buffer; clear the echo area after querying.
+	(message-setup): Pass the `continue' argument to compose-mail.
+	(message-mail): Prefer `switch-function' if it is given; search for the
+	existing message buffer if the `continue' argument is non-nil; pass
+	continue and switch-function arguments to compose-mail by way of
+	message-setup.
+	(message-mail-other-window): Adjust argument of message-setup.
+	(message-mail-other-frame): Ditto.
+
+2007-03-13  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-cite.el (font-lock-set-defaults): Autoload it for Emacs.
+	(gnus-message-citation-mode): Require font-lock for XEmacs; make sure
+	to turn font-lock on when turning gnus-message-citation-mode on.
+
+2007-03-06  Daiki Ueno  <[email protected]>
+
+	* mml-smime.el (mml-smime-use): New variable; default to use openssl.
+	(mml-smime-function-alist): New variable; add epg as the backend.
+	* mml-sec.el (mml-smime-sign): Don't require mml-smime, autoload
+	mml-smime- functions instead.
+	* mm-view.el: Require smime.
+
+2007-03-05  Didier Verna  <[email protected]>
+
+	* gnus-topic.el (gnus-topic-hierarchical-parameters): Perform merging
+	instead of just inheritance for posting styles.
+	* gnus.el (gnus-group-fast-parameter): Fix typo in comment.
+
+2007-02-24  Chris Moore  <[email protected]>
+
+	* pgg-pgp5.el (pgg-pgp5-encrypt-region):
+	* pgg-pgp.el (pgg-pgp-encrypt-region):
+	* pgg-gpg.el (pgg-gpg-encrypt-region):
+	Check pgg-encrypt-for-me if no other recipients.
+
+2007-02-24  John Paul Wallington  <[email protected]>
+
+	* tls.el (tls-certtool-program): Fix custom type.
+
+2007-02-28  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-cite.el (gnus-message-search-citation-line): Use point-at-bol
+	and point-at-eol instead of line-(beginning|end)-position.
+
+	* assistant.el (assistant-parse-buffer): Ditto.
+
+	* netrc.el (netrc-parse-services): Ditto.
+
+2007-02-28  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-find-usable-key): New function.
+	(mml2015-epg-sign): Use it.
+	(mml2015-epg-encrypt): Use it.
+
+2007-02-28  Katsumi Yamaoka  <[email protected]>
+
+	* message.el (message-make-in-reply-to): Quote name containing
+	non-ASCII characters.  It will make the RFC2047 encoder cause an error
+	if there are special characters.  Reported by NAKAJI Hiroyuki
+	<[email protected]>.
+
+2007-02-27  Didier Verna  <[email protected]>
+
+	Include the group parameters as well as the topic ones in the
+	inheritance filter process.
+	* gnus-topic.el (gnus-topic-hierarchical-parameters): New optional
+	argument GROUP-PARAMS-LIST.
+	* gnus-topic.el (gnus-group-topic-parameters): Use it.
+
+2007-02-27  Katsumi Yamaoka  <[email protected]>
+
+	* nntp.el (nntp-never-echoes-commands)
+	(nntp-open-connection-functions-never-echo-commands): New variables.
+	(nntp-send-command): Use them.
+
+2007-02-20  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-verify): Simplified.
+
+2007-02-19  Katsumi Yamaoka  <[email protected]>
+
+	* mml.el (mml-content-disposition-alist): New user option.
+	(mml-content-disposition): New function.
+	(mml-insert-mime-headers, mml-minibuffer-read-disposition): Use it.
+	(mml-attach-file, mml-dnd-attach-file): Pass file name to it.
+
+2007-02-19  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-verify): Convert LF to CRLF before signature
+	verification.
+
+2007-02-15  Andreas Seltenreich  <[email protected]>
+
+	* nnweb.el (nnweb-google-parse-1): Fix date parsing to also match on
+	articles posted in the last 24 hours.
+
+2007-02-14  Chong Yidong  <[email protected]>
+
+	* smiley.el (smiley-regexp-alist): Add "dead" smiley.
+
+2007-02-14  Micha,Ak(Bl Cadilhac  <[email protected]>
+
+	* nntp.el (nntp-send-command): Don't wait for echoes when
+	nntp-open-ssl-stream is used.
+
+2007-02-13  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-cite.el (gnus-test-font-lock-add-keywords)
+	(gnus-message-add-citation-keywords)
+	(gnus-message-remove-citation-keywords): Remove.
+	(gnus-message-citation-mode): Instead of modifying font-lock-keywords
+	directly, make the variables in font-lock-defaults buffer-local, add
+	gnus-message-citation-keywords to them and then update the value of
+	font-lock-keywords.
+
+2007-02-09  Katsumi Yamaoka  <[email protected]>
+
+	* message.el (message-cite-original-1): Don't call
+	gnus-article-highlight-citation.
+
+	* gnus-cite.el (gnus-cite-parse): Work with two or more MS-type
+	citations; fix line count.
+
+2007-02-08  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-cite.el (gnus-test-font-lock-add-keywords): New function.
+	(gnus-message-add-citation-keywords)
+	(gnus-message-remove-citation-keywords): Use it; fix the emulating
+	versions of font-lock-add-keywords and font-lock-remove-keywords to
+	work with XEmacs correctly.
+
+2007-02-07  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-cite.el (gnus-cite-face-list): Set the values of
+	gnus-message-max-citation-depth and gnus-message-citation-keywords.
+	(gnus-message-max-citation-depth): Use defvar rather than defconst.
+	(gnus-message-cite-prefix-regexp): New variable.
+	(gnus-message-search-citation-line): Use it; protect against long
+	citation prefix; fill match data with nil rather than 0 for XEmacs; set
+	the 0th match data for Emacs.
+	(gnus-message-citation-keywords): Set LAXMATCH flag in every HIGHLIGHT.
+	(gnus-message-add-citation-keywords): Append keywords rather than
+	prepending; emulate font-lock-add-keywords if it is not available.
+	(gnus-message-remove-citation-keywords): Emulate
+	font-lock-remove-keywords if it is not available.
+
+	* gnus-msg.el (gnus-message-highlight-citation): Default to t.
+
+	* message.el (message-cite-prefix-regexp): Set the value of
+	gnus-message-cite-prefix-regexp.
+
+2007-02-01  Andreas Seltenreich  <[email protected]>
+
+	* nnweb.el (nnweb-google-parse-1): Update parser.
+
+2007-01-29  Juanma Barranquero  <[email protected]>
+
+	* gnus-art.el (gnus-button-prefer-mid-or-mail): Fix typo in docstring.
+
+2007-01-28  Andreas Seltenreich  <[email protected]>
+
+	* nnslashdot.el (nnslashdot-request-article): Update end-of-article
+	regexp.
+
+2007-01-24  Katsumi Yamaoka  <[email protected]>
+
+	* uudecode.el (uudecode-string-to-multibyte): New function emulating
+	string-to-multibyte.
+	(uudecode-decode-region-internal): Use it.
+
+	* lpath.el: Fbind string-as-multibyte for XEmacs.
+
+2007-01-23  Reiner Steib  <[email protected]>
+
+	* gnus-score.el (gnus-home-score-file, gnus-home-adapt-file): Fix
+	custom choice.
+
+	* gnus-art.el (gnus-signature-limit): Fix custom choice.
+
+2007-01-22  Daiki Ueno  <[email protected]>
+
+	* mm-util.el (mm-inhibit-file-name-handlers): Add epa-file-handler.
+
+	* mm-decode.el (mm-save-part-to-file): Use `mm-write-region' instead of
+	`write-region' to respect `mm-inhibit-file-name-handlers'.
+
+2007-01-19  Reiner Steib  <[email protected]>
+
+	* nnsoup.el (nnsoup-directory, nnsoup-packer, nnsoup-packet-directory):
+	Use gnus-home-directory instead of "~/" or "$HOME".
+
+2007-01-17  Teodor Zlatanov  <[email protected]>
+
+	* encrypt.el (encrypt-insert-file-contents): Add better prompt
+	to mention filename.
+	Add comments at beginning regarding usage.
+	(encrypt-write-file-contents): Change interactive so a string is
+	acceptable.  If the file has no associated model, show an error instead
+	of a nonsense prompt.
+
+2007-01-16  TSUCHIYA Masatoshi  <[email protected]>
+
+	* spam.el (spam-bsfilter-ham-switch): Fix typo.
+	Thanks to Yoshihiko Yamada for kind notification of this typo.
+
+2007-01-12  Kenichi Handa  <[email protected]>
+
+	* uudecode.el (uudecode-decode-region-internal): Make it work in a
+	multibyte buffer.
+
+2007-01-14  Reiner Steib  <[email protected]>
+
+	* gnus-score.el (gnus-score-fast-scoring): New variable.
+	(gnus-score-headers): Use it.
+
+	* gnus-sum.el (gnus-auto-select-first): Improve doc string.
+
+	* message.el (message-cite-original-1): Call
+	gnus-article-highlight-citation if requested.
+
+	* gnus-cite.el (gnus-article-highlight-citation): Add SAME-BUFFER arg.
+
+	* gnus-art.el (gnus-article-browse-html-article): Add warning about web
+	bugs to doc string.
+	(gnus-button-alist): Add mid\\|message-id.
+	(gnus-button-fetch-group): Extend for use in
+	`browse-url-browser-function'.
+	(gnus-button-url-regexp): Try to catch paired parentheses like in
+	Wikipedia URLs.
+
+	* gnus-sum.el (gnus-summary-reparent-children): Another doc string fix.
+	Suggested by Simon Krahnke <[email protected]>.
+
+2007-01-13  Romain Francoise  <[email protected]>
+
+	* nnml.el (nnml-use-compressed-files): Fix typo in docstring.
+	Update copyright.
+
+2007-01-13  Patric Mueller  <[email protected]>  (tiny change)
+
+	* gnus-sum.el (gnus-summary-reparent-children): Fix typo in doc string.
+
+2007-01-09  Teodor Zlatanov  <[email protected]>
+
+	* gnus-registry.el (gnus-registry-unfollowed-groups)
+	(gnus-registry-split-fancy-with-parent): Fix documentation.
+
+2007-01-08  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* spam-report.el (spam-report-gmane-internal): Speed up spam reporting
+	from nnweb groups.
+
+2006-12-31  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* spam-report.el (spam-report-gmane-internal): Add necessary "/" to
+	Xref urls.  Erase buffer before requesting head.
+
+2007-01-07  Reiner Steib  <[email protected]>
+
+	* gnus-soup.el (gnus-soup): New custom group.  Make user variables
+	customizable.
+
+2007-01-05  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-sign): Ask user whether to skip or abort if
+	no signing key is found.
+	(mml2015-epg-encrypt): Ask user whether to skip or abort if
+	no encrypting and/or signing key is found.
+
+2007-01-03  Reiner Steib  <[email protected]>
+
+	* spam-report.el (spam-report-gmane-spam): Remove redundant message.
+
+2007-01-01  Andreas Seltenreich  <[email protected]>
+
+	* nnweb.el (nnweb-gmane-create-mapping): Put back code to merge the
+	headers read from disk with the ones newly found in the current search.
+	This should no longer cause problems, because the article numbers in
+	Gmane's `nov.php' output are ignored since the previous change.
+
+2007-01-02  Andreas Seltenreich  <[email protected]>
+
+	* gmm-utils.el (gmm-tool-bar-style): Fix custom type.
+
+2007-01-01  Katsumi Yamaoka  <[email protected]>
+
+	* lpath.el: Fbind clear-string and cp-supported-codepages; don't fbind
+	replace-regexp-in-string; bind url-version; fbind display-images-p and
+	timer-set-function for XEmacs; bind timer-list for XEmacs; fbind
+	find-face and set-itimer-function for Emacs; bind itimer-list for
+	Emacs.
+
+	* mm-decode.el (mm-display-external): Use itimer function for XEmacs.
+
+2007-01-01  Romain Francoise  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-make-menu-bar): Fix typo.
+
+2006-12-31  Steve Youngs  <[email protected]>
+
+	* gnus-cite.el: Load easy-mmode at compile time for (S)XEmacs to get
+	`define-minor-mode' macro definition expanded properly.
+	(gnus-message-citation-mode): This is now OK for (S)XEmacs so don't
+	exclude it there.
+
+	* gnus-msg.el (gnus-message-highlight-citation): Revert Reiner's patch
+	of 2006-12-30.  The default is nil on (S)XEmacs already because of the
+	`fboundp' test.
+	(gnus-message-citation-mode): Revert Reiner's patch of 2006-12-30.
+	This is OK to autoload in (S)XEmacs now.
+
+2006-12-30  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-limit-to-singletons): New command and
+	keystroke.
+	(gnus-summary-limit-to-singletons): Fix typo.
+
+	* spam-report.el (spam-report-gmane-internal): Fall back on Xref if all
+	else fails.
+
+2006-12-30  Andreas Seltenreich  <[email protected]>
+
+	* gnus-cite.el (turn-off-gnus-message-citation-mode): Fix typo in
+	docstring.
+
+	* gnus-sum.el (gnus-summary-insert-ticked-articles): New command.
+	(gnus-summary-make-menu-bar, gnus-summary-buffer-map): Bind it.
+	(gnus-summary-insert-dormant-articles): Fix typo in message.
+
+2006-12-30  Reiner Steib  <[email protected]>
+
+	* gnus-msg.el (gnus-message-highlight-citation): Ensure default to be
+	nil for XEmacs.
+	(gnus-message-citation-mode): Don't autoload in XEmacs.
+
+	* gnus-cite.el (gnus-message-citation-mode): Don't define in XEmacs.
+
+2006-12-29  Jouni K. Sepp,Ad(Bnen  <[email protected]>
+
+	* nnimap.el (nnimap-expunge-search-string): Mention
+	nnimap-search-uids-not-since-is-evil in docstring.
+
+2006-12-28  Reiner Steib  <[email protected]>
+
+	* spam.el: Revert to make-obsolete-variable because
+	define-obsolete-variable-alias is not supported in Emacs 21.
+
+	* spam.el (spam-ifile-path, spam-ifile-database-path)
+	(spam-bogofilter-path): Use define-obsolete-variable-alias instead of
+	make-obsolete-variable.
+	(spam-bsfilter-path, spam-bsfilter-program)
+	(spam-spamassassin-path, spam-spamassassin-program)
+	(spam-sa-learn-path, spam-sa-learn-program): Rename variables.  Don't
+	use "path" inappropriately.
+	(spam-check-spamassassin, spam-spamassassin-register-with-sa-learn)
+	(spam-check-bsfilter, spam-bsfilter-register-with-bsfilter): Use new
+	variable names.
+
+2006-12-28  Daiki Ueno  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-next-article): Make sure we are in the
+	summary buffer.
+
+	* password.el (password-cache-remove): Use clear-string to burn
+	password, if available.
+
+2006-12-26  Reiner Steib  <[email protected]>
+
+	* gnus-msg.el (gnus-message-citation-mode): Fix autoload.
+
+	* gnus-cite.el (gnus-message-highlight-citation): Move to gnus-msg.el.
+
+	* gnus-msg.el (gnus-setup-message): Add gnus-message-citation-mode.
+	(gnus-message-highlight-citation): Move defcustom here from
+	gnus-cite.el.
+	(gnus-message-citation-mode): Autoload.
+
+	* gnus-cite.el: Adjust Oliver's code to Gnus namespace.  Add some
+	checks to make it compile with XEmacs.
+	(gnus-message-citation-mode): New minor mode.
+	(gnus-message-max-citation-depth, gnus-message-citation-keywords)
+	(gnus-message-highlight-citation): New variables.
+	(gnus-message-search-citation-line)
+	(gnus-message-add-citation-keywords)
+	(gnus-message-remove-citation-keywords)
+	(turn-on-gnus-message-citation-mode)
+	(turn-off-gnus-message-citation-mode): New functions.
+
+2006-12-26  Oliver Scholz  <[email protected]>
+
+	* gnus-cite.el: Enable highlighting of different citation levels in
+	message-mode.
+
+2006-12-26  Reiner Steib  <[email protected]>
+
+	* message.el (message-make-fqdn): Fix comment.
+	(message-bogus-system-names): Add ".local".
+
+	* spam.el (spam-ifile-path, spam-ifile-program)
+	(spam-ifile-database-path, spam-ifile-database)
+	(spam-bogofilter-path, spam-bogofilter-program): Rename variables.
+	Don't use "path" inappropriately.
+	(spam-spamoracle-database, spam-get-ifile-database-parameter): Fix doc
+	strings.
+	(spam-check-ifile, spam-ifile-register-with-ifile)
+	(spam-check-bogofilter, spam-bogofilter-register-with-bogofilter): Use
+	new variable names.
+
+	* gnus-art.el (gnus-treat-display-x-face, gnus-treat-display-face)
+	(gnus-treat-display-smileys): Simplify using
+	gnus-image-type-available-p.
+
+	* gnus-ems.el (gnus-image-type-available-p): Use display-images-p if
+	available.
+
+	* gnus-xmas.el (gnus-xmas-image-type-available-p): Use
+	`display-images-p' if available.
+
+2006-12-22  Katsumi Yamaoka  <[email protected]>
+
+	* nnrss.el (nnrss-fetch): Replace buffer's contents with the decoded
+	one after turning on the buffer's multibyteness instead of decoding
+	them directly in the unibyte buffer that causes unexpected conversion
+	in Emacs 23 (unicode).
+
+2006-12-21  Andreas Seltenreich  <[email protected]>
+
+	* message.el (message-generate-hashcash): Fix custom type.
+
+2006-12-20  Reiner Steib  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-recenter): Remove debug messages.
+
+2006-12-20  Reiner Steib  <[email protected]>
+
+	* gnus-group.el (gnus-group-tool-bar-gnome): Exchange connect and
+	disconnect icons.  Add help text.
+
+2006-12-20  Teodor Zlatanov  <[email protected]>
+
+	* spam.el (spam-extra-header-to-number): CRM114 spam score is
+	negated to be consistent with the others we handle.
+
+2006-12-19  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* gnus-art.el (gnus-article-setup-buffer): Actually set the local
+	version of gnus-summary-buffer to something, so that we can use two
+	article buffers at the same time.
+
+2006-12-18  Teodor Zlatanov  <[email protected]>
+
+	* spam.el (spam-necessary-extra-headers): Make spam-use-regex-headers
+	trigger all the extra headers.
+	(spam-extra-header-to-number): Don't require spam-use-crm114 for header
+	sorting.
+
+2006-12-14  Andreas Seltenreich  <[email protected]>
+
+	* nnweb.el (nnweb-gmane-create-mapping): Keep the mapping stable for
+	solid groups.
+
+2006-12-17  Chong Yidong  <[email protected]>
+
+	* pgg-gpg.el (pgg-gpg-use-agent): Default to t.
+
+2006-12-13  Reiner Steib  <[email protected]>
+
+	* legacy-gnus-agent.el: Add Copyright notice.
+
+2006-12-12  Chong Yidong  <[email protected]>
+
+	* gnus-sum.el (gnus-make-thread-indent-array): Fix last change.
+
+2006-12-10  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* nnweb.el (nnweb-gmane-search): Placeholder TOPDOC setting.
+
+	* gnus-sum.el (gnus-summary-recenter): Force setting the window start
+	to make it work reliably in CVS Emacs.
+	(gnus-summary-limit-strange-charsets-predicate)
+	(gnus-summary-limit-to-predicate): New functions.
+
+2006-12-08  Chong Yidong  <[email protected]>
+
+	* gnus-sum.el (gnus-make-thread-indent-array): New optional arg
+	specifying array size.
+	(gnus-summary-insert-line, gnus-summary-prepare-threads): Regrow indent
+	array if it is too small.
+	(gnus-sort-threads-recursive): Renamed from gnus-sort-thread-1.
+	(gnus-sort-threads-loop): New function.
+
+2006-12-06  Chris Moore  <[email protected]>
+
+	* gnus-sum.el (gnus-sort-threads, gnus-summary-limit-children):
+	Use `max' to avoid the value of `max-lisp-eval-depth' decreasing.
+
+2006-12-04  Jouni K. Sepp,Ad(Bnen  <[email protected]>
+
+	* mm-url.el (mm-url-predefined-programs): Call curl with correct
+	options.
+
+2006-12-01  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* spam-report.el (spam-report-url-ping-plain): Wait for output to avoid
+	DOS-ing the recipient.
+
+	* nnweb.el (nnweb-gmane-create-mapping): Use the article number from
+	the headers when creating the mapping to avoid mismappings.
+	(nnweb-gmane-create-mapping): Always nix out old mapping.
+
+2006-11-30  Katsumi Yamaoka  <[email protected]>
+
+	* message.el (message-signed-or-encrypted-p): Bind mm-decrypt-option
+	and mm-verify-option to never.
+
+2006-11-30  Katsumi Yamaoka  <[email protected]>
+
+	* message.el (message-signed-or-encrypted-p): New function.
+	(message-forward-make-body): Use it.
+
+	* mml2015.el (mml2015-pgg-clear-verify, mml2015-epg-clear-verify):
+	Replace encode-coding-string with mm-encode-coding-string.
+
+2006-11-29  Katsumi Yamaoka  <[email protected]>
+
+	* nneething.el (nneething-decode-file-name): Replace
+	decode-coding-string with mm-decode-coding-string.
+
+	* gnus-int.el (gnus-open-server): Say failed server's name.
+
+2006-11-24  Stefan Monnier  <[email protected]>
+
+	* pgg-pgp.el (pgg-pgp-process-region): Change `args' from a list of
+	strings to a single string.  Quote `errors-file-name'.
+	(pgg-pgp-encrypt-region, pgg-pgp-decrypt-region, pgg-pgp-sign-region)
+	(pgg-pgp-verify-region, pgg-pgp-insert-key, pgg-pgp-snarf-keys-region):
+	Adjust calls.  Use `shell-quote-argument'.
+
+2006-11-24  Juanma Barranquero  <[email protected]>
+
+	* gnus-agent.el (gnus-agent-expire-unagentized-dirs)
+	(gnus-agent-regenerate-group): Fix space/tab mixup in messages.
+
+	* gnus-art.el (gnus-article-x-face-command, gnus-numeric-save-name):
+	* gnus-group.el (gnus-group-sort-function, gnus-group-line-format)
+	(gnus-group-mode, gnus-group-read-group, gnus-group-delete-group)
+	(gnus-group-make-directory-group, gnus-group-transpose-groups):
+	* gnus-start.el (gnus-options-subscribe, gnus-options-not-subscribe)
+	(gnus-subscribe-newsgroup, gnus-1):
+	* gnus-sum.el (gnus-summary-make-false-root, gnus-make-threads):
+	* gnus.el (gnus-nntp-server, gnus-use-cross-reference)
+	(gnus-valid-select-methods, total-expire, gnus-summary-line-format)
+	(gnus-group-read-only-p): Fix space/tab mixup in docstrings.
+
+2006-11-24  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-limit-to-headers): New command and
+	keystroke.
+	(gnus-summary-limit-to-bodies): Implement headersp.
+
+2006-11-23  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* dns.el (query-dns): Protect against "Process dns deleted" strings.
+
+2006-11-21  Katsumi Yamaoka  <[email protected]>
+
+	* mm-util.el (mm-string-to-multibyte): Alias to identity in XEmacs.
+
+2006-11-21  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* message.el (message-generate-hashcash): Expand range of values to
+	include `opportunistic'.
+	(message-send-mail): Use it.
+
+2006-11-18  Andreas Seltenreich  <[email protected]>
+
+	* mm-uu.el (mm-uu-pgp-signed-extract-1): Make last fix more thorough
+	and comment it.
+
+	* nnslashdot.el (nnslashdot-retrieve-headers-1): Update regexp.
+
+2006-11-15  Reiner Steib  <[email protected]>
+
+	* gnus-util.el (gnus-extract-address-components): Improve comment.
+
+2006-11-14  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-util.el (gnus-extract-address-components): Work with address in
+	which the name portion contains @.
+
+	* lpath.el: Fbind custom-autoload.
+
+2006-11-14  Reiner Steib  <[email protected]>
+
+	* gnus.el (gnus-start): Move custom group up.
+	(gnus-select-method): Don't autoload, but make it available for
+	`customize-variable'.
+	(gnus-getenv-nntpserver): Don't autoload.
+
+2006-11-14  Teodor Zlatanov  <[email protected]>
+
+	* spam.el: Revert to 7.82 (removed changes since 2006-10-16).
+
+2006-11-14  Reiner Steib  <[email protected]>
+
+	* message.el (message-sendmail-extra-arguments): New variable.
+	(message-send-mail-with-sendmail): Use it.
+
+2006-11-14  Katsumi Yamaoka  <[email protected]>
+
+	* mml.el (mml-generate-mime-1): Use mm-string-as-unibyte instead of
+	mm-with-unibyte-current-buffer to make string unibyte.
+
+	* mm-decode.el (mm-insert-part): Use mm-string-to-multibyte instead of
+	mm-string-as-multibyte.
+
+2006-11-14  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-sign): Prefix "pgp-" to a micalg value.
+	Reported by Werner Koch <[email protected]>.
+
+2006-11-14  Daiki Ueno  <ueno@p360>
+
+	* mml2015.el: Autoload epa-select-keys when compiling.
+
+2006-11-13  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-sign): Save the signing keys in
+	message-options.
+	(mml2015-epg-encrypt): Save the recipient keys in message-options.
+
+2006-11-13  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-encrypt): Removed backward compatibility for
+	EasyPG (< 0.0.6).
+	(mml2015-always-trust): New user option.
+	(mml2015-epg-passphrase-callback): Display key ID on the passphrase
+	prompt.
+
+2006-11-10  Katsumi Yamaoka  <[email protected]>
+
+	* nntp.el (nntp-authinfo-force): New variable.
+	(nntp-send-authinfo): Use it.
+
+2006-11-09  Reiner Steib  <[email protected]>
+
+	* message.el (message-strip-subject-encoded-words): Allow _not_ to
+	decode encoded words.  Improve prompt.  Add comment about forwarding.
+	(message-replacement-char): Move up.
+
+2006-11-08  Wolfgang Jenkner  <[email protected]>  (tiny change)
+
+	* gnus-sum.el (gnus-summary-catchup): Use gnus-sorted-intersection
+	instead of gnus-intersection because arguments of gnus-sorted-nunion
+	must be sorted.  This avoids corruption of gnus-newsgroup-unreads.
+
+2006-11-07  Reiner Steib  <[email protected]>
+
+	* message.el (message-strip-subject-encoded-words): Reformat prompt.
+	(message-simplify-subject-functions): Enable
+	message-strip-subject-encoded-words by default.
+
+2006-11-06  Reiner Steib  <[email protected]>
+
+	* message.el (message-strip-subject-encoded-words): New function
+	(message-simplify-subject-functions): New variable.
+	(message-simplify-subject): Use it.  Fix typo in doc string.
+	Support message-strip-subject-encoded-words.
+
+2006-11-03  Juanma Barranquero  <[email protected]>
+
+	* gnus-diary.el (gnus-diary-delay-format-function):
+	* nndiary.el (nndiary-reminders):
+	* nnsoup.el (nnsoup-always-save): Use "non-nil" in docstrings.
+
+2006-11-01  Reiner Steib  <[email protected]>
+
+	* gnus-art.el (article-hide-boring-headers): Fetch date from
+	gnus-original-article-buffer to avoid problems with localized date
+	strings.
+
+2006-10-30  Katsumi Yamaoka  <[email protected]>
+
+	* html2text.el (html2text-format-tags): Avoid infloop on open tags.
+
+2006-10-29  Reiner Steib  <[email protected]>
+
+	* mm-util.el (mm-codepage-iso-8859-list, mm-codepage-ibm-list):
+	New variables.
+	(mm-setup-codepage-iso-8859, mm-setup-codepage-ibm): New functions.
+	(mm-charset-synonym-alist): Move some entries to
+	mm-codepage-iso-8859-list.
+	(mm-charset-synonym-alist, mm-charset-override-alist): Add
+	iso-8859-8/windows-1255 and iso-8859-9/windows-1254.
+
+2006-10-29  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-sum.el (gnus-set-mode-line): Quote % in group name.
+
+2006-10-28  Reiner Steib  <[email protected]>
+
+	* gnus-agent.el (gnus-agent-make-mode-line-string): Make it compatible
+	with Emacs 21 and XEmacs.
+
+2006-10-27  Teodor Zlatanov  <[email protected]>
+
+	* spam.el (spam-parse-address): New function for better parsing,
+	catching errors, etc.
+	(spam-check-BBDB, spam-enter-ham-BBDB, spam-parse-list): Use it.
+
+2006-10-26  Reiner Steib  <[email protected]>
+
+	* mm-view.el: Add interactive arg to html2text autoload.
+
+2006-10-25  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-move-article): Use no-encode for `B B'.
+
+2006-10-24  Reiner Steib  <[email protected]>
+
+	* mm-util.el (mm-codepage-iso-8859-list, mm-codepage-ibm-list): New
+	variables.
+	(mm-setup-codepage-iso-8859, mm-setup-codepage-ibm): New functions.
+	(mm-charset-synonym-alist): Move some entries to
+	mm-codepage-iso-8859-list.
+
+	* gnus.el (gnus-getenv-nntpserver, gnus-select-method): Autoload.
+
+2006-10-23  Reiner Steib  <[email protected]>
+
+	* message.el (message-citation-line-format)
+	(message-insert-formated-citation-line): Fix implementation of %E, %N
+	and %n according to the doc string.
+
+2006-10-20  Teodor Zlatanov  <[email protected]>
+
+	* spam.el (spam-check-BBDB, spam-enter-ham-BBDB, spam-parse-list): Use
+	car-safe to avoid bad parses.
+
+2006-10-20  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-group.el (gnus-group-make-doc-group): Work for non-ASCII group
+	names.
+
+	* gnus-sum.el (gnus-select-newsgroup): Decode group name.
+
+2006-10-19  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-draft.el (gnus-draft-edit-message): Make sure to remove Date
+	header.
+
+	* message.el (message-draft-headers): Add Date.
+	(message-headers-to-generate): Fix typo in docstring.
+
+	* nndraft.el (nndraft-required-headers): New variable.
+	(nndraft-generate-headers): Use it.
+
+	* gnus-registry.el (gnus-registry-wash-for-keywords): Bind `word'.
+
+2006-10-16  Teodor Zlatanov  <[email protected]>
+
+	* gnus-registry.el (gnus-registry-wash-for-keywords)
+	(gnus-registry-find-keywords): New functions to allow easy searching of
+	articles that are in the registry.
+
+2006-10-16  Teodor Zlatanov  <[email protected]>
+
+	* spam.el (spam-check-BBDB, spam-enter-ham-BBDB, spam-parse-list): Use
+	ietf-drums-parse-address instead of gnus-extract-address-components.
+	Reported by Damien Elmes <[email protected]>.
+
+2006-10-19  Reiner Steib  <[email protected]>
+
+	* gnus.el (gnus-mime): Remove unused custom group.
+
+2006-10-13  Andreas Seltenreich  <[email protected]>
+
+	* mm-uu.el (mm-uu-pgp-signed-extract-1): Use RFC 2440 definition of
+	"blank line" when searching for end of armor headers.
+
+2006-10-11  Katsumi Yamaoka  <[email protected]>
+
+	* gmm-utils.el (gmm-write-region): Fix variable name.
+
+2006-10-10  Reiner Steib  <[email protected]>
+
+	* gmm-utils.el (gmm-write-region): New function based on compatibility
+	code from `mm-make-temp-file'.
+
+	* mm-util.el (mm-make-temp-file): Use `gmm-write-region'.
+
+	* nnmaildir.el (nnmaildir--update-nov)
+	(nnmaildir-request-replace-article, nnmaildir-request-accept-article):
+	Use `gmm-write-region'.
+
+2006-10-04  Reiner Steib  <[email protected]>
+
+	* mm-util.el (mm-charset-synonym-alist, mm-charset-override-alist): Add
+	iso-8859-8/windows-1255 and iso-8859-9/windows-1254.
+
+	* nnheader.el (nnheader-find-file-noselect): Inhibit version-control.
+
+	* message.el (message-replacement-char): New variable.
+	(message-fix-before-sending): Use it.
+	(message-simplify-subject): New function to remove duplicate code.
+	(message-reply, message-followup): Use it.
+
+	* gnus-sum.el (gnus-summary-make-menu-bar): Clarify
+	gnus-summary-limit-to-articles.
+
+2006-10-03  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-util.el (gnus-with-local-quit): New macro.
+
+	* gnus-demon.el (gnus-demon): Replace with-local-quit with it.
+
+2006-10-02  Teodor Zlatanov  <[email protected]>
+
+	* gnus-util.el (gnus-string-remove-all-properties): Another fix to
+	ignore non-string data.
+
+2006-09-29  Teodor Zlatanov  <[email protected]>
+
+	* gnus-util.el (gnus-string-remove-all-properties): Fix to ignore
+	non-string data (needs to be done in the registry too).
+
+2006-09-28  Teodor Zlatanov  <[email protected]>
+
+	* gnus-registry.el (gnus-registry-save, gnus-registry-cache-save)
+	(gnus-registry-remove-alist-text-properties, gnus-registry-action)
+	(gnus-registry-split-fancy-with-parent)
+	(gnus-registry-fetch-simplified-message-subject-fast)
+	(gnus-registry-fetch-sender-fast, gnus-registry-store-extra-entry):
+	Remove text properties on ingress into the registry and when it's saved.
+	(gnus-registry-clean-empty-function): Fix bug with cleaning the
+	registry from entries with no groups.
+
+2006-09-28  Teodor Zlatanov  <[email protected]>
+
+	* gnus-util.el (gnus-string-remove-all-properties): Add utility
+	function to remove string properties.
+
+2006-09-28  Reiner Steib  <[email protected]>
+
+	* gmm-utils.el (gmm): Adjust custom version.
+
+	* mm-util.el (mm-charset-override-alist, mm-charset-eval-alist): Adjust
+	custom version.
+
+	* gnus-draft.el (gnus-draft-mode): Don't call `mml-mode'.
+
+2006-09-27  Reiner Steib  <[email protected]>
+
+	* gnus-art.el (gnus-insert-prev-page-button)
+	(gnus-insert-next-page-button): Simplify.  Reformat.
+
+2006-09-27  Maxime Edouard Robert Froumentin  <[email protected]>
+
+	* gnus-art.el (gnus-insert-prev-page-button)
+	(gnus-insert-next-page-button): Apply gnus-article-button-face.
+
+2006-09-25  Chong Yidong  <[email protected]>
+
+	* gnus-demon.el (gnus-demon): Use with-local-quit to avoid hangs.
+
+2006-09-20  Maxime Edouard Robert Froumentin  <[email protected]>
+
+	(gnus-insert-mime-button, gnus-insert-mime-security-button): Apply
+	gnus-article-button-face to MIME and security buttons.
+
+2006-09-20  Reiner Steib  <[email protected]>
+
+	* gnus-art.el (gnus-button-url-regexp): Try to make the value more
+	readable.
+
+2006-09-20  Katsumi Yamaoka  <[email protected]>
+
+	* dgnushack.el: Autoload browse-url-of-file for XEmacs.
+
+2006-09-20  Steve Youngs  <[email protected]>
+
+	* gnus-art.el (gnus-article-browse-html-parts): They're files, so use
+	`browse-url-of-file' instead of `browse-url'.
+
+2006-09-19  Andreas Seltenreich  <[email protected]>
+
+	* nnslashdot.el (nnslashdot-request-article): Update end-of-article
+	regexp.  Articles containing quotation were cut prematurely.
+
+2006-09-16  Katsumi Yamaoka  <[email protected]>
+
+	* message.el (message-cite-original-1): Use nobody by default for the
+	value of From header.
+	(message-reply): Ditto.
+
+2006-09-11  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-clear-decrypt): Don't append verify results
+	to the gnus-info.  This fixes a bug of inline-PGP message verification.
+	Reported by Michael Piotrowski <[email protected]>.
+
+2006-09-09  Reiner Steib  <[email protected]>
+
+	* pop3.el (pop3-leave-mail-on-server): Mention problem of duplicate
+	mails in the doc string.  Add some URLs in comment.
+	(pop3-movemail): Warn about pop3-leave-mail-on-server.
+
+2006-09-07  Katsumi Yamaoka  <[email protected]>
+
+	* rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings): Fix
+	backslashes handling and the way to find boundaries of quoted strings.
+
+2006-09-07  Daiki Ueno  <[email protected]>
+
+	* mml1991.el (mml1991-epg-encrypt): Simply throw an error if
+	mml1991-encrypt-to-self is set and mml1991-signers is not set.
+	* mml2015.el (mml2015-epg-encrypt): Simply throw an error if
+	mml2015-encrypt-to-self is set and mml2015-signers is not set.
+
+2006-09-06  Reiner Steib  <[email protected]>
+
+	* gnus-art.el (gnus-button-marker-list): Move up.  Convert comment into
+	doc string.
+	(gnus-button-regexp, gnus-button-last): Remove unused variables.
+
+2006-09-06  Katsumi Yamaoka  <[email protected]>
+
+	* lpath.el: Fbind epg-check-configuration.
+
+2006-09-06  Simon Josefsson  <[email protected]>
+
+	* mml2015.el (mml2015-use): Doc fix, mention epg.
+
+2006-09-06  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-use): Default to epg, if available.
+
+2006-09-06  Daiki Ueno  <[email protected]>
+
+	* mml1991.el (mml1991-epg-sign): Don't lookup a private key by
+	message-sender.
+	(mml1991-epg-encrypt): Ditto.
+	* mml2015.el (mml2015-epg-sign): Don't lookup a private key by
+	message-sender.
+	(mml2015-epg-encrypt): Ditto.
+
+2006-09-04  Chong Yidong  <[email protected]>
+
+	* message.el (message-send-mail-with-sendmail): Look for sendmail in
+	several common directories.
+
+2006-09-05  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-encrypt): Expand group configuration.
+	* mml1991.el (mml1991-epg-encrypt): Expand group configuration.
+
+2006-09-04  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (article-decode-encoded-words): Make it fast.
+
+2006-09-04  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (article-decode-encoded-words): Don't infloop in XEmacs.
+
+	* rfc2047.el (rfc2047-strip-backslashes-in-quoted-strings): Decode `\\'
+	in quoted string into `\'.
+
+2006-09-01  Katsumi Yamaoka  <[email protected]>
+
+	* rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings):
+	Use standard-syntax-table.
+
+2006-09-01  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (gnus-decode-address-function): New variable.
+	(article-decode-encoded-words): Use it to decode headers which are
+	assumed to contain addresses.
+	(gnus-mime-delete-part): Remove useless `or'.
+
+	* gnus-sum.el (gnus-decode-encoded-address-function): New variable.
+	(gnus-summary-from-or-to-or-newsgroups): Use it to decode To header.
+	(gnus-nov-parse-line): Use it to decode From header.
+	(gnus-get-newsgroup-headers): Ditto.
+	(gnus-summary-enter-digest-group): Use it to decode `to-address'.
+
+	* mail-parse.el (mail-decode-encoded-address-region): New alias.
+	(mail-decode-encoded-address-string): New alias.
+
+	* rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings):
+	New function.
+	(rfc2047-encode-message-header, rfc2047-encode-region): Use it.
+	(rfc2047-strip-backslashes-in-quoted-strings): New fnction.
+	(rfc2047-decode-region): Use it; add optional argument `address-mime'.
+	(rfc2047-decode-string): Ditto.
+	(rfc2047-decode-address-region): New function.
+	(rfc2047-decode-address-string): New function.
+
+2006-08-31  Reiner Steib  <[email protected]>
+
+	* message.el (message-caesar-buffer-body): Allow rotating headers.
+
+	* gnus-sum.el (gnus-summary-caesar-message): Allow rotating headers.
+
+	* message.el (message-insert-formated-citation-line): Fix %f.
+	Reported by Torsten Bronger <[email protected]> .
+
+2006-08-18  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-bookmark.el (gnus-bookmark-file-coding-system): New variable.
+	(gnus-bookmark-mouse-available-p): New macro.
+	(gnus-bookmark-bmenu-list): Use it; use gnus-mouse-2.
+	(gnus-bookmark-bmenu-show-infos): Use it.
+	(gnus-bookmark-insert-details): Use it; use gnus-mouse-2.
+	(gnus-bookmark-bmenu-hide-infos): Ditto.
+	(gnus-bookmark-remove-properties): New function.
+	(gnus-bookmark-set, gnus-bookmark-make-cell): Use it.
+	(gnus-bookmark-set-bookmark-name): Don't use 2nd arg of split-string.
+	(gnus-bookmark-write-file): Bind coding-system-for-write.
+	(gnus-bookmark-insert-file-format-version-stamp): Add coding cookie.
+	(gnus-bookmark-jump): Make completing-read work with XEmacs; activate
+	group before selecting it.
+	(gnus-bookmark-get-bookmark): Use assoc instead of assoc-string.
+	(gnus-bookmark-bmenu-mode-map): Bind `q' to bury-buffer instead of
+	quit-window if it is not available; use gnus-mouse-2 and bind it to
+	gnus-bookmark-bmenu-select-by-mouse.
+	(gnus-bookmark-show-details): Remove unused variable `details-list'.
+	(gnus-bookmark-bmenu-select-by-mouse): New function.
+
+2006-08-13  Romain Francoise  <[email protected]>
+
+	* mm-extern.el (mm-extern-mail-server): End `y-or-n-p' prompt with a
+	space.
+
+2006-08-09  Katsumi Yamaoka  <[email protected]>
+
+	* compface.el (uncompface): Use binary rather than raw-text-unix.
+
+2006-08-09  Katsumi Yamaoka  <[email protected]>
+
+	* compface.el (uncompface): Make sure the eol conversion doesn't take
+	place when communicating with the external programs.  Reported by
+	ARISAWA Akihiro <[email protected]>.
+
+2006-07-31  Katsumi Yamaoka  <[email protected]>
+
+	* nnheader.el (nnheader-insert-head): Fix typo in comment.
+
+2006-07-31  Andreas Seltenreich  <[email protected]>
+
+	* nnweb.el (nnweb-google-parse-1): Update regexp for author and date.
+	Make it more robust by parsing author and date independently.
+
+2006-07-28  Katsumi Yamaoka  <[email protected]>
+
+	* nnheader.el (nnheader-insert-head): Make it work with Mac as well.
+
+2006-07-28  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-epg-sign): If mml2015-signers is not set, use the
+	first matching secret key.
+	(mml2015-epg-encrypt): Ditto.
+
+	* mml1991.el (mml1991-epg-sign): If mml1991-signers is not set, use the
+	first matching secret key.
+	(mml1991-epg-encrypt): Ditto.
+
+	* mml2015.el (mml2015-encrypt-to-self): New user option.
+	(mml2015-epg-encrypt): Append mml2015-signers to recipients list if
+	mml2015-epg-encrypt-to-self is set.
+
+	* mml1991.el (mml1991-encrypt-to-self): New variable.
+	(mml1991-epg-encrypt): Append mml1991-signers to recipients list if
+	mml1991-epg-encrypt-to-self is set.
+
+	* mml2015.el (mml2015-signers): New user option.
+	(mml2015-epg-sign): Reflect the value of mml2015-signers.
+	(mml2015-epg-encrypt): Allow to select signing keys.
+
+	* mml1991.el (mml1991-signers): New variable.
+	(mml1991-epg-sign): Reflect the value of mml1991-signers.
+	(mml1991-epg-encrypt): Allow to select signing keys.
+
+2006-07-27  Katsumi Yamaoka  <[email protected]>
+
+	* nnheader.el (nnheader-insert-head): Make it work even if the file
+	uses CRLF for the line-break code.
+
+2006-07-25  Daiki Ueno  <[email protected]>
+
+	* mml2015.el: Require mml-sec instead of password.
+	(mml2015-verbose): Inherit the default value from mml-secure-verbose.
+	(mml2015-cache-passphrase): Inherit the default value from
+	mml-secure-cache-passphrase.
+	(mml2015-passphrase-cache-expiry): Inherit the default value from
+	mml-secure-passphrase-cache-expiry.
+
+	* mml1991.el: Require mml-sec instead of password.
+	(mml1991-verbose): Inherit the default value from mml-secure-verbose.
+	(mml1991-cache-passphrase): Inherit the default value from
+	mml-secure-cache-passphrase.
+	(mml1991-passphrase-cache-expiry): Inherit the default value from
+	mml-secure-passphrase-cache-expiry.
+
+	* mml-sec.el: Require password.
+	(mml-secure-verbose): New user option.
+	(mml-secure-cache-passphrase): New user option.
+	(mml-secure-passphrase-cache-expiry): New user option.
+
+2006-07-24  Daiki Ueno  <[email protected]>
+
+	* pgg-def.el (pgg-truncate-key-identifier): Truncate the key ID to 8
+	letters from the end.  Thanks to "David Smith" <[email protected]> and
+	[email protected] (Andreas V,Av(Bgele)
+
+	FIXME: Use `tiny change'?
+
+2006-07-19  Andreas Seltenreich  <[email protected]>
+
+	* mm-url.el (mm-url-insert-file-contents): Inhibit Connection: close
+	workaround for the url package included with Emacs.
+
+	* nnweb.el (nnweb-google-create-mapping): Update regexp.
+
+2006-07-19  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-sum.el (gnus-select-newsgroup): Setup the article buffer
+	correctly.  This fixes a bug caused by the 2006-05-12 change.
+
+2006-07-18  Karl Fogel  <[email protected]>
+
+	* nnmail.el (nnmail-article-group): If splitting raises an error, give
+	some information about the error when saying that the `bogus' mail
+	group will be used.
+
+2006-07-17  Reiner Steib  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-delete-article): Don't use TAB in doc
+	string.
+
+2006-07-16  NAKAJI Hiroyuki  <[email protected]>  (tiny change)
+
+	* mm-util.el (mm-charset-synonym-alist): Map windows-31j to cp932.
+
+2006-07-14  Andreas Seltenreich  <[email protected]>
+
+	* gnus-start.el (gnus-subscribe-options-newsgroup-method): Doc fix.
+
+2006-07-10  Daiki Ueno  <[email protected]>
+
+	* mml1991.el (mml1991-function-alist): Add epg.
+	(mml1991-epg-passphrase-callback, mml1991-epg-sign)
+	(mml1991-epg-encrypt): New functions.
+
+2006-07-10  Daiki Ueno  <[email protected]>
+
+	* mml2015.el (mml2015-verbose): New variable.
+	(mml2015-cache-passphrase): Ditto.
+	(mml2015-passphrase-cache-expiry): Ditto.
+	(mml2015-function-alist): Add epg.
+	(mml2015-epg-passphrase-callback, mml2015-epg-decrypt)
+	(mml2015-epg-clear-decrypt, mml2015-epg-verify)
+	(mml2015-epg-clear-verify, mml2015-epg-sign, mml2015-epg-encrypt): New
+	functions.
+
+2006-07-08  Andreas Seltenreich  <[email protected]>
+
+	* message.el (message-cite-original-1): Preserve region when removing
+	quoted text due to X-No-Archive in order to avoid bogus attribution
+	when citing multiple messages.
+
+2006-06-27  Andreas Seltenreich  <[email protected]>
+
+	* gnus-group.el (gnus-group-sort-by-unread): Fix typo.  Reported by
+	Kenneth Jacker <[email protected]>.
+
+2006-06-26  Reiner Steib  <[email protected]>
+
+	* gnus-diary.el (gnus-user-format-function-d)
+	(gnus-user-format-function-D): Autoload.
+
+	* imap.el (Commentary): Fix typo.
+
+	* gnus-util.el (kill-empty-logs, gnus-byte-compile): Remove anonymous
+	2006-04-22 contribution.
+
+2006-06-26  Andreas Seltenreich  <[email protected]>
+
+	* gnus.el (gnus-valid-select-methods): Revert last change for nnweb.
+	It didn't really fix the bogosity I'm seeing with solid web groups.
+
+2006-06-26  Andreas Seltenreich  <[email protected]>
+
+	* gnus.el (gnus-valid-select-methods): Declare nnweb with 'address.
+	Since revision 6.95 (2003-01-05) of gnus-group.el, solid web groups are
+	created using server names.  If we use the feature without declaring
+	it, Gnus does not properly manage server and group state.
+
+	* nnweb.el (nnweb-google-search): Respect nnweb-max-hits as upper
+	bound.
+
+2006-06-25  Andreas Seltenreich  <[email protected]>
+
+	* gnus.el (gnus-find-method-for-group): On killed/unknown groups, try
+	looking up the method using GROUP's prefix before inventing a new one.
+	It is used on killed/unknown groups in various places where returning
+	an all-new method isn't expected by the caller.
+
+	* gnus-util.el (gnus-group-server): Fix for empty virtual server names
+	and match semantics of gnus-group-real-prefix.
+
+2006-06-22  Reiner Steib  <[email protected]>
+
+	* nnmail.el (nnmail-broken-references-mailers): New variable.
+	(nnmail-ignore-broken-references): New function generalizing
+	nnmail-fix-eudora-headers.
+	(nnmail-fix-eudora-headers): Now obsolete.
+
+	* gnus-art.el (gnus-button-handle-custom): Support
+	`customize-apropos*'.
+
+2006-06-21  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* gnus-art.el (article-hide-headers): Inhibit read-only stuff.
+
+	* gnus-group.el (gnus-fetch-group): Document ARTICLES and select those
+	articles.
+
+2006-06-21  Reiner Steib  <[email protected]>
+
+	* message.el (message-cite-reply-above): New variable.
+	(message-yank-original): Use it.
+
+2006-06-20  Katsumi Yamaoka  <[email protected]>
+
+	* rfc2231.el (rfc2231-parse-string): Allow `*'s in parameter values.
+
+2006-06-20  Reiner Steib  <[email protected]>
+
+	* gnus-bookmark.el (gnus-bookmark-jump): Don't mark unrelated articles
+	as read.
+
+	* gnus-group.el (gnus-group-quick-select-group): Add GROUP argument.
+
+2006-06-19  Reiner Steib  <[email protected]>
+
+	* gnus-bookmark.el: Fix Copyright, keywords, whitespace, etc.
+	(gnus-bookmark-default-file): Use gnus-directory.
+	(gnus-bookmark-bmenu-file-column, gnus-bookmark-use-annotations):
+	Remove "*" in doc string.
+	(gnus-bookmark-write-file): Simplify.
+	(gnus-bookmark-maybe-sort-alist): Use `when'.
+	(gnus-bookmark-get-bookmark): Fix typo in doc string.
+	(gnus-bookmark-set-bookmark-name, gnus-bookmark-get-bookmark): Add
+	FIXME about Emacs 21 and XEmacs compatibility.
+	(gnus-bookmark-set-bookmark-name): Use `gnus-replace-in-string' for
+	compatibility.
+	(gnus-bookmark-bmenu-mode): Use `gnus-run-mode-hooks' for
+	compatibility.
+	(gnus-bookmark-menu-heading): Fix version.
+
+2006-06-19  Bastien Guerry  <[email protected]>
+
+	* gnus-bookmark.el: New file.
+
+2006-06-19  Katsumi Yamaoka  <[email protected]>
+
+	* message.el (message-syntax-checks): Doc fix.
+
+2006-06-17  Andreas Seltenreich  <[email protected]>
+
+	* gnus-srvr.el (gnus-browse-unsubscribe-group): Don't subscribe
+	unsubscribed groups as if they were killed ones.  It causes duplicate
+	entries in gnus-newsrc-alist.
+
+2006-06-16  Katsumi Yamaoka  <[email protected]>
+
+	* message.el (message-syntax-checks): Doc fix.
+	(message-send-mail): Add check for continuation headers.
+	(message-check-news-header-syntax): Fix regexp used to check for
+	continuation headers.
+
+2006-06-14  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (gnus-display-mime): Make sure body ends with newline.
+
+2006-06-11  Reiner Steib  <[email protected]>
+
+	* gnus-art.el (gnus-article-toggle-truncate-lines): Fix code.
+
+2006-06-11  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (gnus-article-truncate-lines): Default to the value of
+	default-truncate-lines.
+
+2006-06-06  Katsumi Yamaoka  <[email protected]>
+
+	* mm-util.el (mm-mime-mule-charset-alist): Use unicode-precedence-list
+	to fill the utf-8 entry.
+
+	* lpath.el: Fbind unicode-precedence-list.
+
+2006-06-01  Andreas Seltenreich  <[email protected]>
+
+	* nnweb.el (nnweb-google-parse-1): Update regexp for author and date.
+
+2006-05-30  Kevin Greiner  <[email protected]>
+
+	* gnus-agent.el (directory-files-and-attributes): Move all the way
+	forward (the third and final move).
+	(gnus-agent-read-agentview): Trap reconstruction errors due to
+	nonexistant directory.  Handle by returning nil.
+
+2006-05-30  Didier Verna  <[email protected]>
+
+	* message.el (message-dont-reply-to-names): Update the custom type.
+	* message.el (message-dont-reply-to-names): New defsubst: potentially
+	convert a list of regexps into a single one.
+	* message.el (message-get-reply-headers): Use it.
+	* nnmail.el (nnmail-fancy-expiry-target): Ditto.
+
+2006-05-30  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-agent.el (directory-files-and-attributes): Move forward.
+
+2006-05-29  Reiner Steib  <[email protected]>
+
+	* gnus-ml.el (gnus-mailing-list-subscribe)
+	(gnus-mailing-list-unsubscribe, gnus-mailing-list-owner)
+	(gnus-mailing-list-message): Fix doc strings.
+
+2006-05-29  Andreas Seltenreich  <[email protected]>
+
+	* gnus-ml.el (gnus-mailing-list-message): Use gnus-url-mailto instead
+	of doing it manually.
+
+2006-05-29  Reiner Steib  <[email protected]>
+
+	* gnus-art.el (gnus-article-toggle-truncate-lines): Fix typo in
+	comment.
+
+2006-05-29  Kevin Greiner  <[email protected]>
+
+	* gnus-agent.el (Added gnus-agent-flush*) to purge agent info.
+	(gnus-agent-read-agentview): Fixed handling of end-of-file error.
+	(gnus-agent-read-local): All symbols allocated in my-obarray
+	(gnus-agent-set-local): Skip invalid entries (min and/or max is nil).
+	(gnus-agent-regenerate-group): Check numeric names to see if they are
+	messages or groups.
+	(gnus-agent-total-fetched-for): Ignore 'dummy.group' (there should be a
+	better way of do this...)
+
+	* gnus-cache.el (gnus-agent-total-fetched-for): Ignore
+	'dummy.group' (there should be a better way of do this...)
+
+2006-05-29  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (gnus-save-all-headers): Mention it might be overridden.
+	(gnus-saved-headers): Ditto.
+	(gnus-default-article-saver): Mention functions may have properties.
+	(gnus-article-save): Override gnus-save-all-headers and
+	gnus-saved-headers by :headers property which saver function may have.
+	(gnus-summary-save-in-file): Add :headers property.
+	(gnus-summary-write-to-file): Ditto.
+
+	* gnus-sum.el (gnus-summary-save-article): Bind
+	gnus-prompt-before-saving to t when saving many articles in a file;
+	always show all headers.
+
+	* dgnushack.el: Autoload toggle-truncate-lines for XEmacs.
+
+2006-05-26  Reiner Steib  <[email protected]>
+
+	* deuglify.el (gnus-outlook-rearrange-article): Add missing citation
+	marks.
+
+	* message.el (message-indent-citation): Add optional arguments to allow
+	using it outside of message buffers.
+
+	* gnus-art.el (gnus-article-unfold-long-headers): New variable.
+	(gnus-article-treat-unfold-headers): Use it.
+	(gnus-article-truncate-lines): New variable.
+	(gnus-article-mode): Use it.
+	(gnus-article-toggle-truncate-lines): New function.
+
+	* gnus-sum.el (gnus-summary-wash-map, gnus-summary-make-menu-bar): Add
+	gnus-article-toggle-truncate-lines.
+
+	* uudecode.el (uudecode-decode-region-external): nil isn't a valid
+	coding system in XEmacs, use binary.
+
+2006-05-26  Katsumi Yamaoka  <[email protected]>
+
+	* mm-util.el (mm-enrich-utf-8-by-mule-ucs): Don't edit
+	after-load-alist.
+
+	* gnus-art.el (gnus-summary-save-in-file): Use property to specify
+	this function should save decoded articles.
+	(gnus-summary-write-to-file): Use property to specify this function
+	should save decoded articles and specify gnus-summary-save-in-file
+	should be used to save articles other than the first one when saving
+	many articles.
+	(gnus-summary-save-body-in-file): Use property to specify this
+	function should save decoded articles.
+	(gnus-summary-write-body-to-file): Use property to specify this
+	function should save decoded articles and specify
+	gnus-summary-save-body-in-file should be used to save articles other
+	than the first one when saving many articles.
+
+	* gnus-sum.el (gnus-summary-save-article): Simplify.
+
+2006-05-25  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (gnus-default-article-saver): Add
+	gnus-summary-write-body-to-file.
+	(gnus-article-save-coding-system): Don't use coding system object
+	in XEmacs.
+	(gnus-read-save-file-name): Add optional `dir-var' argument which
+	specifies directory in which files are saved; work even if optional
+	`variable' argument is not specified.
+	(gnus-summary-write-to-file): Read file name.
+	(gnus-summary-save-body-in-file): Add optional `overwrite' argument.
+	(gnus-summary-write-body-to-file): New function.
+
+	* gnus-sum.el (gnus-newsgroup-last-directory): New variable.
+	(gnus-summary-local-variables): Add it.
+	(gnus-summary-save-map): Add gnus-summary-write-article-body-file.
+	(gnus-summary-save-article): Remove optional `decode' argument;
+	determine whether to decode articles by the value of
+	gnus-default-article-saver; when saving many files using
+	gnus-summary-write-to-file or gnus-summary-write-body-to-file, use
+	it first and use gnus-summary-save-in-file or
+	gnus-summary-save-body-in-file thereafter unless
+	gnus-prompt-before-saving is always; move point to article which
+	will be saved.
+	(gnus-summary-save-article-file): Revert.
+	(gnus-summary-write-article-file): Revert.
+	(gnus-summary-save-article-body-file): Revert.
+	(gnus-summary-write-article-body-file): New function.
+
+2006-05-24  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (gnus-default-article-saver): Doc fix.
+	(gnus-article-save-coding-system): Move from gnus-sum.el, rename
+	from gnus-summary-save-article-coding-system, and default to a
+	certain coding system.
+	(gnus-output-to-file): Add coding cookie and encode text according
+	to gnus-article-save-coding-system; don't use mm-append-to-file.
+
+	* gnus-sum.el (gnus-summary-save-article-coding-system): Move to
+	gnus-art.el and rename to gnus-article-save-coding-system.
+	(gnus-summary-save-article): Require gnus-art; don't show all
+	headers if it decodes articles; don't add coding cookie here;
+	don't bind mm-text-coding-system-for-write.
+	(gnus-summary-save-article-file): Save decoded articles.
+	(gnus-summary-write-article-file): When saving many files, use
+	gnus-summary-write-to-file first and gnus-summary-save-in-file
+	thereafter unless gnus-prompt-before-saving is always.
+	(gnus-summary-save-article-body-file): Save decoded articles.
+
+	* lpath.el: Fbind select-safe-coding-system for XEmacs.
+
+2006-05-23  Reiner Steib  <[email protected]>
+
+	* nnrss.el (nnrss-check-group): Bind hash-index.
+
+2006-05-23  Michael Cadilhac  <[email protected]>
+
+	* nnrss.el (nnrss-check-group): Use the md5sum of the whole RSS item as
+	its hash index.  Store this hash in `nnrss-group-data'.
+	(nnrss-read-group-data): Update accordingly.
+
+2006-05-23  Reiner Steib  <[email protected]>
+
+	* gnus-art.el (gnus-button-alist): Improve gnus-button-handle-symbol
+	entry.
+
+	* gnus-sum.el (gnus-summary-make-menu-bar): Add
+	gnus-article-browse-html-article.
+
+2006-05-23  Hynek Schlawack  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-mime-map): Add
+	gnus-article-browse-html-article.
+
+	* gnus-art.el (gnus-article-browse-html-article): Remove comment.
+
+2006-05-23  Reiner Steib  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-save-article-coding-system): Offer some
+	suitable coding systems in customize.
+
+2006-05-22  Reiner Steib  <[email protected]>
+
+	* mail-source.el (mail-sources): Fix custom type.
+
+2006-05-18  Reiner Steib  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-save-article-mail): Clarify doc string.
+	(gnus-summary-expire-articles-now): Shorten prompt.
+
+	* gmm-utils.el (wid-edit): Require.
+	(defun-gmm): Renamed from `gmm-defun-compat'.
+	(gmm-image-search-load-path): Use it.
+	(gmm-image-load-path-for-library): Use it.  Sync with `mh-compat.el'.
+
+2006-05-17  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-sum.el (gnus-summary-save-article-coding-system): New
+	variable.
+	(gnus-summary-save-article): Add optional `decode' argument.  If
+	it is set and gnus-summary-save-article-coding-system is non-nil,
+	save decoded article.
+	(gnus-summary-write-article-file): Save decoded article if
+	gnus-summary-save-article-coding-system is non-nil.
+
+	* ecomplete.el (ecomplete-database-file-coding-system): Fix custom
+	type.
+
+2006-05-16  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (easy-menu-define): Use :active instead of :enable.
+
+2006-05-12  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-art.el (gnus-article-setup-buffer): Go to summary buffer
+	first to test gnus-single-article-buffer which may be buffer-local.
+
+	* gnus-sum.el (gnus-summary-setup-buffer): Make
+	gnus-single-article-buffer buffer-local and nil in ephemeral
+	group; make gnus-article-buffer, gnus-article-current, and
+	gnus-original-article-buffer always buffer-local.
+	(gnus-summary-exit): Kill article buffer belonging to ephemeral
+	group.
+	(gnus-handle-ephemeral-exit): Don't move to next summary line.
+
+2006-05-08  Reiner Steib  <[email protected]>
+
+	* nnml.el (nnml-request-compact-group): Compressed files might not
+	have .gz extension.
+
+2006-05-04  Stefan Monnier  <[email protected]>
+
+	* mm-decode.el (mm-dissect-buffer): Remove spurious double assignment.
+	(mm-copy-to-buffer): Use with-current-buffer.
+	(mm-display-part): Simplify.
+	(mm-inlinable-p): Add optional arg `type'.
+
+2006-05-03  Stefan Monnier  <[email protected]>
+
+	* gnus-art.el (gnus-mime-view-part-as-type): Add optional PRED arg.
+	(gnus-mime-view-part-externally, gnus-mime-view-part-internally):
+	Try harder to show the attachment internally or externally using
+	gnus-mime-view-part-as-type.
+
+2006-05-02  Reiner Steib  <[email protected]>
+
+	* message.el (message-from-style, message-signature-separator)
+	(message-user-organization-file, message-send-mail-function)
+	(message-citation-line-function, message-yank-prefix)
+	(message-indent-citation-function, message-signature)
+	(message-signature-file, message-signature-insert-empty-line):
+	Remove autoloads.
+
+	* gnus-art.el (gnus-buttonized-mime-types): Remove
+	"multipart/signed".  Revert 2006-04-26 change.
+
 2006-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el (gnus-version-number): Bump version.
 
-2006-05-01 Lars Magne Ingebrigtsen <[email protected]>
+2006-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: No Gnus v0.5 is released.
 
@@ -16,7 +1776,7 @@
 	* message.el (hashcash): Require hashcash as normal.
 
 	* ecomplete.el (ecomplete-highlight-match-line): Use
-	point-at-eol. 
+	point-at-eol.
 	(ecomplete-highlight-match-line): Use `highlight', because that
 	face exists in both Emacs and XEmacs.
 
@@ -36,7 +1796,7 @@
 
 	* mm-util.el: Require timer/timer-funcs.
 
-2006-04-23  Andreas Seltenreich  <[email protected]>  (tiny change)
+2006-04-23  Andreas Seltenreich  <[email protected]>
 
 	* mm-url.el (mm-url-insert-file-contents): Don't set Connection:
 	Close.
@@ -140,7 +1900,7 @@
 	* mm-decode.el (mm-automatic-display): Don't make application/pgp
 	element match to application/pgp-*.
 
-2006-04-23  Andreas Seltenreich  <[email protected]>  (tiny change)
+2006-04-23  Andreas Seltenreich  <[email protected]>
 
 	* nnweb.el (nnweb-google-wash-article): Sync up to new Google
 	HTML.
@@ -183,13 +1943,13 @@
 
 2006-04-20  Reiner Steib  <[email protected]>
 
-	* gnus-util.el (gnus-replace-in-string): Prefer
-	replace-regexp-in-string over of replace-in-string.
+	* gnus-util.el (gnus-replace-in-string):
+	Prefer replace-regexp-in-string over of replace-in-string.
 
 2006-04-20  Katsumi Yamaoka  <[email protected]>
 
-	* gnus-util.el (gnus-select-frame-set-input-focus): Use
-	select-frame-set-input-focus if it is available in XEmacs; use
+	* gnus-util.el (gnus-select-frame-set-input-focus):
+	Use select-frame-set-input-focus if it is available in XEmacs; use
 	definition defined in Emacs 22 for old Emacsen.
 
 	* dgnushack.el: Autoload unmorse-region for XEmacs.
@@ -203,8 +1963,8 @@
 
 2006-04-18  Teodor Zlatanov  <[email protected]>
 
-	* gnus-registry.el (gnus-registry-cache-save): remove text
-	properties when saving via the temp buffer
+	* gnus-registry.el (gnus-registry-cache-save): Remove text
+	properties when saving via the temp buffer.
 
 2006-04-18  Reiner Steib  <[email protected]>
 
@@ -257,9 +2017,9 @@
 	(rfc2231-parse-string): Allow concatanation of parameters that
 	aren't contiguous.  The test case is
 	  (mail-header-parse-content-type "message/external-body;
-            name*0*=us-ascii''~%2ffoo%2fbar%2fbaz%2fxyzzy%2f;
-            access-type=LOCAL-FILE;
-            name*1*=plugh%2fhello-sailor%2fbing.pdf")
+	    name*0*=us-ascii''~%2ffoo%2fbar%2fbaz%2fxyzzy%2f;
+	    access-type=LOCAL-FILE;
+	    name*1*=plugh%2fhello-sailor%2fbing.pdf")
 
 2006-04-17  Stefan Monnier  <[email protected]>
 
@@ -388,6 +2148,8 @@
 
 2006-04-13  Romain Francoise  <[email protected]>
 
+	TODO: Backport to v5-10!
+
 	* gnus-util.el (gnus-alist-to-hashtable, gnus-hashtable-to-alist):
 	Moved here (and renamed) from gnus-registry.el.
 
@@ -547,8 +2309,8 @@
 
 2006-04-04  Andreas Seltenreich  <[email protected]>
 
-	* nnweb.el (nnweb-google-create-mapping): Update regexp.  Some
-	whitespace was matched into the url, which broke browsing hits
+	* nnweb.el (nnweb-google-create-mapping): Update regexp.
+	Some whitespace was matched into the url, which broke browsing hits
 	> 100 when mm-url-use-external was nil.
 
 2006-04-04  Reiner Steib  <[email protected]>
@@ -579,8 +2341,7 @@
 
 2006-03-31  Reiner Steib  <[email protected]>
 
-	* gnus-group.el (gnus-group-update-tool-bar): Add :initialize and
-	:set.
+	* gnus-group.el (gnus-group-update-tool-bar): Add :initialize and :set.
 
 2006-03-29  Daiki Ueno  <[email protected]>
 
@@ -609,8 +2370,7 @@
 
 2006-03-26  Andreas Seltenreich  <[email protected]>
 
-	* message.el (message-resend): Bind message-generate-hashcash to
-	to nil.
+	* message.el (message-resend): Bind message-generate-hashcash to nil.
 
 2006-03-26  Andreas Seltenreich  <[email protected]>
 
@@ -680,8 +2440,8 @@
 
 	* gnus-agent.el (gnus-agent-queue-mail): Fix custom tag for `t'.
 
-	* spam.el (spam-mark-new-messages-in-spam-group-as-spam): Add
-	comment on version.
+	* spam.el (spam-mark-new-messages-in-spam-group-as-spam):
+	Add comment on version.
 
 2006-03-20  Reiner Steib  <[email protected]>
 
@@ -724,10 +2484,10 @@
 
 2006-03-15  Andreas Seltenreich  <[email protected]>
 
-	* gnus-art.el (gnus-article-only-boring-p): Bind
-	inhibit-point-motion-hooks to avoid infinite loop when entering
-	intangible text.  Reported by Ralf Wachinger
-	<[email protected]>.
+	* gnus-art.el (gnus-article-only-boring-p):
+	Bind inhibit-point-motion-hooks to avoid infinite loop when entering
+	intangible text.
+	Reported by Ralf Wachinger <[email protected]>.
 
 2006-03-14  Reiner Steib  <[email protected]>
 
@@ -737,8 +2497,8 @@
 2006-03-14  Simon Josefsson  <[email protected]>
 
 	* message.el (message-unique-id): Don't use message-number-base36
-	if (user-uid) is a float.  Reported by Bjorn Solberg
-	<[email protected]>.
+	if (user-uid) is a float.
+	Reported by Bjorn Solberg <[email protected]>.
 
 2006-03-13  Katsumi Yamaoka  <[email protected]>
 
@@ -831,7 +2591,7 @@
 	handle is multipart when calling it recursively.
 	(mm-w3m-cid-retrieve): Display warning if retrieving fails.
 
-2006-03-03  Daniel Pittman <[email protected]>
+2006-03-03  Daniel Pittman  <[email protected]>
 
 	* nnimap.el (nnimap-request-update-info-internal): Optimize.
 	Don't `gnus-uncompress-range' to avoid excessive memory usage.
@@ -854,8 +2614,7 @@
 
 2006-03-03  Katsumi Yamaoka  <[email protected]>
 
-	* mm-decode.el (mm-get-part): Don't use
-	mm-with-unibyte-current-buffer.
+	* mm-decode.el (mm-get-part): Don't use mm-with-unibyte-current-buffer.
 
 	* gnus-sum.el (gnus-summary-set-display-table): Don't nix out
 	characters 160 through 255 in Emacs 23.
@@ -1084,7 +2843,7 @@
 	LIBRARY, IMAGE and PATH.  Don't modify paths.  Don't use
 	*-image-load-path-called-flag.
 
-2006-02-21  Milan Zamazal <[email protected]>
+2006-02-21  Milan Zamazal  <[email protected]>
 
 	* mm-view.el (mm-view-pkcs7-verify): Implement using smime.el.
 
@@ -1276,8 +3035,8 @@
 
 2006-02-06  Reiner Steib  <[email protected]>
 
-	* spam-report.el (spam-report-gmane-use-article-number): Improve
-	doc string.
+	* spam-report.el (spam-report-gmane-use-article-number):
+	Improve doc string.
 	(spam-report-gmane-internal): Check if a suitable header was found
 	in the article.
 
@@ -1312,21 +3071,18 @@
 	* nnweb.el (nnweb-group-alist): Use defvar instead of defvoo,
 	there's only one active file for all servers.
 	(nnweb-request-scan): Make sure nnweb-articles is initialized on
-	solid groups.  Gnus might have used a FAST request to select the
-	group.
+	solid groups.  Gnus might have used a FAST request to select the group.
 	(nnweb-request-group, nnweb-google-parse-1): Don't keep nnweb-type
 	and nnweb-search redundantly in the active file.
-	(nnweb-request-list): Don't list bogus groups.  There can only be
-	one.
+	(nnweb-request-list): Don't list bogus groups.  There can only be one.
 	(nnweb-request-create-group): Don't use ARGS.
 	(nnweb-possibly-change-server, nnweb-request-group): Remove some
 	initialisations.  Let nnoo do the work.
 
 2006-01-31  Katsumi Yamaoka  <[email protected]>
 
-	* mm-uu.el (mm-uu-emacs-sources-extract): Say the part has been
-	decoded.
-	(mm-uu-diff-extract): Ditto.
+	* mm-uu.el (mm-uu-emacs-sources-extract, mm-uu-diff-extract):
+	Say the part has been decoded.
 
 	* mm-view.el (mm-display-inline-fontify): Get decoded part rightly.
 
@@ -1932,7 +3688,7 @@
 
 	* flow-fill.el (fill-flowed): Bind adaptive-fill-mode to nil.
 
-2005-11-16  Boris Samorodov  <[email protected]>  (tiny patch)
+2005-11-16  Boris Samorodov  <[email protected]>  (tiny change)
 
 	* imap.el (imap-kerberos4-open): Ignore SSL stuff.
 
@@ -2151,7 +3907,7 @@
 	whitespace removed in revision 7.8.  Use concatenated string to
 	protect trailing whitespace.
 
-2005-10-27  Jouni K Seppanen  <[email protected]>  (tiny change)
+2005-10-27  Jouni K. Sepp,Ad(Bnen  <[email protected]>
 
 	* nnimap.el (nnimap-search-uids-not-since-is-evil): Add variable.
 	(nnimap-request-expire-articles): Use it to avoid sending 'UID
@@ -2519,13 +4275,13 @@
 2005-09-21  Teodor Zlatanov  <[email protected]>
 
 	* spam.el (spam-use-gmane, spam-report-gmane-register-routine)
-	(spam-report-gmane-unregister-routine): added support for gmane
-	unregistration
+	(spam-report-gmane-unregister-routine): Add support for gmane
+	unregistration.
 
 	* spam-report.el (spam-report-gmane-unspam)
-	(spam-report-gmane-spam): new wrappers around spam-report-gmane
-	(spam-report-gmane): changed to take a single article and do
-	unspam registration
+	(spam-report-gmane-spam): Add new wrappers around spam-report-gmane.
+	(spam-report-gmane): Change to take a single article and do unspam
+	registration.
 
 2005-09-19  Reiner Steib  <[email protected]>
 
@@ -2540,12 +4296,12 @@
 
 2005-09-20  Teodor Zlatanov  <[email protected]>
 
-	* gnus-start.el (gnus-activate-group): if the server is nil, don't
-	fail hard
+	* gnus-start.el (gnus-activate-group): If the server is nil, don't
+	fail hard.
 
-	* spam-report.el: better Keywords line
+	* spam-report.el: Add better Keywords line.
 
-	* spam.el: added Maintainer and better Keywords line
+	* spam.el: Add Maintainer and better Keywords line.
 
 2005-09-19  Reiner Steib  <[email protected]>
 
@@ -2799,7 +4555,7 @@
 	(gnus-decode-header-function, gnus-newsgroup-name):
 	* spam-stat.el (gnus-original-article-buffer): Add defvars.
 
-2005-08-22  Karl Chen  <[email protected]>  (tiny change)
+2005-08-22  Karl Chen  <[email protected]>
 
 	* gnus-art.el (gnus-treatment-function-alist): Move date-lapsed to
 	the end of the date treatments.
@@ -3314,7 +5070,7 @@
 	process-kill-without-query.
 	(starttls-open-stream): Ditto.
 
-2005-05-31  Ulf Stegemann <[email protected]>  (tiny change)
+2005-05-31  Ulf Stegemann  <[email protected]>  (tiny change)
 
 	* smime.el (smime-cert-by-ldap-1): Don't use
 	replace-regexp-in-string.
@@ -3534,7 +5290,7 @@
 	* nntp.el: Autoload format-spec instead of format; use
 	eval-and-compile to evaluate autoload forms.
 
-2005-05-09  Georg C. F. Greve <[email protected]>  (tiny change)
+2005-05-09  Georg C. F. Greve  <[email protected]>  (tiny change)
 
 	* pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Fix PIN caching.
 
@@ -3542,7 +5298,7 @@
 
 	* gnus.el (gnus-version-number): Bump version.
 
-2005-05-01 Lars Magne Ingebrigtsen <[email protected]>
+2005-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: No Gnus v0.3 is released.
 
@@ -3599,9 +5355,9 @@
 
 2005-04-14  Teodor Zlatanov  <[email protected]>
 
-	* message.el (message-kill-buffer-query-if-modified): new variable
-	so the user can kill a modified message buffer quickly
-	(message-kill-buffer): use it.
+	* message.el (message-kill-buffer-query-if-modified): Add new variable
+	so the user can kill a modified message buffer quickly.
+	(message-kill-buffer): Use it.
 
 2005-04-13  Katsumi Yamaoka  <[email protected]>
 
@@ -3644,15 +5400,15 @@
 
 	* gnus-registry.el (gnus-registry-clean-empty-function)
 	(gnus-registry-trim, gnus-registry-fetch-groups)
-	(gnus-registry-delete-group): now groups that match
-	`gnus-registry-ignored-groups' will be removed from the registry
+	(gnus-registry-delete-group): Groups that match
+	`gnus-registry-ignored-groups' are removed from the registry
 	entries, not just ignored for splitting.  This helps clean up the
 	registry.  Also, `gnus-registry-fetch-groups' is a convenient way
 	to get all the groups a message ID is in.
 
 	* spam-stat.el (spam-stat-split-fancy-spam-threshold)
-	(spam-stat-split-fancy): changed "threshhold" to "threshold"
-	(spam-stat-score-buffer-user-functions): added :number custom type
+	(spam-stat-split-fancy): Change "threshhold" to "threshold"
+	(spam-stat-score-buffer-user-functions): Add :number custom type.
 
 2005-04-06  Katsumi Yamaoka  <[email protected]>
 
@@ -3827,37 +5583,45 @@
 
 2005-03-03  Teodor Zlatanov  <[email protected]>
 
-	* gnus-sum.el (gnus-summary-move-article): pass move-is-internal
+	* gnus-sum.el (gnus-summary-move-article): Pass move-is-internal
 	parameter to invoked gnus-request-move-article; remove the
 	redundant gnus-sum-hint-move-is-internal variable; apply the marks
-	all at once instead of once per article
-	(gnus-summary-remove-process-mark): accept a list of articles as
-	well as a single article for processing
+	all at once instead of once per article.
+	(gnus-summary-remove-process-mark): Accept a list of articles as
+	well as a single article for processing.
 
-	* gnus-int.el (gnus-request-move-article): add move-is-internal parameter
+	* gnus-int.el (gnus-request-move-article): Add move-is-internal
+	parameter.
 
-	* nnml.el (nnml-request-move-article): add move-is-internal parameter
+	* nnml.el (nnml-request-move-article): Add move-is-internal parameter.
 
-	* nnmh.el (nnmh-request-move-article): add move-is-internal parameter
+	* nnmh.el (nnmh-request-move-article): Add move-is-internal parameter.
 
-	* nnmbox.el (nnmbox-request-move-article): add move-is-internal parameter
+	* nnmbox.el (nnmbox-request-move-article): Add move-is-internal
+	parameter.
 
-	* nnmaildir.el (nnmaildir-request-move-article): add move-is-internal parameter
+	* nnmaildir.el (nnmaildir-request-move-article): Add move-is-internal
+	parameter.
 
-	* nnimap.el (nnimap-request-move-article): add move-is-internal
-	parameter and remove the gnus-sum-hint-move-is-internal variable
+	* nnimap.el (nnimap-request-move-article): Add move-is-internal
+	parameter and remove the gnus-sum-hint-move-is-internal variable.
 
-	* nnfolder.el (nnfolder-request-move-article): add move-is-internal parameter
+	* nnfolder.el (nnfolder-request-move-article): Add move-is-internal
+	parameter.
 
-	* nndraft.el (nndraft-request-move-article): add move-is-internal parameter
+	* nndraft.el (nndraft-request-move-article): Add move-is-internal
+	parameter.
 
-	* nndiary.el (nndiary-request-move-article): add move-is-internal parameter
+	* nndiary.el (nndiary-request-move-article): Add move-is-internal
+	parameter.
 
-	* nndb.el (nndb-request-move-article): add move-is-internal parameter
+	* nndb.el (nndb-request-move-article): Add move-is-internal parameter.
 
-	* nnbabyl.el (nnbabyl-request-move-article): add move-is-internal parameter
+	* nnbabyl.el (nnbabyl-request-move-article): Add move-is-internal
+	parameter.
 
-	* nnagent.el (nnagent-request-move-article): add move-is-internal parameter
+	* nnagent.el (nnagent-request-move-article): Add move-is-internal
+	parameter.
 
 2005-03-01  Stefan Monnier  <[email protected]>
 
@@ -3880,14 +5644,14 @@
 
 2005-02-25  Teodor Zlatanov  <[email protected]>
 
-	* gnus-sum.el (gnus-summary-move-article): set
+	* gnus-sum.el (gnus-summary-move-article): Set
 	gnus-sum-hint-move-is-internal for gnus-request-move-article and
 	whatever it calls (right now, only nnimap-request-move article
-	respects it)
+	respects it).
 
-	* nnimap.el (nnimap-request-move-article): when
+	* nnimap.el (nnimap-request-move-article): When
 	gnus-sum-hint-move-is-internal is set, don't do the extra
-	nnimap-request-article
+	nnimap-request-article.
 
 2005-02-24  Reiner Steib  <[email protected]>
 
@@ -3962,9 +5726,9 @@
 
 2005-02-16  Teodor Zlatanov  <[email protected]>
 
-	* gnus-registry.el (gnus-registry-delete-group): Minor bug fix.
+	* gnus-registry.el (gnus-registry-delete-group): Add minor bug fix.
 
-	* gnus.el (gnus-install-group-spam-parameters): Doc fix.
+	* gnus.el (gnus-install-group-spam-parameters): Add minor doc fix.
 
 2005-02-15  Simon Josefsson  <[email protected]>
 
@@ -3978,8 +5742,8 @@
 
 2005-02-14  Teodor Zlatanov  <[email protected]>
 
-	* gnus.el (spam-contents): improve docs for spam-contents
-	parameter in its variable incarnation
+	* gnus.el (spam-contents): Improve docs for spam-contents
+	parameter in its variable incarnation.
 
 2005-02-14  Simon Josefsson  <[email protected]>
 
@@ -4018,7 +5782,7 @@
 
 	* gnus.el (gnus-group-startup-message): Search for gnus images in
 	etc/images/gnus.
-	* mm-util.el (mm-find-charset-region): Likewise.
+	* mm-util.el (mm-image-load-path): Likewise.
 	* smiley.el (smiley-data-directory): Search for smilies in
 	etc/images/smilies.
 
@@ -4039,8 +5803,8 @@
 
 2005-02-11  Teodor Zlatanov  <[email protected]>
 
-	* gnus-registry.el (gnus-registry-delete-group): small bug leaves
-	an ID in the registry even if it has no groups
+	* gnus-registry.el (gnus-registry-delete-group): Fix bug: leaves
+	an ID in the registry even if it has no groups.
 
 2005-02-10  Katsumi Yamaoka  <[email protected]>
 
@@ -4340,8 +6104,8 @@
 
 2004-12-23  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-check-BBDB): don't get the symbol-value of an
-	imaginary variable
+	* spam.el (spam-check-BBDB): Don't get the symbol-value of an
+	imaginary variable.
 
 2004-12-22  Katsumi Yamaoka  <[email protected]>
 
@@ -4350,9 +6114,9 @@
 
 2004-12-21  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-check-BBDB): fix the BBDB caching code to use
+	* spam.el (spam-check-BBDB): Fix the BBDB caching code to use
 	downcased symbol names; make a new cache instead of reusing
-	bbdb-hashtable
+	bbdb-hashtable.
 
 2004-12-21  Katsumi Yamaoka  <[email protected]>
 
@@ -4501,14 +6265,14 @@
 
 2004-12-01  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-summary-prepare-exit): remove the
+	* spam.el (spam-summary-prepare-exit): Remove the
 	gnus-summary-limit pop for now, it has problems with ham marks for
-	me
+	me.
 
 2004-11-29  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-summary-prepare-exit): use gnus-summary-limit
-	correctly
+	* spam.el (spam-summary-prepare-exit): Use gnus-summary-limit
+	correctly.
 
 2004-11-28  Carl Henrik Lunde  <[email protected]>  (tiny change)
 
@@ -4516,10 +6280,10 @@
 
 2004-11-26  Teodor Zlatanov  <[email protected]>
 
-	* gnus-art.el (gnus-split-methods): reformat comments
+	* gnus-art.el (gnus-split-methods): Reformat comments.
 
-	* spam.el (spam-summary-prepare-exit): remove article limits
-	before exiting the summary buffer
+	* spam.el (spam-summary-prepare-exit): Remove article limits
+	before exiting the summary buffer.
 
 2004-11-26  Katsumi Yamaoka  <[email protected]>
 
@@ -4579,10 +6343,14 @@
 2004-11-25  Katsumi Yamaoka  <[email protected]>
 
 	* message.el (message-hidden-headers): Default to "^References:".
-	From Reiner Steib <[email protected]>; improve customization type.
-	(message-strip-forbidden-properties): Remove check for obsolete
-	`message-hidden' text property, hidden headers are not accessible
-	in the buffer anymore.  From Romain Francoise on January 11, 2004.
+	Improve customization type.  Suggested by Reiner Steib
+	<[email protected]>.
+
+2004-11-25  Romain Francoise  <[email protected]>
+
+	* message.el (message-strip-forbidden-properties): Remove check for
+	obsolete `message-hidden' text property, hidden headers are not
+	accessible in the buffer anymore.
 
 2004-11-22  Romain Francoise  <[email protected]>
 
@@ -4621,7 +6389,7 @@
 2004-11-15  Jesper Harder  <[email protected]>
 
 	* pop3.el (pop3-leave-mail-on-server): Don't quote nil in
-	docstrings.
+	doc string.  Improve doc string.
 
 2004-11-15  Katsumi Yamaoka  <[email protected]>
 
@@ -4703,10 +6471,9 @@
 	"Args out of range" error.  Reported by Arnaud Giersch
 	<[email protected]>.
 
-2004-11-07  Jesper Harder  <[email protected]>
+2004-11-07  Stefan Wiens  <[email protected]>  (tiny change)
 
 	* gnus-sum.el (gnus-summary-clear-local-variables): Use symbolp.
-	From Stefan Wiens <[email protected]>.
 
 2004-11-04  Richard M. Stallman  <[email protected]>
 
@@ -4816,22 +6583,23 @@
 	checkdoc cleanup.
 	(html2text-get-attr, html2text-fix-paragraph): Simplify code.
 
-2004-11-01  Alfred M. Szmidt <[email protected]>  (tiny change)
+2004-11-01  Alfred M. Szmidt  <[email protected]>  (tiny change)
 
 	* html2text.el (html2text-format-tag-list): Add "strong" and "em".
 
 2004-10-29  Teodor Zlatanov  <[email protected]>
 
-	* gnus-registry.el (gnus-registry-hashtb): create the registry
-	when package is loaded
+	* gnus-registry.el (gnus-registry-hashtb): Create the registry
+	when package is loaded.
 
-	* spam.el (spam-summary-score-preferred-header): global preference
+	* spam.el (spam-summary-score-preferred-header): Add global preference
 	for people who want to override the default SpamAssassin over
-	Bogofilter preference (when both are set)
-	(spam-necessary-extra-headers): add spam-use-bogofilter as an option
-	(spam-user-format-function-S): check spam-summary-score-preferred-header
-	(spam-extra-header-to-number): add X-Bogosity header parsing
-	(spam-user-format-function-S): format the score correctly
+	Bogofilter preference (when both are set).
+	(spam-necessary-extra-headers): Add spam-use-bogofilter as an option.
+	(spam-user-format-function-S): Check
+	spam-summary-score-preferred-header.
+	(spam-extra-header-to-number): Add X-Bogosity header parsing.
+	(spam-user-format-function-S): Format the score correctly.
 
 2004-10-29  Katsumi Yamaoka  <[email protected]>
 
@@ -4861,7 +6629,7 @@
 
 2004-10-26  Teodor Zlatanov  <[email protected]>
 
-	* nnimap.el (nnimap-open-connection): fixed prog1/prog2 bug
+	* nnimap.el (nnimap-open-connection): Fix prog1/prog2 bug.
 
 2004-10-26  Katsumi Yamaoka  <[email protected]>
 
@@ -4888,11 +6656,11 @@
 
 2004-10-25  Teodor Zlatanov  <[email protected]>
 
-	* nnimap.el (nnimap-remove-server-from-buffer-alist): new function
-	to remove a server from the nnimap-server-buffer-alist
-	(nnimap-open-connection, nnimap-close-server): use it
+	* nnimap.el (nnimap-remove-server-from-buffer-alist): Add function
+	to remove a server from the nnimap-server-buffer-alist.
+	(nnimap-open-connection, nnimap-close-server): Use it.
 
-	* gnus-encrypt.el: removed in favor of encrypt.el
+	* gnus-encrypt.el: Remove file in favor of encrypt.el.
 
 2004-10-21  Katsumi Yamaoka  <[email protected]>
 
@@ -4911,15 +6679,15 @@
 
 2004-10-18  Teodor Zlatanov  <[email protected]>
 
-	* gnus-util.el (gnus-split-references): accept a nil references
-	string and go on blissfully
+	* gnus-util.el (gnus-split-references): Accept a nil references
+	string and go on blissfully.
 
-	* gnus-registry.el (gnus-registry-split-fancy-with-parent): catch
-	cases where the references string is non-nil but has no references
+	* gnus-registry.el (gnus-registry-split-fancy-with-parent): Catch
+	cases where the references string is non-nil but has no references.
 
-	* encrypt.el: add autoload tags
+	* encrypt.el: Add autoload tags.
 
-	* spam.el (spam-resolve-registrations-routine): remove article
+	* spam.el (spam-resolve-registrations-routine): Remove article
 	from unregistration list too.  Reported by David Hanak
 	<[email protected]>
 
@@ -4936,20 +6704,20 @@
 
 2004-10-15  Teodor Zlatanov  <[email protected]>
 
-	* encrypt.el: add autoload cookies
+	* encrypt.el: Add autoload cookies.
 
 	* spam.el (spam-backend-article-list-property)
 	(spam-backend-get-article-todo-list)
 	(spam-backend-put-article-todo-list, )
 	(spam-summary-prepare-exit, spam-resolve-registrations-routine):
-	resolve registrations separately
-	(spam-register-routine): format comments
-	(spam-unregister-routine, spam-register-routine): always call with
-	specific-articles, no default list
-	(spam-summary-prepare-exit): use the spam-classifications function
+	Resolve registrations separately.
+	(spam-register-routine): Format comments.
+	(spam-unregister-routine, spam-register-routine): Always call with
+	specific-articles, no default list.
+	(spam-summary-prepare-exit): Use the spam-classifications function.
 
-	* netrc.el (autoload, netrc-parse): use encrypt.el instead of
-	gnus-encrypt.el
+	* netrc.el (autoload, netrc-parse): Use encrypt.el instead of
+	gnus-encrypt.el.
 
 	* encrypt.el: copied from gnus-encrypt.el
 
@@ -4971,15 +6739,15 @@
 
 2004-10-14  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-register-routine): move comment
-	(spam-verify-bogofilter): we use 'unknown for the initial
-	spam-bogofilter-valid state, not 'never
+	* spam.el (spam-register-routine): Move comment.
+	(spam-verify-bogofilter): Use 'unknown for the initial
+	spam-bogofilter-valid state, not 'never.
 
-	* netrc.el (netrc-machine-user-or-password): convenience wrapper
-	for netrc-machine
+	* netrc.el (netrc-machine-user-or-password): Add convenience wrapper
+	for netrc-machine.
 
-	* nnimap.el (nnimap-open-connection): use
-	netrc-machine-user-or-password
+	* nnimap.el (nnimap-open-connection): Use
+	netrc-machine-user-or-password.
 
 2004-10-17  Richard M. Stallman  <[email protected]>
 
@@ -5011,7 +6779,7 @@
 
 2004-10-12  Simon Josefsson  <[email protected]>
 
-	* net/tls.el (tls-certtool-program): New variable.
+	* tls.el (tls-certtool-program): New variable.
 	(tls-certificate-information): New function, based on
 	ssl-certificate-information.
 
@@ -5210,7 +6978,7 @@
 
 2004-09-29  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-verify-bogofilter): -V, not -sV option
+	* spam.el (spam-verify-bogofilter): Use -V, not -sV option.
 
 2004-09-28  Kevin Greiner  <[email protected]>
 
@@ -5222,10 +6990,10 @@
 
 2004-09-28  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-verify-bogofilter): new function
+	* spam.el (spam-verify-bogofilter): Add new function.
 	(spam-check-bogofilter)
-	(spam-bogofilter-register-with-bogofilter): use it
-	(spam-verify-bogofilter): small fixes
+	(spam-bogofilter-register-with-bogofilter): Use it.
+	(spam-verify-bogofilter): Add small fixes.
 
 2004-09-28  Simon Josefsson  <[email protected]>
 
@@ -5233,18 +7001,18 @@
 
 2004-09-28  Teodor Zlatanov  <[email protected]>
 
-	* gnus-registry.el (gnus-registry-split-fancy-with-parent): use
-	gnus-extract-references instead of gnus-split-references
+	* gnus-registry.el (gnus-registry-split-fancy-with-parent): Use
+	gnus-extract-references instead of gnus-split-references.
 
-	* gnus-util.el (gnus-extract-references): new function, analogous
+	* gnus-util.el (gnus-extract-references): Add new function, analogous
 	to gnus-split-references but extracts only the message-ID without
-	anything extra
+	anything extra.
 
 	* hashcash.el (hashcash-generate-payment)
-	(hashcash-check-payment): do the right thing if hashcash-path is
-	nil (because the hashcash program could not be found)
+	(hashcash-check-payment): Do the right thing if hashcash-path is
+	nil (because the hashcash program could not be found).
 
-	* spam.el (spam-use-hashcash): remove comment
+	* spam.el (spam-use-hashcash): Remove comment.
 
 2004-09-27  Jesper Harder  <[email protected]>
 
@@ -5523,8 +7291,8 @@
 
 2004-09-10  Teodor Zlatanov  <[email protected]>
 
-	* gnus-registry.el (gnus-registry-trim): watch out for negatives
-	in gnus-registry-trim
+	* gnus-registry.el (gnus-registry-trim): Watch out for negatives
+	in gnus-registry-trim.
 
 2004-09-13  Simon Josefsson  <[email protected]>
 
@@ -5676,7 +7444,7 @@
 	* nnimap.el (nnimap-authinfo-file, nnimap-prune-cache):
 	Add :group 'nnimap.
 
-2004-08-30  Andreas Schwab <[email protected]>
+2004-08-30  Andreas Schwab  <[email protected]>
 
 	* rfc2231.el (rfc2231-parse-string): Restore whitespace syntax for
 	?* and ?\;.
@@ -5712,12 +7480,12 @@
 	* gnus-sum.el (gnus-summary-make-menu-bar): Avoid the
 	"Unrecognized menu descriptor" error in XEmacs.
 
-2004-08-26  Stefan Wiens <[email protected]>  (tiny change)
+2004-08-26  Stefan Wiens  <[email protected]>  (tiny change)
 
 	* gnus-sum.el (gnus-read-header): Don't remove a header for the
 	parent article of a sparse article in the thread hashtb.
 
-2004-08-26  David Hedbor <[email protected]>  (tiny change)
+2004-08-26  David Hedbor  <[email protected]>  (tiny change)
 
 	* nnmail.el (nnmail-split-lowercase-expanded): New user option.
 	(nnmail-expand-newtext): Lowercase expanded entries if
@@ -5803,11 +7571,10 @@
 	* gnus-art.el (gnus-button-alist): Improve
 	`gnus-button-handle-library' entry.
 
-2004-08-19  Paul Jarc  <[email protected]>
+2004-08-19  Sebastian Freundt  <[email protected]>  (tiny change)
 
 	* nnmaildir.el (nnmaildir--emlink-p, nnmaildir--enoent-p): Use
 	downcase, since XEmacs capitalizes error messages differently.
-	From Sebastian Freundt <[email protected]>.
 
 2004-08-18  Jesper Harder  <[email protected]>
 
@@ -5823,8 +7590,8 @@
 
 2004-08-17  Teodor Zlatanov  <[email protected]>
 
-	* nnimap.el (nnimap-open-connection): add 'imaps' synonym to
-	'imap' for netrc parsing
+	* nnimap.el (nnimap-open-connection): Add 'imaps' synonym to
+	'imap' for netrc parsing.
 
 2004-08-16  Reiner Steib  <[email protected]>
 
@@ -5845,7 +7612,7 @@
 2004-08-06  Teodor Zlatanov  <[email protected]>
 
 	* gnus-encrypt.el (gnus-encrypt-insert-file-contents)
-	(gnus-encrypt-write-file-contents): the password key is the file
+	(gnus-encrypt-write-file-contents): Make the password key the file
 	name PLUS the cipher, not just the cipher.  Also remove failed
 	passwords from the cache.
 
@@ -5861,18 +7628,18 @@
 
 2004-08-04  Teodor Zlatanov  <[email protected]>
 
-	* gnus-registry.el (gnus-registry-split-fancy-with-parent): try
-	to append in-reply-to: data to the references: header
+	* gnus-registry.el (gnus-registry-split-fancy-with-parent): Try
+	to append in-reply-to: data to the references: header.
 
-	* netrc.el: removed old encryption support, autoload gnus-encrypt.el
-	(netrc-parse): use gnus-encrypt.el functions
+	* netrc.el: Remove old encryption support, autoload gnus-encrypt.el
+	(netrc-parse): Use gnus-encrypt.el functions.
 
-	* gnus-encrypt.el: new file for encryption support; currently
-	does only a few GPG ciphers and an internal XOR cipher
+	* gnus-encrypt.el: Add new file for encryption support; currently
+	does only a few GPG ciphers and an internal XOR cipher.
 
-	* password.el: add comments on using password-read-and-add
-	(password-read-and-add): new function to read and add the
-	password to the cache at once
+	* password.el: Add comments on using password-read-and-add.
+	(password-read-and-add): Add function to read and add the
+	password to the cache at once.
 
 2004-07-28  Simon Josefsson  <[email protected]>
 
@@ -5961,10 +7728,10 @@
 
 2004-07-06  Dan Christensen  <[email protected]>
 
-	* gnus-sum.el (gnus-summary-read-group-1): When summary
-	is unthreaded, respect display group parameter.
-	(gnus-articles-to-read): Remove unused reference to
-	display group parameter.
+	* gnus-sum.el (gnus-summary-read-group-1): When summary is unthreaded,
+	respect display group parameter and gnus-summary-expunge-below.
+	(gnus-articles-to-read): Remove unused reference to display group
+	parameter.
 
 2004-07-03  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -5985,8 +7752,8 @@
 
 2004-06-30  Teodor Zlatanov  <[email protected]>
 
-	* gnus-registry.el (gnus-registry-trim): don't allow a negative
-	trim value
+	* gnus-registry.el (gnus-registry-trim): Don't allow a negative
+	trim value.
 
 2004-01-25  Paul Jarc  <[email protected]>
 
@@ -6071,29 +7838,29 @@
 
 2004-06-21  Teodor Zlatanov  <[email protected]>
 
-	* spam.el: section markers changed, TODO list revised
-	(spam-backends): new master list of all installed backends
-	(spam-summary-exit-behavior): new variable to determine how
-	messages moves are done at summary exit
+	* spam.el: Change section markers, revise TODO list.
+	(spam-backends): Make new master list of all installed backends.
+	(spam-summary-exit-behavior): Add new variable to determine how
+	messages moves are done at summary exit.
 	(spam-move-spam-nonspam-groups-only)
 	(spam-process-ham-in-nonham-groups)
-	(spam-process-ham-in-spam-groups): variables removed, the
+	(spam-process-ham-in-spam-groups): Remove variables, the
 	spam-summary-exit-behavior variable should be used to manage this
-	behavior
-	(spam-old-ham-articles, spam-old-spam-articles): removed
-	(spam-old-articles): new variable, replacing spam-old-ham-articles
-	and spam-old-spam-articles
+	behavior.
+	(spam-old-ham-articles, spam-old-spam-articles): Remove.
+	(spam-old-articles): Add variable, replacing spam-old-ham-articles
+	and spam-old-spam-articles.
 	(spam-use-copy, spam-use-move, spam-use-gmane, spam-use-resend):
-	empty variables, placeholders for the backends they represent
-	(spam-set-difference): moved, unchanged
-	(spam-list-of-processors): variable OBSOLETE, not used anymore
-	unless the user has a processor variable
+	Add empty variables, placeholders for the backends they represent.
+	(spam-set-difference): Move, unchanged.
+	(spam-list-of-processors): Declare OBSOLETE, not used anymore
+	unless the user has a processor variable.
 	(spam-classifications, spam-classification-valid-p)
 	(spam-backend-properties, spam-backend-property-valid-p)
 	(spam-backend-function-type-valid-p)
-	(spam-process-type-valid-p, spam-list-articles): helper functions
+	(spam-process-type-valid-p, spam-list-articles): Add helper functions.
 	(spam-report-articles-gmane, spam-report-articles-resend):
-	functions removed, they are not needed
+	Remove functions, they are not needed.
 	(spam-install-backend-super, spam-backend-list)
 	(spam-backend-check, spam-backend-valid-p, spam-backend-info)
 	(spam-backend-function, spam-backend-ham-registration-function)
@@ -6104,43 +7871,43 @@
 	(spam-install-backend-alias, spam-install-checkonly-backend)
 	(spam-install-mover-backend, spam-install-nocheck-backend)
 	(spam-install-backend, spam-install-statistical-backend)
-	(spam-install-statistical-checkonly-backend): backend installation
-	support
-	(spam-summary-prepare-exit): rewritten to use the new backend code
-	(spam-group-processor-p): use the new backend code and respect the
-	summary exit behavior
-	(spam-mark-spam-as-expired-and-move-routine): removed
-	(spam-summary-prepare): changed to use the new spam-old-articles
-	variable
+	(spam-install-statistical-checkonly-backend): Add backend installation
+	support.
+	(spam-summary-prepare-exit): Rewrite to use the new backend code.
+	(spam-group-processor-p): Use the new backend code and respect the
+	summary exit behavior.
+	(spam-mark-spam-as-expired-and-move-routine): Remove.
+	(spam-summary-prepare): Change to use the new spam-old-articles
+	variable.
 	(spam-copy-or-move-routine, spam-copy-spam-routine)
 	(spam-move-spam-routine, spam-copy-ham-routine)
-	(spam-move-ham-routine): new code to copy/move ham or spam
-	(spam-fetch-field-fast): doc and code improved, plus it allows the
-	'number request
-	(spam-list-of-checks, spam-list-of-statistical-checks): variables
-	removed, no longer used
-	(spam-split, spam-find-spam): use the new backend code
-	(spam-registration-functions): variable removed, no longer used
-	(spam-unregister-routine): convenience wrapper
+	(spam-move-ham-routine): Add code to copy/move ham or spam.
+	(spam-fetch-field-fast): Improve doc and code, plus allow the
+	'number request.
+	(spam-list-of-checks, spam-list-of-statistical-checks): Remove
+	variables.
+	(spam-split, spam-find-spam): Use the new backend code.
+	(spam-registration-functions): Remove variable.
+	(spam-unregister-routine): Add convenience wrapper.
 	(spam-log-undo-registration, spam-register-routine)
 	(spam-log-processing-to-registry)
-	(spam-log-unregistration-needed-p): renamed "check" to "backend"
-	where possible
+	(spam-log-unregistration-needed-p): Rename "check" to "backend"
+	where possible.
 	(spam-check-gmane-xref, spam-check-regex-headers)
-	(spam-check-blackholes, spam-check-stat, spam-check-ifile, spam-check-BBDB)
-	(spam-check-whitelist, spam-check-blacklist)
+	(spam-check-blackholes, spam-check-stat, spam-check-ifile)
+	(spam-check-BBDB, spam-check-whitelist, spam-check-blacklist)
 	(spam-check-bogofilter-headers, spam-check-spamoracle)
 	(spam-check-spamassassin-headers, spam-check-bsfilter-headers)
-	(spam-check-crm114-headers): use the spam-split-group that
-	spam-split prepares, no need to determine it every time
+	(spam-check-crm114-headers): Use the spam-split-group that
+	spam-split prepares, no need to determine it every time.
 
-	* nnimap.el (nnimap-retrieve-headers-progress): add the message number to
-	the nnheader-parse-naked-head call
+	* nnimap.el (nnimap-retrieve-headers-progress): Add the message number
+	to the nnheader-parse-naked-head call.
 
-	* nnheader.el (nnheader-generate-fake-message-id): fix indentation
+	* nnheader.el (nnheader-generate-fake-message-id): Fix indentation.
 
-	* gnus-sum.el (gnus-nov-parse-line): add the message number to
-	the nnheader-nov-read-message-id call
+	* gnus-sum.el (gnus-nov-parse-line): Add the message number to
+	the nnheader-nov-read-message-id call.
 
 2004-06-21  Katsumi Yamaoka  <[email protected]>
 
@@ -6190,14 +7957,14 @@
 
 2004-06-14  Teodor Zlatanov  <[email protected]>
 
-	* nnheader.el (nnheader-generate-fake-message-id): accept a
+	* nnheader.el (nnheader-generate-fake-message-id): Accept a
 	number and build a fake message ID localized to a group and
-	article number (so it's repeatable from that point on)
-	(nnheader-fake-message-id-p): change regex to accomodate new fake
-	ID format
+	article number (so it's repeatable from that point on).
+	(nnheader-fake-message-id-p): Change regex to accomodate new fake
+	ID format.
 
-	* gnus-sum.el (gnus-get-newsgroup-headers): call
-	nnheader-generate-fake-message-id with the article number
+	* gnus-sum.el (gnus-get-newsgroup-headers): Call
+	nnheader-generate-fake-message-id with the article number.
 
 2004-06-12  YAGI Tatsuya  <[email protected]>  (tiny change)
 
@@ -6258,16 +8025,16 @@
 2004-06-07  Teodor Zlatanov  <[email protected]>
 
 	* spam.el (spam-report-articles-resend)
-	(spam-report-resend-register-routine): allow ham reporting
-	(spam-report-resend-register-ham-routine): simple wrapper
-	(spam-registration-functions): add ham resending functions
-	(spam-list-of-processors): add ham resend processor
+	(spam-report-resend-register-routine): Allow ham reporting.
+	(spam-report-resend-register-ham-routine): Add wrapper.
+	(spam-registration-functions): Add ham resending functions.
+	(spam-list-of-processors): Add ham resend processor.
 
-	* gnus.el (ham-resend-to): new group parameter
-	(spam-process): add ham resend option
+	* gnus.el (ham-resend-to): Add new group parameter.
+	(spam-process): Add ham resend option.
 
-	* spam-report.el (spam-report-resend): allow reporting ham
-	(spam-report-resend-ham): simple wrapper
+	* spam-report.el (spam-report-resend): Allow reporting ham.
+	(spam-report-resend-ham): Add wrapper.
 
 2004-06-06  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -6287,12 +8054,12 @@
 
 2004-06-03  Teodor Zlatanov  <[email protected]>
 
-	* assistant.el (assistant-node-name): new convenience function
-	(assistant-render-text, assistant-render-node): error handling,
-	plus handle multiple next nodes
-	(assistant-find-next-node): commented out for now
-	(assistant-find-next-nodes): new function, returns list of next
-	nodes
+	* assistant.el (assistant-node-name): Add convenience function.
+	(assistant-render-text, assistant-render-node): Add error handling,
+	plus handle multiple next nodes.
+	(assistant-find-next-node): Comment out for now.
+	(assistant-find-next-nodes): Add function, returns list of next
+	nodes.
 
 2004-06-02  Reiner Steib  <[email protected]>
 
@@ -6300,7 +8067,7 @@
 
 2004-05-29  Teodor Zlatanov  <[email protected]>
 
-	* assistant.el (assistant-render-text, assistant-eval): add :set
+	* assistant.el (assistant-render-text, assistant-eval): Add :set
 	widget type, which is different because it takes and returns a
 	list.  Much hilarity ensues.
 
@@ -6319,21 +8086,21 @@
 
 2004-05-27  Teodor Zlatanov  <[email protected]>
 
-	* assistant.el (assistant-render-text): trying to add a :set
-	widget, more to come...
+	* assistant.el (assistant-render-text): Try to add a :set
+	widget, more to come.
 
-	* spam.el (spam-group-spam-contents-p): handle empty groupname
-	strings
+	* spam.el (spam-group-spam-contents-p): Handle empty groupname
+	strings.
 	(spam-report-articles-resend)
-	(spam-register-routine): do registration iff any articles warrant
+	(spam-register-routine): Do registration iff any articles warrant
 	it.
-	(spam-summary-prepare-exit): changed log message for nil group
-	destinations
+	(spam-summary-prepare-exit): Change log message for nil group
+	destinations.
 
 2004-05-27  Daniel Pittman  <[email protected]>
 
-	* spam.el (spam-report-resend-register-routine): allow
-	spam-report-resend-to to be a group parameter or a global value
+	* spam.el (spam-report-resend-register-routine): Allow
+	spam-report-resend-to to be a group parameter or a global value.
 
 2004-05-26  Simon Josefsson  <[email protected]>
 
@@ -6360,7 +8127,7 @@
 
 2004-05-26  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-mark-new-messages-in-spam-group-as-spam): New
+	* spam.el (spam-mark-new-messages-in-spam-group-as-spam): Add
 	variable.
 	(spam-mark-junk-as-spam-routine): Use it.  Allow to disable
 	assigning the spam-mark to new messages.
@@ -6377,15 +8144,15 @@
 	(rfc2047-decode): Treat the ascii coding-system as raw-text by
 	default.
 
-2004-05-25  Anand Mitra <[email protected]>  (tiny change)
+2004-05-25  Anand Mitra  <[email protected]>  (tiny change)
 
 	* gnus-sum.el (gnus-summary-delete-article): invoke hook with
 	correct data.
 
 2004-05-24  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-list-of-processors): use nil for nonexistent processors
-	(spam-group-processor-p): fixed function so it works properly
+	* spam.el (spam-list-of-processors): Use nil for nonexistent processors.
+	(spam-group-processor-p): Fix function.
 	(spam-group-processor-multiple-p)
 	(spam-group-spam-processor-report-gmane-p)
 	(spam-group-spam-processor-report-resend-p)
@@ -6401,25 +8168,24 @@
 	(spam-group-ham-processor-whitelist-p)
 	(spam-group-ham-processor-BBDB-p)
 	(spam-group-ham-processor-spamoracle-p)
-	(spam-group-ham-processor-copy-p): functions removed with some
-	prejudice against unneeded code
+	(spam-group-ham-processor-copy-p): Remove functions with some
+	prejudice against unneeded code.
 	(spam-report-articles-resend)
-	(spam-report-resend-register-routine): allow the group/topic
-	spam-resend-to value to override spam-report-resend-to
-	(spam-summary-prepare-exit): invoke spam-group-processor-p
-	properly now
-
-	* spam-report.el (spam-report-resend-to, spam-report-resend):
-	start with resend-to set to nil, and then ask the user if
-	necessary.  From Daniel Pittman <[email protected]>.
+	(spam-report-resend-register-routine): Allow the group/topic
+	spam-resend-to value to override spam-report-resend-to.
+	(spam-summary-prepare-exit): Invoke spam-group-processor-p
+	properly now.
 
-	* gnus.el (spam-resend-to): new group/topic parameter
-	(spam-process): move the OBSOLETE processors to the end of the
+	* gnus.el (spam-resend-to): Add group/topic parameter.
+	(spam-process): Move the OBSOLETE processors to the end of the
 	choices.
 
-	* spam-report.el (spam-report-resend): spam-report-resend takes a
-	list of articles, not separate article numbers.  From Daniel
-	Pittman <[email protected]>.
+2004-05-24  Daniel Pittman  <[email protected]>
+
+	* spam-report.el (spam-report-resend-to, spam-report-resend): Start
+	with resend-to set to nil, and then ask the user if necessary.
+	(spam-report-resend): spam-report-resend takes a list of articles, not
+	separate article numbers.
 
 2004-05-23  Katsumi Yamaoka  <[email protected]>
 
@@ -6464,7 +8230,7 @@
 
 2004-05-20  Danny Siu  <[email protected]>
 
-        * gnus-sum.el (gnus-summary-recenter): Summery buffer was not auto
+	* gnus-sum.el (gnus-summary-recenter): Summery buffer was not auto
 	centered even when gnus-auto-center-summary is t
 
 2004-05-22  Lars Magne Ingebrigtsen  <[email protected]>
@@ -6506,24 +8272,24 @@
 	(spam-crm114-register-spam-routine)
 	(spam-crm114-unregister-spam-routine)
 	(spam-crm114-register-ham-routine)
-	(spam-crm114-unregister-ham-routine): add CRM114 support.  From
+	(spam-crm114-unregister-ham-routine): Add CRM114 support.  From
 	[email protected] (Adam Sj,Ax(Bgren).
 
-	* gnus.el: added spam-use-crm114
+	* gnus.el: Add spam-use-crm114.
 
 	* spam.el (spam-list-of-processors, spam-registration-functions):
-	add spam-use-resend
-	(spam-group-spam-processor-report-resend-p): utility wrapper
-	(spam-report-articles-gmane): doc fix
+	Add spam-use-resend.
+	(spam-group-spam-processor-report-resend-p): Add utility wrapper.
+	(spam-report-articles-gmane): Add doc fix.
 	(spam-report-articles-resend,
-	spam-report-resend-register-routine): wrappers around
-	spam-report-resend-to
+	spam-report-resend-register-routine): Add wrappers around
+	spam-report-resend-to.
 
 	* spam-report.el (spam-report-resend-to, spam-report-resend):
-	support for resending spam
-	(spam-report-gmane): line length >80 fix
+	Add support for resending spam.
+	(spam-report-gmane): Fix line length >80.
 
-	* gnus.el (spam-process): add spam-use-resend
+	* gnus.el (spam-process): Add spam-use-resend.
 
 2004-05-20  TSUCHIYA Masatoshi  <[email protected]>
 
@@ -6673,8 +8439,8 @@
 
 2004-05-17  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-summary-prepare-exit): fix messages, so they show
-	only when there is spam or ham to be processed
+	* spam.el (spam-summary-prepare-exit): Fix messages, so they show
+	only when there is spam or ham to be processed.
 
 2004-05-17  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -6741,13 +8507,13 @@
 
 2004-05-15  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-summary-prepare-exit): oops, forgot (length)
+	* spam.el (spam-summary-prepare-exit): Fixed (length).
 
 2004-05-14  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-summary-prepare-exit): only produce "marking spam
+	* spam.el (spam-summary-prepare-exit): Fix to produce "marking spam
 	as expired without moving it" message when there are spam
-	messages left
+	messages left.
 
 2004-05-14  Nelson Ferreira  <[email protected]>  (tiny change)
 
@@ -6822,7 +8588,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2004-05-01 Lars Magne Ingebrigtsen <[email protected]>
+2004-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: No Gnus v0.2 is released.
 
@@ -6883,14 +8649,14 @@
 
 	* gnus-registry.el (gnus-registry-cache-whitespace)
 	(gnus-registry-action, gnus-registry-spool-action)
-	(gnus-registry-split-fancy-with-parent): changed message levels
-	from 5 to 3 or 7, as needed
+	(gnus-registry-split-fancy-with-parent): Change message levels
+	from 5 to 3 or 7, as needed.
 
 	* spam.el (spam-summary-prepare-exit)
 	(spam-mark-junk-as-spam-routine, spam-fetch-field-fast)
 	(spam-split, spam-find-spam, spam-log-undo-registration)
-	(spam-check-blackholes, spam-enter-ham-BBDB): changed message
-	level from 5 to 6
+	(spam-check-blackholes, spam-enter-ham-BBDB): Changed message
+	level from 5 to 6.
 
 2004-04-26  Katsumi Yamaoka  <[email protected]>
 
@@ -6948,25 +8714,29 @@
 
 2004-04-22  Teodor Zlatanov  <[email protected]>
 
+	FIXME: Make separate entries for each person.
+
 	From Dan Christensen <[email protected]>, [email protected] (Adam
 	Sj,Ax(Bgren), Wes Hardaker <[email protected]>, and Michael Shields
 	<[email protected]>:
 
-	* spam.el (spam-necessary-extra-headers): get the extra headers we
-	may need for spam sorting and scoring
-	(spam-user-format-function-S): a user format function suitable for
-	general use
-	(spam-article-sort-by-spam-status): sorting function for summary
-	sorting
-	(spam-extra-header-to-number): get a score from a header
-	(spam-summary-score): get a numeric score from the headers
-	(spam-generic-score): oops, function doc in wrong place
-	(spam-initialize): take symbols when it's run, and install the
-	extra headers that spam-necessary-extra-headers thinks we need
+	* spam.el (spam-necessary-extra-headers): Get the extra headers we
+	may need for spam sorting and scoring.
+	(spam-user-format-function-S): Add user format function suitable for
+	general use.
+	(spam-article-sort-by-spam-status): Add sorting function for summary
+	sorting.
+	(spam-extra-header-to-number): Add function to get a score from a
+	header.
+	(spam-summary-score): Add function to  get a numeric score from the
+	headers.
+	(spam-generic-score): Fixed function doc, was in wrong place.
+	(spam-initialize): Take symbols when it's run, and install the
+	extra headers that spam-necessary-extra-headers thinks we need.
 
 2004-04-21  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-summary-prepare-exit): logic and message fix.
+	* spam.el (spam-summary-prepare-exit): Add logic and message fix.
 	Reported by [email protected] (Johan Bockg,Ae(Brd).
 
 2004-04-17  Jesper Harder  <[email protected]>
@@ -6981,13 +8751,13 @@
 
 2004-04-16  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-summary-prepare-exit): simplified logic
-	(spam-fetch-article-header): read the article header if it's not
-	available
-	(spam-list-articles): simplified logic
-	(spam-filelist-register-routine): found bug with unregister-list
+	* spam.el (spam-summary-prepare-exit): Simplify logic.
+	(spam-fetch-article-header): Read the article header if it's not
+	available.
+	(spam-list-articles): Simplify logic.
+	(spam-filelist-register-routine): Fix bug with unregister-list.
 
-	* gnus-registry.el: clarified comments at beginning
+	* gnus-registry.el: Fix comments at beginning.
 
 2004-04-16  Jesper Harder  <[email protected]>
 
@@ -7025,18 +8795,18 @@
 	* spam.el (spam-fetch-field-fast, spam-generate-fake-headers)
 	(spam-find-spam, spam-log-processing-to-registry)
 	(spam-log-registered-p, spam-log-unregistration-needed-p)
-	(spam-log-undo-registration): use gnus-message instead of
-	gnus-error, none of these errors are fatal
+	(spam-log-undo-registration): Use gnus-message instead of
+	gnus-error, none of these errors are fatal.
 
 	* gnus-registry.el (gnus-registry-clean-empty-function)
-	(gnus-registry-clean-empty): remove only empty entries without
-	extra data
+	(gnus-registry-clean-empty): Remove only empty entries without
+	extra data.
 
 2004-04-12  Teodor Zlatanov  <[email protected]>
 
 	* spam-stat.el (spam-stat-buffer-change-to-spam)
-	(spam-stat-buffer-change-to-non-spam): change (error) to
-	(gnus-message 8) invocation
+	(spam-stat-buffer-change-to-non-spam): Change (error) to
+	(gnus-message 8) invocation.
 
 2004-04-12  Katsumi Yamaoka  <[email protected]>
 
@@ -7163,15 +8933,15 @@
 
 2004-04-02  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-set-difference): new function to replace
-	gnus-set-difference in spam.el
-	(spam-summary-prepare-exit): use spam-set-difference
+	* spam.el (spam-set-difference): Add function to replace
+	gnus-set-difference in spam.el.
+	(spam-summary-prepare-exit): Use spam-set-difference.
 
 2004-03-29  Teodor Zlatanov  <[email protected]>
 
-	* gnus-registry.el (gnus-registry-cache-file): updated to use
-	gnus-dribble-directory OR gnus-home-directory OR ~
-	(gnus-registry-split-fancy-with-parent): fixed doc
+	* gnus-registry.el (gnus-registry-cache-file): Update to use
+	gnus-dribble-directory OR gnus-home-directory OR ~.
+	(gnus-registry-split-fancy-with-parent): Fix doc.
 
 2004-03-27  Katsumi Yamaoka  <[email protected]>
 
@@ -7360,18 +9130,18 @@
 
 2004-03-04  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-use-gmane-xref): new backend
-	(spam-gmane-xref-spam-group): variable to control the name of the
-	Gmane spam group
+	* spam.el (spam-use-gmane-xref): Add new backend.
+	(spam-gmane-xref-spam-group): Add variable to control the name of the
+	Gmane spam group.
 	(spam-blackhole-servers, spam-blackhole-good-server-regex)
 	(spam-regex-headers-spam, spam-regex-headers-ham)
-	(spam-regex-body-spam, spam-regex-body-ham): clarified docs
-	(spam-list-of-checks): added spam-use-gmane-xref to list of
-	backends and checks
-	(spam-check-gmane-xref): function for spam-use-gmane-xref
+	(spam-regex-body-spam, spam-regex-body-ham): Clarify docs.
+	(spam-list-of-checks): Add spam-use-gmane-xref to list of
+	backends and checks.
+	(spam-check-gmane-xref): Add function for spam-use-gmane-xref.
 
-	* gnus.el (spam-autodetect-methods): add spam-use-gmane-xref as
-	an autodetect method
+	* gnus.el (spam-autodetect-methods): Add spam-use-gmane-xref as
+	an autodetect method.
 
 2004-03-04  Kevin Greiner  <[email protected]>
 
@@ -7542,10 +9312,10 @@
 
 2004-02-26  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-summary-prepare-exit): gnus-set-difference needs
-	to be run with new-articles as LIST1, not LIST2
-	(spam-registration-functions): add spam-use-ham-copy as a nil
-	registration backend
+	* spam.el (spam-summary-prepare-exit): Fix gnus-set-difference: needs
+	to be run with new-articles as LIST1, not LIST2.
+	(spam-registration-functions): Add spam-use-ham-copy as a nil
+	registration backend.
 
 2004-02-26  Jesper Harder  <[email protected]>
 
@@ -7661,11 +9431,11 @@
 	* spam-report.el (spam-report-unplug-agent)
 	(spam-report-plug-agent, spam-report-deagentize)
 	(spam-report-agentize, spam-report-url-ping-temp-agent-function):
-	support for the Agent in spam-report: when unplugged, report to a
-	file; when plugged, submit all the requests
+	Add support for the Agent in spam-report: when unplugged, report to a
+	file; when plugged, submit all the requests.
 
-	* spam.el (spam-register-routine): improved message about
-	registration
+	* spam.el (spam-register-routine): Fix message about
+	registration.
 
 2004-02-09  Jesper Harder  <[email protected]>
 
@@ -7721,7 +9491,7 @@
 	* spam.el (spam-register-routine)
 	(spam-log-processing-to-registry, spam-log-registered-p)
 	(spam-log-unregistration-needed-p, spam-log-undo-registration):
-	change "check" to "spam-check" for semi-clarity
+	Change "check" to "spam-check" for semi-clarity.
 
 2004-02-05  Jesper Harder  <[email protected]>
 
@@ -7772,7 +9542,7 @@
 
 2004-02-03  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-list-of-processors): fixed spamassassin variable names
+	* spam.el (spam-list-of-processors): Fix spamassassin variable names.
 
 2004-02-03  Jesper Harder  <[email protected]>
 
@@ -7791,8 +9561,8 @@
 
 2004-02-02  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-list-of-checks): added spam-use-BBDB-eclusive to
-	the list of checks
+	* spam.el (spam-list-of-checks): Add spam-use-BBDB-eclusive to
+	the list of checks.
 
 2004-01-31  Jesper Harder  <[email protected]>
 
@@ -7807,7 +9577,7 @@
 2004-01-27  Teodor Zlatanov  <[email protected]>
 
 	* spam.el (spam-spamassassin-register-ham-routine)
-	(spam-spamassassin-register-spam-routine): fixed function names
+	(spam-spamassassin-register-spam-routine): Fix function names.
 
 2004-01-27  Katsumi Yamaoka  <[email protected]>
 
@@ -7821,11 +9591,10 @@
 	cache if there's the grouplens stuff.
 	(gnus-parse-simple-format): Replace %l with the empty string.
 
-2004-01-27  Steve Youngs  <[email protected]>
+2004-01-27  Jerry James  <[email protected]>  (tiny change)
 
 	* gnus-spec.el (gnus-parse-simple-format): Fix setq value
 	omission.
-	From Jerry James  <[email protected]>
 
 2004-01-26  Katsumi Yamaoka  <[email protected]>
 
@@ -7988,15 +9757,7 @@
 	(spam-stat-buffer-words-with-scores): Don't narrow and change
 	syntax table here.  Reported by Andrew Cohen <[email protected]>.
 
-2004-01-20  Teodor Zlatanov  <[email protected]>
-
-	* spam.el (gnus-summary-mode-map): make spam-generic-score the
-	default scoring function
-	(spam-generic-score): calls spam-spamassassin-score if
-	spam-use-spamassassin or spam-use-spamassassin-headers is on;
-	spam-bogofilter-score otherwise.
-
-	From Hubert Chan <[email protected]>:
+2004-01-20  Hubert Chan <[email protected]>:
 
 	* spam.el (spam-use-spamassassin, spam-use-spamassassin-headers)
 	(spam-install-hooks, spam-spamassassin, spam-spamassassin-path)
@@ -8017,12 +9778,21 @@
 	(spam-assassin-register-ham-routine): add SpamAssassin support
 	(spam-bogofilter-score): fix to show article before scoring
 
-	* gnus.el (spam-process, spam-autodetect-methods): add
-	spamassassin and spamassassin-headers
+2004-01-20  Teodor Zlatanov  <[email protected]>
+
+	* spam.el (gnus-summary-mode-map): Make spam-generic-score the
+	default scoring function.
+	(spam-generic-score): Call spam-spamassassin-score if
+	spam-use-spamassassin or spam-use-spamassassin-headers is on;
+	spam-bogofilter-score otherwise.
+
+	* gnus.el (spam-process, spam-autodetect-methods): Add
+	spamassassin and spamassassin-headers.
+
+2004-01-20  Nevin Kapur  <[email protected]>
 
 	* gnus-registry.el (gnus-registry-split-fancy-with-parent):
-	Suppress unnecessary messages.  From Nevin Kapur
-	<[email protected]>.
+	Suppress unnecessary messages.
 
 2004-01-20  Jesper Harder  <[email protected]>
 
@@ -8074,11 +9844,13 @@
 	Suggested by ARISAWA Akihiro <[email protected]>.
 	(mm-w3m-cid-retrieve): Simplify.
 
-2004-01-14  Kai Grossjohann  <[email protected]>
+2004-01-14  Vasily Korytov  <[email protected]>
 
 	* message.el (message-kill-to-signature): Allow prefix arg to
-	specify number of lines to keep before signature.  From Vasily
-	Korytov.
+	specify number of lines to keep before signature.
+
+2004-01-14  Kai Grossjohann  <[email protected]>
+
 	(message-kill-to-signature): Change docstring.
 
 2004-01-14  Katsumi Yamaoka  <[email protected]>
@@ -8119,9 +9891,9 @@
 
 2004-01-12  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-get-article-as-string): updated to use
-	gnus-request-article-this-buffer, much simpler
-	(spam-get-article-as-buffer): removed
+	* spam.el (spam-get-article-as-string): Update to use
+	gnus-request-article-this-buffer, much simpler.
+	(spam-get-article-as-buffer): Remove.
 
 2004-01-12  Kai Grossjohann  <[email protected]>
 
@@ -8216,13 +9988,13 @@
 
 2004-01-09  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-generate-fake-headers): rewrite to be simpler,
-	also under 80 char limit, and call gnus-error if needed
-	(spam-fetch-article-header): finally fixed - it was a
-	buffer-local variable (gnus-newsgroup-data)
-	(spam-find-spam): use spam-generate-fake-headers, forget about
-	spam-insert-fake-headers
-	(spam-insert-fake-headers): removed
+	* spam.el (spam-generate-fake-headers): Rewrite to be simpler,
+	also under 80 char limit, and call gnus-error if needed.
+	(spam-fetch-article-header): Fix - it was a
+	buffer-local variable (gnus-newsgroup-data).
+	(spam-find-spam): Use spam-generate-fake-headers, forget about
+	spam-insert-fake-headers.
+	(spam-insert-fake-headers): Remove.
 
 2004-01-09  Jesper Harder  <[email protected]>
 
@@ -8238,9 +10010,9 @@
 	* spam.el (spam-fetch-field-fast, spam-fetch-field-from-fast)
 	(spam-fetch-field-subject-fast)
 	(spam-fetch-field-message-id-fast, spam-generate-fake-headers)
-	(spam-fetch-article-header): new functions to deal with Gnus
-	internals for fast retrieval of article header data
-	(spam-initialize): put spam-find-spam in the gnus-summary-prepared-hook
+	(spam-fetch-article-header): Add functions to deal with Gnus
+	internals for fast retrieval of article header data.
+	(spam-initialize): Put spam-find-spam in the gnus-summary-prepared-hook.
 
 2004-01-09  Jesper Harder  <[email protected]>
 
@@ -8298,17 +10070,17 @@
 	(spam-group-ham-mark-p, spam-group-spam-mark-p)
 	(spam-group-ham-marks, spam-group-spam-marks)
 	(spam-group-spam-contents-p, spam-group-ham-contents-p)
-	(spam-list-of-processors, spam-list-of-statistical-checks): doc
-	fix, also add spam-use-blackholes to the statistical checks
-	(spam-fetch-field-fast): new interface to fetching fields, may
-	become a macro
+	(spam-list-of-processors, spam-list-of-statistical-checks): Fix doc,
+	also add spam-use-blackholes to the statistical checks.
+	(spam-fetch-field-fast): Add interface to fetching fields, may
+	become a macro.
 	(spam-fetch-field-from-fast, spam-fetch-field-subject-fast)
-	(spam-fetch-field-message-id-fast): use spam-fetch-field-fast
-	(spam-insert-fake-headers): fake an article when needed
-	(spam-find-spam): fake article when possible
+	(spam-fetch-field-message-id-fast): Use spam-fetch-field-fast.
+	(spam-insert-fake-headers): Fake an article when needed.
+	(spam-find-spam): Fake article when possible.
 	(spam-check-blackholes, spam-check-BBDB, spam-from-listed-p)
-	(spam-check-bogofilter-headers): use message-fetch-field instead
-	of nnmail-fetch-field
+	(spam-check-bogofilter-headers): Use message-fetch-field instead
+	of nnmail-fetch-field.
 
 2004-01-07  Reiner Steib  <[email protected]>
 
@@ -8316,30 +10088,30 @@
 
 2004-01-07  Teodor Zlatanov  <[email protected]>
 
-	* spam.el (spam-split): do not require spam-use-CHECK to be
+	* spam.el (spam-split): Do not require spam-use-CHECK to be
 	enabled if that check is passed to spam-split explicitly; also
 	fix so 'spam doesn't get converted to spam-split-group when
-	spam-split-symbolic-return is t
-	(spam-find-spam): find registrations of the article and use those
+	spam-split-symbolic-return is t.
+	(spam-find-spam): Find registrations of the article and use those
 	instead of re-running spam-split to find the spam/ham
-	classification of the article
+	classification of the article.
 	(spam-log-processing-to-registry, spam-log-registered-p)
 	(spam-log-unregistration-needed-p, spam-log-undo-registration):
-	use gnus-error instead of gnus-message
-	(spam-log-registration-type): new function to determine the
+	Use gnus-error instead of gnus-message.
+	(spam-log-registration-type): Add function to determine the
 	classification of a message based on registry entries; will
-	return nil if both 'spam and 'ham are found
-	(spam-check-BBDB): expand all the BBDB macros here so we can have
-	a reasonably fast local cache without the loading errors
-	(spam-cache-lookups): set to t by default
-	(spam-find-spam): don't try to guess spam-cache-lookups
-	(spam-enter-whitelist, spam-enter-blacklist): also clear the
-	spam-caches entry
-	(spam-filelist-build-cache, spam-filelist-check-cache): better
-	caching of whitelist/blacklist entries
-	(spam-check-whitelist, spam-check-blacklist): invoke
-	spam-from-listed-p with a type, not a cache variable
-	(spam-from-listed-p): wrap around spam-filelist-check-cache
+	return nil if both 'spam and 'ham are found.
+	(spam-check-BBDB): Expand all the BBDB macros here so we can have
+	a reasonably fast local cache without the loading errors.
+	(spam-cache-lookups): Set to t by default.
+	(spam-find-spam): Don't try to guess spam-cache-lookups.
+	(spam-enter-whitelist, spam-enter-blacklist): Clear the
+	spam-caches entry.
+	(spam-filelist-build-cache, spam-filelist-check-cache): Fix
+	caching of whitelist/blacklist entries.
+	(spam-check-whitelist, spam-check-blacklist): Invoke
+	spam-from-listed-p with a type, not a cache variable.
+	(spam-from-listed-p): Wrap around spam-filelist-check-cache.
 
 2004-01-07  Jesper Harder  <[email protected]>
 
@@ -8407,14 +10179,13 @@
 2004-01-06  Teodor Zlatanov  <[email protected]>
 
 	* spam.el (spam-cache-lookups, spam-caches, spam-clear-cache):
-	first attempt at some caching support (done for BBDB only now)
-	(spam-find-spam): set spam-cache-lookups if there are more than 2
-	addresses to be checked
-	(spam-clear-cache-BBDB): new function, to be invoked by
-	bbdb-change-hook, and triggering spam-clear-cache of 'spam-use-BBDB
-	(spam-check-BBDB): check and use the caches, if
-	spam-cache-lookups is on
-	remove superfluous (provide)
+	Make attempt at some caching support (done for BBDB only now).
+	(spam-find-spam): Set spam-cache-lookups if there are more than 2
+	addresses to be checked.
+	(spam-clear-cache-BBDB): Add function, to be invoked by
+	bbdb-change-hook, and triggering spam-clear-cache of 'spam-use-BBDB.
+	(spam-check-BBDB): Check and use the caches, if
+	spam-cache-lookups is on, remove superfluous (provide).
 
 2004-01-06  Reiner Steib  <[email protected]>
 
@@ -8530,20 +10301,20 @@
 
 2004-01-05  Teodor Zlatanov  <[email protected]>
 
-	* netrc.el: autoload password-read
-	(netrc): new configuration group
-	(netrc-encoding-method, netrc-openssl-path): configuration
+	* netrc.el: Autoload password-read.
+	(netrc): Add configuration group.
+	(netrc-encoding-method, netrc-openssl-path): Add
 	variables for encoding and decoding of files with symmetric
-	ciphers
-	(netrc-encode): assistant function to encode a file with
-	netrc-encoding-method
-	(netrc-parse): added interactive parameter, added optional
+	ciphers.
+	(netrc-encode): Add assistant function to encode a file with
+	netrc-encoding-method.
+	(netrc-parse): Add interactive parameter, added optional
 	decoding if netrc-encoding-method is non-nil but otherwise
-	behavior is standard
+	behavior is standard.
 	(netrc-encrypting-method, netrc-encrypt, netrc-parse):
-	s/encode/encrypt/ everywhere
+	Do s/encode/encrypt/ everywhere.
 
-	* spam.el: remove executable-find autoload
+	* spam.el: Remove executable-find autoload.
 
 2004-01-05  Jesper Harder  <[email protected]>
 
@@ -8749,11 +10520,11 @@
 
 	* gnus.el (gnus-version-number): Bump version.
 
-2004-01-04 Lars Magne Ingebrigtsen <[email protected]>
+2004-01-04  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: No Gnus v0.1 is released.
 
-2004-01-04 Lars Magne Ingebrigtsen <[email protected]>
+2004-01-04  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: No Gnus v0.0 is released.
 
@@ -8764,12 +10535,29 @@
 
 See ChangeLog.2 for earlier changes.
 
-    Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
-  Copying and distribution of this file, with or without modification,
-  are permitted provided the copyright notice and this notice are preserved.
+    Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+
+  This file is part of GNU Emacs.
+
+  GNU Emacs is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+
+  GNU Emacs is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with GNU Emacs; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  Boston, MA 02110-1301, USA.
 
 ;; Local Variables:
 ;; coding: iso-2022-7bit
+;; fill-column: 79
+;; add-log-time-zone-rule: t
 ;; End:
 
 ;;; arch-tag: 3f33a3e7-090d-492b-bedd-02a1417d32b4
Index: gnus/lisp/ChangeLog.1
diff -u gnus/lisp/ChangeLog.1:7.4 gnus/lisp/ChangeLog.1:7.5
--- gnus/lisp/ChangeLog.1:7.4	Sun Sep 12 20:07:31 2004
+++ gnus/lisp/ChangeLog.1	Fri Oct 13 13:11:25 2006
@@ -12,10 +12,10 @@
 	* rfc2231.el: Ditto.
 	* smiley-ems.el: Ditto.
 	* uudecode.el: Ditto.
-	
+
 	* smiley-ems.el (smiley-region): Use mapcar.
 
-2000-10-27 Stefan Monnier <[email protected]>
+2000-10-27  Stefan Monnier  <[email protected]>
 
 	* ietf-drums.el: Require cl when compiling.
 
@@ -58,7 +58,7 @@
 	* rfc2047.el (rfc2047-q-encode-region): Don't break if a QP-word
 	could be fitted in one line.
 
-2000-10-25  Dirk Meyer <[email protected]>
+2000-10-25  Dirk Meyer  <[email protected]>
 
 	* gnus-demon.el (gnus-demon-time-to-step): theHour was set to
 	seconds instead of hour.
@@ -71,7 +71,7 @@
 
 	* gnus-art.el (gnus-request-article-this-buffer):
 	gnus-refer-article-method might be a single method.
-	* gnus-sum.el (gnus-refer-article-methods): The second could be 
+	* gnus-sum.el (gnus-refer-article-methods): The second could be
 	a named method.
 
 2000-10-23  Simon Josefsson  <[email protected]>
@@ -217,7 +217,7 @@
 	* gnus-audio.el: Don't require cl.
 	(gnus-audio): New custom group.
 	(gnus-audio-inline-sound): Change to work with Emacs.
-	(gnus-audio-directory, gnus-audio-directory) 
+	(gnus-audio-directory, gnus-audio-directory)
 	(gnus-audio-au-player):  Customize.
 	(gnus-audio-play): Try external player if play-sound-file fails.
 	Use file-name-extension, not string-match.
@@ -262,7 +262,7 @@
 	* gnus-util.el (gnus-kill-all-overlays): Move out.
 	* gnus-sum.el (gnus-cache-write-active): Auto load.
 	* lpath.el: Shut up.
-	* nnweb.el (nnweb-url-retrieve-asynch): url-retrieve is 
+	* nnweb.el (nnweb-url-retrieve-asynch): url-retrieve is
 	asynchronous in Exp version.
 
 2000-10-08 08:57:13  ShengHuo ZHU  <[email protected]>
@@ -277,7 +277,7 @@
 	(gnus-summary-select-article): Don't enable multibyte here.
 	(gnus-summary-goto-article): Ditto.
 
-2000-10-08 Christoph Conrad <[email protected]>
+2000-10-08  Christoph Conrad  <[email protected]>
 
 	* gnus-draft.el (gnus-draft-send-message): Typo.
 
@@ -313,7 +313,7 @@
 	* gnus-agent.el (gnus-agent-with-fetch): Bind it.
 	* gnus-score.el (gnus-score-body): Don't score body when
 	agent-fetching.
-	(gnus-score-followup): Don't score followup either. 
+	(gnus-score-followup): Don't score followup either.
 
 2000-10-07 08:19:17  ShengHuo ZHU  <[email protected]>
 
@@ -328,7 +328,7 @@
 	* gnus-audio.el: Don't require cl.
 	(gnus-audio): New custom group.
 	(gnus-audio-inline-sound): Change to work with Emacs.
-	(gnus-audio-directory, gnus-audio-directory) 
+	(gnus-audio-directory, gnus-audio-directory)
 	(gnus-audio-au-player):  Customize.
 	(gnus-audio-play): Try external player if play-sound-file fails.
 	Use file-name-extension, not string-match.
@@ -372,7 +372,7 @@
 
 	* webmail.el (webmail-type-definition): Fix my-deja open url.
 
-2000-10-06 Emerick Rogul <[email protected]>
+2000-10-06  Emerick Rogul  <[email protected]>
 
 	* message.el (message-setup-fill-variables): New variable.
 	(message-mode): Use it.
@@ -406,7 +406,7 @@
 
 	* webmail.el (webmail-hotmail-list): Fix.
 
-2000-10-05  Stefan Monnier <monnier+gnu/[email protected]>
+2000-10-05  Stefan Monnier  <monnier+gnu/[email protected]>
 
 	* nnimap.el (require): cl.
 
@@ -437,7 +437,7 @@
 
 	* gnus-art.el (gnus-mime-inline-part): Support prefix argument.
 
-2000-10-03  Katsumi Yamaoka <[email protected]>
+2000-10-03  Katsumi Yamaoka  <[email protected]>
 
 	* lpath.el: "." is in the load-path because dgnushack.el.
 
@@ -456,11 +456,11 @@
 	* gnus-audio.el: removed unnecessary xemacs test
 
 	* earcon.el: ditto
-	
+
 2000-10-03 19:55:55  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* nnweb.el (nnweb-decode-entities): Work for non-character
-	entities. 
+	entities.
 
 2000-09-26 09:20:08  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -562,7 +562,7 @@
 	gnus-mailing-list-subscribe, gnus-mailing-list-help): Bind list-*.
 	(gnus-mailing-list-menu): Define it.
 	(turn-on-gnus-mailing-list-mode, gnus-mailing-list-mode): Autoload.
-	
+
 	* gnus-xmas.el (gnus-xmas-mailing-list-menu-add): Move here.
 
 2000-09-30 18:52:51  ShengHuo ZHU  <[email protected]>
@@ -574,15 +574,15 @@
 	* nnimap.el (nnimap-request-accept-article): Remove \n's from
 	From_ lines.
 
-2000-08-05  Simon Josefsson <[email protected]>
+2000-08-05  Simon Josefsson  <[email protected]>
 
 	Make GCC to remote groups work when unplugged
 	(postpone GCC until message is actually sent).
 
 	* gnus-draft.el (gnus-draft-send): Call `gnus-agent-restore-gcc'.
 
-	* gnus-agent.el (gnus-agent-possibly-do-gcc): 
-	(gnus-agent-restore-gcc): 
+	* gnus-agent.el (gnus-agent-possibly-do-gcc):
+	(gnus-agent-restore-gcc):
 	(gnus-agent-possibly-save-gcc): New functions.
 
 	* gnus-msg.el (gnus-inews-add-send-actions): Use
@@ -592,7 +592,7 @@
 
 	* gnus.el (gnus-agent-gcc-header): New variable.
 
-2000-07-13  Simon Josefsson <[email protected]>
+2000-07-13  Simon Josefsson  <[email protected]>
 
 	Asks the user to synch flags with server when you plug in.
 
@@ -608,11 +608,11 @@
 
 	* starttls.el: New file, by Daiki Ueno.
 
-2000-08-02  Stanislav Shalunov <[email protected]>
+2000-08-02  Stanislav Shalunov  <[email protected]>
 
 	* message.el (message-make-in-reply-to): In-Reply-To is message-id
 	(see DRUMS).
-	
+
 2000-09-29  Simon Josefsson  <[email protected]>
 
 	* nntp.el (nntp-async-trigger): Fix authinfo in asynchronous
@@ -637,7 +637,7 @@
 
 	* gnus-agent.el (gnus-agent-fetch-group-1): Reimplement Mike
 	  McEwan's proposal.
-	
+
 2000-09-29 12:06:40  ShengHuo ZHU  <[email protected]>
 
 	* gnus-agent.el: Revoke Mike McEwan's 1998-09-05 patch due to
@@ -651,14 +651,13 @@
 
 	* gnus-sum.el (gnus-summary-enter-digest-group): Decode to-address.
 
-2000-09-28  Kai Gro,A_(Bjohann  <[email protected]>
+2000-09-28  Andrei Elkin  <[email protected]>  (tiny change)
 
 	* gnus-art.el (article-strip-banner): Use
 	gnus-group-find-parameter rather than gnus-group-get-parameter, to
 	allow inheritance on the banner.
-	From [email protected].
 
-2000-09-26  Richard M. Alderson III <[email protected]> 
+2000-09-26  Richard M. Alderson III  <[email protected]>
 
 	* gnus-art.el (gnus-read-save-file-name): expand-file-name.
 
@@ -720,14 +719,14 @@
 	* nnkiboze.el (nnkiboze-generate-group): Use it. Inhibit list groups.
 	(nnkiboze-enter-nov): Fix it when there is no xref.
 	(nnkiboze-generate-groups): List groups.
-	* gnus-group.el (gnus-group-make-kiboze-group): Use 
+	* gnus-group.el (gnus-group-make-kiboze-group): Use
 	nnkiboze-score-file.
-	
+
 	* nnkiboze.el (nnkiboze-request-article): Use
 	gnus-cache-request-article.
 	* gnus-group.el (gnus-group-make-kiboze-group): Fix prompt.
 
-2000-07-16 Dmitry Bely <[email protected]>
+2000-07-16  Dmitry Bely  <[email protected]>
 
 	* nnheader.el (nnheader-translate-file-chars): Path splitting on NT.
 
@@ -788,8 +787,8 @@
 	smiley-toggle-extent-ems, smiley-toggle-extents-ems,
 	smiley-toggle-buffer-ems): New functions for Emacs 21. Toggle
 	functions are not implemented yet.
-	
-	* dgnushack.el (dgnushack-compile): Remove smiley.el and 
+
+	* dgnushack.el (dgnushack-compile): Remove smiley.el and
 	x-overlay.el from the FSF Emacs black list.
 
 2000-09-15 21:10:20  ShengHuo ZHU  <[email protected]>
@@ -797,11 +796,11 @@
 	* mm-decode.el (mm-inlined-types): Add application/emacs-lisp.
 	(mm-inline-media-tests): Ditto.
 	(mm-automatic-display): Ditto.
-	* mm-view.el (mm-display-inline-fontify): Generalize from 
-	mm-display-patch-inline. 
+	* mm-view.el (mm-display-inline-fontify): Generalize from
+	mm-display-patch-inline.
 	(mm-display-patch-inline): Use it.
 	(mm-display-elisp-inline): Ditto.
-	
+
 2000-09-15 14:03:00  ShengHuo ZHU  <[email protected]>
 
 	* gnus-topic.el (gnus-topic-find-groups): Add recursive parameter.
@@ -818,10 +817,10 @@
 
 	* gnus-group.el (gnus-group-rename-group): Inhibit renaming of
 	zombie or killed groups.
-	
+
 2000-09-15 00:09:56  ShengHuo ZHU  <[email protected]>
 
-	* mml.el (mml-preview): Reinsert unibyte content. 
+	* mml.el (mml-preview): Reinsert unibyte content.
 	(mml-parse-1): Remove with-unibyte-current-buffer.
 	(mml-generate-mime-1): Ditto.
 	* gnus-msg.el (gnus-summary-mail-forward): Ditto.
@@ -845,7 +844,7 @@
 	(gnus-summary-save-parts-last-directory): New.
 	(gnus-summary-save-parts): Save history.
 
-2000-09-14 Ben Gertzfield <[email protected]>
+2000-09-14  Ben Gertzfield  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-save-parts-default-mime): New
 	variable.
@@ -899,7 +898,7 @@
 	`format'.
 	(mm-content-transfer-encoding): Don't use cadar.
 
-	* uudecode.el (uudecode-decoder-program) 
+	* uudecode.el (uudecode-decoder-program)
 	(uudecode-decoder-switches): Customize.
 
 	* gnus-score.el (gnus-home-score-file): Improve custom type.
@@ -916,7 +915,7 @@
 2000-09-13 09:14:57  ShengHuo ZHU  <[email protected]>
 
 	* nnmail.el (nnmail-get-new-mail): Don't test nnmail-spool-file.
-	
+
 	* gnus-cache.el (gnus-jog-cache): Temporarily disable mail-sources.
 	* gnus-kill.el (gnus-batch-score): Ditto.
 	* gnus-move.el (gnus-change-server): Ditto.
@@ -950,7 +949,7 @@
 	getting the nnimap-server-buffer and once for letting n-c-s set
 	the variables in that buffer.
 
-2000-09-08  David Edmondson <[email protected]>
+2000-09-08  David Edmondson  <[email protected]>
 
 	* gnus.el (gnus-short-group-name): Guess separator.
 
@@ -959,7 +958,7 @@
 	* smiley.el (smiley-buffer, smiley-create-glyph): Work with GTK
 	XEmacs as well.
 
-2000-09-06  Francis Litterio <[email protected]>
+2000-09-06  Francis Litterio  <[email protected]>
 
 	* gnus-group.el (gnus-group-insert-group-line): Fix.
 
@@ -989,9 +988,12 @@
 	* gnus-agent.el (gnus-agent-union): new function.
 	(gnus-agent-fetch-headers): Use it.
 
+	* gnus.el (gnus-group-startup-message): Modifications to last change.
+
+2000-08-29  Katsumi Yamaoka  <[email protected]>
+
 	* gnus.el (gnus-group-startup-message): Specify foreground and
 	background for xpm image.  Centre image vertically.
-	From Katsumi Yamaoka <[email protected]> with mods.
 
 2000-08-24 23:49:23  ShengHuo ZHU  <[email protected]>
 
@@ -1047,9 +1049,9 @@
 
 	* nnimap.el (nnimap-before-find-minmax-bugworkaround): New
 	function, thanks to Lloyd Zusman for debugging.
-	(nnimap-request-group): 
-	(nnimap-request-list): 
-	(nnimap-retrieve-groups): 
+	(nnimap-request-group):
+	(nnimap-request-list):
+	(nnimap-retrieve-groups):
 	(nnimap-request-newgroups): Use it.
 
 	* nnimap.el (nnimap-request-article-part): Less verbose.
@@ -1058,7 +1060,7 @@
 
 	* lpath.el ((string-match "XEmacs" emacs-version)): Remove
 	subst-char-in-string since we test elsewhere whether it's bound.
-	
+
 2000-08-18  Dave Love  <[email protected]>
 
 	* gnus-score.el (gnus-score-find-score-files-function): Fix doc,
@@ -1070,7 +1072,7 @@
 	* nnheader.el (nnheader-replace-chars-in-string): Use
 	subst-char-in-string if available.
 
-	* gnus-art.el (gnus-read-save-file-name, gnus-plain-save-name) 
+	* gnus-art.el (gnus-read-save-file-name, gnus-plain-save-name)
 	(gnus-request-article-this-buffer): Use expand-file-name.
 	(gnus-mime-view-part-as-type): Simplify interactive spec.
 	(gnus-mime-button-map): Define it all in defvar.
@@ -1119,7 +1121,7 @@
 
 	* nnmail.el (nnmail-expiry-target-group): Fixed.
 
-2000-08-14  Rod Whitby <[email protected]>
+2000-08-14  Rod Whitby  <[email protected]>
 
 	* nnmail.el (nnmail-expiry-target-group): Fix the call to
 	gnus-request-accept-article so that body encoding is *not* done.
@@ -1127,7 +1129,7 @@
 	expired mail?
 
 
-2000-08-14  Rod Whitby <[email protected]>
+2000-08-14  Rod Whitby  <[email protected]>
 
 	* nnml.el (nnml-request-expire-articles): Fix the calls to
 	nnml-request-article (the filename was being passed instead of the
@@ -1135,10 +1137,10 @@
 	(nnml-current-directory is changed by nnml-request-accept-article,
 	causing it to be incorrect for the next article to be expired).
 
-2000-08-14  Rod Whitby <[email protected]>
+2000-08-14  Rod Whitby  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-expire-articles): Fix the handling of
-	expiry-target group parameters. 
+	expiry-target group parameters.
 
 2000-08-13 18:53:08  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -1152,7 +1154,7 @@
 2000-08-12 21:48:00  John H. Palmieri  <[email protected]>
 
 	* mail-source.el (mail-source-incoming-file-prefix): New
-	variable. 
+	variable.
 
 2000-08-12 20:29:53  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -1162,7 +1164,7 @@
 
 2000-08-11  Florian Weimer  <[email protected]>
 
-	* message.el (message-syntax-checks): New check quotin-style: 
+	* message.el (message-syntax-checks): New check quotin-style:
 	Text must be written below quoted text.
 	(message-check-news-body-syntax): Check it.
 
@@ -1184,15 +1186,15 @@
 	list of unexpired articles.
 
 	* gnus-group.el (gnus-group-expire-articles-1): Return the list of
-	un-expired articles. 
+	un-expired articles.
 
 	* gnus-sum.el (gnus-summary-reparent-thread): Narrow to the
-	headers. 
+	headers.
 
 	* gnus-topic.el (gnus-topic-kill-group): Move up one line so that
-	we update the right topic.. 
+	we update the right topic..
 
-	* mm-decode.el (mm-display-external): Put point at start. 
+	* mm-decode.el (mm-display-external): Put point at start.
 
 2000-08-10  Kai Gro,A_(Bjohann  <[email protected]>
 
@@ -1200,7 +1202,7 @@
 
 	* gnus-cus.el (gnus-group-parameters): Add parameter `expiry-wait'.
 
-2000-08-09  Simon Josefsson <[email protected]>
+2000-08-09  Simon Josefsson  <[email protected]>
 
 	* imap.el (imap-parse-body):
 	(imap-parse-string-list): Add bug workarounds for Stalker
@@ -1221,7 +1223,7 @@
 
 2000-08-07 09:37:01  ShengHuo ZHU  <[email protected]>
 
-	* gnus-group.el (gnus-group-iterate): Uncompiled function should 
+	* gnus-group.el (gnus-group-iterate): Uncompiled function should
 	not use pop.
 
 2000-07-19  Dave Love  <[email protected]>
@@ -1231,7 +1233,7 @@
 	check.
 	(gnus-article-display-xface): Special-case for dark backgrounds.
 
-2000-07-19  Kim-Minh Kaplan <[email protected]>
+2000-07-19  Kim-Minh Kaplan  <[email protected]>
 
 	* imap.el (imap-calculate-literal-size-first): New variable.
 	(imap-local-variables): Add it.
@@ -1261,15 +1263,15 @@
 
 	* gnus-cus.el (gnus-group-parameters, banner): Type is regexp.
 
-	* imap.el (imap): 
-	(imap-kerberos4-program): 
-	(imap-gssapi-program): 
+	* imap.el (imap):
+	(imap-kerberos4-program):
+	(imap-gssapi-program):
 	(imap-ssl-program): Customization.
-	(imap-shell-program): 
+	(imap-shell-program):
 	(imap-shell-host): New variables.
-	(imap-streams): 
+	(imap-streams):
 	(imap-stream-alist): Add shell.
-	(imap-shell-p): 
+	(imap-shell-p):
 	(imap-shell-open): New functions.
 	(imap-open): Don't call authenticator if preauth.
 	(imap-authenticate): Return t if already authenticated.
@@ -1281,7 +1283,7 @@
 
 2000-07-14 12:40:51  ShengHuo ZHU  <[email protected]>
 
-	* gnus-agent.el (gnus-agent-fetch-group-1): mark-below, 
+	* gnus-agent.el (gnus-agent-fetch-group-1): mark-below,
 	expunge-below and orphan-score are "group variables".
 
 2000-07-13  Simon Josefsson  <[email protected]>
@@ -1330,7 +1332,7 @@
 2000-07-10 22:41:58  ShengHuo ZHU  <[email protected]>
 
 	* nnslashdot.el (nnslashdot-threaded-retrieve-headers): Save point.
-	* webmail.el (webmail-fetch): Bind 
+	* webmail.el (webmail-fetch): Bind
 	url-http-silence-on-insecure-redirection.
 
 2000-07-10 11:43:22  ShengHuo ZHU  <[email protected]>
@@ -1340,9 +1342,9 @@
 	(nnslashdot-sane-retrieve-headers): Ditto.
 	(nnslashdot-request-article): Ditto.
 
-2000-07-10 11:12:32  William M. Perry <[email protected]>
+2000-07-10 11:12:32  William M. Perry  <[email protected]>
 
-	* mailcap.el (mailcap-parse-mimetype-file): 
+	* mailcap.el (mailcap-parse-mimetype-file):
 
 2000-07-07 23:46:22  ShengHuo ZHU  <[email protected]>
 
@@ -1389,7 +1391,7 @@
 
 	* nnslashdot.el (nnslashdot-sid-strip): To strip or not to strip?
 
-2000-07-03  Stainless Steel Rat <[email protected]>
+2000-07-03  Stainless Steel Rat  <[email protected]>
 
 	* gnus-sum.el (gnus-recenter): Fix horizontal recenter.
 
@@ -1406,19 +1408,19 @@
 	(nnimap-split-find-rule): Fix.
 	(nnimap-open-connection): Look for nnimap-server-address in authinfo.
 
-2000-07-03  Paul Stodghill <[email protected]>
+2000-07-03  Paul Stodghill  <[email protected]>
 
 	* message.el (message-unquote-tokens): Remove all quotes.
 
 2000-07-03 00:29:08  Julien Gilles  <[email protected]>
 
-	* gnus-ml.el: New file. 
+	* gnus-ml.el: New file.
 
 2000-07-02 16:11:25  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* nnultimate.el (nnultimate-request-close): New function.
 
-	* gnus-start.el (gnus-clear-system): Clear nnmail-split-history. 
+	* gnus-start.el (gnus-clear-system): Clear nnmail-split-history.
 
 2000-06-18  Norbert Koch  <[email protected]>
 
@@ -1453,13 +1455,13 @@
 	* gnus-util.el (gnus-netrc-machine): Add defaultport parameter,
 	document port and defaultport.
 
-2000-06-27  Paul Stodghill <[email protected]>
+2000-06-27  Paul Stodghill  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-synchronize): Kill flags buffer.
 
 2000-06-26  Dave Love  <[email protected]>
 
-	* mm-decode.el (mm-image-fit-p): Use `image-size' in Emacs. 
+	* mm-decode.el (mm-image-fit-p): Use `image-size' in Emacs.
 
 	* message.el: Remove unnecessary `require'ments.  Defvar
 	gnus-list-identifiers when compiling.  Don't try to autoload
@@ -1489,7 +1491,7 @@
 
 	* nnimap.el (nnimap-request-post): Fix parenthesis.
 
-2000-06-26  Paul Stodghill <[email protected]>
+2000-06-26  Paul Stodghill  <[email protected]>
 
 	* message.el (message-unquote-tokens): New function.
 
@@ -1531,7 +1533,7 @@
 
 	* gnus-cus.el (gnus-extra-group-parameters): Add uidvalidity.
 
-2000-06-08 12:34:26  Urban Engberg <[email protected]>
+2000-06-08 12:34:26  Urban Engberg  <[email protected]>
 
 	* gnus-demon.el (gnus-demon-scan-mail): Bind nnmail-fetched-sources.
 
@@ -1605,7 +1607,7 @@
 	* gnus-start.el (gnus-get-unread-articles): If
 	`gnus-activate-group' and/or `gnus-check-server' return nil, don't
 	try to do anything on that server.
-	
+
 2000-05-25  Simon Josefsson  <[email protected]>
 
 	* gnus-group.el (gnus-group-nnimap-edit-acl): Help text updated
@@ -1655,7 +1657,7 @@
 	* gnus-group.el (gnus-group-mode-map): Add M-SPACE.
 	* mml.el (mml-mode-map): Comment out mml-narrow-to-part.
 
-2000-05-17 21:13:38 Jim Davidson <[email protected]>
+2000-05-17 21:13:38  Jim Davidson  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-save-article-rmail): Use
 	gnus-summary-save-in-rmail.
@@ -1673,7 +1675,7 @@
 	* gnus-msg.el (gnus-post-news): Decode group name.
 	(gnus-inews-do-gcc): Encode group name.
 
-2000-05-17 10:16:32  Karl Kleinpaste <[email protected]>
+2000-05-17 10:16:32  Karl Kleinpaste  <[email protected]>
 
 	* gnus-art.el (gnus-emphasize-whitespace-regexp): New variable.
 	* gnus-util.el (gnus-put-text-property-excluding-newlines): Use it.
@@ -1722,7 +1724,7 @@
 	(gnus-group-edit-group): Use it.
 	* gnus-cus.el (gnus-group-customize): Use it.
 
-2000-05-16 17:55:57  Karl Kleinpaste <[email protected]>
+2000-05-16 17:55:57  Karl Kleinpaste  <[email protected]>
 
 	* gnus-util.el (gnus-put-text-property-excluding-newlines): Improve.
 
@@ -1803,7 +1805,7 @@
 
 	* webmail.el: Translate &nbsp; to SP.
 
-2000-05-13 13:00:17  Robin S. Socha <[email protected]>
+2000-05-13 13:00:17  Robin S. Socha  <[email protected]>
 
 	* message.el (message-bounce): Doc typo.
 
@@ -2106,7 +2108,7 @@
 	* message.el (message-send-mail-partially-limit): Change the
 	default value.
 
-2000-04-27 21:53:32  Erik Toubro Nielsen <[email protected]>
+2000-04-27 21:53:32  Erik Toubro Nielsen  <[email protected]>
 
 	* gnus-util.el (gnus-extract-address-components): Name might be
 	"".
@@ -2183,7 +2185,7 @@
 	* gnus-draft.el (gnus-draft-send): Move gnus-draft-setup inside of
 	let.
 
-2000-04-26 12:26:10  Pavel Janik ml. <[email protected]>
+2000-04-26 12:26:10  Pavel Janik ml.  <[email protected]>
 
 	* gnus-draft.el (gnus-draft-setup): Fix comments.
 
@@ -2584,7 +2586,7 @@
 	password provided in mail-sources; use webmail:subtype:user as
 	the key.
 
-2000-04-10 20:35:46  John Wiegley <[email protected]>
+2000-04-10 20:35:46  John Wiegley  <[email protected]>
 
 	* mail-source.el (mail-source-fetch-webmail): Use
 	mail-source-password-cache.
@@ -2652,7 +2654,7 @@
 	* nnimap.el (nnimap-retrieve-headers-progress): Fold continuation
 	lines and turn TAB into SPC before parsing.
 
-2000-03-15  Simon Josefsson <[email protected]>
+2000-03-15  Simon Josefsson  <[email protected]>
 
 	* nnheader.el (nnheader-group-pathname): Make sure to return a
 	directory.
@@ -2811,12 +2813,12 @@
 
 	* mailcap.el (mailcap-mime-extensions): Add .diff.
 
-2000-01-06 00:06:40 Kim-Minh Kaplan <[email protected]>
+2000-01-06 00:06:40  Kim-Minh Kaplan  <[email protected]>
 
         * mm-decode.el (mm-mailcap-command): handle "%%" and the case where
         there is no "%s" in the method.
 
-2000-01-08 21:01:04  Kim-Minh Kaplan <[email protected]>
+2000-01-08 21:01:04  Kim-Minh Kaplan  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-select-article): Return 'old.
 
@@ -3186,7 +3188,7 @@
 	* nnslashdot.el: Use nnweb-decode-entities-string.
 	(nnslashdot-decode-entities): Remove.
 
-1999-12-13 10:40:56  Eric Marsden <[email protected]>
+1999-12-13 10:40:56  Eric Marsden  <[email protected]>
 
 	* nnslashdot.el: Decode entities.
 
@@ -3614,7 +3616,7 @@
 	* nnweb.el (nnweb-dejanews-create-mapping): Set a default date in
  	case matching failed.
 
-1999-12-02  John Wiegley <[email protected]>
+1999-12-02  John Wiegley  <[email protected]>
 
 	* mail-source.el (mail-source-keyword-map): Add backslash to
 	Delete-flag.
@@ -4020,7 +4022,7 @@
 	* mm-util.el (mm-find-mime-charset-region): Use UTF-8 if
 	it's available and makes sense.
 
-1999-11-12 19:56:23  Fabrice POPINEAU <[email protected]>
+1999-11-12 19:56:23  Fabrice POPINEAU  <[email protected]>
 
 	* gnus-score.el (gnus-score-save): Translate score file.
 
@@ -4238,7 +4240,7 @@
 
 	* emacs-mime.texi (Customization): Document mm-inline-override-types
 
-1999-10-26  Katsumi Yamaoka <[email protected]>
+1999-10-26  Katsumi Yamaoka  <[email protected]>
 
 	* smiley.el (gnus-smiley-display): Use `smiley-toggle-buffer'.
 	(smiley-toggle-buffer): New function.
@@ -4263,12 +4265,12 @@
 
 	* gnus-uu.el (gnus-uu-mark-thread): Don't move point around.
 
-1999-10-07  Katsumi Yamaoka <[email protected]>
+1999-10-07  Katsumi Yamaoka  <[email protected]>
 
 	* gnus-art.el (gnus-treat-predicate): Examine whether the argument
 	is list or not before condition.
 
-1999-10-07  Yoshiki Hayashi <[email protected]>
+1999-10-07  Yoshiki Hayashi  <[email protected]>
 
 	* gnus-art.el (gnus-treat-predicate): Work for (typep "something").
 
@@ -4635,7 +4637,7 @@
 
 	* nnmail.el (nnmail-process-maildir-mail-format): Typo.
 
-1999-09-09  Jens-Ulrik Petersen <[email protected]>
+1999-09-09  Jens-Ulrik Petersen  <[email protected]>
 
 	* gnus-msg.el (gnus-configure-posting-styles): Let
 	`gnus-posting-styles' have its say in posting-style: local
@@ -4703,7 +4705,7 @@
 
 	* gnus-art.el (gnus-treat-predicate): Work for (not 5).
 
-1999-08-27  Peter von der Ahe <[email protected]>
+1999-08-27  Peter von der Ahe  <[email protected]>
 
 	* message.el (message-send): More helpful error message if sending
 	fails
@@ -5042,7 +5044,7 @@
         start with gnus-group-split.
         * gnus.el: Adjust autoload entries.
 
-1999-07-07 ??:??:??  Alexandre Oliva  <[email protected]>
+1999-07-07  Alexandre Oliva  <[email protected]>
 
 	* gnus-mlspl.el: Removed trailing t from comment and provide.
 	Renamed functions and variables to start with gnus-mlsplit.
@@ -6458,7 +6460,7 @@
 	* mail-source.el (mail-source-fetch-pop): Instead use
 	:authentication.
 
-1999-02-01  Tatsuya Ichikawa <[email protected]>
+1999-02-01  Tatsuya Ichikawa  <[email protected]>
 
 	* lisp/mail-source.el : Support APOP authentication scheme.
 
@@ -6932,7 +6934,7 @@
 
 	* gnus-agent.el (gnus-category-write): Make directory.
 
-1998-09-26 19:39:31 Simon Josefsson <[email protected]>
+1998-09-26 19:39:31  Simon Josefsson  <[email protected]>
 
 	* gnus-sum.el (gnus-update-read-articles):
 	(gnus-update-marks): Request backend update of mark.
@@ -8841,7 +8843,7 @@
 
 	* gnus-draft.el (gnus-draft-send): Allow mail.
 
-1998-10-10 -SL Baur  <[email protected]>
+1998-10-10  SL Baur  <[email protected]>
 
 	* message.el (message-check): Move message-check macro above where
 	it is first used.
@@ -9375,7 +9377,7 @@
 
 	* gnus.el: Pterodactyl Gnus v0.27 is released.
 
-1998-09-11 12:42:07  Lars Magne Ingebrigtsen- <[email protected]>
+1998-09-11 12:42:07  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* mm-decode.el (mm-alternative-precedence): New variable.
 	(mm-preferred-alternative): New function.
@@ -10098,7 +10100,7 @@
     Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
   Copying and distribution of this file, with or without modification,
   are permitted provided the copyright notice and this notice are preserved.
-	
+
 ;; Local Variables:
 ;; coding: iso-2022-7bit
 ;; End:
Index: gnus/lisp/ChangeLog.2
diff -u gnus/lisp/ChangeLog.2:7.7 gnus/lisp/ChangeLog.2:7.15
--- gnus/lisp/ChangeLog.2:7.7	Wed Oct  5 00:52:26 2005
+++ gnus/lisp/ChangeLog.2	Mon Mar 12 01:39:28 2007
@@ -1,4 +1,4 @@
-2004-01-04 Lars Magne Ingebrigtsen <[email protected]>
+2004-01-04  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Gnus v5.10.6 is released.
 
@@ -10,7 +10,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2004-01-04 Lars Magne Ingebrigtsen <[email protected]>
+2004-01-04  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Gnus v5.10.5 is released.
 
@@ -58,7 +58,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2004-01-03 Lars Magne Ingebrigtsen <[email protected]>
+2004-01-03  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Gnus v5.10.4 is released.
 
@@ -76,15 +76,14 @@
 
 	* smime.el (smime-crl-check): Doc fix.
 
-2004-01-02  Edwin Steiner  <[email protected]>
+2004-01-02  Edwin Steiner  <[email protected]>  (tiny change)
 
 	* gnus-nocem.el (gnus-nocem-enter-article): Use the real group
-	hashtb (tiny patch).
+	hashtb.
 
-2004-01-02  Kai Grossjohann  <[email protected]>
+2004-01-02  Michael Albinus  <[email protected]>
 
-	* nnml.el (nnml-save-mail): Grok compressed articles.  From
-	Michael Albinus <[email protected]>.
+	* nnml.el (nnml-save-mail): Grok compressed articles.
 
 2004-01-02  Teodor Zlatanov  <[email protected]>
 
@@ -144,20 +143,16 @@
 	(gnus-summary-goto-article): Allow `%40'.
 	(gnus-summary-refer-article): Convert `%40' to `@'.
 
-2003-12-30  Simon Josefsson  <[email protected]>
+2003-12-30  Arne J,Ax(Brgensen  <[email protected]>
 
 	* smime.el (smime-crl-check): New.
-	(smime-verify-region): Use it.  From Arne J,Ax(Brgensen
-	<[email protected]> in <[email protected]> (tiny
-	change).
+	(smime-verify-region): Use it.
 
 2003-12-30  Reiner Steib  <[email protected]>
 
-	* gnus-score.el (gnus-score-edit-file-at-point): Consider the
-	whole match element.  From Karl Pfl,Ad(Bsterer <[email protected]>.
-	(gnus-score-find-trace): Use it.  Added `f' and `t' commands,
-	added quick help.  With some suggestions from Karl Pfl,Ad(Bsterer
-	<[email protected]>.
+	(gnus-score-find-trace): Use gnus-score-edit-file-at-point.  Added
+	`f' and `t' commands, added quick help.  With some suggestions
+	from Karl Pfl,Ad(Bsterer <[email protected]>.
 
 	* gnus-util.el (gnus-emacs-version): Added doc-string.
 
@@ -165,6 +160,11 @@
 	(mml-attach-file): Use it.
 	(mml-preview): Added MIME preview to gnus-buffers.
 
+2003-12-30  Karl Pfl,Ad(Bsterer  <[email protected]>
+
+	* gnus-score.el (gnus-score-edit-file-at-point): Consider the
+	whole match element.
+
 2003-12-30  Jesper Harder  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-make-menu-bar): Add ellipses.
@@ -179,7 +179,7 @@
 	(gnus-secondary-method-p): Extend servers to methods before comparing.
 	(gnus-secondary-method-p): Revert.
 
-2003-12-30 Lars Magne Ingebrigtsen <[email protected]>
+2003-12-30  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Gnus v5.10.3 is released.
 
@@ -189,7 +189,7 @@
 	Suggested by Steinar Bang <[email protected]>.
 	(gnus-agent-auto-agentize-methods): Customize.
 
-2003-12-29  Kevin Greiner <[email protected]>
+2003-12-29  Kevin Greiner  <[email protected]>
 	* gnus.el (gnus-server-to-method): Fixed bug in 2003-12-22
 	check-in.
 
@@ -210,10 +210,9 @@
 	* mml1991.el (mml1991-pgg-encrypt): Decode according to CTE before
 	encrypting.
 
-2003-12-28  Jesper Harder  <[email protected]>
+2003-12-28  Ivan Boldyrev  <[email protected]>  (tiny change).
 
 	* mml1991.el (mml1991-pgg-sign): Use unibyte when re-encoding.
-	From Ivan Boldyrev <[email protected]> (tiny change).
 
 2003-12-26  Katsumi Yamaoka  <[email protected]>
 
@@ -243,7 +242,7 @@
 	* dgnushack.el (dgnushack-compile): Increase the value for
 	max-specpdl-size when compiling Gnus with Emacs 20.
 
-2003-12-22  Kevin Greiner <[email protected]>
+2003-12-22  Kevin Greiner  <[email protected]>
 	* gnus-int.el (gnus-open-server): Fixed the server status such
 	that an agentized server, when opened offline, has a status of
 	offline.  Also fixes bug whereby the agent's backend was called
@@ -268,7 +267,7 @@
 	* gnus-agent.el (gnus-agent-read-agentview): Use
 	car-less-than-car.
 
-2003-12-20  Artem Chuprina <[email protected]>  (tiny change)
+2003-12-20  Artem Chuprina  <[email protected]>  (tiny change)
 
 	* message.el (message-yank-buffer): Bind message-reply-buffer to
 	a buffer rather than a string.
@@ -379,7 +378,7 @@
 
 	* pgg.el (pgg-run-at-time): Ditto.
 
-2003-12-11  Kevin Greiner <[email protected]>
+2003-12-11  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-possibly-alter-active): New Function.
 	(gnus-agent-regenerate-group): When necessary, alter the group's
@@ -401,17 +400,14 @@
 
 	* message.el (message-get-reply-headers): Narrow to headers.
 
-2003-12-10  Teodor Zlatanov  <[email protected]>
+2003-12-10  L,Bu(Brentey K,Ba(Broly  <[email protected]>
 
-	* spam.el (spam-disable-spam-split-during-ham-respool): new
-	variable.  From [email protected] (L,Bu(Brentey K,Ba(Broly)
-	(spam-ham-copy-or-move-routine): respect
-	spam-disable-spam-split-during-ham-respool.  From
-	[email protected] (L,Bu(Brentey K,Ba(Broly)
-	(spam-split-disabled): new variable.  From
-	[email protected] (L,Bu(Brentey K,Ba(Broly)
-	(spam-split): respect spam-split-disabled.  From
-	[email protected] (L,Bu(Brentey K,Ba(Broly)
+	* spam.el (spam-disable-spam-split-during-ham-respool): New
+	variable.
+	(spam-ham-copy-or-move-routine): Respect
+	spam-disable-spam-split-during-ham-respool.
+	(spam-split-disabled): New variable.
+	(spam-split): Respect spam-split-disabled.
 
 2003-12-10  Katsumi Yamaoka  <[email protected]>
 
@@ -427,19 +423,21 @@
 	input.
 	(pgg-decode-armor-region): Don't parse packet if decoding fail.
 
-2003-12-09  Teodor Zlatanov  <[email protected]>
+2003-12-09  L,Bu(Brentey K,Ba(Broly  <[email protected]>
 
 	* spam.el (spam-check-bogofilter): run in the correct buffer.
-	From [email protected] (L,Bu(Brentey K,Ba(Broly).
-	(spam-bogofilter-database-directory): correct customization
-	group.  From Xavier Maillard <[email protected]>.
+
+2003-12-09  Xavier Maillard  <[email protected]>
+
+	* spam.el (spam-bogofilter-database-directory): correct
+	customization group.
 
 2003-12-09  Per Abrahamsen  <[email protected]>
 
 	* nnmail.el (nnmail-lazy, nnmail-split-fancy): New widgets.
 	(nnmail-split-fancy): Use it.
 
-2003-12-08  Joel Ray Holveck <[email protected]>  (tiny change)
+2003-12-08  Joel Ray Holveck  <[email protected]>  (tiny change)
 
 	* gnus-sum.el (gnus-summary-save-parts-1): Consider the "name"
 	parameter of Content-Type.
@@ -465,12 +463,15 @@
 	* mml-smime.el (mml-smime-sign): Replace CRLF with LF in OpenSSL
 	output.  Reported by Arne J,Ax(Brgensen <[email protected]>.
 
-2003-12-07  Simon Josefsson  <[email protected]>
+2003-12-07  Lloyd Zusman <[email protected]>  (tiny change)
 
 	* pgg-gpg.el (pgg-gpg-recipient-arg): Add.
-	(pgg-gpg-encrypt-region): Use it.  Tiny patch from Lloyd Zusman
-	<[email protected]>.
-	(pgg-gpg-recipient-argument): Doc fix.  Renamed fro p-g-r-a.
+	(pgg-gpg-encrypt-region): Use it.
+
+2003-12-07  Simon Josefsson  <[email protected]>
+
+	* pgg-gpg.el (pgg-gpg-recipient-argument): Doc fix.
+	Renamed from p-g-r-a.
 	(pgg-gpg-encrypt-region): Update.
 
 2003-12-07  Jesper Harder  <[email protected]>
@@ -509,32 +510,32 @@
 	* gnus-util.el: Require alist and provide tm-view when compiling
 	with XEmacs.
 
-2003-12-03  Steve Youngs  <[email protected]>
+2003-12-03  Jerry James  <[email protected]>  (tiny change)
 
 	* gnus-xmas.el: Add autoloads for macros defined in gnus.el.
-	From Jerry James <[email protected]>.
 
 	* gnus-util.el: Get rmail definitions when compiling.
-	From Jerry James <[email protected]>.
 
 	* dns.el: Require gnus-xmas at compile time instead of trying to
 	autoload `gnus-xmas-open-network-stream' because it wasn't picking
 	up the macro.
-	From Jerry James <[email protected]>.
 
-2003-12-01  Kevin Greiner <[email protected]>
+2003-12-01  Kevin Greiner  <[email protected]>
+
 	* gnus-agent.el (gnus-agent-consider-all-articles): Updated
 	docstring.
 	(gnus-predicate-implies-unread, gnus-predicate-implies-unread-1):
 	Fixed implementation such that the predicate `true' no longer
 	evaluates to t.
 
-2003-12-01  Teodor Zlatanov  <[email protected]>
+2003-12-01  Adrian Lanz  <[email protected]>  (tiny change)
 
 	* spam.el (spam-check-bogofilter): check the bogofilter headers
-	AFTER the save-excursion scope is over.  From Adrian Lanz
-	<[email protected]>.
-	(spam-fetch-field-message-id-fast): doc fix
+	AFTER the save-excursion scope is over.
+
+2003-12-01  Teodor Zlatanov  <[email protected]>
+
+	* spam.el (spam-fetch-field-message-id-fast): Doc fix
 
 2003-12-01  Simon Josefsson  <[email protected]>
 
@@ -549,24 +550,26 @@
 	(gnus-agent-expire-group-1): Only print a message for an article
 	when there actually was something done to it.
 
+	* gnus-agent.el (gnus-agent-expire-unagentized-dirs): Custom fix.
+
+2003-11-30  Kenichi Handa  <[email protected]>
+
 	* mm-util.el (mm-enable-multibyte): Call set-buffer-multibyte with
 	'to argument.  Fixes something or other in Emacs 22, and is
-	backwards compatible.  From Kenichi Handa <[email protected]>.
-
-	* gnus-agent.el (gnus-agent-expire-unagentized-dirs): Custom fix.
+	backwards compatible.
 
 2003-11-30  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-covered-methods): Remove nil methods.
 
-2003-11-29  Kevin Greiner <[email protected]>
+2003-11-29  Kevin Greiner  <[email protected]>
 	* gnus-start.el (gnus-activate-group): The active range of the
 	group must include the articles known to the agent.
 
 	* gnus.el (gnus-agent-method-p): Accept a server name as the
 	method being tested.
 
-2003-11-29  Alexander Kreuzer <[email protected]>  (tiny change)
+2003-11-29  Alexander Kreuzer  <[email protected]>  (tiny change)
 
 	* nnrss.el (nnrss-check-group): Set xml when nnrss-use-local is t.
 
@@ -669,7 +672,7 @@
 
 	* dgnushack.el (mapc): Add the compiler macro for Emacs 20.
 
-2003-11-24  Kevin Greiner <[email protected]>
+2003-11-24  Kevin Greiner  <[email protected]>
 	* gnus-srvr.el (gnus-server-insert-server-line): The server names
 	used in gnus-agent are different (for example, the native server
 	uses the alias "native") from the names in gnus-srvr.
@@ -681,7 +684,7 @@
 	new gnus-server-named-server function to get gnus-agent compatible
 	names from the server buffer.
 
-2003-11-20  Kevin Greiner <[email protected]>
+2003-11-20  Kevin Greiner  <[email protected]>
 
 	* gnus.el (gnus-agent-covered-methods): Documented use of
 	named servers, not methods, to identity agentized groups.
@@ -762,12 +765,12 @@
 	* gnus-score.el (gnus-decay-score): Return a surely smaller value
 	than the argument in XEmacs.
 
-2003-11-18  Reiner Steib  <[email protected]>
+2003-11-18  Sam Steingold  <[email protected]>
 
 	* message.el (message-insert-to): Don't use `gnus-message'.
 	(message-header-synonyms): New variable.
 	(message-carefully-insert-headers): Use it (check for synonyms).
-	Added doc-string.  From Sam Steingold <[email protected]>.
+	Added doc-string.
 
 2003-11-17  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -848,13 +851,16 @@
 
 2003-11-10  Reiner Steib  <[email protected]>
 
-	* message.el (message-insert-to): Do error out when the user
-	requested no Cc.  Don't insert empty To.  Can be added to
-	`message-setup-hook' now.  From Sam Steingold <[email protected]>.
-	(message-mode-field-menu): Moved some entries, added
+	* message.el (message-mode-field-menu): Moved some entries, added
 	`message-insert-wide-reply'.
 	(message-change-subject): Fixed comment.
 
+2003-11-10  Sam Steingold  <[email protected]>
+
+	* message.el (message-insert-to): Do error out when the user
+	requested no Cc.  Don't insert empty To.  Can be added to
+	`message-setup-hook' now.
+
 2003-11-10  Simon Josefsson  <[email protected]>
 
 	* pgg-def.el (pgg-encrypt-for-me): Change default from nil to t.
@@ -865,13 +871,12 @@
 	key id too (for decryption).
 	(pgg-gpg-sign-region): Likewise.
 
-2003-11-09  Simon Josefsson  <[email protected]>
+2003-11-09  Satyaki Das  <[email protected]>
 
 	* pgg-gpg.el (pgg-gpg-all-secret-keys): New variable.
 	(pgg-gpg-lookup-all-secret-keys): New function.
 	(pgg-gpg-select-matching-key): Likewise.
-	(pgg-gpg-decrypt-region): Use new functions.  From Satyaki Das
-	<[email protected]>.
+	(pgg-gpg-decrypt-region): Use new functions.
 
 2003-11-07  Teodor Zlatanov  <[email protected]>
 
@@ -905,10 +910,10 @@
 	* spam.el (spam-spamoracle): doc change, suggested by Jean-Marc
 	Lasgouttes <[email protected]>
 
-2003-11-04  Katsumi Yamaoka  <[email protected]>
+2003-11-04  Norbert Koch <[email protected]>  (tiny change)
 
 	* gnus-score.el (gnus-decay-score): Protect against arithmetic
-	errors.  Tiny patch from Norbert Koch <[email protected]>.
+	errors.
 
 2003-10-31  Teodor Zlatanov  <[email protected]>
 
@@ -925,12 +930,14 @@
 	(spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): change
 	spam-log-processing-to-registry invocations appropriately
 
-2003-10-31  Simon Josefsson  <[email protected]>
+2003-10-31  Derek Atkins <[email protected]>  (tiny change)
 
 	* imap.el (imap-kerberos4-open): Ignore output from ATHENA imtest.
-	Tiny patch from Derek Atkins <[email protected]>.
-	(imap-process-connection-type): Improve docstring.  Suggested by
-	Derek Atkins <[email protected]>.
+
+2003-10-31  Simon Josefsson  <[email protected]>
+
+	* imap.el (imap-process-connection-type): Improve docstring.
+	Suggested by Derek Atkins <[email protected]>.
 
 2003-10-31  Teodor Zlatanov  <[email protected]>
 
@@ -962,11 +969,14 @@
 	* message.el (message-forward-make-body-plain): Fix ARG=1 mode
 	after separating m-f-m-b.
 
-2003-10-29  Simon Josefsson  <[email protected]>
+2003-10-29  Andre Srinivasan <[email protected]>  (tiny change)
 
 	* message.el (message-forward-make-body-plain): Remove ignored
-	headers.  Tiny patch from Andre Srinivasan <[email protected]>.
-	(message-forward-make-body-plain): Fix ARG=1.
+	headers.
+
+2003-10-29  Simon Josefsson  <[email protected]>
+
+	* message.el (message-forward-make-body-plain): Fix ARG=1.
 
 2003-10-28  Jesper Harder  <[email protected]>
 
@@ -1322,8 +1332,9 @@
 	* gnus-sum.el (gnus-summary-respool-query): Don't narrow to head,
 	it's done by nnmail-article-group.
 
+2003-10-12  Mark Hood  <[email protected]>  (tiny change)
+
 	* gnus-uu.el (gnus-uu-grab-articles): Fix misplaced parens.
-	From Mark Hood <[email protected]> (tiny change)
 
 2003-10-10  Jesper Harder  <[email protected]>
 
@@ -1387,10 +1398,10 @@
 
 	* spam.el (spam-install-hooks-function): Added Autoload cookie.
 
-2003-10-02  Jesper Harder  <[email protected]>
+2003-10-02  Michael Shields  <[email protected]>
 
 	* pgg-def.el (pgg-default-keyserver-address): Change to
-	subkeys.pgp.net.  From Michael Shields <[email protected]>
+	subkeys.pgp.net.
 
 2003-10-01  Simon Josefsson  <[email protected]>
 
@@ -1464,19 +1475,21 @@
 
 	* gnus.el (gnus-group-charter-alist): Update.
 
+2003-09-10  Eric Knauel	  <[email protected]>
+
+	* spam-report.el: Use mm-url.el functions for external URL loading
+	when the built-in HTTP GET is insufficient (e.g. proxies are in
+	the way).
+
 2003-09-10  Teodor Zlatanov  <[email protected]>
 
-	* spam-report.el: use mm-url.el functions for external URL
-	loading when the built-in HTTP GET is insufficient (e.g. proxies
-	are in the way).  From Eric Knauel
-	<[email protected]>.
-	(spam-report-url-ping-function): new option, defaults to the
-	built-in HTTP GET (spam-report-url-ping-plain)
-	(spam-report-url-ping): calls spam-report-url-ping-function now
-	(spam-report-url-ping-plain): new function, does what
-	spam-report-url-ping used to do
-	(spam-report-url-ping-mm-url): function that delegates to
-	mm-url.el (autoloaded)
+	* spam-report.el (spam-report-url-ping-function): New option,
+	defaults to the built-in HTTP GET (spam-report-url-ping-plain).
+	(spam-report-url-ping): Call spam-report-url-ping-function.
+	(spam-report-url-ping-plain): New function, does what
+	spam-report-url-ping used to do.
+	(spam-report-url-ping-mm-url): Function that delegates to
+	mm-url.el (autoloaded).
 
 2003-09-08  Teodor Zlatanov  <[email protected]>
 
@@ -1577,12 +1590,11 @@
 	(mml-insert-mime-headers): Use it.  Based on (tiny) patch from
 	Lars Balker Rasmussen <[email protected]>.
 
-2003-08-30  Simon Josefsson  <[email protected]>
+2003-08-30  Gaute B Strokkenes  <[email protected]>  (tiny change)
 
 	* mail-source.el (mail-source-fetch-imap): Pass correct buffer to
 	imap-open, reverts 2003-03-17 change.  Reverse remove before
-	calling gnus-compress-sequence.  From Gaute Strokkenes
-	<[email protected]> (tiny change).
+	calling gnus-compress-sequence.
 
 2003-08-29  Simon Josefsson  <[email protected]>
 
@@ -1602,11 +1614,10 @@
 	the files it may be using.  Reported by David Coe
 	<[email protected]>.
 
-2003-08-27  Jesper Harder  <[email protected]>
+2003-08-27  Vagn Johansen  <[email protected]>  (tiny change)
 
 	* gnus-cache.el (gnus-cache-generate-active): Fix bug in
-	replacement.  From Vagn Johansen <[email protected]> (tiny
-	change).
+	replacement.
 
 2003-08-25  Katsumi Yamaoka  <[email protected]>
 
@@ -1653,13 +1664,12 @@
 	* gnus-art.el (gnus-article-edit-done, gnus-article-edit-exit):
 	Redisplay article after editing.
 
-2003-08-20  Simon Josefsson  <[email protected]>
+2003-08-20  Jari Aalto  <[email protected]>
 
 	* gnus.el (gnus-read-group): Added check to ask confirmation if
 	Group name contains invalid character. You can use '/' in IMAP,
 	but not in filenames. G m cannot know what the user is creating,
 	so let user decide. See thread [email protected].
-	Tiny patch from [email protected] (Jari Aalto+mail.linux).
 
 2003-08-13  Reiner Steib  <[email protected]>
 
@@ -1712,10 +1722,9 @@
 	* gnus.el (gnus-refer-article-method): Ditto.
 	* message.el (message-courtesy-message): Ditto.
 
-2003-08-06  Jesper Harder  <[email protected]>
+2003-08-06  Chunyu Wang  <[email protected]>  (tiny change)
 
 	* gnus-art.el (gnus-header-face-alist): Fix "Newsgroups" entry.
-	From Chunyu Wang <[email protected]> (tiny patch)
 
 2003-08-05  Katsumi Yamaoka  <[email protected]>
 
@@ -1752,11 +1761,10 @@
 	* gnus-registry.el (gnus-registry-install): add an initial
 	registry read to the loading when gnus-registry-install is set
 
-2003-07-26  Kai Gro,A_(Bjohann  <[email protected]>
+2003-07-26  Mark Thomas <[email protected]>  (tiny change)
 
 	* flow-fill.el (fill-flowed): Empty lines separate paragraphs
-	even if the preceding line ends with a soft break.  Tiny patch
-	from Mark Thomas <[email protected]>.
+	even if the preceding line ends with a soft break.
 
 2003-07-25  Teodor Zlatanov  <[email protected]>
 
@@ -1841,8 +1849,7 @@
 	* imap.el (imap-arrival-filter): Fix test for missing process
 	buffer.
 
-2003-07-09  Kai Gro,A_(Bjohann  <[email protected]>
-	From Gaute B Strokkenes <[email protected]> (tiny patch).
+2003-07-09  Gaute B Strokkenes  <[email protected]>  (tiny change)
 
 	* imap.el (imap-wait-for-tag): Clarify comment.  Use timeout zero
 	for second, after-process-has-died, accept-process-output.
@@ -1898,25 +1905,25 @@
 	(message-canlock-generate)
 	(message-generate-new-buffer-clone-locals): Docstring fixes.
 
-2003-07-07  Kai Gro,A_(Bjohann  <[email protected]>
+2003-07-07  Gaute B Strokkenes	<[email protected]>  (tiny change)
 
 	* imap.el (imap-wait-for-tag): After the process has died, look
-	for more output still pending.  From Gaute B Strokkenes
-	<[email protected]> (tiny patch).
+	for more output still pending.
 
 2003-07-07  Teodor Zlatanov  <[email protected]>
 
 	* spam.el (spam-bogofilter-score): redisplay article normally
 	after spam-bogofilter-score is called
 
+2003-07-06  Michael Piotrowski  <[email protected]>  (tiny change)
+
+	* gnus-sum.el (gnus-print-buffer): Apply emphasis.
+
 2003-07-06  Jesper Harder  <[email protected]>
 
 	* message.el (message-send-mail-with-sendmail): Handle
 	non-numeric return values.
 
-	* gnus-sum.el (gnus-print-buffer): Apply emphasis.
-	From Michael Piotrowski <[email protected]> (tiny change).
-
 	* gnus-start.el (gnus-clear-system): Revert change from
 	2003-06-19.
 
@@ -2013,11 +2020,13 @@
 
 2003-06-20  Jesper Harder  <[email protected]>
 
-	* gnus-msg.el (gnus-configure-posting-styles): Remove unused
-	variable.  From Jan Rychter <[email protected]>.
-
 	* spam.el (spam-spamoracle-learn): insert-string is obsolete.
 
+2003-06-20  Jan Rychter  <[email protected]>
+
+	* gnus-msg.el (gnus-configure-posting-styles): Remove unused
+	variable.
+
 2003-06-19  Teodor Zlatanov  <[email protected]>
 
 	* spam.el (spam-enter-list): do not enter duplicate addresses into
@@ -2050,11 +2059,10 @@
 	* gnus-util.el (gnus-extract-address-components): Added
 	doc-string.
 
-2003-06-16  Kai Gro,A_(Bjohann  <[email protected]>
+2003-06-16  Michael Albinus  <[email protected]>
 
 	* nnml.el (nnml-current-group-article-to-file-alist): Don't read
-	overview when using compressed files.  From Michael Albinus
-	<[email protected]>.
+	overview when using compressed files.
 
 2003-06-16  Katsumi Yamaoka  <[email protected]>
 
@@ -2072,8 +2080,7 @@
 	* gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind
 	`gnus-article-emulate-mime'.
 
-2003-06-15  Kai Gro,A_(Bjohann  <[email protected]>
-	From Tommi Vainikainen <[email protected]>.
+2003-06-15  Tommi Vainikainen  <[email protected]>
 
 	* message.el (message-is-yours-p): New function.  Separated common
 	code from message-cancel-news and message-supersede.  Added
@@ -2081,10 +2088,10 @@
 	resort.
 	(message-cancel-news, message-supersede): Use message-is-yours-p.
 
-2003-06-13  Kai Gro,A_(Bjohann  <[email protected]>
+2003-06-13  Niklas Morberg  <[email protected]>
 
 	* nnimap.el (nnimap-split-articles): Narrow the right buffer to
-	the headers.  From Niklas Morberg <[email protected]>.
+	the headers.
 
 2003-06-12  Dave Love  <[email protected]>
 
@@ -2101,9 +2108,7 @@
 	* spam.el (spam-check-bogofilter-headers): fix for when the score
 	is requested but the message is not spam
 
-2003-06-09  Teodor Zlatanov  <[email protected]>
-	From Eric
-	<[email protected]>
+2003-06-09  Eric Knauel  <[email protected]>
 
 	* spam.el (spam-use-spamoracle): new variable
 	(spam-install-hooks): add spamoracle to the list of conditions
@@ -2146,8 +2151,7 @@
 	* gnus-srvr.el (gnus-browse-foreign-server): Parse garbage NNTP
 	groups correctly.
 
-2003-06-06  Kai Gro,A_(Bjohann  <[email protected]>
-	From Benjamin Rutt <[email protected]>.
+2003-06-06  Benjamin Rutt  <[email protected]>.
 
 	* message.el (message-fetch-field): Augment documentation to state
 	the narrowed-to-headers restriction.
@@ -2173,11 +2177,9 @@
 	* rfc2047.el (rfc2047-encode-region): Don't error out on invalid
 	strings.
 
-2003-06-04  Jesper Harder  <[email protected]>
+2003-06-04  Ivan Boldyrev  <[email protected]>  (tiny change)
 
 	* mml1991.el (mml1991-pgg-sign): Insert pgg output as unibyte.
-	From: Ivan Boldyrev <[email protected]> (tiny
-	change)
 
 2003-06-03  Dave Love  <[email protected]>
 
@@ -2204,11 +2206,10 @@
 	* message.el (message-fetch-field): Mention narrow-to-headers
 	requirement.
 
-2003-06-03  Jesper Harder  <[email protected]>
+2003-06-03  Eric Eide  <[email protected]>
 
 	* gnus-xmas.el (gnus-xmas-create-image): Use
-	insert-file-contents-literally.  From: Eric Eide
-	<[email protected]>
+	insert-file-contents-literally.
 
 2003-06-02  Teodor Zlatanov  <[email protected]>
 
@@ -2313,7 +2314,7 @@
 
 	* dgnushack.el (assq-delete-all): Removed the compiler macro.
 
-2003-05-14  Kevin Greiner <[email protected]>
+2003-05-14  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agentize): Updated documentation to match
 	usage.
@@ -2326,7 +2327,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-05-14 Lars Magne Ingebrigtsen <[email protected]>
+2003-05-14  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Gnus v5.10.2 is released.
 
@@ -2385,7 +2386,7 @@
 	in message.  Suggested by Yoichi NAKAYAMA <[email protected]>.
 	* pop3.el (pop3-movemail): Ditto.
 
-2003-05-12  Colin Marquardt <[email protected]>  (tiny change)
+2003-05-12  Colin Marquardt  <[email protected]>  (tiny change)
 
 	* gnus.el (gnus-agent): Docstring fix.
 
@@ -2397,7 +2398,7 @@
 	(gnus-registry-add-group): add a modification timestamp to each entry
 	(gnus-registry-install-hooks): new function
 
-2003-05-12  Kevin Greiner <[email protected]>
+2003-05-12  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-cat-name): Eval macro while compiling.
 	(gnus-agent-cat-disable-undownloaded-faces): New function.
@@ -2426,11 +2427,10 @@
 	(rfc2047-syntax-table): Fix building table to work in Emacs 22.
 	(rfc2047-unfold-region): Delete unused var `leading'.
 
-2003-05-12  Simon Josefsson  <[email protected]>
+2003-05-12  Ville Skytt,Ad(B <[email protected]>  (tiny change)
 
 	* pgg.el (pgg-temp-buffer-show-function): Reuse existing visible
-	output window if one is available.  Tiny patch from Ville Skytt,Ad(B
-	<[email protected]>.
+	output window if one is available.
 
 2003-05-11  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -2495,13 +2495,15 @@
 	* gnus-registry.el (gnus-registry-cache-file): new file variable
 	(gnus-registry-cache-read, gnus-registry-cache-save): new
 	functions
-	(gnus-registry-cache-whitespace): new function.  From Dan
-	Christensen <[email protected]>
 	(gnus-registry-save, gnus-registry-read): use the new
 	gnus-registry-cache-{read|save} functions, and change the name
 	from gnus-registry-translate-{from|to}-alist
 	(gnus-registry-clear): fixed so it doesn't refer to old function name
 
+2003-05-09  Dan Christensen  <[email protected]>
+
+	* gnus-registry.el (gnus-registry-cache-whitespace): new function.
+
 2003-05-09  Jesper Harder  <[email protected]>
 
 	* gnus-picon.el (gnus-picon-transform-address): Parse the encoded
@@ -2516,8 +2518,9 @@
 	nnmail-split-fancy-with-parent-ignore-groups can be a single regex
 	in addition to a list of regexes.
 
-	* spam.el (spam-use-regex-headers): docstring fix.  From Niklas
-	Morberg <[email protected]>
+2003-05-08  Niklas Morberg  <[email protected]>
+
+	* spam.el (spam-use-regex-headers): docstring fix.
 
 2003-05-08  Kai Gro,A_(Bjohann  <[email protected]>
 
@@ -2588,7 +2591,7 @@
 	* mm-bodies.el (mm-decode-coding-region-safely): Remove.
 	(mm-decode-body): Don't use mm-decode-coding-region-safely.
 
-2003-05-03  Vasily Korytov <[email protected]>  (tiny change)
+2003-05-03  Vasily Korytov  <[email protected]>  (tiny change)
 
 	* gnus-util.el (gnus-multiple-choice): Add ", ?".
 
@@ -2705,13 +2708,13 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-05-01  Teodor Zlatanov  <[email protected]>
+2003-05-01  Jon Ericson  <[email protected]>  (tiny change)
 
-	* spam-report.el (spam-report-gmane-regex): docstring fix.  From
-	Jon Ericson <[email protected]> (tiny change)
+	* spam-report.el (spam-report-gmane-regex): docstring fix.
 
 	* gnus.el (gnus-install-group-spam-parameters): docstring fix.
-	From Jon Ericson <[email protected]> (tiny change)
+
+2003-05-01  Teodor Zlatanov  <[email protected]>
 
 	* gnus-registry.el (gnus-registry-fetch-extra)
 	(gnus-registry-store-extra, gnus-registry-group-count): new functions
@@ -2719,11 +2722,11 @@
 	(gnus-registry-add-group): changed to work with extra data element
 	if present
 
-2003-05-01 Lars Magne Ingebrigtsen <[email protected]>
+2003-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Gnus v5.10.1 is released.
 
-2003-05-01 Lars Magne Ingebrigtsen <[email protected]>
+2003-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.24 is released.
 
@@ -2742,7 +2745,7 @@
 
 	* gnus.el: Update copyright for several files.
 
-2003-05-01 Lars Magne Ingebrigtsen <[email protected]>
+2003-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.23 is released.
 
@@ -2750,7 +2753,7 @@
 
 	* spam-stat.el (spam-stat-test-directory): Compare against zero.
 
-2003-05-01  Trey Jackson <[email protected]>  (tiny change)
+2003-05-01  Trey Jackson  <[email protected]>  (tiny change)
 
 	* spam-stat.el (spam-stat-test-directory): Skip 0 length files.
 
@@ -2767,11 +2770,11 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-05-01 Lars Magne Ingebrigtsen <[email protected]>
+2003-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.22 is released.
 
-2003-05-01 Lars Magne Ingebrigtsen <[email protected]>
+2003-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.21 is released.
 
@@ -2779,7 +2782,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-05-01 Lars Magne Ingebrigtsen <[email protected]>
+2003-05-01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.20 is released.
 
@@ -2872,7 +2875,7 @@
 	* mm-util.el (mm-charset-to-coding-system): Use user specified
 	charset unless coding-system-get is fboundp.
 
-2003-04-30  Kevin Greiner <[email protected]>
+2003-04-30  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-cat-defaccessor, gnus-agent-cat-name):
 	Wrapped in eval-when-compile.
@@ -2978,7 +2981,7 @@
 	(gnus-mime-display-multipart-related-as-mixed): Added doc-strings,
 	allow customization.
 
-2003-04-27  Kevin Greiner <[email protected]>
+2003-04-27  Kevin Greiner  <[email protected]>
 
 	* dgnushack.el (dgnushack-compile-verbosely): New function.  Not
 	currently called (See source for explanation).
@@ -2991,11 +2994,11 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-04-27 06:47:31 Lars Magne Ingebrigtsen <[email protected]>
+2003-04-27 06:47:31  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.19 is released.
 
-2003-04-27  Kevin Greiner <[email protected]>
+2003-04-27  Kevin Greiner  <[email protected]>
 
 	* gnus-registry.el (gnus-register-spool-action): Replaced literal
 	carriage-return character with its escape sequence.
@@ -3141,11 +3144,10 @@
 
 	* smime.el (smime-decrypt-region): Insert From header.
 
-2003-04-21  Kai Gro,A_(Bjohann  <[email protected]>
+2003-04-21  Gaute B Strokkenes	<[email protected]>  (tiny change)
 
 	* gnus-fun.el (gnus-face-from-file, gnus-convert-png-to-face):
-	Max length of header is 726, not 740.  From Gaute B Strokkenes
-	<[email protected]>.
+	Max length of header is 726, not 740.
 
 2003-04-20  Jesper Harder  <[email protected]>
 
@@ -3270,7 +3272,7 @@
 	(spam-summary-prepare-exit): check the report-gmane spam processor
 	and run spam-report-gmane-register-routine if it's active
 
-	From John Wiegley <[email protected]>
+2003-04-16  John Wiegley  <[email protected]>
 
 	* spam.el (spam-bogofilter-score): check bogofilter headers before
 	checking bogofilter itself
@@ -3303,7 +3305,7 @@
 	* nndiary.el (nndiary-compute-reminders): Don't use setf with
 	nthcdr.
 
-2003-04-16  Kevin Greiner <[email protected]>
+2003-04-16  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-make-cat): Added optional parameter to
 	specify a predicate other than false.
@@ -3321,13 +3323,11 @@
 
 	* spam.el (spam-split): added save-restriction to save-excursion
 
-2003-04-15  Reiner Steib  <[email protected]>
-	From Julien Avarre <[email protected]>
+2003-04-15  Julien Avarre  <[email protected]>
 
 	* gnus-fun.el: Fixed autoload cookie.
 
-2003-04-15  Paul Jarc  <[email protected]>
-	From Remi Letot  <[email protected]>
+2003-04-15  Remi Letot  <[email protected]>
 
 	* nnmaildir.el (nnmaildir-request-scan): Use gnus-remove-if
 	instead of remove-if.
@@ -3381,7 +3381,7 @@
 
 	* gnus.el (gnus-group-prefixed-name): Clean up.
 
-2003-04-13  Kevin Greiner <[email protected]>
+2003-04-13  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-group-pathname): Bind
 	gnus-command-method so that gnus-agent-directory will always
@@ -3397,7 +3397,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-04-13 01:12:01 Lars Magne Ingebrigtsen <[email protected]>
+2003-04-13 01:12:01  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.18 is released.
 
@@ -3452,7 +3452,7 @@
 	(mm-encode-body): Don't corrupt UTF-16.
 	(mm-body-encoding): Pay attention to mm-body-charset-encoding-alist.
 
-2003-04-10  Kevin Greiner <[email protected]>
+2003-04-10  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-get-undownloaded-list): Articles in
 	the CACHE are now detected and handled the same as an article
@@ -3478,7 +3478,7 @@
 	* gnus-sum.el (gnus-summary-make-menu-bar): Disable "Import file"
 	and "Create article" items in non-editable groups.
 
-2003-04-09  Kevin Greiner <[email protected]>
+2003-04-09  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-write-active): Added option of
 	replacing, rather than updating, the agent's active file.  Do NOT
@@ -3591,7 +3591,7 @@
 	* gnus-sum.el: XEmacs doesn't support the 5th arg to 'load', so
 	don't use it when loading gnus-sum.el if we're in XEmacs.
 
-2003-04-05  Kevin Greiner <[email protected]>
+2003-04-05  Kevin Greiner  <[email protected]>
 
 	* gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
 	print-escape-nonascii to fix more characters in compiled format
@@ -3602,7 +3602,7 @@
 	* gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player):
 	Fix customization type.
 
-2003-04-04  Kevin Greiner <[email protected]>
+2003-04-04  Kevin Greiner  <[email protected]>
 
 	* gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
 	print-quoted, print-readably, print-escape-multibyte, and
@@ -3662,7 +3662,7 @@
 	* nntp.el (nntp-via-rlogin-command-switches): Doc fix.
 	(nntp-open-via-rlogin-and-telnet): Disable the telnet linemode.
 
-2003-03-31  Kevin Greiner <[email protected]>
+2003-03-31  Kevin Greiner  <[email protected]>
 
 	* gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
 	print-escape-newlines to print escape sequences rather than
@@ -3685,7 +3685,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-03-31 20:08:19 Lars Magne Ingebrigtsen <[email protected]>
+2003-03-31 20:08:19  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.17 is released.
 
@@ -3768,20 +3768,24 @@
 	(gnus-read-newsrc-el-file): call the gnus-read-newsrc-el-hook
 
 	* gnus-registry.el (gnus-registry-translate-to-alist)
-	(gnus-registry-translate-from-alist, alist-to-hashtable)
-	(hashtable-to-alist): new functions
+	(gnus-registry-translate-from-alist: new functions
 	(gnus-register-spool-action): add a spool item to the registry
 
 	* gnus.el (gnus-variable-list): added gnus-registry-alist to the
 	list of saved variables
 	(gnus-registry-alist): new variable
 
+2003-03-28  Andreas Fuchs  <[email protected]>
+
+	* gnus-registry.el (alist-to-hashtable, hashtable-to-alist): New
+	functions.
+
 2003-03-27  Simon Josefsson  <[email protected]>
 
 	* gnus-art.el (article-decode-group-name): Be correct instead of
 	smart.
 
-2003-03-27  Katsumi Yamaoka <[email protected]>
+2003-03-27  Katsumi Yamaoka  <[email protected]>
 
 	* lpath.el: Bind url-current-object for Emacs; bind
 	gnus-agent-expire-current-dirs for XEmacs; fbind open-ssl-stream
@@ -3796,7 +3800,7 @@
 	* gnus-msg.el (gnus-mailing-list-groups): Fix customize type and
 	doc string.
 
-2003-03-26  Kevin Ryde <[email protected]>
+2003-03-26  Kevin Ryde  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-find-for-reselect): Renamed from
 	gnus-summary-find-uncancelled, skip temporary articles inserted by
@@ -3806,7 +3810,7 @@
 
 	* smiley.el (smiley-buffer): New function.
 
-2003-03-26  Kevin Greiner <[email protected]>
+2003-03-26  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-fetch-selected-article): Replaced
 	gnus-summary-update-line (which updated the article's face) with
@@ -3814,7 +3818,7 @@
 	face by calling gnus-summary-update-line AND updates the download
 	mark to show that the article was fetched).
 
-2003-03-23  Kevin Greiner <[email protected]>
+2003-03-23  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-expire-unagentized-dirs): Provides
 	option of deleting agent directories for groups/servers that are
@@ -3879,7 +3883,7 @@
 	* gnus-art.el (gnus-treat-display-xface): Don't enable if
 	icontopbm isn't available.
 
-2003-03-21  Kevin Greiner <[email protected]>
+2003-03-21  Kevin Greiner  <[email protected]>
 
 	* gnus-int.el (gnus-open-server): Catch errors in backend's
 	open-server method.  Returns nil rather than crashing startup.
@@ -3906,7 +3910,7 @@
 	* message.el (message-split-line): New function.
 	(message-mode-map): Remap split-line to message-split-line.
 
-2003-03-20  Katsumi Yamaoka <[email protected]>
+2003-03-20  Katsumi Yamaoka  <[email protected]>
 
 	* message.el (message-make-overlay): Defalias it to make-overlay.
 	(message-delete-overlay): Defalias it to delete-overlay.
@@ -3930,7 +3934,7 @@
 	* nnrss.el (nnrss-fetch): Fetch the local stuff.
 	(nnrss-check-group): Use it.
 
-2003-03-20 Mark A. Hershberger  <[email protected]>
+2003-03-20  Mark A. Hershberger  <[email protected]>
 
 	* nnrss.el: Primitive XML Name-space support.  This means that RSS
 	feeds like Kevin Burton's[1] can now be read in Gnus.
@@ -3957,7 +3961,7 @@
 
 	* gnus-group.el (gnus-group-make-rss-group): New function.
 
-2003-03-20  Katsumi Yamaoka <[email protected]>
+2003-03-20  Katsumi Yamaoka  <[email protected]>
 
 	* message.el (message-idna-to-ascii-rhs-1): Don't use replace-*
 	for highlight overlays.
@@ -4054,7 +4058,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-03-18 00:38:22 Lars Magne Ingebrigtsen <[email protected]>
+2003-03-18 00:38:22  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.16 is released.
 
@@ -4511,7 +4515,6 @@
 	* spam.el: Fix typo.
 
 2003-03-01  Satyaki Das  <[email protected]>
-	(Trivial patch.)
 
 	* pgg-gpg.el (pgg-gpg-process-region): Insert process status into
 	errors-buffer. This produces a nicer error message in case of
@@ -4535,7 +4538,7 @@
 
 	* message.el (message-make-fqdn): Protect against nil user-mail.
 
-2003-02-28  Vasily Korytov <[email protected]>
+2003-02-28  Vasily Korytov  <[email protected]>
 
 	* gnus-art.el (gnus-boring-article-headers): New values:
 	'to-list and 'cc-list.
@@ -4617,10 +4620,11 @@
 
 	* gnus-start.el (gnus-backup-startup-file): Fixed custom type.
 
-2003-02-24  Ted Zlatanov <[email protected]>
+2003-02-24  Ted Zlatanov  <[email protected]>
+
 	* spam.el: disabled spam-get-article-as-filename
 
-	From Michael Shields  <[email protected]>
+2003-02-24  Michael Shields  <[email protected]>
 
 	* gnus-group.el (gnus-group-is-exiting-without-update-p): New.
 	* gnus-sum.el (gnus-summary-exit-no-update): Use it.
@@ -4634,8 +4638,7 @@
 	no spam.
 	* spam.el (spam-ham-move-routine): New `copy' argument.
 
-2003-02-24  Kai Gro,A_(Bjohann  <[email protected]>
-	From Martin Thornquist <[email protected]>
+2003-02-24  Martin Thornquist  <[email protected]>
 
 	* gnus-topic.el (gnus-topic-select-group): Select last group if
 	after last group.
@@ -4752,16 +4755,19 @@
 	* gnus-start.el (gnus-get-unread-articles-in-group): Make sure
 	the entry for the group exists before we alter it.
 
-2003-02-22  Kai Gro,A_(Bjohann  <[email protected]>
+2003-02-22  David S. Goldberg  <[email protected]>  (tiny change)
 
-	* message.el (message-mode): MML tags separate paragraphs.  Small
-	change from David S Goldberg <[email protected]>.
+	* message.el (message-mode): MML tags separate paragraphs.
+
+2003-02-22  Kai Gro,A_(Bjohann  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-get-undownloaded-list): Sort
 	`gnus-newsgroup-headers'.
 
+2003-02-22  Karl Pfl,Ad(Bsterer  <[email protected]>
+
 	* gnus-art.el (gnus-article-refer-article): Grok more message id
-	formats.  From Karl Pfl,Ad(Bsterer <[email protected]>.
+	formats.
 
 2003-02-22  Jesper Harder  <[email protected]>
 
@@ -4778,8 +4784,7 @@
 	(gnus-register-spool-action): added hashtable of message ID keys
 	with message motion data
 
-2003-02-21  Florian Weimer  <[email protected]>
-	From Reiner Steib  <[email protected]>.
+2003-02-21  Reiner Steib  <[email protected]>
 
 	* gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): New
 	variable, used in `gnus-button-mid-or-mail-heuristic'.
@@ -4909,11 +4914,11 @@
 	(spam-mark-spam-as-expired-and-move-routine): made the article
 	move conditional, so it's not called even if there's nothing to move
 
-2003-02-13  Kai Gro,A_(Bjohann  <[email protected]>
+2003-02-13  Kurt B. Kaiser  <[email protected]>
 
 	* message.el (message-unix-mail-delimiter): Accept any whitespace
 	after the email address and before the date; do not require the
-	space character.  From Kurt B. Kaiser <[email protected]>.
+	space character.
 
 2003-02-13  Katsumi Yamaoka  <[email protected]>
 
@@ -5021,7 +5026,7 @@
 
 	* gnus.el (gnus-version-number): Bumped.
 
-2003-02-08 23:23:27 Lars Magne Ingebrigtsen <[email protected]>
+2003-02-08 23:23:27  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.15 is released.
 
@@ -5036,8 +5041,9 @@
 	* gnus-sum.el (gnus-summary-select-article): Remove blink removal
 	code that only worked under Emacs.
 
-	* pgg-gpg.el (pgg-gpg-process-region): Don't blink.  From Satyaki
-	Das <[email protected]>.
+2003-02-08  Satyaki Das  <[email protected]>
+
+	* pgg-gpg.el (pgg-gpg-process-region): Don't blink.
 
 2003-02-08  Jesper Harder  <[email protected]>
 
@@ -5367,15 +5373,14 @@
 
 	* gnus.el (gnus-version-number): Bumped.
 
-2003-01-24 20:32:44 Lars Magne Ingebrigtsen <[email protected]>
+2003-01-24 20:32:44  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.14 is released.
 
-2003-01-24  Kai Gro,A_(Bjohann  <[email protected]>
+2003-01-24  Mark Thomas <[email protected]>  (tiny change)
 
 	* gnus-sum.el (gnus-summary-prepare-threads): Reset state for %B
-	before beginning.  Tiny patch from Mark Thomas
-	<[email protected]>.
+	before beginning.
 
 2003-01-24  Teodor Zlatanov  <[email protected]>
 
@@ -5491,7 +5496,7 @@
 
 	* gnus.el (gnus-version-number): Bumped version number.
 
-2003-01-21 07:15:41 Lars Magne Ingebrigtsen <[email protected]>
+2003-01-21 07:15:41  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.13 is released.
 
@@ -5672,7 +5677,7 @@
 
 	* gnus-audio.el (gnus-audio-au-player): Use executable-find.
 
-2003-01-13  Jhair Tocancipa Triana <jhair_tocancipa@@gmx.net>
+2003-01-13  Jhair Tocancipa Triana  <jhair_tocancipa@@gmx.net>
 
 	* gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player): Use
 	  /usr/bin/play as default player.
@@ -5754,7 +5759,7 @@
 	* gnus.el (gnus-version-number): Bumped version.
 	(gnus-summary-line-format): Doc fix.
 
-2003-01-12 22:02:49 Lars Magne Ingebrigtsen <[email protected]>
+2003-01-12 22:02:49  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.12 is released.
 
@@ -5801,7 +5806,7 @@
 
 	* gnus.el (gnus-version-number): Bumped version number.
 
-2003-01-12 13:46:20 Lars Magne Ingebrigtsen <[email protected]>
+2003-01-12 13:46:20  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.11 is released.
 
@@ -6277,7 +6282,7 @@
 
 	* gnus.el (gnus-version-number): Bump version number.
 
-2003-01-05 01:53:30 Lars Magne Ingebrigtsen <[email protected]>
+2003-01-05 01:53:30  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.10 is released.
 
@@ -6285,7 +6290,7 @@
 
 	* gnus.el (gnus-version-number): Fix version number.
 
-2003-01-05 01:40:09 Lars Magne Ingebrigtsen <[email protected]>
+2003-01-05 01:40:09  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.08 is released.
 
@@ -6789,11 +6794,10 @@
 
 	* binhex.el (binhex-decoder-program): Fix docstring.
 
-2002-12-21  Kai Gro,A_(Bjohann  <[email protected]>
+2002-12-21  Laurent Martelli  <[email protected]>
 
 	* mm-decode.el (mm-mailcap-command): Do not backslash-quote
 	special chars if the mailcap file uses single quotes around %s.
-	From Laurent Martelli <[email protected]>.
 
 2002-12-19  Paul Jarc  <[email protected]>
 
@@ -6834,7 +6838,7 @@
 	* nntp.el (nntp-with-open-group-first-pass): Do not wrap in
 	eval-when-compile.  Suggested by Kevin Greiner.
 
-2002-12-13  Kevin Greiner <[email protected]>
+2002-12-13  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-max-fetch-size): New, defcustom.
 	(gnus-agent-fetch-headers): Initialize gnus-agent-overview-buffer
@@ -6846,13 +6850,13 @@
 	Multiple chunks in the same group may perform arbitrarily large
 	updates.
 
-2002-12-12  Kevin Greiner <[email protected]>
+2002-12-12  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-fetch-selected-article): Added call to
 	gnus-summary-update-download-mark to update the article in the
 	summary.
 
-2002-12-11  Kevin Greiner <[email protected]>
+2002-12-11  Kevin Greiner  <[email protected]>
 
 	* gnus.el (gnus-summary-high-uncached-face,
 	gnus-summary-normal-uncached-face, gnus-summary-low-uncached-face)
@@ -7070,7 +7074,7 @@
 	* gnus-sum.el (gnus-summary-insert-old-articles): No longer passes
 	compressed range to gnus-summary-insert-articles.
 
-2002-11-26  Kevin Ryde <[email protected]>
+2002-11-26  Kevin Ryde  <[email protected]>
 
 	* gnus-art.el (gnus-mime-copy-part): Look for filename
 	parameter under content-disposition, not content-type.
@@ -7108,7 +7112,7 @@
 	* gnus-agent.el (gnus-agent-check-overview-buffer): Make debugger
 	print message on entry.
 
-	From Kevin Greiner <[email protected]>.
+2002-11-25  Kevin Greiner  <[email protected]>.
 
 	* gnus-range.el (gnus-range-difference): New function.
 	* gnus-sum.el (gnus-summary-insert-old-articles): Use it.
@@ -7119,8 +7123,7 @@
 	gnus-remove-from-range instead of gnus-range-difference which
 	doesn't exist.
 
-2002-11-23  Kai Gro,A_(Bjohann  <[email protected]>
-	From Kevin Greiner <[email protected]>.
+2002-11-23  Kevin Greiner  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-downloaded-article-face): New face,
 	used for showing which articles have been downloaded.
@@ -7230,7 +7233,7 @@
 	* nnimap.el (nnimap-request-expire-articles): Compress sequence
 	before storing \Deleted mark on expired articles.
 
-2002-11-17  Shenghuo Zhu <[email protected]>
+2002-11-17  Shenghuo Zhu  <[email protected]>
 	Trivial patch from Markus Rost <[email protected]>
 
 	* gnus-sum.el (gnus-summary-goto-unread): Doc fix - escape open
@@ -7320,19 +7323,18 @@
 	* gnus-group.el (gnus-group-delete-group):
 	gnus-cache-active-hashtb might be void.
 
-2002-11-02  Simon Josefsson  <[email protected]>
+2002-11-02  Raymond Scholz  <[email protected]>
 
 	* pgg-gpg.el (pgg-gpg-encrypt-region): Makes PGG respect the
-	setting of the default user ID.  From Raymond Scholz
-	<[email protected]>.
+	setting of the default user ID.
 
 2002-11-01  Jesper Harder  <[email protected]>
 
 	* mm-bodies.el (mm-body-encoding): Don't return 8bit for 7bit
 	charset.
 
-2002-10-31  Ted Zlatanov <[email protected]>
-	From Alex Schroeder <[email protected]>
+2002-10-31  Alex Schroeder  <[email protected]>
+
 	* spam-stat.el (spam-stat-process-directory): add dir to message
 	(spam-stat-reduce-size): No longer remove words
 	with values close to 0.5, because the default value is 0.2.
@@ -7395,8 +7397,7 @@
 	* mml.el (mml-mode-map): Fixed keybindings for mml-secure-*
 	functions.
 
-2002-10-28  Katsumi Yamaoka  <[email protected]>
-	From [email protected] (Mark A. Hershberger).
+2002-10-28  Mark A. Hershberger  <[email protected]>
 
 	* mm-url.el (mm-url-insert-file-contents): Make it return the same
 	type values ("url" size) regardless of the values of
@@ -7644,7 +7645,7 @@
 
 	* gnus-spec.el (gnus-pad-form): Use gnus-string-width-function.
 
-2002-10-11  Ted Zlatanov <[email protected]>
+2002-10-11  Ted Zlatanov  <[email protected]>
 
 	* spam.el (spam-check-ifile): added ifile as a spam checking
 	backend, and spam-use-ifle as the variable to toggle that check.
@@ -7654,7 +7655,7 @@
 	* message.el (message-beginning-of-line): New variable.
 	(message-beginning-of-line): Use it.
 
-2002-10-11  Ted Zlatanov <[email protected]>
+2002-10-11  Ted Zlatanov  <[email protected]>
 
 	* spam.el: more compilation fixes for BBDB
 
@@ -7690,7 +7691,7 @@
 	(mml2015-unabbrev-trust-alist): New.
 	(mml2015-gpg-extract-signature-details): Use it.
 
-2002-10-10  Ted Zlatanov <[email protected]>
+2002-10-10  Ted Zlatanov  <[email protected]>
 
 	* spam.el: compilation fixes, spam-check-bbdb function is nil if no
 	BBDB installed
@@ -7818,7 +7819,7 @@
 
 	* pgg.el, pgg-gpg.el, pgg-pgp5.el: Don't depend on luna.el.
 
-2002-09-29  Daiki Ueno <[email protected]>
+2002-09-29  Daiki Ueno  <[email protected]>
 
 	* pgg.el: Remove dependency on calist.el.
 
@@ -7859,13 +7860,12 @@
 
 	* message.el (message-required-mail-headers): Remove Lines:.
 
-2002-10-03  Kai Gro,A_(Bjohann  <[email protected]>
-	From Jesper Harder.
+2002-10-03  Jesper Harder  <[email protected]>
 
 	* gnus-group.el (gnus-group-fetch-charter,
 	gnus-group-fetch-control): Prompt for group if given a prefix
 	argument.
-	* gnus-sum.el (t): Add gnus-group-fetch-charter and
+	* gnus-sum.el: Add gnus-group-fetch-charter and
 	gnus-group-fetch-control to summary key map and menu.
 
 2002-10-03  Paul Jarc  <[email protected]>
@@ -7880,13 +7880,12 @@
 	(gnus-agent-fetch-selected-article): New function for
 	gnus-select-article-hook or gnus-mark-article-hook.
 
-2002-10-02  Katsumi Yamaoka  <[email protected]>
-	From Peter von der Ahe <[email protected]>.
+2002-10-02  Peter von der Ahe  <[email protected]>
 
 	* gnus-ems.el (gnus-x-splash): Set coding-system-for-read to
 	raw-text.
 
-2002-09-30  Ted Zlatanov <[email protected]>
+2002-09-30  Ted Zlatanov  <[email protected]>
 
 	* spam.el: merged changes from [email protected] (Fran,Ag(Bois
 	Pinard).
@@ -7927,8 +7926,7 @@
 
 	* nnimap.el (nnimap-fixup-unread-after-getting-new-news): Remove.
 
-2002-09-27  Katsumi Yamaoka  <[email protected]>
-	From Mats Lidell <[email protected]>.
+2002-09-27  Mats Lidell  <[email protected]>
 
 	* gnus-art.el (gnus-article-mode-syntax-table): Replace "-" to " ".
 
@@ -8079,20 +8077,19 @@
 	* nnmaildir.el (nnmaildir--grp-add-art): fix minimum article
 	number when article 1 does not exist.
 
-2002-09-25  Kai Gro,b_(Bjohann  <[email protected]>
+2002-09-25  Reiner Steib  <[email protected]>
 
 	* gnus-art.el (gnus-button-handle-apropos-variable): Fall back to
 	apropos if apropos-variable does not exist.
 	(gnus-button-guessed-mid-regexp)
 	(gnus-button-handle-describe-prefix, gnus-button-alist): Better
-	regexes.  From Reiner Steib.
+	regexes.
 	(gnus-button-handle-describe-function)
-	(gnus-button-handle-describe-variable): Doc fix.  From Reiner Steib.
+	(gnus-button-handle-describe-variable): Doc fix.
 	(gnus-button-handle-describe-key, gnus-button-handle-apropos)
-	(gnus-button-handle-apropos-command): Doc fix.  From Reiner Steib.
+	(gnus-button-handle-apropos-command): Doc fix.
 
-2002-09-25  Mark A. Hershberger  <[email protected]>
-	Trivial patch.
+2002-09-25  Mark A. Hershberger  <[email protected]>  (tiny change)
 
 	* nnrss.el (nnrss-save-server-data): Save nnrss-group-alist in
 	the file.
@@ -8114,22 +8111,19 @@
 	(mml2015-pgg-encrypt): New functions.
 	(defvar, autoload): Prevent byte-compile warnings.
 
-2002-09-24  Katsumi Yamaoka  <[email protected]>
-	From TSUCHIYA Masatoshi <[email protected]>.
+2002-09-24  TSUCHIYA Masatoshi  <[email protected]>.
 
 	* gnus-art.el (article-strip-banner): Check for the existence of
 	from header.
 
-2002-09-23  Kai Gro,b_(Bjohann  <[email protected]>
+2002-09-23  Reiner Steib  <[email protected]>
 
 	* gnus-art.el (gnus-button-guessed-mid-regexp): Improved regexp.
 	(gnus-button-alist): Improved regexp for
 	gnus-button-handle-mid-or-mail (false positives), fixed
 	gnus-button-handle-man entries.
-	From Reiner Steib.
 
-2002-09-23  Paul Jarc  <[email protected]>
-	From Josh Huber.
+2002-09-23  Josh Huber  <[email protected]>
 
 	* nnmaildir.el (nnmaildir--update-nov): fix wrong-type error when
 	nnmail-extra-headers is non-nil.
@@ -8158,8 +8152,7 @@
 
 	* gnus-sum.el (gnus-summary-next-group): Switch to the summary buffer.
 
-2002-09-20  Kai Gro,b_(Bjohann  <[email protected]>
-	From Reiner Steib.
+2002-09-20  Reiner Steib  <[email protected]>
 
 	* gnus-art.el (gnus-button-handle-custom,
 	gnus-button-handle-mid-or-mail,
@@ -8185,10 +8178,10 @@
 
 	* message.el (message-completion-alist): Add Reply-To, From, etc.
 
-2002-09-18  Simon Josefsson  <[email protected]>
+2002-09-18  Nevin Kapur  <[email protected]>
 
 	* nnimap.el (nnimap-request-expire-articles): Make flag setting
-	conditional.  From Nevin Kapur <[email protected]>.
+	conditional.
 
 2002-09-17  Simon Josefsson  <[email protected]>
 
@@ -8198,8 +8191,7 @@
 	when articles are found.  Suggested by Nevin Kapur
 	<[email protected]>.
 
-2002-09-17  Kai Gro,A_(Bjohann  <[email protected]>
-	From Reiner Steib <[email protected]>.
+2002-09-17  Reiner Steib  <[email protected]>
 
 	* message.el (message-strip-subject-trailing-was)
 	(message-change-subject, message-add-archive-header)
@@ -8252,8 +8244,7 @@
 
 	* gnus-sum.el (gnus-summary-next-group): Semi-exit only when needed.
 
-2002-09-12  Katsumi Yamaoka  <[email protected]>
-	From John Paul Wallington <[email protected]>.
+2002-09-12  John Paul Wallington  <[email protected]>.
 
 	* gnus.el (gnus-visual, gnus-meta): Fix typo.
 
@@ -8267,8 +8258,7 @@
 	(nnimap-split-rule): Doc fix.
 	(nnimap-request-expire-articles): Cleanup code.
 
-2002-09-11  Katsumi Yamaoka  <[email protected]>
-	From TSUCHIYA Masatoshi <[email protected]>.
+2002-09-11  TSUCHIYA Masatoshi  <[email protected]>.
 
 	* gnus-art.el (gnus-article-address-banner-alist): New option.
 	(article-strip-banner): Refer the above option to split banners of
@@ -8348,10 +8338,10 @@
 	* gnus-util.el (gnus-frame-or-window-display-name): Exclude
 	invalid display names.
 
-2002-08-30  Simon Josefsson  <[email protected]>
+2002-08-30  Reiner Steib  <[email protected]>
 
 	* gnus-group.el (gnus-group-fetch-control): Fix typo in last
-	commit.  From Reiner Steib <[email protected]>.
+	commit.
 
 2002-08-26  Jesper Harder  <[email protected]>
 
@@ -8362,10 +8352,9 @@
 	(gnus-group-fetch-control): New function.
 	Add them to the keymap and menu. Require mm-url.
 
-2002-08-30  Katsumi Yamaoka  <[email protected]>
+2002-08-30  Alex Schroeder  <[email protected]>.
 
 	* gnus-mlspl.el (gnus-group-split-fancy): Doc fix.
-	From Alex Schroeder <[email protected]>.
 
 2002-08-29  Jesper Harder  <[email protected]>
 
@@ -8413,10 +8402,10 @@
 	* lpath.el: Fbind `frame-parameter', `make-frame-on-display',
 	`device-connection' and `dfw-device'.
 
-2002-08-22  Kai Gro,b_(Bjohann  <[email protected]>
+2002-08-22  Jochen Hein  <[email protected]>  (tiny change)
 
 	* gnus-art.el (gnus-emphasis-alist): Strikethru had a lot of false
-	positives, make it stricter.  From Jochen Hein (trivial change).
+	positives, make it stricter.
 
 2002-08-21  Katsumi Yamaoka  <[email protected]>
 
@@ -8433,8 +8422,7 @@
 
 	* lpath.el: Fbind w32-focus-frame and x-focus-frame.
 
-2002-08-20  Katsumi Yamaoka  <[email protected]>
-	From $B>.4X(B $B5HB'(B (KOSEKI Yoshinori) <[email protected]>.
+2002-08-20  $B>.4X(B $B5HB'(B (KOSEKI Yoshinori)  <[email protected]>.
 
 	* message.el (message-set-auto-save-file-name): Add support for
 	the Cygwin Emacs; the system-type is `cygwin'.
@@ -8544,7 +8532,7 @@
 
 	* gnus.el (gnus-version-number): Bumped version number.
 
-2002-08-04 01:48:57 Lars Magne Ingebrigtsen  <[email protected]>
+2002-08-04 01:48:57  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.07 is released.
 
@@ -8556,18 +8544,17 @@
 	(gnus-article-sort-by-random): New function.
 	(gnus-thread-sort-by-random): New function.
 
-2002-08-02  Simon Josefsson  <[email protected]>
+2002-08-02  Scott A Crosby  <[email protected]>
 
 	* gnus-logic.el (gnus-advanced-integer): Swap arguments in
-	funcall.  From Scott A Crosby <[email protected]>.
+	funcall.
 
 2002-07-31  Danny Siu  <[email protected]>
 
 	* nnimap.el (nnimap-split-articles): do not call nnmail-fetch-field
 	when splitting malformed messages without message-id
 
-2002-07-28  Kai Gro,b_(Bjohann  <[email protected]>
-	From Niklas Morberg <[email protected]>.
+2002-07-28  Niklas Morberg  <[email protected]>.
 
 	* nnweb.el (nnweb-type, nnweb-type-definition)
 	(nnweb-gmane-create-mapping, nnweb-gmane-wash-article)
@@ -8611,21 +8598,18 @@
 	nnmail-expiry-target to 'delete, so that absolute deletion
 	happens when absolute deletion is requested.
 
-2002-07-21  Kai Gro,b_(Bjohann  <[email protected]>
-	From Nevin Kapur <[email protected]>.
+2002-07-21  Nevin Kapur  <[email protected]>.
 
 	* nnmail.el (nnmail-fancy-expiry-target): Treat nonexisting
 	headers as empty headers.
 
-2002-07-21  Kai Gro,b_(Bjohann  <[email protected]>
-	From Jochen Hein <[email protected]>.
+2002-07-21  Jochen Hein  <[email protected]>.
 
 	* gnus-art.el (gnus-emphasis-alist): Add strikethrough and
 	correct typo.
 	(gnus-emphasis-strikethru): New face.
 
-2002-07-20  Kai Gro,b_(Bjohann  <[email protected]>
-	From Jason Merrill <[email protected]>.
+2002-07-20  Jason Merrill  <[email protected]>.
 
 	* nnfolder.el (nnfolder-retrieve-headers): Avoid searching the
 	entire file for each of a sequence of missing articles.
@@ -8636,8 +8620,7 @@
 	* gnus-sum.el (gnus-summary-insert-new-articles): Count down to
 	avoid nreverse.
 
-2002-07-14  Kai Gro,b_(Bjohann  <[email protected]>
-	From Ted Zlatanov <[email protected]>.
+2002-07-14  Ted Zlatanov  <[email protected]>
 
 	* gnus-sum.el (gnus-auto-expirable-marks): Remove `spam'.
 	(gnus-summary-mode-line-format-alist): Add %h for number of
@@ -8652,25 +8635,24 @@
 	(gnus-mark-article-as-read, gnus-mark-article-as-unread)
 	(gnus-mark-article-as-unread, gnus-summary-catchup): Grok spam.
 
-2002-07-10  Simon Josefsson  <[email protected]>
+2002-07-10  KANEMATSU Daiji  <[email protected]>
 
 	* nnimap.el (nnimap-split-to-groups): Allow group string to be a
-	function.  From KANEMATSU Daiji <[email protected]>.
+	function.
 
 2002-07-09  Nevin Kapur  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-delete-article): Respect group
 	parameters while expiring.
 
-2002-07-08  Simon Josefsson  <[email protected]>
+2002-07-08  Henrik Enberg  <[email protected]>
 
-	* gnus-art.el (article-make-date-line): Fix string.  From Henrik
-	Enberg.
+	* gnus-art.el (article-make-date-line): Fix string.
 
-2002-07-08  Kai Gro,b_(Bjohann  <[email protected]>
+2002-07-08  Niklas Morberg  <[email protected]>
 
 	* gnus-art.el (article-unsplit-urls): Only display MIME when this
-	function is called interactively.  From Niklas Morberg.
+	function is called interactively.
 
 2002-07-06  ShengHuo ZHU  <[email protected]>
 
@@ -8692,10 +8674,10 @@
 
 	* nnmail.el (nnmail-split-methods): fix custom type.
 
-2002-07-02  Kai Gro,b_(Bjohann  <[email protected]>
+2002-07-02  Niklas Morberg  <[email protected]>
 
 	* gnus-art.el (article-unsplit-urls): Keep URL buttonized after
-	unsplitting.  From Niklas Morberg <[email protected]>.
+	unsplitting.
 
 2002-07-01  Kai Gro,b_(Bjohann  <[email protected]>
 
@@ -8707,13 +8689,12 @@
 	* nntp.el (nntp-via-rlogin-command-switches): New variable.
 	(nntp-open-via-rlogin-and-telnet): Re-revert; use the var above.
 
-2002-06-28  Kai Gro,b_(Bjohann  <[email protected]>
+2002-06-28  Katsumi Yamaoka  <[email protected]>
 
 	* message.el (message-font-lock-keywords): Don't fontify
 	headers in the message body, only in the header.
 	(message-font-lock-make-header-matcher): New function, used by
 	message-font-lock-keywords.
-	From Katsumi Yamaoka <[email protected]>.
 
 2002-06-28  Katsumi Yamaoka  <[email protected]>
 
@@ -8766,24 +8747,22 @@
 	(last, coerce, subseq): Remove compiler macros for those built-in
 	or unused functions.
 
-2002-06-17  Kai Gro,b_(Bjohann  <[email protected]>
+2002-06-17  Simon Josefsson  <[email protected]>
 
 	* gnus-start.el (gnus-clear-system, gnus-read-newsrc-file): Make
 	sure to write byte-compiled versions of gnus-*-format-alist to
-	.newsrc.eld.  From Simon Josefsson.
+	.newsrc.eld.
 
-2002-06-16  Kai Gro,b_(Bjohann  <[email protected]>
+2002-06-16  Bj,Ax(Brn Mork  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-read-servers)
 	(gnus-agent-write-servers): Put server name (string like
 	"nnchoke:frumple") in the file instead of a server specification
 	(Lisp expression like (nnchoke "frumple" ...parameters...)).
-	From Bj,Ax(Brn Mork <[email protected]>.
 
-2002-06-16  Simon Josefsson  <[email protected]>
+2002-06-16  Reiner Steib  <[email protected]>
 
-	* gnus-cache.el (gnus-cache-remove-article): n is &optional.  From
-	Reiner Steib <[email protected]>.
+	* gnus-cache.el (gnus-cache-remove-article): n is &optional.
 
 2002-06-15  ShengHuo ZHU  <[email protected]>
 
@@ -8819,8 +8798,10 @@
 	* gnus-int.el (gnus-request-move-article): Agent expire article if
 	successfuly moved.
 
+2002-06-11  Niklas Morberg  <[email protected]>
+
 	* nnweb.el (nnweb-google-create-mapping): Honors the value of
-	nnweb-max-hits.  From Niklas Morberg <[email protected]>.
+	nnweb-max-hits.
 
 2002-06-10  Simon Josefsson  <[email protected]>
 
@@ -8869,11 +8850,10 @@
 	* nnmail.el (nnmail-mail-splitting-decodes): New variable.
 	(nnmail-article-group): Use it.
 
-2002-05-30  Kai Gro,b_(Bjohann  <[email protected]>
+2002-05-30  Jesper Harder  <[email protected]>
 
 	* gnus-msg.el (gnus-inews-yank-articles): Merge split header lines
-	so that code reading them won't be surprised.  From Jesper Harder
-	<[email protected]>.
+	so that code reading them won't be surprised.
 
 2002-05-29  Simon Josefsson  <[email protected]>
 
@@ -8890,11 +8870,10 @@
 
 	* gnus-group.el (gnus-group-line-format): Doc fix.
 
-2002-05-28  Kai Gro,b_(Bjohann  <[email protected]>
+2002-05-28  Jesper Harder  <[email protected]>
 
 	* gnus-msg.el (gnus-inews-yank-articles): Unfold headers of
-	original article before yanking.  From Jesper Harder
-	<[email protected]>.
+	original article before yanking.
 
 2002-05-26  Simon Josefsson  <[email protected]>
 
@@ -8920,22 +8899,23 @@
 	(gnus-summary-prepare-threads): Avoid simplifying every Subject
 	twice by saving the simplified subject string in simp-subject.
 
-2002-05-23  Simon Josefsson  <[email protected]>
+2002-05-23  Benjamin Rutt  <[email protected]>  (tiny change)
 
-	* gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo.  Trivial
-	change from Benjamin Rutt <[email protected]>.
+	* gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo.
 
-	* nnweb.el (nnweb-type): Remove dejanewsold.  Trivial change from
-	Niklas Morberg <[email protected]>.
+2002-05-23  Niklas Morberg  <[email protected]>  (tiny change)
+
+	* nnweb.el (nnweb-type): Remove dejanewsold.
 
 2002-05-22  Simon Josefsson  <[email protected]>
 
 	* sieve.el (sieve-change-region): Define it before it is used.
 
+2002-05-22  Benjamin Rutt  <[email protected]>
+
 	* gnus-msg.el (gnus-confirm-mail-reply-to-news)
 	(gnus-summary-reply): Ask for confirmation when replying to news.
-	Defaults to not ask.  From Benjamin Rutt
-	<[email protected]>.
+	Defaults to not ask.
 
 	* nnimap.el (nnimap-nov-is-evil): Improve doc.
 
@@ -8990,10 +8970,13 @@
 	* nnmail.el (nnmail-cache-insert): Change group to required,
 	removed code which tried to figure out the group.
 
-2002-05-13  Josh Huber  <[email protected]>
+2002-05-13  Hans de Graaff  <[email protected]>
 
 	* mml.el (mml-generate-mime-1): Fix mml generation for signed only
-	messages. From Hans de Graaff <[email protected]>.
+	messages.
+
+2002-05-13  Josh Huber  <[email protected]>
+
 	* nnml.el (nnml-request-accept-article): Pass in the group name to
 	nnmail-cache-insert, since it's available.
 
@@ -9001,8 +8984,7 @@
 
 	* nndoc.el (nndoc-mime-digest-type-p): Set proper file-end.
 
-2002-05-08  Kai Gro,b_(Bjohann  <[email protected]>
-	From Florian Weimer <[email protected]>.
+2002-05-08  Florian Weimer  <[email protected]>
 
 	* gnus.el (subscribed): New group parameter.
 	(gnus-find-subscribed-addresses): Use it.
@@ -9022,16 +9004,15 @@
 	parenthesis for "<" and ">".  Suggested by Andreas Schwab
 	<[email protected]>.
 
-2002-05-07  Kai Gro,b_(Bjohann  <[email protected]>
+2002-05-07  Josh Huber  <[email protected]>
 
 	* nnmail.el (nnmail-cache-insert): Prefer group-art over group
-	when intuiting the group the message is written to.  From Josh
-	Huber <[email protected]>.
+	when intuiting the group the message is written to.
 
-2002-05-06  Simon Josefsson  <[email protected]>
+2002-05-06  Matt Armstrong  <[email protected]>
 
 	* gnus-topic.el (gnus-group-topic-parameters): Work when group
-	buffer doesn't show group.  From Matt Armstrong <[email protected]>.
+	buffer doesn't show group.
 
 2002-05-06  Josh Huber  <[email protected]>
 
@@ -9078,7 +9059,7 @@
 	server.
 	(nnimap-mailbox-info): defvar instead of defvoo.
 
-2002-05-01 20:09:21 Lars Magne Ingebrigtsen  <[email protected]>
+2002-05-01 20:09:21  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.06 is released.
 
@@ -9188,8 +9169,7 @@
 
 	* gnus-art.el (article-unsplit-urls): Allow trailing SPC.
 
-2002-04-24  Kai Gro,b_(Bjohann  <[email protected]>
-	From Dan Christensen <[email protected]>.
+2002-04-24  Dan Christensen  <[email protected]>
 
 	* nndoc.el (nndoc-type-alist, nndoc-lanl-gov-announce-type-p)
 	(nndoc-transform-lanl-gov-announce, nndoc-generate-lanl-gov-head):
@@ -9211,11 +9191,10 @@
 	(gnus-netrc-get, gnus-netrc-machine, gnus-parse-netrc): Aliased to
 	new code in netrc.el.
 
-2002-04-23  Kai Gro,b_(Bjohann  <[email protected]>
+2002-04-23  Matthieu Moy  <[email protected]>
 
 	* gnus-msg.el (gnus-summary-resend-message-edit): Remove
-	message-ignored-resent-headers, too.  From Matthieu Moy
-	<[email protected]>.
+	message-ignored-resent-headers, too.
 
 2002-04-22  Bj,Av(Brn Torkelsson  <[email protected]>
 
@@ -9280,8 +9259,7 @@
 	* message.el (message-gen-unsubscribed-mft): accept a prefix
 	argument so CC can be included with C-u C-c C-f C-a
 
-2002-04-17  Kai Gro,b_(Bjohann  <[email protected]>
-	From Ted Zlatanov <[email protected]>.
+2002-04-17  Ted Zlatanov  <[email protected]>
 
 	* spam.el (spam-whitelist, spam-blacklist, spam-enter-whitelist):
 	Improve docstring.
@@ -9318,11 +9296,10 @@
 	* nnml.el (nnml-save-nov, nnml-generate-nov-file):
 	* pop3.el (pop3-md5): Don't hardcode point-min == 1.
 
-2002-04-12  Katsumi Yamaoka  <[email protected]>
+2002-04-12  Daiki Ueno  <[email protected]>
 
 	* gnus-srvr.el (gnus-server-set-info): Clear
 	`gnus-server-method-cache' when `gnus-server-alist' is changed.
-	From Daiki Ueno <[email protected]>.
 
 2002-04-11  Simon Josefsson  <[email protected]>
 
@@ -9476,20 +9453,18 @@
 
 	* message.el (message-mode): Fix doc.
 
-2002-03-25  Simon Josefsson  <[email protected]>
+2002-03-25  Matthieu Moy  <[email protected]>
 
-	* message.el (message-subject-re-regexp): Skip Re[42]: junk.  From
-	Matthieu Moy <[email protected]>.
+	* message.el (message-subject-re-regexp): Skip Re[42]: junk.
 
 2002-03-24  Jesper Harder  <[email protected]>
 
 	* mml-sec.el (mml-unsecure-message): Add docstring.
 
-2002-03-23  ShengHuo ZHU  <[email protected]>
+2002-03-23  Andre Srinivasan  <[email protected]>  (tiny change)
 
 	* nnmail.el (nnmail-large-newsgroup): Fix doc, allow non-numeric
 	value.
-	Trivial change from [email protected]
 
 2002-03-22  Josh Huber  <[email protected]>
 
@@ -9517,8 +9492,9 @@
 	* message.el (message-font-lock-keywords): Support multi-line MML
 	tags.
 
+2002-03-21  L,Bu(Brentey K,Ba(Broly  <[email protected]>
+
 	* gnus-sum.el (gnus-print-buffer): Remove gnus-decoration.
-	Trivial change from [email protected] (L,Bu(Brentey K,Aa(Broly)
 
 2002-03-20  Katsumi Yamaoka  <[email protected]>
 
@@ -9542,30 +9518,28 @@
 	(gnus-sum-thread-tree-leaf-with-other)
 	(gnus-sum-thread-tree-single-leaf): Make customizable.
 
-2002-03-16  Simon Josefsson  <[email protected]>
+2002-03-16  Francis Litterio  <[email protected]>
 
 	* gnus-util.el (gnus-extract-address-components): Don't break on
-	names such as James "Kibo" Parry.  From Francis Litterio
-	<[email protected]>.
+	names such as James "Kibo" Parry.
 
-2002-03-13  Simon Josefsson  <[email protected]>
+2002-03-13  Pavel Jan,Am(Bk  <[email protected]>
 
-	* pop3.el (pop3-open-server): Revert multibyte change.  From
-	[email protected] (Pavel Jan,Am(Bk).
+	* pop3.el (pop3-open-server): Revert multibyte change.
 
-	* message.el (message-send-mail-with-qmail): Make it work.  From
-	[email protected] (Pavel Jan,Am(Bk).
+	* message.el (message-send-mail-with-qmail): Make it work.
 
 2002-03-13  Josh Huber  <[email protected]>
 
 	* message.el (message-make-mft): Set case-fold-search while
 	generating the MFT.  Also, a little cleanup in the MFT code.
 
-2002-03-12  Simon Josefsson  <[email protected]>
+2002-03-12  Faried Nawaz  <[email protected]>  (tiny change)
 
-	* message.el (message-qmail-inject-args): May be function.
-	(message-send-mail-with-qmail): Call function if m-q-i-a is
-	function.  From [email protected] (Faried Nawaz).
+	* message.el (message-qmail-inject-args): May be function.  Adjust
+	doc string and custom type.
+	(message-send-mail-with-qmail): Call function if m-q-i-a is a
+	function.
 
 2002-03-12  ShengHuo ZHU  <[email protected]>
 
@@ -9587,26 +9561,26 @@
 	* nnslashdot.el (nnslashdot-request-article): Remove javascript
 	too.
 
-2002-03-09  ShengHuo ZHU  <[email protected]>
+2002-03-09  Andre Srinivasan  <[email protected]>  (tiny change)
 
 	* gnus-sum.el (gnus-summary-save-parts-default-mime): Remove
 	duplication.
 	(gnus-summary-save-parts-type-history): Ditto.
 	(gnus-summary-save-parts-last-directory): Ditto.
-	Trivial change from [email protected]
 
 2002-03-09  Paul Jarc  <[email protected]>
 
 	* gnus-start.el (gnus-auto-subscribed-groups): Include nnmaildir.
 
+2002-03-06  Matthieu Moy  <[email protected]>
+
+	* gnus-msg.el (gnus-summary-resend-message-edit): New function.
+
 2002-03-06  ShengHuo ZHU  <[email protected]>
 
 	* nnslashdot.el (nnslashdot-request-article): Use "<!-- no ad 6
 	-->" as the end of the first article.
 
-	* gnus-msg.el (gnus-summary-resend-message-edit): New function.
-	From Matthieu Moy <[email protected]>
-
 	* message.el (message-add-action): Use add-to-list.
 	(message-delete-action): New function.
 
@@ -9668,17 +9642,15 @@
 	completing-read.
 	(mm-view-pkcs7-decrypt): CRLF->LF.
 
-2002-03-04  Paul Jarc  <[email protected]>
+2002-03-04  Teodor Zlatanov  <[email protected]>
 
 	* message.el (message-hierarchical-addresses): New variable.
 	(message-get-reply-headers): Use it.
-	From Ted Zlatanov <[email protected]>
 
-2002-03-03  ShengHuo ZHU  <[email protected]>
+2002-03-03  Geoff Greene  <[email protected]>  (tiny change)
 
 	* message.el (message-mode): If buffer-file-name, don't set auto
 	save file name.
-	Trivial change from Geoff Greene <[email protected]>
 
 2002-03-02  ShengHuo ZHU  <[email protected]>
 
@@ -9725,11 +9697,12 @@
 	* gnus-sum.el (gnus-articles-to-read): Use large-newsgroup-initial.
 	(gnus-summary-insert-old-articles): Ditto.
 
-2002-02-26  ShengHuo ZHU  <[email protected]>
+2002-02-26  TSUCHIYA Masatoshi  <[email protected]>
 
 	* gnus-sum.el (gnus-articles-to-read): `gnus-large-newsgroup' is
 	used as the default answer of the question, "How many articles?".
-	From TSUCHIYA Masatoshi <[email protected]>
+
+2002-02-26  ShengHuo ZHU  <[email protected]>
 
 	* nnagent.el (nnagent-retrieve-headers): Remove articles with
 	small numbers.
@@ -9738,14 +9711,15 @@
 
 	* deuglify.el: Fix comments.
 
+2002-02-23  Andre Srinivasan  <[email protected]>  (tiny change)
+
+	* mml.el (mml-generate-mime-1): Add cdr.
+
 2002-02-23  ShengHuo ZHU  <[email protected]>
 
 	* html2text.el (html2text-clean-anchor): If there is no HREF,
 	insert nothing.
 
-	* mml.el (mml-generate-mime-1): Add cdr.
-	From: [email protected]
-
 	* mm-view.el (mm-text-html-renderer-alist): Add html2text.
 	(mm-text-html-washer-alist): Ditto.
 
@@ -9761,11 +9735,15 @@
 
 	* deuglify.el: Change copy right. Add autoload. Add coding-system.
 
-	* deuglify.el: New file. The original file name is
-	gnus-outlook-deuglify.el from Raymond Scholz <[email protected]>.
+2002-02-22  Raymond Scholz  <[email protected]>
+
+	* deuglify.el: New file.  The original file name is
+	gnus-outlook-deuglify.el.
+
+2002-02-22  Andre Srinivasan  <[email protected]>  (tiny change)
 
 	* mm-decode.el (mm-display-external): Use
-	mm-file-name-rewrite-functions.  From <[email protected]>
+	mm-file-name-rewrite-functions.
 
 2002-02-22  Paul Jarc  <[email protected]>
 
@@ -9801,17 +9779,19 @@
 
 	* gnus-art.el (gnus-article-edit-done): Widen the buffer.
 
+	* message.el (message-send-mail): Be talkative.
+
+2002-02-20  TSUCHIYA Masatoshi  <[email protected]>
+
 	* gnus-group.el (gnus-group-name-decode): Don't test
 	multibyte-string, because it breaks XEmacs.
-	From: TSUCHIYA Masatoshi <[email protected]>
 
-	* message.el (message-send-mail): Be talkative.
+2002-02-20  Reiner Steib  <[email protected]>
 
 	* mm-decode.el (mm-inlined-types): Add application/x-emacs-lisp.
 	(mm-automatic-display): Ditto.
 
 	* mailcap.el (mailcap-mime-data): Ditto.
-	From: Reiner Steib <[email protected]>
 
 2002-02-20  Katsumi Yamaoka  <[email protected]>
 
@@ -9853,10 +9833,10 @@
 
 	* nnultimate.el (nnultimate-retrieve-headers): Clean up.
 
-2002-02-18  Paul Jarc  <[email protected]>
+2002-02-18  Mark Thomas  <[email protected]>
 
 	* gnus-util.el (gnus-parent-id): Ignore trailing whitespace in the
-	References header field.  From Mark Thomas <[email protected]>.
+	References header field.
 
 2002-02-18  ShengHuo ZHU  <[email protected]>
 
@@ -9970,8 +9950,9 @@
 
 	* message-utils.el: Adopt the file.
 
+2002-02-15  Holger Schauer  <[email protected]>
+
 	* message-utils.el: New file.
-	From Holger Schauer <[email protected]>
 
 2002-02-14  ShengHuo ZHU  <[email protected]>
 
@@ -10079,9 +10060,6 @@
 	gnus-decoration property.
 	* gnus-msg.el (gnus-copy-article-buffer): Remove gnus-decoration.
 
-	* message.el (message-mode): Set local-abbrev-table.
-	From Matt Armstrong <[email protected]>.
-
 	* gnus-art.el (gnus-article-treat-unfold-headers): Don't remove
 	too many spaces.
 
@@ -10089,8 +10067,13 @@
 	(rfc2047-decode-region): Don't unfold. Let
 	gnus-article-treat-unfold-headers do it.
 
+2002-02-07  Matt Armstrong  <[email protected]>.
+
+	* message.el (message-mode): Set local-abbrev-table.
+
+2002-02-07  Jesper Harder  <[email protected]>
+
 	* gnus-sum.el (gnus-dependencies-add-header): Fix typo.
-	From: Jesper Harder <[email protected]>
 
 2002-02-06  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -10117,16 +10100,18 @@
 
 	* nnweb.el (nnweb-google-parse-1): Use a correct format of date.
 
-	* gnus-agent.el (gnus-agent-summary-make-menu-bar): Fix typo.
-	From Stefan Reich,Av(Br <[email protected]>.
-
 	* nnagent.el (nnagent-request-expire-articles): Don't delete
 	files.
 
-2002-02-05  ShengHuo ZHU  <[email protected]>
+2002-02-06  Stefan Reich,Av(Br  <[email protected]>
+
+	* gnus-agent.el (gnus-agent-summary-make-menu-bar): Fix typo.
+
+2002-02-05  Sriram Karra  <[email protected]>
 
 	* message.el (message-gen-unsubscribed-mft): New function.
-	From Sriram Karra <[email protected]>.
+
+2002-02-05  ShengHuo ZHU  <[email protected]>
 
 	* gnus.el (gnus-article-unpropagated-mark-lists): Backslash the
 	open parenthesis.
@@ -10168,17 +10153,17 @@
 	* gnus-art.el (gnus-treatment-function-alist): Move hide-citation,
 	highlight-citation after emphasize.
 
-2002-02-04  Simon Josefsson  <[email protected]>
+2002-02-04  David Edmondson  <[email protected]>
 
-	* nnfolder.el (nnfolder-open-marks):
+	* nnfolder.el (nnfolder-open-marks): Message when done.
 
-	* nnml.el (nnml-open-marks): Message when done.  From David
-	Edmondson <[email protected]>.
+	* nnml.el (nnml-open-marks): Ditto.
 
-2002-02-03  ShengHuo ZHU  <[email protected]>
+2002-02-03  Steinar Bang  <[email protected]>
 
 	* imap.el (imap-anonymous-auth): Fix typo.
-	From: Steinar Bang <[email protected]>
+
+2002-02-03  ShengHuo ZHU  <[email protected]>
 
 	* gnus-cache.el (gnus-cache-braid-nov): Use set-buffer instead of
 	save-excursion.
@@ -10232,14 +10217,15 @@
 
 	* gnus.el (gnus-agent): Make it customizable.
 
-	* gnus-dired.el: New file.
-	From Benjamin Rutt <[email protected]>
-
 	* gnus-cache.el (gnus-cache-articles-in-group): Remove from active
 	if no article.
 	(gnus-cache-possibly-remove-article): Ditto.
 	(gnus-cache-possibly-enter-article): Use gnus-add-to-sorted-list.
 
+2002-02-02  Benjamin Rutt  <[email protected]>
+
+	* gnus-dired.el: New file.
+
 2002-02-01  Simon Josefsson  <[email protected]>
 
 	* gnus-int.el (gnus-request-accept-article): Use gnus-get-function.
@@ -10740,7 +10726,7 @@
 
 	* gnus.el (gnus-version-number): Bump version number.
 
-2002-01-20 05:33:30 Lars Magne Ingebrigtsen  <[email protected]>
+2002-01-20 05:33:30  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.05 is released.
 
@@ -10974,8 +10960,9 @@
 	* message.el (message-newline-and-reformat): Use `newline' instead
 	of inserting \n, so that the newline is marked as hard.
 
+2002-01-13  Jesper Harder  <[email protected]>
+
 	* gnus-spec.el (gnus-pad-form): Don't evaluate EL multiple times.
-	From Jesper Harder <[email protected]>.
 
 2002-01-12  ShengHuo ZHU  <[email protected]>
 
@@ -11199,11 +11186,13 @@
 	* gnus-group.el (gnus-group-read-ephemeral-group): Restore the old
 	behavior of quit-config.
 
+2002-01-08  Bj,Ax(Brn Mork  <[email protected]>  (tiny change)
+
 	* message.el (message-make-from): Don't quote fullname.
-	From: Bj,Ax(Brn Mork <[email protected]>
+
+2002-01-08  Andre Srinivasan  <[email protected]>  (tiny change)
 
 	* gnus-group.el (gnus-group-suspend): Don't kill message buffers.
-	From: <[email protected]>
 
 2002-01-07  ShengHuo ZHU  <[email protected]>
 
@@ -11486,10 +11475,10 @@
 
 	* gnus-agent.el (gnus-agent-fetch-session): Run hook.
 
-2002-01-03  Kai Gro,b_(Bjohann  <[email protected]>
+2002-01-03  Dave Love  <[email protected]>
 
 	* gnus-start.el (gnus-read-init-file): Don't force coding system
-	for ~/.gnus.  From Dave Love <[email protected]>.
+	for ~/.gnus.
 
 2002-01-03  ShengHuo ZHU  <[email protected]>
 
@@ -11755,7 +11744,7 @@
 	(message-fix-before-sending): Highlight invisible text and place
 	point there.
 
-2002-01-01 02:32:53 Lars Magne Ingebrigtsen  <[email protected]>
+2002-01-01 02:32:53  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.04 is released.
 
@@ -12094,11 +12083,10 @@
 	(gnus-update-marks): Use `gnus-range-add' on a uncompressed list
 	instead, it seems to result in shorter ranges.
 
-2001-12-26 11:00:00  ShengHuo ZHU  <[email protected]>
+2001-12-26 11:00:00  Jesper Harder  <[email protected]>
 
 	* mm-util.el (mm-iso-8859-x-to-15-region): Use
 	insert-before-markers.
-	From Jesper Harder <[email protected]>
 
 2001-12-26  Paul Jarc  <[email protected]>
 
@@ -12127,12 +12115,11 @@
 	(nnmaildir-version): Indicate that nnmaildir is now a standard
 	part of Gnus, not separately released.
 
-2001-12-21 08:00:00  ShengHuo ZHU  <[email protected]>
+2001-12-21 08:00:00  Pavel Jan,Am(Bk  <[email protected]>
 
 	* gnus-art.el, gnus-picon.el, gnus-sieve.el, gnus-sum.el:
 	* gnus-xmas.el, imap.el, mailcap.el, mm-util.el, nnfolder.el:
 	* nnheader.el, nnmail.el: Nil/NIL vs. nil.
-	From  Pavel Jan,Am(Bk  <[email protected]>
 
 2001-12-20 15:00:00  ShengHuo ZHU  <[email protected]>
 
@@ -12145,10 +12132,9 @@
 	(nnimap-close-group): Don't quote KEYLIST items.  Suggested by
 	Brian P Templeton <[email protected]>.
 
-2001-12-19 17:00:00  ShengHuo ZHU  <[email protected]>
+2001-12-19 17:00:00  Paul Jarc  <[email protected]>
 
 	* nnmaildir.el: New file.
-	From Paul Jarc <[email protected]>.
 
 2001-12-19 16:00:00  ShengHuo ZHU  <[email protected]>
 
@@ -12172,8 +12158,7 @@
 
 	* gnus-win.el (gnus-get-buffer-window): Use gnus-delete-if.
 
-2001-12-18 11:00:00  ShengHuo ZHU  <[email protected]>
-	   From Harald Meland <[email protected]>
+2001-12-18 11:00:00  Harald Meland  <[email protected]>
 
 	* gnus-win.el (gnus-get-buffer-window): New function.
 	(gnus-all-windows-visible-p): Use it.
@@ -12248,11 +12233,10 @@
 	subscribe-level
 	* gnus-topic.el (gnus-subscribe-topics): use it.
 
-2001-12-13 22:00:00  ShengHuo ZHU  <[email protected]>
+2001-12-13 22:00:00  Sean Neakums  <[email protected]>  (tiny change)
 
 	* gnus-msg.el (gnus-summary-mail-forward): Forward all marked
-	messages. (A small patch with indentation)
-	From Sean Neakums <[email protected]>.
+	messages.
 
 	* gnus-uu.el (gnus-uu-grab-articles): Set gnus-current-article to
 	nil after shooting down the gnus-original-article-buffer.
@@ -12327,12 +12311,11 @@
 
 	* mml.el (mime-to-mml): Remove Content-Disposition too.
 
-2001-12-09 08:00:00  ShengHuo ZHU  <[email protected]>
+2001-12-09 08:00:00  TSUCHIYA Masatoshi  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-buffer-name): Decode group name.
 	* gnus-group.el (gnus-group-name-decode): Decode unibyte
 	strings only.
-	From TSUCHIYA Masatoshi <[email protected]>
 
 2001-12-08  Nevin Kapur  <[email protected]>
 
@@ -12433,15 +12416,14 @@
 	the beginning of lines.
 	(gnus-complex-form-to-spec): Ditto.
 
-2001-12-01 08:00:00  ShengHuo ZHU  <[email protected]>
+2001-12-01 08:00:00  Paul Jarc  <[email protected]>
 
 	* message.el (message-make-mft): Fix the m-s-a-file regexp.
-	From Paul Jarc <[email protected]>.
 
-2001-11-30 21:00:00  ShengHuo ZHU  <[email protected]>
+2001-11-30 21:00:00  Paul Jarc  <[email protected]>
 
 	* message.el: New variable message-subscribed-address-file;
-	use it in message-make-mft.  From Paul Jarc <[email protected]>.
+	use it in message-make-mft.
 
 2001-11-30 12:00:00  ShengHuo ZHU  <[email protected]>
 
@@ -12574,11 +12556,11 @@
 
 	* message.el (sha1): eval-and-compile.
 
-2001-11-20  Simon Josefsson  <[email protected]>
+2001-11-20  Paul Jarc  <[email protected]>
 
 	* message.el (message-allow-no-recipients): New variable.
 	(message-send): Use it, customize the prompting when posting to
-	Gcc/Fcc alone.  From [email protected] (Paul Jarc).
+	Gcc/Fcc alone.
 
 2001-11-20 09:00:00  ShengHuo ZHU  <[email protected]>
 
@@ -12698,14 +12680,17 @@
 
 	* mml2015.el: Mention RFC 3156.
 
-	* mml1991.el: New file.  From Sascha L,A|(Bdecke <[email protected]>.
+2001-11-12  Sascha L,A|(Bdecke  <[email protected]>
+
+	* mml1991.el: New file.
 
 2001-11-12 13:00:00  ShengHuo ZHU  <[email protected]>
 
 	* gnus-start.el (gnus-auto-subscribed-groups): Use ^nnml.
 
+2001-11-12  Michael Cook  <[email protected]>
+
 	* gnus-sum.el (gnus-summary-move-article): Use number-to-string.
-	  From <[email protected]>
 
 2001-11-11  Simon Josefsson  <[email protected]>
 
@@ -12714,10 +12699,9 @@
 	canlock, no need to require two different hash algs).  Suggested
 	by Ferenc Wagner <[email protected]>.
 
-2001-11-09  Simon Josefsson  <[email protected]>
+2001-11-09  Pavel Jan,Am(Bk  <[email protected]>
 
-	* gnus.el (gnus-local-domain): Fix doc.  From Pavel Jan,Am(Bk
-	<[email protected]>.
+	* gnus.el (gnus-local-domain): Fix doc.
 
 2001-11-09  Kai Gro,b_(Bjohann  <[email protected]>
 
@@ -12959,7 +12943,7 @@
 	mm-with-unibyte-current-buffer-mule4): Use them.
 	(mm-find-mime-charset-region): Treat iso-2022-jp.
 
-	From  Dave Love  <[email protected]>:
+2001-10-30  Dave Love  <[email protected]>
 
 	* mm-util.el (mm-mime-mule-charset-alist): Make it correct by
 	construction.
@@ -13032,10 +13016,10 @@
 
 	* gnus-msg.el (gnus-setup-message): Call post-command-hook.
 
-2001-10-29  Simon Josefsson  <[email protected]>
+2001-10-29  Jesper Harder  <[email protected]>
 
 	* mml.el (mml-preview): Bind message-this-is-news if it is
-	news. From Jesper Harder <[email protected]>.
+	news.
 
 2001-10-28  Simon Josefsson  <[email protected]>
 
@@ -13051,8 +13035,9 @@
 	* message.el (message-indent-citation): Don't add trailing
 	whitespace when citing text.
 
-	* gnus.el (gnus-group-faq-directory): Fix.  From Jesper Harder
-	<[email protected]>.
+2001-10-27  Jesper Harder  <[email protected]>
+
+	* gnus.el (gnus-group-faq-directory): Fix.
 
 2001-10-26 14:00:00  ShengHuo ZHU  <[email protected]>
 
@@ -13129,22 +13114,23 @@
 	* message.el (message-do-auto-fill): Avoid calling
 	'rfc822-goto-eoh'.
 
-2001-10-20  Kai Gro,b_(Bjohann  <[email protected]>
-	From Paul Jarc <[email protected]>.
+2001-10-20  Paul Jarc  <[email protected]>
 
 	* message.el (message-get-reply-headers): Restructure the logic
-	and add comments.  From Paul Jarc <[email protected]>.
+	and add comments.
 
 2001-10-20  Simon Josefsson  <[email protected]>
 
 	* message.el (message-cancel-news): Support cancel-locks.
 	Suggested by Per Abrahamsson.
 
-	* nnml.el (nnml-marks-changed-p): Use `equal' when comparing
-	conses.  From David Z Maze <[email protected]>.
-
 	* nnfolder.el (nnfolder-marks-changed-p): Ditto.
 
+2001-10-20  David Z. Maze  <[email protected]>
+
+	* nnml.el (nnml-marks-changed-p): Use `equal' when comparing
+	conses.
+
 2001-10-19  Per Abrahamsen  <[email protected]>
 
 	* mm-decode.el (mm-default-directory): Fix customize type.
@@ -13174,8 +13160,7 @@
 	* gnus-sum.el (gnus-group-make-articles-read): Call g-r-set-mark
 	when undoing.
 
-2001-10-18  Simon Josefsson  <[email protected]>
-	From Frank Schmitt <[email protected]>
+2001-10-18  Frank Schmitt  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-limit-to-display-predicate): Fix typo.
 	(gnus-summary-make-menu-bar): Ditto.
@@ -13185,11 +13170,10 @@
 	* nnimap.el (nnimap-expiry-target): Make sure it is back to the
 	server. Suggested by ShengHuo ZHU <[email protected]>.
 
-2001-10-17 17:00:00  ShengHuo ZHU  <[email protected]>
+2001-10-17 17:00:00  Frank Schmitt  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-line-format-alist): user-date entry.
 	* gnus-util.el (gnus-user-date): New function.
-	From Frank Schmitt <[email protected]>.
 
 2001-10-17  Per Abrahamsen  <[email protected]>
 
@@ -13222,8 +13206,7 @@
 	* gnus-msg.el (gnus-post-method): Changed two instances of
 	`active' to `current' and one `null' to `not'.
 
-2001-10-16  Kai Gro,b_(Bjohann  <[email protected]>
-	From Katsumi Yamaoka <[email protected]>.
+2001-10-16  Katsumi Yamaoka  <[email protected]>
 
 	* message.el (message-setup-fill-variables): Use
 	`normal-auto-fill-function' instead of `auto-fill-function'.
@@ -13279,10 +13262,9 @@
 	* gnus-art.el (article-emphasize): Set `g-a-wash-types' after
 	doing stuff that clears it.
 
-2001-10-12  Simon Josefsson  <[email protected]>
+2001-10-12  Eric Marsden  <[email protected]>
 
 	* gnus-cache.el (gnus-summary-limit-include-cached): Rewrite.
-	From Eric Marsden <[email protected]>.
 
 2001-10-12 10:00:00  ShengHuo ZHU  <[email protected]>
 
@@ -13484,20 +13466,17 @@
 	(gnus-topic-catchup-articles): New function. Suggested by Robin
 	S. Socha <[email protected]>.
 
-2001-09-27 11:00:00  ShengHuo ZHU  <[email protected]>
-	From Gerd M,Av(Bllmann <[email protected]>.
+2001-09-27 11:00:00  Gerd M,Av(Bllmann  <[email protected]>.
 
 	* gnus-ems.el (gnus-article-display-xface): Insert xface after
 	previous ones.
 
-2001-09-27 07:00:00  ShengHuo ZHU  <[email protected]>
-	From Daiki Ueno  <[email protected]>
+2001-09-27 07:00:00  Daiki Ueno  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-show-article): The arglist of
 	detect-coding-region is incompatible.
 
-2001-09-26 18:00:00  ShengHuo ZHU  <[email protected]>
-	From Katsuhiro Hermit Endo <[email protected]>
+2001-09-26 18:00:00  Katsuhiro Hermit Endo  <[email protected]>
 
 	* gnus-group.el (gnus-group-delete-group): Typo.
 
@@ -13580,10 +13559,9 @@
 	* gnus-srvr.el (gnus-server-insert-server-line): Don't let an
 	error querying a backend abort the whole process.
 
-2001-09-17 08:00:00  ShengHuo ZHU  <[email protected]>
+2001-09-17 08:00:00  Gerd M,Av(Bllmann  <[email protected]>
 
 	* gnus-srvr.el (gnus-server-mode): Fix bogus fontification.
-	From Gerd M,Av(Bllmann <[email protected]>.
 
 2001-09-17  Didier Verna  <[email protected]>
 
@@ -13655,7 +13633,7 @@
 	* gnus-diary.el (message-mode-map): bind the above to `C-c D c'.
 	* gnus-diary.el (gnus-article-edit-mode-map): ditto.
 
-2001-09-10 TSUCHIYA Masatoshi  <[email protected]>
+2001-09-10  TSUCHIYA Masatoshi  <[email protected]>
 
 	* gnus-sum.el (gnus-select-newsgroup): Make
 	`gnus-current-select-method' buffer-local.
@@ -13663,8 +13641,7 @@
 	* gnus-art.el (gnus-request-article-this-buffer): Refer
 	`gnus-current-select-method' in the current summary buffer.
 
-2001-09-10  Simon Josefsson  <[email protected]>
-	From Daniel Pittman <[email protected]>
+2001-09-10  Daniel Pittman  <[email protected]>
 
 	* gnus-spec.el (gnus-correct-pad-form): Fix.
 
@@ -13715,8 +13692,7 @@
 	* gnus-agent.el (gnus-agent-fetch-group): If online, actually
 	fetch group.
 
-2001-09-08  Simon Josefsson  <[email protected]>
-	From Daniel Pittman <[email protected]>
+2001-09-08  Daniel Pittman  <[email protected]>
 
 	* gnus-spec.el (gnus-correct-pad-form): New function.
 	(gnus-parse-simple-format): Use it.
@@ -13728,7 +13704,7 @@
 	Putnam <[email protected]>.
 	(gnus-group-sort-selected-groups): Touch dribble file.
 
-2001-09-07 Raja R Harinath  <[email protected]>
+2001-09-07  Raja R Harinath  <[email protected]>
 
 	* nnml.el (nnml-filenames-are-evil): New variable.
 	(nnml-article-to-file-alist): Rename to ...
@@ -13750,10 +13726,9 @@
 	* gnus-sum.el (gnus-summary-toggle-smiley): New function. Toggles
 	display of graphical smilies.
 
-2001-09-07 02:00:00  ShengHuo ZHU  <[email protected]>
+2001-09-07 02:00:00  Bill White  <[email protected]>
 
 	* gnus-start.el (gnus-setup-news): A typo.
-	From Bill White <[email protected]>.
 
 2001-09-06  Simon Josefsson  <[email protected]>
 
@@ -13864,8 +13839,7 @@
 	* nnfolder.el (nnfolder-save-marks): Don't create directory named
 	after group in ~/.
 
-2001-08-25  Simon Josefsson  <[email protected]>
-	From Andreas Jaeger  <[email protected]>
+2001-08-25  Andreas Jaeger  <[email protected]>
 
 	* nnfolder.el (nnfolder-open-marks): Fix typo.
 	* nnml.el (nnml-open-marks): Likewise.
@@ -13919,11 +13893,12 @@
 
 	* mml.el (mml-generate-mime-1): Force as multibyte string.
 
-2001-08-24 12:00:00  ShengHuo ZHU  <[email protected]>
+2001-08-24 12:00:00  Martin Kretzschmar  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-insert-line)
 	(gnus-summary-prepare-threads): gnus-tmp-lines should be a string.
-	From Martin Kretzschmar <[email protected]>
+
+2001-08-24 12:00:00  ShengHuo ZHU  <[email protected]>
 
 	* gnus-spec.el (gnus-correct-substring): Take optional END.
 
@@ -13945,8 +13920,7 @@
 	* gnus-util.el (gnus-create-info-command): Return an interactive
 	function.
 
-2001-08-23 19:00:00  ShengHuo ZHU  <[email protected]>
-	From Katsumi Yamaoka <[email protected]>
+2001-08-23 19:00:00  Katsumi Yamaoka  <[email protected]>
 
 	* gnus-spec.el (gnus-parse-complex-format): Use equal.
 
@@ -14100,8 +14074,7 @@
 
 	* gnus.el (gnus-server-visual): Add defgroup.
 
-2001-08-19  Simon Josefsson  <[email protected]>
-	From Joe Casadonte <[email protected]>
+2001-08-19  Joe Casadonte  <[email protected]>
 
 	* gnus-srvr.el (gnus-server-opened-face, gnus-server-closed-face,
 	gnus-server-denied-face): New.
@@ -14261,8 +14234,7 @@
 	* gnus-delay.el (gnus-delay-article): Allow "01:23" time spec,
 	which specifies a time today or tomorrow.
 
-2001-08-15  Simon Josefsson  <[email protected]>
-	From [email protected] (Pavel Jan,Am(Bk)
+2001-08-15  Pavel Jan,Am(Bk  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-make-mode-line-string)
 	(gnus-agent-toggle-plugged): Use new API.
@@ -14308,7 +14280,6 @@
 	* gnus-spec.el (gnus-format-specs): %n is 23 chars.
 
 2001-08-11 09:40:00  Karl Kleinpaste  <[email protected]>
-	Committed by Kai Gro,b_(Bjohann.
 
 	* gnus-score.el (gnus-score-string): Fix `match' regexp
 	for `extra' header case.
@@ -14389,23 +14360,23 @@
 	* imap.el (imap-gssapi-auth-p, imap-kerberos4-auth-p): Also check
 	whether `imtest' is installed.
 
-2001-08-04  ShengHuo ZHU  <[email protected]>
-	Trivial patch from Nuutti Kotivuori  <[email protected]>
+2001-08-04  Nuutti Kotivuori  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-show-article): Call
 	gnus-summary-update-secondary-secondary-mark.
 	* gnus-sum.el (gnus-summary-edit-article-done): Ditto.
 	* gnus-sum.el (gnus-summary-reparent-thread): Ditto.
 
+2001-08-07 16:00:00  Gerd M,Av(Bllmann  <[email protected]>
+
+	* mm-uu.el (mm-uu-dissect): Autoload.
+
 2001-08-07 16:00:00  ShengHuo ZHU  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-make-menu-bar): Misc -> Gnus.
 
 	* gnus-group.el (gnus-group-make-menu-bar): Ditto.
 
-	* mm-uu.el (mm-uu-dissect): Autoload. From Gerd M,Av(Bllmann
-	<[email protected]>.
-
 	* gnus-art.el (gnus-output-to-file): Bind file-name-coding-system.
 
 	* gnus-util.el (gnus-output-to-rmail): Ditto.
@@ -14527,8 +14498,7 @@
 	(mm-pkcs7-enveloped-magic): Ditto.
 	(mm-view-pkcs7-get-type): Don't regexp quote.
 
-2001-08-01 14:00:00  ShengHuo ZHU  <[email protected]>
-	From Andreas Fuchs <[email protected]>
+2001-08-01 14:00:00  Andreas Fuchs  <[email protected]>
 
 	* mml2015.el (mml2015-trust-boundaries-alist): Typo.
 
@@ -14623,13 +14593,11 @@
 	(smime-dns-server): Fix customize group.
 	(smime-call-openssl-region): Use `smime-extra-arguments'.
 
-2001-07-29  Simon Josefsson  <[email protected]>
-	From Vladimir Volovich <[email protected]>
+2001-07-29  Vladimir Volovich  <[email protected]>
 
 	* smime.el (smime-call-openssl-region): Ignore stderr.
 
-2001-07-29  Simon Josefsson  <[email protected]>
-	From Christoph Conrad <[email protected]>
+2001-07-29  Christoph Conrad  <[email protected]>
 
 	* gnus-agent.el (gnus-agent-save-group-info): Don't destroy active
 	file.
@@ -14750,8 +14718,7 @@
 
 	* nnimap.el (nnimap-version): Bump version number.
 
-2001-07-26 10:00:00  ShengHuo ZHU  <[email protected]>
-	From Steven E. Harris <[email protected]>
+2001-07-26 10:00:00  Steven E. Harris  <[email protected]>
 
 	* nnheader.el (nnheader-translate-file-chars): cygwin32 is running
 	in M$Windows too.
@@ -14773,8 +14740,7 @@
 	* gnus-sum.el (gnus-summary-prepare-threads): Shouldn't do tree
 	display (%B) for threads if threading is off.
 
-2001-07-25 14:00:00  ShengHuo ZHU  <[email protected]>
-	From Henrik Enberg <[email protected]>
+2001-07-25 14:00:00  Henrik Enberg  <[email protected]>
 
 	* gnus-msg.el: Customization patch.
 
@@ -14844,8 +14810,7 @@
 	* gnus-delay.el (gnus-delay-default-hour): New variable.
 	(gnus-delay-article): Allow specific date in YYYY-MM-DD format.
 
-2001-07-23 22:00:00  ShengHuo ZHU  <[email protected]>
-	From Karl Kleinpaste <[email protected]>
+2001-07-23 22:00:00  Karl Kleinpaste  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-line-format-alist): Add %B.
 	(gnus-summary-prepare-threads): Ditto.
@@ -15002,11 +14967,11 @@
 	* nnrss.el (nnrss-read-group-data): Nuke emacs-lisp-mode-hook.
 	(nnrss-read-server-data): Ditto.
 
-2001-07-13 12:00:00  ShengHuo ZHU  <[email protected]>
+2001-07-13 12:00:00  Pavel Jan,Am(Bk  <[email protected]>
 
 	* gnus-setup.el (gnus-use-installed-gnus): Typo.
 	* Cleanup files.
-	From [email protected] (Pavel Jan,Am(Bk).
+
 
 2001-07-13 08:00:00  ShengHuo ZHU  <[email protected]>
 
@@ -15129,8 +15094,7 @@
 	* nntp.el (nntp-send-command, nntp-send-command-nodelete):
 	(nntp-send-command-and-decode): Use gnus-point-at-bol.
 
-2001-07-09 13:00:00  ShengHuo ZHU  <[email protected]>
-	From  Paul Jarc <[email protected]>
+2001-07-09 13:00:00  Paul Jarc  <[email protected]>
 
 	* message.el (message-use-mail-followup-to): New variable.
 	(message-get-reply-headers): Use it.
@@ -15218,8 +15182,7 @@
 	* gnus-start.el (gnus-check-first-time-used): Use `if' instead of
 	`when'.
 
-2001-07-03  Simon Josefsson  <[email protected]>
-	From Nuutti Kotivuori <[email protected]>
+2001-07-03  Nuutti Kotivuori  <[email protected]>
 
 	* flow-fill.el (fill-flowed): Use (1+ (point-at-eol)) instead.
 
@@ -15267,8 +15230,7 @@
 	(rfc2047-encode-message-header): Fold lines even if
 	no QP encoding is done.
 
-2001-06-23  Simon Josefsson  <[email protected]>
-	From Samuel Tardieu <[email protected]>
+2001-06-23  Samuel Tardieu  <[email protected]>
 
 	* smime.el (smime-keys): Support additional certificates.
 	(smime-make-certfiles): New function.
@@ -15302,8 +15264,7 @@
 
 	* message.el (message-goto-body): Return nil if not found. (revert!)
 
-2001-06-21 10:00:00  ShengHuo ZHU  <[email protected]>
-	From Fremlin <[email protected]>
+2001-06-21 10:00:00  John Fremlin  <[email protected]>  (tiny change)
 
 	* message.el (message-goto-body): Some messages have no header.
 
@@ -15385,7 +15346,7 @@
 	* nnweb.el (nnweb-google-parse-1): Fix Google content regexp.
 	(nnweb-google-wash-article): Ditto.
 
-2001-06-14 Ferenc Wagner  <[email protected]>
+2001-06-14  Ferenc Wagner  <[email protected]>
 
 	* nnweb.el (nnweb-google-parse-1): Fix Google url regexp.
 
@@ -15412,17 +15373,20 @@
 
 	* nnrss.el (nnrss-group-alist): Use |fr| instead of [fr].
 
-2001-06-12 11:00:00  ShengHuo ZHU  <[email protected]>
+2001-06-12 11:00:00  Marc Lefranc  <[email protected]>
 
 	* gnus-art.el (gnus-plain-save-name): Use file-relative-name.
-	From Marc Lefranc <[email protected]>.
+
+2001-06-12 11:00:00  ShengHuo ZHU  <[email protected]>
 
 	* nnrss.el (nnrss-node-text): Node might be nil.
 
-2001-06-11 10:00:00  ShengHuo ZHU  <[email protected]>
+2001-06-11 10:00:00  Katsumi Yamaoka  <[email protected]>
 
 	* gnus-uu.el (gnus-uu-save-article): Use mml tag instead of
-	part. From Katsumi Yamaoka <[email protected]>.
+	part.
+
+2001-06-11 10:00:00  ShengHuo ZHU  <[email protected]>
 
 	* nnrss.el (nnrss-group-alist): More items.
 
@@ -15436,14 +15400,11 @@
 	* gnus-mlspl.el (gnus-group-split-fancy): Fix generation of split
 	restrict clauses.
 
-2001-06-07 16:00:00  ShengHuo ZHU  <[email protected]>
-
-	From Benjamin Rutt <[email protected]>
+2001-06-07 16:00:00  Benjamin Rutt  <[email protected]>
 
 	* message.el (message-wide-reply-confirm-recipients): New variable.
 
-2001-06-06  ShengHuo ZHU  <[email protected]>
-	Trivial patch from Mark Thomas  <[email protected]>
+2001-06-06  Mark Thomas  <[email protected]>  (tiny change)
 
 	* nnmail.el (nnmail-fix-eudora-headers): Change the In-Reply-To
 	fix so it works with XEmacs.
@@ -15457,10 +15418,10 @@
 
 	* nnrss.el: Fix a few bugs.
 
-2001-06-05  Simon Josefsson  <[email protected]>
+2001-06-05  Alex Schroeder  <[email protected]>
 
 	* mm-decode.el (mm-handle-set-external-undisplayer): Don't
-	generate compiler warnings.  From Alex Schroeder <[email protected]>.
+	generate compiler warnings.
 
 2001-06-04  Hrvoje Niksic  <[email protected]>
 
@@ -15499,20 +15460,17 @@
 	it is not possible to insert a character after a glyph which is at
 	the end of a buffer.  Patch by Lloyd Zusman <[email protected]>.
 
-2001-05-28  Kai Gro,b_(Bjohann  <[email protected]>
-
-	From Jaap-Henk Hoepman ([email protected]).
+2001-05-28  Jaap-Henk Hoepman  <[email protected]>
 
 	* mm-decode.el (mm-keep-viewer-alive-types): New variable.
 	(mm-keep-viewer-alive-p, mm-handle-set-external-undisplayer,
 	mm-destroy-postponed-undisplay-list): New functions.
 	(mm-display-external): Use them.
 
-2001-05-27  Kai Gro,b_(Bjohann  <[email protected]>
+2001-05-27  Raja R. Harinath  <[email protected]>
 
 	* gnus-salt.el (gnus-tree-highlight-node): Bind `default-high' and
 	`default-low' when evaluating `gnus-summary-highlight'.
-	From Raja R Harinath <[email protected]>.
 
 2001-05-27  Simon Josefsson  <[email protected]>
 
@@ -15523,8 +15481,7 @@
 	as details.
 	(mml2015-mailcrypt-clear-verify): Ditto.
 
-2001-05-24  Kai Gro,b_(Bjohann  <[email protected]>
-	From Nevin Kapur <[email protected]>.
+2001-05-24  Nevin Kapur  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-default-high-score,
 	gnus-summary-default-low-score): New variables.
@@ -15535,8 +15492,7 @@
 	* message.el (message-mail): pass the 'send-actions argument to
 	`message-setup'.
 
-2001-05-16  Simon Josefsson  <[email protected]>
-	From Raymond Scholz <[email protected]>
+2001-05-16  Raymond Scholz  <[email protected]>
 
 	* gnus-art.el (gnus-mime-view-part-as-charset):
 	(gnus-mime-internalize-part): Doc fixes.
@@ -15600,7 +15556,7 @@
 	correctly.
 	(nnrss-check-group): Use time.
 
-2001-05-01 19:21:19 Lars Magne Ingebrigtsen  <[email protected]>
+2001-05-01 19:21:19  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.03 is released.
 
@@ -15672,12 +15628,11 @@
 	(smime-decrypt-region): Ditto.
 
 2001-04-12  Jason Merrill  <[email protected]>
-	Committed by Simon Josefsson  <[email protected]>
 
 	* imap.el (imap-shell-open): Erase the buffer *after* copying it into
 	the log.
 
-2001-04-14 01:14:42 Lars Magne Ingebrigtsen  <[email protected]>
+2001-04-14 01:14:42  Lars Magne Ingebrigtsen  <[email protected]>
 
 	* gnus.el: Oort Gnus v0.02 is released.
 
@@ -15705,13 +15660,11 @@
 
 	* nnmail.el (nnmail-split-fancy-with-parent): Add docstring.
 
-2001-04-12 19:00:00  ShengHuo ZHU  <[email protected]>
-	From Jason Merrill <[email protected]>
+2001-04-12 19:00:00  Jason Merrill  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-insert-new-articles): Reverse the articles.
 
 2001-04-10 08:01:15  Katsumi Yamaoka  <[email protected]>
-	Committed by ShengHuo ZHU  <[email protected]>
 
 	* gnus-msg.el (gnus-post-news): Fill the Newsgroups header by the
 	newsgroup names when the original article is a news message.
@@ -15722,7 +15675,6 @@
 	supported. Suggest by Jim Meyering <[email protected]>.
 
 2001-04-02  Nevin Kapur  <[email protected]>
-	Committed by Kai Gro,b_(Bjohann <[email protected]>.
 
 	* nnmail.el (nnmail-split-it): Added check for .* at the end of
 	regexp in nnmail-split-fancy.
@@ -15790,13 +15742,11 @@
 	* qp.el (quoted-printable-decode-region): Just message
 	malformation; don't quit.
 
-2001-03-31 21:00:00  ShengHuo ZHU  <[email protected]>
-	From Gerd Moellmann <[email protected]>.
+2001-03-31 21:00:00  Gerd Moellmann  <[email protected]>
 
 	* gnus.el (gnus-interactive): A typo.
 
 2001-03-26  Juanma Barranquero  <[email protected]>
-	Committed by ShengHuo ZHU  <[email protected]>
 
 	* gnus-util.el (gnus-delete-alist): Declare it as an alias of
 	`assq-delete-all', if that function exists; otherwise use the old
@@ -15914,8 +15864,7 @@
 
 	* mml2015.el (mml2015-gpg-extract-from): No error.
 
-2001-03-18 23:00:00  ShengHuo ZHU  <[email protected]>
-	From Bj,Ax(Brn Mork <[email protected]>.
+2001-03-18 23:00:00  Bj,Ax(Brn Mork  <[email protected]>
 
 	* mml2015.el (mml2015-gpg-extract-from): New function.
 	(mml2015-gpg-verify): Use it.
@@ -15957,8 +15906,7 @@
 	* mailcap.el (mailcap-mime-data): Add application/sieve.
 	(mailcap-mime-extensions): Add .siv, .xls.
 
-2001-03-14 20:00:00  ShengHuo ZHU  <[email protected]>
-	From Christoph Conrad <[email protected]>
+2001-03-14 20:00:00  Christoph Conrad  <[email protected]>
 
 	* gnus-score.el (gnus-summary-lower-thread): Typo.
 
@@ -16003,7 +15951,6 @@
 	* nnrss.el: New file.
 
 2001-03-08 02:41:36  Katsumi Yamaoka  <[email protected]>
-	Committed by ShengHuo ZHU  <[email protected]>
 
 	* rfc2047.el (rfc2047-unfold-region): Fix arg of
 	`skip-chars-forward'.
@@ -16027,9 +15974,10 @@
 	directory part.
 	(gnus-score-search-global-directories): Use file-directory-p.
 
+2001-03-06 13:00:00  Adrian Aichner  <[email protected]>
+
 	* gnus-score.el (gnus-score-score-files-1): Use
 	gnus-kill-files-directory.
-	From Adrian Aichner <[email protected]>.
 
 2001-03-05 08:00:00  ShengHuo ZHU  <[email protected]>
 
@@ -16054,8 +16002,7 @@
 
 	* gnus-sum.el (gnus-summary-limit-include-expunged): Fix.
 
-2001-03-01 22:00:00  ShengHuo ZHU  <[email protected]>
-	From Katsumi Yamaoka <[email protected]>.
+2001-03-01 22:00:00  Katsumi Yamaoka  <[email protected]>
 
 	* dgnushack.el (coerce, merge, subseq): defmacro.
 
@@ -16066,7 +16013,6 @@
 	uncompiled versions.
 
 2001-02-26 11:27:27  Paul Jarc  <[email protected]>
-	Committed by ShengHuo ZHU  <[email protected]>
 
 	* gnus-util.el (gnus-split-references): Handle malformed References:.
 
@@ -16074,8 +16020,7 @@
 
 	* gnus-art.el (gnus-article-mime-part-status): 1 part.
 
-2001-02-25 10:00:00  ShengHuo ZHU  <[email protected]>
-	From NAGY Andras <[email protected]>.
+2001-02-25 10:00:00  NAGY Andras  <[email protected]>
 
 	* gnus.el (gnus-parameters): Typo.
 
@@ -16183,13 +16128,11 @@
 	(gnus-article-sort-functions): Doc fix.  Refer to
 	gnus-thread-sort-functions.
 
-2001-02-18 20:00:00  ShengHuo ZHU  <[email protected]>
-	From Paul Jarc <[email protected]>.
+2001-02-18 20:00:00  Paul Jarc  <[email protected]>
 
 	* message.el (message-get-reply-headers): More fixes.
 
 2001-02-17  Paul Jarc  <[email protected]>
-	Committed by ShengHuo ZHU  <[email protected]>
 
 	* message.el (message-get-reply-headers): Fix bug with
 	Mail-Followup-To/to-address interaction.
@@ -16234,7 +16177,6 @@
 	(nnml-request-regenerate): Use it. Change to deffoo.
 
 2001-02-14  Katsumi Yamaoka  <[email protected]>
-	Committed by ShengHuo ZHU  <[email protected]>
 
 	* gnus.el (gnus-define-group-parameter): Fix.
 
@@ -18187,7 +18129,7 @@
 
 	* mml.el (mml-generate-mime-1): Ignore ascii.
 
-2000-11-16 Justin Sheehy  <[email protected]>
+2000-11-16  Justin Sheehy  <[email protected]>
 
 	* gnus-sum.el (gnus-summary-make-menu-bar): Fix menu items.
 
@@ -18919,9 +18861,25 @@
 
 See ChangeLog.1 for earlier changes.
 
-    Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
-  Copying and distribution of this file, with or without modification,
-  are permitted provided the copyright notice and this notice are preserved.
+    Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007
+      Free Software Foundation, Inc.
+
+  This file is part of GNU Emacs.
+
+  GNU Emacs is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2, or (at your option)
+  any later version.
+
+  GNU Emacs is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with GNU Emacs; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  Boston, MA 02110-1301, USA.
 
 ;; Local Variables:
 ;; coding: iso-2022-7bit
Index: gnus/lisp/assistant.el
diff -u gnus/lisp/assistant.el:1.21 gnus/lisp/assistant.el:1.22
--- gnus/lisp/assistant.el:1.21	Thu Oct 13 19:18:49 2005
+++ gnus/lisp/assistant.el	Wed Feb 28 23:26:30 2007
@@ -77,7 +77,7 @@
 		    (forward-line 1)))
 	      (skip-chars-forward " \t")
 	      (prog1
-		  (buffer-substring (point) (line-end-position))
+		  (buffer-substring (point) (point-at-eol))
 		(forward-line 1))))
       (push (list command (assistant-reader command value))
 	    results))
Index: gnus/lisp/binhex.el
diff -u gnus/lisp/binhex.el:7.9 gnus/lisp/binhex.el:7.10
--- gnus/lisp/binhex.el:7.9	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/binhex.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; binhex.el --- elisp native binhex decode
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: binhex news
Index: gnus/lisp/canlock.el
diff -u gnus/lisp/canlock.el:7.13 gnus/lisp/canlock.el:7.14
--- gnus/lisp/canlock.el:7.13	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/canlock.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; canlock.el --- functions for Cancel-Lock feature
 
 ;; Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Katsumi Yamaoka <[email protected]>
 ;; Keywords: news, cancel-lock, hmac, sha1, rfc2104
Index: gnus/lisp/compface.el
diff -u gnus/lisp/compface.el:7.11 gnus/lisp/compface.el:7.14
--- gnus/lisp/compface.el:7.11	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/compface.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; compface.el --- functions for converting X-Face headers
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -34,24 +34,28 @@
 or `faces-xface' and `netpbm' or `libgr-progs', for instance."
   (with-temp-buffer
     (insert face)
-    (and (eq 0 (apply 'call-process-region (point-min) (point-max)
-		      "uncompface"
-		      'delete '(t nil) nil))
-	 (progn
-	   (goto-char (point-min))
-	   (insert "/* Width=48, Height=48 */\n")
-	   ;; I just can't get "icontopbm" to work correctly on its
-	   ;; own in XEmacs.  And Emacs doesn't understand un-raw pbm
-	   ;; files.
-	   (if (not (featurep 'xemacs))
-	       (eq 0 (call-process-region (point-min) (point-max)
-					  "icontopbm"
-					  'delete '(t nil)))
-	     (shell-command-on-region (point-min) (point-max)
-				      "icontopbm | pnmnoraw"
-				      (current-buffer) t)
-	     t))
-	 (buffer-string))))
+    (let ((coding-system-for-read 'raw-text)
+	  ;; At least "icontopbm" doesn't work with Windows because
+	  ;; the line-break code is converted into CRLF by default.
+	  (coding-system-for-write 'binary))
+      (and (eq 0 (apply 'call-process-region (point-min) (point-max)
+			"uncompface"
+			'delete '(t nil) nil))
+	   (progn
+	     (goto-char (point-min))
+	     (insert "/* Width=48, Height=48 */\n")
+	     ;; I just can't get "icontopbm" to work correctly on its
+	     ;; own in XEmacs.  And Emacs doesn't understand un-raw pbm
+	     ;; files.
+	     (if (not (featurep 'xemacs))
+		 (eq 0 (call-process-region (point-min) (point-max)
+					    "icontopbm"
+					    'delete '(t nil)))
+	       (shell-command-on-region (point-min) (point-max)
+					"icontopbm | pnmnoraw"
+					(current-buffer) t)
+	       t))
+	   (buffer-string)))))
 
 (provide 'compface)
 
Index: gnus/lisp/deuglify.el
diff -u gnus/lisp/deuglify.el:7.12 gnus/lisp/deuglify.el:7.15
--- gnus/lisp/deuglify.el:7.12	Tue Apr 18 17:36:59 2006
+++ gnus/lisp/deuglify.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; deuglify.el --- deuglify broken Outlook (Express) articles
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-;; Copyright (C) 2001, 2002 Raymond Scholz
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+;;   Free Software Foundation, Inc.
 
 ;; Author: Raymond Scholz <[email protected]>
 ;;         Thomas Steffen (unwrapping algorithm,
@@ -338,6 +338,7 @@
 
 (defun gnus-outlook-rearrange-article (attr-start)
   "Put the text from ATTR-START to the end of buffer at the top of the article buffer."
+  ;; FIXME: 1.  (*) text/plain          ( ) text/html
   (let ((inhibit-read-only t)
 	(cite-marks gnus-outlook-deuglify-cite-marks))
     (gnus-with-article-buffer
@@ -352,8 +353,18 @@
 		    (point-max))))
 	  ;; handle the case where the full quote is below the
 	  ;; signature
-	  (if (< to attr-start)
+	  (when (< to attr-start)
+	    (setq to (point-max)))
+	  (save-excursion
+	    (narrow-to-region attr-start to)
+	    (goto-char attr-start)
+	    (forward-line)
+	    (unless (looking-at ">")
+	      (message-indent-citation (point) (point-max) 'yank-only)
+	      (goto-char (point-max))
+	      (newline)
 	      (setq to (point-max)))
+	    (widen))
 	  (transpose-regions cur attr-start attr-start to))))))
 
 ;; John Doe <[email protected]> wrote in message
Index: gnus/lisp/dgnushack.el
diff -u gnus/lisp/dgnushack.el:7.23 gnus/lisp/dgnushack.el:7.27
--- gnus/lisp/dgnushack.el:7.23	Thu Apr 20 03:08:38 2006
+++ gnus/lisp/dgnushack.el	Mon Apr 23 03:11:21 2007
@@ -1,6 +1,6 @@
 ;;; dgnushack.el --- a hack to set the load path for byte-compiling
 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003,
-;; 2004, 2005
+;; 2004, 2005, 2006, 2007
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
@@ -118,12 +118,15 @@
 	ad-do-it))))
 
 (when (and (not (featurep 'xemacs))
-	   (byte-optimize-form '(and (> 0 1) foo) t))
+	   (byte-optimize-form
+	    '(and (> 0 1)
+		  (message "This should not appear in the byte-code."))
+	    t))
   (defadvice byte-optimize-form-code-walker
     (around fix-bug-in-and/or-forms (form for-effect) activate)
     "Optimize the rest of the and/or forms.
 It has been fixed in XEmacs before releasing 21.4 and also has been
-fixed in Emacs after 21.3."
+fixed in Emacs 22."
     (if (and for-effect (memq (car-safe form) '(and or)))
 	(let ((fn (car form))
 	      (backwards (reverse (cdr form))))
@@ -151,6 +154,11 @@
 ;;
 ;; http://thread.gmane.org/gmane.emacs.xemacs.beta/20519
 ;; Subject: XEmacs 21.5 and Gnus fancy splitting.
+;;
+;; Should be fixed in XEmacs (March 2007).
+;; http://thread.gmane.org/gmane.emacs.xemacs.patches/8124
+;; When should we remove this workaround?
+;;
 (when (and (featurep 'xemacs)
 	   (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
 	     (modify-syntax-entry ?= " " table)
@@ -201,6 +209,7 @@
     (autoload 'apropos-command "apropos" nil t)
     (autoload 'bbdb-complete-name "bbdb-com" nil t)
     (autoload 'browse-url "browse-url" nil t)
+    (autoload 'browse-url-of-file "browse-url" nil t)
     (autoload 'c-mode "cc-mode" nil t)
     (autoload 'customize-apropos "cus-edit" nil t)
     (autoload 'customize-group "cus-edit" nil t)
@@ -232,6 +241,7 @@
     (autoload 'smtpmail-send-it "smtpmail")
     (autoload 'sort-numeric-fields "sort" nil t)
     (autoload 'sort-subr "sort")
+    (autoload 'toggle-truncate-lines "view-less" nil t)
     (autoload 'trace-function-background "trace" nil t)
     (autoload 'unmorse-region "morse" nil t)
     (autoload 'w3-do-setup "w3")
Index: gnus/lisp/dig.el
diff -u gnus/lisp/dig.el:7.7 gnus/lisp/dig.el:7.8
--- gnus/lisp/dig.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/dig.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; dig.el --- Domain Name System dig interface
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 ;; Keywords: DNS BIND dig
Index: gnus/lisp/dns.el
diff -u gnus/lisp/dns.el:7.16 gnus/lisp/dns.el:7.18
--- gnus/lisp/dns.el:7.16	Fri Feb 24 21:49:02 2006
+++ gnus/lisp/dns.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; dns.el --- Domain Name Service lookups
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: network
@@ -408,7 +408,9 @@
 		     (>= (buffer-size) 2))
 	    (goto-char (point-min))
 	    (delete-region (point) (+ (point) 2)))
-	  (when (>= (buffer-size) 2)
+	  (when (and (>= (buffer-size) 2)
+		     ;; We had a time-out.
+		     (> times 0))
 	    (let ((result (dns-read (buffer-string))))
 	      (if fullp
 		  result
Index: gnus/lisp/earcon.el
diff -u gnus/lisp/earcon.el:7.5 gnus/lisp/earcon.el:7.6
--- gnus/lisp/earcon.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/earcon.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; earcon.el --- Sound effects for messages
 
 ;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Steven L. Baur <[email protected]>
 
Index: gnus/lisp/ecomplete.el
diff -u gnus/lisp/ecomplete.el:1.15 gnus/lisp/ecomplete.el:1.16
--- gnus/lisp/ecomplete.el:1.15	Sun Apr 30 12:16:24 2006
+++ gnus/lisp/ecomplete.el	Wed May 17 09:58:59 2006
@@ -39,7 +39,7 @@
 
 (defcustom ecomplete-database-file-coding-system 'iso-2022-7bit
   "Coding system used for writing the ecomplete database file."
-  :type '(repeat (symbol :tag "Coding system"))
+  :type '(symbol :tag "Coding system")
   :group 'ecomplete)
 
 ;;; Internal variables.
Index: gnus/lisp/encrypt.el
diff -u gnus/lisp/encrypt.el:7.8 gnus/lisp/encrypt.el:7.9
--- gnus/lisp/encrypt.el:7.8	Tue Oct 25 20:58:27 2005
+++ gnus/lisp/encrypt.el	Wed Jan 17 20:33:51 2007
@@ -28,6 +28,27 @@
 ;;; grouping declarations and documentation relating to each
 ;;; particular aspect.
 
+;;; Use in Gnus like this:
+;;; (setq
+;;;   nnimap-authinfo-file "~/.authinfo.enc"
+;;;   nntp-authinfo-file "~/.authinfo.enc"
+;;;   smtpmail-auth-credentials "~/.authinfo.enc"
+;;;   ;; using the AES256 cipher, feel free to use your own favorite
+;;;   encrypt-file-alist (quote (("~/.authinfo.enc" (gpg "AES256"))))
+;;;   password-cache-expiry 600)
+
+;;; Then write ~/.authinfo.enc:
+
+;;; 1) open the old authinfo
+;;; C-x C-f ~/.authinfo
+
+;;; 2) write the new authinfo.enc
+;;; M-x encrypt-file-contents ~/.authinfo.enc
+
+;;; 3) verify the new authinfo is correct (this will show the contents in the minibuffer)
+;;; M-: (encrypt-get-file-contents "~/.authinfo.enc")
+
+
 ;;; Code:
 
 ;; autoload password
@@ -108,8 +129,8 @@
 			       (symbol-name method) cipher file))
 	 (passphrase
 	  (password-read-and-add
-	   (format "%s password for cipher %s? "
-		   (symbol-name method) cipher)
+	   (format "%s password for cipher %s (file %s)? "
+		   file (symbol-name method) cipher)
 	   password-key))
 	  (buffer-file-coding-system 'binary)
 	 (coding-system-for-read 'binary)
@@ -151,38 +172,40 @@
 
 (defun encrypt-write-file-contents (file &optional model)
   "Encrypt the current buffer to FILE, then continue normally."
-  (interactive "fFile to write: ")
-  (let* ((model (or model (encrypt-find-model file)))
-	 (method (nth 0 model))
-	 (cipher (nth 1 model))
-	 (password-key (format "encrypt-password-%s-%s %s"
-			       (symbol-name method) cipher file))
-	 (passphrase
-	  (password-read
-	   (format "%s password for cipher %s? "
-		   (symbol-name method) cipher)
-	   password-key))
-	 outdata)
-
-    (cond
-     ((eq method 'gpg)
-      (setq outdata (encrypt-gpg-encode-buffer passphrase cipher)))
-     ((eq method 'encrypt-xor)
-      (setq outdata (encrypt-xor-encode-buffer passphrase cipher))))
-
-    (if outdata
-	(progn
-	  (message "%s was encrypted with %s (cipher %s)"
-		   file (symbol-name method) cipher)
-	  (delete-region (point-min) (point-max))
-	  (goto-char (point-min))
-	  (insert outdata)
-	  ;; do not confirm overwrites
-	  (write-file file nil))
-      ;; the decryption failed, alas
-      (password-cache-remove password-key)
-      (gnus-error 5 "%s was NOT encrypted with %s (cipher %s)"
-		  file (symbol-name method) cipher))))
+  (interactive "sFile to write: ")
+  (setq model (or model (encrypt-find-model file)))
+  (if model
+      (let* ((method (nth 0 model))
+	     (cipher (nth 1 model))
+	     (password-key (format "encrypt-password-%s-%s %s"
+				   (symbol-name method) cipher file))
+	     (passphrase
+	      (password-read
+	       (format "%s password for cipher %s? "
+		       (symbol-name method) cipher)
+	       password-key))
+	     outdata)
+
+	(cond
+	 ((eq method 'gpg)
+	  (setq outdata (encrypt-gpg-encode-buffer passphrase cipher)))
+	 ((eq method 'encrypt-xor)
+	  (setq outdata (encrypt-xor-encode-buffer passphrase cipher))))
+
+	(if outdata
+	    (progn
+	      (message "%s was encrypted with %s (cipher %s)"
+		       file (symbol-name method) cipher)
+	      (delete-region (point-min) (point-max))
+	      (goto-char (point-min))
+	      (insert outdata)
+	      ;; do not confirm overwrites
+	      (write-file file nil))
+	  ;; the decryption failed, alas
+	  (password-cache-remove password-key)
+	  (gnus-error 5 "%s was NOT encrypted with %s (cipher %s)"
+		      file (symbol-name method) cipher)))
+    (gnus-error 1 "%s has no associated encryption model!  See encrypt-file-alist." file)))
 
 (defun encrypt-xor-encode-buffer (passphrase cipher)
   (encrypt-xor-process-buffer passphrase cipher t))
Index: gnus/lisp/flow-fill.el
diff -u gnus/lisp/flow-fill.el:7.19 gnus/lisp/flow-fill.el:7.20
--- gnus/lisp/flow-fill.el:7.19	Tue Apr 18 19:30:09 2006
+++ gnus/lisp/flow-fill.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; flow-fill.el --- interpret RFC2646 "flowed" text
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 ;; Keywords: mail
Index: gnus/lisp/format-spec.el
diff -u gnus/lisp/format-spec.el:7.7 gnus/lisp/format-spec.el:7.9
--- gnus/lisp/format-spec.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/format-spec.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; format-spec.el --- functions for formatting arbitrary formatting strings
 
-;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: tools
Index: gnus/lisp/gmm-utils.el
diff -u gnus/lisp/gmm-utils.el:7.25 gnus/lisp/gmm-utils.el:7.33
--- gnus/lisp/gmm-utils.el:7.25	Thu Mar 16 19:22:20 2006
+++ gnus/lisp/gmm-utils.el	Fri Apr 27 10:39:17 2007
@@ -1,6 +1,6 @@
 ;;; gmm-utils.el --- Utility functions for Gnus, Message and MML
 
-;; Copyright (C) 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Reiner Steib <[email protected]>
 ;; Keywords: news
@@ -26,14 +26,16 @@
 
 ;; This library provides self-contained utility functions.  The functions are
 ;; used in Gnus, Message and MML, but within this library there are no
-;; dependencies on Gnus, Message, or MML or Gnus.
+;; dependencies on Gnus, Message, or MML.
 
 ;;; Code:
 
+(require 'wid-edit)
+
 (defgroup gmm nil
   "Utility functions for Gnus, Message and MML"
   :prefix "gmm-"
-  :version "23.0" ;; No Gnus
+  :version "22.1" ;; Gnus 5.10.9
   :group 'lisp)
 
 ;; Helper functions from `gnus-utils.el': gmm-verbose, gmm-message, gmm-error
@@ -48,6 +50,19 @@
   :group 'gmm)
 
 ;;;###autoload
+(defun gmm-regexp-concat (regexp)
+  "Potentially concat a list of regexps into a single one.
+The concatenation is done with logical ORs."
+  (cond ((null regexp)
+	 nil)
+	((stringp regexp)
+	 regexp)
+	((listp regexp)
+	 (mapconcat (lambda (elt) (concat "\\(" elt "\\)"))
+		    regexp
+		    "\\|"))))
+
+;;;###autoload
 (defun gmm-message (level &rest args)
   "If LEVEL is lower than `gmm-verbose' print ARGS using `message'.
 
@@ -201,8 +216,8 @@
       'gnome
     'retro)
   "Prefered tool bar style."
-  :type '(choice (const :tag "GNOME style" 'gnome)
-		 (const :tag "Retro look"  'retro))
+  :type '(choice (const :tag "GNOME style" gnome)
+		 (const :tag "Retro look"  retro))
   :group 'gmm)
 
 (defvar tool-bar-map)
@@ -215,7 +230,7 @@
 command, the second element is an icon file name and the third
 element is a test function.  You can use \\[describe-key]
 <menu-entry> to find out the name of a menu command.  The fourth
-and all following elements are passed a the PROPS argument to the
+and all following elements are passed as the PROPS argument to the
 function `tool-bar-local-item'.
 
 If ZAP-LIST is a list, remove those item from the default
@@ -277,11 +292,7 @@
 	    icon-list))
     tool-bar-map))
 
-;; WARNING: The following is subject to change.  Don't rely on it yet.
-
-;; From MH-E without modifications:
-
-(defmacro gmm-defun-compat (name function arg-list &rest body)
+(defmacro defun-gmm (name function arg-list &rest body)
   "Create function NAME.
 If FUNCTION exists, then NAME becomes an alias for FUNCTION.
 Otherwise, create function NAME with ARG-LIST and BODY."
@@ -290,21 +301,19 @@
         `(defalias ',name ',function)
       `(defun ,name ,arg-list ,@body))))
 
-(gmm-defun-compat gmm-image-search-load-path
+(defun-gmm gmm-image-search-load-path
   image-search-load-path (file &optional path)
   "Emacs 21 and XEmacs don't have `image-search-load-path'.
 This function returns nil on those systems."
   nil)
 
-;; From MH-E with modifications:
-
-;; Don't use `gmm-defun-compat' until API changes in
-;; `image-load-path-for-library' in Emacs CVS are completed.
+;; Cf. `mh-image-load-path-for-library' in `mh-compat.el'.
 
-(defun gmm-image-load-path-for-library (library image &optional path no-error)
-  "Return a suitable search path for images relative to LIBRARY.
+(defun-gmm gmm-image-load-path-for-library
+  image-load-path-for-library (library image &optional path no-error)
+  "Return a suitable search path for images used by LIBRARY.
 
-First it searches for IMAGE in `image-load-path' (excluding
+It searches for IMAGE in `image-load-path' (excluding
 \"`data-directory'/images\") and `load-path', followed by a path
 suitable for LIBRARY, which includes \"../../etc/images\" and
 \"../etc/images\" relative to the library file itself, and then
@@ -404,6 +413,21 @@
        (intern (let ((mode (symbol-name major-mode)))
 		 (string-match "^\\(.+\\)-mode$" mode)
 		 (match-string 1 mode))))))
+
+(defun gmm-write-region (start end filename &optional append visit
+			       lockname mustbenew)
+  "Compatibility function for `write-region'.
+
+In XEmacs, the seventh argument of `write-region' specifies the
+coding-system."
+  (if (and mustbenew
+	   (or (featurep 'xemacs)
+	       (= emacs-major-version 20)))
+      (if (file-exists-p filename)
+	  (signal 'file-already-exists
+		  (list "File exists" filename))
+	(write-region start end filename append visit lockname))
+    (write-region start end filename append visit lockname mustbenew)))
 
 (provide 'gmm-utils)
 
Index: gnus/lisp/gnus-agent.el
diff -u gnus/lisp/gnus-agent.el:7.57 gnus/lisp/gnus-agent.el:7.63
--- gnus/lisp/gnus-agent.el:7.57	Tue Mar 21 14:32:42 2006
+++ gnus/lisp/gnus-agent.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-agent.el --- unplugged support for Gnus
 
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; This file is part of GNU Emacs.
@@ -13,7 +13,7 @@
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
@@ -259,6 +259,16 @@
 (defvar gnus-headers)
 (defvar gnus-score)
 
+;; Added to support XEmacs
+(eval-and-compile
+  (unless (fboundp 'directory-files-and-attributes)
+    (defun directory-files-and-attributes (directory
+					   &optional full match nosort)
+      (let (result)
+	(dolist (file (directory-files directory full match nosort))
+	  (push (cons file (file-attributes file)) result))
+	(nreverse result)))))
+
 ;;;
 ;;; Setup
 ;;;
@@ -591,7 +601,17 @@
 	   (fboundp 'make-mode-line-mouse-map))
       (propertize string 'local-map
 		  (make-mode-line-mouse-map mouse-button mouse-func)
-		  'mouse-face 'mode-line-highlight)
+		  'mouse-face
+		  (cond ((and (featurep 'xemacs)
+			      ;; XEmacs' `facep' only checks for a face
+			      ;; object, not for a face name, so it's useless
+			      ;; to check with `facep'.
+			      (find-face 'modeline))
+			 'modeline)
+			((facep 'mode-line-highlight) ;; Emacs 22
+			 'mode-line-highlight)
+			((facep 'mode-line) ;; Emacs 21
+			 'mode-line)) )
     string))
 
 (defun gnus-agent-toggle-plugged (set-to)
@@ -1171,7 +1191,7 @@
             ;; For each article that I processed that is no longer
             ;; undownloaded, remove its processable mark.
 
-	    (mapc #'gnus-summary-remove-process-mark 
+	    (mapc #'gnus-summary-remove-process-mark
 		  (gnus-sorted-ndifference gnus-newsgroup-processable gnus-newsgroup-undownloaded))
 
             ;; The preceeding call to (gnus-agent-summary-fetch-group)
@@ -1727,7 +1747,61 @@
 	      (setq prev-num cur)))
 	    (forward-line 1)))))))
 
+(defun gnus-agent-flush-server (&optional server-or-method)
+  "Flush all agent index files for every subscribed group within
+  the given SERVER-OR-METHOD.  When called with nil, the current
+  value of gnus-command-method identifies the server."
+  (let* ((gnus-command-method (if server-or-method
+				  (gnus-server-to-method server-or-method)
+				gnus-command-method))
+	 (alist gnus-newsrc-alist))
+    (while alist
+      (let ((entry (pop alist)))
+	(when (gnus-methods-equal-p gnus-command-method (gnus-info-method entry))
+	  (gnus-agent-flush-group (gnus-info-group entry)))))))	
+
+(defun gnus-agent-flush-group (group)
+  "Flush the agent's index files such that the GROUP no longer
+appears to have any local content.  The actual content, the
+article files, may then be deleted using gnus-agent-expire-group.
+If flushing was a mistake, the gnus-agent-regenerate-group method
+provides an undo mechanism by reconstructing the index files from
+the article files."
+  (interactive
+   (list (let ((def (or (gnus-group-group-name)
+                        gnus-newsgroup-name)))
+           (let ((select (read-string (if def
+                                          (concat "Group Name ("
+                                                  def "): ")
+                                        "Group Name: "))))
+             (if (and (equal "" select)
+                      def)
+                 def
+               select)))))
+
+  (let* ((gnus-command-method (or gnus-command-method
+				  (gnus-find-method-for-group group)))
+	 (overview (gnus-agent-article-name ".overview" group))
+	 (agentview (gnus-agent-article-name ".agentview" group)))
+
+    (if (file-exists-p overview)
+	(delete-file overview))
+    (if (file-exists-p agentview)
+	(delete-file agentview))
+
+    (gnus-agent-update-view-total-fetched-for group nil gnus-command-method)
+    (gnus-agent-update-view-total-fetched-for group t   gnus-command-method)
+
+    ;(gnus-agent-set-local group nil nil)
+    ;(gnus-agent-save-local t)
+    (gnus-agent-save-group-info nil group nil)))
+
 (defun gnus-agent-flush-cache ()
+"Flush the agent's index files such that the group no longer
+appears to have any local content.  The actual content, the
+article files, is then deleted using gnus-agent-expire-group. The
+gnus-agent-regenerate-group method provides an undo mechanism by
+reconstructing the index files from the article files."
   (save-excursion
     (while gnus-agent-buffer-alist
       (set-buffer (cdar gnus-agent-buffer-alist))
@@ -1985,11 +2059,11 @@
 		   ;; First, we'll fix the sort.
 		   (sort-numeric-fields 1 (point-min) (point-max))
 
-		   ;; but now we have to consider that we may have duplicate rows...	  
+		   ;; but now we have to consider that we may have duplicate rows...
 		   ;; so reset to beginning of file
 		   (goto-char (point-min))
 		   (setq last -134217728)
-	  
+
 		   ;; and throw a code that restarts this scan
 		   (throw 'problems t))
 		 nil))))))
@@ -2058,7 +2132,21 @@
 	      (let ((gnus-agent-article-alist alist))
 		(gnus-agent-save-alist gnus-agent-read-agentview)))
 	    alist))
-      (file-error nil))))
+      ((end-of-file file-error)
+       ;; The agentview file is missing. 
+       (condition-case nil
+	   ;; If the agent directory exists, attempt to perform a brute-force
+	   ;; reconstruction of its contents.
+	   (let* (alist
+		  (file-attributes (directory-files-and-attributes 
+				    (gnus-agent-article-name ""
+							     gnus-agent-read-agentview) nil "^[0-9]+$" t)))
+	     (while file-attributes
+	       (let ((fa (pop file-attributes)))
+		 (unless (nth 1 fa)
+		   (push (cons (string-to-number (nth 0 fa)) (time-to-days (nth 5 fa))) alist))))
+	     alist)
+	 (file-error nil))))))
 
 (defun gnus-agent-save-alist (group &optional articles state)
   "Save the article-state alist for GROUP."
@@ -2158,7 +2246,8 @@
             (let (group
                   min
                   max
-                  (cur (current-buffer)))
+                  (cur (current-buffer))
+		  (obarray my-obarray))
               (setq group (read cur)
                     min (read cur)
                     max (read cur))
@@ -2239,7 +2328,9 @@
 
     (if (cond ((and minmax
                     (or (not (eq min (car minmax)))
-                        (not (eq max (cdr minmax)))))
+                        (not (eq max (cdr minmax))))
+		    min
+		    max)
                (setcar minmax min)
                (setcdr minmax max)
                t)
@@ -3517,7 +3608,7 @@
                    (or gnus-expert-user
                        (gnus-y-or-n-p
                         "gnus-agent-expire has identified local directories that are\
- not currently required by any agentized group.	 Do you wish to consider\
+ not currently required by any agentized group.  Do you wish to consider\
  deleting them?")))
           (while to-remove
             (let ((dir (pop to-remove)))
@@ -3805,8 +3896,10 @@
 	   (dir (file-name-directory file))
 	   point
 	   (downloaded (if (file-exists-p dir)
-			   (sort (mapcar (lambda (name) (string-to-number name))
-					 (directory-files dir nil "^[0-9]+$" t))
+			   (sort (delq nil (mapcar (lambda (name)
+						     (and (not (file-directory-p (nnheader-concat dir name)))
+							  (string-to-number name)))
+						   (directory-files dir nil "^[0-9]+$" t)))
 				 '>)
 			 (progn (gnus-make-directory dir) nil)))
 	   dl nov-arts
@@ -3970,8 +4063,8 @@
 	      (gnus-agent-possibly-alter-active group group-active)))))
 
       (when (and reread gnus-agent-article-alist)
-	(gnus-agent-synchronize-group-flags 
-	 group 
+	(gnus-agent-synchronize-group-flags
+	 group
 	 (list (list
 		(if (listp reread)
 		    reread
@@ -4033,16 +4126,6 @@
 (defun gnus-agent-group-covered-p (group)
   (gnus-agent-method-p (gnus-group-method group)))
 
-;; Added to support XEmacs
-(eval-and-compile
-  (unless (fboundp 'directory-files-and-attributes)
-    (defun directory-files-and-attributes (directory
-					   &optional full match nosort)
-      (let (result)
-	(dolist (file (directory-files directory full match nosort))
-	  (push (cons file (file-attributes file)) result))
-	(nreverse result)))))
-
 (defun gnus-agent-update-files-total-fetched-for
   (group delta &optional method path)
   "Update, or set, the total disk space used by the articles that the
@@ -4103,20 +4186,21 @@
 
 (defun gnus-agent-total-fetched-for (group &optional method no-inhibit)
   "Get the total disk space used by the specified GROUP."
-  (unless gnus-agent-total-fetched-hashtb
-    (setq gnus-agent-total-fetched-hashtb (gnus-make-hashtable 1024)))
+  (unless (equal group "dummy.group")
+    (unless gnus-agent-total-fetched-hashtb
+      (setq gnus-agent-total-fetched-hashtb (gnus-make-hashtable 1024)))
 
-  ;; if null, gnus-agent-group-pathname will calc method.
-  (let* ((gnus-command-method method)
-	 (path (gnus-agent-group-pathname group))
-	 (entry (gnus-gethash path gnus-agent-total-fetched-hashtb)))
-    (if entry
-	(apply '+ entry)
-      (let ((gnus-agent-inhibit-update-total-fetched-for (not no-inhibit)))
-	(+
-	 (gnus-agent-update-view-total-fetched-for  group nil method path)
-	 (gnus-agent-update-view-total-fetched-for  group t   method path)
-	 (gnus-agent-update-files-total-fetched-for group nil method path))))))
+    ;; if null, gnus-agent-group-pathname will calc method.
+    (let* ((gnus-command-method method)
+	   (path (gnus-agent-group-pathname group))
+	   (entry (gnus-gethash path gnus-agent-total-fetched-hashtb)))
+      (if entry
+	  (apply '+ entry)
+	(let ((gnus-agent-inhibit-update-total-fetched-for (not no-inhibit)))
+	  (+
+	   (gnus-agent-update-view-total-fetched-for  group nil method path)
+	   (gnus-agent-update-view-total-fetched-for  group t   method path)
+	   (gnus-agent-update-files-total-fetched-for group nil method path)))))))
 
 (provide 'gnus-agent)
 
Index: gnus/lisp/gnus-art.el
diff -u gnus/lisp/gnus-art.el:7.168 gnus/lisp/gnus-art.el:7.210
--- gnus/lisp/gnus-art.el:7.168	Wed Apr 26 17:32:25 2006
+++ gnus/lisp/gnus-art.el	Thu Apr 19 12:08:11 2007
@@ -1,7 +1,7 @@
 ;;; gnus-art.el --- article mode commands for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -15,7 +15,7 @@
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
@@ -252,7 +252,7 @@
   :type '(choice (const nil)
 		 (integer :value 200)
 		 (number :value 4.0)
-		 (function :value fun)
+		 function
 		 (regexp :value ".*"))
   :group 'gnus-article-signature)
 
@@ -275,7 +275,7 @@
 display -"))
   "*String or function to be executed to display an X-Face header.
 If it is a string, the command will be executed in a sub-shell
-asynchronously.	 The compressed face will be piped to this command."
+asynchronously.  The compressed face will be piped to this command."
   :type `(choice string
 		 (function-item gnus-display-x-face-in-from)
 		 function)
@@ -502,7 +502,10 @@
   :group 'gnus-article-washing)
 
 (defcustom gnus-save-all-headers t
-  "*If non-nil, don't remove any headers before saving."
+  "*If non-nil, don't remove any headers before saving.
+This will be overridden by the `:headers' property that the symbol of
+the saver function, which is specified by `gnus-default-article-saver',
+might have."
   :group 'gnus-article-saving
   :type 'boolean)
 
@@ -523,14 +526,17 @@
   "Headers to keep if `gnus-save-all-headers' is nil.
 If `gnus-save-all-headers' is non-nil, this variable will be ignored.
 If that variable is nil, however, all headers that match this regexp
-will be kept while the rest will be deleted before saving."
+will be kept while the rest will be deleted before saving.  This and
+`gnus-save-all-headers' will be overridden by the `:headers' property
+that the symbol of the saver function, which is specified by
+`gnus-default-article-saver', might have."
   :group 'gnus-article-saving
   :type 'regexp)
 
 (defcustom gnus-default-article-saver 'gnus-summary-save-in-rmail
   "A function to save articles in your favourite format.
-The function must be interactively callable (in other words, it must
-be an Emacs command).
+The function will be called by way of the `gnus-summary-save-article'
+command, and friends such as `gnus-summary-save-article-rmail'.
 
 Gnus provides the following functions:
 
@@ -540,7 +546,28 @@
 * gnus-summary-save-in-file (article format)
 * gnus-summary-save-body-in-file (article body)
 * gnus-summary-save-in-vm (use VM's folder format)
-* gnus-summary-write-to-file (article format -- overwrite)."
+* gnus-summary-write-to-file (article format -- overwrite)
+* gnus-summary-write-body-to-file (article body -- overwrite)
+
+The symbol of each function may have the following properties:
+
+* :decode
+The value non-nil means save decoded articles.  This is meaningful
+only with `gnus-summary-save-in-file', `gnus-summary-save-body-in-file',
+`gnus-summary-write-to-file', and `gnus-summary-write-body-to-file'.
+
+* :function
+The value specifies an alternative function which appends, not
+overwrites, articles to a file.  This implies that when saving many
+articles at a time, `gnus-prompt-before-saving' is bound to t and all
+articles are saved in a single file.  This is meaningful only with
+`gnus-summary-write-to-file' and `gnus-summary-write-body-to-file'.
+
+* :headers
+The value specifies the symbol of a variable of which the value
+specifies headers to be saved.  If it is omitted,
+`gnus-save-all-headers' and `gnus-saved-headers' control what
+headers should be saved."
   :group 'gnus-article-saving
   :type '(radio (function-item gnus-summary-save-in-rmail)
 		(function-item gnus-summary-save-in-mail)
@@ -549,8 +576,49 @@
 		(function-item gnus-summary-save-body-in-file)
 		(function-item gnus-summary-save-in-vm)
 		(function-item gnus-summary-write-to-file)
+		(function-item gnus-summary-write-body-to-file)
 		(function)))
 
+(defcustom gnus-article-save-coding-system
+  (or (and (mm-coding-system-p 'utf-8) 'utf-8)
+      (and (mm-coding-system-p 'iso-2022-7bit) 'iso-2022-7bit)
+      (and (mm-coding-system-p 'emacs-mule) 'emacs-mule)
+      (and (mm-coding-system-p 'escape-quoted) 'escape-quoted))
+  "Coding system used to save decoded articles to a file.
+
+The recommended coding systems are `utf-8', `iso-2022-7bit' and so on,
+which can safely encode any characters in text.  This is used by the
+commands including:
+
+* gnus-summary-save-article-file
+* gnus-summary-save-article-body-file
+* gnus-summary-write-article-file
+* gnus-summary-write-article-body-file
+
+and the functions to which you may set `gnus-default-article-saver':
+
+* gnus-summary-save-in-file
+* gnus-summary-save-body-in-file
+* gnus-summary-write-to-file
+* gnus-summary-write-body-to-file
+
+Those commands and functions save just text displayed in the article
+buffer to a file if the value of this variable is non-nil.  Note that
+buttonized MIME parts will be lost in a saved file in that case.
+Otherwise, raw articles will be saved."
+  :group 'gnus-article-saving
+  :type `(choice
+	  :format "%{%t%}:\n %[Value Menu%] %v"
+	  (const :tag "Save raw articles" nil)
+	  ,@(delq nil
+		  (mapcar
+		   (lambda (arg) (if (mm-coding-system-p (nth 3 arg)) arg))
+		   '((const :tag "UTF-8" utf-8)
+		     (const :tag "iso-2022-7bit" iso-2022-7bit)
+		     (const :tag "Emacs internal" emacs-mule)
+		     (const :tag "escape-quoted" escape-quoted))))
+	  (symbol :tag "Coding system")))
+
 (defcustom gnus-rmail-save-name 'gnus-plain-save-name
   "A function generating a file name to save articles in Rmail format.
 The function is called with NEWSGROUP, HEADERS, and optional LAST-FILE."
@@ -834,6 +902,9 @@
 (defvar gnus-decode-header-function 'mail-decode-encoded-word-region
   "Function used to decode headers.")
 
+(defvar gnus-decode-address-function 'mail-decode-encoded-address-region
+  "Function used to decode addresses.")
+
 (defvar gnus-article-dumbquotes-map
   '(("\200" "EUR")
     ("\202" ",")
@@ -870,8 +941,7 @@
   :group 'gnus-article-mime
   :type '(repeat regexp))
 
-(defcustom gnus-buttonized-mime-types (unless (eq mm-verify-option 'never)
-					'("multipart/signed"))
+(defcustom gnus-buttonized-mime-types nil
   "List of MIME types that should be given buttons when rendered inline.
 If set, this variable overrides `gnus-unbuttonized-mime-types'.
 To see e.g. security buttons you could set this to
@@ -1287,6 +1357,18 @@
   :link '(custom-manual "(gnus)Customizing Articles")
   :type gnus-article-treat-custom)
 
+(defcustom gnus-article-unfold-long-headers nil
+  "If non-nil, allow unfolding headers even if the header is long.
+If it is a regexp, only long headers matching this regexp are unfolded.
+If it is t, all long headers are unfolded.
+
+This variable has no effect if `gnus-treat-unfold-headers' is nil."
+  :version "23.0" ;; No Gnus
+  :group 'gnus-article-treat
+  :type '(choice (const nil)
+		 (const :tag "all" t)
+		 (regexp)))
+
 (defcustom gnus-treat-fold-headers nil
   "Fold headers.
 Valid values are nil, t, `head', `first', `last', an integer or a
@@ -1327,17 +1409,16 @@
 
 (defcustom gnus-treat-display-x-face
   (and (not noninteractive)
-       (or (and (fboundp 'image-type-available-p)
-		(image-type-available-p 'xbm)
-		(string-match "^0x" (shell-command-to-string "uncompface"))
-		(executable-find "icontopbm"))
-	   (and (featurep 'xemacs)
-		(featurep 'xface)))
+       (gnus-image-type-available-p 'xbm)
+       (if (featurep 'xemacs)
+	   (featurep 'xface)
+	 (and (string-match "^0x" (shell-command-to-string "uncompface"))
+	      (executable-find "icontopbm")))
        'head)
   "Display X-Face headers.
-Valid values are nil, t, `head', `first', `last', an integer or a
-predicate.  See Info node `(gnus)Customizing Articles' and Info
-node `(gnus)X-Face' for details."
+Valid values are nil and `head'.
+See Info node `(gnus)Customizing Articles' and Info node
+`(gnus)X-Face' for details."
   :group 'gnus-article-treat
   :version "21.1"
   :link '(custom-manual "(gnus)Customizing Articles")
@@ -1364,10 +1445,7 @@
 
 (defcustom gnus-treat-display-face
   (and (not noninteractive)
-       (or (and (fboundp 'image-type-available-p)
-		(image-type-available-p 'png))
-	   (and (featurep 'xemacs)
-		(featurep 'png)))
+       (gnus-image-type-available-p 'png)
        'head)
   "Display Face headers.
 Valid values are nil, t, `head', `first', `last', an integer or a
@@ -1380,12 +1458,7 @@
   :type gnus-article-treat-head-custom)
 (put 'gnus-treat-display-face 'highlight t)
 
-(defcustom gnus-treat-display-smileys
-  (if (or (and (featurep 'xemacs)
-	       (featurep 'xpm))
-	  (and (fboundp 'image-type-available-p)
-	       (image-type-available-p 'pbm)))
-      t nil)
+(defcustom gnus-treat-display-smileys (gnus-image-type-available-p 'xpm)
   "Display smileys.
 Valid values are nil, t, `head', `first', `last', an integer or a
 predicate.  See Info node `(gnus)Customizing Articles' and Info
@@ -1550,13 +1623,6 @@
   '("January" "February" "March" "April" "May" "June" "July" "August"
     "September" "October" "November" "December"))
 
-(defvar gnus-button-regexp nil)
-(defvar gnus-button-marker-list nil)
-;; Regexp matching any of the regexps from `gnus-button-alist'.
-
-(defvar gnus-button-last nil)
-;; The value of `gnus-button-alist' when `gnus-button-regexp' was build.
-
 (defvar article-goto-body-goes-to-point-min-p nil)
 (defvar gnus-article-wash-types nil)
 (defvar gnus-article-emphasis-alist nil)
@@ -1763,7 +1829,7 @@
   (interactive)
   ;; This function might be inhibited.
   (unless gnus-inhibit-hiding
-    (let ((inhibit-read-only nil)
+    (let ((inhibit-read-only t)
 	  (case-fold-search t)
 	  (max (1+ (length gnus-sorted-header-list)))
 	  (inhibit-point-motion-hooks t)
@@ -1925,7 +1991,11 @@
 				'string<))))
 		    (gnus-article-hide-header "reply-to")))))
 	     ((eq elem 'date)
-	      (let ((date (message-fetch-field "date")))
+	      (let ((date (with-current-buffer gnus-original-article-buffer
+			    ;; If date in `gnus-article-buffer' is localized
+			    ;; (`gnus-treat-date-user-defined'),
+			    ;; `days-between' might fail.
+			    (message-fetch-field "date"))))
 		(when (and date
 			   (< (days-between (current-time-string) date)
 			      4))
@@ -2094,16 +2164,21 @@
       (while (not (eobp))
 	(save-restriction
 	  (mail-header-narrow-to-field)
-	  (let ((header (buffer-string)))
+	  (let* ((header (buffer-string))
+		 (unfoldable
+		  (or (equal gnus-article-unfold-long-headers t)
+		      (and (stringp gnus-article-unfold-long-headers)
+			   (string-match gnus-article-unfold-long-headers header)))))
 	    (with-temp-buffer
 	      (insert header)
 	      (goto-char (point-min))
 	      (while (re-search-forward "\n[\t ]" nil t)
 		(replace-match " " t t)))
-	    (setq length (- (point-max) (point-min) 1)))
-	  (when (< length (window-width))
-	    (while (re-search-forward "\n[\t ]" nil t)
-	      (replace-match " " t t)))
+	    (setq length (- (point-max) (point-min) 1))
+	    (when (or unfoldable
+		      (< length (window-width)))
+	      (while (re-search-forward "\n[\t ]" nil t)
+		(replace-match " " t t))))
 	  (goto-char (point-max)))))))
 
 (defun gnus-article-treat-fold-headers ()
@@ -2150,6 +2225,39 @@
 	(mail-header-fold-field)
 	(goto-char (point-max))))))
 
+(defcustom gnus-article-truncate-lines default-truncate-lines
+  "Value of `truncate-lines' in Gnus Article buffer.
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate.  See Info node `(gnus)Customizing Articles'."
+  :version "23.0" ;; No Gnus
+  :group 'gnus-article
+  ;; :link '(custom-manual "(gnus)Customizing Articles")
+  :type 'boolean)
+
+(defun gnus-article-toggle-truncate-lines (&optional arg)
+  "Toggle whether to fold or truncate long lines in article the buffer.
+If ARG is non-nil and not a number, toggle
+`gnus-article-truncate-lines' too.  If ARG is a number, truncate
+long lines iff arg is positive."
+  (interactive "P")
+  (cond
+   ((and (numberp arg) (> arg 0))
+    (setq gnus-article-truncate-lines t))
+   ((numberp arg)
+    (setq gnus-article-truncate-lines nil))
+   (arg
+    (setq gnus-article-truncate-lines
+	  (not gnus-article-truncate-lines))))
+  (gnus-with-article-buffer
+    (cond
+     ((and (numberp arg) (> arg 0))
+      (setq truncate-lines nil))
+     ((numberp arg)
+      (setq truncate-lines t)))
+    ;; In versions of Emacs 22 (CVS) before 2006-05-26,
+    ;; `toggle-truncate-lines' needs an argument.
+    (toggle-truncate-lines)))
+
 (defun gnus-article-treat-body-boundary ()
   "Place a boundary line at the end of the headers."
   (interactive)
@@ -2398,10 +2506,24 @@
 			     (set-buffer gnus-summary-buffer)
 			   (error))
 			 gnus-newsgroup-ignored-charsets))
-	(inhibit-read-only t))
-    (save-restriction
-      (article-narrow-to-head)
-      (funcall gnus-decode-header-function (point-min) (point-max)))))
+	(inhibit-read-only t)
+	end start)
+    (goto-char (point-min))
+    (when (search-forward "\n\n" nil 'move)
+      (forward-line -1))
+    (setq end (point))
+    (while (not (bobp))
+      (while (progn
+	       (forward-line -1)
+	       (and (not (bobp))
+		    (memq (char-after) '(?\t ? )))))
+      (setq start (point))
+      (if (looking-at "\
+\\(?:Resent-\\)?\\(?:From\\|Cc\\|To\\|Bcc\\|\\(?:In-\\)?Reply-To\\|Sender\
+\\|Mail-Followup-To\\|Mail-Copies-To\\|Approved\\):")
+	  (funcall gnus-decode-address-function start end)
+	(funcall gnus-decode-header-function start end))
+      (goto-char (setq end start)))))
 
 (defun article-decode-group-name ()
   "Decode group names in `Newsgroups:'."
@@ -2699,7 +2821,8 @@
 		 (add-hook 'gnus-exit-gnus-hook
 			   (lambda  ()
 			     (gnus-article-browse-delete-temp-files t)))
-		 (browse-url tmp-file)
+		 ;; FIXME: Warn if there's an <img> tag?
+		 (browse-url-of-file tmp-file)
 		 (setq showed t)))
 	      ;; If multipart, recurse
 	      ((and (stringp (car handle))
@@ -2709,9 +2832,16 @@
 			      (gnus-article-browse-html-parts handle))))))))
     showed))
 
-;; TODO: Key binding
+;; FIXME: Documentation in texi/gnus.texi missing.
 (defun gnus-article-browse-html-article ()
-  "View \"text/html\" parts of the current article with a WWW browser."
+  "View \"text/html\" parts of the current article with a WWW browser.
+
+Warning: Spammers use links to images in HTML articles to verify
+whether you have read the message.  As
+`gnus-article-browse-html-article' passes the unmodified HTML
+content to the browser without eliminating these \"web bugs\" you
+should only use it for mails from trusted senders."
+  ;; Cf. `mm-w3m-safe-url-regexp'
   (interactive)
   (save-window-excursion
     ;; Open raw article and select the buffer
@@ -3423,10 +3553,13 @@
 
 (defun gnus-article-save (save-buffer file &optional num)
   "Save the currently selected article."
-  (unless gnus-save-all-headers
-    ;; Remove headers according to `gnus-saved-headers'.
+  (when (or (get gnus-default-article-saver :headers)
+	    (not gnus-save-all-headers))
+    ;; Remove headers according to `gnus-saved-headers' or the value
+    ;; of the `:headers' property that the saver function might have.
     (let ((gnus-visible-headers
-	   (or gnus-saved-headers gnus-visible-headers))
+	   (or (symbol-value (get gnus-default-article-saver :headers))
+	       gnus-saved-headers gnus-visible-headers))
 	  (gnus-article-buffer save-buffer))
       (save-excursion
 	(set-buffer save-buffer)
@@ -3451,7 +3584,8 @@
 	(funcall gnus-default-article-saver filename)))))
 
 (defun gnus-read-save-file-name (prompt &optional filename
-					function group headers variable)
+					function group headers variable
+					dir-var)
   (let ((default-name
 	  (funcall function group headers (symbol-value variable)))
 	result)
@@ -3464,6 +3598,10 @@
 	     default-name)
 	    (filename filename)
 	    (t
+	     (when (symbol-value dir-var)
+	       (setq default-name (expand-file-name
+				   (file-name-nondirectory default-name)
+				   (symbol-value dir-var))))
 	     (let* ((split-name (gnus-get-split-value gnus-split-methods))
 		    (prompt
 		     (format prompt
@@ -3528,7 +3666,11 @@
 	       ;; Possibly translate some characters.
 	       (nnheader-translate-file-chars file))))))
     (gnus-make-directory (file-name-directory result))
-    (set variable result)))
+    (when variable
+      (set variable result))
+    (when dir-var
+      (set dir-var (file-name-directory result)))
+    result))
 
 (defun gnus-article-archive-name (group)
   "Return the first instance of an \"Archive-name\" in the current buffer."
@@ -3576,6 +3718,8 @@
 	  (gnus-output-to-mail filename)))))
   filename)
 
+(put 'gnus-summary-save-in-file :decode t)
+(put 'gnus-summary-save-in-file :headers 'gnus-saved-headers)
 (defun gnus-summary-save-in-file (&optional filename overwrite)
   "Append this article to file.
 Optional argument FILENAME specifies file name.
@@ -3594,13 +3738,21 @@
 	(gnus-output-to-file filename))))
   filename)
 
+(put 'gnus-summary-write-to-file :decode t)
+(put 'gnus-summary-write-to-file :function 'gnus-summary-save-in-file)
+(put 'gnus-summary-write-to-file :headers 'gnus-saved-headers)
 (defun gnus-summary-write-to-file (&optional filename)
   "Write this article to a file, overwriting it if the file exists.
 Optional argument FILENAME specifies file name.
 The directory to save in defaults to `gnus-article-save-directory'."
-  (gnus-summary-save-in-file nil t))
+  (setq filename (gnus-read-save-file-name
+		  "Save %s in file" filename
+		  gnus-file-save-name gnus-newsgroup-name
+		  gnus-current-headers nil 'gnus-newsgroup-last-directory))
+  (gnus-summary-save-in-file filename t))
 
-(defun gnus-summary-save-body-in-file (&optional filename)
+(put 'gnus-summary-save-body-in-file :decode t)
+(defun gnus-summary-save-body-in-file (&optional filename overwrite)
   "Append this article body to a file.
 Optional argument FILENAME specifies file name.
 The directory to save in defaults to `gnus-article-save-directory'."
@@ -3614,9 +3766,25 @@
 	(widen)
 	(when (article-goto-body)
 	  (narrow-to-region (point) (point-max)))
+	(when (and overwrite
+		   (file-exists-p filename))
+	  (delete-file filename))
 	(gnus-output-to-file filename))))
   filename)
 
+(put 'gnus-summary-write-body-to-file :decode t)
+(put 'gnus-summary-write-body-to-file
+     :function 'gnus-summary-save-body-in-file)
+(defun gnus-summary-write-body-to-file (&optional filename)
+  "Write this article body to a file, overwriting it if the file exists.
+Optional argument FILENAME specifies file name.
+The directory to save in defaults to `gnus-article-save-directory'."
+  (setq filename (gnus-read-save-file-name
+		  "Save %s body in file" filename
+		  gnus-file-save-name gnus-newsgroup-name
+		  gnus-current-headers nil 'gnus-newsgroup-last-directory))
+  (gnus-summary-save-body-in-file filename t))
+
 (defun gnus-summary-save-in-pipe (&optional command)
   "Pipe this article to subprocess."
   (setq command
@@ -3680,7 +3848,7 @@
 (defun gnus-numeric-save-name (newsgroup headers &optional last-file)
   "Generate file name from NEWSGROUP, HEADERS, and optional LAST-FILE.
 If variable `gnus-use-long-file-name' is non-nil, it is
-~/News/news.group/num.	Otherwise, it is like ~/News/news/group/num."
+~/News/news.group/num.  Otherwise, it is like ~/News/news/group/num."
   (let ((default
 	  (expand-file-name
 	   (concat (if (gnus-use-long-file-name 'not-save)
@@ -3978,6 +4146,7 @@
   ;; Prevent recent Emacsen from displaying non-break space as "\ ".
   (set (make-local-variable 'nobreak-char-display) nil)
   (setq cursor-in-non-selected-windows nil)
+  (setq truncate-lines gnus-article-truncate-lines)
   (gnus-set-default-directory)
   (buffer-disable-undo)
   (setq buffer-read-only t
@@ -3986,6 +4155,10 @@
   (mm-enable-multibyte)
   (gnus-run-mode-hooks 'gnus-article-mode-hook))
 
+(defvar gnus-button-marker-list nil
+  "Regexp matching any of the regexps from `gnus-button-alist'.
+Internal variable.")
+
 (defun gnus-article-setup-buffer ()
   "Initialize the article buffer."
   (let* ((name (if gnus-single-article-buffer "*Article*"
@@ -3997,10 +4170,9 @@
     (setq gnus-article-buffer name)
     (setq gnus-original-article-buffer original)
     (setq gnus-article-mime-handle-alist nil)
-    ;; This might be a variable local to the summary buffer.
-    (unless gnus-single-article-buffer
-      (save-excursion
-	(set-buffer gnus-summary-buffer)
+    (with-current-buffer gnus-summary-buffer
+      ;; This might be a variable local to the summary buffer.
+      (unless gnus-single-article-buffer
 	(setq gnus-article-buffer name)
 	(setq gnus-original-article-buffer original)
 	(gnus-set-global-variables)))
@@ -4041,23 +4213,27 @@
 	(set-buffer (gnus-get-buffer-create name))
 	(gnus-article-mode)
 	(make-local-variable 'gnus-summary-buffer)
+	(setq gnus-summary-buffer
+	      (gnus-summary-buffer-name gnus-newsgroup-name))
 	(gnus-summary-set-local-parameters gnus-newsgroup-name)
 	(current-buffer)))))
 
 ;; Set article window start at LINE, where LINE is the number of lines
 ;; from the head of the article.
 (defun gnus-article-set-window-start (&optional line)
-  (set-window-start
-   (gnus-get-buffer-window gnus-article-buffer t)
-   (save-excursion
-     (set-buffer gnus-article-buffer)
-     (goto-char (point-min))
-     (if (not line)
-	 (point-min)
-       (gnus-message 6 "Moved to bookmark")
-       (search-forward "\n\n" nil t)
-       (forward-line line)
-       (point)))))
+  (let ((article-window (gnus-get-buffer-window gnus-article-buffer t)))
+    (when article-window
+      (set-window-start
+       article-window
+       (save-excursion
+	 (set-buffer gnus-article-buffer)
+	 (goto-char (point-min))
+	 (if (not line)
+	     (point-min)
+	   (gnus-message 6 "Moved to bookmark")
+	   (search-forward "\n\n" nil t)
+	   (forward-line line)
+	   (point)))))))
 
 (defun gnus-article-prepare (article &optional all-headers header)
   "Prepare ARTICLE in article mode buffer.
@@ -4252,7 +4428,7 @@
   gnus-mime-button-menu gnus-mime-button-map "MIME button menu."
   `("MIME Part"
     ,@(mapcar (lambda (c)
-		(vector (caddr c) (car c) :enable t))
+		(vector (caddr c) (car c) :active t))
 	      gnus-mime-button-commands)))
 
 (defun gnus-mime-button-menu (event prefix)
@@ -4430,9 +4606,8 @@
 	   (handles gnus-article-mime-handles)
 	   (none "(none)")
 	   (description
-	    (or
-	     (mail-decode-encoded-word-string (or (mm-handle-description data)
-						  none))))
+	    (mail-decode-encoded-word-string (or (mm-handle-description data)
+						 none)))
 	   (filename
 	    (or (mail-content-type-get (mm-handle-disposition data) 'filename)
 		none))
@@ -4498,8 +4673,10 @@
 	 (def-type (and name (mm-default-file-encoding name))))
     (and def-type (cons def-type 0))))
 
-(defun gnus-mime-view-part-as-type (&optional mime-type)
-  "Choose a MIME media type, and view the part as such."
+(defun gnus-mime-view-part-as-type (&optional mime-type pred)
+  "Choose a MIME media type, and view the part as such.
+If non-nil, PRED is a predicate to use during completion to limit the
+available media-types."
   (interactive)
   (unless mime-type
     (setq mime-type
@@ -4508,7 +4685,7 @@
 	     (format "View as MIME type (default %s): "
 		     (car default))
 	     (mapcar #'list (mailcap-mime-types))
-	     nil nil nil nil
+	     pred nil nil nil
 	     (car default)))))
   (gnus-article-check-buffer)
   (let ((handle (get-text-property (point) 'gnus-data)))
@@ -4670,6 +4847,21 @@
 	   (mm-string-to-multibyte contents)))
 	(goto-char b)))))
 
+(defun gnus-mime-strip-charset-parameters (handle)
+  "Strip charset parameters from HANDLE."
+  (if (stringp (car handle))
+      (mapc #'gnus-mime-strip-charset-parameters (cdr handle))
+    (let* ((type (mm-handle-type (if (equal (mm-handle-media-type handle)
+					    "message/external-body")
+				     (progn
+				       (unless (mm-handle-cache handle)
+					 (mm-extern-cache-contents handle))
+				       (mm-handle-cache handle))
+				   handle)))
+	   (charset (assq 'charset (cdr type))))
+      (when charset
+	(delq charset type)))))
+
 (defun gnus-mime-view-part-as-charset (&optional handle arg)
   "Insert the MIME part under point into the current buffer using the
 specified charset."
@@ -4678,7 +4870,7 @@
   (let ((handle (or handle (get-text-property (point) 'gnus-data)))
 	(fun (get-text-property (point) 'gnus-callback))
 	(gnus-newsgroup-ignored-charsets 'gnus-all)
-	gnus-newsgroup-charset type charset)
+	gnus-newsgroup-charset form preferred parts)
     (when handle
       (if (mm-handle-undisplayer handle)
 	  (mm-remove-part handle))
@@ -4686,17 +4878,24 @@
 	(setq gnus-newsgroup-charset
 	      (or (cdr (assq arg gnus-summary-show-article-charset-alist))
 		  (mm-read-coding-system "Charset: ")))
-	;; Strip the charset parameter from `handle'.
-	(setq type (mm-handle-type
-		    (if (equal (mm-handle-media-type handle)
-			       "message/external-body")
-			(progn
-			  (unless (mm-handle-cache handle)
-			    (mm-extern-cache-contents handle))
-			  (mm-handle-cache handle))
-		      handle))
-	      charset (assq 'charset (cdr type)))
-	(delq charset type)
+	(gnus-mime-strip-charset-parameters handle)
+	(when (and (consp (setq form (cdr-safe fun)))
+		   (setq form (ignore-errors
+				(assq 'gnus-mime-display-alternative form)))
+		   (setq preferred (caddr form))
+		   (progn
+		     (when (eq (car preferred) 'quote)
+		       (setq preferred (cadr preferred)))
+		     (not (equal preferred
+				 (get-text-property (point) 'gnus-data))))
+		   (setq parts (get-text-property (point) 'gnus-part))
+		   (setq parts (cdr (assq parts
+					  gnus-article-mime-handle-alist)))
+		   (equal (mm-handle-media-type parts) "multipart/alternative")
+		   (setq parts (reverse (cdr parts))))
+	  (setcar (cddr form)
+		  (list 'quote (or (cadr (member preferred parts))
+				   (car parts)))))
 	(funcall fun handle)))))
 
 (defun gnus-mime-view-part-externally (&optional handle)
@@ -4708,12 +4907,18 @@
 	 (mm-inlined-types nil)
 	 (mail-parse-charset gnus-newsgroup-charset)
 	 (mail-parse-ignored-charsets
-	  (with-current-buffer gnus-summary-buffer
-	    gnus-newsgroup-ignored-charsets)))
-    (when handle
-      (if (mm-handle-undisplayer handle)
-	  (mm-remove-part handle)
-	(mm-display-part handle)))))
+          (with-current-buffer gnus-summary-buffer
+            gnus-newsgroup-ignored-charsets))
+         (type (mm-handle-media-type handle))
+         (method (mailcap-mime-info type))
+         (mm-enable-external t))
+    (if (not (stringp method))
+	(gnus-mime-view-part-as-type
+	 nil (lambda (type) (stringp (mailcap-mime-info type))))
+      (when handle
+	(if (mm-handle-undisplayer handle)
+	    (mm-remove-part handle)
+	  (mm-display-part handle))))))
 
 (defun gnus-mime-view-part-internally (&optional handle)
   "View the MIME part under point with an internal viewer.
@@ -4728,10 +4933,13 @@
 	  (with-current-buffer gnus-summary-buffer
 	    gnus-newsgroup-ignored-charsets))
 	 (inhibit-read-only t))
-    (when handle
-      (if (mm-handle-undisplayer handle)
-	  (mm-remove-part handle)
-	(mm-display-part handle)))))
+    (if (not (mm-inlinable-p handle))
+        (gnus-mime-view-part-as-type
+         nil (lambda (type) (mm-inlinable-p handle type)))
+      (when handle
+	(if (mm-handle-undisplayer handle)
+	    (mm-remove-part handle)
+	  (mm-display-part handle))))))
 
 (defun gnus-mime-action-on-part (&optional action)
   "Do something with the MIME attachment at \(point\)."
@@ -4993,6 +5201,9 @@
 		;; Exclude a newline.
 		(1- (point))
 	      (point)))
+    (when gnus-article-button-face
+      (gnus-overlay-put (gnus-make-overlay b e)
+                        'face gnus-article-button-face))
     (widget-convert-button
      'link b e
      :mime-handle handle
@@ -5077,7 +5288,11 @@
 	      (article-goto-body)
 	      (narrow-to-region (point-min) (point))
 	      (gnus-article-save-original-date
-	       (gnus-treat-article 'head)))))))))
+	       (gnus-treat-article 'head)))))))
+    ;; Cope with broken MIME messages.
+    (goto-char (point-max))
+    (unless (bolp)
+      (insert "\n"))))
 
 (defcustom gnus-mime-display-multipart-as-mixed nil
   "Display \"multipart\" parts as  \"multipart/mixed\".
@@ -5437,17 +5652,55 @@
 ;;; Article savers.
 
 (defun gnus-output-to-file (file-name)
-  "Append the current article to a file named FILE-NAME."
-  (let ((artbuf (current-buffer)))
+  "Append the current article to a file named FILE-NAME.
+If `gnus-article-save-coding-system' is non-nil, it is used to encode
+text and used as the value of the coding cookie which is added to the
+top of a file.  Otherwise, this function saves a raw article without
+the coding cookie."
+  (let* ((artbuf (current-buffer))
+	 (file-name-coding-system nnmail-pathname-coding-system)
+	 (coding gnus-article-save-coding-system)
+	 (coding-system-for-read (if coding
+				     nil ;; Rely on the coding cookie.
+				   mm-text-coding-system))
+	 (coding-system-for-write (or coding
+				      mm-text-coding-system-for-write
+				      mm-text-coding-system))
+	 (exists (file-exists-p file-name)))
     (with-temp-buffer
+      (when exists
+	(insert-file-contents file-name)
+	(goto-char (point-min))
+	;; Remove the existing coding cookie.
+	(when (looking-at "X-Gnus-Coding-System: .+\n\n")
+	  (delete-region (match-beginning 0) (match-end 0))))
+      (goto-char (point-max))
       (insert-buffer-substring artbuf)
       ;; Append newline at end of the buffer as separator, and then
       ;; save it to file.
       (goto-char (point-max))
       (insert "\n")
-      (let ((file-name-coding-system nnmail-pathname-coding-system))
-	(mm-append-to-file (point-min) (point-max) file-name))
-      t)))
+      (when coding
+	;; If the coding system is not suitable to encode the text,
+	;; ask a user for a proper one.
+	(when (fboundp 'select-safe-coding-system)
+	  (setq coding (coding-system-base
+			(save-window-excursion
+			  (select-safe-coding-system (point-min) (point-max)
+						     coding))))
+	  (setq coding-system-for-write
+		(or (cdr (assq coding '((mule-utf-8 . utf-8))))
+		    coding)))
+	(goto-char (point-min))
+	;; Add the coding cookie.
+	(insert (format "X-Gnus-Coding-System: -*- coding: %s; -*-\n\n"
+			coding-system-for-write)))
+      (if exists
+	  (progn
+	    (write-region (point-min) (point-max) file-name nil 'no-message)
+	    (message "Appended to %s" file-name))
+	(write-region (point-min) (point-max) file-name))))
+  t)
 
 (defun gnus-narrow-to-page (&optional arg)
   "Narrow the article buffer to a page.
@@ -6235,9 +6488,24 @@
 ;;; Internal Variables:
 
 (defcustom gnus-button-url-regexp
-  (if (string-match "[[:digit:]]" "1") ;; support POSIX?
-      "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?[-a-z0-9_=!?#$@~%&*+\\/:;.,[:word:]]+[-a-z0-9_=#$@~%&*+\\/[:word:]]\\)"
-    "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)\\)")
+  (concat
+   "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|"
+   "nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)"
+   "\\(//[-a-z0-9_.]+:[0-9]*\\)?"
+   (if (string-match "[[:digit:]]" "1") ;; Support POSIX?
+       (let ((chars "-a-z0-9_=#$@~%&*+\\/[:word:]")
+	     (punct "!?:;.,"))
+	 (concat
+	  "\\(?:"
+	  ;; Match paired parentheses, e.g. in Wikipedia URLs:
+	  "[" chars punct "]+" "(" "[" chars punct "]+" "[" chars "]*)" "[" chars "]"
+	  "\\|"
+	  "[" chars punct     "]+" "[" chars "]"
+	  "\\)"))
+     (concat ;; XEmacs 21.4 doesn't support POSIX.
+      "\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+"
+      "\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)"))
+   "\\)")
   "Regular expression that matches URLs."
   :group 'gnus-article-buttons
   :type 'regexp)
@@ -6322,7 +6590,7 @@
 of the symbols `mid' or `mail', Gnus will always assume that the string is a
 message ID or a mail address, respectively.  If this variable is set to the
 symbol `ask', always query the user what do do.  If it is a function, this
-function will be called with the string as it's only argument.  The function
+function will be called with the string as its only argument.  The function
 must return `mid', `mail', `invalid' or `ask'."
   :version "22.1"
   :group 'gnus-article-buttons
@@ -6493,7 +6761,10 @@
   "Call function FUN on argument ARG.
 Both FUN and ARG are supposed to be strings.  ARG will be passed
 as a symbol to FUN."
-  (funcall (intern fun) (intern arg)))
+  (funcall (intern fun)
+	   (if (string-match "^customize-apropos" fun)
+	       arg
+	     (intern arg))))
 
 (defvar gnus-button-handle-describe-prefix "^\\(C-h\\|<?[Ff]1>?\\)")
 
@@ -6637,6 +6908,8 @@
      0 (>= gnus-button-message-level 0) gnus-button-message-id 2)
     ("\\bin\\( +article\\| +message\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)"
      2 (>= gnus-button-message-level 0) gnus-button-message-id 3)
+    ("\\b\\(mid\\|message-id\\):? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)"
+     2 (>= gnus-button-message-level 0) gnus-button-message-id 3)
     ("\\(<URL: *\\)mailto: *\\([^> \n\t]+\\)>"
      0 (>= gnus-button-message-level 0) gnus-url-mailto 2)
     ;; RFC 2368 (The mailto URL scheme)
@@ -6692,7 +6965,7 @@
      1 (>= gnus-button-emacs-level 8) gnus-button-handle-library 1)
     ("`\\([a-z][-a-z0-9]+\\.el\\)'"
      1 (>= gnus-button-emacs-level 8) gnus-button-handle-library 1)
-    ("`\\([a-z][a-z0-9]+-[a-z]+-[-a-z]+\\|\\(gnus\\|message\\)-[-a-z]+\\)'"
+    ("`\\([a-z][a-z0-9]+-[a-z0-9]+-[-a-z0-9]*[a-z]\\|\\(gnus\\|message\\)-[-a-z]+\\)'"
      0 (>= gnus-button-emacs-level 8) gnus-button-handle-symbol 1)
     ("`\\([a-z][a-z0-9]+-[a-z]+\\)'"
      0 (>= gnus-button-emacs-level 9) gnus-button-handle-symbol 1)
@@ -6704,7 +6977,7 @@
      0 (>= gnus-button-emacs-level 1) gnus-button-handle-describe-function 2)
     ("\\b\\(C-h\\|<?[Ff]1>?\\)[ \t\n]+v[ \t\n]+\\([^ \t\n]+\\)[ \t\n]+RET"
      0 (>= gnus-button-emacs-level 1) gnus-button-handle-describe-variable 2)
-    ("`\\(\\b\\(C-h\\|<?[Ff]1>?\\)[ \t\n]+k[ \t\n]+\\([^']+\\)\\)'"
+    ("`\\(\\(C-h\\|<?[Ff]1>?\\)[ \t\n]+k[ \t\n]+\\([^']+\\)\\)'"
      ;; Unlike the other regexps we really have to require quoting
      ;; here to determine where it ends.
      1 (>= gnus-button-emacs-level 1) gnus-button-handle-describe-key 3)
@@ -7174,8 +7447,13 @@
   (with-current-buffer gnus-summary-buffer
     (gnus-summary-refer-article message-id)))
 
-(defun gnus-button-fetch-group (address)
+(defun gnus-button-fetch-group (address &rest ignore)
   "Fetch GROUP specified by ADDRESS."
+  (when (string-match "\\`\\(nntp\\|news\\):\\(//\\)?\\(.*\\)\\'"
+		      address)
+    ;; Allow to use `gnus-button-fetch-group' in `browse-url-browser-function'
+    ;; for nntp:// and news://
+    (setq address (match-string 3 address)))
   (if (not (string-match "[:/]" address))
       ;; This is just a simple group url.
       (gnus-group-read-ephemeral-group address gnus-select-method)
@@ -7265,19 +7543,23 @@
     map))
 
 (defun gnus-insert-prev-page-button ()
-  (let ((b (point))
+  (let ((b (point)) e
 	(inhibit-read-only t))
     (gnus-eval-format
      gnus-prev-page-line-format nil
      `(keymap ,gnus-prev-page-map
-	 gnus-prev t
-	 gnus-callback gnus-article-button-prev-page
-	 article-type annotation))
+	      gnus-prev t
+	      gnus-callback gnus-article-button-prev-page
+	      article-type annotation))
+    (setq e (if (bolp)
+		;; Exclude a newline.
+		(1- (point))
+	      (point)))
+    (when gnus-article-button-face
+      (gnus-overlay-put (gnus-make-overlay b e)
+                        'face gnus-article-button-face))
     (widget-convert-button
-     'link b (if (bolp)
-		 ;; Exclude a newline.
-		 (1- (point))
-	       (point))
+     'link b e
      :action 'gnus-button-prev-page
      :button-keymap gnus-prev-page-map)))
 
@@ -7298,18 +7580,22 @@
     (select-window win)))
 
 (defun gnus-insert-next-page-button ()
-  (let ((b (point))
+  (let ((b (point)) e
 	(inhibit-read-only t))
     (gnus-eval-format gnus-next-page-line-format nil
 		      `(keymap ,gnus-next-page-map
-			  gnus-next t
-			  gnus-callback gnus-article-button-next-page
-			  article-type annotation))
+                               gnus-next t
+                               gnus-callback gnus-article-button-next-page
+                               article-type annotation))
+    (setq e (if (bolp)
+		;; Exclude a newline.
+		(1- (point))
+	      (point)))
+    (when gnus-article-button-face
+      (gnus-overlay-put (gnus-make-overlay b e)
+                        'face gnus-article-button-face))
     (widget-convert-button
-     'link b (if (bolp)
-		 ;; Exclude a newline.
-		 (1- (point))
-	       (point))
+     'link b e
      :action 'gnus-button-next-page
      :button-keymap gnus-next-page-map)))
 
@@ -7569,7 +7855,7 @@
     ,@(delq nil
 	    (mapcar (lambda (c)
 		      (unless (eq (car c) 'undefined)
-			(vector (caddr c) (car c) :enable t)))
+			(vector (caddr c) (car c) :active t)))
 		    gnus-mime-security-button-commands))))
 
 (defun gnus-mime-security-button-menu (event prefix)
@@ -7694,6 +7980,9 @@
 		;; Exclude a newline.
 		(1- (point))
 	      (point)))
+    (when gnus-article-button-face
+      (gnus-overlay-put (gnus-make-overlay b e)
+                        'face gnus-article-button-face))
     (widget-convert-button
      'link b e
      :mime-handle handle
Index: gnus/lisp/gnus-async.el
diff -u gnus/lisp/gnus-async.el:7.9 gnus/lisp/gnus-async.el:7.11
--- gnus/lisp/gnus-async.el:7.9	Sun Apr 30 11:44:06 2006
+++ gnus/lisp/gnus-async.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-async.el --- asynchronous support for Gnus
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-audio.el
diff -u gnus/lisp/gnus-audio.el:7.5 gnus/lisp/gnus-audio.el:7.7
--- gnus/lisp/gnus-audio.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-audio.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-audio.el --- Sound effects for Gnus
 
-;; Copyright (C) 1996, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Steven L. Baur <[email protected]>
 ;; Keywords: news, mail, multimedia
Index: gnus/lisp/gnus-bcklg.el
diff -u gnus/lisp/gnus-bcklg.el:7.5 gnus/lisp/gnus-bcklg.el:7.6
--- gnus/lisp/gnus-bcklg.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-bcklg.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-bcklg.el --- backlog functions for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-cache.el
diff -u gnus/lisp/gnus-cache.el:7.17 gnus/lisp/gnus-cache.el:7.19
--- gnus/lisp/gnus-cache.el:7.17	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-cache.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-cache.el --- cache interface for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -847,16 +847,17 @@
 
 (defun gnus-cache-total-fetched-for (group &optional no-inhibit)
   "Get total disk space used by the cache for the specified GROUP."
-  (unless gnus-cache-total-fetched-hashtb
-    (setq gnus-cache-total-fetched-hashtb (gnus-make-hashtable 1024)))
-
-  (let* ((entry (gnus-gethash group gnus-cache-total-fetched-hashtb)))
-    (if entry
-	(apply '+ entry)
-      (let ((gnus-cache-inhibit-update-total-fetched-for (not no-inhibit)))
-	(+ 
-	 (gnus-cache-update-overview-total-fetched-for group nil)
-	 (gnus-cache-update-file-total-fetched-for     group nil))))))
+  (unless (equal group "dummy.group")
+    (unless gnus-cache-total-fetched-hashtb
+      (setq gnus-cache-total-fetched-hashtb (gnus-make-hashtable 1024)))
+
+    (let* ((entry (gnus-gethash group gnus-cache-total-fetched-hashtb)))
+      (if entry
+	  (apply '+ entry)
+	(let ((gnus-cache-inhibit-update-total-fetched-for (not no-inhibit)))
+	  (+ 
+	   (gnus-cache-update-overview-total-fetched-for group nil)
+	   (gnus-cache-update-file-total-fetched-for     group nil)))))))
 
 (provide 'gnus-cache)
 
Index: gnus/lisp/gnus-cite.el
diff -u gnus/lisp/gnus-cite.el:7.16 gnus/lisp/gnus-cite.el:7.34
--- gnus/lisp/gnus-cite.el:7.16	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-cite.el	Tue Mar 13 05:57:59 2007
@@ -1,7 +1,7 @@
 ;;; gnus-cite.el --- parse citations in articles for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Per Abhiddenware
 
@@ -27,6 +27,9 @@
 ;;; Code:
 
 (eval-when-compile (require 'cl))
+(eval-when-compile
+  (when (featurep 'xemacs)
+    (require 'easy-mmode))) ; for `define-minor-mode'
 
 (require 'gnus)
 (require 'gnus-range)
@@ -294,14 +297,28 @@
 
 (defcustom gnus-cite-face-list
   '(gnus-cite-1 gnus-cite-2 gnus-cite-3 gnus-cite-4 gnus-cite-5 gnus-cite-6
-    gnus-cite-7 gnus-cite-8 gnus-cite-9 gnus-cite-10 gnus-cite-11)
+		gnus-cite-7 gnus-cite-8 gnus-cite-9 gnus-cite-10 gnus-cite-11)
   "*List of faces used for highlighting citations.
 
 When there are citations from multiple articles in the same message,
 Gnus will try to give each citation from each article its own face.
 This should make it easier to see who wrote what."
   :group 'gnus-cite
-  :type '(repeat face))
+  :type '(repeat face)
+  :set (lambda (symbol value)
+	 (prog1
+	     (custom-set-default symbol value)
+	   (if (boundp 'gnus-message-max-citation-depth)
+	       (setq gnus-message-max-citation-depth (length value)))
+	   (if (boundp 'gnus-message-citation-keywords)
+	       (setq gnus-message-citation-keywords
+		     `((gnus-message-search-citation-line
+			,@(let ((list nil)
+				(count 1))
+			    (dolist (face value (nreverse list))
+			      (push (list count (list 'quote face) 'prepend t)
+				    list)
+			      (setq count (1+ count)))))))))))
 
 (defcustom gnus-cite-hide-percentage 50
   "Only hide excess citation if above this percentage of the body."
@@ -367,7 +384,7 @@
 
 ;;; Commands:
 
-(defun gnus-article-highlight-citation (&optional force)
+(defun gnus-article-highlight-citation (&optional force same-buffer)
   "Highlight cited text.
 Each citation in the article will be highlighted with a different face.
 The faces are taken from `gnus-cite-face-list'.
@@ -381,7 +398,8 @@
 `gnus-cite-attribution-prefix' are considered attribution lines."
   (interactive (list 'force))
   (save-excursion
-    (set-buffer gnus-article-buffer)
+    (unless same-buffer
+      (set-buffer gnus-article-buffer))
     (gnus-cite-parse-maybe force)
     (let ((buffer-read-only nil)
 	  (alist gnus-cite-prefix-alist)
@@ -803,13 +821,24 @@
       (setq line (1+ line)))
     ;; Horrible special case for some Microsoft mailers.
     (goto-char (point-min))
-    (when (re-search-forward gnus-cite-unsightly-citation-regexp max t)
-      (setq begin (count-lines (point-min) (point)))
-      (setq end (count-lines (point-min) max))
-      (setq entry nil)
-      (while (< begin end)
-	(push begin entry)
-	(setq begin (1+ begin)))
+    (setq start t begin nil entry nil)
+    (while start
+      ;; Assume this search ends up at the beginning of a line.
+      (if (re-search-forward gnus-cite-unsightly-citation-regexp max t)
+	  (progn
+	    (when (number-or-marker-p start)
+	      (setq begin (count-lines (point-min) start)
+		    end (count-lines (point-min) (match-beginning 0))))
+	    (setq start (match-end 0)))
+	(when (number-or-marker-p start)
+	  (setq begin (count-lines (point-min) start)
+		end (count-lines (point-min) max)))
+	(setq start nil))
+      (when begin
+	(while (< begin end)
+	  ;; Need to do 1+ because we're in the bol.
+	  (push (setq begin (1+ begin)) entry))))
+    (when entry
       (push (cons "" entry) alist))
     ;; We got all the potential prefixes.  Now create
     ;; `gnus-cite-prefix-alist' containing the oldest prefix for each
@@ -1099,6 +1128,108 @@
 		       prefix)
 	  (setq found t)))
       found)))
+
+
+;; Highlighting of different citation levels in message-mode.
+;; - message-cite-prefix will be overridden if this is enabled.
+
+(defvar gnus-message-max-citation-depth
+  (length gnus-cite-face-list)
+  "Maximum supported level of citation.")
+
+(defvar gnus-message-cite-prefix-regexp
+  (concat "^\\(?:" message-cite-prefix-regexp "\\)"))
+
+(defun gnus-message-search-citation-line (limit)
+  "Search for a cited line and set match data accordingly.
+Returns nil if there is no such line before LIMIT, t otherwise."
+  (when (re-search-forward gnus-message-cite-prefix-regexp limit t)
+    (let ((cdepth (min (length (apply 'concat
+				      (split-string
+				       (match-string-no-properties 0)
+				       "[ \t [:alnum:]]+")))
+		       gnus-message-max-citation-depth))
+	  (mlist (make-list (* (1+ gnus-message-max-citation-depth) 2) nil))
+	  (start (point-at-bol))
+	  (end (point-at-eol)))
+      (setcar mlist start)
+      (setcar (cdr mlist) end)
+      (setcar (nthcdr (* cdepth 2) mlist) start)
+      (setcar (nthcdr (1+ (* cdepth 2)) mlist) end)
+      (set-match-data mlist))
+    t))
+
+(defvar gnus-message-citation-keywords
+  ;; eval-when-compile ;; This breaks in XEmacs
+  `((gnus-message-search-citation-line
+     ,@(let ((list nil)
+	     (count 1))
+	 ;; (require 'gnus-cite)
+	 (dolist (face gnus-cite-face-list (nreverse list))
+	   (push (list count (list 'quote face) 'prepend t) list)
+	   (setq count (1+ count)))))) ;;
+  "Keywords for highlighting different levels of message citations.")
+
+(eval-when-compile
+  (defvar font-lock-defaults-computed)
+  (defvar font-lock-keywords)
+  (defvar font-lock-set-defaults))
+
+(eval-and-compile
+  (unless (featurep 'xemacs)
+    (autoload 'font-lock-set-defaults "font-lock")))
+
+(define-minor-mode gnus-message-citation-mode
+  "Toggle `gnus-message-citation-mode' in current buffer.
+This buffer local minor mode provides additional font-lock support for
+nested citations.
+With prefix ARG, turn `gnus-message-citation-mode' on if and only if ARG
+is positive.
+Automatically turn `font-lock-mode' on when `gnus-message-citation-mode'
+is turned on."
+  nil ;; init-value
+  "" ;; lighter
+  nil ;; keymap
+  (when (eq major-mode 'message-mode)
+    (let ((defaults (car (if (featurep 'xemacs)
+			     (get 'message-mode 'font-lock-defaults)
+			   font-lock-defaults)))
+	  default keywords)
+      (while defaults
+	(setq default (if (consp defaults)
+			  (pop defaults)
+			(prog1
+			    defaults
+			  (setq defaults nil))))
+	(if gnus-message-citation-mode
+	    ;; `gnus-message-citation-keywords' should be the last
+	    ;; elements of the keywords because the others are unlikely
+	    ;; to have the OVERRIDE flags -- XEmacs applies a keyword
+	    ;; having no OVERRIDE flag to matched text even if it has
+	    ;; already other faces, while Emacs doesn't.
+	    (set (make-local-variable default)
+		 (append (default-value default)
+			 gnus-message-citation-keywords))
+	  (kill-local-variable default))))
+    ;; Force `font-lock-set-defaults' to update `font-lock-keywords'.
+    (if (featurep 'xemacs)
+	(progn
+	  (require 'font-lock)
+	  (setq font-lock-defaults-computed nil
+		font-lock-keywords nil))
+      (setq font-lock-set-defaults nil))
+    (font-lock-set-defaults)
+    (cond ((symbol-value 'font-lock-mode)
+	   (font-lock-fontify-buffer))
+	  (gnus-message-citation-mode
+	   (font-lock-mode 1)))))
+
+(defun turn-on-gnus-message-citation-mode ()
+  "Turn on `gnus-message-citation-mode'."
+  (gnus-message-citation-mode 1))
+(defun turn-off-gnus-message-citation-mode ()
+  "Turn off `gnus-message-citation-mode'."
+  (gnus-message-citation-mode -1))
 
 (gnus-ems-redefine)
 
Index: gnus/lisp/gnus-cus.el
diff -u gnus/lisp/gnus-cus.el:7.14 gnus/lisp/gnus-cus.el:7.15
--- gnus/lisp/gnus-cus.el:7.14	Fri Feb 17 01:25:20 2006
+++ gnus/lisp/gnus-cus.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-cus.el --- customization commands for Gnus
 
 ;; Copyright (C) 1996, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-delay.el
diff -u gnus/lisp/gnus-delay.el:7.11 gnus/lisp/gnus-delay.el:7.12
--- gnus/lisp/gnus-delay.el:7.11	Wed Jan 25 07:24:38 2006
+++ gnus/lisp/gnus-delay.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,6 @@
 ;;; gnus-delay.el --- Delayed posting of articles
 
-;; Copyright (C) 2001, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Kai Großjohann <[email protected]>
 ;; Keywords: mail, news, extensions
Index: gnus/lisp/gnus-demon.el
diff -u gnus/lisp/gnus-demon.el:7.9 gnus/lisp/gnus-demon.el:7.13
--- gnus/lisp/gnus-demon.el:7.9	Sun Apr 30 11:44:06 2006
+++ gnus/lisp/gnus-demon.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-demon.el --- daemonic Gnus behaviour
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -214,7 +214,7 @@
 		   (< idle gnus-demon-idle-time)) ; Idle timed out.
 		  (t (< 0 gnus-demon-idle-time)))) ; Or just need to be idle.
 	       ;; So we call the handler.
-	       (progn
+	       (gnus-with-local-quit
 		 (ignore-errors (funcall (car handler)))
 		 ;; And reset the timer.
 		 (setcar (nthcdr 1 handler)
@@ -228,14 +228,15 @@
 	       (gnus-demon-is-idle-p))
 	  ;; We want to call this handler each and every time that
 	  ;; Emacs is idle.
-	  (ignore-errors (funcall (car handler))))
+	  (gnus-with-local-quit
+	    (ignore-errors (funcall (car handler)))))
 	 (t
 	  ;; We want to call this handler only if Emacs has been idle
 	  ;; for a specified number of timesteps.
 	  (and (not (memq (car handler) gnus-demon-idle-has-been-called))
 	       (< idle gnus-demon-idle-time)
 	       (gnus-demon-is-idle-p)
-	       (progn
+	       (gnus-with-local-quit
 		 (ignore-errors (funcall (car handler)))
 		 ;; Make sure the handler won't be called once more in
 		 ;; this idle-cycle.
Index: gnus/lisp/gnus-diary.el
diff -u gnus/lisp/gnus-diary.el:7.10 gnus/lisp/gnus-diary.el:7.14
--- gnus/lisp/gnus-diary.el:7.10	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-diary.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-diary.el --- Wrapper around the NNDiary Gnus back end
 
-;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-;; Copyright (C) 1999, 2000, 2001 Didier Verna.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+;;   2006, 2007  Free Software Foundation, Inc.
 
 ;; Author:        Didier Verna <[email protected]>
 ;; Maintainer:    Didier Verna <[email protected]>
@@ -66,7 +66,7 @@
 
 (defcustom gnus-diary-delay-format-function 'gnus-diary-delay-format-english
   "*Function called to format a diary delay string.
-It is passed two arguments.  The first one is non nil if the delay is in
+It is passed two arguments.  The first one is non-nil if the delay is in
 the past.  The second one is of the form ((NUM . UNIT) ...) where NUM is
 an integer and UNIT is one of 'year 'month 'week 'day 'hour or 'minute.
 It should return strings like \"In 2 months, 3 weeks\", \"3 hours,
@@ -158,6 +158,7 @@
 ;; #### NOTE: Gnus sometimes gives me a HEADER not corresponding to any
 ;; message, with all fields set to nil here. I don't know what it is for, and
 ;; I just ignore it.
+;;;###autoload
 (defun gnus-user-format-function-d (header)
   ;; Returns an aproximative delay string for the next occurence of this
   ;; message. The delay is given only in the first non zero unit.
@@ -194,6 +195,7 @@
 ;; #### NOTE: Gnus sometimes gives me a HEADER not corresponding to any
 ;; message, with all fields set to nil here. I don't know what it is for, and
 ;; I just ignore it.
+;;;###autoload
 (defun gnus-user-format-function-D (header)
   ;; Returns a formatted time string for the next occurence of this message.
   (let* ((extras (mail-header-extra header))
Index: gnus/lisp/gnus-dired.el
diff -u gnus/lisp/gnus-dired.el:7.6 gnus/lisp/gnus-dired.el:7.7
--- gnus/lisp/gnus-dired.el:7.6	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-dired.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-dired.el --- utility functions where gnus and dired meet
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Authors: Benjamin Rutt <[email protected]>,
 ;;          Shenghuo Zhu <[email protected]>
Index: gnus/lisp/gnus-draft.el
diff -u gnus/lisp/gnus-draft.el:7.12 gnus/lisp/gnus-draft.el:7.16
--- gnus/lisp/gnus-draft.el:7.12	Thu Mar  2 07:02:36 2006
+++ gnus/lisp/gnus-draft.el	Sat Mar 24 20:50:00 2007
@@ -1,7 +1,7 @@
 ;;; gnus-draft.el --- draft message support for Gnus
 
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -76,7 +76,6 @@
       (when (gnus-visual-p 'draft-menu 'menu)
 	(gnus-draft-make-menu-bar))
       (add-minor-mode 'gnus-draft-mode " Draft" gnus-draft-mode-map)
-      (mml-mode)
       (gnus-run-hooks 'gnus-draft-mode-hook))))
 
 ;;; Commands
@@ -106,7 +105,9 @@
       (save-restriction
 	(message-narrow-to-headers)
 	(message-remove-header "date")))
-    (save-buffer)
+    (let ((message-draft-headers
+	   (delq 'Date (copy-sequence message-draft-headers))))
+      (save-buffer))
     (let ((gnus-verbose-backends nil))
       (gnus-request-expire-articles (list article) group t))
     (push
@@ -239,6 +240,12 @@
 		    (throw 'continue t)
 		  (error "Stop!"))))))))
 
+(defcustom gnus-draft-setup-hook nil
+  "Hook run after setting up a draft buffer."
+  :group 'gnus-message
+  :version "23.0" ;; No Gnus
+  :type 'hook)
+
 ;;; Utility functions
 
 ;;;!!!If this is byte-compiled, it fails miserably.
@@ -286,7 +293,8 @@
 		(gnus-add-mark ,(car ga) 'replied ,article)
 		(gnus-request-set-mark ,(car ga) (list (list (list ,article)
 							     'add '(reply)))))
-	     'send)))))))
+	     'send))))
+      (run-hooks 'gnus-draft-setup-hook))))
 
 (defun gnus-draft-article-sendable-p (article)
   "Say whether ARTICLE is sendable."
Index: gnus/lisp/gnus-dup.el
diff -u gnus/lisp/gnus-dup.el:7.7 gnus/lisp/gnus-dup.el:7.9
--- gnus/lisp/gnus-dup.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-dup.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-dup.el --- suppression of duplicate articles in Gnus
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-eform.el
diff -u gnus/lisp/gnus-eform.el:7.7 gnus/lisp/gnus-eform.el:7.8
--- gnus/lisp/gnus-eform.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-eform.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-eform.el --- a mode for editing forms for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-ems.el
diff -u gnus/lisp/gnus-ems.el:7.14 gnus/lisp/gnus-ems.el:7.16
--- gnus/lisp/gnus-ems.el:7.14	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-ems.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -203,7 +203,10 @@
 
 (defun gnus-image-type-available-p (type)
   (and (fboundp 'image-type-available-p)
-       (image-type-available-p type)))
+       (image-type-available-p type)
+       (if (fboundp 'display-images-p)
+	   (display-images-p)
+	 t)))
 
 (defun gnus-create-image (file &optional type data-p &rest props)
   (let ((face (plist-get props :face)))
Index: gnus/lisp/gnus-fun.el
diff -u gnus/lisp/gnus-fun.el:7.16 gnus/lisp/gnus-fun.el:7.17
--- gnus/lisp/gnus-fun.el:7.16	Sun Apr 16 09:30:34 2006
+++ gnus/lisp/gnus-fun.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; gnus-fun.el --- various frivolous extension functions to Gnus
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-group.el
diff -u gnus/lisp/gnus-group.el:7.85 gnus/lisp/gnus-group.el:7.92
--- gnus/lisp/gnus-group.el:7.85	Tue Apr 18 02:57:20 2006
+++ gnus/lisp/gnus-group.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-group.el --- group mode commands for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -135,7 +135,7 @@
 `gnus-group-sort-by-score', `gnus-group-sort-by-method',
 `gnus-group-sort-by-server', and `gnus-group-sort-by-rank'.
 
-This variable can also be a list of sorting functions.	In that case,
+This variable can also be a list of sorting functions.  In that case,
 the most significant sort function should be the last function in the
 list."
   :group 'gnus-group-listing
@@ -197,7 +197,7 @@
 
 Note that this format specification is not always respected.  For
 reasons of efficiency, when listing killed groups, this specification
-is ignored altogether.	If the spec is changed considerably, your
+is ignored altogether.  If the spec is changed considerably, your
 output may end up looking strange when listing both alive and killed
 groups.
 
@@ -1034,9 +1034,11 @@
   '((gnus-group-post-news "mail/compose")
     ;; Some useful agent icons?  I don't use the agent so agent users should
     ;; suggest useful commands:
-    (gnus-agent-toggle-plugged "connect" t
-     			       :visible (and gnus-agent (not gnus-plugged)))
     (gnus-agent-toggle-plugged "disconnect" t
+			       :help "Gnus is currently unplugged.  Click to work online."
+     			       :visible (and gnus-agent (not gnus-plugged)))
+    (gnus-agent-toggle-plugged "connect" t
+			       :help "Gnus is currently plugged.  Click to work offline."
      			       :visible (and gnus-agent gnus-plugged))
     ;; FIXME: gnus-agent-toggle-plugged (in gnus-agent-group-make-menu-bar)
     ;; should have a better help text.
@@ -1131,7 +1133,7 @@
 
 All normal editing commands are switched off.
 \\<gnus-group-mode-map>
-The group buffer lists (some of) the groups available.	For instance,
+The group buffer lists (some of) the groups available.  For instance,
 `\\[gnus-group-list-groups]' will list all subscribed groups with unread articles, while `\\[gnus-group-list-zombies]'
 lists all zombie groups.
 
@@ -2028,7 +2030,7 @@
 If the prefix argument ALL is non-nil, already read articles become
 readable.  IF ALL is a number, fetch this number of articles.  If the
 optional argument NO-ARTICLE is non-nil, no article will be
-auto-selected upon group entry.	 If GROUP is non-nil, fetch that
+auto-selected upon group entry.  If GROUP is non-nil, fetch that
 group."
   (interactive "P")
   (let ((no-display (eq all 0))
@@ -2069,11 +2071,11 @@
     (forward-line -1))
   (gnus-group-read-group all t))
 
-(defun gnus-group-quick-select-group (&optional all)
-  "Select the current group \"quickly\".
-This means that no highlighting or scoring will be performed.
-If ALL (the prefix argument) is 0, don't even generate the summary
-buffer.
+(defun gnus-group-quick-select-group (&optional all group)
+  "Select the GROUP \"quickly\".
+This means that no highlighting or scoring will be performed.  If
+ALL (the prefix argument) is 0, don't even generate the summary
+buffer.  If GROUP is nil, use current group.
 
 This might be useful if you want to toggle threading
 before entering the group."
@@ -2084,7 +2086,7 @@
 	gnus-home-score-file
 	gnus-apply-kill-hook
 	gnus-summary-expunge-below)
-    (gnus-group-read-group all t)))
+    (gnus-group-read-group all t group)))
 
 (defun gnus-group-visible-select-group (&optional all)
   "Select the current group without hiding any articles."
@@ -2124,13 +2126,14 @@
 ;;;###autoload
 (defun gnus-fetch-group (group &optional articles)
   "Start Gnus if necessary and enter GROUP.
+If ARTICLES, display those articles.
 Returns whether the fetching was successful or not."
   (interactive (list (completing-read "Group name: " gnus-active-hashtb
 				      nil nil nil nil
 				      (group-name-at-point))))
   (unless (get-buffer gnus-group-buffer)
     (gnus-no-server))
-  (gnus-group-read-group articles nil group))
+  (gnus-group-read-group (if articles nil t) nil group articles))
 
 ;;;###autoload
 (defun gnus-fetch-group-other-frame (group)
@@ -2752,13 +2755,18 @@
 			  (t (setq err (format "%c unknown. " char))
 			     nil))))
       (setq type found)))
-  (let* ((file (expand-file-name file))
-	 (name (gnus-generate-new-group-name
-		(gnus-group-prefixed-name
-		 (file-name-nondirectory file) '(nndoc "")))))
+  (setq file (expand-file-name file))
+  (let ((name (gnus-generate-new-group-name
+	       (gnus-group-prefixed-name
+		(file-name-nondirectory file) '(nndoc ""))))
+	(encodable (mm-coding-system-p 'utf-8)))
     (gnus-group-make-group
-     (gnus-group-real-name name)
-     (list 'nndoc file
+     (if encodable
+	 (mm-encode-coding-string (gnus-group-real-name name) 'utf-8)
+       (gnus-group-real-name name))
+     (list 'nndoc (if encodable
+		      (mm-encode-coding-string file 'utf-8)
+		    file)
 	   (list 'nndoc-address file)
 	   (list 'nndoc-article-type (or type 'guess))))))
 
@@ -2892,7 +2900,7 @@
 (defun gnus-group-make-directory-group (dir)
   "Create an nndir group.
 The user will be prompted for a directory.  The contents of this
-directory will be used as a newsgroup.	The directory should contain
+directory will be used as a newsgroup.  The directory should contain
 mail messages or news articles in files that have numeric names."
   (interactive
    (list (read-file-name "Create group from directory: ")))
@@ -3227,7 +3235,7 @@
 (defun gnus-group-sort-by-unread (info1 info2)
   "Sort by number of unread articles."
   (let ((n1 (gnus-group-unread (gnus-info-group info1)))
-	(n2 (gnus-group-unread (gnus-info-group info1))))
+	(n2 (gnus-group-unread (gnus-info-group info2))))
     (< (or (and (numberp n1) n1) 0)
        (or (and (numberp n2) n2) 0))))
 
@@ -3564,7 +3572,7 @@
 
 (defun gnus-group-transpose-groups (n)
   "Move the current newsgroup up N places.
-If given a negative prefix, move down instead.	The difference between
+If given a negative prefix, move down instead.  The difference between
 N and the number of steps taken is returned."
   (interactive "p")
   (unless (gnus-group-group-name)
@@ -4277,7 +4285,7 @@
 	(unless entry
 	  (error "Trying to change non-existent group %s" method-only-group))
 	;; We have received parts of the actual group info - either the
-	;; select method or the group parameters.	 We first check
+	;; select method or the group parameters.  We first check
 	;; whether we have to extend the info, and if so, do that.
 	(let ((len (length info))
 	      (total (if (eq part 'method) 5 6)))
Index: gnus/lisp/gnus-int.el
diff -u gnus/lisp/gnus-int.el:7.21 gnus/lisp/gnus-int.el:7.23
--- gnus/lisp/gnus-int.el:7.21	Fri Feb 24 21:49:02 2006
+++ gnus/lisp/gnus-int.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-int.el --- backend interface functions for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -209,11 +209,12 @@
   "Open a connection to GNUS-COMMAND-METHOD."
   (when (stringp gnus-command-method)
     (setq gnus-command-method (gnus-server-to-method gnus-command-method)))
-  (let ((elem (assoc gnus-command-method gnus-opened-servers)))
+  (let ((elem (assoc gnus-command-method gnus-opened-servers))
+	(server (gnus-method-to-server-name gnus-command-method)))
     ;; If this method was previously denied, we just return nil.
     (if (eq (nth 1 elem) 'denied)
 	(progn
-	  (gnus-message 1 "Denied server")
+	  (gnus-message 1 "Denied server %s" server)
 	  nil)
       ;; Open the server.
       (let* ((open-server-function (gnus-get-function gnus-command-method 'open-server))
@@ -224,11 +225,11 @@
                           (nthcdr 2 gnus-command-method))
                (error
                 (gnus-message 1 (format
-                                 "Unable to open server due to: %s"
-                                 (error-message-string err)))
+                                 "Unable to open server %s due to: %s"
+                                 server (error-message-string err)))
                 nil)
                (quit
-                (gnus-message 1 "Quit trying to open server")
+                (gnus-message 1 "Quit trying to open server %s" server)
                 nil)))
             open-offline)
 	;; If this hasn't been opened before, we add it to the list.
@@ -253,9 +254,9 @@
                              ((and
 			       (not gnus-batch-mode)
 			       (gnus-y-or-n-p
-				(format "Unable to open %s:%s, go offline? "
-					(car gnus-command-method)
-					(cadr gnus-command-method))))
+				(format
+				 "Unable to open server %s, go offline? "
+				 server)))
                               (setq open-offline t)
                               'offline)
                              (t
Index: gnus/lisp/gnus-kill.el
diff -u gnus/lisp/gnus-kill.el:7.8 gnus/lisp/gnus-kill.el:7.10
--- gnus/lisp/gnus-kill.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-kill.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-kill.el --- kill commands for Gnus
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
Index: gnus/lisp/gnus-logic.el
diff -u gnus/lisp/gnus-logic.el:7.5 gnus/lisp/gnus-logic.el:7.6
--- gnus/lisp/gnus-logic.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-logic.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-logic.el --- advanced scoring code for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-mh.el
diff -u gnus/lisp/gnus-mh.el:7.5 gnus/lisp/gnus-mh.el:7.7
--- gnus/lisp/gnus-mh.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-mh.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-mh.el --- mh-e interface for Gnus
 
-;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
Index: gnus/lisp/gnus-ml.el
diff -u gnus/lisp/gnus-ml.el:7.7 gnus/lisp/gnus-ml.el:7.10
--- gnus/lisp/gnus-ml.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-ml.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-ml.el --- Mailing list minor mode for Gnus
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Julien Gilles  <[email protected]>
 ;; Keywords: news, mail
@@ -51,8 +51,7 @@
     "\C-c\C-nu" gnus-mailing-list-unsubscribe
     "\C-c\C-np" gnus-mailing-list-post
     "\C-c\C-no" gnus-mailing-list-owner
-    "\C-c\C-na" gnus-mailing-list-archive
-    ))
+    "\C-c\C-na" gnus-mailing-list-archive))
 
 (defun gnus-mailing-list-make-menu-bar ()
   (unless (boundp 'gnus-mailing-list-menu)
@@ -103,7 +102,8 @@
       ;; Set up the menu.
       (when (gnus-visual-p 'mailing-list-menu 'menu)
 	(gnus-mailing-list-make-menu-bar))
-      (add-minor-mode 'gnus-mailing-list-mode " Mailing-List" gnus-mailing-list-mode-map)
+      (add-minor-mode 'gnus-mailing-list-mode " Mailing-List"
+		      gnus-mailing-list-mode-map)
       (gnus-run-hooks 'gnus-mailing-list-mode-hook))))
 
 ;;; Commands
@@ -118,7 +118,7 @@
 	  (t (gnus-message 1 "no list-help in this group")))))
 
 (defun gnus-mailing-list-subscribe ()
-  "Subscribe."
+  "Subscribe to mailing list."
   (interactive)
   (let ((list-subscribe
 	 (with-current-buffer gnus-original-article-buffer
@@ -127,7 +127,7 @@
 	  (t (gnus-message 1 "no list-subscribe in this group")))))
 
 (defun gnus-mailing-list-unsubscribe ()
-  "Unsubscribe."
+  "Unsubscribe from mailing list."
   (interactive)
   (let ((list-unsubscribe
 	 (with-current-buffer gnus-original-article-buffer
@@ -145,7 +145,7 @@
 	  (t (gnus-message 1 "no list-post in this group")))))
 
 (defun gnus-mailing-list-owner ()
-  "Mail to the owner."
+  "Mail to the mailing list owner."
   (interactive)
   (let ((list-owner
 	 (with-current-buffer gnus-original-article-buffer
@@ -169,33 +169,14 @@
 ;;; Utility functions
 
 (defun gnus-mailing-list-message (address)
-  ""
-  (let ((mailto  "")
-	(to ())
-	(subject "None")
-	(body "")
-	)
-    (cond
-     ((string-match "<mailto:\\([^>]*\\)>" address)
-      (let ((args (match-string 1 address)))
-	(cond				; with param
-	 ((string-match "\\(.*\\)\\?\\(.*\\)" args)
-	  (setq mailto (match-string 1 args))
-	  (let ((param (match-string 2 args)))
-	    (if (string-match "subject=\\([^&]*\\)" param)
-		(setq subject (match-string 1 param)))
-	    (if (string-match "body=\\([^&]*\\)" param)
-		(setq body (match-string 1 param)))
-	    (if (string-match "to=\\([^&]*\\)" param)
-		(push (match-string 1 param) to))
-	    ))
-	 (t (setq mailto args)))))	; without param
-
-     ; other case <http://... to be done.
-     (t nil))
-    (gnus-setup-message 'message (message-mail mailto subject))
-    (insert body)
-    ))
+  "Send message to ADDRESS.
+ADDRESS is specified by a \"mailto:\" URL."
+  (cond
+   ((string-match "<\\(mailto:[^>]*\\)>" address)
+    (require 'gnus-art)
+    (gnus-url-mailto (match-string 1 address)))
+   ;; other case <http://...> to be done.
+   (t nil)))
 
 (provide 'gnus-ml)
 
Index: gnus/lisp/gnus-mlspl.el
diff -u gnus/lisp/gnus-mlspl.el:7.7 gnus/lisp/gnus-mlspl.el:7.8
--- gnus/lisp/gnus-mlspl.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-mlspl.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-mlspl.el --- a group params-based mail splitting mechanism
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Alexandre Oliva <[email protected]>
 ;; Keywords: news, mail
Index: gnus/lisp/gnus-move.el
diff -u gnus/lisp/gnus-move.el:7.7 gnus/lisp/gnus-move.el:7.9
--- gnus/lisp/gnus-move.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-move.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-move.el --- commands for moving Gnus from one server to another
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-msg.el
diff -u gnus/lisp/gnus-msg.el:7.41 gnus/lisp/gnus-msg.el:7.54
--- gnus/lisp/gnus-msg.el:7.41	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-msg.el	Mon Apr 23 14:21:30 2007
@@ -1,7 +1,7 @@
 ;;; gnus-msg.el --- mail and post interface for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
@@ -289,6 +289,16 @@
   :group 'gnus-message
   :type 'boolean)
 
+(defcustom gnus-message-highlight-citation
+  t ;; gnus-treat-highlight-citation ;; gnus-cite dependency
+  "Enable highlighting of different citation levels in message-mode."
+  :version "23.0" ;; No Gnus
+  :group 'gnus-cite
+  :group 'gnus-message
+  :type 'boolean)
+
+(autoload 'gnus-message-citation-mode "gnus-cite" nil t)
+
 ;;; Internal variables.
 
 (defvar gnus-inhibit-posting-styles nil
@@ -390,6 +400,13 @@
        (setq mml-buffer-list nil)
        (add-hook 'message-header-setup-hook 'gnus-inews-insert-gcc)
        (add-hook 'message-header-setup-hook 'gnus-inews-insert-archive-gcc)
+       ;; message-newsreader and message-mailer were formerly set in
+       ;; gnus-inews-add-send-actions, but this is too late when
+       ;; message-generate-headers-first is used. --ansel
+       (add-hook 'message-mode-hook
+		 (lambda nil
+		   (setq message-newsreader
+			 (setq message-mailer (gnus-extended-version)))))
        ;; #### FIXME: for a reason that I did not manage to identify yet,
        ;; the variable `gnus-newsgroup-name' does not honor a dynamically
        ;; scoped or setq'ed value from a caller like `C-u gnus-summary-mail'.
@@ -422,6 +439,9 @@
 	 (set (make-local-variable 'gnus-message-group-art)
 	      (cons ,group ,article))
 	 (set (make-local-variable 'gnus-newsgroup-name) ,group)
+	 ;; Enable highlighting of different citation levels
+	 (when gnus-message-highlight-citation
+	   (gnus-message-citation-mode 1))
 	 (gnus-run-hooks 'gnus-message-setup-hook)
 	 (if (eq major-mode 'message-mode)
 	     (let ((mbl1 mml-buffer-list))
@@ -519,7 +539,6 @@
   (setq message-post-method
 	`(lambda (&optional arg)
 	   (gnus-post-method arg ,gnus-newsgroup-name)))
-  (setq message-newsreader (setq message-mailer (gnus-extended-version)))
   (message-add-action
    `(when (gnus-buffer-exists-p ,buffer)
       (set-window-configuration ,winconf))
@@ -770,6 +789,7 @@
 		 (nnheader-narrow-to-headers)
 		 (nnheader-parse-naked-head)))))
 	(message-yank-original)
+	(message-exchange-point-and-mark)
 	(setq beg (or beg (mark t))))
       (when articles
 	(insert "\n")))
@@ -811,7 +831,10 @@
 	       (set-buffer ,gnus-summary-buffer)
 	       (gnus-cache-possibly-remove-article ,article nil nil nil t)
 	       (gnus-summary-mark-as-read ,article gnus-canceled-mark)))))
-       message-send-actions))))
+       message-send-actions)
+      ;; Add Gcc header.
+      (gnus-inews-insert-archive-gcc)
+      (gnus-inews-insert-gcc))))
 
 
 
@@ -1274,10 +1297,13 @@
 	(message-narrow-to-head-1)
 	;; Gnus will generate a new one when sending.
 	(message-remove-header "Message-ID")
-	(message-remove-header message-ignored-resent-headers t)
 	;; Remove unwanted headers.
+	(message-remove-header message-ignored-resent-headers t)
 	(goto-char (point-max))
 	(insert mail-header-separator)
+	;; Add Gcc header.
+	(gnus-inews-insert-archive-gcc)
+	(gnus-inews-insert-gcc)
 	(goto-char (point-min))
 	(when (re-search-forward "^To:\\|^Newsgroups:" nil 'move)
 	  (forward-char 1))
@@ -1549,15 +1575,29 @@
 this is a reply."
   (interactive "P")
   (gnus-summary-select-article t)
-  (set-buffer gnus-original-article-buffer)
-  (gnus-setup-message 'compose-bounce
-    (let* ((references (mail-fetch-field "references"))
-	   (parent (and references (gnus-parent-id references))))
+  (let (summary-buffer parent)
+    (if fetch
+	(progn
+	  (setq summary-buffer (current-buffer))
+	  (set-buffer gnus-original-article-buffer)
+	  (article-goto-body)
+	  (when (re-search-forward "^References:\n?" nil t)
+	    (while (memq (char-after) '(?\t ? ))
+	      (forward-line 1))
+	    (skip-chars-backward "\t\n ")
+	    (setq parent
+		  (gnus-parent-id (buffer-substring (match-end 0) (point))))))
+      (set-buffer gnus-original-article-buffer))
+    (gnus-setup-message 'compose-bounce
       (message-bounce)
+      ;; Add Gcc header.
+      (gnus-inews-insert-archive-gcc)
+      (gnus-inews-insert-gcc)
       ;; If there are references, we fetch the article we answered to.
-      (and fetch parent
-	   (gnus-summary-refer-article parent)
-	   (gnus-summary-show-all-headers)))))
+      (when parent
+	(with-current-buffer summary-buffer
+	  (gnus-summary-refer-article parent)
+	  (gnus-summary-show-all-headers))))))
 
 ;;; Gcc handling.
 
@@ -1866,6 +1906,13 @@
 	     ((eq element 'x-face-file)
 	      (setq element 'x-face
 		    filep t)))
+	    ;; Post-processing for the signature posting-style:
+	    (and (eq element 'signature) filep
+		 message-signature-directory
+		 ;; don't actually use the signature directory
+		 ;; if message-signature-file contains a path.
+		 (not (file-name-directory v))
+		 (setq v (nnheader-concat message-signature-directory v)))
 	    ;; Get the contents of file elems.
 	    (when (and filep v)
 	      (setq v (with-temp-buffer
Index: gnus/lisp/gnus-nocem.el
diff -u gnus/lisp/gnus-nocem.el:7.9 gnus/lisp/gnus-nocem.el:7.11
--- gnus/lisp/gnus-nocem.el:7.9	Fri Mar 10 10:48:31 2006
+++ gnus/lisp/gnus-nocem.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-picon.el
diff -u gnus/lisp/gnus-picon.el:7.10 gnus/lisp/gnus-picon.el:7.11
--- gnus/lisp/gnus-picon.el:7.10	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-picon.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-picon.el --- displaying pretty icons in Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news xpm annotation glyph faces
Index: gnus/lisp/gnus-range.el
diff -u gnus/lisp/gnus-range.el:7.8 gnus/lisp/gnus-range.el:7.9
--- gnus/lisp/gnus-range.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-range.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-range.el --- range and sequence functions for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-registry.el
diff -u gnus/lisp/gnus-registry.el:7.29 gnus/lisp/gnus-registry.el:7.36
--- gnus/lisp/gnus-registry.el:7.29	Tue Apr 18 23:06:28 2006
+++ gnus/lisp/gnus-registry.el	Sat Mar 31 15:59:41 2007
@@ -1,7 +1,7 @@
 ;;; gnus-registry.el --- article registry for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <[email protected]>
 ;; Keywords: news
@@ -77,8 +77,11 @@
   "*The article registry by Message ID.")
 
 (defcustom gnus-registry-unfollowed-groups '("delayed" "drafts" "queue")
-  "List of groups that gnus-registry-split-fancy-with-parent won't follow.
-The group names are matched, they don't have to be fully qualified."
+  "List of groups that gnus-registry-split-fancy-with-parent won't return.
+The group names are matched, they don't have to be fully
+qualified.  This parameter tells the Registry 'never split a
+message into a group that matches one of these, regardless of
+references.'"
   :group 'gnus-registry
   :type '(repeat string))
 
@@ -153,6 +156,8 @@
       (gnus-load file)
       (gnus-message 5 "Reading %s...done" file))))
 
+;; FIXME: Get rid of duplicated code, cf. `gnus-save-newsrc-file' in
+;; `gnus-start.el'.  --rsteib
 (defun gnus-registry-cache-save ()
   "Save the registry cache file."
   (interactive)
@@ -171,7 +176,6 @@
 	      (standard-output (current-buffer)))
 	  (gnus-gnus-to-quick-newsrc-format t "gnus registry startup file" 'gnus-registry-alist)
 	  (gnus-registry-cache-whitespace file)
-	  (set-text-properties (point-min) (point-max) nil)
 	  (save-buffer))
       (let ((coding-system-for-write gnus-ding-file-coding-system)
 	    (version-control gnus-backup-startup-file)
@@ -242,10 +246,12 @@
       ;; remove empty entries
       (when gnus-registry-clean-empty
 	(gnus-registry-clean-empty-function))
-      ;; now trim the registry appropriately
-      (setq gnus-registry-alist (gnus-registry-trim
-				 (gnus-hashtable-to-alist
-				  gnus-registry-hashtb)))
+      ;; now trim and clean text properties from the registry appropriately
+      (setq gnus-registry-alist 
+	    (gnus-registry-remove-alist-text-properties
+	     (gnus-registry-trim
+	      (gnus-hashtable-to-alist
+	       gnus-registry-hashtb))))
       ;; really save
       (gnus-registry-cache-save)
       (setq gnus-registry-entry-caching caching)
@@ -260,7 +266,7 @@
        (when (stringp key)
 	 (dolist (group (gnus-registry-fetch-groups key))
 	   (when (gnus-parameter-registry-ignore group)
-	     (gnus-message 
+	     (gnus-message
 	      10 
 	      "gnus-registry: deleted ignored group %s from key %s"
 	      group key)
@@ -273,8 +279,7 @@
 		  (gnus-registry-fetch-group key)
 		  ;; TODO: look for specific extra data here!
 		  ;; in this example, we look for 'label
-		  (gnus-registry-fetch-extra key 'label)
-		  (stringp key))
+		  (gnus-registry-fetch-extra key 'label))
 	   (incf count)
 	   (gnus-registry-delete-id key))
 	 
@@ -293,6 +298,17 @@
   (setq gnus-registry-hashtb (gnus-alist-to-hashtable gnus-registry-alist))
   (setq gnus-registry-dirty nil))
 
+(defun gnus-registry-remove-alist-text-properties (v)
+  "Remove text properties from all strings in alist."
+  (if (stringp v)
+      (gnus-string-remove-all-properties v)
+    (if (and (listp v) (listp (cdr v)))
+	(mapcar 'gnus-registry-remove-alist-text-properties v)
+      (if (and (listp v) (stringp (cdr v)))
+	  (cons (gnus-registry-remove-alist-text-properties (car v))
+		(gnus-registry-remove-alist-text-properties (cdr v)))
+      v))))
+
 (defun gnus-registry-trim (alist)
   "Trim alist to size, using gnus-registry-max-entries.
 Also, drop all gnus-registry-ignored-groups matches."
@@ -313,7 +329,7 @@
       (setq alist
 	    (nthcdr
 	     trim-length
-	     (sort alist 
+	     (sort alist
 		   (lambda (a b)
 		     (time-less-p
 		      (or (cdr (gethash (car a) timehash)) '(0 0 0))
@@ -321,9 +337,10 @@
 
 (defun gnus-registry-action (action data-header from &optional to method)
   (let* ((id (mail-header-id data-header))
-	 (subject (gnus-registry-simplify-subject
-		   (mail-header-subject data-header)))
-	 (sender (mail-header-from data-header))
+	 (subject (gnus-string-remove-all-properties
+		   (gnus-registry-simplify-subject
+		    (mail-header-subject data-header))))
+	 (sender (gnus-string-remove-all-properties (mail-header-from data-header)))
 	 (from (gnus-group-guess-full-name-from-command-method from))
 	 (to (if to (gnus-group-guess-full-name-from-command-method to) nil))
 	 (to-name (if to to "the Bit Bucket"))
@@ -364,8 +381,11 @@
 messages.
 
 For a message to be split, it looks for the parent message in the
-References or In-Reply-To header and then looks in the registry to
-see which group that message was put in.  This group is returned.
+References or In-Reply-To header and then looks in the registry
+to see which group that message was put in.  This group is
+returned, unless it matches one of the entries in
+gnus-registry-unfollowed-groups or
+nnmail-split-fancy-with-parent-ignore-groups.
 
 See the Info node `(gnus)Fancy Mail Splitting' for more details."
   (let* ((refstr (or (message-fetch-field "references") "")) ; guarantee string
@@ -395,9 +415,10 @@
 		  references))
 
       ;; else: there were no references, now try the extra tracking
-      (let ((sender (message-fetch-field "from"))
-	    (subject (gnus-registry-simplify-subject
-		      (message-fetch-field "subject")))
+      (let ((sender (gnus-string-remove-all-properties(message-fetch-field "from")))
+	    (subject (gnus-string-remove-all-properties
+		      (gnus-registry-simplify-subject
+		       (message-fetch-field "subject"))))
 	    (single-match t))
 	(when (and single-match
 		   (gnus-registry-track-sender-p)
@@ -479,6 +500,39 @@
 	(setq res nil))))
     res))
 
+(defun gnus-registry-wash-for-keywords (&optional force)
+  (interactive)
+  (let ((id (gnus-registry-fetch-message-id-fast gnus-current-article))
+	word words)
+    (if (or (not (gnus-registry-fetch-extra id 'keywords))
+	    force)
+	(save-excursion
+	  (set-buffer gnus-article-buffer)
+	  (article-goto-body)
+	  (save-window-excursion
+	    (save-restriction
+	      (narrow-to-region (point) (point-max))
+	      (with-syntax-table gnus-adaptive-word-syntax-table
+		(while (re-search-forward "\\b\\w+\\b" nil t)
+		  (setq word (gnus-registry-remove-alist-text-properties
+			      (downcase (buffer-substring
+					 (match-beginning 0) (match-end 0)))))
+		  (if (> (length word) 3)
+		      (push word words))))))
+	  (gnus-registry-store-extra-entry id 'keywords words)))))
+
+(defun gnus-registry-find-keywords (keyword)
+  (interactive "skeyword: ")
+  (let (articles)
+    (maphash
+     (lambda (key value)
+       (when (gnus-registry-grep-in-list
+	      keyword
+	      (cdr (gnus-registry-fetch-extra key 'keywords)))
+	 (push key articles)))
+     gnus-registry-hashtb)
+    articles))
+
 (defun gnus-registry-register-message-ids ()
   "Register the Message-ID of every article in the group"
   (unless (gnus-parameter-registry-ignore gnus-newsgroup-name)
@@ -509,17 +563,19 @@
   "Fetch the Subject quickly, using the internal gnus-data-list function"
   (if (and (numberp article)
 	   (assoc article (gnus-data-list nil)))
-      (gnus-registry-simplify-subject
-       (mail-header-subject (gnus-data-header
-			     (assoc article (gnus-data-list nil)))))
+      (gnus-string-remove-all-properties
+       (gnus-registry-simplify-subject
+	(mail-header-subject (gnus-data-header
+			      (assoc article (gnus-data-list nil))))))
     nil))
 
 (defun gnus-registry-fetch-sender-fast (article)
   "Fetch the Sender quickly, using the internal gnus-data-list function"
   (if (and (numberp article)
 	   (assoc article (gnus-data-list nil)))
-      (mail-header-from (gnus-data-header
-			 (assoc article (gnus-data-list nil))))
+      (gnus-string-remove-all-properties
+       (mail-header-from (gnus-data-header
+			  (assoc article (gnus-data-list nil)))))
     nil))
 
 (defun gnus-registry-grep-in-list (word list)
@@ -591,8 +647,9 @@
 (defun gnus-registry-store-extra-entry (id key value)
   "Put a specific entry in the extras field of the registry entry for id."
   (let* ((extra (gnus-registry-fetch-extra id))
-	 (alist (cons (cons key value)
-		 (gnus-assq-delete-all key (gnus-registry-fetch-extra id)))))
+	 (alist (gnus-registry-remove-alist-text-properties 
+		 (cons (cons key value)
+		       (gnus-assq-delete-all key (gnus-registry-fetch-extra id))))))
     (gnus-registry-store-extra id alist)))
 
 (defun gnus-registry-fetch-group (id)
Index: gnus/lisp/gnus-salt.el
diff -u gnus/lisp/gnus-salt.el:7.11 gnus/lisp/gnus-salt.el:7.12
--- gnus/lisp/gnus-salt.el:7.11	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-salt.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-salt.el --- alternate summary mode interfaces for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-score.el
diff -u gnus/lisp/gnus-score.el:7.28 gnus/lisp/gnus-score.el:7.32
--- gnus/lisp/gnus-score.el:7.28	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-score.el	Sat Mar 24 20:43:05 2007
@@ -1,7 +1,7 @@
 ;;; gnus-score.el --- scoring code for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
@@ -208,10 +208,10 @@
   :type '(choice string
 		 (repeat (choice string
 				 (cons regexp (repeat file))
-				 (function :value fun)))
+				 function))
 		 (function-item gnus-hierarchial-home-score-file)
 		 (function-item gnus-current-home-score-file)
-		 (function :value fun)))
+		 function))
 
 (defcustom gnus-home-adapt-file nil
   "Variable to control where new adaptive score entries are to go.
@@ -221,8 +221,8 @@
   :type '(choice string
 		 (repeat (choice string
 				 (cons regexp (repeat file))
-				 (function :value fun)))
-		 (function :value fun)))
+				 function))
+		 function))
 
 (defcustom gnus-default-adaptive-score-alist
   `((gnus-kill-file-mark)
@@ -422,6 +422,18 @@
   :group 'gnus-score-various
   :type 'boolean)
 
+(defcustom gnus-inhibit-slow-scoring nil
+  "Inhibit slow scoring, e.g. scoring on headers or body.
+
+If a regexp, scoring on headers or body is inhibited if the group
+matches the regexp.  If it is t, scoring on headers or body is
+inhibited for all groups."
+  :group 'gnus-score-various
+  :version "23.0" ;; No Gnus
+  :type '(choice (const :tag "All" nil)
+		 (const :tag "None" t)
+		 regexp))
+
 
 
 ;; Internal variables.
@@ -1541,8 +1553,21 @@
 					(length (gnus-score-get header score)))
 				      scores)))
 		;; Call the scoring function for this type of "header".
-		(when (setq new (funcall (nth 2 entry) scores header
-					 now expire trace))
+		(when (if (and gnus-inhibit-slow-scoring
+			       (if (and (stringp gnus-inhibit-slow-scoring)
+					;; Always true here?
+					;; (stringp gnus-newsgroup-name)
+					(string-match gnus-inhibit-slow-scoring
+						      gnus-newsgroup-name))
+				   t
+				 nil)
+			       (> 0 (nth 1 (assoc header gnus-header-index))))
+			  (progn
+			    (gnus-message
+			     7 "Scoring on headers or body skipped.")
+			    nil)
+			(setq new (funcall (nth 2 entry) scores header
+					   now expire trace)))
 		  (push new news))))
 	    (when (gnus-buffer-live-p gnus-summary-buffer)
 	      (let ((scored gnus-newsgroup-scored))
Index: gnus/lisp/gnus-setup.el
diff -u gnus/lisp/gnus-setup.el:7.6 gnus/lisp/gnus-setup.el:7.7
--- gnus/lisp/gnus-setup.el:7.6	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-setup.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-setup.el --- Initialization & Setup for Gnus 5
 
 ;; Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Steven L. Baur <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-sieve.el
diff -u gnus/lisp/gnus-sieve.el:7.7 gnus/lisp/gnus-sieve.el:7.8
--- gnus/lisp/gnus-sieve.el:7.7	Tue Apr 11 17:49:40 2006
+++ gnus/lisp/gnus-sieve.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; gnus-sieve.el --- Utilities to manage sieve scripts for Gnus
 
-;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: NAGY Andras <[email protected]>,
 ;;	Simon Josefsson <[email protected]>
Index: gnus/lisp/gnus-soup.el
diff -u gnus/lisp/gnus-soup.el:7.7 gnus/lisp/gnus-soup.el:7.10
--- gnus/lisp/gnus-soup.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-soup.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-soup.el --- SOUP packet writing support for Gnus
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
@@ -36,36 +36,64 @@
 (require 'gnus-start)
 (require 'gnus-range)
 
+(defgroup gnus-soup nil
+  "SOUP packet writing support for Gnus."
+  :group 'gnus)
+
 ;;; User Variables:
 
-(defvar gnus-soup-directory (nnheader-concat gnus-home-directory "SoupBrew/")
-  "*Directory containing an unpacked SOUP packet.")
+(defcustom gnus-soup-directory (nnheader-concat gnus-home-directory "SoupBrew/")
+  "Directory containing an unpacked SOUP packet."
+  :version "22.1" ;; Gnus 5.10.9
+  :type 'directory
+  :group 'gnus-soup)
 
-(defvar gnus-soup-replies-directory
+(defcustom gnus-soup-replies-directory
   (nnheader-concat gnus-soup-directory "SoupReplies/")
-  "*Directory where Gnus will do processing of replies.")
-
-(defvar gnus-soup-prefix-file "gnus-prefix"
-  "*Name of the file where Gnus stores the last used prefix.")
+  "Directory where Gnus will do processing of replies."
+  :version "22.1" ;; Gnus 5.10.9
+  :type 'directory
+  :group 'gnus-soup)
+
+(defcustom gnus-soup-prefix-file "gnus-prefix"
+  "Name of the file where Gnus stores the last used prefix."
+  :version "22.1" ;; Gnus 5.10.9
+  :type 'file
+  :group 'gnus-soup)
 
-(defvar gnus-soup-packer "tar cf - %s | gzip > $HOME/Soupout%d.tgz"
+(defcustom gnus-soup-packer "tar cf - %s | gzip > $HOME/Soupout%d.tgz"
   "Format string command for packing a SOUP packet.
 The SOUP files will be inserted where the %s is in the string.
 This string MUST contain both %s and %d.  The file number will be
-inserted where %d appears.")
-
-(defvar gnus-soup-unpacker "gunzip -c %s | tar xvf -"
-  "*Format string command for unpacking a SOUP packet.
-The SOUP packet file name will be inserted at the %s.")
-
-(defvar gnus-soup-packet-directory gnus-home-directory
-  "*Where gnus-soup will look for REPLIES packets.")
-
-(defvar gnus-soup-packet-regexp "Soupin"
-  "*Regular expression matching SOUP REPLIES packets in `gnus-soup-packet-directory'.")
-
-(defvar gnus-soup-ignored-headers "^Xref:"
-  "*Regexp to match headers to be removed when brewing SOUP packets.")
+inserted where %d appears."
+  :version "22.1" ;; Gnus 5.10.9
+  :type 'string
+  :group 'gnus-soup)
+
+(defcustom gnus-soup-unpacker "gunzip -c %s | tar xvf -"
+  "Format string command for unpacking a SOUP packet.
+The SOUP packet file name will be inserted at the %s."
+  :version "22.1" ;; Gnus 5.10.9
+  :type 'string
+  :group 'gnus-soup)
+
+(defcustom gnus-soup-packet-directory gnus-home-directory
+  "Where gnus-soup will look for REPLIES packets."
+  :version "22.1" ;; Gnus 5.10.9
+  :type 'directory
+  :group 'gnus-soup)
+
+(defcustom gnus-soup-packet-regexp "Soupin"
+  "Regular expression matching SOUP REPLIES packets in `gnus-soup-packet-directory'."
+  :version "22.1" ;; Gnus 5.10.9
+  :type 'regexp
+  :group 'gnus-soup)
+
+(defcustom gnus-soup-ignored-headers "^Xref:"
+  "Regexp to match headers to be removed when brewing SOUP packets."
+  :version "22.1" ;; Gnus 5.10.9
+  :type 'regexp
+  :group 'gnus-soup)
 
 ;;; Internal Variables:
 
Index: gnus/lisp/gnus-spec.el
diff -u gnus/lisp/gnus-spec.el:7.16 gnus/lisp/gnus-spec.el:7.17
--- gnus/lisp/gnus-spec.el:7.16	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-spec.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-spec.el --- format spec functions for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-srvr.el
diff -u gnus/lisp/gnus-srvr.el:7.22 gnus/lisp/gnus-srvr.el:7.24
--- gnus/lisp/gnus-srvr.el:7.22	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-srvr.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-srvr.el --- virtual server support for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -958,18 +958,22 @@
 	  (progn
 	    ;; Make sure the group has been properly removed before we
 	    ;; subscribe to it.
-	    (gnus-kill-ephemeral-group group)
+ 	    (if (gnus-ephemeral-group-p group)
+		(gnus-kill-ephemeral-group group))
+	    ;; We need to discern between killed/zombie groups and
+	    ;; just unsubscribed ones.
 	    (gnus-group-change-level
-	     (list t group gnus-level-default-subscribed
-		   nil nil (if (gnus-server-equal
-				gnus-browse-current-method "native")
-			       nil
-			     (gnus-method-simplify
-			      gnus-browse-current-method)))
+	     (or (gnus-group-entry group)
+		 (list t group gnus-level-default-subscribed
+		       nil nil (if (gnus-server-equal
+				    gnus-browse-current-method "native")
+				   nil
+				 (gnus-method-simplify
+				  gnus-browse-current-method))))
 	     gnus-level-default-subscribed (gnus-group-level group)
 	     (and (car (nth 1 gnus-newsrc-alist))
 		  (gnus-group-entry (car (nth 1 gnus-newsrc-alist))))
-	     t)
+	     (null (gnus-group-entry group)))
 	    (delete-char 1)
 	    (insert ? ))
 	(gnus-group-change-level
Index: gnus/lisp/gnus-start.el
diff -u gnus/lisp/gnus-start.el:7.45 gnus/lisp/gnus-start.el:7.48
--- gnus/lisp/gnus-start.el:7.45	Fri Mar 10 10:48:31 2006
+++ gnus/lisp/gnus-start.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-start.el --- startup functions for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -15,7 +15,7 @@
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
@@ -313,8 +313,8 @@
 
 options -n no.all alt.all
 
-Gnus will the subscribe all new newsgroups in these hierarchies with
-the subscription method in this variable."
+Gnus will then subscribe all new newsgroups in these hierarchies
+with the subscription method in this variable."
   :group 'gnus-group-new
   :type '(radio (function-item gnus-subscribe-randomly)
 		(function-item gnus-subscribe-alphabetically)
@@ -352,7 +352,7 @@
 
 (defcustom gnus-options-subscribe nil
   "*All new groups matching this regexp will be subscribed unconditionally.
-Note that this variable deals only with new newsgroups.	 This variable
+Note that this variable deals only with new newsgroups.  This variable
 does not affect old newsgroups.
 
 New groups that match this regexp will not be handled by
@@ -364,7 +364,7 @@
 
 (defcustom gnus-options-not-subscribe nil
   "*All new groups matching this regexp will be ignored.
-Note that this variable deals only with new newsgroups.	 This variable
+Note that this variable deals only with new newsgroups.  This variable
 does not affect old (already subscribed) newsgroups."
   :group 'gnus-group-new
   :type '(choice regexp
@@ -626,7 +626,7 @@
 
 (defun gnus-subscribe-newsgroup (newsgroup &optional next)
   "Subscribe new NEWSGROUP.
-If NEXT is non-nil, it is inserted before NEXT.	 Otherwise it is made
+If NEXT is non-nil, it is inserted before NEXT.  Otherwise it is made
 the first newsgroup."
   (save-excursion
     (goto-char (point-min))
@@ -737,7 +737,7 @@
 (defun gnus-1 (&optional arg dont-connect slave)
   "Read network news.
 If ARG is non-nil and a positive number, Gnus will use that as the
-startup level.	If ARG is non-nil and not a positive number, Gnus will
+startup level.  If ARG is non-nil and not a positive number, Gnus will
 prompt the user for the name of an NNTP server to use."
   (interactive "P")
 
Index: gnus/lisp/gnus-sum.el
diff -u gnus/lisp/gnus-sum.el:7.142 gnus/lisp/gnus-sum.el:7.182
--- gnus/lisp/gnus-sum.el:7.142	Wed Apr 26 17:32:25 2006
+++ gnus/lisp/gnus-sum.el	Fri Apr 27 10:39:17 2007
@@ -1,7 +1,7 @@
 ;;; gnus-sum.el --- summary mode commands for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -15,7 +15,7 @@
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
@@ -114,7 +114,7 @@
 If this variable is `adopt', Gnus will make one of the \"children\"
 the parent and mark all the step-children as such.
 If this variable is `empty', the \"children\" are printed with empty
-subject fields.	 (Or rather, they will be printed with a string
+subject fields.  (Or rather, they will be printed with a string
 given by the `gnus-summary-same-subject' variable.)"
   :group 'gnus-thread
   :type '(choice (const :tag "off" nil)
@@ -308,12 +308,20 @@
   :type 'boolean)
 
 (defcustom gnus-auto-select-first t
-  "*If non-nil, select the article under point.
-Which article this is is controlled by the `gnus-auto-select-subject'
-variable.
+  "If non-nil, select an article on group entry.
+An article is selected automatically when entering a group
+e.g. with \\<gnus-group-mode-map>\\[gnus-group-read-group], or via `gnus-summary-next-page' or
+`gnus-summary-catchup-and-goto-next-group'.
+
+Which article is selected is controlled by the variable
+`gnus-auto-select-subject'.
 
 If you want to prevent automatic selection of articles in some
 newsgroups, set the variable to nil in `gnus-select-group-hook'."
+  ;; Commands include...
+  ;; \\<gnus-group-mode-map>\\[gnus-group-read-group]
+  ;; \\<gnus-summary-mode-map>\\[gnus-summary-next-page]
+  ;; \\<gnus-summary-mode-map>\\[gnus-summary-catchup-and-goto-next-group]
   :group 'gnus-group-select
   :type '(choice (const :tag "none" nil)
 		 (sexp :menu-tag "first" t)))
@@ -1052,7 +1060,11 @@
   :group 'gnus-summary)
 
 (defvar gnus-decode-encoded-word-function 'mail-decode-encoded-word-string
-  "Variable that says which function should be used to decode a string with encoded words.")
+  "Function used to decode a string with encoded words.")
+
+(defvar gnus-decode-encoded-address-function
+  'mail-decode-encoded-address-string
+  "Function used to decode addresses with encoded words.")
 
 (defcustom gnus-extra-headers '(To Newsgroups)
   "*Extra headers to parse."
@@ -1061,13 +1073,18 @@
   :type '(repeat symbol))
 
 (defcustom gnus-ignored-from-addresses
-  (and user-mail-address  
+  (and user-mail-address
        (not (string= user-mail-address ""))
        (regexp-quote user-mail-address))
-  "*Regexp of From headers that may be suppressed in favor of To headers."
+  "*From headers that may be suppressed in favor of To headers.
+This can be a regexp or a list of regexps."
   :version "21.1"
   :group 'gnus-summary
-  :type 'regexp)
+  :type '(choice regexp
+		 (repeat :tag "Regexp List" regexp)))
+
+(defsubst gnus-ignored-from-addresses ()
+  (gmm-regexp-concat gnus-ignored-from-addresses))
 
 (defcustom gnus-summary-to-prefix "-> "
   "*String prefixed to the To field in the summary line when
@@ -1322,6 +1339,7 @@
 (defvar gnus-newsgroup-last-mail nil)
 (defvar gnus-newsgroup-last-folder nil)
 (defvar gnus-newsgroup-last-file nil)
+(defvar gnus-newsgroup-last-directory nil)
 (defvar gnus-newsgroup-auto-expire nil)
 (defvar gnus-newsgroup-active nil)
 
@@ -1437,6 +1455,7 @@
     gnus-newsgroup-begin gnus-newsgroup-end
     gnus-newsgroup-last-rmail gnus-newsgroup-last-mail
     gnus-newsgroup-last-folder gnus-newsgroup-last-file
+    gnus-newsgroup-last-directory
     gnus-newsgroup-auto-expire gnus-newsgroup-unreads
     gnus-newsgroup-unselected gnus-newsgroup-marked
     gnus-newsgroup-spam-marked
@@ -1846,6 +1865,7 @@
   "/" gnus-summary-limit-to-subject
   "n" gnus-summary-limit-to-articles
   "b" gnus-summary-limit-to-bodies
+  "h" gnus-summary-limit-to-headers
   "w" gnus-summary-pop-limit
   "s" gnus-summary-limit-to-subject
   "a" gnus-summary-limit-to-author
@@ -1866,6 +1886,7 @@
   "C" gnus-summary-limit-mark-excluded-as-read
   "o" gnus-summary-insert-old-articles
   "N" gnus-summary-insert-new-articles
+  "S" gnus-summary-limit-to-singletons
   "r" gnus-summary-limit-to-replied
   "R" gnus-summary-limit-to-recipient)
 
@@ -1908,7 +1929,8 @@
 (gnus-define-keys (gnus-summary-buffer-map "Y" gnus-summary-mode-map)
   "g" gnus-summary-prepare
   "c" gnus-summary-insert-cached-articles
-  "d" gnus-summary-insert-dormant-articles)
+  "d" gnus-summary-insert-dormant-articles
+  "t" gnus-summary-insert-ticked-articles)
 
 (gnus-define-keys (gnus-summary-exit-map "Z" gnus-summary-mode-map)
   "c" gnus-summary-catchup-and-exit
@@ -1954,6 +1976,7 @@
   "e" gnus-article-emphasize
   "w" gnus-article-fill-cited-article
   "Q" gnus-article-fill-long-lines
+  "L" gnus-article-toggle-truncate-lines
   "C" gnus-article-capitalize-sentences
   "c" gnus-article-remove-cr
   "q" gnus-article-de-quoted-unreadable
@@ -2073,6 +2096,7 @@
   "r" gnus-summary-save-article-rmail
   "f" gnus-summary-save-article-file
   "b" gnus-summary-save-article-body-file
+  "B" gnus-summary-write-article-body-file
   "h" gnus-summary-save-article-folder
   "v" gnus-summary-save-article-vm
   "p" gnus-summary-pipe-output
@@ -2092,6 +2116,7 @@
   "c" gnus-article-copy-part
   "C" gnus-article-view-part-as-charset
   "e" gnus-article-view-part-externally
+  "H" gnus-article-browse-html-article
   "E" gnus-article-encrypt-body
   "i" gnus-article-inline-part
   "|" gnus-article-pipe-part)
@@ -2241,6 +2266,7 @@
 	       ,@(if (featurep 'xemacs) nil
 		   '(:help "Encrypt the message body on disk"))]
 	       ["View part externally" gnus-article-view-part-externally t]
+	       ["View HTML parts in browser" gnus-article-browse-html-article t]
 	       ["View part with charset..." gnus-article-view-part-as-charset t]
 	       ["Copy part" gnus-article-copy-part t]
 	       ["Save part..." gnus-article-save-part t]
@@ -2295,6 +2321,7 @@
 	      ["Emphasis" gnus-article-emphasize t]
 	      ["Word wrap" gnus-article-fill-cited-article t]
 	      ["Fill long lines" gnus-article-fill-long-lines t]
+	      ["Toggle truncate long lines" gnus-article-toggle-truncate-lines t]
 	      ["Capitalize sentences" gnus-article-capitalize-sentences t]
 	      ["Remove CR" gnus-article-remove-cr t]
 	      ["Quoted-Printable" gnus-article-de-quoted-unreadable t]
@@ -2521,9 +2548,10 @@
 	 ["Display Predicate" gnus-summary-limit-to-display-predicate t]
 	 ["Unread" gnus-summary-limit-to-unread t]
 	 ["Unseen" gnus-summary-limit-to-unseen t]
+	 ["Singletons" gnus-summary-limit-to-singletons t]
 	 ["Replied" gnus-summary-limit-to-replied t]
 	 ["Non-dormant" gnus-summary-limit-exclude-dormant t]
-	 ["Next articles" gnus-summary-limit-to-articles t]
+	 ["Next or process marked articles" gnus-summary-limit-to-articles t]
 	 ["Pop limit" gnus-summary-pop-limit t]
 	 ["Show dormant" gnus-summary-limit-include-dormant t]
 	 ["Hide childless dormant"
@@ -2604,6 +2632,7 @@
 	 ["Regenerate" gnus-summary-prepare t]
 	 ["Insert cached articles" gnus-summary-insert-cached-articles t]
 	 ["Insert dormant articles" gnus-summary-insert-dormant-articles t]
+	 ["Insert ticked articles" gnus-summary-insert-ticked-articles t]
 	 ["Toggle threading" gnus-summary-toggle-threads t])
 	["See old articles" gnus-summary-insert-old-articles t]
 	["See new articles" gnus-summary-insert-new-articles t]
@@ -3352,10 +3381,11 @@
       (gnus-summary-mode group)
       (when gnus-carpal
 	(gnus-carpal-setup-buffer 'summary))
-      (unless gnus-single-article-buffer
-	(make-local-variable 'gnus-article-buffer)
-	(make-local-variable 'gnus-article-current)
-	(make-local-variable 'gnus-original-article-buffer))
+      (when (gnus-group-quit-config group)
+	(set (make-local-variable 'gnus-single-article-buffer) nil))
+      (make-local-variable 'gnus-article-buffer)
+      (make-local-variable 'gnus-article-current)
+      (make-local-variable 'gnus-original-article-buffer)
       (setq gnus-newsgroup-name group)
       ;; Set any local variables in the group parameters.
       (gnus-summary-set-local-parameters gnus-newsgroup-name)
@@ -3430,16 +3460,17 @@
       t
     (not (cdr (gnus-data-find-list article)))))
 
-(defun gnus-make-thread-indent-array ()
-  (let ((n 200))
-    (unless (and gnus-thread-indent-array
-		 (= gnus-thread-indent-level gnus-thread-indent-array-level))
-      (setq gnus-thread-indent-array (make-vector 201 "")
-	    gnus-thread-indent-array-level gnus-thread-indent-level)
-      (while (>= n 0)
-	(aset gnus-thread-indent-array n
-	      (make-string (* n gnus-thread-indent-level) ? ))
-	(setq n (1- n))))))
+(defun gnus-make-thread-indent-array (&optional n)
+  (when (or n
+	    (progn (setq n 200) nil)
+	    (null gnus-thread-indent-array)
+	    (/= gnus-thread-indent-level gnus-thread-indent-array-level))
+    (setq gnus-thread-indent-array (make-vector (1+ n) "")
+	  gnus-thread-indent-array-level gnus-thread-indent-level)
+    (while (>= n 0)
+      (aset gnus-thread-indent-array n
+	    (make-string (* n gnus-thread-indent-level) ? ))
+      (setq n (1- n)))))
 
 (defun gnus-update-summary-mark-positions ()
   "Compute where the summary marks are to go."
@@ -3511,14 +3542,15 @@
 
 (defun gnus-summary-from-or-to-or-newsgroups (header gnus-tmp-from)
   (let ((mail-parse-charset gnus-newsgroup-charset)
+	(ignored-from-addresses (gnus-ignored-from-addresses))
 	; Is it really necessary to do this next part for each summary line?
 	; Luckily, doesn't seem to slow things down much.
 	(mail-parse-ignored-charsets
 	 (with-current-buffer gnus-summary-buffer
 	   gnus-newsgroup-ignored-charsets)))
     (or
-     (and gnus-ignored-from-addresses
-	  (string-match gnus-ignored-from-addresses gnus-tmp-from)
+     (and ignored-from-addresses
+	  (string-match ignored-from-addresses gnus-tmp-from)
 	  (let ((extra-headers (mail-header-extra header))
 		to
 		newsgroups)
@@ -3527,7 +3559,7 @@
 	      (concat gnus-summary-to-prefix
 		      (inline
 			(gnus-summary-extract-address-component
-			 (funcall gnus-decode-encoded-word-function to)))))
+			 (funcall gnus-decode-encoded-address-function to)))))
 	     ((setq newsgroups
 		    (or
 		     (cdr (assq 'Newsgroups extra-headers))
@@ -3545,6 +3577,9 @@
 				 gnus-tmp-expirable gnus-tmp-subject-or-nil
 				 &optional gnus-tmp-dummy gnus-tmp-score
 				 gnus-tmp-process)
+  (if (>= gnus-tmp-level (length gnus-thread-indent-array))
+      (gnus-make-thread-indent-array (max (* 2 (length gnus-thread-indent-array))
+					  gnus-tmp-level)))
   (let* ((gnus-tmp-indentation (aref gnus-thread-indent-array gnus-tmp-level))
 	 (gnus-tmp-lines (mail-header-lines gnus-tmp-header))
 	 (gnus-tmp-score (or gnus-tmp-score gnus-summary-default-score 0))
@@ -4065,7 +4100,7 @@
     infloop))
 
 (defun gnus-make-threads ()
-  "Go through the dependency hashtb and find the roots.	 Return all threads."
+  "Go through the dependency hashtb and find the roots.  Return all threads."
   (let (threads)
     (while (catch 'infloop
 	     (mapatoms
@@ -4275,7 +4310,7 @@
 		   (error x))
 		 (condition-case ()	; from
 		     (gnus-remove-odd-characters
-		      (funcall gnus-decode-encoded-word-function
+		      (funcall gnus-decode-encoded-address-function
 			       (setq x (nnheader-nov-field))))
 		   (error x))
 		 (nnheader-nov-field)	; date
@@ -4569,7 +4604,7 @@
     ;; First go up in this thread until we find the root.
     (setq last-id (gnus-root-id id)
 	  headers (message-flatten-list (gnus-id-to-thread last-id)))
-    ;; We have now found the real root of this thread.	It might have
+    ;; We have now found the real root of this thread.  It might have
     ;; been gathered into some loose thread, so we have to search
     ;; through the threads to find the thread we wanted.
     (let ((threads gnus-newsgroup-threads)
@@ -4637,23 +4672,46 @@
 	      (1+ (point-at-eol))
 	    (gnus-delete-line)))))))
 
-(defun gnus-sort-threads-1 (threads func)
+(defun gnus-sort-threads-recursive (threads func)
   (sort (mapcar (lambda (thread)
 		  (cons (car thread)
 			(and (cdr thread)
-			     (gnus-sort-threads-1 (cdr thread) func))))
+			     (gnus-sort-threads-recursive (cdr thread) func))))
 		threads) func))
 
+(defun gnus-sort-threads-loop (threads func)
+  (let* ((superthread (cons nil threads))
+  	 (stack (list (cons superthread threads)))
+  	 remaining-threads thread)
+    (while stack
+      (setq remaining-threads (cdr (car stack)))
+      (if remaining-threads
+  	  (progn (setq thread (car remaining-threads))
+  		 (setcdr (car stack) (cdr remaining-threads))
+  		 (if (cdr thread)
+  		     (push (cons thread (cdr thread)) stack)))
+  	(setq thread (caar stack))
+  	(setcdr thread (sort (cdr thread) func))
+  	(pop stack)))
+    (cdr superthread)))
+
 (defun gnus-sort-threads (threads)
   "Sort THREADS."
   (if (not gnus-thread-sort-functions)
       threads
     (gnus-message 8 "Sorting threads...")
-    (let ((max-lisp-eval-depth 5000))
-      (prog1 (gnus-sort-threads-1
-	 threads
-	 (gnus-make-sort-function gnus-thread-sort-functions))
-        (gnus-message 8 "Sorting threads...done")))))
+    (prog1
+	(condition-case nil
+	    (let ((max-lisp-eval-depth (max max-lisp-eval-depth 5000)))
+	      (gnus-sort-threads-recursive
+	       threads (gnus-make-sort-function gnus-thread-sort-functions)))
+	  ;; Even after binding max-lisp-eval-depth, the recursive
+	  ;; sorter might fail for very long threads.  In that case,
+	  ;; try using a (less well-tested) non-recursive sorter.
+	  (error (gnus-sort-threads-loop
+		  threads (gnus-make-sort-function
+			   gnus-thread-sort-functions))))
+      (gnus-message 8 "Sorting threads...done"))))
 
 (defun gnus-sort-articles (articles)
   "Sort ARTICLES."
@@ -5101,6 +5159,10 @@
 		      gnus-tmp-closing-bracket ?\>)
 	      (setq gnus-tmp-opening-bracket ?\[
 		    gnus-tmp-closing-bracket ?\]))
+	    (if (>= gnus-tmp-level (length gnus-thread-indent-array))
+		(gnus-make-thread-indent-array
+		 (max (* 2 (length gnus-thread-indent-array))
+		      gnus-tmp-level)))
 	    (setq
 	     gnus-tmp-indentation
 	     (aref gnus-thread-indent-array gnus-tmp-level)
@@ -5316,13 +5378,13 @@
 	  (when (equal major-mode 'gnus-summary-mode)
 	    (gnus-kill-buffer (current-buffer)))
 	  (error "Couldn't activate group %s: %s"
-		 group (gnus-status-message group))))
+		 (gnus-group-decoded-name group) (gnus-status-message group))))
 
     (unless (gnus-request-group group t)
       (when (equal major-mode 'gnus-summary-mode)
 	(gnus-kill-buffer (current-buffer)))
       (error "Couldn't request group %s: %s"
-	     group (gnus-status-message group)))
+	     (gnus-group-decoded-name group) (gnus-status-message group)))
 
     (when gnus-agent
       (gnus-agent-possibly-alter-active group (gnus-active group) info)
@@ -5445,7 +5507,8 @@
       (setq gnus-newsgroup-auto-expire
 	    (gnus-group-auto-expirable-p group))
       ;; Set up the article buffer now, if necessary.
-      (unless gnus-single-article-buffer
+      (unless (and gnus-single-article-buffer
+		   (equal gnus-article-buffer "*Article*"))
 	(gnus-article-setup-buffer))
       ;; First and last article in this newsgroup.
       (when gnus-newsgroup-headers
@@ -5819,8 +5882,9 @@
 	(let* ((mformat (symbol-value
 			 (intern
 			  (format "gnus-%s-mode-line-format-spec" where))))
-	       (gnus-tmp-group-name (gnus-group-decoded-name
-				     gnus-newsgroup-name))
+	       (gnus-tmp-group-name (gnus-mode-string-quote
+				     (gnus-group-decoded-name
+				      gnus-newsgroup-name)))
 	       (gnus-tmp-article-number (or gnus-current-article 0))
 	       (gnus-tmp-unread gnus-newsgroup-unreads)
 	       (gnus-tmp-unread-and-unticked (length gnus-newsgroup-unreads))
@@ -6032,7 +6096,7 @@
       (let ((case-fold-search t)
 	    in-reply-to header p lines chars)
 	(goto-char (point-min))
-	;; Search to the beginning of the next header.	Error messages
+	;; Search to the beginning of the next header.  Error messages
 	;; do not begin with 2 or 3.
 	(while (re-search-forward "^[23][0-9]+ " nil t)
 	  (setq id nil
@@ -6040,7 +6104,7 @@
 	  ;; This implementation of this function, with nine
 	  ;; search-forwards instead of the one re-search-forward and
 	  ;; a case (which basically was the old function) is actually
-	  ;; about twice as fast, even though it looks messier.	 You
+	  ;; about twice as fast, even though it looks messier.  You
 	  ;; can't have everything, I guess.  Speed and elegance
 	  ;; doesn't always go hand in hand.
 	  (setq
@@ -6066,7 +6130,7 @@
 	    (progn
 	      (goto-char p)
 	      (if (search-forward "\nfrom:" nil t)
-		  (funcall gnus-decode-encoded-word-function
+		  (funcall gnus-decode-encoded-address-function
 			   (nnheader-header-value))
 		"(nobody)"))
 	    ;; Date.
@@ -6553,7 +6617,7 @@
 	(let ((top-pos (save-excursion (forward-line (- top)) (point))))
 	  (if (> bottom top-pos)
 	      ;; Keep the second line from the top visible
-	      (set-window-start window top-pos t)
+	      (set-window-start window top-pos)
 	    ;; Try to keep the bottom line visible; if it's partially
 	    ;; obscured, either scroll one more line to make it fully
 	    ;; visible, or revert to using TOP-POS.
@@ -6843,6 +6907,7 @@
     (gnus-run-hooks 'gnus-summary-prepare-exit-hook)
     ;; If we have several article buffers, we kill them at exit.
     (unless gnus-single-article-buffer
+      (gnus-kill-buffer gnus-article-buffer)
       (gnus-kill-buffer gnus-original-article-buffer)
       (setq gnus-article-current nil))
     (when gnus-use-cache
@@ -6981,19 +7046,11 @@
 	     (gnus-set-global-variables))))
     (if (or (eq (cdr quit-config) 'article)
 	    (eq (cdr quit-config) 'pick))
-	(progn
-	  ;; The current article may be from the ephemeral group
-	  ;; thus it is best that we reload this article
-	  ;;
-	  ;; If we're exiting from a large digest, this can be
-	  ;; extremely slow.  So, it's better not to reload it. -- jh.
-	  ;;(gnus-summary-show-article)
-	  (if (and (boundp 'gnus-pick-mode) (symbol-value 'gnus-pick-mode))
-	      (gnus-configure-windows 'pick 'force)
-	    (gnus-configure-windows (cdr quit-config) 'force)))
+	(if (and (boundp 'gnus-pick-mode) (symbol-value 'gnus-pick-mode))
+	    (gnus-configure-windows 'pick 'force)
+	  (gnus-configure-windows (cdr quit-config) 'force))
       (gnus-configure-windows (cdr quit-config) 'force))
     (when (eq major-mode 'gnus-summary-mode)
-      (gnus-summary-next-subject 1 nil t)
       (gnus-summary-recenter)
       (gnus-summary-position-point))))
 
@@ -7393,6 +7450,9 @@
 If SUBJECT, only articles with SUBJECT are selected.
 If BACKWARD, the previous article is selected instead of the next."
   (interactive "P")
+  ;; Make sure we are in the summary buffer.
+  (unless (eq major-mode 'gnus-summary-mode)
+    (set-buffer gnus-summary-buffer))
   (cond
    ;; Is there such an article?
    ((and (gnus-summary-search-forward unread subject backward)
@@ -7901,6 +7961,27 @@
 	     (gnus-summary-limit articles))
       (gnus-summary-position-point))))
 
+(defun gnus-summary-limit-strange-charsets-predicate (header)
+  (let ((string (concat (mail-header-subject header)
+			(mail-header-from header)))
+	charset found)
+    (dotimes (i (1- (length string)))
+      (setq charset (format "%s" (char-charset (aref string (1+ i)))))
+      (when (string-match "unicode\\|big\\|japanese" charset)
+	(setq found t)))
+    found))
+
+(defun gnus-summary-limit-to-predicate (predicate)
+  "Limit to articles where PREDICATE returns non-nil.
+PREDICATE will be called with the header structures of the
+articles."
+  (let ((articles nil)
+	(case-fold-search t))
+    (dolist (header gnus-newsgroup-headers)
+      (when (funcall predicate header)
+	(push (mail-header-number header) articles)))
+    (gnus-summary-limit (nreverse articles))))
+
 (defun gnus-summary-limit-to-age (age &optional younger-p)
   "Limit the summary buffer to articles that are older than (or equal) AGE days.
 If YOUNGER-P (the prefix) is non-nil, limit the summary buffer to
@@ -8006,7 +8087,13 @@
 	   gnus-duplicate-mark gnus-souped-mark)
      'reverse)))
 
-(defun gnus-summary-limit-to-bodies (match &optional reverse)
+(defun gnus-summary-limit-to-headers (match &optional reverse)
+  "Limit the summary buffer to articles that have headers that match MATCH.
+If REVERSE (the prefix), limit to articles that don't match."
+  (interactive "sMatch headers (regexp): \nP")
+  (gnus-summary-limit-to-bodies match reverse t))
+
+(defun gnus-summary-limit-to-bodies (match &optional reverse headersp)
   "Limit the summary buffer to articles that have bodies that match MATCH.
 If REVERSE (the prefix), limit to articles that don't match."
   (interactive "sMatch body (regexp): \nP")
@@ -8027,7 +8114,9 @@
 	(set-buffer gnus-article-buffer)
 	(article-goto-body)
 	(let* ((case-fold-search t)
-	       (found (re-search-forward match nil t)))
+	       (found (if headersp
+			  (re-search-backward match nil t)
+			(re-search-forward match nil t))))
 	  (when (or (and found
 			 (not reverse))
 		    (and (not found)
@@ -8038,6 +8127,30 @@
       (gnus-summary-limit articles)))
   (gnus-summary-position-point))
 
+(defun gnus-summary-limit-to-singletons (&optional threadsp)
+  "Limit the summary buffer to articles that aren't part on any thread.
+If THREADSP (the prefix), limit to articles that are in threads."
+  (interactive "P")
+  (let ((articles nil)
+	thread-articles
+	threads)
+    (dolist (thread gnus-newsgroup-threads)
+      (if (stringp (car thread))
+	  (dolist (thread (cdr thread))
+	    (push thread threads))
+	(push thread threads)))
+    (dolist (thread threads)
+      (setq thread-articles (gnus-articles-in-thread thread))
+      (when (or (and threadsp
+		     (> (length thread-articles) 1))
+		(and (not threadsp)
+		     (= (length thread-articles) 1)))
+	(setq articles (nconc thread-articles articles))))
+    (if (not articles)
+	(message "No messages matched")
+      (gnus-summary-limit articles))
+    (gnus-summary-position-point)))
+
 (defun gnus-summary-limit-to-replied (&optional unreplied)
   "Limit the summary buffer to replied articles.
 If UNREPLIED (the prefix), limit to unreplied articles."
@@ -8131,9 +8244,17 @@
   (interactive)
   (let ((gnus-verbose (max 6 gnus-verbose)))
     (if (not gnus-newsgroup-dormant)
-	(gnus-message 3 "No cached articles for this group")
+	(gnus-message 3 "No dormant articles for this group")
       (gnus-summary-goto-subjects gnus-newsgroup-dormant))))
 
+(defun gnus-summary-insert-ticked-articles ()
+  "Insert ticked articles for this group into the current buffer."
+  (interactive)
+  (let ((gnus-verbose (max 6 gnus-verbose)))
+    (if (not gnus-newsgroup-marked)
+	(gnus-message 3 "No ticked articles for this group")
+      (gnus-summary-goto-subjects gnus-newsgroup-marked))))
+
 (defun gnus-summary-limit-include-dormant ()
   "Display all the hidden articles that are marked as dormant.
 Note that this command only works on a subset of the articles currently
@@ -8340,7 +8461,7 @@
   ;; will really go down to a leaf article first, before slowly
   ;; working its way up towards the root.
   (when thread
-    (let* ((max-lisp-eval-depth 5000)
+    (let* ((max-lisp-eval-depth (max 5000 max-lisp-eval-depth))
 	   (children
 	   (if (cdr thread)
 	       (apply '+ (mapcar 'gnus-summary-limit-children
@@ -8627,10 +8748,11 @@
 	;; the parent article.
 	(when (setq to-address (or (gnus-fetch-field "reply-to")
 				   (gnus-fetch-field "from")))
-	  (setq params (append
-			(list (cons 'to-address
-				    (funcall gnus-decode-encoded-word-function
-					     to-address))))))
+	  (setq params
+		(append
+		 (list (cons 'to-address
+			     (funcall gnus-decode-encoded-address-function
+				      to-address))))))
 	(setq dig (nnheader-set-temp-buffer " *gnus digest buffer*"))
 	(insert-buffer-substring gnus-original-article-buffer)
 	;; Remove lines that may lead nndoc to misinterpret the
@@ -9162,8 +9284,8 @@
 
 (defun gnus-summary-caesar-message (&optional arg)
   "Caesar rotate the current article by 13.
-The numerical prefix specifies how many places to rotate each letter
-forward."
+With a non-numerical prefix, also rotate headers.  A numerical
+prefix specifies how many places to rotate each letter forward."
   (interactive "P")
   (gnus-summary-select-article)
   (let ((mail-header-separator ""))
@@ -9172,7 +9294,9 @@
 	(widen)
 	(let ((start (window-start))
 	      buffer-read-only)
-	  (message-caesar-buffer-body arg)
+	  (if (equal arg '(4))
+	      (message-caesar-buffer-body nil t)
+	    (message-caesar-buffer-body arg))
 	  (set-window-start (get-buffer-window (current-buffer)) start)))))
   ;; Create buttons and stuff...
   (gnus-treat-article nil))
@@ -9329,16 +9453,16 @@
 		(to-method (gnus-find-method-for-group
 			    to-newsgroup))
 		(move-is-internal (gnus-method-equal from-method to-method)))
-	 (gnus-request-move-article
-	  article			; Article to move
-	  gnus-newsgroup-name		; From newsgroup
-	  (nth 1 (gnus-find-method-for-group
-		  gnus-newsgroup-name)) ; Server
-	  (list 'gnus-request-accept-article
-		to-newsgroup (list 'quote select-method)
-		(not articles) t)	; Accept form
-	  (not articles)		; Only save nov last time
-	  move-is-internal)))		; is this move internal?
+	   (gnus-request-move-article
+	    article			; Article to move
+	    gnus-newsgroup-name		; From newsgroup
+	    (nth 1 (gnus-find-method-for-group
+		    gnus-newsgroup-name)) ; Server
+	    (list 'gnus-request-accept-article
+		  to-newsgroup (list 'quote select-method)
+		  (not articles) t)	; Accept form
+	    (not articles)		; Only save nov last time
+	    move-is-internal)))		; is this move internal?
 	;; Copy the article.
 	((eq action 'copy)
 	 (save-excursion
@@ -9371,7 +9495,7 @@
 	     (gnus-request-article-this-buffer article gnus-newsgroup-name)
 	     (when (consp (setq art-group
 				(gnus-request-accept-article
-				 to-newsgroup select-method (not articles))))
+				 to-newsgroup select-method (not articles) t)))
 	       (setq new-xref (concat new-xref " " (car art-group)
 				      ":"
 				      (number-to-string (cdr art-group))))
@@ -9379,7 +9503,7 @@
 	       ;; it and replace the new article.
 	       (nnheader-replace-header "Xref" new-xref)
 	       (gnus-request-replace-article
-		(cdr art-group) to-newsgroup (current-buffer))
+		(cdr art-group) to-newsgroup (current-buffer) t)
 	       art-group))))))
       (cond
        ((not art-group)
@@ -9475,7 +9599,7 @@
 	      (gnus-request-article-this-buffer article gnus-newsgroup-name)
 	      (nnheader-replace-header "Xref" new-xref)
 	      (gnus-request-replace-article
-	       article gnus-newsgroup-name (current-buffer))))
+	       article gnus-newsgroup-name (current-buffer) t)))
 
 	  ;; run the move/copy/crosspost/respool hook
 	  (run-hook-with-args 'gnus-summary-article-move-hook
@@ -9488,7 +9612,7 @@
 
 	;;;!!!Why is this necessary?
 	(set-buffer gnus-summary-buffer)
-	
+
 	(gnus-summary-goto-subject article)
 	(when (eq action 'move)
 	  (gnus-summary-mark-article article gnus-canceled-mark))))
@@ -9500,7 +9624,7 @@
       (set-buffer gnus-group-buffer)
       (let ((gnus-group-marked to-groups))
 	(gnus-group-get-new-news-this-group nil t)))
-    
+
     (gnus-kill-buffer copy-buf)
     (gnus-summary-position-point)
     (gnus-set-mode-line 'summary)))
@@ -9733,7 +9857,7 @@
 ;; Suggested by Jack Vinson <[email protected]>.
 (defun gnus-summary-delete-article (&optional n)
   "Delete the N next (mail) articles.
-This command actually deletes articles.	 This is not a marking
+This command actually deletes articles.  This is not a marking
 command.  The article will disappear forever from your life, never to
 return.
 
@@ -10688,8 +10812,8 @@
 			gnus-newsgroup-dormant nil))
 		(setq gnus-newsgroup-unreads
 		      (gnus-sorted-nunion
-                       (gnus-intersection gnus-newsgroup-unreads
-                                          gnus-newsgroup-downloadable)
+                       (gnus-sorted-intersection gnus-newsgroup-unreads
+						 gnus-newsgroup-downloadable)
                        gnus-newsgroup-unfetched)))
 	    ;; We actually mark all articles as canceled, which we
 	    ;; have to do when using auto-expiry or adaptive scoring.
@@ -10882,8 +11006,8 @@
 
 (defun gnus-summary-reparent-children (parent children)
   "Make PARENT the parent of CHILDREN.
-When called interactively, PARENT is is current article and
-CHILDREN are the process-marked articles."
+When called interactively, PARENT is the current article and CHILDREN
+are the process-marked articles."
   (interactive
    (list (gnus-summary-article-number)
 	 (gnus-summary-work-articles nil)))
@@ -11239,12 +11363,26 @@
 If N is a negative number, save the N previous articles.
 If N is nil and any articles have been marked with the process mark,
 save those articles instead.
-The variable `gnus-default-article-saver' specifies the saver function."
+The variable `gnus-default-article-saver' specifies the saver function.
+
+If the optional second argument NOT-SAVED is non-nil, articles saved
+will not be marked as saved."
   (interactive "P")
+  (require 'gnus-art)
   (let* ((articles (gnus-summary-work-articles n))
 	 (save-buffer (save-excursion
 			(nnheader-set-temp-buffer " *Gnus Save*")))
 	 (num (length articles))
+	 ;; Whether to save decoded articles or raw articles.
+	 (decode (when gnus-article-save-coding-system
+		   (get gnus-default-article-saver :decode)))
+	 ;; When saving many articles in a single file, use the other
+	 ;; function to save articles other than the first one.
+	 (saver2 (get gnus-default-article-saver :function))
+	 (gnus-prompt-before-saving (if saver2
+					t
+				      gnus-prompt-before-saving))
+	 (gnus-default-article-saver gnus-default-article-saver)
 	 header file)
     (dolist (article articles)
       (setq header (gnus-summary-article-header article))
@@ -11255,17 +11393,25 @@
 	    (gnus-message 1 "Article %d is unsaveable" article))
 	;; This is a real article.
 	(save-window-excursion
-	  (let ((gnus-display-mime-function nil)
-		(gnus-article-prepare-hook nil))
-	    (gnus-summary-select-article t nil nil article)))
+	  (let ((gnus-display-mime-function (when decode
+					      gnus-display-mime-function))
+		(gnus-article-prepare-hook (when decode
+					     gnus-article-prepare-hook)))
+	    (gnus-summary-select-article t nil nil article)
+	    (gnus-summary-goto-subject article)))
 	(save-excursion
 	  (set-buffer save-buffer)
 	  (erase-buffer)
-	  (insert-buffer-substring gnus-original-article-buffer))
+	  (insert-buffer-substring (if decode
+				       gnus-article-buffer
+				     gnus-original-article-buffer)))
 	(setq file (gnus-article-save save-buffer file num))
 	(gnus-summary-remove-process-mark article)
 	(unless not-saved
-	  (gnus-summary-set-saved-mark article))))
+	  (gnus-summary-set-saved-mark article)))
+      (when saver2
+	(setq gnus-default-article-saver saver2
+	      saver2 nil)))
     (gnus-kill-buffer save-buffer)
     (gnus-summary-position-point)
     (gnus-set-mode-line 'summary)
@@ -11289,7 +11435,7 @@
       (gnus-configure-windows 'pipe))))
 
 (defun gnus-summary-save-article-mail (&optional arg)
-  "Append the current article to an mail file.
+  "Append the current article to a Unix mail box file.
 If N is a positive number, save the N next articles.
 If N is a negative number, save the N previous articles.
 If N is nil and any articles have been marked with the process mark,
@@ -11341,6 +11487,17 @@
   (interactive "P")
   (require 'gnus-art)
   (let ((gnus-default-article-saver 'gnus-summary-save-body-in-file))
+    (gnus-summary-save-article arg)))
+
+(defun gnus-summary-write-article-body-file (&optional arg)
+  "Write the current article body to a file, deleting the previous file.
+If N is a positive number, save the N next articles.
+If N is a negative number, save the N previous articles.
+If N is nil and any articles have been marked with the process mark,
+save those articles instead."
+  (interactive "P")
+  (require 'gnus-art)
+  (let ((gnus-default-article-saver 'gnus-summary-write-body-to-file))
     (gnus-summary-save-article arg)))
 
 (defun gnus-summary-muttprint (&optional arg)
Index: gnus/lisp/gnus-topic.el
diff -u gnus/lisp/gnus-topic.el:7.16 gnus/lisp/gnus-topic.el:7.19
--- gnus/lisp/gnus-topic.el:7.16	Sun Apr 16 18:41:49 2006
+++ gnus/lisp/gnus-topic.el	Mon Mar  5 12:03:16 2007
@@ -1,7 +1,7 @@
 ;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Ilja Weis <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
@@ -378,38 +378,50 @@
      (format "(gnus-topic-set-parameters %S '%S)" topic parameters))))
 
 (defun gnus-group-topic-parameters (group)
-  "Compute the group parameters for GROUP taking into account inheritance from topics."
+  "Compute the group parameters for GROUP in topic mode.
+Possibly inherit parameters from topics above GROUP."
   (let ((params-list (copy-sequence (gnus-group-get-parameter group))))
     (save-excursion
-      (nconc params-list
-	     (gnus-topic-hierarchical-parameters
-	      ;; First we try to go to the group within the group
-	      ;; buffer and find the topic for the group that way.
-	      ;; This hopefully copes well with groups that are in
-	      ;; more than one topic.  Failing that (i.e. when the
-	      ;; group isn't visible in the group buffer) we find a
-	      ;; topic for the group via gnus-group-topic.
-	      (or (and (gnus-group-goto-group group)
-		       (gnus-current-topic))
-		  (gnus-group-topic group)))))))
-
-(defun gnus-topic-hierarchical-parameters (topic)
-  "Return a topic list computed for TOPIC."
-  (let ((params-list (nreverse (mapcar 'gnus-topic-parameters
-				       (gnus-current-topics topic))))
+      (gnus-topic-hierarchical-parameters
+       ;; First we try to go to the group within the group buffer and find the
+       ;; topic for the group that way. This hopefully copes well with groups
+       ;; that are in more than one topic. Failing that (i.e. when the group
+       ;; isn't visible in the group buffer) we find a topic for the group via
+       ;; gnus-group-topic.
+       (or (and (gnus-group-goto-group group)
+		(gnus-current-topic))
+	   (gnus-group-topic group))
+       params-list))))
+
+(defun gnus-topic-hierarchical-parameters (topic &optional group-params-list)
+  "Compute the topic parameters for TOPIC.
+Possibly inherit parameters from topics above TOPIC.
+If optional argument GROUP-PARAMS-LIST is non-nil, use it as the basis for
+inheritance."
+  (let ((params-list
+	 ;; We probably have lots of nil elements here, so we remove them.
+	 ;; Probably faster than doing this "properly".
+	 (delq nil (cons group-params-list
+			 (mapcar 'gnus-topic-parameters
+				 (gnus-current-topics topic)))))
 	param out params)
-    ;; We probably have lots of nil elements here, so
-    ;; we remove them.  Probably faster than doing this "properly".
-    (setq params-list (delq nil params-list))
     ;; Now we have all the parameters, so we go through them
     ;; and do inheritance in the obvious way.
-    (while (setq params (pop params-list))
-      (while (setq param (pop params))
-	(when (atom param)
-	  (setq param (cons param t)))
-	;; Override any old versions of this param.
-	(gnus-pull (car param) out)
-	(push param out)))
+    (let (posting-style)
+      (while (setq params (pop params-list))
+	(while (setq param (pop params))
+	  (when (atom param)
+	    (setq param (cons param t)))
+	  (cond ((eq (car param) 'posting-style)
+		 (let ((param (cdr param))
+		       elt)
+		   (while (setq elt (pop param))
+		     (unless (assoc (car elt) posting-style)
+		       (push elt posting-style)))))
+		(t
+		 (unless (assq (car param) out)
+		   (push param out))))))
+      (and posting-style (push (cons 'posting-style posting-style) out)))
     ;; Return the resulting parameter list.
     out))
 
Index: gnus/lisp/gnus-undo.el
diff -u gnus/lisp/gnus-undo.el:7.8 gnus/lisp/gnus-undo.el:7.10
--- gnus/lisp/gnus-undo.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-undo.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-undo.el --- minor mode for undoing in Gnus
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-util.el
diff -u gnus/lisp/gnus-util.el:7.48 gnus/lisp/gnus-util.el:7.62
--- gnus/lisp/gnus-util.el:7.48	Sat Apr 22 02:51:38 2006
+++ gnus/lisp/gnus-util.el	Fri Apr 27 10:39:17 2007
@@ -1,7 +1,7 @@
 ;;; gnus-util.el --- utility functions for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -103,7 +103,7 @@
 (put 'gnus-eval-in-buffer-window 'edebug-form-spec '(form body))
 
 (defmacro gnus-intern-safe (string hashtable)
-  "Set hash value.  Arguments are STRING, VALUE, and HASHTABLE."
+  "Get hash value.  Arguments are STRING and HASHTABLE."
   `(let ((symbol (intern ,string ,hashtable)))
      (or (boundp symbol)
 	 (set symbol nil))
@@ -173,8 +173,13 @@
     ;; First find the address - the thing with the @ in it.  This may
     ;; not be accurate in mail addresses, but does the trick most of
     ;; the time in news messages.
-    (when (string-match "\\b[^@ \t<>]+[!@][^@ \t<>]+\\b" from)
-      (setq address (substring from (match-beginning 0) (match-end 0))))
+    (cond (;; Check ``<foo@bar>'' first in order to handle the quite common
+	   ;; form ``"abc@xyz" <foo@bar>'' (i.e. ``@'' as part of a comment)
+	   ;; correctly.
+	   (string-match "<\\([^@ \t<>]+[!@][^@ \t<>]+\\)>" from)
+	   (setq address (substring from (match-beginning 1) (match-end 1))))
+	  ((string-match "\\b[^@ \t<>]+[!@][^@ \t<>]+\\b" from)
+	   (setq address (substring from (match-beginning 0) (match-end 0)))))
     ;; Then we check whether the "name <address>" format is used.
     (and address
 	 ;; Linear white space is not required.
@@ -499,7 +504,7 @@
 (defun gnus-extract-references (references)
   "Return a list of Message-IDs in REFERENCES (in In-Reply-To
   format), trimmed to only contain the Message-IDs."
-  (let ((ids (gnus-split-references references)) 
+  (let ((ids (gnus-split-references references))
 	refs)
     (dolist (id ids)
       (when (string-match "<[^<>]+>" id)
@@ -596,8 +601,10 @@
 For example, (gnus-group-server \"nnimap+yxa:INBOX.foo\") would
 yield \"nnimap:yxa\"."
   `(let ((gname ,group))
-     (if (string-match "^\\([^+]+\\).\\([^:]+\\):" gname)
-	 (format "%s:%s" (match-string 1 gname) (match-string 2 gname))
+     (if (string-match "^\\([^:+]+\\)\\(?:\\+\\([^:]*\\)\\)?:" gname)
+	 (format "%s:%s" (match-string 1 gname) (or
+						 (match-string 2 gname)
+						 ""))
        (format "%s:%s" (car gnus-select-method) (cadr gnus-select-method)))))
 
 (defun gnus-make-sort-function (funs)
@@ -1204,6 +1211,13 @@
 	(remove-text-properties start end properties object))
     t))
 
+(defun gnus-string-remove-all-properties (string)
+  (condition-case ()
+      (let ((s string))
+	(set-text-properties 0 (length string) nil string)
+	s)
+    (error string)))
+
 ;; This might use `compare-strings' to reduce consing in the
 ;; case-insensitive case, but it has to cope with null args.
 ;; (`string-equal' uses symbol print names.)
@@ -1221,12 +1235,6 @@
   :version "22.1"
   :group 'gnus-various)
 
-(defun kill-empty-logs ()
-  (dolist (buf (list (get-buffer "*Compile-Log*")
-		     (get-buffer "*Compile-Log-Show*")))
-    (if (and buf (= (buffer-size buf) 0))
-	(kill-buffer buf))))
-
 (defun gnus-byte-compile (form)
   "Byte-compile FORM if `gnus-use-byte-compile' is non-nil."
   (if gnus-use-byte-compile
@@ -1239,9 +1247,7 @@
 	(defalias 'gnus-byte-compile
 	  (lambda (form)
 	    (let ((byte-compile-warnings '(unresolved callargs redefine)))
-	      (prog1
-		  (byte-compile form)
-		(kill-empty-logs)))))
+	      (byte-compile form))))
 	(gnus-byte-compile form))
     form))
 
@@ -1572,13 +1578,16 @@
      ((or (featurep 'sxemacs) (featurep 'xemacs))
       ;; XEmacs or SXEmacs:
       (concat emacsname "/" emacs-program-version
-	      " ("
-	      (when (and (memq 'codename lst)
-			 codename)
-		(concat codename
-			(when system-v ", ")))
-	      (when system-v system-v)
-	      ")"))
+	      (let (plst)
+		(when (memq 'codename lst)
+		  (push codename plst))
+		(when system-v
+		  (push system-v plst))
+		(unless (featurep 'mule)
+		  (push "no MULE" plst))
+		(when (> (length plst) 0)
+		  (concat
+		   " (" (mapconcat 'identity (reverse plst) ", ") ")")))))
      (t emacs-version))))
 
 (defun gnus-rename-file (old-path new-path &optional trim)
@@ -1612,6 +1621,25 @@
       'set-process-query-on-exit-flag)
   (defalias 'gnus-set-process-query-on-exit-flag
     'process-kill-without-query))
+
+(if (fboundp 'with-local-quit)
+    (defalias 'gnus-with-local-quit 'with-local-quit)
+  (defmacro gnus-with-local-quit (&rest body)
+    "Execute BODY, allowing quits to terminate BODY but not escape further.
+When a quit terminates BODY, `gnus-with-local-quit' returns nil but
+requests another quit.  That quit will be processed as soon as quitting
+is allowed once again.  (Immediately, if `inhibit-quit' is nil.)"
+    ;;(declare (debug t) (indent 0))
+    `(condition-case nil
+	 (let ((inhibit-quit nil))
+	   ,@body)
+       (quit (setq quit-flag t)
+	     ;; This call is to give a chance to handle quit-flag
+	     ;; in case inhibit-quit is nil.
+	     ;; Without this, it will not be handled until the next function
+	     ;; call, and that might allow it to exit thru a condition-case
+	     ;; that intends to handle the quit signal next time.
+	     (eval '(ignore nil))))))
 
 (provide 'gnus-util)
 
Index: gnus/lisp/gnus-uu.el
diff -u gnus/lisp/gnus-uu.el:7.25 gnus/lisp/gnus-uu.el:7.27
--- gnus/lisp/gnus-uu.el:7.25	Wed Apr 12 04:00:49 2006
+++ gnus/lisp/gnus-uu.el	Tue Apr 17 08:16:10 2007
@@ -1,7 +1,7 @@
 ;;; gnus-uu.el --- extract (uu)encoded files in Gnus
 
 ;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998,
-;;   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Created: 2 Oct 1993
@@ -481,22 +481,25 @@
     (if (and n (not (numberp n)))
 	(setq message-forward-as-mime (not message-forward-as-mime)
 	      n nil))
-    (let ((gnus-article-reply (gnus-summary-work-articles n))
-	  gnus-newsgroup-processable)
+    (let ((gnus-article-reply (gnus-summary-work-articles n)))
       (when (and (not n)
 		 (= (length gnus-article-reply) 1))
 	;; The case where neither a number of articles nor a region is
 	;; specified.
 	(gnus-summary-top-thread)
 	(setq gnus-article-reply (nreverse (gnus-uu-find-articles-matching))))
-      ;; Specify articles to be forwarded.  Note that they should be
-      ;; reversed; see `gnus-uu-get-list-of-articles'.
-      (setq gnus-newsgroup-processable (reverse gnus-article-reply))
       (gnus-setup-message 'forward
 	(setq gnus-uu-digest-from-subject nil)
 	(setq gnus-uu-digest-buffer
 	      (gnus-get-buffer-create " *gnus-uu-forward*"))
-	(gnus-uu-decode-save n file)
+	;; Specify articles to be forwarded.  Note that they should be
+	;; reversed; see `gnus-uu-get-list-of-articles'.
+	(let ((gnus-newsgroup-processable (reverse gnus-article-reply)))
+	  (gnus-uu-decode-save n file)
+	  (setq gnus-article-reply gnus-newsgroup-processable))
+	;; Restore the value of `gnus-newsgroup-processable' to which
+	;; it should be set when it is not `let'-bound.
+	(setq gnus-newsgroup-processable (reverse gnus-article-reply))
 	(switch-to-buffer gnus-uu-digest-buffer)
 	(let ((fs gnus-uu-digest-from-subject))
 	  (when fs
Index: gnus/lisp/gnus-vm.el
diff -u gnus/lisp/gnus-vm.el:7.5 gnus/lisp/gnus-vm.el:7.6
--- gnus/lisp/gnus-vm.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-vm.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-vm.el --- vm interface for Gnus
 
 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-;;   2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Per Persson <[email protected]>
 ;; Keywords: news, mail
Index: gnus/lisp/gnus-win.el
diff -u gnus/lisp/gnus-win.el:7.8 gnus/lisp/gnus-win.el:7.9
--- gnus/lisp/gnus-win.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/gnus-win.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; gnus-win.el --- window configuration functions for Gnus
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/gnus-xmas.el
diff -u gnus/lisp/gnus-xmas.el:7.18 gnus/lisp/gnus-xmas.el:7.19
--- gnus/lisp/gnus-xmas.el:7.18	Sun Apr 30 11:44:06 2006
+++ gnus/lisp/gnus-xmas.el	Wed Dec 27 06:35:44 2006
@@ -873,7 +873,9 @@
 		      gnus-mailing-list-menu))
 
 (defun gnus-xmas-image-type-available-p (type)
-  (and window-system
+  (and (if (fboundp 'display-images-p)
+	   (display-images-p)
+	 window-system)
        (featurep (if (eq type 'pbm) 'xbm type))))
 
 (defun gnus-xmas-create-image (file &optional type data-p &rest props)
Index: gnus/lisp/gnus.el
diff -u gnus/lisp/gnus.el:7.54 gnus/lisp/gnus.el:7.62
--- gnus/lisp/gnus.el:7.54	Mon May  1 17:14:44 2006
+++ gnus/lisp/gnus.el	Mon Mar  5 12:03:16 2007
@@ -1,7 +1,7 @@
 ;;; gnus.el --- a newsreader for GNU Emacs
 
 ;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998,
-;;   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
@@ -16,7 +16,7 @@
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
@@ -51,6 +51,10 @@
   :group 'news
   :group 'mail)
 
+(defgroup gnus-start nil
+  "Starting your favorite newsreader."
+  :group 'gnus)
+
 (defgroup gnus-format nil
   "Dealing with formatting issues."
   :group 'gnus)
@@ -70,10 +74,6 @@
   "Article Registry."
   :group 'gnus)
 
-(defgroup gnus-start nil
-  "Starting your favorite newsreader."
-  :group 'gnus)
-
 (defgroup gnus-start-server nil
   "Server options at startup."
   :group 'gnus-start)
@@ -279,10 +279,6 @@
   :link '(custom-manual "(gnus)Various Various")
   :group 'gnus)
 
-(defgroup gnus-mime nil
-  "Variables for controlling the Gnus MIME interface."
-  :group 'gnus)
-
 (defgroup gnus-exit nil
   "Exiting Gnus."
   :link '(custom-manual "(gnus)Exiting Gnus")
@@ -1034,23 +1030,23 @@
    (t
     (insert
      (format "              %s
-          _    ___ _             _
-          _ ___ __ ___  __    _ ___
-          __   _     ___    __  ___
-              _           ___     _
-             _  _ __             _
-             ___   __            _
-                   __           _
-                    _      _   _
-                   _      _    _
-                      _  _    _
-                  __  ___
-                 _   _ _     _
-                _   _
-              _    _
-             _    _
-            _
-          __
+	  _    ___ _             _
+	  _ ___ __ ___  __    _ ___
+	  __   _     ___    __  ___
+	      _           ___     _
+	     _  _ __             _
+	     ___   __            _
+		   __           _
+		    _      _   _
+		   _      _    _
+		      _  _    _
+		  __  ___
+		 _   _ _     _
+		_   _
+	      _    _
+	     _    _
+	    _
+	  __
 
 "
 	     ""))
@@ -1250,6 +1246,11 @@
 	     (when (re-search-forward "[^ \t\n\r]+" nil t)
 	       (match-string 0))))))
 
+;; `M-x customize-variable RET gnus-select-method RET' should work without
+;; starting or even loading Gnus.
+;;;###autoload(when (fboundp 'custom-autoload)
+;;;###autoload  (custom-autoload 'gnus-select-method "gnus"))
+
 (defcustom gnus-select-method
   (condition-case nil
       (nconc
@@ -1283,6 +1284,8 @@
 There is a lot more to know about select methods and virtual servers -
 see the manual for details."
   :group 'gnus-server
+  :group 'gnus-start
+  :initialize 'custom-initialize-default
   :type 'gnus-select-method)
 
 (defcustom gnus-message-archive-method "archive"
@@ -1328,7 +1331,7 @@
 
 (defcustom gnus-nntp-server nil
   "*The name of the host running the NNTP server.
-This variable is semi-obsolete.	 Use the `gnus-select-method'
+This variable is semi-obsolete.  Use the `gnus-select-method'
 variable instead."
   :group 'gnus-server
   :type '(choice (const :tag "disable" nil)
@@ -1471,7 +1474,7 @@
 (defcustom gnus-use-cross-reference t
   "*Non-nil means that cross referenced articles will be marked as read.
 If nil, ignore cross references.  If t, mark articles as read in
-subscribed newsgroups.	If neither t nor nil, mark as read in all
+subscribed newsgroups.  If neither t nor nil, mark as read in all
 newsgroups."
   :group 'gnus-server
   :type '(choice (const :tag "off" nil)
@@ -1685,7 +1688,7 @@
 this method (i. e., `post', `mail', `none' or whatever) or other
 properties that this method has (like being respoolable).
 If you implement a new select method, all you should have to change is
-this variable.	I think."
+this variable.  I think."
   :group 'gnus-server
   :type '(repeat (group (string :tag "Name")
 			(radio-button-choice (const :format "%v " post)
@@ -1839,7 +1842,7 @@
  "*Groups in which to perform expiry of all read articles.
 Use with extreme caution.  All groups that match this regexp will be
 expiring - which means that all read articles will be deleted after
-\(say) one week.	 (This only goes for mail groups and the like, of
+\(say) one week.  (This only goes for mail groups and the like, of
 course.)"
  :variable-group nnmail-expire
  :variable-type '(choice (const nil)
@@ -3029,7 +3032,7 @@
 The %U (status), %R (replied) and %z (zcore) specs have to be handled
 with care.  For reasons of efficiency, Gnus will compute what column
 these characters will end up in, and \"hard-code\" that.  This means that
-it is invalid to have these specs after a variable-length spec.	 Well,
+it is invalid to have these specs after a variable-length spec.  Well,
 you might not be arrested, but your summary buffer will look strange,
 which is bad enough.
 
@@ -3412,7 +3415,7 @@
 
 (defun gnus-group-read-only-p (&optional group)
   "Check whether GROUP supports editing or not.
-If GROUP is nil, `gnus-newsgroup-name' will be checked instead.	 Note
+If GROUP is nil, `gnus-newsgroup-name' will be checked instead.  Note
 that that variable is buffer-local to the summary buffers."
   (let ((group (or group gnus-newsgroup-name)))
     (not (gnus-check-backend-function 'request-replace-article group))))
@@ -3503,27 +3506,27 @@
 
     ;; Perhaps it is already in the cache.
     (mapc (lambda (name-method)
-            (if (equal (cdr name-method) method)
-                (throw 'server-name (car name-method))))
-          gnus-server-method-cache)
+	    (if (equal (cdr name-method) method)
+		(throw 'server-name (car name-method))))
+	  gnus-server-method-cache)
 
     (mapc
      (lambda (server-alist)
        (mapc (lambda (name-method)
-               (when (gnus-methods-equal-p (cdr name-method) method)
-                 (unless (member name-method gnus-server-method-cache)
-                   (push name-method gnus-server-method-cache))
-                 (throw 'server-name (car name-method))))
-             server-alist))
+	       (when (gnus-methods-equal-p (cdr name-method) method)
+		 (unless (member name-method gnus-server-method-cache)
+		   (push name-method gnus-server-method-cache))
+		 (throw 'server-name (car name-method))))
+	     server-alist))
      (list gnus-server-alist
 	   gnus-predefined-server-alist))
 
     (let* ((name (if (member (cadr method) '(nil ""))
-                     (format "%s" (car method))
-                   (format "%s:%s" (car method) (cadr method))))
-           (name-method (cons name method)))
+		     (format "%s" (car method))
+		   (format "%s:%s" (car method) (cadr method))))
+	   (name-method (cons name method)))
       (unless (member name-method gnus-server-method-cache)
-        (push name-method gnus-server-method-cache))
+	(push name-method gnus-server-method-cache))
       name)))
 
 (defsubst gnus-server-to-method (server)
@@ -3553,24 +3556,24 @@
 						       (cadar servers)))))
 		  (pop servers))
 		(car servers))
-              ;; This could be some sort of foreign server that I
-              ;; simply haven't opened (yet).  Do a brute-force scan
-              ;; of the entire gnus-newsrc-alist for the server name
-              ;; of every method.  As a side-effect, loads the
-              ;; gnus-server-method-cache so this only happens once,
-              ;; if at all.
-              (let (match)
-                (mapcar
-                 (lambda (info)
-                   (let ((info-method (gnus-info-method info)))
-                     (unless (stringp info-method)
-                       (let ((info-server (gnus-method-to-server info-method)))
-                         (when (equal server info-server)
-                           (setq match info-method))))))
-                 (cdr gnus-newsrc-alist))
-                match))))
-        (when result
-          (push (cons server result) gnus-server-method-cache))
+	      ;; This could be some sort of foreign server that I
+	      ;; simply haven't opened (yet).  Do a brute-force scan
+	      ;; of the entire gnus-newsrc-alist for the server name
+	      ;; of every method.  As a side-effect, loads the
+	      ;; gnus-server-method-cache so this only happens once,
+	      ;; if at all.
+	      (let (match)
+		(mapcar
+		 (lambda (info)
+		   (let ((info-method (gnus-info-method info)))
+		     (unless (stringp info-method)
+		       (let ((info-server (gnus-method-to-server info-method)))
+			 (when (equal server info-server)
+			   (setq match info-method))))))
+		 (cdr gnus-newsrc-alist))
+		match))))
+	(when result
+	  (push (cons server result) gnus-server-method-cache))
 	result)))
 
 (defsubst gnus-server-get-method (group method)
@@ -3837,7 +3840,7 @@
     (if simple-results
 	;; Found results; return them.
 	(car simple-results)
-      ;; We didn't found it there, try `gnus-parameters'.
+      ;; We didn't find it there, try `gnus-parameters'.
       (let ((result nil)
 	    (head nil)
 	    (tail gnus-parameters))
@@ -4084,7 +4087,7 @@
     (not method)))
 
 (defun gnus-server-extend-method (group method)
-  ;; This function "extends" a virtual server.	If the server is
+  ;; This function "extends" a virtual server.  If the server is
   ;; "hello", and the select method is ("hello" (my-var "something"))
   ;; in the group "alt.alt", this will result in a new virtual server
   ;; called "hello+alt.alt".
@@ -4123,8 +4126,13 @@
   (or gnus-override-method
       (and (not group)
 	   gnus-select-method)
-      (and (not (gnus-group-entry group)) ;; a new group
-	   (gnus-group-name-to-method group))
+      (and (not (gnus-group-entry group))
+	   ;; Killed or otherwise unknown group.
+	   (or
+	    ;; If we know a virtual server by that name, return its method.
+	    (gnus-server-to-method (gnus-group-server group))
+	    ;; Guess a new method as last resort.
+	    (gnus-group-name-to-method group)))
       (let ((info (or info (gnus-get-info group)))
 	    method)
 	(if (or (not info)
@@ -4230,10 +4238,10 @@
   "Say whether METHOD is covered by the agent."
   (or (eq (car gnus-agent-method-p-cache) method)
       (setq gnus-agent-method-p-cache
-            (cons method
-                  (member (if (stringp method)
-                              method
-                            (gnus-method-to-server method)) gnus-agent-covered-methods))))
+	    (cons method
+		  (member (if (stringp method)
+			      method
+			    (gnus-method-to-server method)) gnus-agent-covered-methods))))
   (cdr gnus-agent-method-p-cache))
 
 (defun gnus-online (method)
Index: gnus/lisp/hashcash.el
diff -u gnus/lisp/hashcash.el:7.18 gnus/lisp/hashcash.el:7.19
--- gnus/lisp/hashcash.el:7.18	Sat Apr 15 20:12:07 2006
+++ gnus/lisp/hashcash.el	Sat Mar 24 18:20:56 2007
@@ -1,6 +1,6 @@
 ;;; hashcash.el --- Add hashcash payments to email
 
-;; Copyright (C) 2003, 2004, 2005 Free Software Foundation
+;; Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation
 
 ;; Written by: Paul Foley <[email protected]> (1997-2002)
 ;; Maintainer: Paul Foley <[email protected]>
@@ -164,7 +164,8 @@
 (defun hashcash-generate-payment-async (str val callback)
   "Generate a hashcash payment by finding a VAL-bit collison on STR.
 Return immediately.  Call CALLBACK with process and result when ready."
-  (if (> val 0)
+  (if (and (> val 0)
+	   hashcash-path)
       (let ((process (apply 'start-process "hashcash" nil
 			    hashcash-path "-m" "-q"
 			    "-b" (number-to-string val) str
@@ -174,7 +175,7 @@
 				      hashcash-process-alist))
 	(set-process-filter process `(lambda (process output)
 				       (funcall ,callback process output))))
-    (funcall callback nil)))
+    (funcall callback nil nil)))
 
 (defun hashcash-check-payment (token str val)
   "Check the validity of a hashcash payment."
Index: gnus/lisp/hex-util.el
diff -u gnus/lisp/hex-util.el:7.5 gnus/lisp/hex-util.el:7.6
--- gnus/lisp/hex-util.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/hex-util.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; hex-util.el --- Functions to encode/decode hexadecimal string.
 
 ;; Copyright (C) 1999, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shuhei KOBAYASHI <[email protected]>
 ;; Keywords: data
Index: gnus/lisp/html2text.el
diff -u gnus/lisp/html2text.el:7.16 gnus/lisp/html2text.el:7.18
--- gnus/lisp/html2text.el:7.16	Fri Feb 17 01:25:20 2006
+++ gnus/lisp/html2text.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; html2text.el --- a simple html to plain text converter
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Joakim Hove <[email protected]>
 
@@ -456,7 +456,9 @@
 	      (p3) (p4))
 	  (search-backward "<" (point-min) t)
 	  (setq p1 (point))
-	  (search-forward (format "</%s>" tag) (point-max) t)
+	  (unless (search-forward (format "</%s>" tag) (point-max) t)
+	    (goto-char p2)
+	    (insert (format "</%s>" tag)))
 	  (setq p4 (point))
 	  (search-backward "</" (point-min) t)
 	  (setq p3 (point))
Index: gnus/lisp/ietf-drums.el
diff -u gnus/lisp/ietf-drums.el:7.11 gnus/lisp/ietf-drums.el:7.12
--- gnus/lisp/ietf-drums.el:7.11	Mon Apr 17 13:08:55 2006
+++ gnus/lisp/ietf-drums.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; ietf-drums.el --- Functions for parsing RFC822bis headers
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; This file is part of GNU Emacs.
Index: gnus/lisp/imap.el
diff -u gnus/lisp/imap.el:7.28 gnus/lisp/imap.el:7.30
--- gnus/lisp/imap.el:7.28	Mon Apr 17 18:04:54 2006
+++ gnus/lisp/imap.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; imap.el --- imap library
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 ;; Keywords: mail
@@ -80,7 +80,7 @@
 ;; LOGINDISABLED) (with use of external library starttls.el and
 ;; program starttls), and the GSSAPI / kerberos V4 sections of RFC1731
 ;; (with use of external program `imtest'), RFC2971 (ID).  It also
-;; take advantage the UNSELECT extension in Cyrus IMAPD.
+;; takes advantage of the UNSELECT extension in Cyrus IMAPD.
 ;;
 ;; Without the work of John McClary Prevost and Jim Radford this library
 ;; would not have seen the light of day.  Many thanks.
Index: gnus/lisp/legacy-gnus-agent.el
diff -u gnus/lisp/legacy-gnus-agent.el:1.6 gnus/lisp/legacy-gnus-agent.el:1.8
--- gnus/lisp/legacy-gnus-agent.el:1.6	Thu Jun 16 07:51:57 2005
+++ gnus/lisp/legacy-gnus-agent.el	Wed Jan 24 08:15:37 2007
@@ -1,10 +1,39 @@
+;;; gnus-agent.el --- Legacy unplugged support for Gnus
+
+;; Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+
+;; Author: Kevin Greiner <[email protected]>
+;; Keywords: news
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; Conversion functions for the Agent.
+
+;;; Code:
 (require 'gnus-start)
 (require 'gnus-util)
 (require 'gnus-range)
 (require 'gnus-agent)
 
-; Oort Gnus v0.08 - This release updated agent to no longer use
-;                   history file and to support a compressed alist.
+;; Oort Gnus v0.08 - This release updated agent to no longer use
+;;                   history file and to support a compressed alist.
 
 (defvar gnus-agent-compressed-agentview-search-only nil)
 
@@ -224,4 +253,7 @@
 ;; the .newsrc.eld file.
 (gnus-convert-mark-converter-prompt 'gnus-agent-unhook-expire-days t)
 
-;;; arch-tag: 845c7b8a-88f7-4468-b8d7-94e8fc72cf1a
+(provide 'legacy-gnus-agent)
+
+;; arch-tag: 845c7b8a-88f7-4468-b8d7-94e8fc72cf1a
+;;; legacy-gnus-agent.el ends here
Index: gnus/lisp/lpath.el
diff -u gnus/lisp/lpath.el:7.20 gnus/lisp/lpath.el:7.28
--- gnus/lisp/lpath.el:7.20	Thu Apr 27 18:08:50 2006
+++ gnus/lisp/lpath.el	Wed Jan 24 14:13:25 2007
@@ -10,33 +10,36 @@
   (mapcar (lambda (var) (unless (boundp var) (set var nil))) args))
 
 (maybe-fbind '(Info-directory
-	       Info-menu create-image display-graphic-p
-	       display-time-event-handler find-coding-system find-image
-	       image-size image-type-available-p insert-image
-	       line-number-at-pos make-mode-line-mouse-map make-temp-file
-	       propertize put-image replace-regexp-in-string
-	       rmail-msg-is-pruned rmail-msg-restore-non-pruned-header
-	       sort-coding-systems tool-bar-add-item
-	       tool-bar-add-item-from-menu tool-bar-local-item-from-menu
+	       Info-menu clear-string cp-supported-codepages create-image
+	       custom-autoload display-graphic-p display-time-event-handler
+	       epg-check-configuration find-coding-system find-image image-size
+	       image-type-available-p insert-image line-number-at-pos
+	       make-mode-line-mouse-map make-network-process make-temp-file
+	       propertize put-image rmail-msg-is-pruned
+	       rmail-msg-restore-non-pruned-header sort-coding-systems
+	       tool-bar-add-item tool-bar-add-item-from-menu
+	       tool-bar-local-item-from-menu unicode-precedence-list
 	       url-generic-parse-url url-http-file-exists-p
 	       url-insert-file-contents vcard-pretty-print w32-focus-frame
 	       w3m-detect-meta-charset w3m-region x-focus-frame))
 (maybe-bind '(eudc-protocol
 	      filladapt-mode rmail-insert-mime-forwarded-message-function
-	      w3-meta-charset-content-type-regexp
+	      url-version w3-meta-charset-content-type-regexp
 	      w3-meta-content-type-charset-regexp))
 
 (if (featurep 'xemacs)
     (progn
       (maybe-fbind '(codepage-setup
-		     delete-overlay detect-coding-string eudc-expand-inline
-		     event-click-count event-end event-start
+		     delete-overlay detect-coding-string display-images-p
+		     eudc-expand-inline event-click-count event-end event-start
 		     find-coding-systems-for-charsets
 		     find-coding-systems-region find-coding-systems-string
 		     mail-abbrevs-setup mouse-minibuffer-check mouse-movement-p
 		     mouse-scroll-subr overlay-lists posn-point posn-window
 		     read-event set-buffer-multibyte
-		     select-frame-set-input-focus track-mouse window-edges))
+		     select-frame-set-input-focus select-safe-coding-system
+		     string-as-multibyte timer-set-function track-mouse
+		     window-edges))
       (maybe-bind '(adaptive-fill-first-line-regexp
 		    buffer-display-table buffer-file-coding-system
 		    current-language-environment cursor-in-non-selected-windows
@@ -44,21 +47,21 @@
 		    enable-multibyte-characters gnus-agent-expire-current-dirs
 		    language-info-alist mark-active mouse-selection-click-count
 		    mouse-selection-click-count-buffer pgg-parse-crc24
-		    temporary-file-directory transient-mark-mode)))
+		    temporary-file-directory timer-list transient-mark-mode)))
   (maybe-fbind '(bbdb-complete-name
 		 delete-annotation delete-extent device-connection dfw-device
-		 events-to-keys font-lock-set-defaults frame-device
+		 events-to-keys find-face font-lock-set-defaults frame-device
 		 get-char-table glyph-height glyph-width ldap-search-entries
 		 mail-aliases-setup make-annotation make-event make-glyph
-		 make-network-process map-extents message-xmas-redefine
-		 put-char-table set-extent-property temp-directory
+		 map-extents message-xmas-redefine put-char-table
+		 set-extent-property set-itimer-function temp-directory
 		 valid-image-instantiator-format-p
 		 w3-coding-system-for-mime-charset w3-do-setup
 		 w3-prepare-buffer w3-region window-pixel-height
 		 window-pixel-width))
-  (maybe-bind '(help-echo-owns-message mail-mode-hook mm-w3m-mode-map
-				       show-nonbreak-escape
-				       nobreak-char-display)))
+  (maybe-bind '(help-echo-owns-message
+		itimer-list mail-mode-hook mm-w3m-mode-map nobreak-char-display
+		show-nonbreak-escape)))
 
 (when (and (featurep 'xemacs)
 	   (not (featurep 'mule)))
@@ -68,9 +71,10 @@
 		 pgg-parse-crc24-string))
   (unless (featurep 'file-coding)
     (maybe-fbind '(coding-system-base
-		   coding-system-list coding-system-p decode-coding-region
-		   decode-coding-string detect-coding-region
-		   encode-coding-region encode-coding-string))))
+		   coding-system-change-eol-conversion coding-system-list
+		   coding-system-p decode-coding-region decode-coding-string
+		   detect-coding-region encode-coding-region
+		   encode-coding-string))))
 
 (defun nnkiboze-score-file (a)
   )
Index: gnus/lisp/mail-parse.el
diff -u gnus/lisp/mail-parse.el:7.6 gnus/lisp/mail-parse.el:7.9
--- gnus/lisp/mail-parse.el:7.6	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/mail-parse.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mail-parse.el --- Interface functions for parsing mail
 
-;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; This file is part of GNU Emacs.
@@ -71,6 +71,8 @@
 (defalias 'mail-encode-encoded-word-string 'rfc2047-encode-string)
 (defalias 'mail-decode-encoded-word-region 'rfc2047-decode-region)
 (defalias 'mail-decode-encoded-word-string 'rfc2047-decode-string)
+(defalias 'mail-decode-encoded-address-region 'rfc2047-decode-address-region)
+(defalias 'mail-decode-encoded-address-string 'rfc2047-decode-address-string)
 
 (provide 'mail-parse)
 
Index: gnus/lisp/mail-prsvr.el
diff -u gnus/lisp/mail-prsvr.el:7.5 gnus/lisp/mail-prsvr.el:7.7
--- gnus/lisp/mail-prsvr.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/mail-prsvr.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mail-prsvr.el --- Interface variables for parsing mail
 
-;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; This file is part of GNU Emacs.
Index: gnus/lisp/mail-source.el
diff -u gnus/lisp/mail-source.el:7.17 gnus/lisp/mail-source.el:7.19
--- gnus/lisp/mail-source.el:7.17	Sun Apr 30 11:44:06 2006
+++ gnus/lisp/mail-source.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mail-source.el --- functions for fetching mail
 
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news, mail
@@ -62,184 +62,186 @@
 See Info node `(gnus)Mail Source Specifiers'."
   :group 'mail-source
   :link '(custom-manual "(gnus)Mail Source Specifiers")
-  :type `(repeat
-	  (choice :format "%[Value Menu%] %v"
-		  :value (file)
-		  (cons :tag "Spool file"
-			(const :format "" file)
-			(checklist :tag "Options" :greedy t
-				   (group :inline t
-					  (const :format "" :value :path)
-					  file)))
-		  (cons :tag "Several files in a directory"
-			(const :format "" directory)
-			(checklist :tag "Options" :greedy t
-				   (group :inline t
-					  (const :format "" :value :path)
-					  (directory :tag "Path"))
-				   (group :inline t
-					  (const :format "" :value :suffix)
-					  (string :tag "Suffix"))
-				   (group :inline t
-					  (const :format "" :value :predicate)
-					  (function :tag "Predicate"))
-				   (group :inline t
-					  (const :format "" :value :prescript)
-					  (choice :tag "Prescript"
-						  :value nil
-						  (string :format "%v")
-						  (function :format "%v")))
-				   (group :inline t
-					  (const :format "" :value :postscript)
-					  (choice :tag "Postscript"
-						  :value nil
-						  (string :format "%v")
-						  (function :format "%v")))
-				   (group :inline t
-					  (const :format "" :value :plugged)
-					  (boolean :tag "Plugged"))))
-		  (cons :tag "POP3 server"
-			(const :format "" pop)
-			(checklist :tag "Options" :greedy t
-				   (group :inline t
-					  (const :format "" :value :server)
-					  (string :tag "Server"))
-				   (group :inline t
-					  (const :format "" :value :port)
-					  (choice :tag "Port"
-						  :value "pop3"
-						  (integer :format "%v")
-						  (string :format "%v")))
-				   (group :inline t
-					  (const :format "" :value :user)
-					  (string :tag "User"))
-				   (group :inline t
-					  (const :format "" :value :password)
-					  (string :tag "Password"))
-				   (group :inline t
-					  (const :format "" :value :program)
-					  (string :tag "Program"))
-				   (group :inline t
-					  (const :format "" :value :prescript)
-					  (choice :tag "Prescript"
-						  :value nil
-						  (string :format "%v")
-						  (function :format "%v")
-						  (const :tag "None" nil)))
-				   (group :inline t
-					  (const :format "" :value :postscript)
-					  (choice :tag "Postscript"
-						  :value nil
-						  (string :format "%v")
-						  (function :format "%v")
-						  (const :tag "None" nil)))
-				   (group :inline t
-					  (const :format "" :value :function)
-					  (function :tag "Function"))
-				   (group :inline t
-					  (const :format ""
-						 :value :authentication)
-					  (choice :tag "Authentication"
-						  :value apop
-						  (const password)
-						  (const apop)))
-				   (group :inline t
-					  (const :format "" :value :plugged)
-					  (boolean :tag "Plugged"))
-				   (group :inline t
-					  (const :format "" :value :stream)
-					  (choice :tag "Stream"
-						  :value nil
-						  (const :tag "Clear" nil)
-						  (const starttls)
-						  (const :tag "SSL/TLS" ssl)))))
-		  (cons :tag "Maildir (qmail, postfix...)"
-			(const :format "" maildir)
-			(checklist :tag "Options" :greedy t
-				   (group :inline t
-					  (const :format "" :value :path)
-					  (directory :tag "Path"))
-				   (group :inline t
-					  (const :format "" :value :plugged)
-					  (boolean :tag "Plugged"))))
-		  (cons :tag "IMAP server"
-			(const :format "" imap)
-			(checklist :tag "Options" :greedy t
-				   (group :inline t
-					  (const :format "" :value :server)
-					  (string :tag "Server"))
-				   (group :inline t
-					  (const :format "" :value :port)
-					  (choice :tag "Port"
-						  :value 143
-						  integer string))
-				   (group :inline t
-					  (const :format "" :value :user)
-					  (string :tag "User"))
-				   (group :inline t
-					  (const :format "" :value :password)
-					  (string :tag "Password"))
-				   (group :inline t
-					  (const :format "" :value :stream)
-					  (choice :tag "Stream"
-						  :value network
-						  ,@mail-source-imap-streams))
-				   (group :inline t
-					  (const :format "" :value :program)
-					  (string :tag "Program"))
-				   (group :inline t
-					  (const :format ""
-						 :value :authenticator)
-					  (choice :tag "Authenticator"
-						  :value login
-						  ,@mail-source-imap-authenticators))
-				   (group :inline t
-					  (const :format "" :value :mailbox)
-					  (string :tag "Mailbox"
-						  :value "INBOX"))
-				   (group :inline t
-					  (const :format "" :value :predicate)
-					  (string :tag "Predicate"
-						  :value "UNSEEN UNDELETED"))
-				   (group :inline t
-					  (const :format "" :value :fetchflag)
-					  (string :tag "Fetchflag"
-						  :value  "\\Deleted"))
-				   (group :inline t
-					  (const :format ""
-						 :value :dontexpunge)
-					  (boolean :tag "Dontexpunge"))
-				   (group :inline t
-					  (const :format "" :value :plugged)
-					  (boolean :tag "Plugged"))))
-		  (cons :tag "Webmail server"
-			(const :format "" webmail)
-			(checklist :tag "Options" :greedy t
-				   (group :inline t
-					 (const :format "" :value :subtype)
-					 ;; Should be generated from
-					 ;; `webmail-type-definition', but we
-					 ;; can't require webmail without W3.
-					 (choice :tag "Subtype"
-						 :value hotmail
-						 (const hotmail)
-						 (const yahoo)
-						 (const netaddress)
-						 (const netscape)
-						 (const my-deja)))
-				   (group :inline t
-					  (const :format "" :value :user)
-					  (string :tag "User"))
-				   (group :inline t
-					  (const :format "" :value :password)
-					  (string :tag "Password"))
-				   (group :inline t
-					  (const :format ""
-						 :value :dontexpunge)
-					  (boolean :tag "Dontexpunge"))
-				   (group :inline t
-					  (const :format "" :value :plugged)
-					  (boolean :tag "Plugged")))))))
+  :type `(choice
+	  (const nil)
+	  (repeat
+	   (choice :format "%[Value Menu%] %v"
+		   :value (file)
+		   (cons :tag "Spool file"
+			 (const :format "" file)
+			 (checklist :tag "Options" :greedy t
+				    (group :inline t
+					   (const :format "" :value :path)
+					   file)))
+		   (cons :tag "Several files in a directory"
+			 (const :format "" directory)
+			 (checklist :tag "Options" :greedy t
+				    (group :inline t
+					   (const :format "" :value :path)
+					   (directory :tag "Path"))
+				    (group :inline t
+					   (const :format "" :value :suffix)
+					   (string :tag "Suffix"))
+				    (group :inline t
+					   (const :format "" :value :predicate)
+					   (function :tag "Predicate"))
+				    (group :inline t
+					   (const :format "" :value :prescript)
+					   (choice :tag "Prescript"
+						   :value nil
+						   (string :format "%v")
+						   (function :format "%v")))
+				    (group :inline t
+					   (const :format "" :value :postscript)
+					   (choice :tag "Postscript"
+						   :value nil
+						   (string :format "%v")
+						   (function :format "%v")))
+				    (group :inline t
+					   (const :format "" :value :plugged)
+					   (boolean :tag "Plugged"))))
+		   (cons :tag "POP3 server"
+			 (const :format "" pop)
+			 (checklist :tag "Options" :greedy t
+				    (group :inline t
+					   (const :format "" :value :server)
+					   (string :tag "Server"))
+				    (group :inline t
+					   (const :format "" :value :port)
+					   (choice :tag "Port"
+						   :value "pop3"
+						   (integer :format "%v")
+						   (string :format "%v")))
+				    (group :inline t
+					   (const :format "" :value :user)
+					   (string :tag "User"))
+				    (group :inline t
+					   (const :format "" :value :password)
+					   (string :tag "Password"))
+				    (group :inline t
+					   (const :format "" :value :program)
+					   (string :tag "Program"))
+				    (group :inline t
+					   (const :format "" :value :prescript)
+					   (choice :tag "Prescript"
+						   :value nil
+						   (string :format "%v")
+						   (function :format "%v")
+						   (const :tag "None" nil)))
+				    (group :inline t
+					   (const :format "" :value :postscript)
+					   (choice :tag "Postscript"
+						   :value nil
+						   (string :format "%v")
+						   (function :format "%v")
+						   (const :tag "None" nil)))
+				    (group :inline t
+					   (const :format "" :value :function)
+					   (function :tag "Function"))
+				    (group :inline t
+					   (const :format ""
+						  :value :authentication)
+					   (choice :tag "Authentication"
+						   :value apop
+						   (const password)
+						   (const apop)))
+				    (group :inline t
+					   (const :format "" :value :plugged)
+					   (boolean :tag "Plugged"))
+				    (group :inline t
+					   (const :format "" :value :stream)
+					   (choice :tag "Stream"
+						   :value nil
+						   (const :tag "Clear" nil)
+						   (const starttls)
+						   (const :tag "SSL/TLS" ssl)))))
+		   (cons :tag "Maildir (qmail, postfix...)"
+			 (const :format "" maildir)
+			 (checklist :tag "Options" :greedy t
+				    (group :inline t
+					   (const :format "" :value :path)
+					   (directory :tag "Path"))
+				    (group :inline t
+					   (const :format "" :value :plugged)
+					   (boolean :tag "Plugged"))))
+		   (cons :tag "IMAP server"
+			 (const :format "" imap)
+			 (checklist :tag "Options" :greedy t
+				    (group :inline t
+					   (const :format "" :value :server)
+					   (string :tag "Server"))
+				    (group :inline t
+					   (const :format "" :value :port)
+					   (choice :tag "Port"
+						   :value 143
+						   integer string))
+				    (group :inline t
+					   (const :format "" :value :user)
+					   (string :tag "User"))
+				    (group :inline t
+					   (const :format "" :value :password)
+					   (string :tag "Password"))
+				    (group :inline t
+					   (const :format "" :value :stream)
+					   (choice :tag "Stream"
+						   :value network
+						   ,@mail-source-imap-streams))
+				    (group :inline t
+					   (const :format "" :value :program)
+					   (string :tag "Program"))
+				    (group :inline t
+					   (const :format ""
+						  :value :authenticator)
+					   (choice :tag "Authenticator"
+						   :value login
+						   ,@mail-source-imap-authenticators))
+				    (group :inline t
+					   (const :format "" :value :mailbox)
+					   (string :tag "Mailbox"
+						   :value "INBOX"))
+				    (group :inline t
+					   (const :format "" :value :predicate)
+					   (string :tag "Predicate"
+						   :value "UNSEEN UNDELETED"))
+				    (group :inline t
+					   (const :format "" :value :fetchflag)
+					   (string :tag "Fetchflag"
+						   :value  "\\Deleted"))
+				    (group :inline t
+					   (const :format ""
+						  :value :dontexpunge)
+					   (boolean :tag "Dontexpunge"))
+				    (group :inline t
+					   (const :format "" :value :plugged)
+					   (boolean :tag "Plugged"))))
+		   (cons :tag "Webmail server"
+			 (const :format "" webmail)
+			 (checklist :tag "Options" :greedy t
+				    (group :inline t
+					  (const :format "" :value :subtype)
+					  ;; Should be generated from
+					  ;; `webmail-type-definition', but we
+					  ;; can't require webmail without W3.
+					  (choice :tag "Subtype"
+						  :value hotmail
+						  (const hotmail)
+						  (const yahoo)
+						  (const netaddress)
+						  (const netscape)
+						  (const my-deja)))
+				    (group :inline t
+					   (const :format "" :value :user)
+					   (string :tag "User"))
+				    (group :inline t
+					   (const :format "" :value :password)
+					   (string :tag "Password"))
+				    (group :inline t
+					   (const :format ""
+						  :value :dontexpunge)
+					   (boolean :tag "Dontexpunge"))
+				    (group :inline t
+					   (const :format "" :value :plugged)
+					   (boolean :tag "Plugged"))))))))
 
 (defcustom mail-source-ignore-errors nil
   "*Ignore errors when querying mail sources.
Index: gnus/lisp/mailcap.el
diff -u gnus/lisp/mailcap.el:7.9 gnus/lisp/mailcap.el:7.10
--- gnus/lisp/mailcap.el:7.9	Tue Jan 31 02:11:48 2006
+++ gnus/lisp/mailcap.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mailcap.el --- MIME media types configuration
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: William M. Perry <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
Index: gnus/lisp/message.el
diff -u gnus/lisp/message.el:7.170 gnus/lisp/message.el:7.211
--- gnus/lisp/message.el:7.170	Sun Apr 30 12:26:47 2006
+++ gnus/lisp/message.el	Fri Apr 27 10:39:17 2007
@@ -1,7 +1,7 @@
 ;;; message.el --- composing mail and news messages
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: mail, news
@@ -51,6 +51,7 @@
 (require 'rfc822)
 (require 'ecomplete)
 
+
 (defgroup message '((user-mail-address custom-variable)
 		    (user-full-name custom-variable))
   "Mail and news message composing."
@@ -154,7 +155,6 @@
   :group 'message-interface
   :type 'regexp)
 
-;;;###autoload
 (defcustom message-from-style 'default
   "*Specifies how \"From\" headers look.
 
@@ -188,14 +188,13 @@
 
 Don't touch this variable unless you really know what you're doing.
 
-Checks include `subject-cmsg', `multiple-headers', `sendsys',
-`message-id', `from', `long-lines', `control-chars', `size',
-`new-text', `quoting-style', `redirected-followup', `signature',
-`approved', `sender', `empty', `empty-headers', `message-id', `from',
-`subject', `shorten-followup-to', `existing-newsgroups',
-`buffer-file-name', `unchanged', `newsgroups', `reply-to',
-`continuation-headers', `long-header-lines', `invisible-text' and
-`illegible-text'."
+Checks include `approved', `continuation-headers', `control-chars',
+`empty', `existing-newsgroups', `from', `illegible-text',
+`invisible-text', `long-header-lines', `long-lines', `message-id',
+`multiple-headers', `new-text', `newsgroups', `quoting-style',
+`repeated-newsgroups', `reply-to', `sender', `sendsys', `shoot',
+`shorten-followup-to', `signature', `size', `subject', `subject-cmsg'
+and `valid-newsgroups'."
   :group 'message-news
   :type '(repeat sexp))			; Fixme: improve this
 
@@ -210,7 +209,7 @@
   :link '(custom-manual "(message)Message Headers")
   :type '(repeat sexp))
 
-(defcustom message-draft-headers '(References From)
+(defcustom message-draft-headers '(References From Date)
   "*Headers to be generated when saving a draft message."
   :version "22.1"
   :group 'message-news
@@ -225,7 +224,7 @@
   "*Headers to be generated or prompted for when posting an article.
 RFC977 and RFC1036 require From, Date, Newsgroups, Subject,
 Message-ID.  Organization, Lines, In-Reply-To, Expires, and
-User-Agent are optional.  If don't you want message to insert some
+User-Agent are optional.  If you don't want message to insert some
 header, remove it from this list."
   :group 'message-news
   :group 'message-headers
@@ -303,7 +302,7 @@
   :version "22.1"
   :type '(choice (const :tag "never" nil)
 		 (const :tag "always strip" t)
-                 (const ask))
+		 (const ask))
   :link '(custom-manual "(message)Message Headers")
   :group 'message-various)
 
@@ -410,7 +409,6 @@
 
 ;;; End of variables adopted from `message-utils.el'.
 
-;;;###autoload
 (defcustom message-signature-separator "^-- *$"
   "Regexp matching the signature separator."
   :type 'regexp
@@ -432,16 +430,36 @@
   :type 'boolean)
 
 (defcustom message-generate-new-buffers 'unique
-  "*Non-nil means create a new message buffer whenever `message-setup' is called.
-If this is a function, call that function with three parameters:  The type,
-the to address and the group name.  (Any of these may be nil.)  The function
-should return the new buffer name."
+  "*Say whether to create a new message buffer to compose a message.
+Valid values include:
+
+nil
+  Generate the buffer name in the Message way (e.g., *mail*, *news*,
+  *mail to whom*, *news on group*, etc.) and continue editing in the
+  existing buffer of that name.  If there is no such buffer, it will
+  be newly created.
+
+`unique' or t
+  Create the new buffer with the name generated in the Message way.
+
+`unsent'
+  Similar to `unique' but the buffer name begins with \"*unsent \".
+
+`standard'
+  Similar to nil but the buffer name is simpler like *mail message*.
+
+function
+  If this is a function, call that function with three parameters:
+  The type, the To address and the group name (any of these may be nil).
+  The function should return the new buffer name."
   :group 'message-buffers
   :link '(custom-manual "(message)Message Buffers")
-  :type '(choice (const :tag "off" nil)
-		 (const :tag "unique" unique)
-		 (const :tag "unsent" unsent)
-		 (function fun)))
+  :type '(choice (const nil)
+		 (sexp :tag "unique" :format "unique\n" :value unique
+		       :match (lambda (widget value) (memq value '(unique t))))
+		 (const unsent)
+		 (const standard)
+		 (function :format "\n    %{%t%}: %v")))
 
 (defcustom message-kill-buffer-on-exit nil
   "*Non-nil means that the message buffer will be killed after sending a message."
@@ -470,7 +488,6 @@
   :type '(choice string
 		 (const :tag "consult file" t)))
 
-;;;###autoload
 (defcustom message-user-organization-file
   (let (orgfile)
     (dolist (f (list "/etc/organization"
@@ -587,7 +604,13 @@
   :version "22.1"
   :group 'message-insertion
   :link '(custom-manual "(message)Insertion Variables")
-  :type 'regexp)
+  :type 'regexp
+  :set (lambda (symbol value)
+	 (prog1
+	     (custom-set-default symbol value)
+	   (if (boundp 'gnus-message-cite-prefix-regexp)
+	       (setq gnus-message-cite-prefix-regexp
+		     (concat "^\\(?:" value "\\)"))))))
 
 (defcustom message-cancel-message "I am canceling my own article.\n"
   "Message to be inserted in the cancel message."
@@ -596,7 +619,6 @@
   :type 'string)
 
 ;; Useful to set in site-init.el
-;;;###autoload
 (defcustom message-send-mail-function
   (let ((program (if (boundp 'sendmail-program)
 		     ;; see paths.el
@@ -766,6 +788,14 @@
   :link '(custom-manual "(message)Mail Variables")
   :group 'message-sending)
 
+(defcustom message-sendmail-extra-arguments nil
+  "Additional arguments to `sendmail-program'."
+  ;; E.g. '("-a" "account") for msmtp
+  :version "23.0" ;; No Gnus
+  :type '(repeat string)
+  ;; :link '(custom-manual "(message)Mail Variables")
+  :group 'message-sending)
+
 ;; qmail-related stuff
 (defcustom message-qmail-inject-program "/var/qmail/bin/qmail-inject"
   "Location of the qmail-inject program."
@@ -822,9 +852,18 @@
   :group 'message-headers
   :link '(custom-manual "(message)Message Headers")
   :type '(choice (const :tag "None" nil)
-                 (const :tag "References" '(references))
-                 (const :tag "All" t)
-                 (repeat (sexp :tag "Header"))))
+		 (const :tag "References" '(references))
+		 (const :tag "All" t)
+		 (repeat (sexp :tag "Header"))))
+
+(defcustom message-fill-column 72
+  "Column beyond which automatic line-wrapping should happen.
+Local value for message buffers.  If non-nil, also turn on
+auto-fill in message buffers."
+  :group 'message-various
+  ;; :link '(custom-manual "(message)Message Headers")
+  :type '(choice (const :tag "Don't turn on auto fill" nil)
+		 (integer)))
 
 (defcustom message-setup-hook nil
   "Normal hook, run each time a new outgoing message is initialized.
@@ -871,7 +910,6 @@
   :version "22.1"
   :group 'message-various)
 
-;;;###autoload
 (defcustom message-citation-line-function 'message-insert-citation-line
   "*Function called to insert the \"Whomever writes:\" line.
 
@@ -890,7 +928,7 @@
   :link '(custom-manual "(message)Insertion Variables")
   :group 'message-insertion)
 
-(defcustom message-citation-line-format "On %a, %b %d %Y, %n wrote:"
+(defcustom message-citation-line-format "On %a, %b %d %Y, %N wrote:"
   "Format of the \"Whomever writes:\" line.
 
 The string is formatted using `format-spec'.  The following
@@ -917,7 +955,6 @@
   :version "23.0" ;; No Gnus
   :group 'message-insertion)
 
-;;;###autoload
 (defcustom message-yank-prefix "> "
   "*Prefix inserted on the lines of yanked messages.
 Fix `message-cite-prefix-regexp' if it is set to an abnormal value.
@@ -950,7 +987,6 @@
   :link '(custom-manual "(message)Insertion Variables")
   :type 'integer)
 
-;;;###autoload
 (defcustom message-cite-function 'message-cite-original
   "*Function for citing an original message.
 Predefined functions include `message-cite-original' and
@@ -963,7 +999,6 @@
   :link '(custom-manual "(message)Insertion Variables")
   :group 'message-insertion)
 
-;;;###autoload
 (defcustom message-indent-citation-function 'message-indent-citation
   "*Function for modifying a citation just inserted in the mail buffer.
 This can also be a list of functions.  Each function can find the
@@ -973,7 +1008,6 @@
   :link '(custom-manual "(message)Insertion Variables")
   :group 'message-insertion)
 
-;;;###autoload
 (defcustom message-signature t
   "*String to be inserted at the end of the message buffer.
 If t, the `message-signature-file' file will be inserted instead.
@@ -983,16 +1017,26 @@
   :link '(custom-manual "(message)Insertion Variables")
   :group 'message-insertion)
 
-;;;###autoload
 (defcustom message-signature-file "~/.signature"
   "*Name of file containing the text inserted at end of message buffer.
 Ignored if the named file doesn't exist.
-If nil, don't insert a signature."
+If nil, don't insert a signature.
+If a path is specified, the value of `message-signature-directory' is ignored,
+even if set."
   :type '(choice file (const :tags "None" nil))
   :link '(custom-manual "(message)Insertion Variables")
   :group 'message-insertion)
 
-;;;###autoload
+(defcustom message-signature-directory nil
+  "*Name of directory containing signature files.
+Comes in handy if you have many such files, handled via posting styles for
+instance.
+If nil, `message-signature-file' is expected to specify the directory if
+needed."
+  :type '(choice string (const :tags "None" nil))
+  :link '(custom-manual "(message)Insertion Variables")
+  :group 'message-insertion)
+
 (defcustom message-signature-insert-empty-line t
   "*If non-nil, insert an empty line before the signature separator."
   :version "22.1"
@@ -1160,13 +1204,18 @@
 
 (defcustom message-dont-reply-to-names
   (and (boundp 'rmail-dont-reply-to-names) rmail-dont-reply-to-names)
-  "*A regexp specifying addresses to prune when doing wide replies.
-A value of nil means exclude your own user name only."
+  "*Addresses to prune when doing wide replies.
+This can be a regexp or a list of regexps. Also, a value of nil means
+exclude your own user name only."
   :version "21.1"
   :group 'message
   :link '(custom-manual "(message)Wide Reply")
   :type '(choice (const :tag "Yourself" nil)
-		 regexp))
+		 regexp
+		 (repeat :tag "Regexp List" regexp)))
+
+(defsubst message-dont-reply-to-names ()
+  (gmm-regexp-concat message-dont-reply-to-names))
 
 (defvar message-shoot-gnksa-feet nil
   "*A list of GNKSA feet you are allowed to shoot.
@@ -1178,7 +1227,7 @@
 `quoted-text-only'  Allow you to post quoted text only;
 `multiple-copies'   Allow you to post multiple copies;
 `cancel-messages'   Allow you to cancel or supersede messages from
-                    your other email addresses.")
+		    your other email addresses.")
 
 (defsubst message-gnksa-enable-p (feature)
   (or (not (listp message-shoot-gnksa-feet))
@@ -1568,10 +1617,16 @@
 
 (defcustom message-generate-hashcash (if (executable-find "hashcash") t)
   "*Whether to generate X-Hashcash: headers.
+If `t', always generate hashcash headers.  If `opportunistic',
+only generate hashcash headers if it can be done without the user
+waiting (i.e., only asynchronously).
+
 You must have the \"hashcash\" binary installed, see `hashcash-path'."
   :group 'message-headers
   :link '(custom-manual "(message)Mail Headers")
-  :type 'boolean)
+  :type '(choice (const :tag "Always" t)
+		 (const :tag "Never" nil)
+		 (const :tag "Opportunistic" opportunistic)))
 
 ;;; Internal variables.
 
@@ -1686,7 +1741,7 @@
 (defvar message-send-mail-real-function nil
   "Internal send mail function.")
 
-(defvar message-bogus-system-names "^localhost\\."
+(defvar message-bogus-system-names "^localhost\\.\\|\\.local$"
   "The regexp of bogus system names.")
 
 (defcustom message-valid-fqdn-regexp
@@ -1722,6 +1777,7 @@
   (autoload 'gnus-output-to-mail "gnus-util")
   (autoload 'gnus-output-to-rmail "gnus-util")
   (autoload 'gnus-request-post "gnus-int")
+  (autoload 'gnus-select-frame-set-input-focus "gnus-util")
   (autoload 'gnus-server-string "gnus")
   (autoload 'idna-to-ascii "idna")
   (autoload 'message-setup-toolbar "messagexmas")
@@ -1895,6 +1951,96 @@
       (substring subject (match-end 0))
     subject))
 
+(defcustom message-replacement-char "."
+  "Replacement character used instead of unprintable or not decodable chars."
+  :group 'message-various
+  :version "22.1" ;; Gnus 5.10.9
+  :type '(choice string
+		 (const ".")
+		 (const "?")))
+
+;; FIXME: We also should call `message-strip-subject-encoded-words'
+;; when forwarding.  Probably in `message-make-forward-subject' and
+;; `message-forward-make-body'.
+
+(defun message-strip-subject-encoded-words (subject)
+  "Fix non-decodable words in SUBJECT."
+  ;; Cf. `gnus-simplify-subject-fully'.
+  (let* ((case-fold-search t)
+	 (replacement-chars (format "[%s%s%s]"
+				    message-replacement-char
+				    message-replacement-char
+				    message-replacement-char))
+	 (enc-word-re "=\\?\\([^?]+\\)\\?\\([QB]\\)\\?\\([^?]+\\)\\(\\?=\\)")
+	 cs-string
+	 (have-marker
+	  (with-temp-buffer
+	    (insert subject)
+	    (goto-char (point-min))
+	    (when (re-search-forward enc-word-re nil t)
+	      (setq cs-string (match-string 1)))))
+	 cs-coding q-or-b word-beg word-end)
+    (if (or (not have-marker) ;; No encoded word found...
+	    ;; ... or double encoding was correct:
+	    (and (stringp cs-string)
+		 (setq cs-string (downcase cs-string))
+		 (mm-coding-system-p (intern cs-string))
+		 (not (prog1
+			  (y-or-n-p
+			   (format "\
+Decoded Subject \"%s\"
+contains a valid encoded word.  Decode again? "
+				   subject))
+			(setq cs-coding (intern cs-string))))))
+	subject
+      (with-temp-buffer
+	(insert subject)
+	(goto-char (point-min))
+	(while (re-search-forward enc-word-re nil t)
+	  (setq cs-string (downcase (match-string 1))
+		q-or-b    (match-string 2)
+		word-beg (match-beginning 0)
+		word-end (match-end 0))
+	  (setq cs-coding
+		(if (mm-coding-system-p (intern cs-string))
+		    (setq cs-coding (intern cs-string))
+		  nil))
+	  ;; No double encoded subject? => bogus charset.
+	  (unless cs-coding
+	    (setq cs-coding
+		  (mm-read-coding-system
+		   (format "\
+Decoded Subject \"%s\"
+contains an encoded word.  The charset `%s' is unknown or invalid.
+Hit RET to replace non-decodable characters with \"%s\" or enter replacement
+charset: "
+			   subject cs-string message-replacement-char)))
+	    (if cs-coding
+		(replace-match (concat "=?" (symbol-name cs-coding)
+				       "?\\2?\\3\\4\\5"))
+	      (save-excursion
+		(goto-char word-beg)
+		(re-search-forward "=\\?\\([^?]+\\)\\?\\([QB]\\)\\?" word-end t)
+		(replace-match "")
+		;; QP or base64
+		(if (string-match "\\`Q\\'" q-or-b)
+		    ;; QP
+		    (progn
+		      (message "Replacing non-decodable characters with \"%s\"."
+			       message-replacement-char)
+		      (while (re-search-forward "\\(=[A-F0-9][A-F0-9]\\)+"
+						word-end t)
+			(replace-match message-replacement-char)))
+		  ;; base64
+		  (message "Replacing non-decodable characters with \"%s\"."
+			   replacement-chars)
+		  (re-search-forward "[^?]+" word-end t)
+		  (replace-match replacement-chars))
+		(re-search-forward "\\?=")
+		(replace-match "")))))
+	(rfc2047-decode-region (point-min) (point-max))
+	(buffer-string)))))
+
 ;;; Start of functions adopted from `message-utils.el'.
 
 (defun message-strip-subject-trailing-was (subject)
@@ -2601,7 +2747,7 @@
 	 C-c C-f C-w  move to Fcc	C-c C-f C-r  move to Reply-To
 	 C-c C-f C-u  move to Summary	C-c C-f C-n  move to Newsgroups
 	 C-c C-f C-k  move to Keywords	C-c C-f C-d  move to Distribution
-         C-c C-f C-o  move to From (\"Originator\")
+	 C-c C-f C-o  move to From (\"Originator\")
 	 C-c C-f C-f  move to Followup-To
 	 C-c C-f C-m  move to Mail-Followup-To
 	 C-c C-f C-e  move to Expires
@@ -2653,6 +2799,9 @@
   (set (make-local-variable 'message-checksum) nil)
   (set (make-local-variable 'message-mime-part) 0)
   (message-setup-fill-variables)
+  (when message-fill-column
+    (setq fill-column message-fill-column)
+    (turn-on-auto-fill))
   ;; Allow using comment commands to add/remove quoting.
   ;; (set (make-local-variable 'comment-start) message-yank-prefix)
   (when message-yank-prefix
@@ -2869,11 +3018,11 @@
 prefix FORCE is given."
   (interactive "P")
   (let* ((mct (message-fetch-reply-field "mail-copies-to"))
-         (dont (and mct (or (equal (downcase mct) "never")
+	 (dont (and mct (or (equal (downcase mct) "never")
 			    (equal (downcase mct) "nobody"))))
-         (to (or (message-fetch-reply-field "mail-reply-to")
-                 (message-fetch-reply-field "reply-to")
-                 (message-fetch-reply-field "from"))))
+	 (to (or (message-fetch-reply-field "mail-reply-to")
+		 (message-fetch-reply-field "reply-to")
+		 (message-fetch-reply-field "from"))))
     (when (and dont to)
       (message
        (if force
@@ -2913,21 +3062,21 @@
   ;; (mail-strip-quoted-names "Foo Bar <foo@bar>, bla@fasel (Bla Fasel)")
   (dolist (header headers)
     (let* ((header-name (symbol-name (car header)))
-           (new-header (cdr header))
-           (synonyms (loop for synonym in message-header-synonyms
+	   (new-header (cdr header))
+	   (synonyms (loop for synonym in message-header-synonyms
 			   when (memq (car header) synonym) return synonym))
-           (old-header
-            (loop for synonym in synonyms
+	   (old-header
+	    (loop for synonym in synonyms
 		  for old-header = (mail-fetch-field (symbol-name synonym))
 		  when (and old-header (string-match new-header old-header))
 		  return synonym)))
       (if old-header
-          (message "already have `%s' in `%s'" new-header old-header)
+	  (message "already have `%s' in `%s'" new-header old-header)
 	(when (and (message-position-on-field header-name)
-                   (setq old-header (mail-fetch-field header-name))
-                   (not (string-match "\\` *\\'" old-header)))
+		   (setq old-header (mail-fetch-field header-name))
+		   (not (string-match "\\` *\\'" old-header)))
 	  (insert ", "))
-        (insert new-header)))))
+	(insert new-header)))))
 
 (defun message-widen-reply ()
   "Widen the reply to include maximum recipients."
@@ -3133,13 +3282,21 @@
 	   ((listp message-signature)
 	    (eval message-signature))
 	   (t message-signature)))
-	 (signature
+	 signature-file)
+    (setq signature
 	  (cond ((stringp signature)
 		 signature)
-		((and (eq t signature)
-		      message-signature-file
-		      (file-exists-p message-signature-file))
-		 signature))))
+		((and (eq t signature) message-signature-file)
+		 (setq signature-file
+		       (if (and message-signature-directory
+				;; don't actually use the signature directory
+				;; if message-signature-file contains a path.
+				(not (file-name-directory
+				      message-signature-file)))
+			   (nnheader-concat message-signature-directory
+					    message-signature-file)
+			 message-signature-file))
+		 (file-exists-p signature-file))))
     (when signature
       (goto-char (point-max))
       ;; Insert the signature.
@@ -3149,7 +3306,7 @@
 	(insert "\n"))
       (insert "-- \n")
       (if (eq signature t)
-	  (insert-file-contents message-signature-file)
+	  (insert-file-contents signature-file)
 	(insert signature))
       (goto-char (point-max))
       (or (bolp) (insert "\n")))))
@@ -3254,17 +3411,17 @@
      (substring table ?a (+ ?a n))
      (substring table (+ ?a 26) 255))))
 
-(defun message-caesar-buffer-body (&optional rotnum)
+(defun message-caesar-buffer-body (&optional rotnum wide)
   "Caesar rotate all letters in the current buffer by 13 places.
 Used to encode/decode possibly offensive messages (commonly in rec.humor).
 With prefix arg, specifies the number of places to rotate each letter forward.
-Mail and USENET news headers are not rotated."
+Mail and USENET news headers are not rotated unless WIDE is non-nil."
   (interactive (if current-prefix-arg
 		   (list (prefix-numeric-value current-prefix-arg))
 		 (list nil)))
   (save-excursion
     (save-restriction
-      (when (message-goto-body)
+      (when (and (not wide) (message-goto-body))
 	(narrow-to-region (point) (point-max)))
       (message-caesar-region (point-min) (point-max) rotnum))))
 
@@ -3311,14 +3468,15 @@
     (let ((fill-prefix message-yank-prefix))
       (fill-individual-paragraphs (point) (point-max) justifyp))))
 
-(defun message-indent-citation ()
+(defun message-indent-citation (&optional start end yank-only)
   "Modify text just inserted from a message to be cited.
 The inserted text should be the region.
 When this function returns, the region is again around the modified text.
 
 Normally, indent each nonblank line `message-indentation-spaces' spaces.
 However, if `message-yank-prefix' is non-nil, insert that prefix on each line."
-  (let ((start (point)))
+  (unless start (setq start (point)))
+  (unless yank-only
     ;; Remove unwanted headers.
     (when message-ignored-cited-headers
       (let (all-removed)
@@ -3346,21 +3504,32 @@
       (insert "\n"))
     (while (and (zerop (forward-line -1))
 		(looking-at "$"))
-      (message-delete-line))
-    ;; Do the indentation.
-    (if (null message-yank-prefix)
-	(indent-rigidly start (mark t) message-indentation-spaces)
-      (save-excursion
-	(goto-char start)
-	(while (< (point) (mark t))
-	  (cond ((looking-at ">")
-		 (insert message-yank-cited-prefix))
-		((looking-at "^$")
-		 (insert message-yank-empty-prefix))
-		(t
-		 (insert message-yank-prefix)))
-	  (forward-line 1))))
-    (goto-char start)))
+      (message-delete-line)))
+  ;; Do the indentation.
+  (if (null message-yank-prefix)
+      (indent-rigidly start (or end (mark t)) message-indentation-spaces)
+    (save-excursion
+      (goto-char start)
+      (while (< (point) (or end (mark t)))
+	(cond ((looking-at ">")
+	       (insert message-yank-cited-prefix))
+	      ((looking-at "^$")
+	       (insert message-yank-empty-prefix))
+	      (t
+	       (insert message-yank-prefix)))
+	(forward-line 1))))
+  (goto-char start))
+
+(defvar message-cite-reply-above nil
+  "If non-nil, start own text above the quote.
+
+Note: Top posting is bad netiquette.  Don't use it unless you
+really must.  You probably want to set variable only for specific
+groups, e.g. using `gnus-posting-styles':
+
+  (eval (set (make-local-variable 'message-cite-reply-above) t))
+
+This variable has no effect in news postings.")
 
 (defun message-yank-original (&optional arg)
   "Insert the message being replied to, if any.
@@ -3373,18 +3542,42 @@
 Just \\[universal-argument] as argument means don't indent, insert no
 prefix, and don't delete any headers."
   (interactive "P")
-  (let ((modified (buffer-modified-p)))
+  (let ((modified (buffer-modified-p))
+	body-text)
     (when (and message-reply-buffer
 	       message-cite-function)
+      (when message-cite-reply-above
+	(if (and (not (message-news-p))
+		 (or (eq message-cite-reply-above 'is-evil)
+		     (y-or-n-p "\
+Top posting is bad netiquette.  Please don't top post unless you really must.
+Really top post? ")))
+	    (save-excursion
+	      (setq body-text
+		    (buffer-substring (message-goto-body)
+				      (point-max)))
+	      (delete-region (message-goto-body) (point-max)))
+	  (set (make-local-variable 'message-cite-reply-above) nil)))
       (delete-windows-on message-reply-buffer t)
       (push-mark (save-excursion
 		   (insert-buffer-substring message-reply-buffer)
+		   (unless (bolp)
+		     (insert ?\n))
 		   (point)))
       (unless arg
-	(funcall message-cite-function))
-      (message-exchange-point-and-mark)
-      (unless (bolp)
-	(insert ?\n))
+	(funcall message-cite-function)
+	(unless (eq (char-before (mark t)) ?\n)
+	  (let ((pt (point)))
+	    (goto-char (mark t))
+	    (insert-before-markers ?\n)
+	    (goto-char pt))))
+      (when message-cite-reply-above
+	(message-goto-body)
+	(insert body-text)
+	(insert (if (bolp) "\n" "\n\n"))
+	(message-goto-body))
+      ;; Add a `message-setup-very-last-hook' here?
+      ;; Add `gnus-article-highlight-citation' here?
       (unless modified
 	(setq message-checksum (message-checksum))))))
 
@@ -3435,7 +3628,7 @@
 	      (setq x-no-archive (message-fetch-field "x-no-archive"))
 	      (vector 0
 		      (or (message-fetch-field "subject") "none")
-		      (message-fetch-field "from")
+		      (or (message-fetch-field "from") "nobody")
 		      (message-fetch-field "date")
 		      (message-fetch-field "message-id" t)
 		      (message-fetch-field "references")
@@ -3467,6 +3660,7 @@
 	(undo-boundary)
 	(delete-region (point) (mark t))
 	(insert "> [Quoted text removed due to X-No-Archive]\n")
+	(push-mark)
 	(forward-line -1)))))
 
 (defun message-cite-original ()
@@ -3504,7 +3698,7 @@
 	     date
 	     ;; We need Gnus functionality if the user wants date or time from
 	     ;; the original article:
-	     (when (string-match "%[^EFLn]" message-citation-line-format)
+	     (when (string-match "%[^fnNFL]" message-citation-line-format)
 	       (autoload 'gnus-date-get-time "gnus-util")
 	       (gnus-date-get-time (mail-header-date message-reply-headers)))))
 	   (flist
@@ -3524,19 +3718,19 @@
 		       (setq fname name
 			     lname ""))))
 	      ;; The following letters are not used in `format-time-string':
-	      (push ?E lst) (push net lst)
+	      (push ?E lst) (push "<E>" lst)
 	      (push ?F lst) (push fname lst)
 	      ;; We might want to use "" instead of "<X>" later.
 	      (push ?J lst) (push "<J>" lst)
 	      (push ?K lst) (push "<K>" lst)
 	      (push ?L lst) (push lname lst)
-	      (push ?N lst) (push "<N>" lst)
+	      (push ?N lst) (push name-or-net lst)
 	      (push ?O lst) (push "<O>" lst)
 	      (push ?P lst) (push "<P>" lst)
 	      (push ?Q lst) (push "<Q>" lst)
-	      (push ?f lst) (push "<f>" lst)
+	      (push ?f lst) (push from lst)
 	      (push ?i lst) (push "<i>" lst)
-	      (push ?n lst) (push name-or-net lst)
+	      (push ?n lst) (push net lst)
 	      (push ?o lst) (push "<o>" lst)
 	      (push ?q lst) (push "<q>" lst)
 	      (push ?t lst) (push "<t>" lst)
@@ -3855,8 +4049,10 @@
 	(setq choice
 	      (gnus-multiple-choice
 	       "Non-printable characters found.  Continue sending?"
-	       '((?d "Remove non-printable characters and send")
-		 (?r "Replace non-printable characters with dots and send")
+	       `((?d "Remove non-printable characters and send")
+		 (?r ,(format
+		       "Replace non-printable characters with \"%s\" and send"
+		       message-replacement-char))
 		 (?i "Ignore non-printable characters and send")
 		 (?e "Continue editing"))))
 	(if (eq choice ?e)
@@ -3879,7 +4075,7 @@
 		(message-kill-all-overlays)
 	      (delete-char 1)
 	      (when (eq choice ?r)
-		(insert "."))))
+		(insert message-replacement-char))))
 	  (forward-char)
 	  (skip-chars-forward mm-7bit-chars))))))
 
@@ -3992,7 +4188,8 @@
 	      (gnus-setup-posting-charset nil)
 	    message-posting-charset))
 	 (headers message-required-mail-headers))
-    (when message-generate-hashcash
+    (when (and message-generate-hashcash
+	       (not (eq message-generate-hashcash 'opportunistic)))
       (message "Generating hashcash...")
       ;; Wait for calculations already started to finish...
       (hashcash-wait-async)
@@ -4016,6 +4213,16 @@
       (let ((message-deletable-headers
 	     (if news nil message-deletable-headers)))
 	(message-generate-headers headers))
+      ;; Check continuation headers.
+      (message-check 'continuation-headers
+	(goto-char (point-min))
+	(while (re-search-forward "^[^ \t\n][^ \t\n:]*[ \t\n]" nil t)
+	  (goto-char (match-beginning 0))
+	  (if (y-or-n-p "Fix continuation lines? ")
+	      (insert " ")
+	    (forward-line 1)
+	    (unless (y-or-n-p "Send anyway? ")
+	      (error "Failed to send the message")))))
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
     (unwind-protect
@@ -4134,10 +4341,17 @@
 		       'call-process-region
 		       (append
 			(list (point-min) (point-max)
-			      (if (boundp 'sendmail-program)
-				  sendmail-program
-				"/usr/lib/sendmail")
+			      (cond ((boundp 'sendmail-program)
+				     sendmail-program)
+				    ((file-exists-p "/usr/sbin/sendmail")
+				     "/usr/sbin/sendmail")
+				    ((file-exists-p "/usr/lib/sendmail")
+				     "/usr/lib/sendmail")
+				    ((file-exists-p "/usr/ucblib/sendmail")
+				     "/usr/ucblib/sendmail")
+				    (t "fakemail"))
 			      nil errbuf nil "-oi")
+			message-sendmail-extra-arguments
 			;; Always specify who from,
 			;; since some systems have broken sendmails.
 			;; But some systems are more broken with -f, so
@@ -4202,9 +4416,9 @@
 	 ;; free for -inject-arguments -- a big win for the user and for us
 	 ;; since we don't have to play that double-guessing game and the user
 	 ;; gets full control (no gestapo'ish -f's, for instance).  --sj
-         (if (functionp message-qmail-inject-args)
-             (funcall message-qmail-inject-args)
-           message-qmail-inject-args)))
+	 (if (functionp message-qmail-inject-args)
+	     (funcall message-qmail-inject-args)
+	   message-qmail-inject-args)))
     ;; qmail-inject doesn't say anything on it's stdout/stderr,
     ;; we have to look at the retval instead
     (0 nil)
@@ -4572,11 +4786,11 @@
    (message-check 'continuation-headers
      (goto-char (point-min))
      (let ((do-posting t))
-       (while (re-search-forward "^[^ \t\n][^:\n]*$" nil t)
+       (while (re-search-forward "^[^ \t\n][^ \t\n:]*[ \t\n]" nil t)
+	 (goto-char (match-beginning 0))
 	 (if (y-or-n-p "Fix continuation lines? ")
-	     (progn
-	       (goto-char (match-beginning 0))
-	       (insert " "))
+	     (insert " ")
+	   (forward-line 1)
 	   (unless (y-or-n-p "Send anyway? ")
 	     (setq do-posting nil))))
        do-posting))
@@ -5001,13 +5215,32 @@
 	  (msg-id (mail-header-message-id message-reply-headers)))
       (when from
 	(let ((name (mail-extract-address-components from)))
-	  (concat msg-id (if msg-id " (")
-		  (or (car name)
-		      (nth 1 name))
-		  "'s message of \""
-		  (if (or (not date) (string= date ""))
-		      "(unknown date)" date)
-		  "\"" (if msg-id ")")))))))
+	  (concat
+	   msg-id (if msg-id " (")
+	   (if (car name)
+	       (if (string-match "[^\000-\177]" (car name))
+		   ;; Quote a string containing non-ASCII characters.
+		   ;; It will make the RFC2047 encoder cause an error
+		   ;; if there are special characters.
+		   (let ((default-enable-multibyte-characters t))
+		     (with-temp-buffer
+		       (insert (car name))
+		       (goto-char (point-min))
+		       (while (search-forward "\"" nil t)
+			 (when (prog2
+				   (backward-char)
+				   (zerop (% (skip-chars-backward "\\\\") 2))
+				 (goto-char (match-beginning 0)))
+			   (insert "\\"))
+			 (forward-char))
+		       ;; Those quotes will be removed by the RFC2047 encoder.
+		       (concat "\"" (buffer-string) "\"")))
+		 (car name))
+	     (nth 1 name))
+	   "'s message of \""
+	   (if (or (not date) (string= date ""))
+	       "(unknown date)" date)
+	   "\"" (if msg-id ")")))))))
 
 (defun message-make-distribution ()
   "Make a Distribution header."
@@ -5035,14 +5268,14 @@
 	   (concat message-user-path "!" login-name))
 	  (t login-name))))
 
-(defun message-make-from ()
+(defun message-make-from (&optional name address )
   "Make a From header."
   (let* ((style message-from-style)
-	 (login (message-make-address))
-	 (fullname
-	  (or (and (boundp 'user-full-name)
-		   user-full-name)
-	      (user-full-name))))
+	 (login (or address (message-make-address)))
+	 (fullname (or name
+		       (and (boundp 'user-full-name)
+			    user-full-name)
+		       (user-full-name))))
     (when (string= fullname "&")
       (setq fullname (user-login-name)))
     (with-temp-buffer
@@ -5063,15 +5296,15 @@
 		       (string-match "[\\()]" tmp)))))
 	(insert fullname)
 	(goto-char (point-min))
- 	;; Look for a character that cannot appear unquoted
- 	;; according to RFC 822.
- 	(when (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]" nil 1)
- 	  ;; Quote fullname, escaping specials.
- 	  (goto-char (point-min))
- 	  (insert "\"")
- 	  (while (re-search-forward "[\"\\]" nil 1)
- 	    (replace-match "\\\\\\&" t))
- 	  (insert "\""))
+	;; Look for a character that cannot appear unquoted
+	;; according to RFC 822.
+	(when (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]" nil 1)
+	  ;; Quote fullname, escaping specials.
+	  (goto-char (point-min))
+	  (insert "\"")
+	  (while (re-search-forward "[\"\\]" nil 1)
+	    (replace-match "\\\\\\&" t))
+	  (insert "\""))
 	(insert " <" login ">"))
        (t				; 'parens or default
 	(insert login " (")
@@ -5137,8 +5370,8 @@
 	   (stringp message-user-fqdn)
 	   (string-match message-valid-fqdn-regexp message-user-fqdn)
 	   (not (string-match message-bogus-system-names message-user-fqdn)))
+      ;; `message-user-fqdn' seems to be valid
       message-user-fqdn)
-     ;; `message-user-fqdn' seems to be valid
      ((and (string-match message-valid-fqdn-regexp system-name)
 	   (not (string-match message-bogus-system-names system-name)))
       ;; `system-name' returned the right result.
@@ -5639,7 +5872,7 @@
   "Return a new (unique) buffer name based on TYPE and TO."
   (cond
    ;; Generate a new buffer name The Message Way.
-   ((eq message-generate-new-buffers 'unique)
+   ((memq message-generate-new-buffers '(unique t))
     (generate-new-buffer-name
      (concat "*" type
 	     (if to
@@ -5663,20 +5896,51 @@
 	       "")
 	     (if (and group (not (string= group ""))) (concat " on " group) "")
 	     "*")))
-   ;; Use standard name.
+   ;; Search for the existing message buffer with the specified name.
    (t
-    (format "*%s message*" type))))
+    (let* ((new (if (eq message-generate-new-buffers 'standard)
+		    (generate-new-buffer-name (concat "*" type " message*"))
+		  (let ((message-generate-new-buffers 'unique))
+		    (message-buffer-name type to group))))
+	   (regexp (concat "\\`"
+			   (regexp-quote
+			    (if (string-match "<[0-9]+>\\'" new)
+				(substring new 0 (match-beginning 0))
+			      new))
+			   "\\(?:<\\([0-9]+\\)>\\)?\\'"))
+	   (case-fold-search nil))
+      (or (cdar
+	   (last
+	    (sort
+	     (delq nil
+		   (mapcar
+		    (lambda (b)
+		      (when (and (string-match regexp (setq b (buffer-name b)))
+				 (eq (with-current-buffer b major-mode)
+				     'message-mode))
+			(cons (string-to-number (or (match-string 1 b) "1"))
+			      b)))
+		    (buffer-list)))
+	     'car-less-than-car)))
+	  new)))))
 
 (defun message-pop-to-buffer (name)
   "Pop to buffer NAME, and warn if it already exists and is modified."
   (let ((buffer (get-buffer name)))
     (if (and buffer
 	     (buffer-name buffer))
-	(progn
-	  (set-buffer (pop-to-buffer buffer))
+	(let ((window (get-buffer-window buffer 0)))
+	  (if window
+	      ;; Raise the frame already displaying the message buffer.
+	      (progn
+		(gnus-select-frame-set-input-focus (window-frame window))
+		(select-window window))
+	    (set-buffer (pop-to-buffer buffer)))
 	  (when (and (buffer-modified-p)
-		     (not (y-or-n-p
-			   "Message already being composed; erase? ")))
+		     (not (prog1
+			      (y-or-n-p
+			       "Message already being composed; erase? ")
+			    (message nil))))
 	    (error "Message being composed")))
       (set-buffer (pop-to-buffer name)))
     (erase-buffer)
@@ -5736,7 +6000,8 @@
 	nil
       mua)))
 
-(defun message-setup (headers &optional replybuffer actions switch-function)
+(defun message-setup (headers &optional replybuffer actions
+			      continue switch-function)
   (let ((mua (message-mail-user-agent))
 	subject to field yank-action)
     (if (not (and message-this-is-mail mua))
@@ -5759,11 +6024,11 @@
 				 (format "%s" (car item))
 				 (cdr item)))
 			      headers)
-		      nil switch-function yank-action actions)))))
+		      continue switch-function yank-action actions)))))
 
 (defun message-headers-to-generate (headers included-headers excluded-headers)
   "Return a list that includes all headers from HEADERS.
-If INCLUDED-HEADERS is a list, just include those headers.  If if is
+If INCLUDED-HEADERS is a list, just include those headers.  If it is
 t, include all headers.  In any case, headers from EXCLUDED-HEADERS
 are not included."
   (let ((result nil)
@@ -5906,11 +6171,21 @@
 			       other-headers continue switch-function
 			       yank-action send-actions)
   "Start editing a mail message to be sent.
-OTHER-HEADERS is an alist of header/value pairs."
+OTHER-HEADERS is an alist of header/value pairs.  CONTINUE says whether
+to continue editing a message already being composed.  SWITCH-FUNCTION
+is a function used to switch to and display the mail buffer."
   (interactive)
   (let ((message-this-is-mail t) replybuffer)
     (unless (message-mail-user-agent)
-      (message-pop-to-buffer (message-buffer-name "mail" to)))
+      (funcall
+       (or switch-function 'message-pop-to-buffer)
+       ;; Search for the existing message buffer if `continue' is non-nil.
+       (let ((message-generate-new-buffers
+	      (when (or (not continue)
+			(eq message-generate-new-buffers 'standard)
+			(functionp message-generate-new-buffers))
+		message-generate-new-buffers)))
+	 (message-buffer-name "mail" to))))
     ;; FIXME: message-mail should do something if YANK-ACTION is not
     ;; insert-buffer.
     (and (consp yank-action) (eq (car yank-action) 'insert-buffer)
@@ -5919,7 +6194,7 @@
      (nconc
       `((To . ,(or to "")) (Subject . ,(or subject "")))
       (when other-headers other-headers))
-     replybuffer send-actions)
+     replybuffer send-actions continue switch-function)
     ;; FIXME: Should return nil if failure.
     t))
 
@@ -5934,7 +6209,7 @@
 
 (defun message-get-reply-headers (wide &optional to-address address-headers)
   (let (follow-to mct never-mct to cc author mft recipients extra)
-    ;; Find all relevant headers we need.
+  ;; Find all relevant headers we need.
     (save-restriction
       (message-narrow-to-headers-or-head)
       ;; Gmane renames "To".  Look at "Original-To", too, if it is present in
@@ -6023,7 +6298,7 @@
       (while (string-match "[ \t][ \t]+" recipients)
 	(setq recipients (replace-match " " t t recipients)))
       ;; Remove addresses that match `rmail-dont-reply-to-names'.
-      (let ((rmail-dont-reply-to-names message-dont-reply-to-names))
+      (let ((rmail-dont-reply-to-names (message-dont-reply-to-names)))
 	(setq recipients (rmail-dont-reply-to recipients)))
       ;; Perhaps "Mail-Copies-To: never" removed the only address?
       (if (string-equal recipients "")
@@ -6069,6 +6344,39 @@
 	(push (cons 'Cc recipients) follow-to)))
     follow-to))
 
+(defcustom message-simplify-subject-functions
+  '(message-strip-list-identifiers
+    message-strip-subject-re
+    message-strip-subject-trailing-was
+    message-strip-subject-encoded-words)
+  "List of functions taking a string argument that simplify subjects.
+The functions are applied when replying to a message.
+
+Useful functions to put in this list include:
+`message-strip-list-identifiers', `message-strip-subject-re',
+`message-strip-subject-trailing-was', and
+`message-strip-subject-encoded-words'."
+  :version "22.1" ;; Gnus 5.10.9
+  :group 'message-various
+  :type '(repeat function))
+
+(defun message-simplify-subject (subject &optional functions)
+  "Return simplified SUBJECT."
+  (unless functions
+    ;; Simplify fully:
+    (setq functions message-simplify-subject-functions))
+  (when (and (memq 'message-strip-list-identifiers functions)
+	     gnus-list-identifiers)
+    (setq subject (message-strip-list-identifiers subject)))
+  (when (memq 'message-strip-subject-re functions)
+    (setq subject (concat "Re: " (message-strip-subject-re subject))))
+  (when (and (memq 'message-strip-subject-trailing-was functions)
+	     message-subject-trailing-was-query)
+    (setq subject (message-strip-subject-trailing-was subject)))
+  (when (memq 'message-strip-subject-encoded-words functions)
+    (setq subject (message-strip-subject-encoded-words subject)))
+  subject)
+
 ;;;###autoload
 (defun message-reply (&optional to-address wide)
   "Start editing a reply to the article in the current buffer."
@@ -6096,13 +6404,11 @@
       (setq message-id (message-fetch-field "message-id" t)
 	    references (message-fetch-field "references")
 	    date (message-fetch-field "date")
-	    from (message-fetch-field "from")
+	    from (or (message-fetch-field "from") "nobody")
 	    subject (or (message-fetch-field "subject") "none"))
-      (when gnus-list-identifiers
-	(setq subject (message-strip-list-identifiers subject)))
-      (setq subject (concat "Re: " (message-strip-subject-re subject)))
-      (when message-subject-trailing-was-query
-	(setq subject (message-strip-subject-trailing-was subject)))
+
+      ;; Strip list identifiers, "Re: ", and "was:"
+      (setq subject (message-simplify-subject subject))
 
       (when (and (setq gnus-warning (message-fetch-field "gnus-warning"))
 		 (string-match "<[^>]+>" gnus-warning))
@@ -6172,11 +6478,8 @@
 		 (let ((case-fold-search t))
 		   (string-match "world" distribution)))
 	(setq distribution nil))
-      (if gnus-list-identifiers
-	  (setq subject (message-strip-list-identifiers subject)))
-      (setq subject (concat "Re: " (message-strip-subject-re subject)))
-      (when message-subject-trailing-was-query
-	(setq subject (message-strip-subject-trailing-was subject)))
+      ;; Strip list identifiers, "Re: ", and "was:"
+      (setq subject (message-simplify-subject subject))
       (widen))
 
     (message-pop-to-buffer (message-buffer-name "followup" from newsgroups))
@@ -6614,6 +6917,62 @@
       (message-forward-make-body-digest-mime forward-buffer)
     (message-forward-make-body-digest-plain forward-buffer)))
 
+(eval-and-compile
+  (autoload 'mm-uu-dissect-text-parts "mm-uu")
+  (autoload 'mm-uu-dissect "mm-uu"))
+
+(defun message-signed-or-encrypted-p (&optional dont-emulate-mime handles)
+  "Say whether the current buffer contains signed or encrypted message.
+If DONT-EMULATE-MIME is nil, this function does the MIME emulation on
+messages that don't conform to PGP/MIME described in RFC2015.  HANDLES
+is for the internal use."
+  (unless handles
+    (let ((mm-decrypt-option 'never)
+	  (mm-verify-option 'never))
+      (if (setq handles (mm-dissect-buffer nil t))
+	  (unless dont-emulate-mime
+	    (mm-uu-dissect-text-parts handles))
+	(unless dont-emulate-mime
+	  (setq handles (mm-uu-dissect))))))
+  ;; Check text/plain message in which there is a signed or encrypted
+  ;; body that has been encoded by B or Q.
+  (unless (or handles dont-emulate-mime)
+    (let ((cur (current-buffer))
+	  (mm-decrypt-option 'never)
+	  (mm-verify-option 'never))
+      (with-temp-buffer
+	(insert-buffer-substring cur)
+	(when (setq handles (mm-dissect-buffer t t))
+	  (if (and (prog1
+		       (bufferp (car handles))
+		     (mm-destroy-parts handles))
+		   (equal (mm-handle-media-type handles) "text/plain"))
+	      (progn
+		(mm-decode-content-transfer-encoding
+		 (mm-handle-encoding handles))
+		(setq handles (mm-uu-dissect)))
+	    (setq handles nil))))))
+  (when handles
+    (prog1
+	(catch 'found
+	  (dolist (handle (if (stringp (car handles))
+			      (if (member (car handles)
+					  '("multipart/signed"
+					    "multipart/encrypted"))
+				  (throw 'found t)
+				(cdr handles))
+			    (list handles)))
+	    (if (stringp (car handle))
+		(when (message-signed-or-encrypted-p dont-emulate-mime handle)
+		  (throw 'found t))
+	      (when (and (bufferp (car handle))
+			 (equal (mm-handle-media-type handle)
+				"message/rfc822"))
+		(with-current-buffer (mm-handle-buffer handle)
+		  (when (message-signed-or-encrypted-p dont-emulate-mime)
+		    (throw 'found t)))))))
+      (mm-destroy-parts handles))))
+
 ;;;###autoload
 (defun message-forward-make-body (forward-buffer &optional digest)
   ;; Put point where we want it before inserting the forwarded
@@ -6626,11 +6985,13 @@
     (if message-forward-as-mime
 	(if (and message-forward-show-mml
 		 (not (and (eq message-forward-show-mml 'best)
+			   ;; Use the raw form in the body if it contains
+			   ;; signed or encrypted message so as not to be
+			   ;; destroyed by re-encoding.
 			   (with-current-buffer forward-buffer
-			     (goto-char (point-min))
-			     (re-search-forward
-			      "Content-Type: *multipart/\\(signed\\|encrypted\\)"
-			      nil t)))))
+			     (condition-case nil
+				 (message-signed-or-encrypted-p)
+			       (error t))))))
 	    (message-forward-make-body-mml forward-buffer)
 	  (message-forward-make-body-mime forward-buffer))
       (message-forward-make-body-plain forward-buffer)))
@@ -6747,7 +7108,7 @@
 	(goto-char boundary)
 	(when (re-search-backward "^.?From .*\n" nil t)
 	  (delete-region (match-beginning 0) (match-end 0)))))
-    (mm-enable-multibyte)
+    (mime-to-mml)
     (save-restriction
       (message-narrow-to-head-1)
       (message-remove-header message-ignored-bounced-headers t)
@@ -6772,7 +7133,7 @@
       (message-pop-to-buffer (message-buffer-name "mail" to))))
   (let ((message-this-is-mail t))
     (message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))
-		   nil nil 'switch-to-buffer-other-window)))
+		   nil nil nil 'switch-to-buffer-other-window)))
 
 ;;;###autoload
 (defun message-mail-other-frame (&optional to subject)
@@ -6787,7 +7148,7 @@
       (message-pop-to-buffer (message-buffer-name "mail" to))))
   (let ((message-this-is-mail t))
     (message-setup `((To . ,(or to "")) (Subject . ,(or subject "")))
-		   nil nil 'switch-to-buffer-other-frame)))
+		   nil nil nil 'switch-to-buffer-other-frame)))
 
 ;;;###autoload
 (defun message-news-other-window (&optional newsgroups subject)
@@ -7318,7 +7679,7 @@
 
 (defun message-put-addresses-in-ecomplete ()
   (dolist (header '("to" "cc" "from" "reply-to"))
-    (let ((value (message-fetch-field header)))
+    (let ((value (message-field-value header)))
       (dolist (string (mail-header-parse-addresses value 'raw))
 	(setq string
 	      (gnus-replace-in-string
Index: gnus/lisp/messcompat.el
diff -u gnus/lisp/messcompat.el:7.5 gnus/lisp/messcompat.el:7.7
--- gnus/lisp/messcompat.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/messcompat.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; messcompat.el --- making message mode compatible with mail mode
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: mail, news
Index: gnus/lisp/mm-bodies.el
diff -u gnus/lisp/mm-bodies.el:7.13 gnus/lisp/mm-bodies.el:7.14
--- gnus/lisp/mm-bodies.el:7.13	Thu Jan 19 07:01:23 2006
+++ gnus/lisp/mm-bodies.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mm-bodies.el --- Functions for decoding MIME things
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	MORIOKA Tomohiko <[email protected]>
Index: gnus/lisp/mm-decode.el
diff -u gnus/lisp/mm-decode.el:7.45 gnus/lisp/mm-decode.el:7.50
--- gnus/lisp/mm-decode.el:7.45	Wed Apr 26 14:31:41 2006
+++ gnus/lisp/mm-decode.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mm-decode.el --- Functions for decoding MIME things
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	MORIOKA Tomohiko <[email protected]>
@@ -562,7 +562,7 @@
 	   description)
 	(setq type (split-string (car ctl) "/"))
 	(setq subtype (cadr type)
-	      type (pop type))
+	      type (car type))
 	(setq
 	 result
 	 (cond
@@ -639,16 +639,15 @@
 
 (defun mm-copy-to-buffer ()
   "Copy the contents of the current buffer to a fresh buffer."
-  (save-excursion
     (let ((obuf (current-buffer))
 	  beg)
       (goto-char (point-min))
       (search-forward-regexp "^\n" nil t)
       (setq beg (point))
-      (set-buffer
+    (with-current-buffer
        ;; Preserve the data's unibyteness (for url-insert-file-contents).
        (let ((default-enable-multibyte-characters (mm-multibyte-p)))
-	 (generate-new-buffer " *mm*")))
+          (generate-new-buffer " *mm*"))
       (insert-buffer-substring obuf beg)
       (current-buffer))))
 
@@ -699,7 +698,8 @@
 		  (forward-line 1)
 		  (mm-insert-inline handle (mm-get-part handle))
 		  'inline)
-	      (if (and method ;; If nil, we always use "save".
+	      (setq external
+                    (and method ;; If nil, we always use "save".
 		       (stringp method) ;; 'mailcap-save-binary-file
 		       (or (eq mm-enable-external t)
 			   (and (eq mm-enable-external 'ask)
@@ -712,9 +712,7 @@
 				      (concat
 				       " \"" (format method filename) "\"")
 				    "")
-				  "? ")))))
-		  (setq external t)
-		(setq external nil))
+                                    "? "))))))
 	      (if external
 		  (mm-display-external
 		   handle (or method 'mailcap-save-binary-file))
@@ -883,13 +881,21 @@
 			  ;; a vector in Emacs but is a list in XEmacs)
 			  ;; requires that it is lexically scoped.
 			  (timer (run-at-time 2.0 nil 'ignore)))
-		       (lambda (process state)
-			 (when (eq 'exit (process-status process))
-			   (if (memq timer timer-list)
-			       (timer-set-function timer fn)
-			     (funcall fn))
-			   (ignore-errors (eval fm))
-			   (message "%s" done))))))
+		       (if (boundp 'itimer-list)
+			   (lambda (process state)
+			     (when (eq 'exit (process-status process))
+			       (if (memq timer itimer-list)
+				   (set-itimer-function timer fn)
+				 (funcall fn))
+			       (ignore-errors (eval fm))
+			       (message "%s" done)))
+			 (lambda (process state)
+			   (when (eq 'exit (process-status process))
+			     (if (memq timer timer-list)
+				 (timer-set-function timer fn)
+			       (funcall fn))
+			     (ignore-errors (eval fm))
+			     (message "%s" done)))))))
 		(mm-handle-set-external-undisplayer
 		 handle (cons file buffer)))
 	      (message "Displaying %s..." command))
@@ -1017,10 +1023,12 @@
 	      methods nil)))
     result))
 
-(defun mm-inlinable-p (handle)
-  "Say whether HANDLE can be displayed inline."
+(defun mm-inlinable-p (handle &optional type)
+  "Say whether HANDLE can be displayed inline.
+TYPE is the mime-type of the object; it defaults to the one given
+in HANDLE."
+  (unless type (setq type (mm-handle-media-type handle)))
   (let ((alist mm-inline-media-tests)
-	(type (mm-handle-media-type handle))
 	test)
     (while alist
       (when (string-match (caar alist) type)
@@ -1133,7 +1141,7 @@
 	    (with-current-buffer (mm-handle-buffer handle)
 	      (buffer-string)))
 	   ((mm-multibyte-p)
-	    (mm-string-as-multibyte (mm-get-part handle no-cache)))
+	    (mm-string-to-multibyte (mm-get-part handle no-cache)))
 	   (t
 	    (mm-get-part handle no-cache))))))
 
@@ -1202,17 +1210,13 @@
 (defun mm-save-part-to-file (handle file)
   (mm-with-unibyte-buffer
     (mm-insert-part handle)
-    (let ((coding-system-for-write 'binary)
-	  (current-file-modes (default-file-modes))
+    (let ((current-file-modes (default-file-modes)))
+      (set-default-file-modes mm-attachment-file-modes)
+      (unwind-protect
 	  ;; Don't re-compress .gz & al.  Arguably we should make
 	  ;; `file-name-handler-alist' nil, but that would chop
 	  ;; ange-ftp, which is reasonable to use here.
-	  (inhibit-file-name-operation 'write-region)
-	  (inhibit-file-name-handlers
-	   (cons 'jka-compr-handler inhibit-file-name-handlers)))
-      (set-default-file-modes mm-attachment-file-modes)
-      (unwind-protect
-	  (write-region (point-min) (point-max) file)
+	  (mm-write-region (point-min) (point-max) file nil nil nil 'binary t)
 	(set-default-file-modes current-file-modes)))))
 
 (defun mm-pipe-part (handle)
Index: gnus/lisp/mm-encode.el
diff -u gnus/lisp/mm-encode.el:7.9 gnus/lisp/mm-encode.el:7.10
--- gnus/lisp/mm-encode.el:7.9	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/mm-encode.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mm-encode.el --- Functions for encoding MIME things
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	MORIOKA Tomohiko <[email protected]>
Index: gnus/lisp/mm-extern.el
diff -u gnus/lisp/mm-extern.el:7.9 gnus/lisp/mm-extern.el:7.11
--- gnus/lisp/mm-extern.el:7.9	Wed Apr 12 04:00:49 2006
+++ gnus/lisp/mm-extern.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mm-extern.el --- showing message/external-body
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: message external-body
@@ -97,7 +97,7 @@
 	 (subject (or (cdr (assq 'subject params)) "none"))
 	 (buf (current-buffer))
 	 info)
-    (if (y-or-n-p (format "Send a request message to %s?" server))
+    (if (y-or-n-p (format "Send a request message to %s? " server))
 	(save-window-excursion
 	  (message-mail server subject)
 	  (message-goto-body)
Index: gnus/lisp/mm-partial.el
diff -u gnus/lisp/mm-partial.el:7.6 gnus/lisp/mm-partial.el:7.7
--- gnus/lisp/mm-partial.el:7.6	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/mm-partial.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mm-partial.el --- showing message/partial
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: message partial
Index: gnus/lisp/mm-url.el
diff -u gnus/lisp/mm-url.el:7.15 gnus/lisp/mm-url.el:7.18
--- gnus/lisp/mm-url.el:7.15	Sun Apr 30 11:44:06 2006
+++ gnus/lisp/mm-url.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,6 @@
 ;;; mm-url.el --- a wrapper of url functions/commands for Gnus
 
-;; Copyright (C) 2001, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 
@@ -57,7 +56,7 @@
   '((wget "wget" "--user-agent=mm-url" "-q" "-O" "-")
     (w3m  "w3m" "-dump_source")
     (lynx "lynx" "-source")
-    (curl "curl" "--silent" "--user-agent mm-url" "--location")))
+    (curl "curl" "--silent" "--user-agent" "mm-url" "--location")))
 
 (defcustom mm-url-program
   (cond
@@ -294,6 +293,13 @@
 	(list url (buffer-size)))
     (mm-url-load-url)
     (let ((name buffer-file-name)
+	  (url-request-extra-headers
+	   ;; ISTM setting a Connection header was a workaround for
+	   ;; older versions of url included with w3, but it does more
+	   ;; harm than good with the one shipped with Emacs. --ansel
+	   (if (not (and (boundp 'url-version)
+			 (equal url-version "Emacs")))
+	       (list (cons "Connection" "Close"))))
 	  (url-package-name (or mm-url-package-name
 				url-package-name))
 	  (url-package-version (or mm-url-package-version
Index: gnus/lisp/mm-util.el
diff -u gnus/lisp/mm-util.el:7.51 gnus/lisp/mm-util.el:7.65
--- gnus/lisp/mm-util.el:7.51	Sun Apr 30 11:44:06 2006
+++ gnus/lisp/mm-util.el	Fri Apr 27 00:42:47 2007
@@ -1,7 +1,7 @@
 ;;; mm-util.el --- Utility functions for Mule and low level things
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	MORIOKA Tomohiko <[email protected]>
@@ -100,12 +100,6 @@
      ;; (string-to-multibyte s)   ~= (decode-coding-string s 'binary)
      ;; (string-make-multibyte s) ~= (decode-coding-string s locale-coding-system)
      (string-as-multibyte . identity)
-     (string-to-multibyte
-      . (lambda (string)
-	  "Return a multibyte string with the same individual chars as string."
-	  (mapconcat
-	   (lambda (ch) (mm-string-as-multibyte (char-to-string ch)))
-	   string "")))
      (multibyte-string-p . ignore)
      (insert-byte . insert-char)
      (multibyte-char-to-unibyte . identity)
@@ -125,6 +119,19 @@
 			    (string-match (car elem) buffer-name)
 			    (throw 'return (cdr elem))))))))))))
 
+(defalias 'mm-string-to-multibyte
+  (cond
+   ((featurep 'xemacs)
+    'identity)
+   ((fboundp 'string-to-multibyte)
+    'string-to-multibyte)
+   (t
+    (lambda (string)
+      "Return a multibyte string with the same individual chars as string."
+      (mapconcat
+       (lambda (ch) (mm-string-as-multibyte (char-to-string ch)))
+       string "")))))
+
 (eval-and-compile
   (defalias 'mm-char-or-char-int-p
     (cond
@@ -201,39 +208,150 @@
   `(
     ;; Not in XEmacs, but it's not a proper MIME charset anyhow.
     ,@(unless (mm-coding-system-p 'x-ctext)
-       '((x-ctext . ctext)))
-    ;; ISO-8859-15 is very similar to ISO-8859-1.  But it's _different_!
+	'((x-ctext . ctext)))
+    ;; ISO-8859-15 is very similar to ISO-8859-1.  But it's _different_ in 8
+    ;; positions!
     ,@(unless (mm-coding-system-p 'iso-8859-15)
-       '((iso-8859-15 . iso-8859-1)))
+	'((iso-8859-15 . iso-8859-1)))
     ;; BIG-5HKSCS is similar to, but different than, BIG-5.
     ,@(unless (mm-coding-system-p 'big5-hkscs)
 	'((big5-hkscs . big5)))
-    ;; Windows-1252 is actually a superset of Latin-1.  See also
-    ;; `gnus-article-dumbquotes-map'.
-    ,@(unless (mm-coding-system-p 'windows-1252)
-       (if (mm-coding-system-p 'cp1252)
-	   '((windows-1252 . cp1252))
-	 '((windows-1252 . iso-8859-1))))
-    ;; Windows-1250 is a variant of Latin-2 heavily used by Microsoft
-    ;; Outlook users in Czech republic. Use this to allow reading of their
-    ;; e-mails. cp1250 should be defined by M-x codepage-setup.
-    ,@(if (and (not (mm-coding-system-p 'windows-1250))
-	       (mm-coding-system-p 'cp1250))
-	  '((windows-1250 . cp1250)))
     ;; A Microsoft misunderstanding.
-    ,@(if (and (not (mm-coding-system-p 'unicode))
-	       (mm-coding-system-p 'utf-16-le))
-	  '((unicode . utf-16-le)))
+    ,@(when (and (not (mm-coding-system-p 'unicode))
+		 (mm-coding-system-p 'utf-16-le))
+	'((unicode . utf-16-le)))
     ;; A Microsoft misunderstanding.
     ,@(unless (mm-coding-system-p 'ks_c_5601-1987)
 	(if (mm-coding-system-p 'cp949)
 	    '((ks_c_5601-1987 . cp949))
 	  '((ks_c_5601-1987 . euc-kr))))
+    ;; Windows-31J is Windows Codepage 932.
+    ,@(when (and (not (mm-coding-system-p 'windows-31j))
+		 (mm-coding-system-p 'cp932))
+	'((windows-31j . cp932)))
+    ;; ISO8859-1 is ISO-8859-1
+    ,@(when (and (not (mm-coding-system-p 'iso8859-1))
+		 (mm-coding-system-p 'iso-8859-1))
+	'((iso8859-1 . iso-8859-1)))
     )
-  "A mapping from unknown or invalid charset names to the real charset names.")
+  "A mapping from unknown or invalid charset names to the real charset names.
+
+See `mm-codepage-iso-8859-list' and `mm-codepage-ibm-list'.")
+
+(defcustom mm-codepage-iso-8859-list
+  (list 1250 ;; Windows-1250 is a variant of Latin-2 heavily used by Microsoft
+	;; Outlook users in Czech republic.  Use this to allow reading of
+	;; their e-mails.  cp1250 should be defined by M-x codepage-setup
+	;; (Emacs 21).
+	'(1252 . 1) ;; Windows-1252 is a superset of iso-8859-1 (West
+	            ;; Europe).  See also `gnus-article-dumbquotes-map'.
+	'(1254 . 9) ;; Windows-1254 is a superset of iso-8859-9 (Turkish).
+	'(1255 . 8));; Windows-1255 is a superset of iso-8859-8 (Hebrew).
+  "A list of Windows codepage numbers and iso-8859 charset numbers.
+
+If an element is a number corresponding to a supported windows
+codepage, appropriate entries to `mm-charset-synonym-alist' are
+added by `mm-setup-codepage-iso-8859'.  An element may also be a
+cons cell where the car is a codepage number and the cdr is the
+corresponding number of an iso-8859 charset."
+  :type '(list (set :inline t
+		    (const 1250 :tag "Central and East European")
+		    (const (1252 . 1) :tag "West European")
+		    (const (1254 . 9) :tag "Turkish")
+		    (const (1255 . 8) :tag "Hebrew"))
+	       (repeat :inline t
+		       :tag "Other options"
+		       (choice
+			(integer :tag "Windows codepage number")
+			(cons (integer :tag "Windows codepage number")
+			      (integer :tag "iso-8859 charset  number")))))
+  :version "22.1" ;; Gnus 5.10.9
+  :group 'mime)
+
+(defcustom mm-codepage-ibm-list
+  (list 437 ;; (US etc.)
+	860 ;; (Portugal)
+	861 ;; (Iceland)
+	862 ;; (Israel)
+	863 ;; (Canadian French)
+	865 ;; (Nordic)
+	852 ;;
+	850 ;; (Latin 1)
+	855 ;; (Cyrillic)
+	866 ;; (Cyrillic - Russian)
+	857 ;; (Turkish)
+	864 ;; (Arabic)
+	869 ;; (Greek)
+	874);; (Thai)
+  ;; In Emacs 23 (unicode), cp... and ibm... are aliases.
+  ;; Cf. http://thread.gmane.org/[email protected]
+  "List of IBM codepage numbers.
+
+The codepage mappings slighly differ between IBM and other vendors.
+See \"ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/IBM/README.TXT\".
+
+If an element is a number corresponding to a supported windows
+codepage, appropriate entries to `mm-charset-synonym-alist' are
+added by `mm-setup-codepage-ibm'."
+  :type '(list (set :inline t
+		    (const 437 :tag "US etc.")
+		    (const 860 :tag "Portugal")
+		    (const 861 :tag "Iceland")
+		    (const 862 :tag "Israel")
+		    (const 863 :tag "Canadian French")
+		    (const 865 :tag "Nordic")
+		    (const 852)
+		    (const 850 :tag "Latin 1")
+		    (const 855 :tag "Cyrillic")
+		    (const 866 :tag "Cyrillic - Russian")
+		    (const 857 :tag "Turkish")
+		    (const 864 :tag "Arabic")
+		    (const 869 :tag "Greek")
+		    (const 874 :tag "Thai"))
+	       (repeat :inline t
+		       :tag "Other options"
+		       (integer :tag "Codepage number")))
+  :version "22.1" ;; Gnus 5.10.9
+  :group 'mime)
+
+(defun mm-setup-codepage-iso-8859 (&optional list)
+  "Add appropriate entries to `mm-charset-synonym-alist'.
+Unless LIST is given, `mm-codepage-iso-8859-list' is used."
+  (unless list
+    (setq list mm-codepage-iso-8859-list))
+  (dolist (i list)
+    (let (cp windows iso)
+      (if (consp i)
+	  (setq cp (intern (format "cp%d" (car i)))
+		windows (intern (format "windows-%d" (car i)))
+		iso (intern (format "iso-8859-%d" (cdr i))))
+	(setq cp (intern (format "cp%d" i))
+	      windows (intern (format "windows-%d" i))))
+      (unless (mm-coding-system-p windows)
+	(if (mm-coding-system-p cp)
+	    (add-to-list 'mm-charset-synonym-alist (cons windows cp))
+	  (add-to-list 'mm-charset-synonym-alist (cons windows iso)))))))
+
+(defun mm-setup-codepage-ibm (&optional list)
+  "Add appropriate entries to `mm-charset-synonym-alist'.
+Unless LIST is given, `mm-codepage-ibm-list' is used."
+  (unless list
+    (setq list mm-codepage-ibm-list))
+  (dolist (number list)
+    (let ((ibm (intern (format "ibm%d" number)))
+	  (cp  (intern (format "cp%d" number))))
+      (when (and (not (mm-coding-system-p ibm))
+		 (mm-coding-system-p cp))
+	(add-to-list 'mm-charset-synonym-alist (cons ibm cp))))))
+
+;; Initialize:
+(mm-setup-codepage-iso-8859)
+(mm-setup-codepage-ibm)
 
 (defcustom mm-charset-override-alist
-  `((iso-8859-1 . windows-1252))
+  '((iso-8859-1 . windows-1252)
+    (iso-8859-8 . windows-1255)
+    (iso-8859-9 . windows-1254))
   "A mapping from undesired charset names to their replacement.
 
 You may add pairs like (iso-8859-1 . windows-1252) here,
@@ -241,12 +359,14 @@
 superset of iso-8859-1."
   :type '(list (set :inline t
 		    (const (iso-8859-1 . windows-1252))
+		    (const (iso-8859-8 . windows-1255))
+		    (const (iso-8859-9 . windows-1254))
 		    (const (undecided  . windows-1252)))
 	       (repeat :inline t
 		       :tag "Other options"
 		       (cons (symbol :tag "From charset")
 			     (symbol :tag "To charset"))))
-  :version "23.0" ;; No Gnus
+  :version "22.1" ;; Gnus 5.10.9
   :group 'mime)
 
 (defcustom mm-charset-eval-alist
@@ -263,7 +383,7 @@
 evaluated.  This allows to load additional libraries providing
 charsets on demand.  If supported by your Emacs version, you
 could use `autoload-coding-system' here."
-  :version "23.0" ;; No Gnus
+  :version "22.1" ;; Gnus 5.10.9
   :type '(list (set :inline t
 		    (const (windows-1250 . (mm-codepage-setup 1250 t)))
 		    (const (windows-1251 . (mm-codepage-setup 1251 t)))
@@ -361,14 +481,17 @@
     (iso-2022-jp-3 latin-jisx0201 japanese-jisx0208-1978 japanese-jisx0208
 		   japanese-jisx0213-1 japanese-jisx0213-2)
     (shift_jis latin-jisx0201 katakana-jisx0201 japanese-jisx0208)
-    ,(if (or (not (fboundp 'charsetp)) ;; non-Mule case
-	     (charsetp 'unicode-a)
-	     (not (mm-coding-system-p 'mule-utf-8)))
-	 '(utf-8 unicode-a unicode-b unicode-c unicode-d unicode-e)
-       ;; If we have utf-8 we're in Mule 5+.
-       (append '(utf-8)
-	       (delete 'ascii
-		       (coding-system-get 'mule-utf-8 'safe-charsets)))))
+    ,(cond ((fboundp 'unicode-precedence-list)
+	    (cons 'utf-8 (delq 'ascii (mapcar 'charset-name
+					      (unicode-precedence-list)))))
+	   ((or (not (fboundp 'charsetp)) ;; non-Mule case
+		(charsetp 'unicode-a)
+		(not (mm-coding-system-p 'mule-utf-8)))
+	    '(utf-8 unicode-a unicode-b unicode-c unicode-d unicode-e))
+	   (t ;; If we have utf-8 we're in Mule 5+.
+	    (append '(utf-8)
+		    (delete 'ascii
+			    (coding-system-get 'mule-utf-8 'safe-charsets))))))
   "Alist of MIME-charset/MULE-charsets.")
 
 (defun mm-enrich-utf-8-by-mule-ucs ()
@@ -376,10 +499,6 @@
 This function will run when the `un-define' module is loaded under
 XEmacs, and fill the `utf-8' entry in `mm-mime-mule-charset-alist'
 with Mule charsets.  It is completely useless for Emacs."
-  (unless (cdr (delete '(mm-enrich-utf-8-by-mule-ucs)
-		       (assoc "un-define" after-load-alist)))
-    (setq after-load-alist
-	  (delete '("un-define") after-load-alist)))
   (when (boundp 'unicode-basic-translation-charset-order-list)
     (condition-case nil
 	(let ((val (delq
@@ -983,7 +1102,7 @@
     (nreverse out)))
 
 (defvar mm-inhibit-file-name-handlers
-  '(jka-compr-handler image-file-handler)
+  '(jka-compr-handler image-file-handler epa-file-handler)
   "A list of handlers doing (un)compression (etc) thingies.")
 
 (defun mm-insert-file-contents (filename &optional visit beg end replace
@@ -1102,15 +1221,11 @@
 			     (setq file (concat file suffix)))
 			 (if dir-flag
 			     (make-directory file)
-			   (if (featurep 'xemacs)
-			       ;; NOTE: This is unsafe if XEmacs users
-			       ;; don't use a secure temp directory.
-			       (if (file-exists-p file)
-				   (signal 'file-already-exists
-					   (list "File exists" file))
-				 (write-region "" nil file nil 'silent))
-			     (write-region "" nil file nil 'silent
-					   nil 'excl)))
+			   ;; NOTE: This is unsafe if Emacs 20
+			   ;; users and XEmacs users don't use
+			   ;; a secure temp directory.
+			   (gmm-write-region "" nil file nil 'silent
+					     nil 'excl))
 			 nil)
 		     (file-already-exists t)
 		     ;; The XEmacs version of `make-directory' issues
Index: gnus/lisp/mm-uu.el
diff -u gnus/lisp/mm-uu.el:7.40 gnus/lisp/mm-uu.el:7.43
--- gnus/lisp/mm-uu.el:7.40	Fri Apr 28 07:17:40 2006
+++ gnus/lisp/mm-uu.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; mm-uu.el --- Return uu stuff as mm handles
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: postscript uudecode binhex shar forward gnatsweb pgp
@@ -482,8 +482,16 @@
 	   mm-security-handle 'gnus-details
 	   (format "Clear verification not supported by `%s'.\n" mml2015-use))))
       (goto-char (point-min))
-      (if (search-forward "\n\n" nil t)
-	  (delete-region (point-min) (point)))
+      (forward-line)
+      ;; We need to be careful not to strip beyond the armor headers.
+      ;; Previously, an attacker could replace the text inside our
+      ;; markup with trailing garbage by injecting whitespace into the
+      ;; message.
+      (while (looking-at "Hash:") ; The only header allowed in cleartext
+	(forward-line))		  ; signatures according to RFC2440.
+      (when (looking-at "[\t ]*$")
+	(forward-line))
+      (delete-region (point-min) (point))
       (if (re-search-forward mm-uu-pgp-beginning-signature nil t)
 	  (delete-region (match-beginning 0) (point-max)))
       (goto-char (point-min))
Index: gnus/lisp/mm-view.el
diff -u gnus/lisp/mm-view.el:7.42 gnus/lisp/mm-view.el:7.48
--- gnus/lisp/mm-view.el:7.42	Thu Apr 20 00:17:04 2006
+++ gnus/lisp/mm-view.el	Thu Apr 19 12:08:11 2007
@@ -1,7 +1,7 @@
 ;;; mm-view.el --- functions for viewing MIME objects
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; This file is part of GNU Emacs.
@@ -30,13 +30,14 @@
 (require 'mailcap)
 (require 'mm-bodies)
 (require 'mm-decode)
+(require 'smime)
 
 (eval-and-compile
   (autoload 'gnus-article-prepare-display "gnus-art")
   (autoload 'vcard-parse-string "vcard")
   (autoload 'vcard-format-string "vcard")
   (autoload 'fill-flowed "flow-fill")
-  (autoload 'html2text "html2text"))
+  (autoload 'html2text "html2text" nil t))
 
 (defvar gnus-article-mime-handles)
 (defvar gnus-newsgroup-charset)
@@ -236,7 +237,8 @@
   (mm-setup-w3m)
   (let ((text (mm-get-part handle))
 	(b (point))
-	(charset (mail-content-type-get (mm-handle-type handle) 'charset)))
+	(charset (or (mail-content-type-get (mm-handle-type handle) 'charset)
+		     mail-parse-charset)))
     (save-excursion
       (insert (if charset (mm-decode-string text charset) text))
       (save-restriction
@@ -300,7 +302,9 @@
   "Render a text/html part using w3m."
   (if (mm-w3m-standalone-supports-m17n-p)
       (let ((source (mm-get-part handle))
-	    (charset (mail-content-type-get (mm-handle-type handle) 'charset))
+	    (charset (or (mail-content-type-get (mm-handle-type handle)
+						'charset)
+			 (symbol-name mail-parse-charset)))
 	    cs)
 	(unless (and charset
 		     (setq cs (mm-charset-to-coding-system charset))
@@ -366,7 +370,8 @@
 
 (defun mm-inline-render-with-function (handle func &rest args)
   (let ((source (mm-get-part handle))
-	(charset (mail-content-type-get (mm-handle-type handle) 'charset)))
+	(charset (or (mail-content-type-get (mm-handle-type handle) 'charset)
+		     mail-parse-charset)))
     (mm-insert-inline
      handle
      (mm-with-multibyte-buffer
Index: gnus/lisp/mml-sec.el
diff -u gnus/lisp/mml-sec.el:7.11 gnus/lisp/mml-sec.el:7.16
--- gnus/lisp/mml-sec.el:7.11	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/mml-sec.el	Tue Mar  6 06:16:37 2007
@@ -1,7 +1,7 @@
 ;;; mml-sec.el --- A package with security functions for MML documents
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 
@@ -26,14 +26,20 @@
 
 ;;; Code:
 
-(require 'mml-smime)
 (eval-when-compile (require 'cl))
+(require 'password)
 (autoload 'mml2015-sign "mml2015")
 (autoload 'mml2015-encrypt "mml2015")
 (autoload 'mml1991-sign "mml1991")
 (autoload 'mml1991-encrypt "mml1991")
 (autoload 'message-goto-body "message")
 (autoload 'mml-insert-tag "mml")
+(autoload 'mml-smime-sign "mml-smime")
+(autoload 'mml-smime-encrypt "mml-smime")
+(autoload 'mml-smime-sign-query "mml-smime")
+(autoload 'mml-smime-encrypt-query "mml-smime")
+(autoload 'mml-smime-verify "mml-smime")
+(autoload 'mml-smime-verify-test "mml-smime")
 
 (defvar mml-sign-alist
   '(("smime"     mml-smime-sign-buffer     mml-smime-sign-query)
@@ -95,6 +101,23 @@
 			       (string :tag "User defined"))
 		       (choice (const :tag "Separate" separate)
 			       (const :tag "Combined" combined)))))
+
+(defcustom mml-secure-verbose nil
+  "If non-nil, ask the user about the current operation more verbosely."
+  :group 'message
+  :type 'boolean)
+
+(defcustom mml-secure-cache-passphrase password-cache
+  "If t, cache passphrase."
+  :group 'message
+  :type 'boolean)
+
+(defcustom mml-secure-passphrase-cache-expiry password-cache-expiry
+  "How many seconds the passphrase is cached.
+Whether the passphrase is cached at all is controlled by
+`mml-secure-cache-passphrase'."
+  :group 'message
+  :type 'integer)
 
 ;;; Configuration/helper functions
 
Index: gnus/lisp/mml-smime.el
diff -u gnus/lisp/mml-smime.el:7.12 gnus/lisp/mml-smime.el:7.17
--- gnus/lisp/mml-smime.el:7.12	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/mml-smime.el	Tue Mar  6 06:57:07 2007
@@ -1,7 +1,7 @@
 ;;; mml-smime.el --- S/MIME support for MML
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 ;; Keywords: Gnus, MIME, S/MIME, MML
@@ -31,10 +31,82 @@
 
 (require 'smime)
 (require 'mm-decode)
+(require 'mml-sec)
 (autoload 'message-narrow-to-headers "message")
 (autoload 'message-fetch-field "message")
 
+(defvar mml-smime-use 'openssl)
+
+(defvar mml-smime-function-alist
+  '((openssl mml-smime-openssl-sign
+	     mml-smime-openssl-encrypt
+	     mml-smime-openssl-sign-query
+	     mml-smime-openssl-encrypt-query
+	     mml-smime-openssl-verify
+	     mml-smime-openssl-verify-test)
+    (epg mml-smime-epg-sign
+	 mml-smime-epg-encrypt
+	 nil
+	 nil
+	 mml-smime-epg-verify
+	 mml-smime-epg-verify-test)))
+
+(defcustom mml-smime-verbose mml-secure-verbose
+  "If non-nil, ask the user about the current operation more verbosely."
+  :group 'mime-security
+  :type 'boolean)
+
+(defcustom mml-smime-cache-passphrase mml-secure-cache-passphrase
+  "If t, cache passphrase."
+  :group 'mime-security
+  :type 'boolean)
+
+(defcustom mml-smime-passphrase-cache-expiry mml-secure-passphrase-cache-expiry
+  "How many seconds the passphrase is cached.
+Whether the passphrase is cached at all is controlled by
+`mml-smime-cache-passphrase'."
+  :group 'mime-security
+  :type 'integer)
+
+(defcustom mml-smime-signers nil
+  "A list of your own key ID which will be used to sign a message."
+  :group 'mime-security
+  :type '(repeat (string :tag "Key ID")))
+
 (defun mml-smime-sign (cont)
+  (let ((func (nth 1 (assq mml-smime-use mml-smime-function-alist))))
+    (if func
+	(funcall func cont)
+      (error "Cannot find sign function"))))
+
+(defun mml-smime-encrypt (cont)
+  (let ((func (nth 2 (assq mml-smime-use mml-smime-function-alist))))
+    (if func
+	(funcall func cont)
+      (error "Cannot find encrypt function"))))
+
+(defun mml-smime-sign-query ()
+  (let ((func (nth 3 (assq mml-smime-use mml-smime-function-alist))))
+    (if func
+	(funcall func))))
+
+(defun mml-smime-encrypt-query ()
+  (let ((func (nth 4 (assq mml-smime-use mml-smime-function-alist))))
+    (if func
+	(funcall func))))
+
+(defun mml-smime-verify (handle ctl)
+  (let ((func (nth 5 (assq mml-smime-use mml-smime-function-alist))))
+    (if func
+	(funcall func handle ctl)
+      handle)))
+
+(defun mml-smime-verify-test (handle ctl)
+  (let ((func (nth 6 (assq mml-smime-use mml-smime-function-alist))))
+    (if func
+	(funcall func handle ctl))))
+
+(defun mml-smime-openssl-sign (cont)
   (when (null smime-keys)
     (customize-variable 'smime-keys)
     (error "No S/MIME keys configured, use customize to add your key"))
@@ -44,7 +116,7 @@
     (replace-match "\n" t t))
   (goto-char (point-max)))
 
-(defun mml-smime-encrypt (cont)
+(defun mml-smime-openssl-encrypt (cont)
   (let (certnames certfiles tmp file tmpfiles)
     ;; xxx tmp files are always an security issue
     (while (setq tmp (pop cont))
@@ -70,7 +142,7 @@
       nil))
   (goto-char (point-max)))
 
-(defun mml-smime-sign-query ()
+(defun mml-smime-openssl-sign-query ()
   ;; query information (what certificate) from user when MML tag is
   ;; added, for use later by the signing process
   (when (null smime-keys)
@@ -142,7 +214,7 @@
       (quit))
     result))
 
-(defun mml-smime-encrypt-query ()
+(defun mml-smime-openssl-encrypt-query ()
   ;; todo: try dns/ldap automatically first, before prompting user
   (let (certs done)
     (while (not done)
@@ -158,7 +230,7 @@
       (setq done (not (y-or-n-p "Add more recipients? "))))
     certs))
 
-(defun mml-smime-verify (handle ctl)
+(defun mml-smime-openssl-verify (handle ctl)
   (with-temp-buffer
     (insert-buffer-substring (mm-handle-multipart-original-buffer ctl))
     (goto-char (point-min))
@@ -223,8 +295,248 @@
 		 (buffer-string) "\n")))))
   handle)
 
-(defun mml-smime-verify-test (handle ctl)
+(defun mml-smime-openssl-verify-test (handle ctl)
   smime-openssl-program)
+
+(eval-and-compile
+  (autoload 'epg-make-context "epg"))
+
+(eval-when-compile
+  (defvar epg-user-id-alist)
+  (defvar epg-digest-algorithm-alist)
+  (defvar inhibit-redisplay)
+  (autoload 'epg-context-set-armor "epg")
+  (autoload 'epg-context-set-signers "epg")
+  (autoload 'epg-context-result-for "epg")
+  (autoload 'epg-new-signature-digest-algorithm "epg")
+  (autoload 'epg-verify-result-to-string "epg")
+  (autoload 'epg-list-keys "epg")
+  (autoload 'epg-decrypt-string "epg")
+  (autoload 'epg-verify-string "epg")
+  (autoload 'epg-sign-string "epg")
+  (autoload 'epg-encrypt-string "epg")
+  (autoload 'epg-passphrase-callback-function "epg")
+  (autoload 'epg-context-set-passphrase-callback "epg")
+  (autoload 'epg-configuration "epg-config")
+  (autoload 'epg-expand-group "epg-config")
+  (autoload 'epa-select-keys "epa"))
+
+(eval-when-compile
+  (defvar password-cache-expiry)
+  (autoload 'password-read "password")
+  (autoload 'password-cache-add "password")
+  (autoload 'password-cache-remove "password"))
+
+(defvar mml-smime-epg-secret-key-id-list nil)
+
+(defun mml-smime-epg-passphrase-callback (context key-id ignore)
+  (if (eq key-id 'SYM)
+      (epg-passphrase-callback-function context key-id nil)
+    (let* (entry
+	   (passphrase
+	    (password-read
+	     (if (eq key-id 'PIN)
+		 "Passphrase for PIN: "
+	       (if (setq entry (assoc key-id epg-user-id-alist))
+		   (format "Passphrase for %s %s: " key-id (cdr entry))
+		 (format "Passphrase for %s: " key-id)))
+	     (if (eq key-id 'PIN)
+		 "PIN"
+	       key-id))))
+      (when passphrase
+	(let ((password-cache-expiry mml-smime-passphrase-cache-expiry))
+	  (password-cache-add key-id passphrase))
+	(setq mml-smime-epg-secret-key-id-list
+	      (cons key-id mml-smime-epg-secret-key-id-list))
+	(copy-sequence passphrase)))))
+
+(defun mml-smime-epg-find-usable-key (keys usage)
+  (catch 'found
+    (while keys
+      (let ((pointer (epg-key-sub-key-list (car keys))))
+	(while pointer
+	  (if (and (memq usage (epg-sub-key-capability (car pointer)))
+		   (not (memq (epg-sub-key-validity (car pointer))
+			      '(revoked expired))))
+	      (throw 'found (car keys)))
+	  (setq pointer (cdr pointer))))
+      (setq keys (cdr keys)))))
+
+(defun mml-smime-epg-sign (cont)
+  (let* ((inhibit-redisplay t)
+	 (context (epg-make-context 'CMS))
+	 (boundary (mml-compute-boundary cont))
+	 signer-key
+	 (signers
+	  (or (message-options-get 'mml-smime-epg-signers)
+	      (message-options-set
+	      'mml-smime-epg-signers
+	      (if mml-smime-verbose
+		  (epa-select-keys context "\
+Select keys for signing.
+If no one is selected, default secret key is used.  "
+				   mml-smime-signers t)
+		(if mml-smime-signers
+		    (mapcar
+		     (lambda (signer)
+		       (setq signer-key (mml-smime-epg-find-usable-key
+					 (epg-list-keys context signer t)
+					 'sign))
+		       (unless (or signer-key
+				   (y-or-n-p
+				    (format "No secret key for %s; skip it? "
+					    signer)))
+			 (error "No secret key for %s" signer))
+		       signer-key)
+		     mml-smime-signers))))))
+	 signature micalg)
+    (epg-context-set-signers context signers)
+    (if mml-smime-cache-passphrase
+	(epg-context-set-passphrase-callback
+	 context
+	 #'mml-smime-epg-passphrase-callback))
+    (condition-case error
+	(setq signature (epg-sign-string context
+					 (mm-replace-in-string (buffer-string)
+							       "\n" "\r\n")
+					 t)
+	      mml-smime-epg-secret-key-id-list nil)
+      (error
+       (while mml-smime-epg-secret-key-id-list
+	 (password-cache-remove (car mml-smime-epg-secret-key-id-list))
+	 (setq mml-smime-epg-secret-key-id-list
+	       (cdr mml-smime-epg-secret-key-id-list)))
+       (signal (car error) (cdr error))))
+    (if (epg-context-result-for context 'sign)
+	(setq micalg (epg-new-signature-digest-algorithm
+		      (car (epg-context-result-for context 'sign)))))
+    (goto-char (point-min))
+    (insert (format "Content-Type: multipart/signed; boundary=\"%s\";\n"
+		    boundary))
+    (if micalg
+	(insert (format "\tmicalg=%s; "
+			(downcase
+			 (cdr (assq micalg
+				    epg-digest-algorithm-alist))))))
+    (insert "protocol=\"application/pkcs7-signature\"\n")
+    (insert (format "\n--%s\n" boundary))
+    (goto-char (point-max))
+    (insert (format "\n--%s\n" boundary))
+    (insert "Content-Type: application/pkcs7-signature; name=smime.p7s
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename=smime.p7s
+
+")
+    (insert (base64-encode-string signature) "\n")
+    (goto-char (point-max))
+    (insert (format "--%s--\n" boundary))
+    (goto-char (point-max))))
+
+(defun mml-smime-epg-encrypt (cont)
+  (let ((inhibit-redisplay t)
+	(context (epg-make-context 'CMS))
+	(config (epg-configuration))
+	(recipients (message-options-get 'mml-smime-epg-recipients))
+	cipher signers
+	(boundary (mml-compute-boundary cont))
+	recipient-key)
+    (unless recipients
+      (setq recipients
+	    (apply #'nconc
+		   (mapcar
+		    (lambda (recipient)
+		      (or (epg-expand-group config recipient)
+			  (list recipient)))
+		    (split-string
+		     (or (message-options-get 'message-recipients)
+			 (message-options-set 'message-recipients
+					      (read-string "Recipients: ")))
+		     "[ \f\t\n\r\v,]+"))))
+      (if mml-smime-verbose
+	  (setq recipients
+		(epa-select-keys context "\
+Select recipients for encryption.
+If no one is selected, symmetric encryption will be performed.  "
+				 recipients))
+	(setq recipients
+	      (mapcar
+	       (lambda (recipient)
+		 (setq recipient-key (mml-smime-epg-find-usable-key
+				      (epg-list-keys context recipient)
+				      'encrypt))
+		 (unless (or recipient-key
+			     (y-or-n-p
+			      (format "No public key for %s; skip it? "
+				      recipient)))
+		   (error "No public key for %s" recipient))
+		 recipient-key)
+	       recipients))
+	(unless recipients
+	  (error "No recipient specified")))
+      (message-options-set 'mml-smime-epg-recipients recipients))
+    (if mml-smime-cache-passphrase
+	(epg-context-set-passphrase-callback
+	 context
+	 #'mml-smime-epg-passphrase-callback))
+    (condition-case error
+	(setq cipher
+	      (epg-encrypt-string context (buffer-string) recipients)
+	      mml-smime-epg-secret-key-id-list nil)
+      (error
+       (while mml-smime-epg-secret-key-id-list
+	 (password-cache-remove (car mml-smime-epg-secret-key-id-list))
+	 (setq mml-smime-epg-secret-key-id-list
+	       (cdr mml-smime-epg-secret-key-id-list)))
+       (signal (car error) (cdr error))))
+    (delete-region (point-min) (point-max))
+    (goto-char (point-min))
+    (insert "\
+Content-Type: application/pkcs7-mime;
+ smime-type=enveloped-data;
+ name=smime.p7m
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename=smime.p7m
+
+")
+    (insert (base64-encode-string cipher))
+    (goto-char (point-max))))
+
+(defun mml-smime-epg-verify (handle ctl)
+  (catch 'error
+    (let ((inhibit-redisplay t)
+	  context plain signature-file part signature)
+      (when (or (null (setq part (mm-find-raw-part-by-type
+				  ctl (or (mm-handle-multipart-ctl-parameter
+					   ctl 'protocol)
+					  "application/pkcs7-signature")
+				  t)))
+		(null (setq signature (mm-find-part-by-type
+				       (cdr handle)
+				       "application/pkcs7-signature"
+				       nil t))))
+	(mm-set-handle-multipart-parameter
+	 mm-security-handle 'gnus-info "Corrupted")
+	(throw 'error handle))
+      (setq part (mm-replace-in-string part "\n" "\r\n" t)
+	    context (epg-make-context 'CMS))
+      (condition-case error
+	  (setq plain (epg-verify-string context (mm-get-part signature) part))
+	(error
+	 (mm-set-handle-multipart-parameter
+	  mm-security-handle 'gnus-info "Failed")
+	 (if (eq (car error) 'quit)
+	     (mm-set-handle-multipart-parameter
+	      mm-security-handle 'gnus-details "Quit.")
+	   (mm-set-handle-multipart-parameter
+	    mm-security-handle 'gnus-details (format "%S" error)))
+	 (throw 'error handle)))
+      (mm-set-handle-multipart-parameter
+       mm-security-handle 'gnus-info
+       (epg-verify-result-to-string (epg-context-result-for context 'verify)))
+      handle)))
+
+(defun mml-smime-epg-verify-test (handle ctl)
+  t)
 
 (provide 'mml-smime)
 
Index: gnus/lisp/mml.el
diff -u gnus/lisp/mml.el:7.48 gnus/lisp/mml.el:7.51
--- gnus/lisp/mml.el:7.48	Wed Apr 26 16:57:36 2006
+++ gnus/lisp/mml.el	Tue Feb 20 00:27:42 2007
@@ -1,7 +1,7 @@
 ;;; mml.el --- A package for parsing and validating MML documents
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; This file is part of GNU Emacs.
@@ -70,6 +70,46 @@
   :type '(repeat (symbol :tag "Parameter"))
   :group 'message)
 
+(defcustom mml-content-disposition-alist
+  '((text (rtf . "attachment") (t . "inline"))
+    (t . "attachment"))
+  "Alist of MIME types or regexps matching file names and default dispositions.
+Each element should be one of the following three forms:
+
+  (REGEXP . DISPOSITION)
+  (SUPERTYPE (SUBTYPE . DISPOSITION) (SUBTYPE . DISPOSITION)...)
+  (TYPE . DISPOSITION)
+
+Where REGEXP is a string which matches the file name (if any) of an
+attachment, SUPERTYPE, SUBTYPE and TYPE should be symbols which are a
+MIME supertype (e.g., text), a MIME subtype (e.g., plain) and a MIME
+type (e.g., text/plain) respectively, and DISPOSITION should be either
+the string \"attachment\" or the string \"inline\".  The value t for
+SUPERTYPE, SUBTYPE or TYPE matches any of those types.  The first
+match found will be used."
+  :version "23.0" ;; No Gnus
+  :type (let ((dispositions '(radio :format "DISPOSITION: %v"
+				    :value "attachment"
+				    (const :format "%v " "attachment")
+				    (const :format "%v\n" "inline"))))
+	  `(repeat
+	    :offset 0
+	    (choice :format "%[Value Menu%]%v"
+		    (cons :tag "(REGEXP . DISPOSITION)" :extra-offset 4
+			  (regexp :tag "REGEXP" :value ".*")
+			  ,dispositions)
+		    (cons :tag "(SUPERTYPE (SUBTYPE . DISPOSITION)...)"
+			  :indent 0
+			  (symbol :tag "    SUPERTYPE" :value text)
+			  (repeat :format "%v%i\n" :offset 0 :extra-offset 4
+				  (cons :format "%v" :extra-offset 5
+					(symbol :tag "SUBTYPE" :value t)
+					,dispositions)))
+		    (cons :tag "(TYPE . DISPOSITION)" :extra-offset 4
+			  (symbol :tag "TYPE" :value t)
+			  ,dispositions))))
+  :group 'message)
+
 (defcustom mml-insert-mime-headers-always nil
   "If non-nil, always put Content-Type: text/plain at top of empty parts.
 It is necessary to work against a bug in certain clients."
@@ -505,9 +545,9 @@
 	    (mm-with-unibyte-buffer
 	      (cond
 	       ((cdr (assq 'buffer cont))
-		(insert (with-current-buffer (cdr (assq 'buffer cont))
-			  (mm-with-unibyte-current-buffer
-			    (buffer-string)))))
+		(insert (mm-string-as-unibyte
+			 (with-current-buffer (cdr (assq 'buffer cont))
+			   (buffer-string)))))
 	       ((and filename
 		     (not (equal (cdr (assq 'nofile cont)) "yes")))
 		(let ((coding-system-for-read mm-binary-coding-system))
@@ -667,6 +707,30 @@
 	    "")
 	  mml-base-boundary))
 
+(defun mml-content-disposition (type &optional filename)
+  "Return a default disposition name suitable to TYPE or FILENAME."
+  (let ((defs mml-content-disposition-alist)
+	disposition def types)
+    (while (and (not disposition) defs)
+      (setq def (pop defs))
+      (cond ((stringp (car def))
+	     (when (and filename
+			(string-match (car def) filename))
+	       (setq disposition (cdr def))))
+	    ((consp (cdr def))
+	     (when (string= (car (setq types (split-string type "/")))
+			    (car def))
+	       (setq type (cadr types)
+		     types (cdr def))
+	       (while (and (not disposition) types)
+		 (setq def (pop types))
+		 (when (or (eq (car def) t) (string= type (car def)))
+		   (setq disposition (cdr def))))))
+	    (t
+	     (when (or (eq (car def) t) (string= type (car def)))
+	       (setq disposition (cdr def))))))
+    (or disposition "attachment")))
+
 (defun mml-insert-mime-headers (cont type charset encoding flowed)
   (let (parameters id disposition description)
     (setq parameters
@@ -697,7 +761,9 @@
 	   cont mml-content-disposition-parameters))
     (when (or (setq disposition (cdr (assq 'disposition cont)))
 	      parameters)
-      (insert "Content-Disposition: " (or disposition "inline"))
+      (insert "Content-Disposition: "
+	      (or disposition
+		  (mml-content-disposition type (cdr (assq 'filename cont)))))
       (when parameters
 	(mml-insert-parameter-string
 	 cont mml-content-disposition-parameters))
@@ -1056,16 +1122,13 @@
       (setq description nil))
     description))
 
-(defun mml-minibuffer-read-disposition (type &optional default)
-  (unless default (setq default
-                        (if (and (string-match "\\`text/" type)
-                                 (not (string-match "\\`text/rtf\\'" type)))
-                            "inline"
-                          "attachment")))
+(defun mml-minibuffer-read-disposition (type &optional default filename)
+  (unless default
+    (setq default (mml-content-disposition type filename)))
   (let ((disposition (completing-read
-                      (format "Disposition (default %s): " default)
-                      '(("attachment") ("inline") (""))
-                      nil t nil nil default)))
+		      (format "Disposition (default %s): " default)
+		      '(("attachment") ("inline") (""))
+		      nil t nil nil default)))
     (if (not (equal disposition ""))
 	disposition
       default)))
@@ -1157,7 +1220,7 @@
    (let* ((file (mml-minibuffer-read-file "Attach file: "))
 	  (type (mml-minibuffer-read-type file))
 	  (description (mml-minibuffer-read-description))
-	  (disposition (mml-minibuffer-read-disposition type)))
+	  (disposition (mml-minibuffer-read-disposition type nil file)))
      (list file type description disposition)))
   (save-excursion
     (unless (message-in-body-p) (goto-char (point-max)))
@@ -1188,7 +1251,7 @@
 	(when (memq 'description mml-dnd-attach-options)
 	  (setq description (mml-minibuffer-read-description)))
 	(when (memq 'disposition mml-dnd-attach-options)
-	  (setq disposition (mml-minibuffer-read-disposition type)))
+	  (setq disposition (mml-minibuffer-read-disposition type nil file)))
 	(mml-attach-file file type description disposition)))))
 
 (defun mml-attach-buffer (buffer &optional type description)
Index: gnus/lisp/mml1991.el
diff -u gnus/lisp/mml1991.el:7.10 gnus/lisp/mml1991.el:7.21
--- gnus/lisp/mml1991.el:7.10	Thu Apr 27 09:00:49 2006
+++ gnus/lisp/mml1991.el	Wed Jan 24 08:15:37 2007
@@ -1,9 +1,9 @@
 ;;; mml1991.el --- Old PGP message format (RFC 1991) support for MML
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
-;; Author: Sascha Lüdecke <[email protected]>,
+;; Author: Sascha Ldecke <[email protected]>,
 ;;	Simon Josefsson <[email protected]> (Mailcrypt interface, Gnus glue)
 ;; Keywords PGP
 
@@ -32,6 +32,8 @@
   (require 'cl)
   (require 'mm-util))
 
+(require 'mml-sec)
+
 (defvar mc-pgp-always-sign)
 
 (autoload 'quoted-printable-decode-region "qp")
@@ -46,9 +48,28 @@
     (gpg mml1991-gpg-sign
 	 mml1991-gpg-encrypt)
     (pgg mml1991-pgg-sign
-	 mml1991-pgg-encrypt))
+	 mml1991-pgg-encrypt)
+    (epg mml1991-epg-sign
+	 mml1991-epg-encrypt))
   "Alist of PGP functions.")
 
+(defvar mml1991-verbose mml-secure-verbose
+  "If non-nil, ask the user about the current operation more verbosely.")
+
+(defvar mml1991-cache-passphrase mml-secure-cache-passphrase
+  "If t, cache passphrase.")
+
+(defvar mml1991-passphrase-cache-expiry mml-secure-passphrase-cache-expiry
+  "How many seconds the passphrase is cached.
+Whether the passphrase is cached at all is controlled by
+`mml1991-cache-passphrase'.")
+
+(defvar mml1991-signers nil
+  "A list of your own key ID which will be used to sign a message.")
+
+(defvar mml1991-encrypt-to-self nil
+  "If t, add your own key ID to recipient list when encryption.")
+
 ;;; mailcrypt wrapper
 
 (eval-and-compile
@@ -288,6 +309,183 @@
   (delete-region (point-min) (point-max))
   (insert "\n")
   (insert-buffer-substring pgg-output-buffer)
+  t)
+
+;; epg wrapper
+
+(eval-and-compile
+  (autoload 'epg-make-context "epg"))
+
+(eval-when-compile
+  (defvar epg-user-id-alist)
+  (autoload 'epg-passphrase-callback-function "epg")
+  (autoload 'epa-select-keys "epa")
+  (autoload 'epg-list-keys "epg")
+  (autoload 'epg-context-set-armor "epg")
+  (autoload 'epg-context-set-textmode "epg")
+  (autoload 'epg-context-set-signers "epg")
+  (autoload 'epg-context-set-passphrase-callback "epg")
+  (autoload 'epg-sign-string "epg")
+  (autoload 'epg-encrypt-string "epg")
+  (autoload 'epg-configuration "epg-config")
+  (autoload 'epg-expand-group "epg-config"))
+
+(eval-when-compile
+  (defvar password-cache-expiry)
+  (autoload 'password-read "password")
+  (autoload 'password-cache-add "password")
+  (autoload 'password-cache-remove "password"))
+
+(defvar mml1991-epg-secret-key-id-list nil)
+
+(defun mml1991-epg-passphrase-callback (context key-id ignore)
+  (if (eq key-id 'SYM)
+      (epg-passphrase-callback-function context key-id nil)
+    (let* ((entry (assoc key-id epg-user-id-alist))
+	   (passphrase
+	    (password-read
+	     (format "GnuPG passphrase for %s: "
+		     (if entry
+			 (cdr entry)
+		       key-id))
+	     (if (eq key-id 'PIN)
+		 "PIN"
+	       key-id))))
+      (when passphrase
+	(let ((password-cache-expiry mml1991-passphrase-cache-expiry))
+	  (password-cache-add key-id passphrase))
+	(setq mml1991-epg-secret-key-id-list
+	      (cons key-id mml1991-epg-secret-key-id-list))
+	(copy-sequence passphrase)))))
+
+(defun mml1991-epg-sign (cont)
+  (let ((context (epg-make-context))
+	headers cte signers signature)
+    (if mml1991-verbose
+	(setq signers (epa-select-keys context "Select keys for signing.
+If no one is selected, default secret key is used.  "
+				       mml1991-signers t))
+      (if mml1991-signers
+	  (setq signers (mapcar (lambda (name)
+				  (car (epg-list-keys context name t)))
+				mml1991-signers))))
+    (epg-context-set-armor context t)
+    (epg-context-set-textmode context t)
+    (epg-context-set-signers context signers)
+    (if mml1991-cache-passphrase
+	(epg-context-set-passphrase-callback
+	 context
+	 #'mml1991-epg-passphrase-callback))
+    ;; Don't sign headers.
+    (goto-char (point-min))
+    (when (re-search-forward "^$" nil t)
+      (setq headers (buffer-substring (point-min) (point)))
+      (save-restriction
+	(narrow-to-region (point-min) (point))
+	(setq cte (mail-fetch-field "content-transfer-encoding")))
+      (forward-line 1)
+      (delete-region (point-min) (point))
+      (when cte
+	(setq cte (intern (downcase cte)))
+	(mm-decode-content-transfer-encoding cte)))
+    (condition-case error
+	(setq signature (epg-sign-string context (buffer-string) 'clear)
+	      mml1991-epg-secret-key-id-list nil)
+      (error
+       (while mml1991-epg-secret-key-id-list
+	 (password-cache-remove (car mml1991-epg-secret-key-id-list))
+	 (setq mml1991-epg-secret-key-id-list
+	       (cdr mml1991-epg-secret-key-id-list)))
+       (signal (car error) (cdr error))))
+    (delete-region (point-min) (point-max))
+    (mm-with-unibyte-current-buffer
+      (insert signature)
+      (goto-char (point-min))
+      (while (re-search-forward "\r+$" nil t)
+	(replace-match "" t t))
+      (when cte
+	(mm-encode-content-transfer-encoding cte))
+      (goto-char (point-min))
+      (when headers
+	(insert headers))
+      (insert "\n"))
+    t))
+
+(defun mml1991-epg-encrypt (cont &optional sign)
+  (goto-char (point-min))
+  (when (re-search-forward "^$" nil t)
+    (let ((cte (save-restriction
+		 (narrow-to-region (point-min) (point))
+		 (mail-fetch-field "content-transfer-encoding"))))
+      ;; Strip MIME headers since it will be ASCII armoured.
+      (forward-line 1)
+      (delete-region (point-min) (point))
+      (when cte
+	(mm-decode-content-transfer-encoding (intern (downcase cte))))))
+  (let ((context (epg-make-context))
+	(recipients
+	 (if (message-options-get 'message-recipients)
+	     (split-string
+	      (message-options-get 'message-recipients)
+	      "[ \f\t\n\r\v,]+")))
+	cipher signers config)
+    ;; We should remove this check if epg-0.0.6 is released.
+    (if (and (condition-case nil
+		 (require 'epg-config)
+	       (error))
+	     (functionp #'epg-expand-group))
+	(setq config (epg-configuration)
+	      recipients
+	      (apply #'nconc
+		     (mapcar (lambda (recipient)
+			       (or (epg-expand-group config recipient)
+				   (list recipient)))
+			     recipients))))
+    (if mml1991-verbose
+	(setq recipients
+	      (epa-select-keys context "Select recipients for encryption.
+If no one is selected, symmetric encryption will be performed.  "
+			       recipients))
+      (setq recipients
+	    (delq nil (mapcar (lambda (name)
+				(car (epg-list-keys context name)))
+			      recipients))))
+    (if mml1991-encrypt-to-self
+	(if mml1991-signers
+	    (setq recipients
+		  (nconc recipients
+			 (mapcar (lambda (name)
+				   (car (epg-list-keys context name)))
+				 mml1991-signers)))
+	  (error "mml1991-signers not set")))
+    (when sign
+      (if mml1991-verbose
+	  (setq signers (epa-select-keys context "Select keys for signing.
+If no one is selected, default secret key is used.  "
+					 mml1991-signers t))
+	(if mml1991-signers
+	    (setq signers (mapcar (lambda (name)
+				    (car (epg-list-keys context name t)))
+				  mml1991-signers))))
+      (epg-context-set-signers context signers))
+    (epg-context-set-armor context t)
+    (epg-context-set-textmode context t)
+    (if mml1991-cache-passphrase
+	(epg-context-set-passphrase-callback
+	 context
+	 #'mml1991-epg-passphrase-callback))
+    (condition-case error
+	(setq cipher
+	      (epg-encrypt-string context (buffer-string) recipients sign)
+	      mml1991-epg-secret-key-id-list nil)
+      (error
+       (while mml1991-epg-secret-key-id-list
+	 (password-cache-remove (car mml1991-epg-secret-key-id-list))
+	 (setq mml1991-epg-secret-key-id-list
+	       (cdr mml1991-epg-secret-key-id-list)))
+       (signal (car error) (cdr error))))
+    (delete-region (point-min) (point-max))
+    (insert "\n" cipher))
   t)
 
 ;;;###autoload
Index: gnus/lisp/mml2015.el
diff -u gnus/lisp/mml2015.el:7.15 gnus/lisp/mml2015.el:7.45
--- gnus/lisp/mml2015.el:7.15	Fri Apr 28 07:17:40 2006
+++ gnus/lisp/mml2015.el	Wed Feb 28 23:19:09 2007
@@ -1,7 +1,7 @@
 ;;; mml2015.el --- MIME Security with Pretty Good Privacy (PGP)
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: PGP MIME MML
@@ -34,10 +34,17 @@
 (require 'mm-decode)
 (require 'mm-util)
 (require 'mml)
+(require 'mml-sec)
 
 (defvar mc-pgp-always-sign)
 
 (defvar mml2015-use (or
+		     (condition-case nil
+			 (progn
+			   (require 'epg-config)
+			   (epg-check-configuration (epg-configuration))
+			   'epg)
+		       (error))
 		     (progn
 		       (ignore-errors
 			;; Avoid the "Recursive load suspected" error
@@ -58,7 +65,7 @@
 				 (fboundp 'mc-cleanup-recipient-headers)
 				 'mailcrypt)))
   "The package used for PGP/MIME.
-Valid packages include `pgg', `gpg' and `mailcrypt'.")
+Valid packages include `epg', `pgg', `gpg' and `mailcrypt'.")
 
 ;; Something is not RFC2015.
 (defvar mml2015-function-alist
@@ -79,7 +86,13 @@
        mml2015-pgg-verify
        mml2015-pgg-decrypt
        mml2015-pgg-clear-verify
-       mml2015-pgg-clear-decrypt))
+       mml2015-pgg-clear-decrypt)
+  (epg mml2015-epg-sign
+       mml2015-epg-encrypt
+       mml2015-epg-verify
+       mml2015-epg-decrypt
+       mml2015-epg-clear-verify
+       mml2015-epg-clear-decrypt))
   "Alist of PGP/MIME functions.")
 
 (defvar mml2015-result-buffer nil)
@@ -96,6 +109,38 @@
   :type '(repeat (cons (regexp :tag "GnuPG output regexp")
 		       (boolean :tag "Trust key"))))
 
+(defcustom mml2015-verbose mml-secure-verbose
+  "If non-nil, ask the user about the current operation more verbosely."
+  :group 'mime-security
+  :type 'boolean)
+
+(defcustom mml2015-cache-passphrase mml-secure-cache-passphrase
+  "If t, cache passphrase."
+  :group 'mime-security
+  :type 'boolean)
+
+(defcustom mml2015-passphrase-cache-expiry mml-secure-passphrase-cache-expiry
+  "How many seconds the passphrase is cached.
+Whether the passphrase is cached at all is controlled by
+`mml2015-cache-passphrase'."
+  :group 'mime-security
+  :type 'integer)
+
+(defcustom mml2015-signers nil
+  "A list of your own key ID which will be used to sign a message."
+  :group 'mime-security
+  :type '(repeat (string :tag "Key ID")))
+
+(defcustom mml2015-encrypt-to-self nil
+  "If t, add your own key ID to recipient list when encryption."
+  :group 'mime-security
+  :type 'boolean)
+
+(defcustom mml2015-always-trust t
+  "If t, GnuPG skip key validation on encryption."
+  :group 'mime-security
+  :type 'boolean)
+
 ;;; mailcrypt wrapper
 
 (eval-and-compile
@@ -479,9 +524,8 @@
       (with-temp-buffer
 	(setq message (current-buffer))
 	(insert part)
-	;; Convert <LF> to <CR><LF> in verify mode.  Sign and
-	;; clearsign use --textmode. The conversion is not necessary.
-	;; In clearverify, the conversion is not necessary either.
+	;; Convert <LF> to <CR><LF> in signed text.  If --textmode is
+	;; specified when signing, the conversion is not necessary.
 	(goto-char (point-min))
 	(end-of-line)
 	(while (not (eobp))
@@ -738,9 +782,8 @@
 	  handle)
       (with-temp-buffer
 	(insert part)
-	;; Convert <LF> to <CR><LF> in verify mode.  Sign and
-	;; clearsign use --textmode. The conversion is not necessary.
-	;; In clearverify, the conversion is not necessary either.
+	;; Convert <LF> to <CR><LF> in signed text.  If --textmode is
+	;; specified when signing, the conversion is not necessary.
 	(goto-char (point-min))
 	(end-of-line)
 	(while (not (eobp))
@@ -789,7 +832,7 @@
     (if (condition-case err
 	    (prog1
 		(mm-with-unibyte-buffer
-		  (insert (encode-coding-string text coding-system))
+		  (insert (mm-encode-coding-string text coding-system))
 		  (pgg-verify-region (point-min) (point-max) nil t))
 	      (goto-char (point-min))
 	      (while (search-forward "\r\n" nil t)
@@ -871,6 +914,393 @@
     (insert (format "--%s\n" boundary))
     (insert "Content-Type: application/octet-stream\n\n")
     (insert-buffer-substring pgg-output-buffer)
+    (goto-char (point-max))
+    (insert (format "--%s--\n" boundary))
+    (goto-char (point-max))))
+
+;;; epg wrapper
+
+(eval-and-compile
+  (autoload 'epg-make-context "epg"))
+
+(eval-when-compile
+  (defvar epg-user-id-alist)
+  (defvar epg-digest-algorithm-alist)
+  (defvar inhibit-redisplay)
+  (autoload 'epg-context-set-armor "epg")
+  (autoload 'epg-context-set-textmode "epg")
+  (autoload 'epg-context-set-signers "epg")
+  (autoload 'epg-context-result-for "epg")
+  (autoload 'epg-new-signature-digest-algorithm "epg")
+  (autoload 'epg-verify-result-to-string "epg")
+  (autoload 'epg-list-keys "epg")
+  (autoload 'epg-decrypt-string "epg")
+  (autoload 'epg-verify-string "epg")
+  (autoload 'epg-sign-string "epg")
+  (autoload 'epg-encrypt-string "epg")
+  (autoload 'epg-passphrase-callback-function "epg")
+  (autoload 'epg-context-set-passphrase-callback "epg")
+  (autoload 'epg-key-sub-key-list "epg")
+  (autoload 'epg-sub-key-capability "epg")
+  (autoload 'epg-sub-key-validity "epg")
+  (autoload 'epg-configuration "epg-config")
+  (autoload 'epg-expand-group "epg-config")
+  (autoload 'epa-select-keys "epa"))
+
+(eval-when-compile
+  (defvar password-cache-expiry)
+  (autoload 'password-read "password")
+  (autoload 'password-cache-add "password")
+  (autoload 'password-cache-remove "password"))
+
+(defvar mml2015-epg-secret-key-id-list nil)
+
+(defun mml2015-epg-passphrase-callback (context key-id ignore)
+  (if (eq key-id 'SYM)
+      (epg-passphrase-callback-function context key-id nil)
+    (let* (entry
+	   (passphrase
+	    (password-read
+	     (if (eq key-id 'PIN)
+		 "Passphrase for PIN: "
+	       (if (setq entry (assoc key-id epg-user-id-alist))
+		   (format "Passphrase for %s %s: " key-id (cdr entry))
+		 (format "Passphrase for %s: " key-id)))
+	     (if (eq key-id 'PIN)
+		 "PIN"
+	       key-id))))
+      (when passphrase
+	(let ((password-cache-expiry mml2015-passphrase-cache-expiry))
+	  (password-cache-add key-id passphrase))
+	(setq mml2015-epg-secret-key-id-list
+	      (cons key-id mml2015-epg-secret-key-id-list))
+	(copy-sequence passphrase)))))
+
+(defun mml2015-epg-find-usable-key (keys usage)
+  (catch 'found
+    (while keys
+      (let ((pointer (epg-key-sub-key-list (car keys))))
+	(while pointer
+	  (if (and (memq usage (epg-sub-key-capability (car pointer)))
+		   (not (memq (epg-sub-key-validity (car pointer))
+			      '(revoked expired))))
+	      (throw 'found (car keys)))
+	  (setq pointer (cdr pointer))))
+      (setq keys (cdr keys)))))
+
+(defun mml2015-epg-decrypt (handle ctl)
+  (catch 'error
+    (let ((inhibit-redisplay t)
+	  context plain child handles result decrypt-status)
+      (unless (setq child (mm-find-part-by-type
+			   (cdr handle)
+			   "application/octet-stream" nil t))
+	(mm-set-handle-multipart-parameter
+	 mm-security-handle 'gnus-info "Corrupted")
+	(throw 'error handle))
+      (setq context (epg-make-context))
+      (if mml2015-cache-passphrase
+	  (epg-context-set-passphrase-callback
+	   context
+	   #'mml2015-epg-passphrase-callback))
+      (condition-case error
+	  (setq plain (epg-decrypt-string context (mm-get-part child))
+		mml2015-epg-secret-key-id-list nil)
+	(error
+	 (while mml2015-epg-secret-key-id-list
+	   (password-cache-remove (car mml2015-epg-secret-key-id-list))
+	   (setq mml2015-epg-secret-key-id-list
+		 (cdr mml2015-epg-secret-key-id-list)))
+	 (mm-set-handle-multipart-parameter
+	  mm-security-handle 'gnus-info "Failed")
+	 (if (eq (car error) 'quit)
+	     (mm-set-handle-multipart-parameter
+	      mm-security-handle 'gnus-details "Quit.")
+	   (mm-set-handle-multipart-parameter
+	    mm-security-handle 'gnus-details (mml2015-format-error error)))
+	 (throw 'error handle)))
+      (with-temp-buffer
+	(insert plain)
+	(goto-char (point-min))
+	(while (search-forward "\r\n" nil t)
+	  (replace-match "\n" t t))
+	(setq handles (mm-dissect-buffer t))
+	(mm-destroy-parts handle)
+	(if (epg-context-result-for context 'verify)
+	    (mm-set-handle-multipart-parameter
+	     mm-security-handle 'gnus-info
+	     (concat "OK\n"
+		     (epg-verify-result-to-string
+		      (epg-context-result-for context 'verify))))
+	  (mm-set-handle-multipart-parameter
+	   mm-security-handle 'gnus-info "OK"))
+	(if (stringp (car handles))
+	    (mm-set-handle-multipart-parameter
+	     mm-security-handle 'gnus-details
+	     (mm-handle-multipart-ctl-parameter handles 'gnus-details))))
+	(if (listp (car handles))
+	    handles
+	  (list handles)))))
+
+(defun mml2015-epg-clear-decrypt ()
+  (let ((inhibit-redisplay t)
+	(context (epg-make-context))
+	plain)
+    (if mml2015-cache-passphrase
+	(epg-context-set-passphrase-callback
+	 context
+	 #'mml2015-epg-passphrase-callback))
+    (condition-case error
+	(setq plain (epg-decrypt-string context (buffer-string))
+	      mml2015-epg-secret-key-id-list nil)
+      (error
+       (while mml2015-epg-secret-key-id-list
+	 (password-cache-remove (car mml2015-epg-secret-key-id-list))
+	 (setq mml2015-epg-secret-key-id-list
+	       (cdr mml2015-epg-secret-key-id-list)))
+       (mm-set-handle-multipart-parameter
+	mm-security-handle 'gnus-info "Failed")
+       (if (eq (car error) 'quit)
+	   (mm-set-handle-multipart-parameter
+	    mm-security-handle 'gnus-details "Quit.")
+	 (mm-set-handle-multipart-parameter
+	  mm-security-handle 'gnus-details (mml2015-format-error error)))))
+    (when plain
+      (erase-buffer)
+      ;; Treat data which epg returns as a unibyte string.
+      (mm-disable-multibyte)
+      (insert plain)
+      (goto-char (point-min))
+      (while (search-forward "\r\n" nil t)
+	(replace-match "\n" t t))
+      (mm-set-handle-multipart-parameter
+       mm-security-handle 'gnus-info "OK")
+      (if (epg-context-result-for context 'verify)
+	  (mm-set-handle-multipart-parameter
+	   mm-security-handle 'gnus-details
+	   (epg-verify-result-to-string
+	    (epg-context-result-for context 'verify)))))))
+
+(defun mml2015-epg-verify (handle ctl)
+  (catch 'error
+    (let ((inhibit-redisplay t)
+	  context plain signature-file part signature)
+      (when (or (null (setq part (mm-find-raw-part-by-type
+				  ctl (or (mm-handle-multipart-ctl-parameter
+					   ctl 'protocol)
+					  "application/pgp-signature")
+				  t)))
+		(null (setq signature (mm-find-part-by-type
+				       (cdr handle) "application/pgp-signature"
+				       nil t))))
+	(mm-set-handle-multipart-parameter
+	 mm-security-handle 'gnus-info "Corrupted")
+	(throw 'error handle))
+      (setq part (mm-replace-in-string part "\n" "\r\n" t)
+	    signature (mm-get-part signature)
+	    context (epg-make-context))
+      (condition-case error
+	  (setq plain (epg-verify-string context signature part))
+	(error
+	 (mm-set-handle-multipart-parameter
+	  mm-security-handle 'gnus-info "Failed")
+	 (if (eq (car error) 'quit)
+	     (mm-set-handle-multipart-parameter
+	      mm-security-handle 'gnus-details "Quit.")
+	   (mm-set-handle-multipart-parameter
+	    mm-security-handle 'gnus-details (mml2015-format-error error)))
+	 (throw 'error handle)))
+      (mm-set-handle-multipart-parameter
+       mm-security-handle 'gnus-info
+       (epg-verify-result-to-string (epg-context-result-for context 'verify)))
+      handle)))
+
+(defun mml2015-epg-clear-verify ()
+  (let ((inhibit-redisplay t)
+	(context (epg-make-context))
+	(signature (mm-encode-coding-string (buffer-string)
+					    buffer-file-coding-system))
+	plain)
+    (condition-case error
+	(setq plain (epg-verify-string context signature))
+      (error
+       (mm-set-handle-multipart-parameter
+	mm-security-handle 'gnus-info "Failed")
+       (if (eq (car error) 'quit)
+	   (mm-set-handle-multipart-parameter
+	    mm-security-handle 'gnus-details "Quit.")
+	 (mm-set-handle-multipart-parameter
+	  mm-security-handle 'gnus-details (mml2015-format-error error)))))
+    (if plain
+	(mm-set-handle-multipart-parameter
+	 mm-security-handle 'gnus-info
+	 (epg-verify-result-to-string
+	  (epg-context-result-for context 'verify))))))
+
+(defun mml2015-epg-sign (cont)
+  (let* ((inhibit-redisplay t)
+	 (context (epg-make-context))
+	 (boundary (mml-compute-boundary cont))
+	 signer-key
+	 (signers
+	  (or (message-options-get 'mml2015-epg-signers)
+	      (message-options-set
+	       'mml2015-epg-signers
+	       (if mml2015-verbose
+		   (epa-select-keys context "\
+Select keys for signing.
+If no one is selected, default secret key is used.  "
+				    mml2015-signers t)
+		 (if mml2015-signers
+		     (mapcar
+		      (lambda (signer)
+			(setq signer-key (mml2015-epg-find-usable-key
+					  (epg-list-keys context signer t)
+					  'sign))
+			(unless (or signer-key
+				    (y-or-n-p
+				     (format "No secret key for %s; skip it? "
+					     signer)))
+			  (error "No secret key for %s" signer))
+			signer-key)
+		      mml2015-signers))))))
+	 signature micalg)
+    (epg-context-set-armor context t)
+    (epg-context-set-textmode context t)
+    (epg-context-set-signers context signers)
+    (if mml2015-cache-passphrase
+	(epg-context-set-passphrase-callback
+	 context
+	 #'mml2015-epg-passphrase-callback))
+    (condition-case error
+	(setq signature (epg-sign-string context (buffer-string) t)
+	      mml2015-epg-secret-key-id-list nil)
+      (error
+       (while mml2015-epg-secret-key-id-list
+	 (password-cache-remove (car mml2015-epg-secret-key-id-list))
+	 (setq mml2015-epg-secret-key-id-list
+	       (cdr mml2015-epg-secret-key-id-list)))
+       (signal (car error) (cdr error))))
+    (if (epg-context-result-for context 'sign)
+	(setq micalg (epg-new-signature-digest-algorithm
+		      (car (epg-context-result-for context 'sign)))))
+    (goto-char (point-min))
+    (insert (format "Content-Type: multipart/signed; boundary=\"%s\";\n"
+		    boundary))
+    (if micalg
+	(insert (format "\tmicalg=pgp-%s; "
+			(downcase
+			 (cdr (assq micalg
+				    epg-digest-algorithm-alist))))))
+    (insert "protocol=\"application/pgp-signature\"\n")
+    (insert (format "\n--%s\n" boundary))
+    (goto-char (point-max))
+    (insert (format "\n--%s\n" boundary))
+    (insert "Content-Type: application/pgp-signature\n\n")
+    (insert signature)
+    (goto-char (point-max))
+    (insert (format "--%s--\n" boundary))
+    (goto-char (point-max))))
+
+(defun mml2015-epg-encrypt (cont &optional sign)
+  (let ((inhibit-redisplay t)
+	(context (epg-make-context))
+	(config (epg-configuration))
+	(recipients (message-options-get 'mml2015-epg-recipients))
+	cipher signers
+	(boundary (mml-compute-boundary cont))
+	recipient-key signer-key)
+    (unless recipients
+      (setq recipients
+	    (apply #'nconc
+		   (mapcar
+		    (lambda (recipient)
+		      (or (epg-expand-group config recipient)
+			  (list (concat "<" recipient ">"))))
+		    (split-string
+		     (or (message-options-get 'message-recipients)
+			 (message-options-set 'message-recipients
+					      (read-string "Recipients: ")))
+		     "[ \f\t\n\r\v,]+"))))
+      (when mml2015-encrypt-to-self
+	(unless mml2015-signers
+	  (error "mml2015-signers not set"))
+	(setq recipients (nconc recipients mml2015-signers)))
+      (if mml2015-verbose
+	  (setq recipients
+		(epa-select-keys context "\
+Select recipients for encryption.
+If no one is selected, symmetric encryption will be performed.  "
+				 recipients))
+	(setq recipients
+	      (mapcar
+	       (lambda (recipient)
+		 (setq recipient-key (mml2015-epg-find-usable-key
+				      (epg-list-keys context recipient)
+				      'encrypt))
+		 (unless (or recipient-key
+			     (y-or-n-p
+			      (format "No public key for %s; skip it? "
+				      recipient)))
+		   (error "No public key for %s" recipient))
+		 recipient-key)
+	       recipients))
+	(unless recipients
+	  (error "No recipient specified")))
+      (message-options-set 'mml2015-epg-recipients recipients))
+    (when sign
+      (setq signers
+	    (or (message-options-get 'mml2015-epg-signers)
+		(message-options-set
+		 'mml2015-epg-signers
+		 (if mml2015-verbose
+		     (epa-select-keys context "\
+Select keys for signing.
+If no one is selected, default secret key is used.  "
+				      mml2015-signers t)
+		   (if mml2015-signers
+		       (mapcar
+			(lambda (signer)
+			  (setq signer-key (mml2015-epg-find-usable-key
+					    (epg-list-keys context signer t)
+					    'sign))
+			  (unless (or signer-key
+				      (y-or-n-p
+				       (format
+					"No secret key for %s; skip it? "
+					signer)))
+			    (error "No secret key for %s" signer))
+			  signer-key)
+			mml2015-signers))))))
+      (epg-context-set-signers context signers))
+    (epg-context-set-armor context t)
+    (epg-context-set-textmode context t)
+    (if mml2015-cache-passphrase
+	(epg-context-set-passphrase-callback
+	 context
+	 #'mml2015-epg-passphrase-callback))
+    (condition-case error
+	(setq cipher
+	      (epg-encrypt-string context (buffer-string) recipients sign
+				  mml2015-always-trust)
+	      mml2015-epg-secret-key-id-list nil)
+      (error
+       (while mml2015-epg-secret-key-id-list
+	 (password-cache-remove (car mml2015-epg-secret-key-id-list))
+	 (setq mml2015-epg-secret-key-id-list
+	       (cdr mml2015-epg-secret-key-id-list)))
+       (signal (car error) (cdr error))))
+    (delete-region (point-min) (point-max))
+    (goto-char (point-min))
+    (insert (format "Content-Type: multipart/encrypted; boundary=\"%s\";\n"
+		    boundary))
+    (insert "\tprotocol=\"application/pgp-encrypted\"\n\n")
+    (insert (format "--%s\n" boundary))
+    (insert "Content-Type: application/pgp-encrypted\n\n")
+    (insert "Version: 1\n\n")
+    (insert (format "--%s\n" boundary))
+    (insert "Content-Type: application/octet-stream\n\n")
+    (insert cipher)
     (goto-char (point-max))
     (insert (format "--%s--\n" boundary))
     (goto-char (point-max))))
Index: gnus/lisp/netrc.el
diff -u gnus/lisp/netrc.el:7.13 gnus/lisp/netrc.el:7.15
--- gnus/lisp/netrc.el:7.13	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/netrc.el	Wed Feb 28 23:26:30 2007
@@ -1,6 +1,6 @@
 ;;; netrc.el --- .netrc parsing functionality
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Modularizer: Ted Zlatanov <[email protected]>
@@ -169,7 +169,7 @@
       (with-temp-buffer
 	(insert-file-contents netrc-services-file)
 	(while (search-forward "#" nil t)
-	  (delete-region (1- (point)) (line-end-position)))
+	  (delete-region (1- (point)) (point-at-eol)))
 	(goto-char (point-min))
 	(while (re-search-forward
 		"^ *\\([^ \n\t]+\\)[ \t]+\\([0-9]+\\)/\\([^ \t\n]+\\)" nil t)
Index: gnus/lisp/nnagent.el
diff -u gnus/lisp/nnagent.el:7.10 gnus/lisp/nnagent.el:7.11
--- gnus/lisp/nnagent.el:7.10	Fri Apr 14 17:58:07 2006
+++ gnus/lisp/nnagent.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnagent.el --- offline backend for Gnus
 
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news, mail
Index: gnus/lisp/nnbabyl.el
diff -u gnus/lisp/nnbabyl.el:7.8 gnus/lisp/nnbabyl.el:7.9
--- gnus/lisp/nnbabyl.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnbabyl.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnbabyl.el --- rmail mbox access for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1099, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	Masanobu UMEDA <[email protected]>
Index: gnus/lisp/nndb.el
diff -u gnus/lisp/nndb.el:7.12 gnus/lisp/nndb.el:7.13
--- gnus/lisp/nndb.el:7.12	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nndb.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nndb.el --- nndb access for Gnus
 
 ;; Copyright (C) 1997, 1998, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <[email protected]>
 ;;         Kai Grossjohann <[email protected]>
Index: gnus/lisp/nndiary.el
diff -u gnus/lisp/nndiary.el:7.12 gnus/lisp/nndiary.el:7.14
--- gnus/lisp/nndiary.el:7.12	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nndiary.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nndiary.el --- A diary back end for Gnus
 
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author:        Didier Verna <[email protected]>
 ;; Maintainer:    Didier Verna <[email protected]>
@@ -144,7 +144,7 @@
 
 NOTE: the units of measure actually express dates, not durations: if you
 use 'week, messages will pop up on Sundays at 00:00 (or Mondays if
-`nndiary-week-starts-on-monday' is non nil) and *not* 7 days before the
+`nndiary-week-starts-on-monday' is non-nil) and *not* 7 days before the
 appointement, if you use 'month, messages will pop up on the first day of
 each months, at 00:00 and so on.
 
Index: gnus/lisp/nndir.el
diff -u gnus/lisp/nndir.el:7.5 gnus/lisp/nndir.el:7.7
--- gnus/lisp/nndir.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nndir.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nndir.el --- single directory newsgroup access for Gnus
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/nndoc.el
diff -u gnus/lisp/nndoc.el:7.9 gnus/lisp/nndoc.el:7.10
--- gnus/lisp/nndoc.el:7.9	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nndoc.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nndoc.el --- single file access for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	Masanobu UMEDA <[email protected]>
Index: gnus/lisp/nndraft.el
diff -u gnus/lisp/nndraft.el:7.8 gnus/lisp/nndraft.el:7.10
--- gnus/lisp/nndraft.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nndraft.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nndraft.el --- draft article access for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -42,6 +42,11 @@
   "Where nndraft will store its files."
   nnmh-directory)
 
+(defvar nndraft-required-headers '(Date)
+  "*Headers to be generated when saving a draft message.
+The headers in this variable and the ones in `message-required-headers'
+are generated if and only if they are also in `message-draft-headers'.")
+
 
 
 (defvoo nndraft-current-group "" nil nnmh-current-group)
@@ -156,7 +161,7 @@
   (save-excursion
     (message-generate-headers
      (message-headers-to-generate
-      message-required-headers message-draft-headers nil))))
+      nndraft-required-headers message-draft-headers nil))))
 
 (deffoo nndraft-request-associate-buffer (group)
   "Associate the current buffer with some article in the draft group."
Index: gnus/lisp/nneething.el
diff -u gnus/lisp/nneething.el:7.8 gnus/lisp/nneething.el:7.10
--- gnus/lisp/nneething.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nneething.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nneething.el --- arbitrary file access for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	Masanobu UMEDA <[email protected]>
@@ -303,7 +303,7 @@
       (setq buf (cons (string (string-to-number (match-string 1 file) 16))
 		      (cons (substring file pos (match-beginning 0)) buf))
 	    pos (match-end 0)))
-    (decode-coding-string
+    (mm-decode-coding-string
      (apply (function concat)
 	    (nreverse (cons (substring file pos) buf)))
      (or coding-system nnmail-pathname-coding-system))))
Index: gnus/lisp/nnfolder.el
diff -u gnus/lisp/nnfolder.el:7.16 gnus/lisp/nnfolder.el:7.17
--- gnus/lisp/nnfolder.el:7.16	Thu Feb  9 00:52:19 2006
+++ gnus/lisp/nnfolder.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnfolder.el --- mail folder access for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]> (adding MARKS)
 ;;      ShengHuo Zhu <[email protected]> (adding NOV)
Index: gnus/lisp/nngateway.el
diff -u gnus/lisp/nngateway.el:7.5 gnus/lisp/nngateway.el:7.6
--- gnus/lisp/nngateway.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nngateway.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nngateway.el --- posting news via mail gateways
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news, mail
Index: gnus/lisp/nnheader.el
diff -u gnus/lisp/nnheader.el:7.20 gnus/lisp/nnheader.el:7.25
--- gnus/lisp/nnheader.el:7.20	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnheader.el	Wed Jan 24 08:15:37 2007
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1987, 1988, 1989, 1990, 1993, 1994,
 ;;   1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
@@ -597,17 +597,27 @@
     (if (eq nnheader-max-head-length t)
 	;; Just read the entire file.
 	(nnheader-insert-file-contents file)
-      ;; Read 1K blocks until we find a separator.
+      ;; Read blocks of the size specified by `nnheader-head-chop-length'
+      ;; until we find a separator.
       (let ((beg 0)
-	    format-alist)
+	    (start (point))
+	    ;; Use `binary' to prevent the contents from being decoded,
+	    ;; or it will change the number of characters that
+	    ;; `insert-file-contents' returns.
+	    (coding-system-for-read 'binary))
 	(while (and (eq nnheader-head-chop-length
-			(nth 1 (nnheader-insert-file-contents
+			(nth 1 (mm-insert-file-contents
 				file nil beg
 				(incf beg nnheader-head-chop-length))))
-		    (prog1 (not (search-forward "\n\n" nil t))
+		    ;; CRLF or CR might be used for the line-break code.
+		    (prog1 (not (re-search-forward "\n\r?\n\\|\r\r" nil t))
 		      (goto-char (point-max)))
 		    (or (null nnheader-max-head-length)
-			(< beg nnheader-max-head-length))))))
+			(< beg nnheader-max-head-length))))
+	;; Finally decode the contents.
+	(when (mm-coding-system-p nnheader-file-coding-system)
+	  (mm-decode-coding-region start (point-max)
+				   nnheader-file-coding-system))))
     t))
 
 (defun nnheader-article-p ()
@@ -980,6 +990,7 @@
 	 (after-insert-file-functions nil)
 	 (enable-local-eval nil)
 	 (coding-system-for-read nnheader-file-coding-system)
+	 (version-control 'never)
 	 (ffh (if (boundp 'find-file-hook)
 		  'find-file-hook
 		'find-file-hooks))
Index: gnus/lisp/nnimap.el
diff -u gnus/lisp/nnimap.el:7.32 gnus/lisp/nnimap.el:7.34
--- gnus/lisp/nnimap.el:7.32	Tue Mar 21 20:58:50 2006
+++ gnus/lisp/nnimap.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnimap.el --- imap backend for Gnus
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 ;;         Jim Radford <[email protected]>
@@ -375,7 +375,10 @@
 One useful (and perhaps the only useful) value to change this to would
 be `UID %s NOT SENTSINCE %s' to make nnimap use the Date: header
 instead of the internal date of messages.  See section 6.4.4 of RFC
-2060 for more information on valid strings.")
+2060 for more information on valid strings.
+
+However, if `nnimap-search-uids-not-since-is-evil' is true, this
+variable has no effect since the search logic is reversed.")
 
 (defvoo nnimap-importantize-dormant t
   "If non-nil, mark \"dormant\" articles as \"ticked\" for other IMAP clients.
Index: gnus/lisp/nnkiboze.el
diff -u gnus/lisp/nnkiboze.el:7.8 gnus/lisp/nnkiboze.el:7.10
--- gnus/lisp/nnkiboze.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnkiboze.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnkiboze.el --- select virtual news access for Gnus
 
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/nnlistserv.el
diff -u gnus/lisp/nnlistserv.el:7.7 gnus/lisp/nnlistserv.el:7.9
--- gnus/lisp/nnlistserv.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnlistserv.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnlistserv.el --- retrieving articles via web mailing list archives
 
-;; Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news, mail
Index: gnus/lisp/nnmail.el
diff -u gnus/lisp/nnmail.el:7.24 gnus/lisp/nnmail.el:7.29
--- gnus/lisp/nnmail.el:7.24	Wed Mar  8 10:05:35 2006
+++ gnus/lisp/nnmail.el	Sat Mar 31 15:59:41 2007
@@ -1,7 +1,7 @@
 ;;; nnmail.el --- mail support functions for the Gnus mail backends
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news, mail
@@ -246,6 +246,10 @@
 This variable is obsolete; `mail-sources' should be used instead."
   :group 'nnmail-files
   :type 'sexp)
+(make-obsolete-variable 'nnmail-spool-file
+			"This option is obsolete in Gnus 5.9.  \
+Use `mail-sources' instead.")
+;; revision 5.29 / p0-85 / Gnus 5.9
 
 (defcustom nnmail-resplit-incoming nil
   "*If non-nil, re-split incoming procmail sorted mail."
@@ -1130,7 +1134,7 @@
 	(if (and (symbolp nnmail-split-methods)
 		 (fboundp nnmail-split-methods))
 	    (let ((split
-		   (condition-case nil
+		   (condition-case error-info
 		       ;; `nnmail-split-methods' is a function, so we
 		       ;; just call this function here and use the
 		       ;; result.
@@ -1138,7 +1142,7 @@
 			   '("bogus"))
 		     (error
 		      (nnheader-message
-		       5 "Error in `nnmail-split-methods'; using `bogus' mail group")
+		       5 "Error in `nnmail-split-methods'; using `bogus' mail group: %S" error-info)
 		      (sit-for 1)
 		      '("bogus")))))
 	      (setq split (mm-delete-duplicates split))
@@ -1280,10 +1284,20 @@
   "Translate TAB characters into SPACE characters."
   (subst-char-in-region (point-min) (point-max) ?\t ?  t))
 
-(defun nnmail-fix-eudora-headers ()
-  "Eudora has a broken References line, but an OK In-Reply-To."
+(defcustom nnmail-broken-references-mailers
+  "^X-Mailer:.*\\(Eudora\\|Pegasus\\)"
+  "Header line matching mailer producing bogus References lines.
+See `nnmail-ignore-broken-references'."
+  :group 'nnmail-prepare
+  :version "23.0" ;; No Gnus
+  :type 'regexp)
+
+(defun nnmail-ignore-broken-references ()
+  "Ignore the References line and use In-Reply-To
+
+Eudora has a broken References line, but an OK In-Reply-To."
   (goto-char (point-min))
-  (when (re-search-forward "^X-Mailer:.*Eudora" nil t)
+  (when (re-search-forward nnmail-broken-references-mailers nil t)
     (goto-char (point-min))
     (when (re-search-forward "^References:" nil t)
       (beginning-of-line)
@@ -1292,8 +1306,11 @@
     (when (re-search-forward "^\\(In-Reply-To:[^\n]+\\)\n[ \t]+" nil t)
       (replace-match "\\1" t))))
 
+(defalias 'nnmail-fix-eudora-headers 'nnmail-ignore-broken-references)
+(make-obsolete 'nnmail-fix-eudora-headers 'nnmail-ignore-broken-references)
+
 (custom-add-option 'nnmail-prepare-incoming-header-hook
-		   'nnmail-fix-eudora-headers)
+		   'nnmail-ignore-broken-references)
 
 ;;; Utility functions
 
@@ -1744,7 +1761,8 @@
 				   &optional group spool-func)
   "Read new incoming mail."
   (let* ((sources (or mail-sources
-		      (if (listp nnmail-spool-file) nnmail-spool-file
+		      (if (listp nnmail-spool-file)
+			  nnmail-spool-file
 			(list nnmail-spool-file))))
 	 fetching-sources
 	 (group-in group)
@@ -1890,7 +1908,7 @@
        ;; To or From header
        ((and (equal header 'to-from)
 	     (or (string-match (cadr regexp-target-pair) from)
-		 (and (string-match message-dont-reply-to-names from)
+		 (and (string-match (message-dont-reply-to-names) from)
 		      (string-match (cadr regexp-target-pair) to))))
 	(setq target (format-time-string (caddr regexp-target-pair) date)))
        ((and (not (equal header 'to-from))
Index: gnus/lisp/nnmaildir.el
diff -u gnus/lisp/nnmaildir.el:7.11 gnus/lisp/nnmaildir.el:7.12
--- gnus/lisp/nnmaildir.el:7.11	Wed Jul  6 00:34:47 2005
+++ gnus/lisp/nnmaildir.el	Tue Oct 10 23:48:57 2006
@@ -481,7 +481,8 @@
 	(prin1 (vector storage-version num msgid nov) (current-buffer))
 	(setq file (concat novfile ":"))
 	(nnmaildir--unlink file)
-	(write-region (point-min) (point-max) file nil 'no-message nil 'excl))
+	(gmm-write-region (point-min) (point-max) file nil 'no-message nil
+			  'excl))
       (rename-file file novfile 'replace)
       (setf (nnmaildir--art-msgid article) msgid)
       nov)))
@@ -1298,8 +1299,8 @@
 	(throw 'return nil))
       (save-excursion
 	(set-buffer buffer)
-	(write-region (point-min) (point-max) tmpfile nil 'no-message nil
-		      'excl))
+	(gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
+			  'excl))
       (unix-sync) ;; no fsync :(
       (rename-file tmpfile (concat (nnmaildir--cur dir) file suffix) 'replace)
       t)))
@@ -1392,8 +1393,8 @@
 				  (throw 'return nil))))
       (condition-case nil (add-name-to-file nnmaildir--file tmpfile)
 	(error
-	 (write-region (point-min) (point-max) tmpfile nil 'no-message nil
-		       'excl)
+	 (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
+			   'excl)
 	 (unix-sync))) ;; no fsync :(
       (nnheader-cancel-timer 24h)
       (condition-case err
Index: gnus/lisp/nnmbox.el
diff -u gnus/lisp/nnmbox.el:7.7 gnus/lisp/nnmbox.el:7.8
--- gnus/lisp/nnmbox.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnmbox.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnmbox.el --- mail mbox access for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	Masanobu UMEDA <[email protected]>
Index: gnus/lisp/nnmh.el
diff -u gnus/lisp/nnmh.el:7.9 gnus/lisp/nnmh.el:7.10
--- gnus/lisp/nnmh.el:7.9	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnmh.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnmh.el --- mhspool access for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	Masanobu UMEDA <[email protected]>
Index: gnus/lisp/nnml.el
diff -u gnus/lisp/nnml.el:7.18 gnus/lisp/nnml.el:7.20
--- gnus/lisp/nnml.el:7.18	Mon Mar  6 18:50:37 2006
+++ gnus/lisp/nnml.el	Sat Jan 13 18:16:57 2007
@@ -1,7 +1,7 @@
 ;;; nnml.el --- mail spool access for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Authors: Didier Verna <[email protected]> (adding compaction)
 ;;	Simon Josefsson <[email protected]> (adding MARKS)
@@ -88,7 +88,7 @@
   "If non-nil, allow using compressed message files.
 
 If it is a string, use it as the file extension which specifies
-the comression program.  You can set it to \".bz2\" if your Emacs
+the compression program.  You can set it to \".bz2\" if your Emacs
 supports auto-compression using the bzip2 program.  A value of t
 is equivalent to \".gz\".")
 
@@ -1084,9 +1084,15 @@
 		(let* ((oldfile (nnml-article-to-file old-number))
 		       (newfile
 			(gnus-replace-in-string
-			 oldfile (concat "\\("
-					 old-number-string
-					 "\\)\\(\\(\\.gz\\)?\\)$")
+			 oldfile
+			 ;; nnml-use-compressed-files might be any string, but
+			 ;; probably it's sufficient to take into account only
+			 ;; "\\.[a-z0-9]+".  Note that we can't only use the
+			 ;; value of nnml-use-compressed-files because old
+			 ;; articles might have been saved with a different
+			 ;; value.
+			 (concat
+			  "\\(" old-number-string "\\)\\(\\(\\.[a-z0-9]+\\)?\\)$")
 			 (concat new-number-string "\\2"))))
 		  (with-current-buffer nntp-server-buffer
 		    (nnmail-find-file oldfile)
Index: gnus/lisp/nnoo.el
diff -u gnus/lisp/nnoo.el:7.6 gnus/lisp/nnoo.el:7.7
--- gnus/lisp/nnoo.el:7.6	Mon Feb 13 08:16:55 2006
+++ gnus/lisp/nnoo.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnoo.el --- OO Gnus Backends
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/nnrss.el
diff -u gnus/lisp/nnrss.el:7.43 gnus/lisp/nnrss.el:7.47
--- gnus/lisp/nnrss.el:7.43	Mon Jan 16 23:57:40 2006
+++ gnus/lisp/nnrss.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnrss.el --- interfacing with RSS
 
 ;; Copyright (C) 2001, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;;   2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: RSS
@@ -418,8 +418,10 @@
       (nnheader-remove-cr-followed-by-lf)
       ;; Decode text according to the encoding attribute.
       (when (setq cs (nnrss-get-encoding))
-	(mm-decode-coding-region (point-min) (point-max) cs)
-	(mm-enable-multibyte))
+	(insert (prog1
+		    (mm-decode-coding-string (buffer-string) cs)
+		  (erase-buffer)
+		  (mm-enable-multibyte))))
       (goto-char (point-min))
 
       ;; Because xml-parse-region can't deal with anything that isn't
@@ -576,7 +578,7 @@
 	  (insert-file-contents file)
 	  (eval-region (point-min) (point-max))))
       (dolist (e nnrss-group-data)
-	(puthash (or (nth 2 e) (nth 6 e)) t nnrss-group-hashtb)
+	(puthash (nth 9 e) t nnrss-group-hashtb)
 	(when (and (car e) (> nnrss-group-min (car e)))
 	  (setq nnrss-group-min (car e)))
 	(when (and (car e) (< nnrss-group-max (car e)))
@@ -658,7 +660,8 @@
 
 (defun nnrss-check-group (group server)
   (let (file xml subject url extra changed author date feed-subject
-	     enclosure comments rss-ns rdf-ns content-ns dc-ns)
+	     enclosure comments rss-ns rdf-ns content-ns dc-ns
+	     hash-index)
     (if (and nnrss-use-local
 	     (file-exists-p (setq file (expand-file-name
 					(nnrss-translate-file-chars
@@ -690,15 +693,12 @@
     (dolist (item (nreverse (nnrss-find-el (intern (concat rss-ns "item")) xml)))
       (when (and (listp item)
 		 (string= (concat rss-ns "item") (car item))
-		 (if (setq url (nnrss-decode-entities-string
-				(nnrss-node-text rss-ns 'link (cddr item))))
-		     (not (gethash url nnrss-group-hashtb))
-		   (setq extra (or (nnrss-node-text content-ns 'encoded item)
-				   (nnrss-node-text rss-ns 'description item)))
-		   (not (gethash extra nnrss-group-hashtb))))
+		 (progn (setq hash-index (md5 (gnus-prin1-to-string item)))
+			(not (gethash hash-index nnrss-group-hashtb))))
 	(setq subject (nnrss-node-text rss-ns 'title item))
-	(setq extra (or extra
-			(nnrss-node-text content-ns 'encoded item)
+	(setq url (nnrss-decode-entities-string
+		   (nnrss-node-text rss-ns 'link (cddr item))))
+	(setq extra (or (nnrss-node-text content-ns 'encoded item)
 			(nnrss-node-text rss-ns 'description item)))
 	(if (setq feed-subject (nnrss-node-text dc-ns 'subject item))
 	    (setq extra (concat feed-subject "<br /><br />" extra)))
@@ -740,9 +740,10 @@
 	  date
 	  (and extra (nnrss-decode-entities-string extra))
 	  enclosure
-	  comments)
+	  comments
+	  hash-index)
 	 nnrss-group-data)
-	(puthash (or url extra) t nnrss-group-hashtb)
+	(puthash hash-index t nnrss-group-hashtb)
 	(setq changed t))
       (setq extra nil))
     (when changed
Index: gnus/lisp/nnslashdot.el
diff -u gnus/lisp/nnslashdot.el:7.9 gnus/lisp/nnslashdot.el:7.13
--- gnus/lisp/nnslashdot.el:7.9	Tue Apr 11 14:06:17 2006
+++ gnus/lisp/nnslashdot.el	Tue Jan 30 23:19:27 2007
@@ -1,7 +1,7 @@
 ;;; nnslashdot.el --- interfacing with Slashdot
 
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -142,7 +142,7 @@
 	  (setq article (if (and article (< start article)) article start))
 	  (goto-char point)
 	  (while (re-search-forward
-		  "<a name=\"\\([0-9]+\\)\">\\([^<]+\\)</a>.*\n.*\n.*score:\\([^)]+\\))"
+		  "<a name=\"\\([0-9]+\\)\">\\([^<]+\\)\\(?:.*\n\\)\\{2,10\\}.*score:\\([^)]+\\))"
 		  nil t)
 	    (setq cid (match-string 1)
 		  subject (match-string 2)
@@ -258,7 +258,9 @@
 		(setq contents
 		      (buffer-substring
 		       (search-forward "<div class=\"commentBody\">")
-		       (search-forward "</div>")))))))
+		       (progn
+			 (search-forward "<div class=\"commentSub\"")
+			 (match-beginning 0))))))))
       (search-failed (nnslashdot-lose why)))
 
     (when contents
Index: gnus/lisp/nnsoup.el
diff -u gnus/lisp/nnsoup.el:7.8 gnus/lisp/nnsoup.el:7.11
--- gnus/lisp/nnsoup.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnsoup.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnsoup.el --- SOUP access for Gnus
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	Masanobu UMEDA <[email protected]>
@@ -37,7 +37,7 @@
 
 (nnoo-declare nnsoup)
 
-(defvoo nnsoup-directory "~/SOUP/"
+(defvoo nnsoup-directory (nnheader-concat gnus-home-directory "SOUP/")
   "*SOUP packet directory.")
 
 (defvoo nnsoup-tmp-directory
@@ -58,7 +58,9 @@
 (defvoo nnsoup-active-file (expand-file-name "active" nnsoup-directory)
   "Active file.")
 
-(defvoo nnsoup-packer "tar cf - %s | gzip > $HOME/Soupin%d.tgz"
+(defvoo nnsoup-packer (concat "tar cf - %s | gzip > "
+			      (expand-file-name gnus-home-directory)
+			      "Soupin%d.tgz")
   "Format string command for packing a SOUP packet.
 The SOUP files will be inserted where the %s is in the string.
 This string MUST contain both %s and %d.  The file number will be
@@ -68,14 +70,14 @@
   "*Format string command for unpacking a SOUP packet.
 The SOUP packet file name will be inserted at the %s.")
 
-(defvoo nnsoup-packet-directory "~/"
+(defvoo nnsoup-packet-directory gnus-home-directory
   "*Where nnsoup will look for incoming packets.")
 
 (defvoo nnsoup-packet-regexp "Soupout"
   "*Regular expression matching SOUP packets in `nnsoup-packet-directory'.")
 
 (defvoo nnsoup-always-save t
-  "If non nil commit the reply buffer on each message send.
+  "If non-nil commit the reply buffer on each message send.
 This is necessary if using message mode outside Gnus with nnsoup as a
 backend for the messages.")
 
Index: gnus/lisp/nnspool.el
diff -u gnus/lisp/nnspool.el:7.10 gnus/lisp/nnspool.el:7.12
--- gnus/lisp/nnspool.el:7.10	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnspool.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnspool.el --- spool access for GNU Emacs
 
 ;; Copyright (C) 1988, 1989, 1990, 1993, 1994, 1995, 1996, 1997, 1998,
-;;   2000, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
Index: gnus/lisp/nntp.el
diff -u gnus/lisp/nntp.el:7.33 gnus/lisp/nntp.el:7.38
--- gnus/lisp/nntp.el:7.33	Mon Apr 17 15:30:51 2006
+++ gnus/lisp/nntp.el	Tue Feb 27 02:55:36 2007
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993,
 ;;   1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002,
-;;   2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -90,6 +90,21 @@
 - `nntp-open-via-rlogin-and-netcat',
 - `nntp-open-via-telnet-and-telnet'.")
 
+(defvoo nntp-never-echoes-commands nil
+  "*Non-nil means the nntp server never echoes commands.
+It is reported that some nntps server doesn't echo commands.  So, you
+may want to set this to non-nil in the method for such a server setting
+`nntp-open-connection-function' to `nntp-open-ssl-stream' for example.
+Note that the `nntp-open-connection-functions-never-echo-commands'
+variable overrides the nil value of this variable.")
+
+(defvoo nntp-open-connection-functions-never-echo-commands
+    '(nntp-open-network-stream)
+  "*List of functions that never echo commands.
+Add or set a function which you set to `nntp-open-connection-function'
+to this list if it does not echo commands.  Note that a non-nil value
+of the `nntp-never-echoes-commands' variable overrides this variable.")
+
 (defvoo nntp-pre-command nil
   "*Pre-command to use with the various nntp-open-via-* methods.
 This is where you would put \"runsocks\" or stuff like that.")
@@ -254,6 +269,7 @@
 (defvoo nntp-last-command nil)
 (defvoo nntp-authinfo-password nil)
 (defvoo nntp-authinfo-user nil)
+(defvoo nntp-authinfo-force nil)
 
 (defvar nntp-connection-list nil)
 
@@ -478,19 +494,22 @@
 				nntp-server-buffer
 				wait-for nnheader-callback-function)
 	  ;; If nothing to wait for, still remove possibly echo'ed commands.
-	  ;; We don't have echos if nntp-open-connection-function
-	  ;; is `nntp-open-network-stream', so we skip this in that case.
+	  ;; We don't have echoes if `nntp-never-echoes-commands' is non-nil
+	  ;; or the value of `nntp-open-connection-function' is in
+	  ;; `nntp-open-connection-functions-never-echo-commands', so we
+	  ;; skip this in that cases.
 	  (unless (or wait-for
-		      (equal nntp-open-connection-function
-			     'nntp-open-network-stream))
+		      nntp-never-echoes-commands
+		      (memq
+		       nntp-open-connection-function
+		       nntp-open-connection-functions-never-echo-commands))
 	    (nntp-accept-response)
 	    (save-excursion
 	      (set-buffer buffer)
 	      (goto-char pos)
 	      (if (looking-at (regexp-quote command))
 		  (delete-region pos (progn (forward-line 1)
-					    (point-at-bol))))
-	      )))
+					    (point-at-bol)))))))
       (nnheader-report 'nntp "Couldn't open connection to %s."
 		       nntp-address))))
 
@@ -1116,7 +1135,7 @@
 .authinfo file has the FORCE token."
   (let* ((list (netrc-parse nntp-authinfo-file))
 	 (alist (netrc-machine list nntp-address "nntp"))
-	 (force (netrc-get alist "force"))
+	 (force (or (netrc-get alist "force") nntp-authinfo-force))
 	 (user (or (netrc-get alist "login") nntp-authinfo-user))
 	 (passwd (netrc-get alist "password")))
     (when (or (not send-if-force)
@@ -1204,7 +1223,7 @@
 		(funcall nntp-open-connection-function pbuffer))
 	    (error nil)
 	    (quit
-	     (message "Quit opening connection")
+	     (message "Quit opening connection to %s" nntp-address)
 	     (nntp-kill-buffer pbuffer)
 	     (signal 'quit nil)
 	     nil))))
Index: gnus/lisp/nnultimate.el
diff -u gnus/lisp/nnultimate.el:7.6 gnus/lisp/nnultimate.el:7.7
--- gnus/lisp/nnultimate.el:7.6	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnultimate.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnultimate.el --- interfacing with the Ultimate Bulletin Board system
 
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/nnvirtual.el
diff -u gnus/lisp/nnvirtual.el:7.9 gnus/lisp/nnvirtual.el:7.10
--- gnus/lisp/nnvirtual.el:7.9	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnvirtual.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnvirtual.el --- virtual newsgroups access for Gnus
 
 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-;;   2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: David Moore <[email protected]>
 ;;	Lars Magne Ingebrigtsen <[email protected]>
Index: gnus/lisp/nnwarchive.el
diff -u gnus/lisp/nnwarchive.el:7.5 gnus/lisp/nnwarchive.el:7.7
--- gnus/lisp/nnwarchive.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnwarchive.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnwarchive.el --- interfacing with web archives
 
-;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: news egroups mail-archive
Index: gnus/lisp/nnweb.el
diff -u gnus/lisp/nnweb.el:7.21 gnus/lisp/nnweb.el:7.34
--- gnus/lisp/nnweb.el:7.21	Mon May  1 14:22:28 2006
+++ gnus/lisp/nnweb.el	Mon Feb 19 01:50:23 2007
@@ -1,7 +1,7 @@
 ;;; nnweb.el --- retrieving articles via web search engines
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
@@ -360,22 +360,24 @@
       (goto-char (point-max))
       (widen)
       (narrow-to-region (point)
-			(search-forward "</td" nil t))
+			(search-forward "</table" nil t))
 
       (mm-url-remove-markup)
       (mm-url-decode-entities)
-      (search-backward " - ")
-      (when (looking-at
-	     " - \\([a-zA-Z]+\\) \\([0-9]+\\)\\(?: \\([0-9]\\{4\\}\\)\\)?, [^\n]+by \\([^<\n]+\\)\n")
-	(setq From (match-string 4)
-	      Date (format "%s %s 00:00:00 %s"
-			   (match-string 1)
-			   (match-string 2)
-			   (or (match-string 3)
-			       (substring (current-time-string) -4)))))
-
+      (goto-char (point-max))
+      (when
+	  (re-search-backward
+	   "^\\(?:\\(\\w+\\) \\([0-9]+\\)\\|\\S-+\\)\\(?: \\([0-9]\\{4\\}\\)\\)? by \\(.*\\)"
+	   nil t)
+	(setq Date (if (match-string 1)
+		       (format "%s %s 00:00:00 %s"
+			       (match-string 1)
+			       (match-string 2)
+			       (or (match-string 3)
+				   (substring (current-time-string) -4)))
+		     (current-time-string)))
+	(setq From (match-string 4)))
       (widen)
-      (forward-line 1)
       (incf i)
       (unless (nnweb-get-hashtb url)
 	(push
@@ -416,7 +418,7 @@
 	    (goto-char (point-min))
 	    (incf i 100)
 	    (if (or (not (re-search-forward
-			  "<a href=\"\n\\([^>\" \n\t]+\\)[^<]*<img src=[^>]+next"
+			  "<a [^>]+href=\"\n?\\([^>\" \n\t]+\\)[^<]*<img[^>]+src=[^>]+next"
 			  nil t))
 		    (>= i nnweb-max-hits))
 		(setq more nil)
@@ -438,7 +440,8 @@
     "?"
     (mm-url-encode-www-form-urlencoded
      `(("q" . ,search)
-       ("num" . "100")
+       ("num" . ,(number-to-string
+		  (min 100 nnweb-max-hits)))
        ("hq" . "")
        ("hl" . "en")
        ("lr" . "")
@@ -478,7 +481,7 @@
 		    (from (mail-header-from header))
 		    (subject (mail-header-subject header))
 		    (rfc2047-encoding-type 'mime))
-		(when (string-match " \\([^:]+\\):\\([0-9]+\\)" xref)
+		(when (string-match " \\([^:]+\\)[:/]\\([0-9]+\\)" xref)
 		  (mail-header-set-xref
 		   header
 		   (format "http://article.gmane.org/%s/%s/raw"
@@ -494,11 +497,8 @@
 					 (rfc2047-encode-string subject))
 
 		(unless (nnweb-get-hashtb (mail-header-xref header))
-		  (push
-		   (list
-		    (incf (cdr active))
-		    header)
-		   map)
+		  (mail-header-set-number header (incf (cdr active)))
+		  (push (list (mail-header-number header) header) map)
 		  (nnweb-set-hashtb (cadar map) (car map))))))
 	  (forward-line 1)))
       (nnheader-message 7 "Searching Gmane...done")
@@ -523,7 +523,9 @@
     "?"
     (mm-url-encode-www-form-urlencoded
      `(("query" . ,search)
-       ("HITSPERPAGE" . ,(number-to-string nnweb-max-hits))))))
+       ("HITSPERPAGE" . ,(number-to-string nnweb-max-hits))
+       ;;("TOPDOC" . "1000")
+       ))))
   (setq buffer-file-name nil)
   (set-buffer-multibyte t)
   (mm-decode-coding-region (point-min) (point-max) 'utf-8)
Index: gnus/lisp/nnwfm.el
diff -u gnus/lisp/nnwfm.el:7.5 gnus/lisp/nnwfm.el:7.6
--- gnus/lisp/nnwfm.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/nnwfm.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; nnwfm.el --- interfacing with a web forum
 
 ;; Copyright (C) 2000, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;;   2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news
Index: gnus/lisp/parse-time.el
diff -u gnus/lisp/parse-time.el:7.5 gnus/lisp/parse-time.el:7.6
--- gnus/lisp/parse-time.el:7.5	Fri Feb 10 06:10:01 2006
+++ gnus/lisp/parse-time.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; parse-time.el --- Parsing time strings
 
-;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
 ;;   Free Software Foundation, Inc.
 
 ;; Author: Erik Naggum <[email protected]>
Index: gnus/lisp/password.el
diff -u gnus/lisp/password.el:7.12 gnus/lisp/password.el:7.13
--- gnus/lisp/password.el:7.12	Sun Apr 30 11:44:06 2006
+++ gnus/lisp/password.el	Thu Dec 28 09:40:52 2006
@@ -113,7 +113,9 @@
 user again."
   (let ((password (symbol-value (intern-soft key password-data))))
     (when password
-      (fillarray password ?_)
+      (if (fboundp 'clear-string)
+	  (clear-string password)
+	(fillarray password ?_))
       (unintern key password-data))))
 
 (defun password-cache-add (key password)
Index: gnus/lisp/pgg-def.el
diff -u gnus/lisp/pgg-def.el:7.10 gnus/lisp/pgg-def.el:7.12
--- gnus/lisp/pgg-def.el:7.10	Thu Feb  9 06:47:53 2006
+++ gnus/lisp/pgg-def.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; pgg-def.el --- functions/macros for defining PGG functions
 
 ;; Copyright (C) 1999, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;;   2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <[email protected]>
 ;; Created: 1999/11/02
@@ -87,7 +87,7 @@
   "If t, inform the recipient that the input is text.")
 
 (defmacro pgg-truncate-key-identifier (key)
-  `(if (> (length ,key) 8) (substring ,key 8) ,key))
+  `(if (> (length ,key) 8) (substring ,key -8) ,key))
 
 (provide 'pgg-def)
 
Index: gnus/lisp/pgg-gpg.el
diff -u gnus/lisp/pgg-gpg.el:7.24 gnus/lisp/pgg-gpg.el:7.27
--- gnus/lisp/pgg-gpg.el:7.24	Thu Apr 27 18:08:50 2006
+++ gnus/lisp/pgg-gpg.el	Fri Mar  2 00:43:33 2007
@@ -1,7 +1,7 @@
 ;;; pgg-gpg.el --- GnuPG support for PGG.
 
 ;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <[email protected]>
 ;; Symmetric encryption support added by: Sascha Wilde <[email protected]>
@@ -50,7 +50,7 @@
   :type '(choice (const :tag "New `--recipient' option" "--recipient")
 		 (const :tag "Old `--remote-user' option" "--remote-user")))
 
-(defcustom pgg-gpg-use-agent nil
+(defcustom pgg-gpg-use-agent t
   "Whether to use gnupg agent for key caching."
   :group 'pgg-gpg
   :type 'boolean)
@@ -245,7 +245,7 @@
 	   '("--armor" "--always-trust" "--encrypt")
 	   (if pgg-text-mode '("--textmode"))
 	   (if sign (list "--sign" "--local-user" pgg-gpg-user-id))
-	   (if recipients
+	   (if (or recipients pgg-encrypt-for-me)
 	       (apply #'nconc
 		      (mapcar (lambda (rcpt)
 				(list pgg-gpg-recipient-argument rcpt))
Index: gnus/lisp/pgg-parse.el
diff -u gnus/lisp/pgg-parse.el:7.9 gnus/lisp/pgg-parse.el:7.10
--- gnus/lisp/pgg-parse.el:7.9	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/pgg-parse.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; pgg-parse.el --- OpenPGP packet parsing
 
 ;; Copyright (C) 1999, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;;   2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <[email protected]>
 ;; Created: 1999/10/28
Index: gnus/lisp/pgg-pgp.el
diff -u gnus/lisp/pgg-pgp.el:7.12 gnus/lisp/pgg-pgp.el:7.16
--- gnus/lisp/pgg-pgp.el:7.12	Thu Apr 27 18:08:50 2006
+++ gnus/lisp/pgg-pgp.el	Fri Mar  2 00:43:33 2007
@@ -1,7 +1,7 @@
 ;;; pgg-pgp.el --- PGP 2.* and 6.* support for PGG.
 
 ;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <[email protected]>
 ;; Created: 1999/11/02
@@ -63,9 +63,9 @@
 (defun pgg-pgp-process-region (start end passphrase program args)
   (let* ((errors-file-name (pgg-make-temp-file "pgg-errors"))
 	 (args
-	  (append args
+	  (concat args
 		  pgg-pgp-extra-args
-		  (list (concat "2>" errors-file-name))))
+                  " 2>" (shell-quote-argument errors-file-name)))
 	 (shell-file-name pgg-pgp-shell-file-name)
 	 (shell-command-switch pgg-pgp-shell-command-switch)
 	 (process-environment process-environment)
@@ -83,9 +83,8 @@
 	  (let ((coding-system-for-read 'binary)
 		(coding-system-for-write 'binary))
 	    (setq process
-		  (apply #'funcall
-			 #'start-process-shell-command "*PGP*" output-buffer
-			 program args)))
+		  (start-process-shell-command "*PGP*" output-buffer
+                                               (concat program " " args))))
 	  (set-process-sentinel process #'ignore)
 	  (when passphrase
 	    (process-send-string process (concat passphrase "\n")))
@@ -142,15 +141,14 @@
 				    pgg-pgp-user-id)
 			    pgg-pgp-user-id))))
 	 (args
-	  (append
-	   `("+encrypttoself=off +verbose=1" "+batchmode"
-	     "+language=us" "-fate"
-	     ,@(if recipients
-		   (mapcar (lambda (rcpt) (concat "\"" rcpt "\""))
-			   (append recipients
-				   (if pgg-encrypt-for-me
-				       (list pgg-pgp-user-id))))))
-	   (if sign '("-s" "-u" pgg-pgp-user-id)))))
+	  (concat
+	   "+encrypttoself=off +verbose=1 +batchmode +language=us -fate "
+           (if (or recipients pgg-encrypt-for-me)
+               (mapconcat 'shell-quote-argument
+                          (append recipients
+                                  (if pgg-encrypt-for-me
+                                      (list pgg-pgp-user-id)))))
+           (if sign (concat " -s -u " (shell-quote-argument pgg-pgp-user-id))))))
     (pgg-pgp-process-region start end nil pgg-pgp-program args)
     (pgg-process-when-success nil)))
 
@@ -166,7 +164,7 @@
 	      (pgg-read-passphrase
 	       (format "PGP passphrase for %s: " pgg-pgp-user-id) key)))
 	 (args
-          '("+verbose=1" "+batchmode" "+language=us" "-f")))
+	  "+verbose=1 +batchmode +language=us -f"))
     (pgg-pgp-process-region start end passphrase pgg-pgp-program args)
     (pgg-process-when-success
       (if pgg-cache-passphrase
@@ -184,9 +182,9 @@
 	       (format "PGP passphrase for %s: " pgg-pgp-user-id)
 	       (pgg-pgp-lookup-key pgg-pgp-user-id 'sign))))
 	 (args
-	  (list (if clearsign "-fast" "-fbast")
-		"+verbose=1" "+language=us" "+batchmode"
-		"-u" pgg-pgp-user-id)))
+	  (concat (if clearsign "-fast" "-fbast")
+		" +verbose=1 +language=us +batchmode"
+		" -u " (shell-quote-argument pgg-pgp-user-id))))
     (pgg-pgp-process-region start end passphrase pgg-pgp-program args)
     (pgg-process-when-success
       (goto-char (point-min))
@@ -204,7 +202,7 @@
 (defun pgg-pgp-verify-region (start end &optional signature)
   "Verify region between START and END as the detached signature SIGNATURE."
   (let* ((orig-file (pgg-make-temp-file "pgg"))
-	 (args '("+verbose=1" "+batchmode" "+language=us"))
+	 (args "+verbose=1 +batchmode +language=us")
 	 (orig-mode (default-file-modes)))
     (unwind-protect
 	(progn
@@ -216,8 +214,8 @@
     (if (stringp signature)
 	(progn
 	  (copy-file signature (setq signature (concat orig-file ".asc")))
-	  (setq args (append args (list signature orig-file))))
-      (setq args (append args (list orig-file))))
+	  (setq args (concat args " " (shell-quote-argument signature)))))
+    (setq args (concat args " " (shell-quote-argument orig-file)))
     (pgg-pgp-process-region (point)(point) nil pgg-pgp-program args)
     (delete-file orig-file)
     (if signature (delete-file signature))
@@ -237,8 +235,8 @@
   "Insert public key at point."
   (let* ((pgg-pgp-user-id (or pgg-pgp-user-id pgg-default-user-id))
 	 (args
-	  (list "+verbose=1" "+batchmode" "+language=us" "-kxaf"
-		(concat "\"" pgg-pgp-user-id "\""))))
+	  (concat "+verbose=1 +batchmode +language=us -kxaf "
+                  (shell-quote-argument pgg-pgp-user-id))))
     (pgg-pgp-process-region (point)(point) nil pgg-pgp-program args)
     (insert-buffer-substring pgg-output-buffer)))
 
@@ -247,8 +245,8 @@
   (let* ((pgg-pgp-user-id (or pgg-pgp-user-id pgg-default-user-id))
 	 (key-file (pgg-make-temp-file "pgg"))
 	 (args
-	  (list "+verbose=1" "+batchmode" "+language=us" "-kaf"
-		key-file)))
+	  (concat "+verbose=1 +batchmode +language=us -kaf "
+                  (shell-quote-argument key-file))))
     (let ((coding-system-for-write 'raw-text-dos))
       (write-region start end key-file))
     (pgg-pgp-process-region start end nil pgg-pgp-program args)
@@ -257,5 +255,5 @@
 
 (provide 'pgg-pgp)
 
-;;; arch-tag: 076b7801-37b2-49a6-97c3-218fdecde33c
+;; arch-tag: 076b7801-37b2-49a6-97c3-218fdecde33c
 ;;; pgg-pgp.el ends here
Index: gnus/lisp/pgg-pgp5.el
diff -u gnus/lisp/pgg-pgp5.el:7.9 gnus/lisp/pgg-pgp5.el:7.11
--- gnus/lisp/pgg-pgp5.el:7.9	Thu Apr 27 18:08:50 2006
+++ gnus/lisp/pgg-pgp5.el	Fri Mar  2 00:43:33 2007
@@ -1,7 +1,7 @@
 ;;; pgg-pgp5.el --- PGP 5.* support for PGG.
 
 ;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <[email protected]>
 ;; Created: 1999/11/02
@@ -155,7 +155,7 @@
 	 (args
 	  (append
 	   `("+NoBatchInvalidKeys=off" "-fat" "+batchmode=1"
-	     ,@(if recipients
+	     ,@(if (or recipients pgg-encrypt-for-me)
 		   (apply #'append
 			  (mapcar (lambda (rcpt)
 				    (list "-r"
Index: gnus/lisp/pgg.el
diff -u gnus/lisp/pgg.el:7.12 gnus/lisp/pgg.el:7.13
--- gnus/lisp/pgg.el:7.12	Thu Apr 27 18:08:50 2006
+++ gnus/lisp/pgg.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; pgg.el --- glue for the various PGP implementations.
 
 ;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <[email protected]>
 ;; Symmetric encryption added by: Sascha Wilde <[email protected]>
Index: gnus/lisp/pop3.el
diff -u gnus/lisp/pop3.el:7.23 gnus/lisp/pop3.el:7.25
--- gnus/lisp/pop3.el:7.23	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/pop3.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; pop3.el --- Post Office Protocol (RFC 1460) interface
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Richard L. Pieri <[email protected]>
 ;; Maintainer: FSF
@@ -89,8 +89,12 @@
 on the POP server after fetching.  Note that POP servers maintain
 no state information between sessions, so what the client
 believes is there and what is actually there may not match up.
-If they do not, then the whole thing can fall apart and leave you
-with a corrupt mailbox."
+If they do not, then you may get duplicate mails or the whole
+thing can fall apart and leave you with a corrupt mailbox."
+  ;; We can't use the UILD support from XEmacs mail-lib or cvs.m17n.org:
+  ;; http://thread.gmane.org/[email protected]
+  ;; http://thread.gmane.org/[email protected]
+  ;; Any volunteer to re-implement this?
   :version "22.1" ;; Oort Gnus
   :type 'boolean
   :group 'pop3)
@@ -167,6 +171,11 @@
             (pop3-dele process n))
 	  (setq n (+ 1 n))
 	  (if pop3-debug (sit-for 1) (sit-for 0.1))) ; why?
+      (when (and pop3-leave-mail-on-server
+		 (> n 1))
+	(message "pop3.el doesn't support UIDL.  Setting `pop3-leave-mail-on-server'
+to %s might not give the result you'd expect." pop3-leave-mail-on-server)
+	(sit-for 1))
       (pop3-quit process))
     (kill-buffer crashbuf))
   t)
Index: gnus/lisp/qp.el
diff -u gnus/lisp/qp.el:7.9 gnus/lisp/qp.el:7.10
--- gnus/lisp/qp.el:7.9	Thu Feb 23 20:59:54 2006
+++ gnus/lisp/qp.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; qp.el --- Quoted-Printable functions
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: mail, extensions
Index: gnus/lisp/rfc1843.el
diff -u gnus/lisp/rfc1843.el:7.6 gnus/lisp/rfc1843.el:7.8
--- gnus/lisp/rfc1843.el:7.6	Tue Feb  7 06:23:21 2006
+++ gnus/lisp/rfc1843.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; rfc1843.el --- HZ (rfc1843) decoding
 
-;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: news HZ HZ+ mail i18n
Index: gnus/lisp/rfc2045.el
diff -u gnus/lisp/rfc2045.el:7.5 gnus/lisp/rfc2045.el:7.7
--- gnus/lisp/rfc2045.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/rfc2045.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; rfc2045.el --- Functions for decoding rfc2045 headers
 
-;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; This file is part of GNU Emacs.
Index: gnus/lisp/rfc2047.el
diff -u gnus/lisp/rfc2047.el:7.51 gnus/lisp/rfc2047.el:7.59
--- gnus/lisp/rfc2047.el:7.51	Tue Apr 11 09:26:47 2006
+++ gnus/lisp/rfc2047.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; rfc2047.el --- functions for encoding and decoding rfc2047 messages
 
-;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;;	MORIOKA Tomohiko <[email protected]>
@@ -142,6 +142,42 @@
       (re-search-forward ":[ \t\n]*" nil t)
       (buffer-substring-no-properties (point) (point-max)))))
 
+(defun rfc2047-quote-special-characters-in-quoted-strings (&optional
+							   encodable-regexp)
+  "Quote special characters with `\\'s in quoted strings.
+Quoting will not be done in a quoted string if it contains characters
+matching ENCODABLE-REGEXP."
+  (goto-char (point-min))
+  (let ((tspecials (concat "[" ietf-drums-tspecials "]"))
+	beg end)
+    (with-syntax-table (standard-syntax-table)
+      (while (search-forward "\"" nil t)
+	(setq beg (match-beginning 0))
+	(unless (eq (char-before beg) ?\\)
+	  (goto-char beg)
+	  (setq beg (1+ beg))
+	  (condition-case nil
+	      (progn
+		(forward-sexp)
+		(setq end (1- (point)))
+		(goto-char beg)
+		(if (and encodable-regexp
+			 (re-search-forward encodable-regexp end t))
+		    (goto-char (1+ end))
+		  (save-restriction
+		    (narrow-to-region beg end)
+		    (while (re-search-forward tspecials nil 'move)
+		      (if (eq (char-before) ?\\)
+			  (if (looking-at tspecials) ;; Already quoted.
+			      (forward-char)
+			    (insert "\\"))
+			(goto-char (match-beginning 0))
+			(insert "\\")
+			(forward-char))))
+		  (forward-char)))
+	    (error
+	     (goto-char beg))))))))
+
 (defvar rfc2047-encoding-type 'address-mime
   "The type of encoding done by `rfc2047-encode-region'.
 This should be dynamically bound around calls to
@@ -158,8 +194,18 @@
       (while (not (eobp))
 	(save-restriction
 	  (rfc2047-narrow-to-field)
+	  (setq method nil
+		alist rfc2047-header-encoding-alist)
+	  (while (setq elem (pop alist))
+	    (when (or (and (stringp (car elem))
+			   (looking-at (car elem)))
+		      (eq (car elem) t))
+	      (setq alist nil
+		    method (cdr elem))))
 	  (if (not (rfc2047-encodable-p))
-	      (prog1
+	      (prog2
+		  (when (eq method 'address-mime)
+		    (rfc2047-quote-special-characters-in-quoted-strings))
 		  (if (and (eq (mm-body-7-or-8) '8bit)
 			   (mm-multibyte-p)
 			   (mm-coding-system-p
@@ -180,14 +226,6 @@
 		     (point))
 		   (point-max))))
 	    ;; We found something that may perhaps be encoded.
-	    (setq method nil
-		  alist rfc2047-header-encoding-alist)
-	    (while (setq elem (pop alist))
-	      (when (or (and (stringp (car elem))
-			     (looking-at (car elem)))
-			(eq (car elem) t))
-		(setq alist nil
-		      method (cdr elem))))
 	    (re-search-forward "^[^:]+: *" nil t)
 	    (cond
 	     ((eq method 'address-mime)
@@ -318,6 +356,7 @@
 		  (rfc2047-encode start (point))
 		(goto-char end))))
 	;; `address-mime' case -- take care of quoted words, comments.
+	(rfc2047-quote-special-characters-in-quoted-strings encodable-regexp)
 	(with-syntax-table rfc2047-syntax-table
 	  (goto-char (point-min))
 	  (condition-case err		; in case of unbalanced quotes
@@ -792,6 +831,29 @@
 the decoder will fully decode each encoded-word before concatenating
 them.")
 
+(defun rfc2047-strip-backslashes-in-quoted-strings ()
+  "Strip backslashes in quoted strings.  `\\\"' remains."
+  (goto-char (point-min))
+  (let (beg)
+    (with-syntax-table (standard-syntax-table)
+      (while (search-forward "\"" nil t)
+	(unless (eq (char-before) ?\\)
+	  (setq beg (match-end 0))
+	  (goto-char (match-beginning 0))
+	  (condition-case nil
+	      (progn
+		(forward-sexp)
+		(save-restriction
+		  (narrow-to-region beg (1- (point)))
+		  (goto-char beg)
+		  (while (search-forward "\\" nil 'move)
+		    (unless (memq (char-after) '(?\"))
+		      (delete-backward-char 1))
+		    (forward-char)))
+		(forward-char))
+	    (error
+	     (goto-char beg))))))))
+
 (defun rfc2047-charset-to-coding-system (charset)
   "Return coding-system corresponding to MIME CHARSET.
 If your Emacs implementation can't decode CHARSET, return nil."
@@ -869,8 +931,10 @@
 ;; and worthwhile (is it more correct or not?), e.g. something like
 ;; `=?iso-8859-1?q?foo?=@'.
 
-(defun rfc2047-decode-region (start end)
-  "Decode MIME-encoded words in region between START and END."
+(defun rfc2047-decode-region (start end &optional address-mime)
+  "Decode MIME-encoded words in region between START and END.
+If ADDRESS-MIME is non-nil, strip backslashes which precede characters
+other than `\"' and `\\' in quoted strings."
   (interactive "r")
   (let ((case-fold-search t)
 	(eword-regexp (eval-when-compile
@@ -881,6 +945,8 @@
     (save-excursion
       (save-restriction
 	(narrow-to-region start end)
+	(when address-mime
+	  (rfc2047-strip-backslashes-in-quoted-strings))
 	(goto-char (setq b start))
 	;; Look for the encoded-words.
 	(while (setq match (re-search-forward eword-regexp nil t))
@@ -966,8 +1032,16 @@
 		   (not (eq mail-parse-charset 'gnus-decoded)))
 	  (mm-decode-coding-region b (point-max) mail-parse-charset))))))
 
-(defun rfc2047-decode-string (string)
-  "Decode the quoted-printable-encoded STRING and return the results."
+(defun rfc2047-decode-address-region (start end)
+  "Decode MIME-encoded words in region between START and END.
+Backslashes which precede characters other than `\"' and `\\' in quoted
+strings are stripped."
+  (rfc2047-decode-region start end t))
+
+(defun rfc2047-decode-string (string &optional address-mime)
+  "Decode MIME-encoded STRING and return the result.
+If ADDRESS-MIME is non-nil, strip backslashes which precede characters
+other than `\"' and `\\' in quoted strings."
   (let ((m (mm-multibyte-p)))
     (if (string-match "=\\?" string)
 	(with-temp-buffer
@@ -981,8 +1055,16 @@
 	    (mm-enable-multibyte))
 	  (insert string)
 	  (inline
-	    (rfc2047-decode-region (point-min) (point-max)))
+	    (rfc2047-decode-region (point-min) (point-max) address-mime))
 	  (buffer-string))
+      (when address-mime
+	(setq string
+	      (with-temp-buffer
+		(when (mm-multibyte-string-p string)
+		  (mm-enable-multibyte))
+		(insert string)
+		(rfc2047-strip-backslashes-in-quoted-strings)
+		(buffer-string))))
       ;; Fixme: As above, `m' here is inappropriate.
       (if (and m
 	       mail-parse-charset
@@ -1003,6 +1085,12 @@
 	      string
 	    (mm-decode-coding-string string mail-parse-charset))
 	(mm-string-as-multibyte string)))))
+
+(defun rfc2047-decode-address-string (string)
+  "Decode MIME-encoded STRING and return the result.
+Backslashes which precede characters other than `\"' and `\\' in quoted
+strings are stripped."
+  (rfc2047-decode-string string t))
 
 (defun rfc2047-pad-base64 (string)
   "Pad STRING to quartets."
Index: gnus/lisp/rfc2104.el
diff -u gnus/lisp/rfc2104.el:7.5 gnus/lisp/rfc2104.el:7.7
--- gnus/lisp/rfc2104.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/rfc2104.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; rfc2104.el --- RFC2104 Hashed Message Authentication Codes
 
-;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 ;; Keywords: mail
Index: gnus/lisp/rfc2231.el
diff -u gnus/lisp/rfc2231.el:7.19 gnus/lisp/rfc2231.el:7.22
--- gnus/lisp/rfc2231.el:7.19	Tue Apr 18 10:00:10 2006
+++ gnus/lisp/rfc2231.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; rfc2231.el --- Functions for decoding rfc2231 headers
 
-;; Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+;;   2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; This file is part of GNU Emacs.
@@ -162,14 +162,14 @@
 			  (buffer-substring
 			   (point)
 			   (progn
-			     (forward-sexp)
-			     ;; We might not have reached at the end of
-			     ;; the value because of non-ascii chars,
-			     ;; so we should jump over them if any.
-			     (while (and (not (eobp))
-					 (> (char-after) ?\177))
+			     ;; Jump over asterisk, non-ASCII
+			     ;; and non-boundary characters.
+			     (while (and c
+					 (or (eq c ?*)
+					     (> c ?\177)
+					     (not (eq (char-syntax c) ? ))))
 			       (forward-char 1)
-			       (forward-sexp))
+			       (setq c (char-after)))
 			     (point)))))
 		   (t
 		    (error "Invalid header: %s" string)))
Index: gnus/lisp/score-mode.el
diff -u gnus/lisp/score-mode.el:7.9 gnus/lisp/score-mode.el:7.10
--- gnus/lisp/score-mode.el:7.9	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/score-mode.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; score-mode.el --- mode for editing Gnus score files
 
 ;; Copyright (C) 1996, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Keywords: news, mail
Index: gnus/lisp/sha1.el
diff -u gnus/lisp/sha1.el:7.7 gnus/lisp/sha1.el:7.8
--- gnus/lisp/sha1.el:7.7	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/sha1.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; sha1.el --- SHA1 Secure Hash Algorithm in Emacs-Lisp
 
 ;; Copyright (C) 1999, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shuhei KOBAYASHI <[email protected]>
 ;; Keywords: SHA1, FIPS 180-1
Index: gnus/lisp/sieve-manage.el
diff -u gnus/lisp/sieve-manage.el:7.10 gnus/lisp/sieve-manage.el:7.11
--- gnus/lisp/sieve-manage.el:7.10	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/sieve-manage.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; sieve-manage.el --- Implementation of the managesive protocol in elisp
 
 ;; Copyright (C) 2001, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;;   2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 
Index: gnus/lisp/sieve-mode.el
diff -u gnus/lisp/sieve-mode.el:7.8 gnus/lisp/sieve-mode.el:7.9
--- gnus/lisp/sieve-mode.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/sieve-mode.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; sieve-mode.el --- Sieve code editing commands for Emacs
 
 ;; Copyright (C) 2001, 2002, 2003, 2004, 2005,
-;;   2006 Free Software Foundation, Inc.
+;;   2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 
Index: gnus/lisp/sieve.el
diff -u gnus/lisp/sieve.el:7.10 gnus/lisp/sieve.el:7.11
--- gnus/lisp/sieve.el:7.10	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/sieve.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; sieve.el --- Utilities to manage sieve scripts
 
-;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 
Index: gnus/lisp/smiley.el
diff -u gnus/lisp/smiley.el:7.15 gnus/lisp/smiley.el:7.17
--- gnus/lisp/smiley.el:7.15	Sat Apr 15 18:01:35 2006
+++ gnus/lisp/smiley.el	Fri Mar  2 00:43:25 2007
@@ -1,7 +1,7 @@
 ;;; smiley.el --- displaying smiley faces
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Dave Love <[email protected]>
 ;; Keywords: news mail multimedia
@@ -110,10 +110,10 @@
     ("\\(:-|\\)\\W" 1 "indifferent")
     ("\\(:-[/\\]\\)\\W" 1 "wry")
     ("\\(:-(\\)\\W" 1 "sad")
+    ("\\(X-)\\)\\W" 1 "dead")
     ("\\(:-{\\)\\W" 1 "frown")
     ("\\(>:-)\\)\\W" 1 "evil")
     ("\\(;-(\\)\\W" 1 "cry")
-    ("\\(X-)\\)\\W" 1 "dead")
     ("\\(:-D\\)\\W" 1 "grin")
     ;; "smile" must be come after "evil"
     ("\\(\\^?:-?)\\)\\W" 1 "smile"))
Index: gnus/lisp/smime.el
diff -u gnus/lisp/smime.el:7.21 gnus/lisp/smime.el:7.22
--- gnus/lisp/smime.el:7.21	Wed Feb 15 14:51:59 2006
+++ gnus/lisp/smime.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; smime.el --- S/MIME support library
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 ;; Keywords: SMIME X.509 PEM OpenSSL
Index: gnus/lisp/spam-report.el
diff -u gnus/lisp/spam-report.el:7.28 gnus/lisp/spam-report.el:7.33
--- gnus/lisp/spam-report.el:7.28	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/spam-report.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; spam-report.el --- Reporting spam
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Ted Zlatanov <[email protected]>
 ;; Keywords: network, spam, mail, gmane, report
@@ -142,13 +142,30 @@
 		 (string-match spam-report-gmane-regex gnus-newsgroup-name)))
     (let ((rpt-host (if unspam "unspam.gmane.org" "spam.gmane.org")))
       (gnus-message 6 "Reporting article %d to %s..." article rpt-host)
-      (if spam-report-gmane-use-article-number
-	  (spam-report-url-ping
-	   rpt-host
-	   (format "/%s:%d"
-		   (gnus-group-real-name gnus-newsgroup-name)
-		   article))
+      (cond
+       ;; Special-case nnweb groups -- these have the URL to use in
+       ;; the Xref headers.
+       ((eq (car (gnus-find-method-for-group gnus-newsgroup-name)) 'nnweb)
+	(spam-report-url-ping
+	 rpt-host
+	 (concat
+	  "/"
+	  (gnus-replace-in-string
+	   (gnus-replace-in-string
+	    (gnus-replace-in-string
+	     (mail-header-xref (gnus-summary-article-header article))
+	     "/raw" ":silent")
+	    "^.*article.gmane.org/" "")
+	   "/" ":"))))
+       (spam-report-gmane-use-article-number
+	(spam-report-url-ping
+	 rpt-host
+	 (format "/%s:%d"
+		 (gnus-group-real-name gnus-newsgroup-name)
+		 article)))
+       (t
 	(with-current-buffer nntp-server-buffer
+	  (erase-buffer)
 	  (gnus-request-head article gnus-newsgroup-name)
 	  (let ((case-fold-search t)
 		field host report url)
@@ -162,7 +179,11 @@
 	    (setq field (or (gnus-fetch-field "X-Report-Spam")
 			    (gnus-fetch-field "X-Report-Unspam")
 			    (gnus-fetch-field "Archived-At")))
-	    (when (stringp field)
+	    (if (not (stringp field))
+		(if (and (setq field (gnus-fetch-field "Xref"))
+			 (string-match "[^ ]+ +\\([^ ]+\\)" field))
+		    (setq report (concat "/" (match-string 1 field))
+			  host rpt-host))
 	      (setq host
 		    (progn
 		      (string-match
@@ -170,7 +191,8 @@
 			       "\\(/[^:/]+[:/][0-9]+\\)")
 		       field)
 		      (match-string 1 field)))
-	      (setq report (match-string 2 field))
+	      (setq report (match-string 2 field)))
+	    (when host
 	      (when (string-equal "permalink.gmane.org" host)
 		(setq host rpt-host)
 		(setq report (gnus-replace-in-string
@@ -181,7 +203,7 @@
 		 3 "Could not find a spam report header in article %d..."
 		 article)
 	      (gnus-message 7 "Reporting article through URL %s..." url)
-	      (spam-report-url-ping host report))))))))
+	      (spam-report-url-ping host report)))))))))
 
 (defun spam-report-url-ping (host report)
   "Ping a host through HTTP, addressing a specific GET resource using
@@ -224,7 +246,11 @@
       (process-send-string
        tcp-connection
        (format "GET %s HTTP/1.1\nUser-Agent: %s\nHost: %s\n\n"
-	       report spam-report-user-agent host)))))
+	       report spam-report-user-agent host))
+      ;; Wait until we get something so we don't DOS the host. 
+      (while (and (memq (process-status tcp-connection) '(open run))
+		  (zerop (buffer-size)))
+	(accept-process-output tcp-connection)))))
 
 ;;;###autoload
 (defun spam-report-process-queue (&optional file keep)
Index: gnus/lisp/spam-stat.el
diff -u gnus/lisp/spam-stat.el:7.26 gnus/lisp/spam-stat.el:7.27
--- gnus/lisp/spam-stat.el:7.26	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/spam-stat.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; spam-stat.el --- detecting spam based on statistics
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <[email protected]>
 ;; Keywords: network
Index: gnus/lisp/spam.el
diff -u gnus/lisp/spam.el:7.82 gnus/lisp/spam.el:7.94
--- gnus/lisp/spam.el:7.82	Sun Apr 16 18:33:40 2006
+++ gnus/lisp/spam.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; spam.el --- Identifying spam
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
 ;; Maintainer: Ted Zlatanov <[email protected]>
@@ -414,14 +414,18 @@
   "Spam ifile configuration."
   :group 'spam)
 
-(defcustom spam-ifile-path (executable-find "ifile")
-  "File path of the ifile executable program."
+(make-obsolete-variable 'spam-ifile-path 'spam-ifile-program)
+;; "22.1" ;; Gnus 5.10.9
+(defcustom spam-ifile-program (executable-find "ifile")
+  "Name of the ifile program."
   :type '(choice (file :tag "Location of ifile")
 		 (const :tag "ifile is not installed"))
   :group 'spam-ifile)
 
-(defcustom spam-ifile-database-path nil
-  "File path of the ifile database."
+(make-obsolete-variable 'spam-ifile-database-path 'spam-ifile-database)
+;; "22.1" ;; Gnus 5.10.9
+(defcustom spam-ifile-database nil
+  "File name of the ifile database."
   :type '(choice (file :tag "Location of the ifile database")
 		 (const :tag "Use the default"))
   :group 'spam-ifile)
@@ -449,8 +453,10 @@
   "Spam bogofilter configuration."
   :group 'spam)
 
-(defcustom spam-bogofilter-path (executable-find "bogofilter")
-  "File path of the Bogofilter executable program."
+(make-obsolete-variable 'spam-bogofilter-path 'spam-bogofilter-program)
+;; "22.1" ;; Gnus 5.10.9
+(defcustom spam-bogofilter-program (executable-find "bogofilter")
+  "Name of the Bogofilter program."
   :type '(choice (file :tag "Location of bogofilter")
 		 (const :tag "Bogofilter is not installed"))
   :group 'spam-bogofilter)
@@ -488,7 +494,8 @@
   :group 'spam-bogofilter)
 
 (defcustom spam-bogofilter-database-directory nil
-  "Directory path of the Bogofilter databases."
+  "Location of the Bogofilter database.
+When nil, use the default location."
   :type '(choice (directory
 		  :tag "Location of the Bogofilter database directory")
 		 (const :tag "Use the default"))
@@ -498,8 +505,10 @@
   "Spam bsfilter configuration."
   :group 'spam)
 
-(defcustom spam-bsfilter-path (executable-find "bsfilter")
-  "File path of the Bsfilter executable program."
+(make-obsolete-variable 'spam-bsfilter-path 'spam-bsfilter-program)
+;; "22.1" ;; Gnus 5.10.9
+(defcustom spam-bsfilter-program (executable-find "bsfilter")
+  "Name of the Bsfilter program."
   :type '(choice (file :tag "Location of bsfilter")
 		 (const :tag "Bsfilter is not installed"))
   :group 'spam-bsfilter)
@@ -519,7 +528,7 @@
   :type 'string
   :group 'spam-bsfilter)
 
-(defcustom spam-bsfilter-ham-switch "--add-ham"
+(defcustom spam-bsfilter-ham-switch "--add-clean"
   "The switch that Bsfilter uses to register ham messages."
   :type 'string
   :group 'spam-bsfilter)
@@ -562,8 +571,10 @@
   "Spam SpamAssassin configuration."
   :group 'spam)
 
-(defcustom spam-spamassassin-path (executable-find "spamassassin")
-  "File path of the spamassassin executable program.
+(make-obsolete-variable 'spam-spamassassin-path
+  'spam-spamassassin-program) ;; "22.1" ;; Gnus 5.10.9
+(defcustom spam-assassin-program (executable-find "spamassassin")
+  "Name of the spamassassin program.
 Hint: set this to \"spamc\" if you have spamd running.  See the spamc and
 spamd man pages for more information on these programs."
   :type '(choice (file :tag "Location of spamc")
@@ -592,8 +603,10 @@
   :type 'string
   :group 'spam-spamassassin)
 
-(defcustom spam-sa-learn-path (executable-find "sa-learn")
-  "File path of the sa-learn executable program."
+(make-obsolete-variable 'spam-sa-learn-path 'spam-sa-learn-program)
+;; "22.1" ;; Gnus 5.10.9
+(defcustom spam-sa-learn-program (executable-find "sa-learn")
+  "Name of the sa-learn program."
   :type '(choice (file :tag "Location of spamassassin")
 		 (const :tag "spamassassin is not installed"))
   :group 'spam-spamassassin)
@@ -1154,9 +1167,11 @@
 	      spam-use-spamassassin-headers
 	      spam-use-regex-headers)
       (push 'X-Spam-Status list))
-    (when spam-use-bogofilter
+    (when (or spam-use-bogofilter
+	      spam-use-regex-headers)
       (push 'X-Bogosity list))
-    (when spam-use-crm114
+    (when (or spam-use-crm114
+	      spam-use-regex-headers)
       (push 'X-CRM114-Status list))
     list))
 
@@ -1180,10 +1195,6 @@
   ".*\\b\\(?:score\\|hits\\)=\\(-?[0-9.]+\\)"
   "Regexp matching SpamAssassin score header.
 The first group must match the number.")
-;; "score" for Spamassassin 3.0 or later:
-;; X-Spam-Status: Yes, score=13.1 required=5.0 tests=DNS_FROM_RFC_ABUSE,
-;; 	[...],UNDISC_RECIPS autolearn=disabled version=3.0.3
-
 
 (defun spam-extra-header-to-number (header headers)
   "Transform an extra HEADER to a number, using list of HEADERS.
@@ -1197,8 +1208,8 @@
                              spam-spamassassin-score-regexp
                              "\\1")))
          ;; for CRM checking, it's probably faster to just do the string match
-         ((and spam-use-crm114 (string-match "( pR: \\([0-9.-]+\\)" header-content))
-          (string-to-number (match-string 1 header-content)))
+         ((string-match "( pR: \\([0-9.-]+\\)" header-content)
+          (- (string-to-number (match-string 1 header-content))))
          ((eq header 'X-Bogosity)
           (string-to-number (gnus-replace-in-string
                              (gnus-replace-in-string
@@ -2146,11 +2157,12 @@
 ;;; check the ifile backend; return nil if the mail was NOT classified
 ;;; as spam
 
+
 (defun spam-get-ifile-database-parameter ()
-  "Get the command-line parameter for ifile's database from
-  spam-ifile-database-path."
-  (if spam-ifile-database-path
-      (format "--db-file=%s" spam-ifile-database-path)
+  "Return the command-line parameter for ifile's database.
+See `spam-ifile-database'."
+  (if spam-ifile-database
+      (format "--db-file=%s" spam-ifile-database)
     nil))
 
 (defun spam-check-ifile ()
@@ -2163,7 +2175,7 @@
 	(save-excursion
 	  (set-buffer article-buffer-name)
 	  (apply 'call-process-region
-		 (point-min) (point-max) spam-ifile-path
+		 (point-min) (point-max) spam-ifile-program
 		 nil temp-buffer-name nil "-c"
 		 (if db-param `(,db-param "-q") `("-q"))))
 	;; check the return now (we're back in the temp buffer)
@@ -2191,7 +2203,7 @@
 	  (when (stringp article-string)
 	    (insert article-string))))
       (apply 'call-process-region
-	     (point-min) (point-max) spam-ifile-path
+	     (point-min) (point-max) spam-ifile-program
 	     nil nil nil
 	     add-or-delete-option category
 	     (if db `(,db "-h") `("-h"))))))
@@ -2498,7 +2510,7 @@
     (setq spam-bogofilter-valid
 	  (not (string-match "^bogofilter version 0\\.\\([0-9]\\|1[01]\\)\\."
 			     (shell-command-to-string 
-			      (format "%s -V" spam-bogofilter-path))))))
+			      (format "%s -V" spam-bogofilter-program))))))
   spam-bogofilter-valid)
   
 (defun spam-check-bogofilter (&optional score)
@@ -2513,7 +2525,7 @@
 	      (set-buffer article-buffer-name)
 	      (apply 'call-process-region
 		     (point-min) (point-max)
-		     spam-bogofilter-path
+		     spam-bogofilter-program
 		     nil temp-buffer-name nil
 		     (if db `("-d" ,db "-v") `("-v"))))
 	    (setq return (spam-check-bogofilter-headers score))))
@@ -2541,7 +2553,7 @@
 	      
 	      (apply 'call-process-region
 		     (point-min) (point-max)
-		     spam-bogofilter-path
+		     spam-bogofilter-program
 		     nil nil nil switch
 		     (if db `("-d" ,db "-v") `("-v")))))))
     (gnus-error 5 "`spam.el' doesn't support obsolete bogofilter versions")))
@@ -2647,7 +2659,7 @@
 	(save-excursion
 	  (set-buffer article-buffer-name)
 	  (apply 'call-process-region
-		 (point-min) (point-max) spam-spamassassin-path
+		 (point-min) (point-max) spam-assassin-program
 		 nil temp-buffer-name nil spam-spamassassin-arguments))
 	;; check the return now (we're back in the temp buffer)
 	(goto-char (point-min))
@@ -2691,7 +2703,7 @@
 	  ;; call sa-learn on all messages at the same time
 	  (apply 'call-process-region
 		 (point-min) (point-max)
-		 spam-sa-learn-path
+		 spam-sa-learn-program
 		 nil nil nil "--mbox"
 		 (if spam-sa-learn-rebuild
 		     (list action)
@@ -2747,7 +2759,7 @@
 	  (set-buffer article-buffer-name)
 	  (apply 'call-process-region
 		 (point-min) (point-max)
-		 spam-bsfilter-path
+		 spam-bsfilter-program
 		 nil temp-buffer-name nil
 		 "--pipe"
 		 "--insert-flag"
@@ -2775,7 +2787,7 @@
 	  (insert article-string)
 	  (apply 'call-process-region
 		 (point-min) (point-max)
-		 spam-bsfilter-path
+		 spam-bsfilter-program
 		 nil nil nil switch
 		 "--update"
 		 (when spam-bsfilter-database-directory
Index: gnus/lisp/starttls.el
diff -u gnus/lisp/starttls.el:7.13 gnus/lisp/starttls.el:7.15
--- gnus/lisp/starttls.el:7.13	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/starttls.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; starttls.el --- STARTTLS functions
 
-;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <[email protected]>
 ;; Author: Simon Josefsson <[email protected]>
Index: gnus/lisp/time-date.el
diff -u gnus/lisp/time-date.el:7.8 gnus/lisp/time-date.el:7.9
--- gnus/lisp/time-date.el:7.8	Fri Feb 10 06:10:01 2006
+++ gnus/lisp/time-date.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; time-date.el --- Date and time handling functions
 
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
 ;;   Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <[email protected]>
Index: gnus/lisp/tls.el
diff -u gnus/lisp/tls.el:7.10 gnus/lisp/tls.el:7.14
--- gnus/lisp/tls.el:7.10	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/tls.el	Tue Apr 10 01:44:06 2007
@@ -1,7 +1,7 @@
 ;;; tls.el --- TLS/SSL support via wrapper around GnuTLS
 
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <[email protected]>
 ;; Keywords: comm, tls, gnutls, ssl
@@ -60,7 +60,7 @@
 			 "openssl s_client -connect %h:%p -no_ssl2")
   "List of strings containing commands to start TLS stream to a host.
 Each entry in the list is tried until a connection is successful.
-%s is replaced with server hostname, %p with port to connect to.
+%h is replaced with server hostname, %p with port to connect to.
 The program should read input on stdin and write output to
 stdout.  Also see `tls-success' for what the program should output
 after successful negotiation."
@@ -86,7 +86,7 @@
   "Name of  GnuTLS certtool.
 Used by `tls-certificate-information'."
   :version "22.1"
-  :type '(repeat string)
+  :type 'string
   :group 'tls)
 
 (defun tls-certificate-information (der)
@@ -125,12 +125,17 @@
  with any buffer
 Third arg is name of the host to connect to, or its IP address.
 Fourth arg PORT is an integer specifying a port to connect to."
-  (let ((cmds tls-program) cmd done)
+  (let ((cmds tls-program)
+	(use-temp-buffer (null buffer))
+	process	cmd done)
+    (if use-temp-buffer
+	(setq buffer (generate-new-buffer " TLS")))
     (message "Opening TLS connection to `%s'..." host)
     (while (and (not done) (setq cmd (pop cmds)))
       (message "Opening TLS connection with `%s'..." cmd)
-      (let* ((process-connection-type tls-process-connection-type)
-	     (process (start-process
+      (let ((process-connection-type tls-process-connection-type)
+	    response)
+	(setq process (start-process
 		       name buffer shell-file-name shell-command-switch
 		       (format-spec
 			cmd
@@ -139,15 +144,14 @@
 			 ?p (if (integerp port)
 				(int-to-string port)
 			      port)))))
-	     response)
 	(while (and process
 		    (memq (process-status process) '(open run))
 		    (save-excursion
 		      (set-buffer buffer) ;; XXX "blue moon" nntp.el bug
 		      (goto-char (point-min))
 		      (not (setq done (re-search-forward tls-success nil t)))))
-	  (accept-process-output process 1)
-	  (sit-for 1))
+	  (unless (accept-process-output process 1)
+            (sit-for 1)))
 	(message "Opening TLS connection with `%s'...%s" cmd
 		 (if done "done" "failed"))
 	(if done
@@ -155,6 +159,9 @@
 	  (delete-process process))))
     (message "Opening TLS connection to `%s'...%s"
 	     host (if done "done" "failed"))
+    (when use-temp-buffer
+      (if done (set-process-buffer process nil))
+      (kill-buffer buffer))
     done))
 
 (provide 'tls)
Index: gnus/lisp/utf7.el
diff -u gnus/lisp/utf7.el:7.7 gnus/lisp/utf7.el:7.9
--- gnus/lisp/utf7.el:7.7	Thu Feb 23 20:59:54 2006
+++ gnus/lisp/utf7.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; utf7.el --- UTF-7 encoding/decoding for Emacs   -*-coding: iso-8859-1;-*-
 
-;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Jon K Hellan <[email protected]>
 ;; Maintainer: [email protected]
Index: gnus/lisp/uudecode.el
diff -u gnus/lisp/uudecode.el:7.8 gnus/lisp/uudecode.el:7.12
--- gnus/lisp/uudecode.el:7.8	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/uudecode.el	Wed Jan 24 14:13:25 2007
@@ -1,7 +1,7 @@
 ;;; uudecode.el -- elisp native uudecode
 
 ;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: uudecode news
@@ -98,7 +98,11 @@
 			      (make-temp-name "uu")
 			      uudecode-temporary-file-directory))))
 	(let ((cdir default-directory)
-	      default-process-coding-system)
+	      (default-process-coding-system
+		(if (featurep 'xemacs)
+		    ;; In XEmacs, `nil' is not a valid coding system.
+		    '(binary . binary)
+		  nil)))
 	  (unwind-protect
 	      (with-temp-buffer
 		(insert "begin 600 " (file-name-nondirectory tempfile) "\n")
@@ -122,6 +126,20 @@
 	  (message "Can not uudecode")))
       (ignore-errors (or file-name (delete-file tempfile))))))
 
+(eval-and-compile
+  (defalias 'uudecode-string-to-multibyte
+    (cond
+     ((featurep 'xemacs)
+      'identity)
+     ((fboundp 'string-to-multibyte)
+      'string-to-multibyte)
+     (t
+      (lambda (string)
+	"Return a multibyte string with the same individual chars as string."
+	(mapconcat
+	 (lambda (ch) (string-as-multibyte (char-to-string ch)))
+	 string ""))))))
+
 ;;;###autoload
 (defun uudecode-decode-region-internal (start end &optional file-name)
   "Uudecode region between START and END without using an external program.
@@ -199,7 +217,10 @@
 		(insert (apply 'concat (nreverse result)))))
 	  (or (markerp end) (setq end (set-marker (make-marker) end)))
 	  (goto-char start)
-	  (insert (apply 'concat (nreverse result)))
+	  (if enable-multibyte-characters
+	      (mapc #'(lambda (x) (insert (uudecode-string-to-multibyte x)))
+		    (nreverse result))
+	    (insert (apply 'concat (nreverse result))))
 	  (delete-region (point) end))))))
 
 ;;;###autoload
Index: gnus/lisp/webmail.el
diff -u gnus/lisp/webmail.el:7.6 gnus/lisp/webmail.el:7.7
--- gnus/lisp/webmail.el:7.6	Tue Feb  7 06:23:21 2006
+++ gnus/lisp/webmail.el	Wed Jan 24 08:15:37 2007
@@ -1,7 +1,7 @@
 ;;; webmail.el --- interface of web mail
 
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006 Free Software Foundation, Inc.
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <[email protected]>
 ;; Keywords: hotmail netaddress my-deja netscape
Index: gnus/lisp/yenc.el
diff -u gnus/lisp/yenc.el:7.5 gnus/lisp/yenc.el:7.6
--- gnus/lisp/yenc.el:7.5	Wed Feb  8 05:17:15 2006
+++ gnus/lisp/yenc.el	Wed Jan 24 08:15:37 2007
@@ -1,6 +1,6 @@
 ;;; yenc.el --- elisp native yenc decoder
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Author: Jesper Harder <[email protected]>
 ;; Keywords: yenc news
Index: gnus/texi/ChangeLog
diff -u gnus/texi/ChangeLog:7.273 gnus/texi/ChangeLog:7.322
--- gnus/texi/ChangeLog:7.273	Thu Apr 27 00:27:14 2006
+++ gnus/texi/ChangeLog	Thu Apr 12 00:42:02 2007
@@ -1,6 +1,294 @@
+2007-04-11  Katsumi Yamaoka  <[email protected]>
+
+	* gnus.texi (Group Line Specification, Misc Group Stuff)
+	(Server Commands): Parenthesize @pxref{Mail Spool}.
+
+2007-04-11  Didier Verna  <[email protected]>
+
+	New user option: message-signature-directory.
+	* gnus-news.texi: Advertise it.
+	* message.texi (Insertion Variables): Document it.
+	* gnus.texi (Posting Styles): Ditto.
+
+2007-04-11  Didier Verna  <[email protected]>
+
+	* gnus.texi (Group Line Specification):
+	* gnus.texi (Misc Group Stuff):
+	* gnus.texi (Server Commands): Document the group compaction feature.
+	* gnus-news.texi: Ditto.
+
+2007-04-01  Reiner Steib  <[email protected]>
+
+	* gnus-faq.texi ([5.2]): Adjust for message-fill-column.
+
+	* gnus-news.texi: Add message-fill-column.
+
+	* message.texi (Various Message Variables): Add message-fill-column.
+
+	* gnus-news.el (gnus-news-header-disclaimer): Add newlines.
+
+2007-03-31  Eli Zaretskii  <[email protected]>
+
+	* emacs-mime.texi (Non-MIME): Postscript -> PostScript.
+
+2007-03-30  Katsumi Yamaoka  <[email protected]>
+
+	* gnus.texi: Untabify.
+
+2007-03-28  Didier Verna  <[email protected]>
+
+	* gnus.texi (Group Parameters): Document the posting-style merging
+	process in topic-mode.
+
+2007-03-26  Richard Stallman  <[email protected]>
+
+	* pgg.texi (Caching passphrase): Clean up previous change.
+
+2007-03-25  Thien-Thi Nguyen  <[email protected]>
+
+	* gnus.texi (Setting Process Marks): Fix typo.
+
+2007-03-24  Thien-Thi Nguyen  <[email protected]>
+
+	* gnus.texi (Splitting Mail): Reword "splitting"-as-adj to be -as-noun.
+
+	* gnus.texi (Mail Source Specifiers): Fix typo.
+
+2007-03-24  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Scoring On Other Headers): Add gnus-inhibit-slow-scoring.
+
+	* gnus-news.el (gnus-news-header-disclaimer, gnus-news-trailer): Switch
+	to standard GPL text for license.  Update copyright for years from
+	Emacs 21 to present (mainly adding 2001).  Text taken from Glenn
+	Morris' change to GNUS-NEWS in Emacs / v5-10.
+
+2007-03-23  Katsumi Yamaoka  <[email protected]>
+
+	* gnus.texi, message.texi: Bump No Gnus version.
+
+2007-03-15  Katsumi Yamaoka  <[email protected]>
+
+	* message.texi (Message Buffers): Update documentation for
+	message-generate-new-buffers.
+
+2007-03-15  Daiki Ueno  <[email protected]>
+
+	* pgg.texi (Caching passphrase): Describe pgg-passphrase-coding-system.
+
+2007-03-11  Andreas Seltenreich  <[email protected]>
+
+	* gnus.texi (Mail and Post): Update documentation for gnus-user-agent.
+	The variable now uses a list of symbols instead of just a symbol.
+	Reported by Christoph Conrad <[email protected]>.
+
+2007-02-27  Chong Yidong  <[email protected]>
+
+	* pgg.texi (Caching passphrase): Document gpg-agent usage, gpg-agent
+	problems on the console, and security risk in not using gpg-agent.
+
+2007-02-27  Katsumi Yamaoka  <[email protected]>
+
+	* gnus.texi (NNTP): Mention nntp-never-echoes-commands and
+	nntp-open-connection-functions-never-echo-commands.
+
+2007-01-28  Andreas Seltenreich  <[email protected]>
+
+	* gnus.texi (Batching Agents): Fix example.  Reported by Tassilo Horn
+	<[email protected]>.
+
+2007-01-13  Romain Francoise  <[email protected]>
+
+	* gnus.texi (Mail Spool): Fix typo.
+	Update copyright.
+
+2007-01-03  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Customizing Articles): Use index entries for gnus-treat-*
+	variables only in info to avoid redundant entries in the printed
+	manual.
+
+2007-01-02  Daiki Ueno  <[email protected]>
+
+	* message.texi (Using PGP/MIME): Document gpg-agent usage.
+
+2007-01-02  Reiner Steib  <[email protected]>
+
+	* message.texi (Security): Split into sub-nodes.
+
+2006-12-31  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* gnus.texi (Limiting): Add gnus-summary-limit-to-singletons.
+
+2006-12-30  Andreas Seltenreich  <[email protected]>
+
+	* gnus.texi (Summary Generation Commands):
+	* gnus-news.texi: Add gnus-summary-insert-ticked-articles.
+
+2006-12-29  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Customizing Articles): Add index entries for all
+	gnus-treat-* variables.
+
+2006-12-29  Jouni K. Sepp,Ad(Bnen  <[email protected]>
+
+	* gnus.texi (IMAP): Fix incorrect explanation of
+	nnimap-search-uids-not-since-is-evil in documentation for
+	nnimap-expunge-search-string.
+
+2006-12-28  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Mail and Post): Index gnus-message-highlight-citation.
+	(SpamAssassin back end): Rename spam-spamassassin-path to
+	spam-spamassassin-program.
+	(ifile spam filtering): Rename spam-ifile-database-path to
+	spam-ifile-database.
+
+2006-12-26  Reiner Steib  <[email protected]>
+
+	* gnus-news.texi: Add gnus-message-highlight-citation.
+
+	* gnus.texi (Mail and Post): Add gnus-message-highlight-citation.
+
+	* gnus.texi (Spam Package Configuration Examples): Don't encourage to
+	rebind C-s.
+
+2006-12-26  Jouni K. Sepp,Ad(Bnen  <[email protected]>
+
+	* gnus.texi (Group Parameters, Group Maintenance, Topic Commands)
+	(Mail Group Commands, Expiring Mail, IMAP): Add index entries for
+	"expiring mail".
+	(IMAP): Document nnimap-search-uids-not-since-is-evil and
+	nnimap-nov-is-evil.
+
+2006-12-24  Chong Yidong  <[email protected]>
+
+	* pgg.texi (Caching passphrase): Default for pgg-gpg-use-agent changed
+	to t.
+	(Prerequisites): Add explanation about gpg-agent.
+
+2006-12-17  Sascha Wilde  <[email protected]>
+
+	* pgg.texi: Added short note on gpg-agent to the introduction.
+
+2006-12-13  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Hiding Headers): Document that `long-to' and `many-to'
+	also applies to Cc.
+
+2006-12-12  Reiner Steib  <[email protected]>
+
+	* gnus.texi (X-Face): Clarify.  Say which programs are required
+	on Windows.
+
+2006-11-24  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* gnus.texi (Limiting): Add gnus-summary-limit-to-headers.
+
+2006-11-21  Lars Magne Ingebrigtsen  <[email protected]>
+
+	* message.texi (Mail Headers): Document `opportunistic'.
+
+2006-10-13  Andreas Seltenreich  <[email protected]>
+
+	* gnus.texi (Other modes): Fix typo.  Add alternative index entry for
+	gnus-dired-attach.
+	(Selecting a Group): Fix typo.
+
+2006-10-06  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Image Enhancements): Update for Emacs 22.
+
+	* gnus-faq.texi ([1.3]): Update.
+
+2006-10-02  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Foreign Groups): Say where change of editing commands are
+	stored.  Add reference to `gnus-parameters'.
+
+2006-09-20  Reiner Steib  <[email protected]>
+
+	* emacs-mime.texi (Encoding Customization): Explain how to set
+	mm-coding-system-priorities per hierarchy.
+
+2006-09-14  Reiner Steib  <[email protected]>
+
+	* gnus-news.texi: Addition for `mm-fill-flowed'.
+
+	* gnus.texi (Oort Gnus): Add @xref for `mm-fill-flowed'.
+
+2006-09-09  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Mail Source Specifiers): Mention problem of duplicate
+	mails with pop3-leave-mail-on-server.  Fix wording.
+	(Limiting): Improve gnus-summary-limit-to-articles.
+	(X-Face): Fix typo.
+
+2006-07-24  Richard Stallman  <[email protected]>
+
+	* pgg.texi: Move periods and commas inside quotes.
+
+2006-07-28  Katsumi Yamaoka  <[email protected]>
+
+	* gnus.texi (Oort Gnus): Mention that the Lisp files are now installed
+	in .../site-lisp/gnus/ by default.
+	[ From gnus-news.texi in the trunk. ]
+
+2006-07-27  Reiner Steib  <[email protected]>
+
+	* gnus.texi (MIME Commands): Additions for yEnc.
+
+2006-07-10  Nick Roberts  <[email protected]>
+
+	* gnus.texi, message.texi: Fix typos.
+
+2006-05-29  Stefan Monnier  <[email protected]>
+
+	* gnus.texi (Example Setup): Use ;; instead of ;;; to better follow
+	coding conventions.
+
+2006-06-24  Andreas Seltenreich  <[email protected]>
+
+	* gnus.texi (Summary Buffer Lines): Fix typo.
+
+2006-06-22  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Washing Mail): Add nnmail-ignore-broken-references and
+	nnmail-broken-references-mailers instead of nnmail-fix-eudora-headers.
+
+2006-06-19  Katsumi Yamaoka  <[email protected]>
+
+	* message.texi (News Headers): Update message-syntax-checks section.
+
+2006-05-30  Didier Verna  <[email protected]>
+
+	* message.texi (Wide Reply): Update documentation of
+	message-dont-reply-to-names (now allowing a list of regexps).
+
+2006-05-29  Katsumi Yamaoka  <[email protected]>
+
+	* gnus.texi (Saving Articles): Addition.
+
+2006-05-18  Reiner Steib  <[email protected]>
+
+	* gnus.texi (Saving Articles): Clarify gnus-summary-save-article-mail.
+
+2006-05-12  Reiner Steib  <[email protected]>
+
+	* message.texi (Interface): Add tool bar customization.
+	(MIME): Index and text additions for mml-attach.
+
+	* gnus.texi (Oort Gnus): Reorder entries in sections.  Fix some
+	entries.
+	(Starting Up): Add references to "Emacs for Heathens" and to
+	"Finding the News".  Add user-full-name and user-mail-address.
+	(Group Buffer Format): Add tool bar customization and update.
+	(Summary Buffer): Add tool bar customization.
+	(Posting Styles): Add message-alternative-emails.
+
 2006-04-22  Lars Magne Ingebrigtsen  <[email protected]>
 
-	* gnus.texi (Spam Package Introduction): Fix spam menu and links. 
+	* gnus.texi (Spam Package Introduction): Fix spam menu and links.
 
 2006-04-26  Reiner Steib  <[email protected]>
 
@@ -16,11 +304,10 @@
 	* gnus.texi (Spam Statistics Package): Fix typo in @pxref.
 	(Splitting mail using spam-stat): Fix @xref.
 
-2006-04-20  Chong Yidong <[email protected]>
-
-	* gnus.texi (Spam Package): Major revision of the text.  Previouly
-	this node was "Filtering Spam Using The Spam ELisp Package".
+2006-04-20  Chong Yidong  <[email protected]>
 
+	* gnus.texi (Spam Package): Major revision of the text.
+	Previouly this node was "Filtering Spam Using The Spam ELisp Package".
 2006-04-18  Reiner Steib  <[email protected]>
 
 	* gnus-refcard.tex: Remove duplicate \def's.  Update date.
@@ -3475,7 +3762,7 @@
 2001-12-03 10:00:00  ShengHuo ZHU  <[email protected]>
 
 	* infohack.el (infohack): To process write-protected files safely,
-      	make this buffer be writable after `find-file'.
+	make this buffer be writable after `find-file'.
 	From TSUCHIYA Masatoshi  <[email protected]>
 
 2001-12-03 08:00:00  ShengHuo ZHU  <[email protected]>
@@ -4012,7 +4299,7 @@
 2001-07-25 22:22:22  Raymond Scholz  <[email protected]>
 
 	* gnus.texi (Fancy Mail Splitting): New variable
-        nnmail-split-fancy-with-parent-ignore-groups
+	nnmail-split-fancy-with-parent-ignore-groups
 
 2001-07-24  Kai Gro,A_(Bjohann  <[email protected]>
 
@@ -5065,7 +5352,7 @@
 
 1999-07-06 05:37:46  Alexandre Oliva  <[email protected]>
 
-        * gnus.texi (Fancy Mail Splitting): Document RESTRICT.
+	* gnus.texi (Fancy Mail Splitting): Document RESTRICT.
 
 1999-07-07 10:26:59  Robin S. Socha  <[email protected]>
 
@@ -5158,7 +5445,7 @@
 1999-02-26 20:54:34  Jason R. Mastaler  <[email protected]>
 
 	* gnus.texi (Article Date): Added joke by Colin Rafferty
- 	([email protected]).
+	([email protected]).
 
 1999-02-26 08:26:10  Lars Magne Ingebrigtsen  <[email protected]>
 
@@ -5376,6 +5663,7 @@
 
 ;; Local Variables:
 ;; coding: iso-2022-7bit
+;; fill-column: 79
 ;; End:
 
 ;;; arch-tag: b5708f36-be16-423b-bcca-f70f5fb4781a
Index: gnus/texi/emacs-mime.texi
diff -u gnus/texi/emacs-mime.texi:7.29 gnus/texi/emacs-mime.texi:7.34
--- gnus/texi/emacs-mime.texi:7.29	Mon Mar 27 19:02:08 2006
+++ gnus/texi/emacs-mime.texi	Tue Apr 10 01:44:06 2007
@@ -10,7 +10,7 @@
 This file documents the Emacs MIME interface functionality.
 
 Copyright @copyright{} 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-2006 Free Software Foundation, Inc.
+2006, 2007 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -125,7 +125,7 @@
 @table @code
 @item postscript
 @findex postscript
-Postscript file.
+PostScript file.
 
 @item uu
 @findex uu
@@ -342,7 +342,7 @@
 @end lisp
 
 Adding @code{"image/.*"} might also be useful.  Spammers use images as
-the prefered part of @samp{multipart/alternative} messages, so you might
+the preferred part of @samp{multipart/alternative} messages, so you might
 not notice there are other parts.  See also
 @code{gnus-buttonized-mime-types}, @ref{MIME Commands, ,MIME Commands,
 gnus, Gnus Manual}.  After adding @code{"multipart/alternative"} to
@@ -863,6 +863,36 @@
 ISO-8859-1 if possible, you can set this variable to
 @code{(iso-8859-1)}.  You can override this setting on a per-message
 basis by using the @code{charset} @acronym{MML} tag (@pxref{MML Definition}).
+
+As different hierarchies prefer different charsets, you may want to set
+@code{mm-coding-system-priorities} according to the hierarchy in Gnus.
+Here's an example:
+
+@c Corrections about preferred charsets are welcome.  de, fr and fj
+@c should be correct, I don't know about the rest (so these are only
+@c examples):
+@lisp
+(add-to-list 'gnus-newsgroup-variables 'mm-coding-system-priorities)
+(setq gnus-parameters
+      (nconc
+       ;; Some charsets are just examples!
+       '(("^cn\\." ;; Chinese
+          (mm-coding-system-priorities
+           '(iso-8859-1 cn-big5 chinese-iso-7bit utf-8)))
+         ("^cz\\.\\|^pl\\." ;; Central and Eastern European
+          (mm-coding-system-priorities '(iso-8859-2 utf-8)))
+         ("^de\\." ;; German language
+          (mm-coding-system-priorities '(iso-8859-1 iso-8859-15 utf-8)))
+         ("^fr\\." ;; French
+          (mm-coding-system-priorities '(iso-8859-15 iso-8859-1 utf-8)))
+         ("^fj\\." ;; Japanese
+          (mm-coding-system-priorities
+           '(iso-8859-1 iso-2022-jp iso-2022-jp-2 shift_jis utf-8)))
+         ("^ru\\." ;; Cyrillic
+          (mm-coding-system-priorities
+           '(koi8-r iso-8859-5 iso-8859-1 utf-8))))
+       gnus-parameters))
+@end lisp
 
 @item mm-content-transfer-encoding-defaults
 @vindex mm-content-transfer-encoding-defaults
Index: gnus/texi/gnus-faq.texi
diff -u gnus/texi/gnus-faq.texi:7.12 gnus/texi/gnus-faq.texi:7.16
--- gnus/texi/gnus-faq.texi:7.12	Wed Apr 12 01:23:19 2006
+++ gnus/texi/gnus-faq.texi	Sun Apr  1 15:15:23 2007
@@ -1,7 +1,7 @@
 @c \input texinfo @c -*-texinfo-*-
 @c Uncomment 1st line before texing this file alone.
 @c %**start of header
-@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 @c
 @c Do not modify this file, it was generated from gnus-faq.xml, available from
 @c <URL:http://my.gnus.org/FAQ/>.
@@ -172,13 +172,14 @@
 
 @subsubheading Answer
 
-The latest released version of Gnus isn't included in
-Emacs 21, therefor you should get the Gnus tarball from
-@uref{http://www.gnus.org/dist/gnus.tar.gz}
-or via anonymous FTP from 
+Gnus is released independent from releases of Emacs and XEmacs.
+Therefore, the version bundled with Emacs or the version in XEmacs'
+package system might not be up to date (e.g. Gnus 5.9 bundled with Emacs
+20 is outdated).
+@c
+You can get the latest released version of Gnus from
+@uref{http://www.gnus.org/dist/gnus.tar.gz} or via anonymous FTP from
 @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}.
-If you use XEmacs instead of Emacs you can use XEmacs'
-package system instead.
 
 @node [1.4]
 @subsubheading Question 1.4
@@ -676,7 +677,7 @@
 @noindent
 
 You might have to tweak the values for stream and/or
-authentification, see the Gnus manual node "Mail Source
+authentication, see the Gnus manual node "Mail Source
 Specifiers" for possible values.
 
 If you want to use IMAP the way it's intended, you've got to
@@ -1286,18 +1287,23 @@
 
 @subsubheading Answer
 
-Say
+Starting from No Gnus, automatic word-wrap is already enabled by
+default, see the variable message-fill-column.
+
+For other versions of Gnus, say
 
 @example
-(add-hook 'message-mode-hook
-	  (lambda ()
-	    (setq fill-column 72)
-	    (turn-on-auto-fill)))
+(unless (boundp 'message-fill-column)
+  (add-hook 'message-mode-hook
+            (lambda ()
+              (setq fill-column 72)
+              (turn-on-auto-fill))))
 @end example
 @noindent
 
-in ~/.gnus.el. You can reformat a paragraph by hitting
-@samp{M-q} (as usual)
+in ~/.gnus.el.
+
+You can reformat a paragraph by hitting @samp{M-q} (as usual).
 
 @node [5.3]
 @subsubheading Question 5.3
@@ -1654,7 +1660,7 @@
 @end example
 @noindent
 
-in ~/.gnus.el.  If you use Gnus 5.9 or ealier, you can use this
+in ~/.gnus.el.  If you use Gnus 5.9 or earlier, you can use this
 instead (works for newer versions a well): 
 
 @example
@@ -2164,10 +2170,7 @@
 
 @subsubheading Answer
 
-Point your IRC client to irc.my.gnus.org channel
-#mygnus. Don't be afraid if people there speak German,
-they are willing and capable of switching to
-English when people from outside Germany enter.
+Point your IRC client to irc.freenode.net, channel #gnus.
 
 @node FAQ 9 - Tuning Gnus
 @subsection Tuning Gnus
Index: gnus/texi/gnus-news.el
diff -u gnus/texi/gnus-news.el:7.11 gnus/texi/gnus-news.el:7.13
--- gnus/texi/gnus-news.el:7.11	Thu Mar 30 21:49:44 2006
+++ gnus/texi/gnus-news.el	Sun Apr  1 15:00:33 2007
@@ -27,34 +27,37 @@
 
 (defvar gnus-news-header-disclaimer
 "GNUS NEWS -- history of user-visible changes.
-Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006 Free Software Foundation, Inc.
-See the end for copying conditions.
 
-Please send Gnus bug reports to bugs\@gnus.org.
-For older news, see Gnus info node \"New Features\".
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+   2006, 2007 Free Software Foundation, Inc.
+See the end of the file for license conditions.
 
-")
+Please send Gnus bug reports to [email protected].
+For older news, see Gnus info node \"New Features\".\n\n")
 
 (defvar gnus-news-trailer
 "
 * For older news, see Gnus info node \"New Features\".
 
 ----------------------------------------------------------------------
-Copyright information:
+
+This file is part of GNU Emacs.
 
-Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006 Free Software Foundation, Inc.
+GNU Emacs is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.
 
-   Permission is granted to anyone to make or distribute verbatim copies
-   of this document as received, in any medium, provided that the
-   copyright notice and this permission notice are preserved,
-   thus giving the recipient permission to redistribute in turn.
-
-   Permission is granted to distribute modified versions
-   of this document, or of portions of it,
-   under the above conditions, provided also that they
-   carry prominent notices stating who last changed them.
 \nLocal variables:\nmode: outline
 paragraph-separate: \"[ 	]*$\"\nend:\n")
 
Index: gnus/texi/gnus-news.texi
diff -u gnus/texi/gnus-news.texi:7.46 gnus/texi/gnus-news.texi:7.51
--- gnus/texi/gnus-news.texi:7.46	Fri Mar 31 20:03:55 2006
+++ gnus/texi/gnus-news.texi	Wed Apr 11 17:16:20 2007
@@ -82,6 +82,10 @@
 @kbd{/ r} (@code{gnus-summary-limit-to-replied}) and @kbd{/ R}
 (@code{gnus-summary-limit-to-recipient}).  @xref{Limiting}.
 
+@item You can now fetch all ticked articles from the server using
+@kbd{Y t} (@code{gnus-summary-insert-ticked-articles}).  @xref{Summary
+Generation Commands}.
+
 @item Gnus supports a new sort command in the Summary buffer:
 @kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}).  @xref{Summary
 Sorting}.
@@ -121,8 +125,9 @@
 @item
 The option @code{mm-fill-flowed} can be used to disable treatment of
 format=flowed messages.  Also, flowed text is disabled when sending
-inline @acronym{PGP} signed messages.
-@xref{Flowed text, ,Flowed text, emacs-mime, The Emacs MIME Manual}.
+inline @acronym{PGP} signed messages.  @xref{Flowed text, ,Flowed text,
+emacs-mime, The Emacs MIME Manual}.  (New in Gnus 5.10.7)
+@c This entry is also present in the node "Oort Gnus".
 
 @end itemize
 
@@ -145,6 +150,17 @@
 The @code{References} header is hidden by default.  To make all
 headers visible, use @code{(setq message-hidden-headers nil)}.
 @xref{Message Headers, ,Message Headers, message, Message Manual}.
+
+@item You can highlight different levels of citations like in the
+article buffer.  See @code{gnus-message-highlight-citation}.
+
+@item @code{auto-fill-mode} is enabled by default in Message mode.
+See @code{message-fill-column}.  @xref{Various Message Variables, ,
+Message Headers, message, Message Manual}.
+
+@item You can now store signature files in a special directory
+named @code{message-signature-directory}.
+
 @end itemize
 
 @item Changes in back ends
@@ -177,6 +193,15 @@
 
 @item The nnml back end allows other compression programs beside @file{gzip}
 for compressed message files.  @xref{Mail Spool}.
+
+@item The nnml back end supports group compaction.
+
+This feature, accessible via the functions
+@code{gnus-group-compact-group} (@kbd{G z} in the group buffer) and
+@code{gnus-server-compact-server} (@kbd{z} in the server buffer)
+renumbers all articles in a group, starting from 1 and removing gaps.
+As a consequence, you get a correct total article count (until
+messages are deleted again).
 @end itemize
 
 @item Appearance
Index: gnus/texi/gnus-refcard.tex
diff -u gnus/texi/gnus-refcard.tex:7.4 gnus/texi/gnus-refcard.tex:7.6
--- gnus/texi/gnus-refcard.tex:7.4	Tue Apr 18 21:35:22 2006
+++ gnus/texi/gnus-refcard.tex	Fri Mar  2 00:43:24 2007
@@ -5,10 +5,18 @@
 % gnuslogo-booklet.eps).
 %
 % From this LaTeX file (gnus-refcard.tex) plus a single logo (gnus-logo.eps),
-% we can generate the refcard and the booklet version.  Appropriate Makefile
-% rules were added.  This simplifies to distribute the refcard with Emacs.
+% we can generate the refcard and the booklet version.  This simplifies to
+% distribute the refcard with Emacs.  Appropriate Makefile rules were added in
+% gnus/texi/Makefile.
+
+% For Emacs, we may use the following commands (w/o) using Gnus' Makefile:
 %
-% (Reiner Steib, March 2005)
+%   latex gnus-refcard.tex &&
+%   dvips -t letter -f gnus-refcard.dvi > gnus-refcard.ps
+%   
+%   latex '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}' &&
+%   mv gnus-refcard.dvi gnus-booklet.dvi &&
+%   dvips -t letter -f gnus-booklet.dvi > gnus-booklet.ps
 
 \usepackage{ifthen}
 \ifthenelse{\isundefined{\booklettrue}}{
@@ -51,17 +59,9 @@
   \def\Guide{Booklet}\def\guide{booklet}
   \def\logoscale{0.5}% FIXME: too large for 2up printing?  --rsteib
   
-  % FIXME: Use geometry package.  --rsteib
-%   \ifthenelse{\isundefined{\letterpapertrue}}{
-%     \textwidth 4.9in \textheight 7.35in \topmargin -1.0in
-%   }{
-%     \textwidth 4.5in \textheight 7.5in \topmargin -1.0in
-%   }
-%   \oddsidemargin -0.5in \evensidemargin -0.5in
   \ifthenelse{\isundefined{\letterpapertrue}}{
     \geometry{a5paper,hmargin=10mm,tmargin=10mm,bmargin=4mm}
   }{
-    % FIXME: Use geometry package.  --rsteib
     \geometry{a5paper,hmargin=20mm,tmargin=10mm,bmargin=4mm}
   }
   
@@ -111,13 +111,17 @@
 \newcommand*{\Logo}[1]{\centerline{%
     \includegraphics[width=\logoscale\logowidth]{gnus-logo}}}
 
+%%  Contributions by:
+%% 1995 Vladimir Alexiev <[email protected]>
+%% 2000 Felix Natter <[email protected]>
+%% 2001, 2002, 2003, 2005 \author.
+%% Original Gnus manual 1994 Lars Magne Ingebrigtsen
+%% Some material from Emacs Help Bindings feature (C-h b).
+%% Gnus logo by Luis Fernandes.
 \newcommand{\Copyright}{%
   \begin{center}
-    Copyright \copyright\ 1995, 2002, 2003, 2004,
-       2005, 2006 Free Software Foundation, Inc.\\*
-    Copyright \copyright\ 1995 Vladimir Alexiev
-    $<[email protected]$>$.\\*
-    Copyright \copyright\ 2000 Felix Natter $<[email protected]$>$.\\*
+    Copyright \copyright\ 1995, 2000, 2002, 2003, 2004,
+       2005, 2006, 2007  Free Software Foundation, Inc.\\*
     Copyright \copyright\ 2001, 2002, 2003, 2004, 2005 \author.\\*
     Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
     Ingebrigtsen.\\*
Index: gnus/texi/gnus.texi
diff -u gnus/texi/gnus.texi:7.181 gnus/texi/gnus.texi:7.223
--- gnus/texi/gnus.texi:7.181	Sat Apr 22 03:42:18 2006
+++ gnus/texi/gnus.texi	Tue May  1 17:16:55 2007
@@ -10,7 +10,7 @@
 
 @copying
 Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -52,7 +52,7 @@
 \begin{document}
 
 % Adjust ../Makefile.in if you change the following line:
-\newcommand{\gnusversionname}{No Gnus v0.4}
+\newcommand{\gnusversionname}{No Gnus v0.5}
 \newcommand{\gnuschaptername}{}
 \newcommand{\gnussectionname}{}
 
@@ -362,7 +362,7 @@
 luck.
 
 @c Adjust ../Makefile.in if you change the following line:
-This manual corresponds to No Gnus v0.4.
+This manual corresponds to No Gnus v0.5.
 
 @end ifinfo
 
@@ -944,11 +944,17 @@
 @chapter Starting Gnus
 @cindex starting up
 
+If you are haven't used Emacs much before using Gnus, read @ref{Emacs
+for Heathens} first.
+
 @kindex M-x gnus
 @findex gnus
 If your system administrator has set things up properly, starting Gnus
 and reading news is extremely easy---you just type @kbd{M-x gnus} in
-your Emacs.
+your Emacs.  If not, you should customize the variable
+@code{gnus-select-method} as described in @ref{Finding the News}.  For a
+minimal setup for posting should also customize the variables
+@code{user-full-name} and @code{user-mail-address}.
 
 @findex gnus-other-frame
 @kindex M-x gnus-other-frame
@@ -1727,6 +1733,15 @@
 * Group Highlighting::          Having nice colors in the group buffer.
 @end menu
 
+You can customize the Group Mode tool bar, see @kbd{M-x
+customize-apropos RET gnus-group-tool-bar}.  This feature is only
+available in Emacs.
+
+The tool bar icons are now (de)activated correctly depending on the
+cursor position.  Therefore, moving around in the Group Buffer is
+slower.  You can disable this via the variable
+@code{gnus-group-update-tool-bar}.  Its default value depends on your
+Emacs version.
 
 @node Group Line Specification
 @subsection Group Line Specification
@@ -1806,8 +1821,15 @@
 hysterical raisins, even the mail back ends, where the true number of
 unread messages might be available efficiently, use the same limited
 interface.  To remove this restriction from Gnus means that the back
-end interface has to be changed, which is not an easy job.  If you
-want to work on this, please contact the Gnus mailing list.
+end interface has to be changed, which is not an easy job.
+
+The nnml backend (@pxref{Mail Spool}) has a feature called ``group
+compaction'' which circumvents this deficiency: the idea is to
+renumber all articles from 1, removing all gaps between numbers, hence
+getting a correct total count.  Other backends may support this in the
+future.  In order to keep your total article count relatively up to
+date, you might want to compact your groups (or even directly your
+server) from time to time. @xref{Misc Group Stuff}, @xref{Server Commands}.
 
 @item y
 Number of unread, unticked, non-dormant articles.
@@ -2153,7 +2175,7 @@
 automatically when entering a group with the @kbd{SPACE} command.
 Which article this is is controlled by the
 @code{gnus-auto-select-subject} variable.  Valid values for this
-variable is:
+variable are:
 
 @table @code
 
@@ -2509,6 +2531,10 @@
 groups under point---@code{gnus-subscribe-newsgroup-method} is not
 consulted.
 
+Changes from the group editing commands are stored in
+@file{~/.newsrc.eld} (@code{gnus-startup-file}).  An alternative is the
+variable @code{gnus-parameters}, @xref{Group Parameters}.
+
 @table @kbd
 
 @item G m
@@ -2820,6 +2846,7 @@
 
 @item auto-expire
 @cindex auto-expire
+@cindex expiring mail
 If the group parameter has an element that looks like @code{(auto-expire
 . t)}, all articles read will be marked as expirable.  For an
 alternative approach, @pxref{Expiring Mail}.
@@ -2828,6 +2855,7 @@
 
 @item total-expire
 @cindex total-expire
+@cindex expiring mail
 If the group parameter has an element that looks like
 @code{(total-expire . t)}, all read articles will be put through the
 expiry process, even if they are not marked as expirable.  Use with
@@ -2957,6 +2985,15 @@
   (signature "Funky Signature"))
 @end example
 
+If you're using topics to organize your group buffer
+(@pxref{Group Topics}), note that posting styles can also be set in
+the topics parameters. Posting styles in topic parameters apply to all
+groups in this topic. More precisely, the posting-style settings for a
+group result from the hierarchical merging of all posting-style
+entries in the parameters of this group and all the topics it belongs
+to.
+
+
 @item post-method
 @cindex post-method
 If it is set, the value is used as the method for posting message
@@ -3458,6 +3495,7 @@
 @item C-c C-x
 @kindex C-c C-x (Group)
 @findex gnus-group-expire-articles
+@cindex expiring mail
 Run all expirable articles in the current group through the expiry
 process (if any) (@code{gnus-group-expire-articles}).  That is, delete
 all expirable articles in the group that have been around for a while.
@@ -3466,6 +3504,7 @@
 @item C-c C-M-x
 @kindex C-c C-M-x (Group)
 @findex gnus-group-expire-all-groups
+@cindex expiring mail
 Run all expirable articles in all groups through the expiry process
 (@code{gnus-group-expire-all-groups}).
 
@@ -3826,6 +3865,7 @@
 @item C-c C-x
 @kindex C-c C-x (Topic)
 @findex gnus-topic-expire-articles
+@cindex expiring mail
 Run all expirable articles in the current group or topic through the
 expiry process (if any)
 (@code{gnus-topic-expire-articles}).  (@pxref{Expiring Mail}).
@@ -4159,6 +4199,15 @@
 in question.  The corresponding back end must have a request-post method
 for this to work though.
 
+@item G z
+@kindex G z (Group)
+@findex gnus-group-compact-group
+
+Compact the group under point (@code{gnus-group-compact-group}).
+Currently implemented only in nnml (@pxref{Mail Spool}).  This removes
+gaps between article numbers, hence getting a correct total article
+count.
+
 @end table
 
 Variables for the group buffer:
@@ -4517,6 +4566,10 @@
 
 You can have as many summary buffers open as you wish.
 
+You can customize the Summary Mode tool bar, see @kbd{M-x
+customize-apropos RET gnus-summary-tool-bar}.  This feature is only
+available in Emacs.
+
 @kindex v (Summary)
 @cindex keys, reserved for users (Summary)
 The key @kbd{v} is reserved for users.  You can bind it key to some
@@ -4630,7 +4683,7 @@
 Article number.
 @item S
 Subject string.  List identifiers stripped,
-@code{gnus-list-identifies}.  @xref{Article Hiding}.
+@code{gnus-list-identifiers}.  @xref{Article Hiding}.
 @item s
 Subject if the article is the root of the thread or the previous article
 had a different subject, @code{gnus-summary-same-subject} otherwise.
@@ -6223,7 +6276,7 @@
 used for marking articles in such a way that other commands will
 process these articles.  For instance, if you process mark four
 articles and then use the @kbd{*} command, Gnus will enter these four
-commands into the cache.  For more information,
+articles into the cache.  For more information,
 @pxref{Process/Prefix}.
 
 @table @kbd
@@ -6379,6 +6432,13 @@
 (@code{gnus-summary-limit-to-recipient}).  If given a prefix, exclude
 matching articles.
 
+@item / S
+@kindex / S (Summary)
+@findex gnus-summary-limit-to-singletons
+Limit the summary buffer to articles that aren't part of any displayed
+threads (@code{gnus-summary-limit-to-singletons}).  If given a prefix,
+limit to articles that are part of displayed threads.
+
 @item / x
 @kindex / x (Summary)
 @findex gnus-summary-limit-to-extra
@@ -6413,9 +6473,9 @@
 @item / n
 @kindex / n (Summary)
 @findex gnus-summary-limit-to-articles
-Limit the summary buffer to the current article
-(@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
-convention (@pxref{Process/Prefix}).
+With prefix @samp{n}, limit the summary buffer to the next @samp{n}
+articles.  If not given a prefix, use the process marked articles
+instead.  (@code{gnus-summary-limit-to-articles}).
 
 @item / w
 @kindex / w (Summary)
@@ -6520,6 +6580,12 @@
 prefix, reverse the limit.  This command is quite slow since it
 requires selecting each article to find the matches.
 
+@item / h
+@kindex / h (Summary)
+@findex gnus-summary-limit-to-headers
+Like the previous command, only limit to headers instead
+(@code{gnus-summary-limit-to-headers}).
+
 @end table
 
 
@@ -7468,7 +7534,7 @@
 @item O m
 @kindex O m (Summary)
 @findex gnus-summary-save-article-mail
-Save the current article in mail format
+Save the current article in a Unix mail box (mbox) file
 (@code{gnus-summary-save-article-mail}).
 
 @item O r
@@ -7547,7 +7613,7 @@
 
 @vindex gnus-default-article-saver
 You can customize the @code{gnus-default-article-saver} variable to make
-Gnus do what you want it to.  You can use any of the six ready-made
+Gnus do what you want it to.  You can use any of the eight ready-made
 functions below, or you can create your own.
 
 @table @code
@@ -7588,6 +7654,13 @@
 @code{gnus-file-save-name} variable to get a file name to save the
 article in.  The default is @code{gnus-numeric-save-name}.
 
+@item gnus-summary-write-body-to-file
+@findex gnus-summary-write-body-to-file
+Write the article body straight to an ordinary file.  The file is
+overwritten if it exists.  Uses the function in the
+@code{gnus-file-save-name} variable to get a file name to save the
+article in.  The default is @code{gnus-numeric-save-name}.
+
 @item gnus-summary-save-in-folder
 @findex gnus-summary-save-in-folder
 @findex gnus-folder-save-name
@@ -7607,6 +7680,31 @@
 reader to use this setting.
 @end table
 
+The symbol of each function may have the following properties:
+
+@table @code
+@item :decode
+The value non-@code{nil} means save decoded articles.  This is
+meaningful only with @code{gnus-summary-save-in-file},
+@code{gnus-summary-save-body-in-file},
+@code{gnus-summary-write-to-file}, and
+@code{gnus-summary-write-body-to-file}.
+
+@item :function
+The value specifies an alternative function which appends, not
+overwrites, articles to a file.  This implies that when saving many
+articles at a time, @code{gnus-prompt-before-saving} is bound to
+@code{t} and all articles are saved in a single file.  This is
+meaningful only with @code{gnus-summary-write-to-file} and
+@code{gnus-summary-write-body-to-file}.
+
+@item :headers
+The value specifies the symbol of a variable of which the value
+specifies headers to be saved.  If it is omitted,
+@code{gnus-save-all-headers} and @code{gnus-saved-headers} control what
+headers should be saved.
+@end table
+
 @vindex gnus-article-save-directory
 All of these functions, except for the last one, will save the article
 in the @code{gnus-article-save-directory}, which is initialized from the
@@ -9464,11 +9562,15 @@
 
 @item gnus-article-emulate-mime
 @vindex gnus-article-emulate-mime
+@cindex uuencode
+@cindex yEnc
 There are other, non-@acronym{MIME} encoding methods used.  The most common
 is @samp{uuencode}, but yEncode is also getting to be popular.  If
 this variable is non-@code{nil}, Gnus will look in message bodies to
 see if it finds these encodings, and if so, it'll run them through the
-Gnus @acronym{MIME} machinery.  The default is @code{t}.
+Gnus @acronym{MIME} machinery.  The default is @code{t}.  Only
+single-part yEnc encoded attachments can be decoded.  There's no support
+for encoding in Gnus.
 
 @item gnus-unbuttonized-mime-types
 @vindex gnus-unbuttonized-mime-types
@@ -10149,6 +10251,7 @@
 @item B e
 @kindex B e (Summary)
 @findex gnus-summary-expire-articles
+@cindex expiring mail
 Run all expirable articles in the current group through the expiry
 process (@code{gnus-summary-expire-articles}).  That is, delete all
 expirable articles in the group that have been around for a while.
@@ -10157,6 +10260,7 @@
 @item B C-M-e
 @kindex B C-M-e (Summary)
 @findex gnus-summary-expire-articles-now
+@cindex expiring mail
 Delete all the expirable articles in the group
 (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
 articles eligible for expiry in the current group will
@@ -10497,6 +10601,12 @@
 Pull all dormant articles (for the current group) into the summary buffer
 (@code{gnus-summary-insert-dormant-articles}).
 
+@item Y t
+@kindex Y t (Summary)
+@findex gnus-summary-insert-ticked-articles
+Pull all ticked articles (for the current group) into the summary buffer
+(@code{gnus-summary-insert-ticked-articles}).
+
 @end table
 
 
@@ -11082,15 +11192,15 @@
 Remove the @code{To} header if it only contains the address identical to
 the current group's @code{to-list} parameter.
 @item cc-list
-Remove the @code{CC} header if it only contains the address identical to
+Remove the @code{Cc} header if it only contains the address identical to
 the current group's @code{to-list} parameter.
 @item date
 Remove the @code{Date} header if the article is less than three days
 old.
 @item long-to
-Remove the @code{To} header if it is very long.
+Remove the @code{To} and/or @code{Cc} header if it is very long.
 @item many-to
-Remove all @code{To} headers if there are more than one.
+Remove all @code{To} and/or @code{Cc} headers if there are more than one.
 @end table
 
 To include these three elements, you could say something like:
@@ -11335,6 +11445,58 @@
 type of the part.  This variable is ignored if the value of the
 controlling variable is a predicate list, as described above.
 
+@ifinfo
+@c Avoid sort of redundant entries in the same section for the printed
+@c manual, but add them in info to allow `i gnus-treat-foo-bar RET' or
+@c `i foo-bar'.
+@vindex gnus-treat-buttonize
+@vindex gnus-treat-buttonize-head
+@vindex gnus-treat-capitalize-sentences
+@vindex gnus-treat-overstrike
+@vindex gnus-treat-strip-cr
+@vindex gnus-treat-strip-headers-in-body
+@vindex gnus-treat-strip-leading-blank-lines
+@vindex gnus-treat-strip-multiple-blank-lines
+@vindex gnus-treat-strip-pem
+@vindex gnus-treat-strip-trailing-blank-lines
+@vindex gnus-treat-unsplit-urls
+@vindex gnus-treat-wash-html
+@vindex gnus-treat-date-english
+@vindex gnus-treat-date-iso8601
+@vindex gnus-treat-date-lapsed
+@vindex gnus-treat-date-local
+@vindex gnus-treat-date-original
+@vindex gnus-treat-date-user-defined
+@vindex gnus-treat-date-ut
+@vindex gnus-treat-from-picon
+@vindex gnus-treat-mail-picon
+@vindex gnus-treat-newsgroups-picon
+@vindex gnus-treat-display-smileys
+@vindex gnus-treat-body-boundary
+@vindex gnus-treat-display-x-face
+@vindex gnus-treat-display-face
+@vindex gnus-treat-emphasize
+@vindex gnus-treat-fill-article
+@vindex gnus-treat-fill-long-lines
+@vindex gnus-treat-hide-boring-headers
+@vindex gnus-treat-hide-citation
+@vindex gnus-treat-hide-citation-maybe
+@vindex gnus-treat-hide-headers
+@vindex gnus-treat-hide-signature
+@vindex gnus-treat-strip-banner
+@vindex gnus-treat-strip-list-identifiers
+@vindex gnus-treat-highlight-citation
+@vindex gnus-treat-highlight-headers
+@vindex gnus-treat-highlight-signature
+@vindex gnus-treat-play-sounds
+@vindex gnus-treat-translate
+@vindex gnus-treat-x-pgp-sig
+@vindex gnus-treat-unfold-headers
+@vindex gnus-treat-fold-headers
+@vindex gnus-treat-fold-newsgroups
+@vindex gnus-treat-leading-whitespace
+@end ifinfo
+
 The following treatment options are available.  The easiest way to
 customize this is to examine the @code{gnus-article-treat} customization
 group.  Values in parenthesis are suggested sensible values.  Others are
@@ -11385,41 +11547,63 @@
 
 @xref{Smileys}.
 
+@vindex gnus-treat-display-x-face
 @item gnus-treat-display-x-face (head)
 
 @xref{X-Face}.
 
+@vindex gnus-treat-display-face
 @item gnus-treat-display-face (head)
 
 @xref{Face}.
 
+@vindex gnus-treat-emphasize
 @item gnus-treat-emphasize (t, head, integer)
+@vindex gnus-treat-fill-article
 @item gnus-treat-fill-article (t, integer)
+@vindex gnus-treat-fill-long-lines
 @item gnus-treat-fill-long-lines (t, integer)
+@vindex gnus-treat-hide-boring-headers
 @item gnus-treat-hide-boring-headers (head)
+@vindex gnus-treat-hide-citation
 @item gnus-treat-hide-citation (t, integer)
+@vindex gnus-treat-hide-citation-maybe
 @item gnus-treat-hide-citation-maybe (t, integer)
+@vindex gnus-treat-hide-headers
 @item gnus-treat-hide-headers (head)
+@vindex gnus-treat-hide-signature
 @item gnus-treat-hide-signature (t, last)
+@vindex gnus-treat-strip-banner
 @item gnus-treat-strip-banner (t, last)
+@vindex gnus-treat-strip-list-identifiers
 @item gnus-treat-strip-list-identifiers (head)
 
 @xref{Article Hiding}.
 
+@vindex gnus-treat-highlight-citation
 @item gnus-treat-highlight-citation (t, integer)
+@vindex gnus-treat-highlight-headers
 @item gnus-treat-highlight-headers (head)
+@vindex gnus-treat-highlight-signature
 @item gnus-treat-highlight-signature (t, last, integer)
 
 @xref{Article Highlighting}.
 
+@vindex gnus-treat-play-sounds
 @item gnus-treat-play-sounds
+@vindex gnus-treat-translate
 @item gnus-treat-translate
 @item gnus-treat-ansi-sequences (t)
+@vindex gnus-treat-x-pgp-sig
 @item gnus-treat-x-pgp-sig (head)
 
+@vindex gnus-treat-unfold-headers
 @item gnus-treat-unfold-headers (head)
+@vindex gnus-treat-fold-headers
 @item gnus-treat-fold-headers (head)
+@vindex gnus-treat-fold-newsgroups
 @item gnus-treat-fold-newsgroups (head)
+@vindex gnus-treat-leading-whitespace
 @item gnus-treat-leading-whitespace (head)
 
 @xref{Article Header}.
@@ -11845,12 +12029,12 @@
 @cindex User-Agent
 
 This variable controls which information should be exposed in the
-User-Agent header.  It can be one of the symbols @code{gnus} (show only
-Gnus version), @code{emacs-gnus} (show only Emacs and Gnus versions),
-@code{emacs-gnus-config} (same as @code{emacs-gnus} plus system
-configuration), @code{emacs-gnus-type} (same as @code{emacs-gnus} plus
-system type) or a custom string.  If you set it to a string, be sure to
-use a valid format, see RFC 2616.
+User-Agent header.  It can be a list of symbols or a string.  Valid
+symbols are @code{gnus} (show Gnus version) and @code{emacs} (show Emacs
+version).  In addition to the Emacs version, you can add @code{codename}
+(show (S)XEmacs codename) or either @code{config} (show system
+configuration) or @code{type} (show system type).  If you set it to a
+string, be sure to use a valid format, see RFC 2616.
 
 @end table
 
@@ -11880,6 +12064,10 @@
 
 Modify to suit your needs.
 
+@vindex gnus-message-highlight-citation
+If @code{gnus-message-highlight-citation} is t, different levels of
+citations are highlighted like in Gnus article buffers also in message
+mode buffers.
 
 @node Archived Messages
 @section Archived Messages
@@ -12111,6 +12299,9 @@
 @item @code{body}
 @end itemize
 
+Note that the @code{signature-file} attribute honors the variable
+@code{message-signature-directory}.
+
 The attribute name can also be a string or a symbol.  In that case,
 this will be used as a header name, and the value will be inserted in
 the headers of the article; if the value is @code{nil}, the header
@@ -12172,7 +12363,8 @@
 The @samp{nnml:.*} rule means that you use the @code{To} address as the
 @code{From} address in all your outgoing replies, which might be handy
 if you fill many roles.
-
+You may also use @code{message-alternative-emails} instead.
+@xref{Message Headers, ,Message Headers, message, Message Manual}.
 
 @node Drafts
 @section Drafts
@@ -12541,6 +12733,15 @@
 (@code{gnus-server-regenerate-server}).  This can be useful if you have
 a mail back end that has gotten out of sync.
 
+@item z
+@kindex z (Server)
+@findex gnus-server-compact-server
+
+Compact all groups in the server under point
+(@code{gnus-server-compact-server}).  Currently implemented only in
+nnml (@pxref{Mail Spool}).  This removes gaps between article numbers,
+hence getting a correct total article count.
+
 @end table
 
 
@@ -12627,7 +12828,7 @@
 @lisp
 (setq gnus-select-method
       '(nntp "indirect"
-	     (nntp-address "news.server.example")
+             (nntp-address "news.server.example")
              (nntp-via-user-name "intermediate_user_name")
              (nntp-via-address "intermediate.host.example")
              (nntp-via-rlogin-command "ssh")
@@ -12839,8 +13040,8 @@
 @vindex nntp-server-opened-hook
 @cindex @sc{mode reader}
 @cindex authinfo
-@cindex authentification
-@cindex nntp authentification
+@cindex authentication
+@cindex nntp authentication
 @findex nntp-send-authinfo
 @findex nntp-send-mode-reader
 is run after a connection has been made.  It can be used to send
@@ -13000,6 +13201,24 @@
 in two categories: direct connection functions (four pre-made), and
 indirect ones (three pre-made).
 
+@item nntp-never-echoes-commands
+@vindex nntp-never-echoes-commands
+Non-@code{nil} means the nntp server never echoes commands.  It is
+reported that some nntps server doesn't echo commands.  So, you may want
+to set this to non-@code{nil} in the method for such a server setting
+@code{nntp-open-connection-function} to @code{nntp-open-ssl-stream} for
+example.  The default value is @code{nil}.  Note that the
+@code{nntp-open-connection-functions-never-echo-commands} variable
+overrides the @code{nil} value of this variable.
+
+@item nntp-open-connection-functions-never-echo-commands
+@vindex nntp-open-connection-functions-never-echo-commands
+List of functions that never echo commands.  Add or set a function which
+you set to @code{nntp-open-connection-function} to this list if it does
+not echo commands.  Note that a non-@code{nil} value of the
+@code{nntp-never-echoes-commands} variable overrides this variable.  The
+default value is @code{(nntp-open-network-stream)}.
+
 @item nntp-prepare-post-hook
 @vindex nntp-prepare-post-hook
 A hook run just before posting an article.  If there is no
@@ -13613,7 +13832,7 @@
 
 @vindex nnmail-mail-splitting-charset
 @vindex nnmail-mail-splitting-decodes
-By default the splitting codes @acronym{MIME} decodes headers so you
+By default, splitting @acronym{MIME}-decodes headers so you
 can match on non-@acronym{ASCII} strings.  The
 @code{nnmail-mail-splitting-charset} variable specifies the default
 charset for decoding.  The behavior can be turned off completely by
@@ -13731,7 +13950,8 @@
 rm -f $TMP; $MOVEMAIL $MAIL $TMP >/dev/null && cat $TMP
 @end example
 
-Alter this script to fit find the @samp{movemail} you want to use.
+Alter this script to fit the @samp{movemail} and temporary
+file you want to use.
 
 
 @item directory
@@ -13860,16 +14080,17 @@
 @vindex pop3-movemail
 @vindex pop3-leave-mail-on-server
 If the @code{:program} and @code{:function} keywords aren't specified,
-@code{pop3-movemail} will be used.  If the
-@code{pop3-leave-mail-on-server} is non-@code{nil} the mail is to be
-left on the @acronym{POP} server after fetching when using
-@code{pop3-movemail}.  Note that POP servers maintain no state
-information between sessions, so what the client believes is there and
-what is actually there may not match up.  If they do not, then the whole
-thing can fall apart and leave you with a corrupt mailbox.
-
-Here are some examples.  Fetch from the default @acronym{POP} server,
-using the default user name, and default fetcher:
+@code{pop3-movemail} will be used.  If @code{pop3-leave-mail-on-server}
+is non-@code{nil} the mail is to be left on the @acronym{POP} server
+after fetching when using @code{pop3-movemail}.  Note that POP servers
+maintain no state information between sessions, so what the client
+believes is there and what is actually there may not match up.  If they
+do not, then you may get duplicate mails or the whole thing can fall
+apart and leave you with a corrupt mailbox.
+
+Here are some examples for getting mail from a @acronym{POP} server.
+Fetch from the default @acronym{POP} server, using the default user
+name, and default fetcher:
 
 @lisp
 (pop)
@@ -14733,6 +14954,7 @@
 @node Expiring Mail
 @subsection Expiring Mail
 @cindex article expiry
+@cindex expiring mail
 
 Traditional mail readers have a tendency to remove mail articles when
 you mark them as read, in some way.  Gnus takes a fundamentally
@@ -15005,12 +15227,16 @@
 @findex nnmail-remove-tabs
 Translate all @samp{TAB} characters into @samp{SPACE} characters.
 
-@item nnmail-fix-eudora-headers
-@findex nnmail-fix-eudora-headers
+@item nnmail-ignore-broken-references
+@findex nnmail-ignore-broken-references
+@c @findex nnmail-fix-eudora-headers
 @cindex Eudora
-Eudora produces broken @code{References} headers, but OK
-@code{In-Reply-To} headers.  This function will get rid of the
-@code{References} headers.
+@cindex Pegasus
+Some mail user agents (e.g. Eudora and Pegasus) produce broken
+@code{References} headers, but correct @code{In-Reply-To} headers.  This
+function will get rid of the @code{References} header if the headers
+contain a line matching the regular expression
+@code{nnmail-broken-references-mailers}.
 
 @end table
 
@@ -15297,7 +15523,7 @@
 files.  This requires @code{auto-compression-mode} to be enabled
 (@pxref{Compressed Files, ,Compressed Files, emacs, The Emacs Manual}).
 If the value of @code{nnml-use-compressed-files} is a string, it is used
-as the file extension specifying the comression program.  You can set it
+as the file extension specifying the compression program.  You can set it
 to @samp{.bz2} if your Emacs supports it.  A value of @code{t} is
 equivalent to @samp{.gz}.
 
@@ -16671,7 +16897,7 @@
 clients.  (In other words, Gnus has two ``Tick'' marks and @acronym{IMAP}
 has only one.)
 
-Probably the only reason for frobing this would be if you're trying
+Probably the only reason for frobbing this would be if you're trying
 enable per-user persistent dormant flags, using something like:
 
 @lisp
@@ -16687,6 +16913,7 @@
 @item nnimap-expunge-search-string
 @cindex expunging
 @vindex nnimap-expunge-search-string
+@cindex expiring @acronym{IMAP} mail
 
 This variable contain the @acronym{IMAP} search command sent to server when
 searching for articles eligible for expiring.  The default is
@@ -16698,6 +16925,10 @@
 messages instead of the internal article date.  See section 6.4.4 of
 RFC 2060 for more information on valid strings.
 
+However, if @code{nnimap-search-uids-not-since-is-evil}
+is true, this variable has no effect since the search logic
+is reversed, as described below.
+
 @item nnimap-authinfo-file
 @vindex nnimap-authinfo-file
 
@@ -16723,6 +16954,47 @@
 seem to need this under some circumstances; it was reported that
 Courier 1.7.1 did.
 
+@item nnimap-nov-is-evil
+@vindex nnimap-nov-is-evil
+@cindex Courier @acronym{IMAP} server
+@cindex @acronym{NOV}
+
+Never generate or use a local @acronym{NOV} database. Defaults to the
+value of @code{gnus-agent}.
+
+Using a @acronym{NOV} database usually makes header fetching much
+faster, but it uses the @code{UID SEARCH UID} command, which is very
+slow on some servers (notably some versions of Courier). Since the Gnus
+Agent caches the information in the @acronym{NOV} database without using
+the slow command, this variable defaults to true if the Agent is in use,
+and false otherwise.
+
+@item nnimap-search-uids-not-since-is-evil
+@vindex nnimap-search-uids-not-since-is-evil
+@cindex Courier @acronym{IMAP} server
+@cindex expiring @acronym{IMAP} mail
+
+Avoid the @code{UID SEARCH UID @var{message numbers} NOT SINCE
+@var{date}} command, which is slow on some @acronym{IMAP} servers
+(notably, some versions of Courier). Instead, use @code{UID SEARCH SINCE
+@var{date}} and prune the list of expirable articles within Gnus.
+
+When Gnus expires your mail (@pxref{Expiring Mail}), it starts with a
+list of expirable articles and asks the IMAP server questions like ``Of
+these articles, which ones are older than a week?'' While this seems
+like a perfectly reasonable question, some IMAP servers take a long time
+to answer it, since they seemingly go looking into every old article to
+see if it is one of the expirable ones. Curiously, the question ``Of
+@emph{all} articles, which ones are newer than a week?'' seems to be
+much faster to answer, so setting this variable causes Gnus to ask this
+question and figure out the answer to the real question itself.
+
+This problem can really sneak up on you: when you first configure Gnus,
+everything works fine, but once you accumulate a couple thousand
+messages, you start cursing Gnus for being so slow. On the other hand,
+if you get a lot of email within a week, setting this variable will
+cause a lot of network traffic between Gnus and the IMAP server.
+
 @end table
 
 @menu
@@ -16910,7 +17182,7 @@
 
 @node Expiring in IMAP
 @subsection Expiring in IMAP
-@cindex expiring imap mail
+@cindex expiring @acronym{IMAP} mail
 
 Even though @code{nnimap} is not a proper @code{nnmail} derived back
 end, it supports most features in regular expiring (@pxref{Expiring
@@ -16929,6 +17201,9 @@
 your server must support permanent storage of client specific flags on
 messages.  Most do, fortunately.
 
+If expiring @acronym{IMAP} mail seems very slow, try setting the server
+variable @code{nnimap-search-uids-not-since-is-evil}.
+
 @table @code
 
 @item nnmail-expiry-wait
@@ -19213,7 +19488,7 @@
 @findex gnus-agent-expire-group
 @cindex agent expiry
 @cindex Gnus agent expiry
-@cindex expiry
+@cindex expiry, in Gnus agent
 
 The Agent back end, @code{nnagent}, doesn't handle expiry.  Well, at
 least it doesn't handle it like other back ends.  Instead, there are
@@ -19509,20 +19784,20 @@
 @file{~/.gnus.el} file to get started.
 
 @lisp
-;;; @r{Define how Gnus is to fetch news.  We do this over @acronym{NNTP}}
-;;; @r{from your ISP's server.}
+;; @r{Define how Gnus is to fetch news.  We do this over @acronym{NNTP}}
+;; @r{from your ISP's server.}
 (setq gnus-select-method '(nntp "news.your-isp.com"))
 
-;;; @r{Define how Gnus is to read your mail.  We read mail from}
-;;; @r{your ISP's @acronym{POP} server.}
+;; @r{Define how Gnus is to read your mail.  We read mail from}
+;; @r{your ISP's @acronym{POP} server.}
 (setq mail-sources '((pop :server "pop.your-isp.com")))
 
-;;; @r{Say how Gnus is to store the mail.  We use nnml groups.}
+;; @r{Say how Gnus is to store the mail.  We use nnml groups.}
 (setq gnus-secondary-select-methods '((nnml "")))
 
-;;; @r{Make Gnus into an offline newsreader.}
-;;; (gnus-agentize) ; @r{The obsolete setting.}
-;;; (setq gnus-agent t) ; @r{Now the default.}
+;; @r{Make Gnus into an offline newsreader.}
+;; (gnus-agentize) ; @r{The obsolete setting.}
+;; (setq gnus-agent t) ; @r{Now the default.}
 @end lisp
 
 That should be it, basically.  Put that in your @file{~/.gnus.el} file,
@@ -19560,7 +19835,7 @@
 
 @example
 #!/bin/sh
-emacs -batch -l ~/.emacs -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1
+emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-agent-batch >/dev/null 2>&1
 @end example
 
 
@@ -20769,6 +21044,13 @@
 
 See?  Simple.
 
+@vindex gnus-inhibit-slow-scoring
+You can inhibit scoring the slow scoring on headers or body by setting
+the variable @code{gnus-inhibit-slow-scoring}.  If
+@code{gnus-inhibit-slow-scoring} is regexp, slow scoring is inhibited if
+the group matches the regexp.  If it is t, slow scoring on it is
+inhibited for all groups.
+
 
 @node Scoring Tips
 @section Scoring Tips
@@ -21138,7 +21420,7 @@
 @example
 ((&
   ("from" "Lars Ingebrigtsen")
-  (1- ("from" "Reig Eigir Logge")))
+  (1- ("from" "Reig Eigil Logge")))
  -100000)
 @end example
 
@@ -22604,8 +22886,8 @@
 @section Image Enhancements
 
 XEmacs, as well as Emacs 21@footnote{Emacs 21 on MS Windows doesn't
-support images yet.}, is able to display pictures and stuff, so Gnus has
-taken advantage of that.
+support images, Emacs 22 does.} and up, are able to display pictures and
+stuff, so Gnus has taken advantage of that.
 
 @menu
 * X-Face::                      Display a funky, teensy black-and-white image.
@@ -22642,21 +22924,26 @@
 has image support the default action is to display the face before the
 @code{From} header.  If there's no native @code{X-Face} support, Gnus
 will try to convert the @code{X-Face} header using external programs
-from the @code{pbmplus} package and friends.  For XEmacs it's faster if
-XEmacs has been compiled with @code{X-Face} support.  The default action
-under Emacs without image support is to fork off the @code{display}
-program.
+from the @code{pbmplus} package and friends, see below.  For XEmacs it's
+faster if XEmacs has been compiled with @code{X-Face} support.  The
+default action under Emacs without image support is to fork off the
+@code{display} program.
 
-On a GNU/Linux system, the @code{display} program is from the
+On a GNU/Linux system, the @code{display} program is included in the
 ImageMagick package.  For external conversion programs look for packages
 with names like @code{netpbm}, @code{libgr-progs} and @code{compface}.
+On Windows, you may use the packages @code{netpbm} and @code{compface}
+from @url{http://gnuwin32.sourceforge.net}.  You need to add the
+@code{bin} directory to your @code{PATH} environment variable.
+@c In fact only the following DLLs and binaries seem to be required:
+@c compface1.dll uncompface.exe libnetpbm10.dll icontopbm.exe
 
-The variable that controls this is the
-@code{gnus-article-x-face-command} variable.  If this variable is a
+The variable @code{gnus-article-x-face-command} controls which programs
+are used to display the @code{X-Face} header.  If this variable is a
 string, this string will be executed in a sub-shell.  If it is a
 function, this function will be called with the face as the argument.
-If the @code{gnus-article-x-face-too-ugly} (which is a regexp) matches
-the @code{From} header, the face will not be shown.
+If @code{gnus-article-x-face-too-ugly} (which is a regexp) matches the
+@code{From} header, the face will not be shown.
 
 (Note: @code{x-face} is used in the variable/function names, not
 @code{xface}).
@@ -23111,7 +23398,7 @@
 analysis of spam works very well in most of the cases, but it can
 classify legitimate e-mail as spam in some cases.  It takes time to
 run the analysis, the full message must be analyzed, and the user has
-to store the database of spam analyses.  Statistical analysis on the
+to store the database of spam analysis.  Statistical analysis on the
 server is gaining popularity.  This has the advantage of letting the
 user Just Read Mail, but has the disadvantage that it's harder to tell
 the server that it has misclassified mail.
@@ -23490,7 +23777,7 @@
 group specified by the variable @code{gnus-spam-process-destinations},
 or the group parameter @code{spam-process-destination}.  If these
 variables are not set, the articles are left in their current group.
-If an article cannot not be moved (e.g., with a read-only backend such
+If an article cannot be moved (e.g., with a read-only backend such
 as @acronym{NNTP}), it is copied.
 
 If an article is moved to another group, it is processed again when
@@ -23826,9 +24113,6 @@
 (gnus-registry-initialize)
 (spam-initialize)
 
-;; @r{I like @kbd{C-s} for marking spam}
-(define-key gnus-summary-mode-map "\C-s" 'gnus-summary-mark-as-spam)
-
 (setq
  spam-log-to-registry t     ; @r{for spam autodetection}
  spam-use-BBDB t
@@ -24417,7 +24701,7 @@
 
 @end defvar
 
-@defvar spam-spamassassin-path
+@defvar spam-spamassassin-program
 
 This variable points to the SpamAssassin executable.  If you have
 @code{spamd} running, you can set this variable to the @code{spamc}
@@ -24462,7 +24746,7 @@
 the default value of @samp{spam}.
 @end defvar
 
-@defvar spam-ifile-database-path
+@defvar spam-ifile-database
 
 This is the filename for the ifile database.  It is not specified by
 default, so ifile will use its own default database name.
@@ -24581,7 +24865,7 @@
 
 @defvar spam-spamoracle-database
 By default, SpamOracle uses the file @file{~/.spamoracle.db} as a database to
-store its analyses.  This is controlled by the variable
+store its analysis.  This is controlled by the variable
 @code{spam-spamoracle-database} which defaults to @code{nil}.  That means
 the default SpamOracle database will be used.  In case you want your
 database to live somewhere special, set
@@ -24855,10 +25139,10 @@
 @end defun
 
 Usually you would call @code{spam-stat-process-spam-directory} on a
-directory such as @file{~/Mail/mail/spam} (this usually corresponds
-the the group @samp{nnml:mail.spam}), and you would call
+directory such as @file{~/Mail/mail/spam} (this usually corresponds to
+the group @samp{nnml:mail.spam}), and you would call
 @code{spam-stat-process-non-spam-directory} on a directory such as
-@file{~/Mail/mail/misc} (this usually corresponds the the group
+@file{~/Mail/mail/misc} (this usually corresponds to the group
 @samp{nnml:mail.misc}).
 
 When you are using @acronym{IMAP}, you won't have the mails available
@@ -25072,7 +25356,7 @@
 @subsection Dired
 @cindex dired
 
-@code{gnus-dired-minor-mode} provided some useful functions for dired
+@code{gnus-dired-minor-mode} provides some useful functions for dired
 buffers.  It is enabled with
 @lisp
 (add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
@@ -25081,6 +25365,7 @@
 @table @kbd
 @item C-c C-m C-a
 @findex gnus-dired-attach
+@cindex attachments, selection via dired
 Send dired's marked files as an attachment (@code{gnus-dired-attach}).
 You will be prompted for a message buffer.
 
@@ -26668,23 +26953,10 @@
 
 @itemize @bullet
 
-@item
-@kbd{F} (@code{gnus-article-followup-with-original}) and @kbd{R}
-(@code{gnus-article-reply-with-original}) only yank the text in the
-region if the region is active.
-
-@item
-@code{gnus-group-read-ephemeral-group} can be called interactively,
-using @kbd{G M}.
-
-@item
-In draft groups, @kbd{e} is now bound to @code{gnus-draft-edit-message}.
-Use @kbd{B w} for @code{gnus-summary-edit-article} instead.
-
-@item
-The revised Gnus @acronym{FAQ} is included in the manual,
-@xref{Frequently Asked Questions}.
+@item Installation changes
+@c ***********************
 
+@itemize @bullet
 @item
 Upgrading from previous (stable) version if you have used Oort.
 
@@ -26698,40 +26970,102 @@
 isn't save in general.
 
 @item
-Article Buttons
+Lisp files are now installed in @file{.../site-lisp/gnus/} by default.
+It defaulted to @file{.../site-lisp/} formerly.  In addition to this,
+the new installer issues a warning if other Gnus installations which
+will shadow the latest one are detected.  You can then remove those
+shadows manually or remove them using @code{make
+remove-installed-shadows}.
 
-More buttons for URLs, mail addresses, Message-IDs, Info links, man
-pages and Emacs or Gnus related references.  @xref{Article Buttons}.  The
-variables @code{gnus-button-@var{*}-level} can be used to control the
-appearance of all article buttons.  @xref{Article Button Levels}.
+@item
+New @file{make.bat} for compiling and installing Gnus under MS Windows
+
+Use @file{make.bat} if you want to install Gnus under MS Windows, the
+first argument to the batch-program should be the directory where
+@file{xemacs.exe} respectively @file{emacs.exe} is located, iff you want
+to install Gnus after compiling it, give @file{make.bat} @code{/copy} as
+the second parameter.
+
+@file{make.bat} has been rewritten from scratch, it now features
+automatic recognition of XEmacs and GNU Emacs, generates
+@file{gnus-load.el}, checks if errors occur while compilation and
+generation of info files and reports them at the end of the build
+process.  It now uses @code{makeinfo} if it is available and falls
+back to @file{infohack.el} otherwise.  @file{make.bat} should now
+install all files which are necessary to run Gnus and be generally a
+complete replacement for the @code{configure; make; make install}
+cycle used under Unix systems.
+
+The new @file{make.bat} makes @file{make-x.bat} and @file{xemacs.mak}
+superfluous, so they have been removed.
 
 @item
-Dired integration
+@file{~/News/overview/} not used.
 
-@code{gnus-dired-minor-mode} (see @ref{Other modes}) installs key
-bindings in dired buffers to send a file as an attachment, open a file
-using the appropriate mailcap entry, and print a file using the mailcap
-entry.
+As a result of the following change, the @file{~/News/overview/}
+directory is not used any more.  You can safely delete the entire
+hierarchy.
 
+@c FIXME: `gnus-load' is mentioned in README, which is not included in
+@c CVS.  We should find a better place for this item.
 @item
-Gnus can display RSS newsfeeds as a newsgroup.  @xref{RSS}.
+@code{(require 'gnus-load)}
+
+If you use a stand-alone Gnus distribution, you'd better add
+@code{(require 'gnus-load)} into your @file{~/.emacs} after adding the Gnus
+lisp directory into load-path.
+
+File @file{gnus-load.el} contains autoload commands, functions and variables,
+some of which may not be included in distributions of Emacsen.
+
+@end itemize
+
+@item New packages and libraries within Gnus
+@c *****************************************
+
+@itemize @bullet
 
 @item
-Single-part yenc encoded attachments can be decoded.
+The revised Gnus @acronym{FAQ} is included in the manual,
+@xref{Frequently Asked Questions}.
 
 @item
-Picons
+@acronym{TLS} wrapper shipped with Gnus
 
-The picons code has been reimplemented to work in GNU Emacs---some of
-the previous options have been removed or renamed.
+@acronym{TLS}/@acronym{SSL} is now supported in @acronym{IMAP} and
+@acronym{NNTP} via @file{tls.el} and GNUTLS.  The old
+@acronym{TLS}/@acronym{SSL} support via (external third party)
+@file{ssl.el} and OpenSSL still works.
 
-Picons are small ``personal icons'' representing users, domain and
-newsgroups, which can be displayed in the Article buffer.
-@xref{Picons}.
+@item
+Improved anti-spam features.
+
+Gnus is now able to take out spam from your mail and news streams
+using a wide variety of programs and filter rules.  Among the supported
+methods are RBL blocklists, bogofilter and white/blacklists.  Hooks
+for easy use of external packages such as SpamAssassin and Hashcash
+are also new.  @ref{Thwarting Email Spam} and @ref{Spam Package}.
+@c FIXME: @xref{Spam Package}?.  Should this be under Misc?
 
 @item
-If the new option @code{gnus-treat-body-boundary} is non-@code{nil}, a
-boundary line is drawn at the end of the headers.
+Gnus supports server-side mail filtering using Sieve.
+
+Sieve rules can be added as Group Parameters for groups, and the
+complete Sieve script is generated using @kbd{D g} from the Group
+buffer, and then uploaded to the server using @kbd{C-c C-l} in the
+generated Sieve buffer.  @xref{Sieve Commands}, and the new Sieve
+manual @ref{Top, , Top, sieve, Emacs Sieve}.
+
+@end itemize
+
+@item Changes in group mode
+@c ************************
+
+@itemize @bullet
+
+@item
+@code{gnus-group-read-ephemeral-group} can be called interactively,
+using @kbd{G M}.
 
 @item
 Retrieval of charters and control messages
@@ -26740,19 +27074,94 @@
 control messages (@kbd{H C}).
 
 @item
-Delayed articles
+The new variable @code{gnus-parameters} can be used to set group parameters.
 
-You can delay the sending of a message with @kbd{C-c C-j} in the Message
-buffer.  The messages are delivered at specified time.  This is useful
-for sending yourself reminders.  @xref{Delayed Articles}.
+Earlier this was done only via @kbd{G p} (or @kbd{G c}), which stored
+the parameters in @file{~/.newsrc.eld}, but via this variable you can
+enjoy the powers of customize, and simplified backups since you set the
+variable in @file{~/.gnus.el} instead of @file{~/.newsrc.eld}.  The
+variable maps regular expressions matching group names to group
+parameters, a'la:
+@lisp
+(setq gnus-parameters
+      '(("mail\\..*"
+         (gnus-show-threads nil)
+         (gnus-use-scoring nil))
+        ("^nnimap:\\(foo.bar\\)$"
+         (to-group . "\\1"))))
+@end lisp
 
 @item
-If @code{auto-compression-mode} is enabled, attachments are automatically
-decompressed when activated.
+Unread count correct in nnimap groups.
+
+The estimated number of unread articles in the group buffer should now
+be correct for nnimap groups.  This is achieved by calling
+@code{nnimap-fixup-unread-after-getting-new-news} from the
+@code{gnus-setup-news-hook} (called on startup) and
+@code{gnus-after-getting-new-news-hook}. (called after getting new
+mail).  If you have modified those variables from the default, you may
+want to add @code{nnimap-fixup-unread-after-getting-new-news} again.  If
+you were happy with the estimate and want to save some (minimal) time
+when getting new mail, remove the function.
 
 @item
-If the new option @code{nnml-use-compressed-files} is non-@code{nil},
-the nnml back end allows compressed message files.
+Group names are treated as UTF-8 by default.
+
+This is supposedly what USEFOR wanted to migrate to.  See
+@code{gnus-group-name-charset-group-alist} and
+@code{gnus-group-name-charset-method-alist} for customization.
+
+@item
+@code{gnus-group-charset-alist} and
+@code{gnus-group-ignored-charsets-alist}.
+
+The regexps in these variables are compared with full group names
+instead of real group names in 5.8.  Users who customize these
+variables should change those regexps accordingly.  For example:
+@lisp
+("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr)
+@end lisp
+
+@end itemize
+
+@item Changes in summary and article mode
+@c **************************************
+
+@itemize @bullet
+
+@item
+@kbd{F} (@code{gnus-article-followup-with-original}) and @kbd{R}
+(@code{gnus-article-reply-with-original}) only yank the text in the
+region if the region is active.
+
+@item
+In draft groups, @kbd{e} is now bound to @code{gnus-draft-edit-message}.
+Use @kbd{B w} for @code{gnus-summary-edit-article} instead.
+
+@item
+Article Buttons
+
+More buttons for URLs, mail addresses, Message-IDs, Info links, man
+pages and Emacs or Gnus related references.  @xref{Article Buttons}.  The
+variables @code{gnus-button-@var{*}-level} can be used to control the
+appearance of all article buttons.  @xref{Article Button Levels}.
+
+@item
+Single-part yenc encoded attachments can be decoded.
+
+@item
+Picons
+
+The picons code has been reimplemented to work in GNU Emacs---some of
+the previous options have been removed or renamed.
+
+Picons are small ``personal icons'' representing users, domain and
+newsgroups, which can be displayed in the Article buffer.
+@xref{Picons}.
+
+@item
+If the new option @code{gnus-treat-body-boundary} is non-@code{nil}, a
+boundary line is drawn at the end of the headers.
 
 @item
 Signed article headers (X-PGP-Sig) can be verified with @kbd{W p}.
@@ -26778,13 +27187,6 @@
 opposed to old but unread messages).
 
 @item
-The new option @code{gnus-gcc-mark-as-read} automatically marks
-Gcc articles as read.
-
-@item
-The nndoc back end now supports mailman digests and exim bounces.
-
-@item
 Gnus supports RFC 2369 mailing list headers, and adds a number of
 related commands in mailing list groups.  @xref{Mailing List}.
 
@@ -26793,55 +27195,11 @@
 in English.  @xref{Article Date}.
 
 @item
-The envelope sender address can be customized when using Sendmail.
-@xref{Mail Variables, Mail Variables,, message, Message Manual}.
-
-@item
 diffs are automatically highlighted in groups matching
 @code{mm-uu-diff-groups-regexp}
 
 @item
-@acronym{TLS} wrapper shipped with Gnus
-
-@acronym{TLS}/@acronym{SSL} is now supported in @acronym{IMAP} and
-@acronym{NNTP} via @file{tls.el} and GNUTLS.  The old
-@acronym{TLS}/@acronym{SSL} support via (external third party)
-@file{ssl.el} and OpenSSL still works.
-
-@item
-New @file{make.bat} for compiling and installing Gnus under MS Windows
-
-Use @file{make.bat} if you want to install Gnus under MS Windows, the
-first argument to the batch-program should be the directory where
-@file{xemacs.exe} respectively @file{emacs.exe} is located, iff you want
-to install Gnus after compiling it, give @file{make.bat} @code{/copy} as
-the second parameter.
-
-@file{make.bat} has been rewritten from scratch, it now features
-automatic recognition of XEmacs and GNU Emacs, generates
-@file{gnus-load.el}, checks if errors occur while compilation and
-generation of info files and reports them at the end of the build
-process.  It now uses @code{makeinfo} if it is available and falls
-back to @file{infohack.el} otherwise.  @file{make.bat} should now
-install all files which are necessary to run Gnus and be generally a
-complete replacement for the @code{configure; make; make install}
-cycle used under Unix systems.
-
-The new @file{make.bat} makes @file{make-x.bat} superfluous, so it has
-been removed.
-
-@item
-Support for non-@acronym{ASCII} domain names
-
-Message supports non-@acronym{ASCII} domain names in From:, To: and
-Cc: and will query you whether to perform encoding when you try to
-send a message.  The variable @code{message-use-idna} controls this.
-Gnus will also decode non-@acronym{ASCII} domain names in From:, To:
-and Cc: when you view a message.  The variable @code{gnus-use-idna}
-controls this.
-
-@item
-Better handling of Microsoft citation styles
+Better handling of Microsoft citation styles
 
 Gnus now tries to recognize the mangled header block that some Microsoft
 mailers use to indicate that the rest of the message is a citation, even
@@ -26849,6 +27207,10 @@
 @code{gnus-cite-unsightly-citation-regexp} matches the start of these
 citations.
 
+The new command @kbd{W Y f}
+(@code{gnus-article-outlook-deuglify-article}) allows deuglifying broken
+Outlook (Express) articles.
+
 @item
 @code{gnus-article-skip-boring}
 
@@ -26862,31 +27224,117 @@
 message cited below.
 
 @item
-The format spec @code{%C} for positioning point has changed to @code{%*}.
+Smileys (@samp{:-)}, @samp{;-)} etc) are now displayed graphically in
+Emacs too.
+
+Put @code{(setq gnus-treat-display-smileys nil)} in @file{~/.gnus.el} to
+disable it.
 
 @item
-The new variable @code{gnus-parameters} can be used to set group parameters.
+Face headers handling.  @xref{Face}.
 
-Earlier this was done only via @kbd{G p} (or @kbd{G c}), which stored
-the parameters in @file{~/.newsrc.eld}, but via this variable you can
-enjoy the powers of customize, and simplified backups since you set the
-variable in @file{~/.gnus.el} instead of @file{~/.newsrc.eld}.  The
-variable maps regular expressions matching group names to group
-parameters, a'la:
-@lisp
-(setq gnus-parameters
-      '(("mail\\..*"
-         (gnus-show-threads nil)
-         (gnus-use-scoring nil))
-        ("^nnimap:\\(foo.bar\\)$"
-         (to-group . "\\1"))))
-@end lisp
+@item
+In the summary buffer, the new command @kbd{/ N} inserts new messages
+and @kbd{/ o} inserts old messages.
 
 @item
-Smileys (@samp{:-)}, @samp{;-)} etc) are now iconized for Emacs too.
+Gnus decodes morse encoded messages if you press @kbd{W m}.
 
-Put @code{(setq gnus-treat-display-smileys nil)} in @file{~/.gnus.el} to
-disable it.
+@item
+@code{gnus-summary-line-format}
+
+The default value changed to @samp{%U%R%z%I%(%[%4L: %-23,23f%]%)
+%s\n}.  Moreover @code{gnus-extra-headers},
+@code{nnmail-extra-headers} and @code{gnus-ignored-from-addresses}
+changed their default so that the users name will be replaced by the
+recipient's name or the group name posting to for @acronym{NNTP}
+groups.
+
+@item
+Deleting of attachments.
+
+The command @code{gnus-mime-save-part-and-strip} (bound to @kbd{C-o}
+on @acronym{MIME} buttons) saves a part and replaces the part with an
+external one.  @code{gnus-mime-delete-part} (bound to @kbd{d} on
+@acronym{MIME} buttons) removes a part.  It works only on back ends
+that support editing.
+
+@item
+@code{gnus-default-charset}
+
+The default value is determined from the
+@code{current-language-environment} variable, instead of
+@code{iso-8859-1}.  Also the @samp{.*} item in
+@code{gnus-group-charset-alist} is removed.
+
+@item
+Printing capabilities are enhanced.
+
+Gnus supports Muttprint natively with @kbd{O P} from the Summary and
+Article buffers.  Also, each individual @acronym{MIME} part can be
+printed using @kbd{p} on the @acronym{MIME} button.
+
+@item
+Extended format specs.
+
+Format spec @samp{%&user-date;} is added into
+@code{gnus-summary-line-format-alist}.  Also, user defined extended
+format specs are supported.  The extended format specs look like
+@samp{%u&foo;}, which invokes function
+@code{gnus-user-format-function-@var{foo}}.  Because @samp{&} is used as the
+escape character, old user defined format @samp{%u&} is no longer supported.
+
+@item
+@kbd{/ *} (@code{gnus-summary-limit-include-cached}) is rewritten.
+@c FIXME: Was this a user-visible change?
+
+It was aliased to @kbd{Y c}
+(@code{gnus-summary-insert-cached-articles}).  The new function filters
+out other articles.
+
+@item
+Some limiting commands accept a @kbd{C-u} prefix to negate the match.
+
+If @kbd{C-u} is used on subject, author or extra headers, i.e., @kbd{/
+s}, @kbd{/ a}, and @kbd{/ x}
+(@code{gnus-summary-limit-to-@{subject,author,extra@}}) respectively, the
+result will be to display all articles that do not match the expression.
+
+@item
+Gnus inlines external parts (message/external).
+
+@end itemize
+
+@item Changes in Message mode and related Gnus features
+@c ****************************************************
+
+@itemize @bullet
+
+@item
+Delayed articles
+
+You can delay the sending of a message with @kbd{C-c C-j} in the Message
+buffer.  The messages are delivered at specified time.  This is useful
+for sending yourself reminders.  @xref{Delayed Articles}.
+
+@item
+If the new option @code{nnml-use-compressed-files} is non-@code{nil},
+the nnml back end allows compressed message files.
+
+@item
+The new option @code{gnus-gcc-mark-as-read} automatically marks
+Gcc articles as read.
+
+@item
+Externalizing of attachments
+
+If @code{gnus-gcc-externalize-attachments} or
+@code{message-fcc-externalize-attachments} is non-@code{nil}, attach
+local files as external parts.
+
+@item
+The envelope sender address can be customized when using Sendmail.
+@xref{Mail Variables, Mail Variables,, message, Message Manual}.
 
 @item
 Gnus no longer generate the Sender: header automatically.
@@ -26917,39 +27365,7 @@
 @code{nil}.
 
 @item
-Improved anti-spam features.
-
-Gnus is now able to take out spam from your mail and news streams
-using a wide variety of programs and filter rules.  Among the supported
-methods are RBL blocklists, bogofilter and white/blacklists.  Hooks
-for easy use of external packages such as SpamAssassin and Hashcash
-are also new.  @xref{Thwarting Email Spam}.
-
-@item
-Easy inclusion of X-Faces headers.
-
-@item
-Face headers handling.
-
-@item
-In the summary buffer, the new command @kbd{/ N} inserts new messages
-and @kbd{/ o} inserts old messages.
-
-@item
-Gnus decodes morse encoded messages if you press @kbd{W m}.
-
-@item
-Unread count correct in nnimap groups.
-
-The estimated number of unread articles in the group buffer should now
-be correct for nnimap groups.  This is achieved by calling
-@code{nnimap-fixup-unread-after-getting-new-news} from the
-@code{gnus-setup-news-hook} (called on startup) and
-@code{gnus-after-getting-new-news-hook}. (called after getting new
-mail).  If you have modified those variables from the default, you may
-want to add @code{nnimap-fixup-unread-after-getting-new-news} again.  If
-you were happy with the estimate and want to save some (minimal) time
-when getting new mail, remove the function.
+Easy inclusion of X-Faces headers.  @xref{X-Face}.
 
 @item
 Group Carbon Copy (GCC) quoting
@@ -26966,64 +27382,6 @@
 was inserted directly.
 
 @item
-@file{~/News/overview/} not used.
-
-As a result of the following change, the @file{~/News/overview/}
-directory is not used any more.  You can safely delete the entire
-hierarchy.
-
-@item
-@code{gnus-agent}
-
-The Gnus Agent has seen a major updated and is now enabled by default,
-and all nntp and nnimap servers from @code{gnus-select-method} and
-@code{gnus-secondary-select-method} are agentized by default.  Earlier
-only the server in @code{gnus-select-method} was agentized by the
-default, and the agent was disabled by default.  When the agent is
-enabled, headers are now also retrieved from the Agent cache instead
-of the back ends when possible.  Earlier this only happened in the
-unplugged state.  You can enroll or remove servers with @kbd{J a} and
-@kbd{J r} in the server buffer.  Gnus will not download articles into
-the Agent cache, unless you instruct it to do so, though, by using
-@kbd{J u} or @kbd{J s} from the Group buffer.  You revert to the old
-behavior of having the Agent disabled with @code{(setq gnus-agent
-nil)}.  Note that putting @code{(gnus-agentize)} in @file{~/.gnus.el}
-is not needed any more.
-
-@item
-@code{gnus-summary-line-format}
-
-The default value changed to @samp{%U%R%z%I%(%[%4L: %-23,23f%]%)
-%s\n}.  Moreover @code{gnus-extra-headers},
-@code{nnmail-extra-headers} and @code{gnus-ignored-from-addresses}
-changed their default so that the users name will be replaced by the
-recipient's name or the group name posting to for @acronym{NNTP}
-groups.
-
-@item
-@file{deuglify.el} (@code{gnus-article-outlook-deuglify-article})
-
-A new file from Raymond Scholz @email{rscholz@@zonix.de} for deuglifying
-broken Outlook (Express) articles.
-
-@c FIXME: `gnus-load' is mentioned in README, which is not included in
-@c CVS.  We should find a better place for this item.
-@item
-@code{(require 'gnus-load)}
-
-If you use a stand-alone Gnus distribution, you'd better add
-@code{(require 'gnus-load)} into your @file{~/.emacs} after adding the Gnus
-lisp directory into load-path.
-
-File @file{gnus-load.el} contains autoload commands, functions and variables,
-some of which may not be included in distributions of Emacsen.
-
-@item
-@code{gnus-slave-unplugged}
-
-A new command which starts Gnus offline in slave mode.
-
-@item
 @code{message-insinuate-rmail}
 
 Adding @code{(message-insinuate-rmail)} and @code{(setq
@@ -27041,27 +27399,6 @@
 @end lisp
 
 @item
-Externalizing and deleting of attachments.
-
-If @code{gnus-gcc-externalize-attachments} or
-@code{message-fcc-externalize-attachments} is non-@code{nil}, attach
-local files as external parts.
-
-The command @code{gnus-mime-save-part-and-strip} (bound to @kbd{C-o}
-on @acronym{MIME} buttons) saves a part and replaces the part with an
-external one.  @code{gnus-mime-delete-part} (bound to @kbd{d} on
-@acronym{MIME} buttons) removes a part.  It works only on back ends
-that support editing.
-
-@item
-@code{gnus-default-charset}
-
-The default value is determined from the
-@code{current-language-environment} variable, instead of
-@code{iso-8859-1}.  Also the @samp{.*} item in
-@code{gnus-group-charset-alist} is removed.
-
-@item
 @code{gnus-posting-styles}
 
 Add a new format of match like
@@ -27083,13 +27420,6 @@
 need add those two headers too.
 
 @item
-Gnus reads the @acronym{NOV} and articles in the Agent if plugged.
-
-If one reads an article while plugged, and the article already exists
-in the Agent, it won't get downloaded once more.  @code{(setq
-gnus-agent-cache nil)} reverts to the old behavior.
-
-@item
 Gnus supports the ``format=flowed'' (RFC 2646) parameter.  On
 composing messages, it is enabled by @code{use-hard-newlines}.
 Decoding format=flowed was present but not documented in earlier
@@ -27098,7 +27428,9 @@
 @item
 The option @code{mm-fill-flowed} can be used to disable treatment of
 ``format=flowed'' messages.  Also, flowed text is disabled when sending
-inline PGP signed messages.  (New in Gnus 5.10.7)
+inline PGP signed messages.  @xref{Flowed text, , Flowed text,
+emacs-mime, The Emacs MIME Manual}.  (New in Gnus 5.10.7)
+@c This entry is also present in the node "No Gnus".
 
 @item
 Gnus supports the generation of RFC 2298 Disposition Notification requests.
@@ -27106,18 +27438,6 @@
 This is invoked with the @kbd{C-c M-n} key binding from message mode.
 
 @item
-Gnus supports Maildir groups.
-
-Gnus includes a new back end @file{nnmaildir.el}.  @xref{Maildir}.
-
-@item
-Printing capabilities are enhanced.
-
-Gnus supports Muttprint natively with @kbd{O P} from the Summary and
-Article buffers.  Also, each individual @acronym{MIME} part can be
-printed using @kbd{p} on the @acronym{MIME} button.
-
-@item
 Message supports the Importance: (RFC 2156) header.
 
 In the message buffer, @kbd{C-c C-f C-i} or @kbd{C-c C-u} cycles through
@@ -27136,45 +27456,66 @@
 The behavior can be changed by customizing @code{message-insert-canlock}.
 
 @item
-Gnus supports server-side mail filtering using Sieve.
+Gnus supports @acronym{PGP} (RFC 1991/2440), @acronym{PGP/MIME} (RFC
+2015/3156) and @acronym{S/MIME} (RFC 2630-2633).
 
-Sieve rules can be added as Group Parameters for groups, and the
-complete Sieve script is generated using @kbd{D g} from the Group
-buffer, and then uploaded to the server using @kbd{C-c C-l} in the
-generated Sieve buffer.  @xref{Sieve Commands}, and the new Sieve
-manual @ref{Top, , Top, sieve, Emacs Sieve}.
+It needs an external @acronym{S/MIME} and OpenPGP implementation, but no
+additional Lisp libraries.  This add several menu items to the
+Attachments menu, and @kbd{C-c RET} key bindings, when composing
+messages.  This also obsoletes @code{gnus-article-hide-pgp-hook}.
 
 @item
-Extended format specs.
+@acronym{MML} (Mime compose) prefix changed from @kbd{M-m} to @kbd{C-c
+C-m}.
 
-Format spec @samp{%&user-date;} is added into
-@code{gnus-summary-line-format-alist}.  Also, user defined extended
-format specs are supported.  The extended format specs look like
-@samp{%u&foo;}, which invokes function
-@code{gnus-user-format-function-@var{foo}}.  Because @samp{&} is used as the
-escape character, old user defined format @samp{%u&} is no longer supported.
+This change was made to avoid conflict with the standard binding of
+@code{back-to-indentation}, which is also useful in message mode.
 
 @item
-@kbd{/ *} (@code{gnus-summary-limit-include-cached}) is rewritten.
+The default for @code{message-forward-show-mml} changed to the symbol
+@code{best}.
 
-It was aliased to @kbd{Y c}
-(@code{gnus-summary-insert-cached-articles}).  The new function filters
-out other articles.
+The behavior for the @code{best} value is to show @acronym{MML} (i.e.,
+convert to @acronym{MIME}) when appropriate.  @acronym{MML} will not be
+used when forwarding signed or encrypted messages, as the conversion
+invalidate the digital signature.
 
 @item
-Some limiting commands accept a @kbd{C-u} prefix to negate the match.
+If @code{auto-compression-mode} is enabled, attachments are automatically
+decompressed when activated.
+@c FIXME: Does this affect article or message mode?
 
-If @kbd{C-u} is used on subject, author or extra headers, i.e., @kbd{/
-s}, @kbd{/ a}, and @kbd{/ x}
-(@code{gnus-summary-limit-to-@{subject,author,extra@}}) respectively, the
-result will be to display all articles that do not match the expression.
+@item
+Support for non-@acronym{ASCII} domain names
 
+Message supports non-@acronym{ASCII} domain names in From:, To: and
+Cc: and will query you whether to perform encoding when you try to
+send a message.  The variable @code{message-use-idna} controls this.
+Gnus will also decode non-@acronym{ASCII} domain names in From:, To:
+and Cc: when you view a message.  The variable @code{gnus-use-idna}
+controls this.
+
+@item You can now drag and drop attachments to the Message buffer.
+See @code{mml-dnd-protocol-alist} and @code{mml-dnd-attach-options}.
+@xref{MIME, ,MIME, message, Message Manual}.
+@c New in 5.10.9 / 5.11
+
+@end itemize
+
+@item Changes in back ends
+@c ***********************
+
+@itemize @bullet
 @item
-Group names are treated as UTF-8 by default.
+Gnus can display RSS newsfeeds as a newsgroup.  @xref{RSS}.
 
-This is supposedly what USEFOR wanted to migrate to.  See
-@code{gnus-group-name-charset-group-alist} and
-@code{gnus-group-name-charset-method-alist} for customization.
+@item
+The nndoc back end now supports mailman digests and exim bounces.
+
+@item
+Gnus supports Maildir groups.
+
+Gnus includes a new back end @file{nnmaildir.el}.  @xref{Maildir}.
 
 @item
 The nnml and nnfolder back ends store marks for each groups.
@@ -27191,6 +27532,13 @@
 The new server variables @code{nnml-marks-is-evil} and
 @code{nnfolder-marks-is-evil} can be used to disable this feature.
 
+@end itemize
+
+@item Appearance
+@c *************
+
+@itemize @bullet
+
 @item
 The menu bar item (in Group and Summary buffer) named ``Misc'' has
 been renamed to ``Gnus''.
@@ -27202,42 +27550,65 @@
 message, Message Manual}).
 
 @item
-@code{gnus-group-charset-alist} and
-@code{gnus-group-ignored-charsets-alist}.
+The tool bars have been updated to use GNOME icons in Group, Summary and
+Message mode.  You can also customize the tool bars.  This is a new
+feature in Gnus 5.10.9.  (Only for Emacs, not in XEmacs.)
+
+@item The tool bar icons are now (de)activated correctly
+in the group buffer, see the variable @code{gnus-group-update-tool-bar}.
+Its default value depends on your Emacs version.  This is a new feature
+in Gnus 5.10.9.
+@end itemize
 
-The regexps in these variables are compared with full group names
-instead of real group names in 5.8.  Users who customize these
-variables should change those regexps accordingly.  For example:
-@lisp
-("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr)
-@end lisp
+
+@item Miscellaneous changes
+@c ************************
+
+@itemize @bullet
 
 @item
-Gnus supports @acronym{PGP} (RFC 1991/2440), @acronym{PGP/MIME} (RFC
-2015/3156) and @acronym{S/MIME} (RFC 2630-2633).
+@code{gnus-agent}
 
-It needs an external @acronym{S/MIME} and OpenPGP implementation, but no
-additional Lisp libraries.  This add several menu items to the
-Attachments menu, and @kbd{C-c RET} key bindings, when composing
-messages.  This also obsoletes @code{gnus-article-hide-pgp-hook}.
+The Gnus Agent has seen a major updated and is now enabled by default,
+and all nntp and nnimap servers from @code{gnus-select-method} and
+@code{gnus-secondary-select-method} are agentized by default.  Earlier
+only the server in @code{gnus-select-method} was agentized by the
+default, and the agent was disabled by default.  When the agent is
+enabled, headers are now also retrieved from the Agent cache instead
+of the back ends when possible.  Earlier this only happened in the
+unplugged state.  You can enroll or remove servers with @kbd{J a} and
+@kbd{J r} in the server buffer.  Gnus will not download articles into
+the Agent cache, unless you instruct it to do so, though, by using
+@kbd{J u} or @kbd{J s} from the Group buffer.  You revert to the old
+behavior of having the Agent disabled with @code{(setq gnus-agent
+nil)}.  Note that putting @code{(gnus-agentize)} in @file{~/.gnus.el}
+is not needed any more.
 
 @item
-Gnus inlines external parts (message/external).
+Gnus reads the @acronym{NOV} and articles in the Agent if plugged.
+
+If one reads an article while plugged, and the article already exists
+in the Agent, it won't get downloaded once more.  @code{(setq
+gnus-agent-cache nil)} reverts to the old behavior.
 
 @item
-@acronym{MML} (Mime compose) prefix changed from @kbd{M-m} to @kbd{C-c
-C-m}.
+Dired integration
 
-This change was made to avoid conflict with the standard binding of
-@code{back-to-indentation}, which is also useful in message mode.
+@code{gnus-dired-minor-mode} (see @ref{Other modes}) installs key
+bindings in dired buffers to send a file as an attachment, open a file
+using the appropriate mailcap entry, and print a file using the mailcap
+entry.
 
 @item
-The default for @code{message-forward-show-mml} changed to symbol @code{best}.
+The format spec @code{%C} for positioning point has changed to @code{%*}.
+
+@item
+@code{gnus-slave-unplugged}
+
+A new command which starts Gnus offline in slave mode.
+
+@end itemize
 
-The behavior for the @code{best} value is to show @acronym{MML} (i.e.,
-convert to @acronym{MIME}) when appropriate.  @acronym{MML} will not be
-used when forwarding signed or encrypted messages, as the conversion
-invalidate the digital signature.
 @end itemize
 
 @node No Gnus
@@ -27552,7 +27923,7 @@
 specified by RFC 1153.
 
 @item splitting
-@cindex splitting, terminolgy
+@cindex splitting, terminology
 @cindex mail sorting
 @cindex mail filtering (splitting)
 The action of sorting your emails according to certain rules. Sometimes
Index: gnus/texi/message.texi
diff -u gnus/texi/message.texi:7.35 gnus/texi/message.texi:7.48
--- gnus/texi/message.texi:7.35	Fri Apr 14 17:44:42 2006
+++ gnus/texi/message.texi	Wed Apr 11 17:16:20 2007
@@ -9,7 +9,7 @@
 This file documents Message, the Emacs message composition mode.
 
 Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-2004, 2005, 2006 Free Software Foundation, Inc.
+2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -70,7 +70,7 @@
 @c Adjust ../Makefile.in if you change the following lines:
 Message is distributed with Gnus.  The Gnus distribution
 @c
-corresponding to this manual is No Gnus v0.4.
+corresponding to this manual is No Gnus v0.6.
 
 
 @node Interface
@@ -97,6 +97,9 @@
 * Mailing Lists::        Send mail to mailing lists.
 @end menu
 
+You can customize the Message Mode tool bar, see @kbd{M-x
+customize-apropos RET message-tool-bar}.  This feature is only available
+in Emacs.
 
 @node New Mail Message
 @section New Mail Message
@@ -175,7 +178,8 @@
 
 @vindex message-dont-reply-to-names
 Addresses that match the @code{message-dont-reply-to-names} regular
-expression will be removed from the @code{Cc} header.
+expression (or list of regular expressions) will be removed from the
+@code{Cc} header. A value of @code{nil} means exclude your name only.
 
 @vindex message-wide-reply-confirm-recipients
 If @code{message-wide-reply-confirm-recipients} is non-@code{nil} you
@@ -693,7 +697,7 @@
 it is not a member of @samp{Newsgroups}, and insert a note in the body.
 If @code{message-cross-post-default} is @code{nil} or if this command is
 called with a prefix-argument, only the @samp{FollowUp-To} header will
-be set but the the target newsgroup will not be added to the
+be set but the target newsgroup will not be added to the
 @samp{Newsgroups} header.  The function to insert a note is controlled
 by the @code{message-cross-post-note-function} variable.
 
@@ -821,10 +825,12 @@
 automatically add the @code{Content-Type} and
 @code{Content-Transfer-Encoding} headers.
 
+@findex mml-attach
+@kindex C-c C-a
 The most typical thing users want to use the multipart things in
 @acronym{MIME} for is to add ``attachments'' to mail they send out.
-This can be done with the @kbd{C-c C-a} command, which will prompt for
-a file name and a @acronym{MIME} type.
+This can be done with the @kbd{C-c C-a} command (@kbd{M-x mml-attach}),
+which will prompt for a file name and a @acronym{MIME} type.
 
 @vindex mml-dnd-protocol-alist
 @vindex mml-dnd-attach-options
@@ -888,11 +894,21 @@
 Using the @acronym{MML} language, Message is able to create digitally
 signed and digitally encrypted messages.  Message (or rather
 @acronym{MML}) currently support @acronym{PGP} (RFC 1991),
-@acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}.  Instructing
-@acronym{MML} to perform security operations on a @acronym{MIME} part is
-done using the @kbd{C-c C-m s} key map for signing and the @kbd{C-c C-m
-c} key map for encryption, as follows.
+@acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}.
 
+@menu
+* Signing and encryption::      Signing and encrypting commands.
+* Using S/MIME::                Using S/MIME
+* Using PGP/MIME::              Using PGP/MIME
+* PGP Compatibility::           Compatibility with older implementations
+@end menu
+
+@node Signing and encryption
+@subsection Signing and encrypting commands
+
+Instructing @acronym{MML} to perform security operations on a
+@acronym{MIME} part is done using the @kbd{C-c C-m s} key map for
+signing and the @kbd{C-c C-m c} key map for encryption, as follows.
 @table @kbd
 
 @item C-c C-m s s
@@ -975,6 +991,7 @@
 other properly.  Thus, we now describe what external libraries or
 programs are required to make things work, and some small general hints.
 
+@node Using S/MIME
 @subsection Using S/MIME
 
 @emph{Note!}  This section assume you have a basic familiarity with
@@ -1037,6 +1054,7 @@
 you are on a secure single user machine) simply press @code{RET} at
 the passphrase prompt.
 
+@node Using PGP/MIME
 @subsection Using PGP/MIME
 
 @acronym{PGP/MIME} requires an external OpenPGP implementation, such
@@ -1044,7 +1062,48 @@
 implementations such as PGP 2.x and PGP 5.x are also supported.  One
 Emacs interface to the PGP implementations, PGG (@pxref{Top, ,PGG,
 pgg, PGG Manual}), is included, but Mailcrypt and Florian Weimer's
-@code{gpg.el} are also supported.
+@code{gpg.el} are also supported.  @xref{PGP Compatibility}.
+
+@cindex gpg-agent
+Message internally calls GnuPG (the @command{gpg} command) to perform
+data encryption, and in certain cases (decrypting or signing for
+example), @command{gpg} requires user's passphrase.  Currently the
+recommended way to supply your passphrase to @command{gpg} is to use the
+@command{gpg-agent} program.
+
+To use @command{gpg-agent} in Emacs, you need to run the following
+command from the shell before starting Emacs.
+
+@example
+eval `gpg-agent --daemon`
+@end example
+
+This will invoke @command{gpg-agent} and set the environment variable
+@code{GPG_AGENT_INFO} to allow @command{gpg} to communicate with it.
+It might be good idea to put this command in your @file{.xsession} or
+@file{.bash_profile}.  @xref{Invoking GPG-AGENT, , , gnupg, Using the
+GNU Privacy Guard}.
+
+Once your @command{gpg-agent} is set up, it will ask you for a
+passphrase as needed for @command{gpg}.  Under the X Window System,
+you will see a new passphrase input dialog appear.  The dialog is
+provided by PIN Entry (the @command{pinentry} command), and as of
+version 0.7.2, @command{pinentry} cannot cooperate with Emacs on a
+single tty.  So, if you are using a text console, you may need to put
+a passphrase into gpg-agent's cache beforehand.  The following command
+does the trick.
+
+@example
+gpg --use-agent --sign < /dev/null > /dev/null
+@end example
+
+The Lisp variable @code{pgg-gpg-use-agent} controls whether to use
+@command{gpg-agent}.  See also @xref{Caching passphrase, , , pgg, The
+PGG Manual}.
+
+
+@node PGP Compatibility
+@subsection Compatibility with older implementations
 
 @vindex gpg-temp-directory
 Note, if you are using the @code{gpg.el} you must make sure that the
@@ -1490,9 +1549,10 @@
 
 @item message-generate-hashcash
 @vindex message-generate-hashcash
-Boolean variable that indicate whether @samp{X-Hashcash} headers
+Variable that indicates whether @samp{X-Hashcash} headers
 should be computed for the message.  @xref{Hashcash, ,Hashcash,gnus,
-The Gnus Manual}.
+The Gnus Manual}.  If @code{opportunistic}, only generate the headers
+when it doesn't lead to the user having to wait.
 
 @end table
 
@@ -1704,56 +1764,73 @@
 Valid checks are:
 
 @table @code
-@item subject-cmsg
-Check the subject for commands.
-@item sender
-@cindex Sender
-Insert a new @code{Sender} header if the @code{From} header looks odd.
-@item multiple-headers
-Check for the existence of multiple equal headers.
-@item sendsys
-@cindex sendsys
-Check for the existence of version and sendsys commands.
-@item message-id
-Check whether the @code{Message-ID} looks ok.
-@item from
-Check whether the @code{From} header seems nice.
-@item long-lines
-@cindex long lines
-Check for too long lines.
-@item control-chars
-Check for invalid characters.
-@item size
-Check for excessive size.
-@item new-text
-Check whether there is any new text in the messages.
-@item signature
-Check the length of the signature.
 @item approved
 @cindex approved
 Check whether the article has an @code{Approved} header, which is
 something only moderators should include.
+@item continuation-headers
+Check whether there are continuation header lines that don't begin with
+whitespace.
+@item control-chars
+Check for invalid characters.
 @item empty
 Check whether the article is empty.
-@item invisible-text
-Check whether there is any invisible text in the buffer.
-@item empty-headers
-Check whether any of the headers are empty.
 @item existing-newsgroups
 Check whether the newsgroups mentioned in the @code{Newsgroups} and
 @code{Followup-To} headers exist.
-@item valid-newsgroups
-Check whether the @code{Newsgroups} and @code{Followup-to} headers
-are valid syntactically.
+@item from
+Check whether the @code{From} header seems nice.
+@item illegible-text
+Check whether there is any non-printable character in the body.
+@item invisible-text
+Check whether there is any invisible text in the buffer.
+@item long-header-lines
+Check for too long header lines.
+@item long-lines
+@cindex long lines
+Check for too long lines in the body.
+@item message-id
+Check whether the @code{Message-ID} looks syntactically ok.
+@item multiple-headers
+Check for the existence of multiple equal headers.
+@item new-text
+Check whether there is any new text in the messages.
+@item newsgroups
+Check whether the @code{Newsgroups} header exists and is not empty.
+@item quoting-style
+Check whether text follows last quoted portion.
 @item repeated-newsgroups
 Check whether the @code{Newsgroups} and @code{Followup-to} headers
 contains repeated group names.
+@item reply-to
+Check whether the @code{Reply-To} header looks ok.
+@item sender
+@cindex Sender
+Insert a new @code{Sender} header if the @code{From} header looks odd.
+@item sendsys
+@cindex sendsys
+Check for the existence of version and sendsys commands.
+@item shoot
+Check whether the domain part of the @code{Message-ID} header looks ok.
 @item shorten-followup-to
 Check whether to add a @code{Followup-to} header to shorten the number
 of groups to post to.
+@item signature
+Check the length of the signature.
+@item size
+Check for excessive size.
+@item subject
+Check whether the @code{Subject} header exists and is not empty.
+@item subject-cmsg
+Check the subject for commands.
+@item valid-newsgroups
+Check whether the @code{Newsgroups} and @code{Followup-to} headers
+are valid syntactically.
 @end table
 
-All these conditions are checked by default.
+All these conditions are checked by default, except for @code{sender}
+for which the check is disabled by default if
+@code{message-insert-canlock} is non-@code{nil} (@pxref{Canceling News}).
 
 @item message-ignored-news-headers
 @vindex message-ignored-news-headers
@@ -1811,6 +1888,9 @@
 Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
 @end example
 
+@c FIXME: Add `message-insert-formated-citation-line' and
+@c `message-citation-line-format'
+
 Point will be at the beginning of the body of the message when this
 function is called.
 
@@ -1892,8 +1972,18 @@
 @item message-signature-file
 @vindex message-signature-file
 File containing the signature to be inserted at the end of the buffer.
+If a path is specified, the value of
+@code{message-signature-directory} is ignored, even if set.
 The default is @file{~/.signature}.
 
+@item message-signature-directory
+@vindex message-signature-directory
+Name of directory containing signature files.  Comes in handy if you
+have many such files, handled via Gnus posting styles for instance.
+If @code{nil} (the default), @code{message-signature-file} is expected
+to specify the directory if needed.
+
+
 @item message-signature-insert-empty-line
 @vindex message-signature-insert-empty-line
 If @code{t} (the default value) an empty line is inserted before the
@@ -1928,6 +2018,13 @@
 Emacs MIME Manual}, for details on the @sc{mule}-to-@acronym{MIME}
 translation process.
 
+@item message-fill-column
+@vindex message-fill-column
+@cindex auto-fill
+Local value for the column beyond which automatic line-wrapping should
+happen for message buffers.  If non-nil (the default), also turn on
+auto-fill in message buffers.
+
 @item message-signature-separator
 @vindex message-signature-separator
 Regexp matching the signature separator.  It is @samp{^-- *$} by
@@ -2124,10 +2221,36 @@
 @table @code
 @item message-generate-new-buffers
 @vindex message-generate-new-buffers
-If non-@code{nil}, generate new buffers.  The default is @code{t}.  If
-this is a function, call that function with three parameters: The type,
-the to address and the group name.  (Any of these may be @code{nil}.)
-The function should return the new buffer name.
+Controls whether to create a new message buffer to compose a message.
+Valid values include:
+
+@table @code
+@item nil
+Generate the buffer name in the Message way (e.g., *mail*, *news*, *mail
+to whom*, *news on group*, etc.) and continue editing in the existing
+buffer of that name.  If there is no such buffer, it will be newly
+created.
+
+@item unique
+@item t
+Create the new buffer with the name generated in the Message way.  This
+is the default.
+
+@item unsent
+Similar to @code{unique} but the buffer name begins with "*unsent ".
+
+@item standard
+Similar to @code{nil} but the buffer name is simpler like *mail
+message*.
+@end table
+@table @var
+@item function
+If this is a function, call that function with three parameters: The
+type, the To address and the group name (any of these may be
+@code{nil}).  The function should return the new buffer name.
+@end table
+
+The default value is @code{unique}.
 
 @item message-max-buffers
 @vindex message-max-buffers
Index: gnus/texi/pgg.texi
diff -u gnus/texi/pgg.texi:7.13 gnus/texi/pgg.texi:7.20
--- gnus/texi/pgg.texi:7.13	Thu Apr 27 00:27:14 2006
+++ gnus/texi/pgg.texi	Sat Mar 31 11:48:16 2007
@@ -8,8 +8,8 @@
 @copying
 This file describes PGG, an Emacs interface to various PGP implementations.
 
-Copyright @copyright{} 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-Copyright @copyright{} 2001 Daiki Ueno.
+Copyright @copyright{} 2001, 2003, 2004, 2005, 2006, 2007  Free Software
+Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -17,7 +17,7 @@
 any later version published by the Free Software Foundation; with no
 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
 Texts.  A copy of the license is included in the section entitled ``GNU
-Free Documentation License''.
+Free Documentation License.''
 @end quotation
 @end copying
 
@@ -74,10 +74,19 @@
 This document assumes that you have already obtained and installed them
 and that you are familiar with its basic functions.
 
-By default, PGG uses GnuPG, but Pretty Good Privacy version 2 or version
-5 are also supported.  If you are new to such a system, I recommend that
-you should look over the GNU Privacy Handbook (GPH) which is available
-at @uref{http://www.gnupg.org/gph/}.
+By default, PGG uses GnuPG.  If you are new to such a system, I
+recommend that you should look over the GNU Privacy Handbook (GPH)
+which is available at @uref{http://www.gnupg.org/documentation/}.
+
+When using GnuPG, we recommend the use of the @code{gpg-agent}
+program, which is distributed with versions 2.0 and later of GnuPG.
+This is a daemon to manage private keys independently from any
+protocol, and provides the most secure way to input and cache your
+passphrases (@pxref{Caching passphrase}).  By default, PGG will
+attempt to use @code{gpg-agent} if it is running.  @xref{Invoking
+GPG-AGENT,,,gnupg,Using the GNU Privacy Guard}.
+
+PGG also supports Pretty Good Privacy version 2 or version 5.
 
 @node How to use
 @chapter How to use
@@ -220,8 +229,61 @@
 @node Caching passphrase
 @section Caching passphrase
 
-PGG uses a simple passphrase caching mechanism, which is enabled by
-default.
+When using GnuPG (gpg) as the PGP scheme, we recommend using a program
+called @code{gpg-agent} for entering and caching
+passphrases@footnote{Actually, @code{gpg-agent} does not cache
+passphrases but private keys.  On the other hand, from a user's point
+of view, this technical difference isn't visible.}.
+
+@defvar pgg-gpg-use-agent
+If non-@code{nil}, attempt to use @code{gpg-agent} whenever possible.
+The default is @code{t}.  If @code{gpg-agent} is not running, or GnuPG
+is not the current PGP scheme, PGG's own passphrase-caching mechanism
+is used (see below).
+@end defvar
+
+To use @code{gpg-agent} with PGG, you must first ensure that
+@code{gpg-agent} is running.  For example, if you are running in the X
+Window System, you can do this by putting the following line in your
+@file{.xsession} file:
+
+@smallexample
+eval "$(gpg-agent --daemon)"
+@end smallexample
+
+For more details on invoking @code{gpg-agent}, @xref{Invoking
+GPG-AGENT,,,gnupg,Using the GNU Privacy Guard}.
+
+Whenever you perform a PGG operation that requires a GnuPG passphrase,
+GnuPG will contact @code{gpg-agent}, which prompts you for the
+passphrase.  Furthermore, @code{gpg-agent} ``caches'' the result, so
+that subsequent uses will not require you to enter the passphrase
+again.  (This cache usually expires after a certain time has passed;
+you can change this using the @code{--default-cache-ttl} option when
+invoking @code{gpg-agent}.)
+
+If you are running in a X Window System environment, @code{gpg-agent}
+prompts for a passphrase by opening a graphical window.  However, if
+you are running Emacs on a text terminal, @code{gpg-agent} has trouble
+receiving input from the terminal, since it is being sent to Emacs.
+One workaround for this problem is to run @code{gpg-agent} on a
+different terminal from Emacs, with the @code{--keep-tty} option; this
+tells @code{gpg-agent} use its own terminal to prompt for passphrases.
+
+When @code{gpg-agent} is not being used, PGG prompts for a passphrase
+through Emacs.  It also has its own passphrase caching mechanism,
+which is controlled by the variable @code{pgg-cache-passphrase} (see
+below).
+
+There is a security risk in handling passphrases through PGG rather
+than @code{gpg-agent}.  When you enter your passphrase into an Emacs
+prompt, it is temporarily stored as a cleartext string in the memory
+of the Emacs executable.  If the executable memory is swapped to disk,
+the root user can, in theory, extract the passphrase from the
+swapfile.  Furthermore, the swapfile containing the cleartext
+passphrase might remain on the disk after the system is discarded or
+stolen.  @code{gpg-agent} avoids this problem by using certain tricks,
+such as memory locking, which have not been implemented in Emacs.
 
 @defvar pgg-cache-passphrase
 If non-@code{nil}, store passphrases.  The default value of this
@@ -234,12 +296,12 @@
 Elapsed time for expiration in seconds.
 @end defvar
 
-@defvar pgg-gpg-use-agent
-When using GnuPG (gpg) as PGP scheme you can use @code{gpg-agent} for
-caching@footnote{Actually @code{gpg-agent} does not cache passphrases
-but private keys.  On the other hand, from a users point of view this
-technical difference isn't visible.}.  If non-@code{nil} try to use a
-running @code{gpg-agent}.  It defaults to @code{nil}.
+If your passphrase contains non-ASCII characters, you might need to
+specify the coding system to be used to encode your passphrases, since
+GnuPG treats them as a byte sequence, not as a character sequence.
+
+@defvar pgg-passphrase-coding-system
+Coding system used to encode passphrase.
 @end defvar
 
 @node Default user identity
Index: gnus/texi/sieve.texi
diff -u gnus/texi/sieve.texi:7.9 gnus/texi/sieve.texi:7.10
--- gnus/texi/sieve.texi:7.9	Tue Apr 18 19:30:16 2006
+++ gnus/texi/sieve.texi	Wed Jan 24 08:15:38 2007
@@ -9,8 +9,8 @@
 @copying
 This file documents the Emacs Sieve package, for server-side mail filtering.
 
-Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006 Free
-Software Foundation, Inc.
+Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007
+Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document