Import No Gnus v0.2.
authoryamaoka <yamaoka>
Sun, 2 May 2004 00:17:17 +0000 (00:17 +0000)
committeryamaoka <yamaoka>
Sun, 2 May 2004 00:17:17 +0000 (00:17 +0000)
136 files changed:
.cvsignore
ChangeLog
GNUS-NEWS
README
contrib/ChangeLog
contrib/README
contrib/nnir.el
contrib/starttls.el
etc/gnus-tut.txt
lisp/.cvsignore
lisp/ChangeLog
lisp/ChangeLog.1
lisp/binhex.el
lisp/canlock.el
lisp/compface.el
lisp/deuglify.el
lisp/dgnushack.el
lisp/dns.el
lisp/flow-fill.el
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-cache.el
lisp/gnus-cite.el
lisp/gnus-cus.el
lisp/gnus-delay.el
lisp/gnus-demon.el
lisp/gnus-diary.el
lisp/gnus-dired.el
lisp/gnus-draft.el
lisp/gnus-ems.el
lisp/gnus-fun.el
lisp/gnus-group.el
lisp/gnus-int.el
lisp/gnus-kill.el
lisp/gnus-ml.el
lisp/gnus-mlspl.el
lisp/gnus-move.el
lisp/gnus-msg.el
lisp/gnus-nocem.el
lisp/gnus-picon.el
lisp/gnus-range.el
lisp/gnus-registry.el
lisp/gnus-salt.el
lisp/gnus-score.el
lisp/gnus-setup.el
lisp/gnus-soup.el
lisp/gnus-spec.el
lisp/gnus-srvr.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus-topic.el
lisp/gnus-undo.el
lisp/gnus-util.el
lisp/gnus-uu.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/hmac-def.el [new file with mode: 0644]
lisp/hmac-md5.el [new file with mode: 0644]
lisp/html2text.el
lisp/ietf-drums.el
lisp/imap.el
lisp/legacy-gnus-agent.el [new file with mode: 0644]
lisp/lpath.el
lisp/mail-source.el
lisp/md4.el [new file with mode: 0644]
lisp/message.el
lisp/messagexmas.el
lisp/mm-bodies.el
lisp/mm-decode.el
lisp/mm-url.el
lisp/mm-util.el
lisp/mm-view.el
lisp/mml-sec.el
lisp/mml-smime.el
lisp/mml.el
lisp/mml2015.el
lisp/netrc.el
lisp/nnbabyl.el
lisp/nndb.el
lisp/nndiary.el
lisp/nndoc.el
lisp/nnfolder.el
lisp/nnheader.el
lisp/nnheaderxm.el
lisp/nnimap.el
lisp/nnkiboze.el
lisp/nnlistserv.el
lisp/nnmail.el
lisp/nnmaildir.el
lisp/nnmh.el
lisp/nnml.el
lisp/nnnil.el
lisp/nnrss.el
lisp/nnspool.el
lisp/nntp.el
lisp/nnvirtual.el
lisp/nnweb.el
lisp/ntlm.el [new file with mode: 0644]
lisp/password.el [new file with mode: 0644]
lisp/pgg-def.el
lisp/pgg-gpg.el
lisp/pgg-parse.el
lisp/pgg.el
lisp/pop3.el
lisp/rfc2047.el
lisp/run-at-time.el [new file with mode: 0644]
lisp/sasl-cram.el [new file with mode: 0644]
lisp/sasl-digest.el [new file with mode: 0644]
lisp/sasl-ntlm.el [new file with mode: 0644]
lisp/sasl.el [new file with mode: 0644]
lisp/sha1-el.el
lisp/sieve-manage.el
lisp/sieve-mode.el
lisp/sieve.el
lisp/smime.el
lisp/spam-report.el
lisp/spam-stat.el
lisp/spam-wash.el [new file with mode: 0644]
lisp/spam.el
lisp/uudecode.el
make.bat
texi/.cvsignore
texi/ChangeLog
texi/Makefile.in
texi/dir
texi/emacs-mime.texi
texi/gnus-news.el [new file with mode: 0644]
texi/gnus-news.texi [new file with mode: 0644]
texi/gnus.texi
texi/gnusref.tex
texi/infohack.el
texi/message.texi
texi/pgg.texi
texi/sasl.texi [new file with mode: 0644]
texi/sieve.texi
texi/texi2latex.el

index 28cbaa5..b000dd2 100644 (file)
@@ -11,3 +11,4 @@ admin
 oort
 pgg
 smilies
+makepub-beta
index 1f1ce0c..e7ded93 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+2004-03-08  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * make.bat: Make sure that gnus-load.el and sieve are writable to
+       avoid breakage.
+
+2004-03-01  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * make.bat: Fix directory test for Windows 9x/ME.  From Michael
+       Schierl <schierlm-public@gmx.de> (tiny change).
+
+2004-01-07  Hiroshi Fujishima  <pooh@nature.tsukuba.ac.jp>
+
+       * etc/gnus-tut.txt: `G m' instead of `G V' (tiny patch).
+
+2004-01-05  Jesper Harder  <harder@ifa.au.dk>
+
+       * make.bat: Add missing parens.  From Robert Marshall
+       <spam@chezmarshall.freeserve.co.uk>.
+
+2004-01-05  Simon Josefsson  <jas@extundo.com>
+
+       * GNUS-NEWS: Mention SASL, and that sieve-manage uses it.
+       Mention password.el.
+       Mention NTLM.
+
+2004-01-04  Simon Josefsson  <jas@extundo.com>
+
+       * GNUS-NEWS: Add IMAP ID (RFC 2971) support.
+       Mention `W e' for editing all.SCORE.
+
 2004-01-03  Reiner Steib  <Reiner.Steib@gmx.de>
 
        * GNUS-NEWS: Update copyright.
index b891063..6c5238b 100644 (file)
--- a/GNUS-NEWS
+++ b/GNUS-NEWS
@@ -6,516 +6,33 @@ Please send Gnus bug reports to bugs@gnus.org.
 For older news, see Gnus info node "New Features".
 
 \f
-* Changes in Oort Gnus
+* Changes in No Gnus
 
-** `gnus-group-read-ephemeral-group' can be called interactively, using `G M'.
+** Gnus includes an Emacs Lisp SASL library.
 
-** In draft groups, `e' is now bound to `gnus-draft-edit-message'.
-Use `B w' for `gnus-summary-edit-article' instead.
+This provide a clean API to SASL mechanisms from within Emacs.  The
+user visible aspects of this, compared to the earlier situation,
+include support for DIGEST-MD5 and NTLM.
 
-** The revised Gnus FAQ is included in the manual.
-See the info node "Frequently Asked Questions".
+** ManageSieve connections uses the SASL library by default.
 
-** Upgrading from previous (stable) version if you have used Oort.
+The primary change this brings is support for DIGEST-MD5 and NTLM,
+when the server support it.
 
-If you have tried Oort (the unstable Gnus branch leading to this
-release) but went back to a stable version, be careful when upgrading
-to this version.  In particular, you will probably want to remove all
-.marks (nnml) and .mrk (nnfolder) files, so that flags are read from
-your ~/.newsrc.eld instead of from the .marks/.mrk file where this
-release store flags.  See a later entry for more information about
-marks.  Note that downgrading isn't safe in general.
+** Gnus include a password cache mechanism in password.el.
 
-** Article Buttons
+It is enabled by default (see `password-cache'), with a short timeout
+of 16 seconds (see `password-cache-expiry').  If PGG is used as the
+PGP backend, the PGP passphrase is managed by this mechanism.
+Passwords for ManageSieve connections are managed by this mechanism,
+after quering the user about whether to do so.
 
-More buttons for URLs, mail addresses, Message-IDs, Info links, man pages and
-Emacs or Gnus related references, see the info node "Article Buttons".  The
-variables `gnus-button-*-level' can be used to control the appearance of all
-article buttons, see the info node "Article Button Levels".
+** IMAP identity (RFC 2971) is supported.
 
-** Dired integration
+By default, Gnus do not send any information about itself, but you can
+customize it using `nnimap-id'.
 
-`gnus-dired-minor-mode' installs key bindings in dired buffers to send a file
-as an attachment (`C-c C-m C-a'), open a file using the approriate mailcap
-entry (`C-c C-m C-l'), and print a file using the mailcap entry (`C-c C-m
-C-p').  See the info node "Other modes".
-
-
-** Gnus can display RSS newsfeeds as a newsgroup.  To get started do `B
-nnrss RET RET' in the Group buffer.
-
-** Single-part yenc encoded attachments can be decoded.
-
-** Picons
-The picons code has been reimplemented to work in Emacs 21 -- 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.  To enable
-picons, install the picons database from
-
-      http://www.cs.indiana.edu/picons/ftp/index.html
-
-and point `gnus-picon-databases' to that location.
-
-** If the new option `gnus-treat-body-boundary' is `head', a boundary 
-line is drawn at the end of the headers.
-
-** Retrieval of charters and control messages
-There are new commands for fetching newsgroup charters (`H c') and
-control messages (`H C').
-
-** Delayed articles
-You can delay the sending of a message with `C-c C-j' in the Message
-buffer.  The messages are delivered at specified time.  This is useful
-for sending yourself reminders.  Setup with (gnus-delay-initialize).
-
-** If `auto-compression-mode' is enabled, attachments are automatically
-decompressed when activated.
-
-** If the new option `nnml-use-compressed-files' is non-nil, 
-the nnml back end allows compressed message files.
-
-** Signed article headers (X-PGP-Sig) can be verified with `W p'.
-
-** The Summary Buffer uses an arrow in the fringe to indicate the
-current article in Emacs 21 running on a graphical display.  Customize
-`gnus-summary-display-arrow' to disable it.
-
-** Warn about email replies to news
-Do you often find yourself replying to news by email by mistake?  Then
-the new option `gnus-confirm-mail-reply-to-news' is just the thing for
-you.
-
-** If the new option `gnus-summary-display-while-building' is non-nil, 
-the summary buffer is shown and updated as it's being built.
-
-** The new `recent' mark "." indicates newly arrived messages (as
-opposed to old but unread messages).
-
-** The new option `gnus-gcc-mark-as-read' automatically marks 
-Gcc articles as read.
-
-** The nndoc back end now supports mailman digests and exim bounces.
-
-** Gnus supports RFC 2369 mailing list headers, and adds a number of 
-related commands in mailing list groups.
-
-** The Date header can be displayed in a format that can be read aloud
-in English, see `gnus-treat-date-english'.
-
-** The envelope sender address can be customized when using Sendmail, see 
-`message-sendmail-envelope-from'.
-
-** diffs are automatically highlighted in groups matching
-`mm-uu-diff-groups-regexp'
-
-** TLS wrapper shipped with Gnus
-
-TLS/SSL is now supported in IMAP and NNTP via tls.el and GNUTLS.  The
-old TLS/SSL support via (external third party) ssl.el and OpenSSL
-still works.
-
-** New make.bat for compiling and installing Gnus under MS Windows
-
-Use make.bat if you want to install Gnus under MS Windows, the first
-argument to the batch-program should be the directory where xemacs.exe
-respectively emacs.exe is located, iff you want to install Gnus after
-compiling it, give make.bat /copy as the second parameter.
-
-`make.bat' has been rewritten from scratch, it now features automatic
-recognition of XEmacs and GNU Emacs, generates 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 makeinfo if it is
-available and falls back to infohack.el otherwise.  `make.bat' should now
-install all files which are necessary to run Gnus and be generally a
-complete replacement for the "configure; make; make install" cycle used
-under Unix systems.
-
-The new make.bat makes make-x.bat superfluous, so it has been removed.
-
-** Support for non-ASCII domain names
-
-Message supports non-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 `message-use-idna' controls this.  Gnus will also decode
-non-ASCII domain names in From:, To: and Cc: when you view a message.
-The variable `gnus-use-idna' controls this.
-
-** 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
-though it is not quoted in any way.  The variable
-`gnus-cite-unsightly-citation-regexp' matches the start of these
-citations.
-
-** gnus-article-skip-boring
-
-If you set `gnus-article-skip-boring' to t, then Gnus will not scroll
-down to show you a page that contains only boring text, which by
-default means cited text and signature.  You can customize what is
-skippable using `gnus-article-boring-faces'.
-
-This feature is especially useful if you read many articles that
-consist of a little new content at the top with a long, untrimmed
-message cited below.
-
-** The format spec %C for positioning point has changed to %*.
-
-** The new variable `gnus-parameters' can be used to set group parameters.
-
-Earlier this was done only via `G p' (or `G c'), which stored the
-parameters in ~/.newsrc.eld, but via this variable you can enjoy the
-powers of customize, and simplified backups since you set the variable
-in ~/.emacs instead of ~/.newsrc.eld.  The variable maps regular
-expressions matching group names to group parameters, a'la:
-
-     (setq gnus-parameters
-           '(("mail\\..*"
-              (gnus-show-threads nil)
-              (gnus-use-scoring nil))
-             ("^nnimap:\\(foo.bar\\)$"
-              (to-group . "\\1"))))
-
-** Smileys (":-)", ";-)" etc) are now iconized for Emacs too.
-
-Customize `gnus-treat-display-smileys' to disable it.
-
-** Gnus no longer generates the Sender: header automatically.
-
-Earlier it was generated iff the user configurable email address was
-different from the Gnus guessed default user address.  As the guessing
-algorithm is rarely correct these days, and (more controversially) the
-only use of the Sender: header was to check if you are entitled to
-cancel/supersede news (which is now solved by Cancel Locks instead,
-see another entry), generation of the header has been disabled by
-default.  See the variables `message-required-headers',
-`message-required-news-headers', and `message-required-mail-headers'.
-
-** Features from third party message-utils.el added to message.el.
-
-Message now asks if you wish to remove "(was: <old subject>)" from
-subject lines (see `message-subject-trailing-was-query').  C-c M-m and
-C-c M-f inserts markers indicating included text.  C-c C-f a adds a
-X-No-Archive: header.  C-c C-f x inserts appropriate headers and a
-note in the body for cross-postings and followups (see the variables
-`message-cross-post-*').
-
-** References and X-Draft-Headers are no longer generated when you
-start composing messages and `message-generate-headers-first' is nil.
-
-** 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.
-
-** Easy inclusion of X-Faces headers.
-
-** In the summary buffer, the new command / N inserts new messages and
-/ o inserts old messages.
-
-** Gnus decodes morse encoded messages if you press W m.
-
-** 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
-`nnimap-fixup-unread-after-getting-new-news' from the
-`gnus-setup-news-hook' (called on startup) and
-`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 n-f-u-a-g-n-n again.  If you were happy with the estimate and want
-to save some (minimal) time when getting new mail, remove the
-function.
-
-** Group Carbon Copy (GCC) quoting
-
-To support groups that contains SPC and other weird characters, groups
-are quoted before they are placed in the Gcc: header.  This means
-variables such as `gnus-message-archive-group' should no longer
-contain quote characters to make groups containing SPC work.  Also, if
-you are using the string "nnml:foo, nnml:bar" (indicating Gcc into two
-groups) you must change it to return the list ("nnml:foo" "nnml:bar"),
-otherwise the Gcc: line will be quoted incorrectly.  Note that
-returning the string "nnml:foo, nnml:bar" was incorrect earlier, it
-just didn't generate any problems since it was inserted directly.
-
-** ~/News/overview/ not used.
-
-As a result of the following change, the ~/News/overview/ directory is
-not used any more.  You can safely delete the entire hierarchy.
-
-** gnus-agent
-
-The Gnus Agent has seen a major update.  It is now enabled by default,
-and all nntp and nnimap servers from `gnus-select-method' and
-`gnus-secondary-select-method' are agentized by default.  Earlier only
-the server in `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 backends when
-possible.  Earlier this only happened in the unplugged state.  You can
-enroll or remove servers with `J a' and `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 `J u' or `J s' from the Group
-buffer.  You revert to the old behaviour of having the Agent disabled
-by customizing `gnus-agent'.  Note that putting `(gnus-agentize)' in
-~/.gnus is not needed any more.
-
-** gnus-summary-line-format
-
-The default value changed to "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n".
-Moreover `gnus-extra-headers', `nnmail-extra-headers' and
-`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 NNTP groups.
-
-** deuglify.el (gnus-article-outlook-deuglify-article)
-
-A new file from Raymond Scholz <rscholz@zonix.de> for deuglifying
-broken Outlook (Express) articles.
-
-** (require 'gnus-load)
-
-If you use a stand-alone Gnus distribution, you'd better add
-"(require 'gnus-load)" to your ~/.emacs after adding the Gnus
-lisp directory into load-path.
-
-File gnus-load.el contains autoload commands, functions and variables,
-some of which may not be included in distributions of Emacsen.
-
-** gnus-slave-unplugged
-
-A new command which starts gnus offline in slave mode.
-
-** message-insinuate-rmail
-
-Adding (message-insinuate-rmail) in .emacs and customizing
-`mail-user-agent' to `gnus-user-agent' convinces Rmail to compose,
-reply and forward messages in Message mode, where you can enjoy the
-power of MML.
-
-** message-minibuffer-local-map
-
-The line below enables BBDB in resending a message:
-
-(define-key message-minibuffer-local-map [?\t] 'bbdb-complete-name)
-
-** Externalizing and deleting of attachments.
-
-If `gnus-gcc-externalize-attachments' (or
-`message-fcc-externalize-attachments') is non-nil, attach local files
-as external parts.
-
-The command `gnus-mime-save-part-and-strip' (bound to `C-o' on MIME
-buttons) saves a part and replaces the part with an external one.
-`gnus-mime-delete-part' (bound to `d' on MIME buttons) removes a part.
-It works only on back ends that support editing.
-
-** gnus-default-charset
-
-The default value now guesses on the basis of your environment instead
-of using Latin-1.  Also the ".*" item in gnus-group-charset-alist is
-removed.
-
-** gnus-posting-styles
-
-Add a new format of match like
-
-        ((header "to" "larsi.*org")
-         (Organization "Somewhere, Inc."))
-
-The old format like the lines below is obsolete, but still accepted.
-
-        (header "to" "larsi.*org"
-         (Organization "Somewhere, Inc."))
-
-** message-ignored-news-headers and message-ignored-mail-headers
-
-X-Draft-From and X-Gnus-Agent-Meta-Information have been added into
-these two variables.  If you customized those, perhaps you need add
-those two headers too.
-
-** Gnus reads the 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.  Customize
-`gnus-agent-cache' to revert to the old behavior.
-
-** Gnus supports the "format=flowed" (RFC 2646) parameter.
-
-On composing messages, it is enabled by `use-hard-newlines'.  Decoding
-format=flowed was present but not documented in earlier versions.
-
-** Gnus supports the generation of RFC 2298 Disposition Notification requests.
-
-This is invoked with the C-c M-n key binding from message mode.
-
-** Gnus supports Maildir groups.
-
-Gnus includes a new backend nnmaildir.el.
-
-** Printing capabilities are enhanced.
-
-Gnus supports Muttprint natively with O P from the Summary and Article
-buffers.  Also, each individual MIME part can be printed using p on
-the MIME button.
-
-** Message supports the Importance: (RFC 2156) header.
-
-In the message buffer, `C-c C-f C-i' or `C-c C-u' cycles through the
-valid values.
-
-** Gnus supports Cancel Locks in News.
-
-This means a header "Cancel-Lock" is inserted in news posting.  It is
-used to determine if you wrote a article or not (for cancelling and
-superseding).  Gnus generates a random password string the first time
-you post a message, and saves it using the Custom system.  While the
-variable is called `canlock-password', it is not security sensitive
-data.  Publishing your canlock string on the web will not allow anyone
-to be able to anything she could not already do.  The behaviour can be
-changed by customizing `message-insert-canlock'.
-
-** 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 `D g' from the Group buffer,
-and then uploaded to the server using `C-c C-l' in the generated Sieve
-buffer.  Search the online Gnus manual for "sieve", and see the new
-Sieve manual, for more information.
-
-** Extended format specs.
-
-Format spec "%&user-date;" is added into
-`gnus-summary-line-format-alist'.  Also, user defined extended format
-specs are supported.  The extended format specs look like "%u&foo;",
-which invokes function `gnus-user-format-function-foo'.  Because "&" is
-used as the escape character, old user defined format "%u&" is no
-longer supported.
-
-** `/ *' (gnus-summary-limit-include-cached) is rewritten.
-
-It was aliased to `Y c' (gnus-summary-insert-cached-articles). The new
-function filters out other articles.
-
-** Some limiting commands accept a C-u prefix to negate the match.
-
-If C-u is used on subject, author or extra headers, i.e., `/ s', `/
-a', and `/ x' (gnus-summary-limit-to-{subject,author,extra})
-respectively, the result will be to display all articles that do not
-match the expression.
-
-** Group names are treated as UTF-8 by default.
-
-This is supposedly what USEFOR wanted to migrate to.  See
-`gnus-group-name-charset-group-alist' and
-`gnus-group-name-charset-method-alist' for customization.
-
-** The nnml and nnfolder backends store marks for each group.
-
-This makes it possible to take backup of nnml/nnfolder servers/groups
-separately of ~/.newsrc.eld, while preserving marks.  It also makes it
-possible to share articles and marks between users (without sharing
-the ~/.newsrc.eld file) within e.g. a department.  It works by storing
-the marks stored in ~/.newsrc.eld in a per-group file ".marks" (for
-nnml) and "groupname.mrk" (for nnfolder, named "groupname").  If the
-nnml/nnfolder is moved to another machine, Gnus will automatically use
-the .marks or .mrk file instead of the information in ~/.newsrc.eld.
-The new server variables `nnml-marks-is-evil' and
-`nnfolder-marks-is-evil' can be used to disable this feature.
-
-** The menu bar item (in Group and Summary buffer) named "Misc" has
-been renamed to "Gnus".
-
-** The menu bar item (in Message mode) named "MML" has been renamed to
-"Attachments".  Note that this menu also contains security related
-stuff, like signing and encryption.
-
-** gnus-group-charset-alist and 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:
-
-   ("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr)
-
-** Gnus supports PGP (RFC 1991/2440), PGP/MIME (RFC 2015/3156) and
-S/MIME (RFC 2630-2633).
-
-It needs an external S/MIME and OpenPGP implementation, but no
-additional lisp libraries.  This add several menu items to the
-Attachments menu, and C-c RET key bindings, when composing messages.
-This also obsoletes `gnus-article-hide-pgp-hook'.
-
-** Gnus inlines external parts (message/external).
-
-** MML (Mime compose) prefix changed from `M-m' to `C-c C-m'.
-
-This change was made to avoid conflict with the standard binding of
-`back-to-indentation', which is also useful in message mode.
-
-** The default for message-forward-show-mml changed to symbol best.
-
-The behaviour for the `best' value is to show MML (i.e., convert MIME
-to MML) when appropriate.  MML will not be used when forwarding signed
-or encrypted messages, as the conversion invalidate the digital
-signature.
-
-** Bug fixes.
-
-\f
-* Changes in Pterodactyl Gnus (5.8/5.9)
-
-The Gnus NEWS entries are short, but they reflect sweeping changes in
-four areas: Article display treatment, MIME treatment,
-internationalization and mail-fetching.
-
-** The mail-fetching functions have changed.  See the manual for the
-many details.  In particular, all procmail fetching variables are gone.
-
-If you used procmail like in
-
-(setq nnmail-use-procmail t)
-(setq nnmail-spool-file 'procmail)
-(setq nnmail-procmail-directory "~/mail/incoming/")
-(setq nnmail-procmail-suffix "\\.in")
-
-this now has changed to 
-
-(setq mail-sources
-      '((directory :path "~/mail/incoming/"
-                  :suffix ".in")))
-
-More information is available in the info doc at Select Methods ->
-Getting Mail -> Mail Sources
-
-** Gnus is now a MIME-capable reader.  This affects many parts of
-Gnus, and adds a slew of new commands.  See the manual for details.
-
-** Gnus has also been multilingualized.  This also affects too
-many parts of Gnus to summarize here, and adds many new variables.
-
-** gnus-auto-select-first can now be a function to be
-called to position point.
-
-** The user can now decide which extra headers should be included in
-summary buffers and NOV files.
-
-** `gnus-article-display-hook' has been removed.  Instead, a number
-of variables starting with `gnus-treat-' have been added.
-
-** The Gnus posting styles have been redone again and now works in a
-subtly different manner.
-
-** New web-based backends have been added: nnslashdot, nnwarchive
-and nnultimate.  nnweb has been revamped, again, to keep up with
-ever-changing layouts.
-
-** Gnus can now read IMAP mail via nnimap.
+** The "all.SCORE" file can now be edited from the group buffer using `W e'.
 
 \f
 * For older news, see Gnus info node "New Features".
diff --git a/README b/README
index 11f90cb..e3627c8 100644 (file)
--- a/README
+++ b/README
@@ -43,8 +43,8 @@ the same function and variable names.  If you have been running GNUS
 in your Emacs, you should probably exit that Emacs and start a new one
 to fire up Gnus.
 
-Gnus does absolutely not work with anything older than Emacs 20.3 or
-XEmacs 20.0.  You definitely need a relatively current Emacs.
+Gnus does absolutely not work with anything older than Emacs 21.1 or
+XEmacs 21.4.  You definitely need a relatively current Emacs.
 
 To compile the Gnus manual, you either need a pretty new Emacs, or a
 pretty new version of the texinfo tools.
index 999d5d9..3ff6caf 100644 (file)
@@ -1,3 +1,27 @@
+2004-04-05  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * nnir.el (nnir-group-server): Move before first use.
+       From Andreas Schwab  <schwab@suse.de>.
+       Fix doc-string, indent.
+
+2004-03-15  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * nnir.el (nnir-run-swish-e): Fixed typo.  From Adrian Lanz
+       <lanz@fowi.ethz.ch> (tiny change).
+
+2004-01-23  Jesper Harder  <harder@ifa.au.dk>
+
+       * README: update.
+
+       * md5.el: Remove.
+
+       * base64.el: Remove.
+
+2004-01-16  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * nnir.el (nnir-run-glimpse): Fixed typo.  Reported by Patrick
+       Drechsler <patrick.drechsler@gmx.net>.
+
 2003-11-15  Simon Josefsson  <jas@extundo.com>
 
        * starttls.el: Sync with recent gnu.emacs.sources post.
index 7c3c3fc..e51f9c7 100644 (file)
@@ -12,22 +12,11 @@ need to a directory which is in load-path.
 
 Here is an overview of the files:
 
-base64.el
-
-        As of Emacs 21, base64 encoding and decoding is available
-        natively.  So this file appears to be needed for Emacs 20
-        only.
-
 gpg-ring.el
 gpg.el
 
 hashcash.el
 
-md5.el
-
-       MD5 encoding is part of Emacs as of Emacs 21.2.  Hence, this
-       file is not needed for those Emacs versions.
-
 one-line-cookie.diff
 
 ssl.el
index 3a30352..52a85b8 100644 (file)
 
 ;;; Setup Code:
 
-(defconst nnir-version "$Id: nnir.el,v 1.1.1.2 2004-01-05 00:12:59 yamaoka Exp $"
+(defconst nnir-version "$Id: nnir.el,v 1.1.1.3 2004-05-02 00:16:48 yamaoka Exp $"
   "Version of NNIR.")
 
 (require 'cl)
@@ -692,7 +692,17 @@ that it is for Namazu, not Glimpse."
     'gnus-group-make-nnir-group))
 (add-hook 'gnus-group-mode-hook 'nnir-group-mode-hook)
 
-
+(defmacro nnir-group-server (group)
+  "Return the server for a foreign 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 ":"))))
 
 ;; Summary mode commands.
 
@@ -865,7 +875,7 @@ pairs (also vectors, actually)."
     (let ((artlist nil)
           (groupspec (cdr (assq 'group query)))
           (qstring (cdr (assq 'query query)))
-         (prefix (nnir-read-server-parm 'nnir-glimps-remove-prefix server))
+         (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"
@@ -1194,7 +1204,7 @@ Tested with swish-e-2.0.1 on Windows NT 4.0."
                  (error "Missing parameter `nnir-swish-e-index-file'")))
             (additional-switches
              (nnir-read-server-parm
-              'nnir-swish++-additional-switches server))
+              'nnir-swish-e-additional-switches server))
             (cp-list `(,nnir-swish-e-program
                        nil             ; input from /dev/null
                        t               ; output
@@ -1486,17 +1496,6 @@ form 'backend:name'."
 ;;       (symbol-value key))
 ;;     ))
 
-(defmacro nnir-group-server (group)
-  "Returns the server for a foreign newsgroup in the format as gnus-server-to-method needs it. Compare to 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 ":"))
-    ))
-
 (defun nnir-group-full-name (shortname server)
   "For the given group name, return a full Gnus group name.
 The Gnus backend/server information is added."
index 95db27f..e34a671 100644 (file)
@@ -1,6 +1,6 @@
 ;;; starttls.el --- STARTTLS support via wrapper around GNU TLS
 
-;; Copyright (C) 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 ;; Keywords: comm, tls, gnutls, ssl
@@ -123,7 +123,7 @@ The default is what GNUTLS's \"gnutls-cli\" outputs."
   :type 'regexp
   :group 'starttls)
 
-(defcustom starttls-failure "*** Handshake has failed"
+(defcustom starttls-failure "\\*\\*\\* Handshake has failed"
   "*Regular expression indicating failed TLS handshake.
 The default is what GNUTLS's \"gnutls-cli\" outputs."
   ;; GNUTLS cli.c:do_handshake() print this string on failure.  If the
index f377589..4fcf56c 100644 (file)
@@ -223,7 +223,7 @@ want this is beyond me, but here goes:
 
 Create the group by saying
 
-`G V my.virtual.newsgroup<RET>nnvirtual<RET>^rec\.aquaria\.*<RET>'
+`G m my.virtual.newsgroup<RET>nnvirtual<RET>^rec\.aquaria\.*<RET>'
 
 This will create the group "nnvirtual:my.virtual.newsgroup", which
 will collect all articles from all the groups in the "rec.aquaria"
index 2380bbe..861fbfa 100644 (file)
@@ -1,5 +1,7 @@
-Makefile
-version
 *.elc
+Makefile
+auto-autoloads.el
+custom-load.el
 gnus-load.el
 old
+version
index 995a68d..e9fd32b 100644 (file)
-2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2004-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
 
-       * gnus.el: No Gnus v0.1 is released.
+       * gnus.el: No Gnus v0.2 is released.
 
-2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2004-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus.el: No Gnus v0.1 is released.
+       * gnus-agent.el (gnus-agent-read-agentview): Inline
+       gnus-uncompress-range. 
 
-2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2004-05-01  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
 
-       * gnus.el: No Gnus v0.0 is released.
+       * spam.el (spam-bsfilter-path): Use `executable-find' instead of
+       `exec-installed-p'.
 
-2004-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump.
-       (gnus-version): No.
-
-2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Gnus v5.10.6 is released.
-
-2004-01-04  Kai Grossjohann  <kai@emptydomain.de>
-
-       * gnus-sum.el (gnus-summary-print-article): Doc fix.
-
-2004-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump.
-
-2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Gnus v5.10.5 is released.
-
-2004-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el (gnus-face-from-file): Message 9.
-
-2004-01-03  Romain FRANCOISE  <romain@orebokech.com>
-
-       * gnus-fun.el (gnus-face-from-file): Use gnus-message.
-
-2004-01-03  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-mid-or-mail-heuristic): Treat Gmane
-       addresses specially.  Fix returned value and messages.
-
-       * mm-decode.el (mm-enable-external): New variable.
-       (mm-display-part): Use it.
-       (mm-display-external): Fix message in case of nil handle.
-
-       * Update copyright for several files.
-
-       * spam-report.el (spam-report-gmane): Adjust verbosity.
-       Delete trailing whitespace.  Update copyright.
-
-       * spam.el: Fix many (but not all) checkdoc complaints.
-       Delete trailing whitespace.
-
-       * message.el (message-header-synonyms): Defcustom.
-       (message-get-reply-headers): Catch `Original-To'.
-       (message-carefully-insert-headers): Added comment.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Improved "Washing" menu.
-
-2004-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-select-newsgroup): Use cat.
-
-       * gnus-agent.el (gnus-agent-cat-enable-undownloaded-faces): New
-       cat. 
-
-       * gnus.el (gnus-user-agent): Moved here.
-
-       * gnus-msg.el (gnus-user-agent): Moved from here.
-
-       * gnus.el (gnus-version-number): Bump.
-
-2004-01-03 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Gnus v5.10.4 is released.
-
-2004-01-02  Reiner Steib  <Reiner.Steib@gmx.de>
+2004-04-30  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
 
-       * gnus.el (gnus-mode-line-buffer-identification): Show version in
-       help-echo.
-       (gnus-read-group): Allow most group names.  Changed warning.
+       * gnus.el (spam-process, spam-autodetect-methods): Add
+       bsfilter and bsfilter-headers.
 
-2004-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * spam.el (spam-bsfilter): New customize group.
+       (spam-use-bsfilter, spam-use-bsfilter-headers, spam-bsfilter-path)
+       (spam-bsfilter-header, spam-bsfilter-probability-header)
+       (spam-bsfilter-spam-switch, spam-bsfilter-ham-switch)
+       (spam-bsfilter-spam-strong-switch, spam-bsfilter-ham-strong-switch)
+       (spam-bsfilter-database-directory): New options.
+       (spam-install-hooks, spam-list-of-processors, spam-list-of-checks)
+       (spam-list-of-statistical-checks, spam-registration-functions):
+       Add `spam-use-bsfilter' and `spam-use-bsfilter-headers'.
+       (spam-bsfilter-score): New command.
+       (spam-check-bsfilter-headers, spam-check-bsfilter)
+       (spam-bsfilter-register-with-bsfilter)
+       (spam-bsfilter-register-spam-routine)
+       (spam-bsfilter-unregister-spam-routine)
+       (spam-bsfilter-register-ham-routine)
+       (spam-bsfilter-unregister-ham-routine): New functions.
+       (spam-generic-score): Supprt bsfilter; Accept an optional argument
+       to recalcurate spam score even if scoring header has already been
+       added.
+       (spam-bogofilter-score, spam-spamassassin-score): Accept an
+       optional argument to recalcurate spam score even if scoring header
+       has already been added.
 
-       * gnus-dired.el (gnus-dired-mode-map): Change keymaps.
+2004-04-29  Jesper Harder  <harder@ifa.au.dk>
 
-2004-01-02  Arne J\e,Ax\e(Brgensen  <arne@arnested.dk>
+       * nnrss.el (nnrss-get-namespace-prefix): Use string= to compare
+       strings!  Reported by David D. Smith <davidsmith@acm.org>.
+       (nnrss-check-group, nnrss-read-group-data): Hash on Subject if
+       link is missing.
 
-       * smime.el (smime-crl-check): Doc fix.
+2004-04-28  Jesper Harder  <harder@ifa.au.dk>
 
-2004-01-02  Edwin Steiner  <edwin.steiner@gmx.net>
+       * html2text.el (html2text-replace-list): Add &amp; and &apos;.
+       (html2text-get-attr): Rewrite.
 
-       * gnus-nocem.el (gnus-nocem-enter-article): Use the real group
-       hashtb (tiny patch).
+       * message.el (message-setup-1): Remove redundant put-text-property
+       on mail-header-separator.
 
-2004-01-02  Kai Grossjohann  <kai@emptydomain.de>
+2004-04-27  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * nnml.el (nnml-save-mail): Grok compressed articles.  From
-       Michael Albinus <Michael.Albinus@alcatel.de>.
+       * 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
 
-2004-01-02  Teodor Zlatanov  <tzz@lifelogs.com>
+       * 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.el (spam-ham-copy-or-move-routine): use spam-list-articles
-       (spam-list-articles): rewritten to only check a mark once per
-       invocation
+2004-04-26  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2004-01-01  Simon Josefsson  <jas@extundo.com>
+       * gnus-ems.el: Autoload appt-select-lowest-window (revert
+       2004-03-04 change).
 
-       * mml-sec.el (mml-default-encrypt-method)
-       (mml-default-sign-method): Defcustom.
+2004-04-25  Jesper Harder  <harder@ifa.au.dk>
 
-2003-12-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * spam-stat.el (spam-stat-score-buffer): Simplify mapcar usage.
+       Use mapc when appropriate.
 
-       * mml.el (mml-generate-mime-1): Remove extra ).
+       * sieve-manage.el (sieve-manage-open): do.
 
-       * gnus-group.el (gnus-group-set-current-level): Signal errors on
-       topic lines.
-       (gnus-group-set-current-level): Fix fix.
+       * nnweb.el (nnweb-insert-html): do.
 
-2003-12-31  Jeremy Maitin-Shepard  <jbms@attbi.com>
+       * nnvirtual.el (nnvirtual-catchup-group, nnvirtual-partition-sequence)
+       (nnvirtual-partition-sequence, nnvirtual-create-mapping): do.
 
-       * mml.el (mml-generate-mime-1): Use mml-compute-boundary (tiny
-       change). 
+       * nnspool.el (nnspool-request-group): do.
 
-2003-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+       * nnrss.el (nnrss-opml-export, nnrss-find-el, nnrss-order-hrefs):
+       do.
 
-       * gnus-group.el: Removed `(when t ...)' around `gnus-define-keys'.
-       (gnus-group-group-map): Added `gnus-group-read-ephemeral-group'
-       (already in previous commit inadvertently).
-       (gnus-group-make-menu-bar): Added `gnus-group-read-ephemeral-group'.
-       (gnus-group-read-ephemeral-group): Made interactive.
+       * nnml.el (nnml-request-update-info): do.
 
-       * gnus-score.el (gnus-score-find-trace): Added comment on sync
-       with `gnus-score-edit-file-at-point'.
+       * nnmh.el (nnmh-request-group, nnmh-request-list-1, nnmh-active-number)
+       (nnmh-request-create-group, nnmh-update-gnus-unreads): do.
 
-       * gnus-logic.el (gnus-score-advanced): Ditto.
+       * nnimap.el (nnimap-request-close, nnimap-acl-edit)
+       (nnimap-request-set-mark): do.
 
-       * gnus-score.el (gnus-score-edit-file-at-point): Fix for
-       advanced scoring.
+       * nnfolder.el (nnfolder-request-update-info): do.
 
-2003-12-30  Simon Josefsson  <jas@extundo.com>
+       * mm-view.el (mm-pkcs7-signed-magic, mm-pkcs7-enveloped-magic):
+       do.
 
-       * gnus-score.el (gnus-score-edit-file-at-point): Use
-       gnus-point-at-*, for portability.
+       * mml.el (mml-destroy-buffers, mml-compute-boundary-1): do.
 
-2003-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+       * gnus-uu.el (gnus-uu-find-articles-matching): do.
 
-       * gnus-art.el (gnus-treat-body-boundary): Fix doc-string and
-       custom type.
-       (gnus-button-mid-or-mail-regexp): Don't be too restrictive.
-       Suggested by Felix Wiemann <Felix.Wiemann@gmx.net>.
-       (gnus-button-alist): Added "M-x ... RET" and "mid:" buttons.
-       Added comments about relevant RFCs.
+       * gnus-topic.el (gnus-topic-check-topology, gnus-topic-remove-group):
+       do.
 
-       * gnus-sum.el (gnus-summary-mode): Untabify doc-string.
-       (gnus-summary-goto-article): Allow `%40'.
-       (gnus-summary-refer-article): Convert `%40' to `@'.
+       * gnus-sum.el (gnus-summary-fetch-faq, gnus-read-move-group-name):
+       do.
 
-2003-12-30  Simon Josefsson  <jas@extundo.com>
+       * gnus-score.el (gnus-score-load-file, gnus-sort-score-files): do.
 
-       * smime.el (smime-crl-check): New.
-       (smime-verify-region): Use it.  From Arne J\e,Ax\e(Brgensen
-       <arne@arnested.dk> in <87llpk9v5q.fsf@seamus.arnested.dk> (tiny
-       change).
+       * gnus-nocem.el (gnus-nocem-scan-groups): do.
 
-2003-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+       * gnus-int.el (gnus-start-news-server): do.
 
-       * gnus-score.el (gnus-score-edit-file-at-point): Consider the
-       whole match element.  From Karl Pfl\e,Ad\e(Bsterer <sigurd@12move.de>.
-       (gnus-score-find-trace): Use it.  Added `f' and `t' commands,
-       added quick help.  With some suggestions from Karl Pfl\e,Ad\e(Bsterer
-       <sigurd@12move.de>.
+       * gnus-group.el (gnus-group-make-kiboze-group)
+       (gnus-group-browse-foreign-server): do.
 
-       * gnus-util.el (gnus-emacs-version): Added doc-string.
+2004-04-22  Teodor Zlatanov  <tzz@bwh.harvard.edu>
 
-       * mml.el (mml-minibuffer-read-disposition): New function.
-       (mml-attach-file): Use it.
-       (mml-preview): Added MIME preview to gnus-buffers.
+       * 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
 
-2003-12-30  Jesper Harder  <harder@ifa.au.dk>
+2004-04-21  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * gnus-sum.el (gnus-summary-make-menu-bar): Add ellipses.
+       * spam.el (spam-summary-prepare-exit): logic and message fix.
+       Reported by bojohan+news@dd.chalmers.se (Johan Bockg\e,Ae\e(Brd).
 
-2003-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-04-17  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-start.el (gnus-get-unread-articles): Inline gnus-server-get-method.
-       (gnus-get-unread-articles): Cache methods.
-       (gnus-get-unread-articles-in-group): Indent.
+       * gnus-sum.el (gnus-set-global-variables)
+       (gnus-build-all-threads, gnus-get-newsgroup-headers)
+       (gnus-article-get-xrefs, gnus-summary-best-group)
+       (gnus-summary-next-article, gnus-summary-enter-digest-group)
+       (gnus-summary-set-bookmark, gnus-offer-save-summaries)
+       (gnus-summary-update-info, gnus-kill-or-deaden-summary): Use
+       with-current-buffer.
 
-       * gnus.el (gnus-version-number): Bump.
-       (gnus-secondary-method-p): Extend servers to methods before comparing.
-       (gnus-secondary-method-p): Revert.
+2004-04-16  Teodor Zlatanov  <tzz@lifelogs.com>
 
-2003-12-30 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+       * 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
 
-       * gnus.el: Gnus v5.10.3 is released.
+       * gnus-registry.el: clarified comments at beginning
 
-2003-12-29  Simon Josefsson  <jas@extundo.com>
+2004-04-16  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-agent.el (gnus-agentize): Improve auto-agentizing logic.
-       Suggested by Steinar Bang <sb@dod.no>.
-       (gnus-agent-auto-agentize-methods): Customize.
+       * message.el (message-cater-to-broken-inn): Remove.
+       (message-shorten-references): Make sure the total folded length of
+       References is shorter than 998 characters to cater to a bug in INN
+       2.3.  Also, don't pretend that references aren't folded -- this
+       hasn't worked for a while.
 
-2003-12-29  Kevin Greiner <kgreiner@xpediantsolutions.com>
-       * gnus.el (gnus-server-to-method): Fixed bug in 2003-12-22
-       check-in.
+2004-04-15  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+               
+       * gnus-agent.el (gnus-agentize):
+       gnus-agent-send-mail-real-function no longer set to current value
+       of message-send-mail-function but rather a lambda that calls
+       message-send-mail-function.  The change makes the agent real-time
+       responsive to user changes to message-send-mail-function.
 
-2003-12-28  Adrian Lanz  <lanz@fowi.ethz.ch>
+2004-04-15  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+               
+       * legacy-gnus-agent.el
+       (gnus-agent-convert-to-compressed-agentview): Fixed typos with
+       help from Florian Weimer <fw@deneb.enyo.de>
 
-       * mail-source.el (mail-source-fetch-imap): Prevent storing of
-       identical entries for imap mail sources, when retrieving mail
-       messages from an imap server within the same Gnus session several
-       times (tiny change).
+2004-04-15  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-12-28  Jesper Harder  <harder@ifa.au.dk>
+       * nnmail.el (nnmail-cache-insert): Revert last change.
 
-       * mm-view.el (mm-text-html-washer-alist): Use
-       mm-inline-wash-with-stdin for w3m-standalone.
+2004-04-14  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * mm-decode.el (mm-text-html-renderer): Add w3m-standalone.
+       * nnmail.el (nnmail-cache-insert): Always check whether
+       nnmail-cache-ignore-groups matches a group name.
 
-       * mml1991.el (mml1991-pgg-encrypt): Decode according to CTE before
-       encrypting.
+2004-04-13  Teodor Zlatanov  <tzz@lifelogs.com>
 
-2003-12-28  Jesper Harder  <harder@ifa.au.dk>
+       * 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
 
-       * mml1991.el (mml1991-pgg-sign): Use unibyte when re-encoding.
-       From Ivan Boldyrev <boldyrev@uiggm.nsc.ru> (tiny change).
+       * gnus-registry.el (gnus-registry-clean-empty-function)
+       (gnus-registry-clean-empty): remove only empty entries without
+       extra data
 
-2003-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-04-12  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * dgnushack.el: Add an advice to byte-optimize-form-code-walker to
-       avoid the warning ``...called for effect'' for the pop form when
-       running Emacs 21.3.
+       * spam-stat.el (spam-stat-buffer-change-to-spam)
+       (spam-stat-buffer-change-to-non-spam): change (error) to
+       (gnus-message 8) invocation
 
-2003-12-26  Jesper Harder  <harder@ifa.au.dk>
+2004-04-12  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * mm-bodies.el (mm-body-encoding): Don't use 7bit if the body
-       contains "^From " and mm-use-ultra-safe-encoding is true.
-
-2003-12-25  Jesper Harder  <harder@ifa.au.dk>
-
-       * mml1991.el (mml1991-pgg-sign): Encode and decode according to
-       CTE header.  Don't insert gpg output as unibyte.
-
-2003-12-25  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * lpath.el: Remove display-time-event-handler and open-ssl-stream;
-       add delete-extent for Emacs; rearrange bindings assuming w3 may
-       not be available and XEmacs without the file-coding feature may be
+       * nntp.el (nntp-via-netcat-command): New variable.
+       (nntp-via-netcat-switches): New variable.
+       (nntp-open-via-rlogin-and-netcat): New function.
+       (nntp-open-connection-function): Doc fix.
+       (nntp-telnet-command): Doc fix.
+       (nntp-end-of-line): Doc fix.
+       (nntp-via-rlogin-command): Doc fix.
+       (nntp-via-user-name): Doc fix.
+       (nntp-via-address): Doc fix.
+
+2004-04-09  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mml2015.el (mml2015-use): Avoid the "Recursive load suspected"
+       error in Emacs 21.1.
+
+2004-04-08  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-start.el (gnus-get-unread-articles): Fix last commit.
+
+2004-04-07  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+       * gnus-agent.el (gnus-agent-total-fetched-hashtb): New variable.
+       (gnus-agent-with-refreshed-group): New macro.
+       (gnus-agent-rename-group): New function.
+       (gnus-agent-delete-group): New function.
+       (gnus-agent-save-group-info): Use gnus-command-method when
+       `method' parameter is nil.  Don't write nil entries into the
+       active file.
+       (gnus-agent-get-group-info): New function.
+       (gnus-agent-fetch-articles): Use
+       gnus-agent-update-files-total-fetched-for to increment disk space
        used.
+       (gnus-agent-fetch-headers, gnus-agent-save-alist): Use
+       gnus-agent-update-view-total-fetched-for to increment disk space
+       used.
+       (gnus-agent-get-local): Added optional parameters to avoid calling
+       gnus-group-real-name and gnus-find-method-for-group.
+       (gnus-agent-set-local): Delete stored entry if either min, or max,
+       are nil.
+       (gnus-agent-fetch-session): Reworded error/quit messages.  On
+       quit, use gnus-agent-regenerate-group to record existance of any
+       articles fetched to disk before the quit occurred.
+       (gnus-agent-expire-group-1): Use gnus-agent-with-refreshed-group,
+       gnus-agent-update-view-total-fetched-for, and
+       gnus-agent-update-files-total-fetched-for to decrement disk space
+       used.
+       (gnus-agent-retrieve-headers): Use
+       gnus-agent-update-view-total-fetched-for to increment disk space
+       used.
+       (gnus-agent-regenerate-group): Replace gnus-group-update-group
+       with gnus-agent-update-files-total-fetched-for to decrement disk
+       space and fresh group buffer.
+       (gnus-agent-inhibit-update-total-fetched-for): New variable.
+       (gnus-agent-need-update-total-fetched-for): New variable.
+       (gnus-agent-update-files-total-fetched-for): New function.
+       (gnus-agent-update-view-total-fetched-for): New function.
+       (gnus-agent-total-fetched-for): New function.  
+
+       * gnus-cache.el (gnus-cache-save-buffers): Use
+       gnus-cache-update-overview-total-fetched-for to change disk space
+       used by this group.
+       (gnus-cache-possibly-enter-article): Use
+       gnus-cache-update-file-total-fetched-for to increment disk space
+       used by this group.
+       (gnus-cache-possibly-remove-article): Use
+       gnus-cache-update-file-total-fetched-for to decrement disk space
+       used by this group.
+       (gnus-cache-generate-nov-databases): Purge total fetched cache.
+       (gnus-cache-rename-group): New function.
+       (gnus-cache-delete-group): New function.
+       (gnus-cache-inhibit-update-total-fetched-for): New variable.
+       (gnus-cache-need-update-total-fetched-for): New variable.
+       (gnus-cache-with-refreshed-group): New macro.
+       (gnus-cache-update-file-total-fetched-for): New function.
+       (gnus-cache-update-overview-total-fetched-for): New function.
+       (gnus-cache-rename-group-total-fetched-for): New function.
+       (gnus-cache-delete-group-total-fetched-for): New function.
+       (gnus-cache-total-fetched-for): New function.
+
+       * gnus-group.el (): Require gnus-sum and autoload functions to
+       resolve warnings when gnus-group.el compiled alone.
+       (gnus-group-line-format): Documented new %F
+       (size of Fetched data) group line format; identifies disk space
+       used by agent and cache.
+       (gnus-group-line-format-alist): Defined new F format.
+       (gnus-total-fetched-for): New function.
+       (gnus-group-delete-group): No longer update
+       gnus-cache-active-altered as gnus-request-delete-group now keeps
+       the cache in sync.
+       (gnus-group-list-active): Let the agent store a server's active
+       list if currently plugged.
+
+       * gnus-int.el (gnus-request-delete-group): Use
+       gnus-cache-delete-group and gnus-agent-delete-group to keep the
+       local disk in sync with the server.
+        (gnus-request-rename-group): Use
+       gnus-cache-rename-group and gnus-agent-rename-group to keep the
+       local disk in sync with the server.
+
+       * gnus-start.el (gnus-get-unread-articles): Cosmetic
+       simplification to logic.
+
+       * gnus-util.el (gnus-rename-file): New function.
+
+2004-04-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * rfc2047.el (rfc2047-encoded-word-regexp): Remove unnecessary
+       '+'.  Reported by Stefan Wiens <s.wi@gmx.net>.
+
+       * mm-util.el (mm-image-load-path): Handle nil in load-path.
+       From Christian Neukirchen <chneukirchen@yahoo.de>.
+
+2004-04-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-cache.el (gnus-cache-save-buffers): Check if buffer is
+       alive.  Reported by Laurent Martelli <laurent@aopsys.com>.
+
+2004-04-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.el (gnus-getenv-nntpserver): Strip whitespace.
+
+2004-04-02  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-set-difference): new function to replace
+       gnus-set-difference in spam.el
+       (spam-summary-prepare-exit): use spam-set-difference
+
+2004-03-29  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * 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
+
+2004-03-27  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-exchange-point-and-mark): Use
+       message-mark-active-p.  Suggested by Jesper Harder
+       <harder@ifa.au.dk>.
 
-2003-12-24  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * dgnushack.el (dgnushack-compile): Increase the value for
-       max-specpdl-size when compiling Gnus with Emacs 20.
-
-2003-12-22  Kevin Greiner <kgreiner@xpediantsolutions.com>
-       * 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
-       twice to open each server.
-
-       * gnus-start.el (gnus-get-unread-articles-in-group): Autoload
-       gnus-agent-possibly-alter-active rather than inline to resolve
-       compiler warnings.
-
-       * gnus.el (gnus-server-to-method): Added fallback of iterating
-       over gnus-newsrc-alist to resolve names of foreign servers.
-       Should fix recent agent bug.
-
-2003-12-22  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-score.el (gnus-summary-lower-score)
-       (gnus-summary-increase-score): Mention symbolic prefix in the
-       doc-string.  Suggested by Karl Pfl\e,Ad\e(Bsterer <sigurd@12move.de>.
-
-2003-12-21  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-agent.el (gnus-agent-read-agentview): Use
-       car-less-than-car.
-
-2003-12-20  Artem Chuprina <ran@ran.pp.ru>  (tiny change)
-
-       * message.el (message-yank-buffer): Bind message-reply-buffer to
-       a buffer rather than a string.
-
-2003-12-19  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-msg.el (gnus-summary-followup): Correct documentation.
-
-2003-12-18  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-msg.el (gnus-inews-add-send-actions): `yanked' can be a
-       list of lists.  Reported by Dmitri Paduchikh <paduch@imm.uran.ru>.
-
-2003-12-18  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * mm-url.el (mm-url-insert-file-contents-external)
-       (mm-url-insert-file-contents): Added doc-strings.  Autoload.
-
-2003-12-18  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-cus.el (defvar): defvar
-       gnus-agent-cat-disable-undownloaded-faces.
-
-2003-12-17  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-forward-subject-name-subject): Use
-       gnus-extract-address-components instead of
-       mail-header-parse-address because it may be called with non-ascii
-       text.
-
-2003-12-16  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * nnmail.el (nnmail-split-fancy): The widget now supports
-       restrictions.
-
-2003-12-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-03-26  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * nnheader.el (nnheader-find-etc-directory): Find the newest one.
+       * message.el (message-exchange-point-and-mark): Don't activate
+       region if it was inactive.  Suggested by Hiroshi Fujishima
+       <pooh@nature.tsukuba.ac.jp>.
 
-2003-12-16  Simon Josefsson  <jas@extundo.com>
+2004-03-25  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * sha1-el.el (autoload): Don't use ignore-errors.
-       (sha1-use-external): Use condition-case.  Suggested by Katsumi
-       Yamaoka <yamaoka@jpl.org>.
+       * gnus-art.el (article-display-face): Display Faces in the same
+       order as X-Faces.
 
-2003-12-15  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-03-24  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * nnmail.el (nnmail-split-fancy): Make it customizable with Emacs
-       20 as well.
+       * nndoc.el (nndoc-forward-type-p): Recognize envelope From_.
 
-2003-12-15  Simon Josefsson  <jas@extundo.com>
+2004-03-23  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * sha1-el.el (autoload): Ignore errors for
-       executable-find. (XEmacs ecrypto does not require sh-script where
-       executable.el is located.)
-       (sha1-use-external): Likewise.
+       * gnus-art.el (gnus-mime-recompute-hierarchical-structure): Remove.
+       (gnus-mime-multipart-functions): Revert 2004-03-19 change.
+       (gnus-article-mime-hierarchy): Remove.
+       (gnus-article-mime-hierarchy-next): Remove.
+       (gnus-article-mode): Revert 2004-03-19 change.
+       (gnus-article-setup-buffer): Revert 2004-03-19 change.
+       (gnus-insert-mime-button): Revert 2004-03-19 change.
+       (gnus-mime-accumulate-hierarchy): Remove.
+       (gnus-mime-enter-multipart): Remove.
+       (gnus-mime-leave-multipart): Remove,
+       (gnus-mime-display-part): Revert 2004-03-19 change.
+       (gnus-mime-display-alternative): Revert 2004-03-19 change.
 
-       * sha1-el.el (sha1): Add defgroup.
-       (sha1-maximum-internal-length, sha1-program, sha1-use-external)
-       (sha1-program): Use 'sha1sum' from GNU CoreUtils instead of OpenSSL.
-       (sha1): Autoload.
+       * mml.el (mml-preview): Revert 2004-03-19 change.
 
-       * nndraft.el (nndraft-request-move-article): Copy definition of
-       nnmh-request-move-article instead of calling it, because the nnmh
-       version uses nnmh-request-article which isn't the same as the
-       nndraft version.
+2004-03-18  Helmut Waitzmann  <Helmut.Waitzmann@web.de>  (tiny change)
 
-2003-12-13  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnus-sum.el (gnus-newsgroup-variables): Doc fix.
 
-       * spam.el: added some gnus-registry autoloads
-       (spam-split-symbolic-return): makes spam-split return 'spam
-       instead of the value of spam-split-group when spam is detected
-       (spam-split-symbolic-return-positive): makes spam-split return
-       'ham instead of nil when ham is detected
-       (spam-autodetect-recheck-messages): tells spam.el whether it
-       should recheck all messages in a group, or only the unseen ones
-       (spam-split-last-successful-check): spam-split will set this to
-       the last successful check; this was seen as a cleaner approach
-       than returning a cell like '(spam spam-use-bogofilter)
-       (spam-list-of-checks): documentation appended
-       (spam-split): accomodate the spam-split-symbolic-return and
-       spam-split-symbolic-return-positive variables
-       (spam-find-spam): new function called when the summary is built
-       (spam-log-registered-p): checks if a ham or spam registration has
-       already been done for an article
-       (spam-check-regex-headers, spam-check-blackholes, spam-check-BBDB)
-       (spam-check-ifile, spam-check-stat, spam-check-whitelist)
-       (spam-check-blacklist, spam-check-bogofilter-headers)
-       (spam-check-spamoracle): respect the spam-split-symbolic-return
-       and spam-split-symbolic-return-positive variables
-       (spam-initialize): add spam-find-spam to gnus-summary-prepare-hook
-       (spam-unload-hook): remove spam-find-spam from
-       gnus-summary-prepare-hook
+2004-03-22  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * gnus.el (spam-autodetect, spam-autodetect-methods): new
-       configuration items for spam autodetection
+       * mm-decode.el (mm-save-part): Bind enable-multibyte-characters to
+       t while entering a file name using the mm-with-multibyte macro.
+       Suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
 
-2003-12-12  Reiner Steib  <Reiner.Steib@gmx.de>
+       * mm-util.el (mm-with-multibyte): New macro.
 
-       * gnus-draft.el (gnus-draft-mode-map): Bind `e' to
-       `gnus-draft-edit-message'.  We still have `B w' for
-       `gnus-summary-edit-article'.
+2004-03-19  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-12-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-art.el (gnus-mime-recompute-hierarchical-structure): New
+       user option.
+       (gnus-mime-multipart-functions): Doc and customization fix.
+       (gnus-article-mime-hierarchy): New variable.
+       (gnus-article-mime-hierarchy-next): New variable.
+       (gnus-article-mode): Make gnus-article-mime-hierarchy buffer-local.
+       (gnus-article-setup-buffer): Set gnus-article-mime-hierarchy and
+       gnus-article-mime-hierarchy-next to nil.
+       (gnus-insert-mime-button): Show hierarchy numbers.
+       (gnus-mime-accumulate-hierarchy): New function.
+       (gnus-mime-enter-multipart): New function.
+       (gnus-mime-leave-multipart): New function.
+       (gnus-mime-display-part): Recompute hierarchical MIME structure.
+       (gnus-mime-display-alternative): Show hierarchy numbers.
 
-       * nnheaderxm.el (nnheader-xmas-run-at-time): Use a simple function
-       definition if there is not a bug in start-itimer.
+       * mml.el (mml-preview): Set gnus-article-mime-hierarchy and
+       gnus-article-mime-hierarchy-next to nil.
 
-       * pgg.el (pgg-run-at-time): Ditto.
+2004-03-19  Steve Youngs  <sryoungs@bigpond.net.au>
 
-2003-12-11  Kevin Greiner <kgreiner@xpediantsolutions.com>
+       * dns.el: Don't require gnus-xmas.
 
-       * gnus-agent.el (gnus-agent-possibly-alter-active): New Function.
-       (gnus-agent-regenerate-group): When necessary, alter the group's
-       active range to include articles newly recognized as being
-       downloaded.
-       (gnus-agent-regenerate): Removed code that updated the agent's
-       active file as the new gnus-agent-possibly-alter-active function
-       obsolesced it.
+2004-03-17  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-cus.el (gnus-agent-customize-category): Added missing
-       agent-disable-undownloaded-faces parameter.
-       
-       * gnus-start.el (gnus-activate-group): Backed out my 2003-11-29
-       patch as it was too late at adjusting the active range.
-       (gnus-get-unread-articles-in-group): Added call to new
-       gnus-agent-possibly-alter-active to adjust the active range.
+       * mml.el (mml-generate-mime-1): Don't use format=flowed with
+       inline PGP.
+       (mml-menu): Disable mml-quote-region if mark is inactive.
 
-2003-12-10  Jesper Harder  <harder@ifa.au.dk>
+2004-03-17  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * message.el (message-get-reply-headers): Narrow to headers.
+       * gnus-agent.el (gnus-agent-regenerate-group): Activate the group
+       when the group's active is not available.
 
-2003-12-10  Teodor Zlatanov  <tzz@lifelogs.com> 
+2004-03-15  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * spam.el (spam-disable-spam-split-during-ham-respool): new
-       variable.  From lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly)
-       (spam-ham-copy-or-move-routine): respect
-       spam-disable-spam-split-during-ham-respool.  From
-       lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly)
-       (spam-split-disabled): new variable.  From
-       lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly)
-       (spam-split): respect spam-split-disabled.  From
-       lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly)
+       * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to
+       error.
 
-2003-12-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-sum.el (gnus-read-header): Don't remove a header for the
+       parent article of a sparse article in the thread hashtb.  From
+       Stefan Wiens <s.wi@gmx.net>.
 
-       * nnheaderxm.el (nnheader-xmas-run-at-time): Make it work
-       correctly for the first argument.
+2004-03-12  Reiner Steib  <Reiner.Steib@gmx.de>
 
-       * pgg.el (pgg-run-at-time): New function.
-       (pgg-add-passphrase-cache): Use it.
+       * imap.el (imap-store-password): New variable.
+       (imap-interactive-login): Use it.
+       Suggested by Mark Plaksin <happy@mcplaksin.org>.
 
-2003-12-10  Simon Josefsson  <jas@extundo.com>
+2004-03-12  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * pgg-parse.el (pgg-decode-packets): Rewrite to handle corrupt
-       input.
-       (pgg-decode-armor-region): Don't parse packet if decoding fail.
+       * gnus-art.el (gnus-article-read-summary-keys): Restore new
+       window-start and hscroll to summary window.
 
-2003-12-09  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-03-12  Kevin Greiner <kgreiner@xpediantsolutions.com>
 
-       * spam.el (spam-check-bogofilter): run in the correct buffer.
-       From lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly).
-       (spam-bogofilter-database-directory): correct customization
-       group.  From Xavier Maillard <zedek@gnu-rox.org>.
+       * gnus-start.el (gnus-convert-old-newsrc): Only write the
+       conversion message to newsrc-dribble when an actual conversion is
+       performed.
 
-2003-12-09  Per Abrahamsen  <abraham@dina.kvl.dk>
+2004-03-10  Malcolm Purvis <malcolmpurvis@optushome.com.au>  (tiny change)
 
-       * nnmail.el (nnmail-lazy, nnmail-split-fancy): New widgets.
-       (nnmail-split-fancy): Use it.
+       * spam-stat.el (spam-stat-coding-system): Use mm-coding-system-p.
 
-2003-12-08  Joel Ray Holveck <joelh@piquan.org>  (tiny change)
+2004-03-10  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * gnus-sum.el (gnus-summary-save-parts-1): Consider the "name"
-       parameter of Content-Type.
+       * mm-decode.el (mm-complicated-handles): New function reviving
+       former definition of mm-multiple-handles.
 
-2003-12-08  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-art.el (gnus-mime-save-part-and-strip): Use it.
+       (gnus-mime-delete-part): Use it.
 
-       * gnus-util.el: Revert 2003-12-03 change, instead, provide the
-       compiler macro for rmail-select-summary if rmail is not available,
-       and bind rmail-summary-displayed and rmail-maybe-display-summary
-       in order to silence the compiler even if tm is not available.
+2004-03-09  Kevin Greiner <kgreiner@xpediantsolutions.com>
 
-2003-12-08  Simon Josefsson  <jas@extundo.com>
+       * gnus-agent.el (gnus-agent-read-local): Bind
+       nnheader-file-coding-system to gnus-agent-file-coding-system to
+       avoid the implicit assumption that they will always be equal.
+       (gnus-agent-save-local): Bind buffer-file-coding-system, not
+       coding-system-for-write, as the with-temp-file macro first prints
+       to a buffer then saves the buffer.
 
-       * flow-fill.el (fill-flowed-encode-tests, fill-flowed-test): Add.
+2004-03-09  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-12-08  Jesper Harder  <harder@ifa.au.dk>
+       * gnus-art.el (gnus-article-edit-part): New function.
+       (gnus-mime-save-part-and-strip): Use it; do query instead of
+       signaling an error; don't use mm-multiple-handles.
+       (gnus-mime-delete-part): Ditto.
 
-       * gnus-msg.el (gnus-extended-version): Bind float-output-format to
-       nil.
+2004-03-08  Kevin Greiner <kgreiner@xpediantsolutions.com>
 
-2003-12-08  Simon Josefsson  <jas@extundo.com>
+       * gnus-agent.el (gnus-agent-read-agentview): Removed support for
+       old file versions.
+       (gnus-group-prepare-hook): Removed function that converted list
+       form of gnus-agent-expire-days to group properties.
 
-       * mml-smime.el (mml-smime-sign): Replace CRLF with LF in OpenSSL
-       output.  Reported by Arne J\e,Ax\e(Brgensen <arne@arnested.dk>.
+       * gnus-int.el: Autoload gnus-agent-regenerate-group.
+       (gnus-request-accept-article): Re-indented.
 
-2003-12-07  Simon Josefsson  <jas@extundo.com>
+       * gnus-start.el (gnus-convert-old-newsrc): Registered new
+       converters to handle old agent file formats.  Added logic for a
+       "backup before upgrading warning".
+       (gnus-convert-mark-converter-prompt): Developers can mark
+       functions as needing (default), or not needing,
+       gnus-convert-old-newsrc's "backup before upgrading warning".
+       (gnus-convert-converter-needs-prompt): Tests whether the user
+       should be protected from potentially irreversable changes by the
+       function.
 
-       * pgg-gpg.el (pgg-gpg-recipient-arg): Add.
-       (pgg-gpg-encrypt-region): Use it.  Tiny patch from Lloyd Zusman
-       <ljz@asfast.com>.
-       (pgg-gpg-recipient-argument): Doc fix.  Renamed fro p-g-r-a.
-       (pgg-gpg-encrypt-region): Update.
+       * legacy-gnus-agent.el (): New. Provides converters that are only
+       loaded when gnus-convert-old-newsrc needs to call them.
+       
+2004-03-08  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-12-07  Jesper Harder  <harder@ifa.au.dk>
+       * mail-source.el (mail-source-touch-pop): Doc fix.
 
-       * spam.el (spam-check-spamoracle, spam-spamoracle-learn): Don't
-       use = or zerop to test the return value of call-process, because
-       it can be a string.
+       * message.el (message-smtpmail-send-it): Doc fix.
 
-       * mail-source.el (mail-source-fetch-with-program): do.
+2004-03-05  Jesper Harder  <harder@ifa.au.dk>
 
-       * mailcap.el (mailcap-viewer-passes-test): do.
+       * sha1-el.el (sha1-maximum-internal-length): Doc fix.
 
-       * gnus-uu.el (gnus-uu-treat-archive, gnus-uu-post-encode-mime)
-       (gnus-uu-post-encode-file): do.
+       * nnmail.el (nnmail-split-fancy): do.
 
-       * gnus-soup.el (gnus-soup-pack, gnus-soup-unpack-packet): do.
+       * gnus-kill.el (gnus-kill, gnus-execute): do.
 
-       * message.el (message-fix-before-sending): Fix detection of
-       non-printables.  Don't replace unencodable utf-8.
+2004-03-05  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-2003-12-05  Jesper Harder  <harder@ifa.au.dk>
+       * gnus-sum.el (gnus-widget-reversible-match) 
+       (gnus-widget-reversible-to-internal) 
+       (gnus-widget-reversible-to-external): New functions.
+       (gnus-widget-reversible): New widget.
+       (gnus-article-sort-functions, gnus-thread-sort-functions): Use it.
 
-       * mm-url.el (mm-url-predefined-programs): Add user-agent for wget.
-       (mm-url-insert-file-contents-external): Signal an error if program
-       fails.
+2004-03-05  Kai Grossjohann  <kgrossjo@eu.uu.net>
 
-2003-12-04  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnus-sum.el (gnus-thread-sort-functions)
+       (gnus-article-sort-functions): Document `(not F)' items.
 
-       * spam-report.el (spam-report-gmane): iterate over articles
-       instead of a single one; remove interactive usage
+2004-03-04  Teodor Zlatanov  <tzz@lifelogs.com>
 
-2003-12-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * spam.el (spam-use-gmane-xref): new backend
+       (spam-gmane-xref-spam-group): 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
 
-       * dns.el: Fix misplaced eval-when-compile.
+       * gnus.el (spam-autodetect-methods): add spam-use-gmane-xref as
+       an autodetect method
 
-       * gnus-util.el: Require alist and provide tm-view when compiling
-       with XEmacs.
+2004-03-04  Kevin Greiner <kgreiner@xpediantsolutions.com>
 
-2003-12-03  Steve Youngs  <sryoungs@bigpond.net.au>
+       * gnus-int.el (gnus-request-accept-article): Inform the agent that
+       articles are being added to a group.
+       (gnus-request-replace-article): Inform the agent that articles
+       need to be uncached as the cached contents are no longer valid.
+       
+2004-03-04  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * gnus-xmas.el: Add autoloads for macros defined in gnus.el.
-       From Jerry James <james@xemacs.org>.
+       * binhex.el: Don't autoload executable-find.
 
-       * gnus-util.el: Get rmail definitions when compiling.
-       From Jerry James <james@xemacs.org>.
+       * canlock.el: Don't autoload mail-fetch-field.
 
-       * 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 <james@xemacs.org>.
+       * dgnushack.el: Autoload c-mode for XEmacs.
 
-2003-12-01  Kevin Greiner <kgreiner@xpediantsolutions.com>
-       * 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.
+       * gnus-ems.el: Don't autoload appt-select-lowest-window.
 
-2003-12-01  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnus-msg.el: Don't autoload news-reply-mode, news-setup,
+       rmail-dont-reply-to and rmail-output.
 
-       * spam.el (spam-check-bogofilter): check the bogofilter headers
-       AFTER the save-excursion scope is over.  From Adrian Lanz
-       <lanz@fowi.ethz.ch>.
-       (spam-fetch-field-message-id-fast): doc fix
+       * gnus-score.el: Don't autoload ffap-string-at-point.
 
-2003-12-01  Simon Josefsson  <jas@extundo.com>
+       * gnus-setup.el: Don't autoload sc-cite-original.
 
-       * gnus-agent.el (gnus-agent-expire-days): Doc fix.
+       * imap.el: Don't autoload base64-decode-string,
+       base64-encode-string and md5.
 
-2003-11-30  Simon Josefsson  <jas@extundo.com>
+       * message.el: Autoload rmail-dont-reply-to, rmail-msg-is-pruned
+       and rmail-msg-restore-non-pruned-header.
 
-       * gnus-agent.el (gnus-agent-expire-group-1): Bind message-log-max
-       when messaging "X % completed" to inhibit logging them to the
-       message buffer.
-       (gnus-agent-expire-group-1): Mention group name in messages.
-       (gnus-agent-expire-group-1): Only print a message for an article
-       when there actually was something done to it.
+       * mm-decode.el: Don't autoload executable-find.
 
-       * 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 <handa@m17n.org>.
+       * mm-url.el: Don't autoload executable-find.
 
-       * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Custom fix.
+       * mm-view.el: Don't autoload diff-mode.
 
-2003-11-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nndb.el: Don't autoload news-reply-mode, news-setup,
+       cancel-timer and telnet.
 
-       * gnus-agent.el (gnus-agent-covered-methods): Remove nil methods. 
+       * password.el: Don't autoload run-at-time for Emacs.
 
-2003-11-29  Kevin Greiner <kgreiner@xpediantsolutions.com>
-       * gnus-start.el (gnus-activate-group): The active range of the
-       group must include the articles known to the agent.
+       * sha1-el.el: Don't autoload executable-find.
 
-       * gnus.el (gnus-agent-method-p): Accept a server name as the
-       method being tested.
+       * sieve-mode.el: Don't autoload c-mode.
 
-2003-11-29  Alexander Kreuzer <alex@freesources.org>  (tiny change)
+       * uudecode.el: Don't autoload executable-find.
 
-       * nnrss.el (nnrss-check-group): Set xml when nnrss-use-local is t.
+2004-03-04  Kevin Greiner <kgreiner@xpediantsolutions.com>
 
-2003-11-29  Jesper Harder  <harder@ifa.au.dk>
+        * gnus-agent.el (gnus-agent-file-header-cache): Removed.
+       (gnus-agent-possibly-alter-active): Avoid null in numeric
+       comparison.
+       (gnus-agent-set-local): Refuse to save null in local object table.
+       (gnus-agent-regenerate-group): The REREAD parameter can now be a
+       list of articles that will be marked as unread.
 
-       * gnus-group.el (gnus-group-make-menu-bar): Add
-       gnus-group-make-rss-group.
+2004-03-04  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-11-28  Reiner Steib  <Reiner.Steib@gmx.de>
+       * rfc2047.el (rfc2047-encoded-word-regexp): Mismatched paren.
 
-       * message.el: Added custom-manual links to all variables that have
-       an index entry in the message manual.
-       (message-generate-headers-first): Fixed doc-string.
+2004-03-04  Jesper Harder  <harder@ifa.au.dk>
 
-2003-11-27  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231
+       language tags.
 
-       * gnus-msg.el (gnus-summary-yank-message): Don't bind
-       gnus-display-mime-function to nil so that non-ascii text is
-       decoded and attachments are not shown.
-
-       * message.el (message-cite-original-without-signature): Replace
-       the value of message-reply-headers with the yanked article since
-       it may be a different article from the original.
-       (message-cite-original): Ditto.
-
-2003-11-25  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-blacklist-ignored-regexes): new variable, so
-       blacklisting can ignore certain regular expressions (e.g. the
-       user's e-mail address)
-       (spam-bogofilter-spam-strong-switch,
-       spam-bogofilter-ham-strong-switch): options used when articles are
-       already registered as the opposite classification
-       (spam-old-ham-articles, spam-old-spam-articles): lists of ham and
-       spam articles, generated when a summary buffer is entered, and
-       consulted when it's exited so we know what articles are changing
-       state from spam to ham or vice-versa
-       (spam-xor): everyone needs a little convenience
-       (spam-list-of-processors): lookup table for old-style spam/ham
-       exits processors
-       (spam-group-processor-p): support old-style and new-style spam/ham
-       exit processors
-       (spam-group-processor-multiple-p): handle new-style spam/ham exit
-       processors
-       (spam-summary-prepare): use spam-old-{ham,spam}-articles; change
-       logic to iterate over list of processors instead of manual
-       individual lookup, unregister any articles that change from ham to
-       spam or vice-versa in the course of the summary buffer usage; use
-       the new spam-register-routine
-       (spam-ham-copy-routine, spam-ham-move-routine,
-       spam-mark-spam-as-expired-and-move-routine): check that the list
-       of groups is not nil, because apply doesn't like to apply a
-       function across nil
-       (spam-registration-functions): variable for looking up spam/ham
-       registration/unregistration functions based on a spam-use-* symbol
-       (spam-classification-valid-p, spam-process-type-valid-p)
-       (spam-registration-check-valid-p)
-       (spam-unregistration-check-valid-p): convenience functions
-       (spam-registration-function, spam-unregistration-function): look
-       up the registration/unregistration function based on a
-       classification and the check (spam-use-* symbol)
-       (spam-list-articles): generate list of spam/ham articles from a
-       given list of articles
-       (spam-register-routine): do the heavy work of registering and
-       unregistering articles, using all the articles in the group or
-       specific ones as needed
-       (spam-generic-register-routine): removed, no longer used
-       (spam-log-unregistration-needed-p, spam-log-undo-registration):
-       handle article registration/unregistration with a given spam/ham
-       processor and group
-       (BBDB, ifile, spam-stat, blacklists, whitelists, spam-report,
-       bogofilter, spamoracle): rewrite registration/unregistration
-       functions to take a list of articles and the unregister option.
-       Much hilarity ensues.
-       (spam-initialize): spam-stat-maybe-{save,load} already respect spam-use-stat
-       (spam-stat-register-ham-routine, spam-stat-register-spam-routine):
-       don't load and save unnecessarily
-
-       * spam-stat.el (spam-stat-dirty): new variable, set when the stats
-       database is modified
-       (spam-stat-buffer-is-spam, spam-stat-buffer-is-non-spam)
-       (spam-stat-buffer-change-to-spam, spam-stat-to-hash-table)
-       (spam-stat-buffer-change-to-non-spam): set spam-stat-dirty when
-       needed
-       (spam-stat-save): respect spam-stat-dirty, unless the force
-       parameter is specified
-       (spam-stat-load): clear spam-stat-dirty
-
-       * gnus.el (gnus-install-group-spam-parameters): marked the
-       old-style exit processors as obsolete in the docs, added the
-       new-style exit processors while the old ones are still allowed
-
-
-2003-11-25  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (article-hide-boring-headers): Don't hide Reply-To
-       unless its list of addresses is identical to From.
-
-2003-11-25  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * dgnushack.el (mapc): Add the compiler macro for Emacs 20.
-
-2003-11-24  Kevin Greiner <kgreiner@xpediantsolutions.com>
-       * 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.
-       Compensating by adding a second text property storing the name
-       expected by gnus-agent.
-       (gnus-server-named-server): New function.
-       * gnus-agent.el (gnus-agent-remove-server, gnus-agent-add-server):
-       No longer expect an argument as it was ignored anyway.  Uses the
-       new gnus-server-named-server function to get gnus-agent compatible
-       names from the server buffer.
-
-2003-11-20  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus.el (gnus-agent-covered-methods): Documented use of
-       named servers, not methods, to identity agentized groups.
-       Users may now change their server configurations without having
-       the server become "unagentized".
-       (gnus-agent-covered-methods): Removed from gnus-variable-list to
-       avoid storing two copies of gnus-agent-covered-methods, one in
-       .newsrc.eld and the other in agent/lib/servers.
-       (gnus-server-to-method): Do not cache server for the nil method.
-       (gnus-method-to-server): New function.  Associate named server
-       with all, even foreign, methods.
-       (gnus-agent-method-p, gnus-agent-method-p-cache): Incorporated
-       simple last-response cache to offset performance lose of having to
-       always convert methods to named servers.
-       * gnus-agent.el (gnus-agent-expire-days): Removed obsolete
-       documentation.
-       (gnus-agentize, gnus-agent-add-server, gnus-agent-remove-server):
-       Modified to support new definition of gnus-agent-covered-method.
-       (gnus-agent-read-servers): Rewritten to convert old method data
-       into server names.
-       (gnus-agent-read-servers-validate)
-       (gnus-agent-read-servers-validate-native): New functions.
-       (gnus-agent-write-servers): No longer use gnus-method-simplify as
-       it failed to simplify foreign methods.
-       (gnus-agent-close-connections, gnus-agent-synchronize-flags)
-       (gnus-agent-possibly-synchronize-flags, gnus-agent-fetch-session)
-       (gnus-agent-regenerate): Uses new gnus-agent-covered-methods
-       function as gnus-agent-covered-methods variable no longer provides
-       methods.
-       (gnus-agent-covered-methods): New function
-       (gnus-agent-expire-group, gnus-agent-expire): Final message will,
-       if gnus-verbose is greater than 4, report statistics of NOV
-       entries and files deleted as well as total bytes recovered.
-       (gnus-agent-expire-done-message): New function
-       (gnus-agent-unread-articles): Bug fix.  No longer drops last
-       unread article onto read list.
-       (gnus-agent-regenerate-group): Changed prompt to use typical
-       style.
-       (gnus-agent-group-covered-p): Rewrote to internally use
-       gnus-agent-method-p.
-       * gnus-int.el (gnus-start-news-server): Partially convert old
-       gnus-agent-covered-methods to new format so that gnus-open-server
-       functions correctly.
-       * gnus-srvr.el (gnus-server-insert-server-line): Replaced
-       gnus-agent-covered-methods with gnus-agent-method-p.
-       * gnus-start.el (gnus-clear-system): Added
-       gnus-agent-covered-methods to compensate for removing it from
-       gnus-variable-list.
-       (gnus-setup-news): Complete conversion of old
-       gnus-agent-covered-methods to new format so that secondary and
-       foreign servers can be correctly opened.
-
-2003-11-20  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-ham-copy-or-move-routine): add respooling
-       support, not working well yet
-
-       * gnus.el (ham-process-destination): make 'respool option the
-       only one, so it can't be chosen together with other groups
-
-2003-11-19  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-registry.el (gnus-registry-track-extra): make it a set of
-       choices instead of a boolean
-       (gnus-registry-track-subject-p, gnus-registry-track-sender-p):
-       new convenience functions
-       (gnus-registry-split-fancy-with-parent): use convenience
-       functions, also don't return extra tracking info if sender or
-       subject is found in more than one groups
-       (gnus-registry-add-group): use new convenience functions to
-       decide if sender and subject should be tracked
-
-       * gnus.el (ham-process-destination): add 'respool option,
-       unused by spam.el yet
-
-2003-11-19  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-score.el (gnus-decay-score): Return a surely smaller value
-       than the argument in XEmacs.
-
-2003-11-18  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * 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 <sds@gnu.org>.
-
-2003-11-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * html2text.el (html2text-remove-tags): Remove the tag in a
-       simpler way to avoid inflooping.
-
-2003-11-17  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-gssapi-auth-p): Don't check capability (some
-       servers remove AUTH=GSSAPI from capability response returned after
-       successful authentication).
-
-2003-11-16  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus.el (gnus-getenv-nntpserver): Fix regexp and simplify.
-       Reported by Artem Chuprina <ran@ran.pp.ru>.
-
-2003-11-14  Simon Josefsson  <jas@extundo.com>
-
-       * mm-util.el (mm-charset-synonym-alist): Map BIG5-HKSCS to BIG5
-       when it isn't available.
-
-2003-11-13  Alex Schroeder  <alex@gnu.org>
-
-       * nnrss.el (nnrss-check-group): Use dc:contributor if neither
-       rss:author nor dc:creator is provided.
-
-2003-11-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-03-03  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-       * mm-decode.el (mm-dissect-buffer): Save start="<id>" value
-       contained in Content-Type header of multipart/related messages.
+       * gnus-agent.el (gnus-agent-read-local, gnus-agent-save-local):
+       Don't bind "obarray".
 
-       * mm-view.el (mm-w3m-cid-retrieve-1): New function.
-       (mm-w3m-cid-retrieve): Use it.
+       * gnus-sum.el (gnus-thread-sort-functions): Added
+       `gnus-thread-sort-by-most-recent-number' and
+       `gnus-thread-sort-by-most-recent-date'.
+       Reported by Kai Grossjohann <kai@emptydomain.de>.
 
-       * mml.el (mml-generate-mime-1): Add start="<id>" to Content-Type.
-       (mml-insert-mime-headers): Insert Content-ID header.
-       (mml-insert-mml-markup): Insert start="<id>" value.
+2004-03-03  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-11-12  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnus-cus.el (gnus-agent-customize-category): Mismatched paren.
 
-       * nnml.el (nnml-request-accept-article): pass sender to
-       nnmail-cache-insert
+2004-03-02  Kevin Greiner <kgreiner@xpediantsolutions.com>
 
-       * nnmh.el (nnmh-request-accept-article): pass sender to
-       nnmail-cache-insert 
+       * gnus-cus.el (gnus-agent-customize-category): Removed
+       ignore-errors macro reference that required cl to be loaded at
+       run-time.
 
-       * nnmbox.el (nnmbox-request-accept-article): pass sender to
-       nnmail-cache-insert 
+       * gnus-range.el (gnus-sorted-range-intersection): Now accepts
+       single-interval range of the form (min . max).  Previously the
+       range had to look like ((min . max)).  Likewise, return
+       (min . max) rather than ((min . max)).
+       (gnus-range-map): Use gnus-range-normalize to accept
+       single-interval range.
 
-       * nnfolder.el (nnfolder-request-accept-article): pass sender to
-       nnmail-cache-insert 
+       * gnus-sum.el (gnus-summary-highlight-line): Articles stored in
+       the cache, but not the agent, now appear with their usual face.
 
-       * nnbabyl.el (nnbabyl-request-accept-article): pass sender to
-       nnmail-cache-insert 
+       * dgnushack.el (loaddir): New variable that is bound to the
+       directory containing the dgnushack.el file. Use loaddir, rather
+       than srcdir, to update load-path. Change lets dgnushack compile
+       code in directories other than GNUS/lisp.
 
-       * nnmail.el (nnmail-cache-insert): accept sender parameter and
-       pass it to the nnmail-spool-hook
+2004-03-01  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * gnus-registry.el (gnus-registry-track-extra): clarify doc
-       (gnus-registry-action): add sender lexical var and pass it to
-       gnus-registry-add-group
-       (gnus-registry-spool-action): take a sender parameter, pass to
-       gnus-registry-add-group
-       (gnus-registry-split-fancy-with-parent): trace by sender in
-       addition to subject
-       (gnus-registry-fetch-sender-fast): new function
-       (gnus-registry-add-group): accept sender parameter
+       * lpath.el: Don't bind w3m-safe-url-regexp.
 
-2003-11-11  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Don't make the
+       w3m-safe-url-regexp variable buffer-local.
 
-       * spam.el (spam-ham-copy-routine, spam-ham-move-routine)
-       (spam-mark-spam-as-expired-and-move-routine): allow for the
-       groups to be a list of a single item
+       * mm-view.el (mm-inline-text-html-render-with-w3m): Ditto.
 
-       * gnus.el (gnus-install-group-spam-parameters):
-       ham-process-destination and spam-process-destination allow lists now
+2004-02-27  Simon Josefsson  <jas@extundo.com>
 
-2003-11-10  Reiner Steib  <Reiner.Steib@gmx.de>
+       * gnus-sum.el (gnus-move-group-prefix-function): Add, default to
+       gnus-group-real-prefix.
+       (gnus-summary-move-article): Use it, instead of
+       gnus-group-real-prefix.
 
-       * 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 <sds@gnu.org>.
-       (message-mode-field-menu): Moved some entries, added
-       `message-insert-wide-reply'.
-       (message-change-subject): Fixed comment.
+2004-02-27  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-11-10  Simon Josefsson  <jas@extundo.com>
+       * lpath.el: Bind w3m-safe-url-regexp.
 
-       * pgg-def.el (pgg-encrypt-for-me): Change default from nil to t.
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Make the
+       w3m-safe-url-regexp variable buffer-local and set it as the value
+       of mm-w3m-safe-url-regexp.
 
-2003-11-09  Simon Josefsson  <jas@extundo.com>
+       * mm-view.el (mm-inline-text-html-render-with-w3m): Ditto.
 
-       * pgg-gpg.el (pgg-gpg-encrypt-region): Cache passphrase under hex
-       key id too (for decryption).
-       (pgg-gpg-sign-region): Likewise.
+       * gnus-msg.el (gnus-setup-message): Ignore an article copy while
+       parsing gnus-posting-styles when the message is not for replying.
 
-2003-11-09  Simon Josefsson  <jas@extundo.com>
+       * dgnushack.el: Autoload sgml-mode for XEmacs.
 
-       * 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
-       <satyakid@stanford.edu>.
-
-2003-11-07  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * nnmail.el (nnmail-cache-insert): make sure that the
-       nnmail-spool-hook is called with a valid newsgroup name (though
-       it may be wrong)
-
-       * gnus.el (gnus-group-real-prefix): return nil if group is not a
-       string, instead of triggering an error
-
-2003-11-06  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus.el (gnus-group-guess-full-name-from-command-method): new function
-
-       * gnus-registry.el (gnus-registry-fetch-group): use long names if
-       requested 
-       (gnus-registry-split-fancy-with-parent): when long names are in
-       use, strip the name if we're in the native server, or else return nothing
-       (gnus-registry-spool-action, gnus-registry-action): use
-       gnus-group-guess-full-name-from-command-method instead of
-       gnus-group-guess-full-name
-
-       * spam.el (spam-mark-spam-as-expired-and-move-routine)
-       (spam-ham-copy-or-move-routine): prevent article deletions or
-       moves unless the backend allows it
-
-       * gnus.el (gnus-install-group-spam-parameters): fixed parameters
-       to list spamoracle as well, suggested by Jean-Marc Lasgouttes
-       <Jean-Marc.Lasgouttes@inria.fr>
-
-       * spam.el (spam-spamoracle): doc change, suggested by Jean-Marc
-       Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
-
-2003-11-04  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-score.el (gnus-decay-score): Protect against arithmetic
-       errors.  Tiny patch from Norbert Koch <viteno@xemacs.org>.
-
-2003-10-31  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el
-       (spam-log-processing-to-registry): improved message and comments
-       (spam-log-unregistration-needed-p): new function
-       (spam-ifile-register-spam-routine)
-       (spam-ifile-register-ham-routine, spam-stat-register-spam-routine)
-       (spam-stat-register-ham-routine)
-       (spam-blacklist-register-routine)
-       (spam-whitelist-register-routine)
-       (spam-bogofilter-register-spam-routine)
-       (spam-bogofilter-register-ham-routine)
-       (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): change
-       spam-log-processing-to-registry invocations appropriately
-
-2003-10-31  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-kerberos4-open): Ignore output from ATHENA imtest.
-       Tiny patch from Derek Atkins <warlord@MIT.EDU>.
-       (imap-process-connection-type): Improve docstring.  Suggested by
-       Derek Atkins <warlord@MIT.EDU>.
-
-2003-10-31  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (autoload): autoload the gnus-registry functions we'll
-       need
-       (spam-log-to-registry): new variable for interfacing with the
-       gnus-registry
-       (spam-install-hooks): variable had the wrong customization group
-       (spam-fetch-field-message-id-fast): convenience function for fetch
-       a message ID quickly
-       (spam-log-processing-to-registry): new function
-       (spam-ifile-register-spam-routine)
-       (spam-ifile-register-ham-routine, spam-stat-register-spam-routine)
-       (spam-stat-register-ham-routine)
-       (spam-blacklist-register-routine)
-       (spam-whitelist-register-routine)
-       (spam-bogofilter-register-spam-routine)
-       (spam-bogofilter-register-ham-routine)
-       (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): add
-       spam-log-processing-to-registry invocations
-
-       * gnus-registry.el: fixed docs in the preface to mention
-       gnus-registry-initialize
-       (gnus-registry-store-extra): remove cached extra entry
-       information when new extra entry is stored
-
-2003-10-29  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-forward-make-body-plain): Fix ARG=1 mode
-       after separating m-f-m-b.
-
-2003-10-29  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-forward-make-body-plain): Remove ignored
-       headers.  Tiny patch from Andre Srinivasan <andre@e2open.com>.
-       (message-forward-make-body-plain): Fix ARG=1.
-
-2003-10-28  Jesper Harder  <harder@ifa.au.dk>
-
-       * message.el (message-forward-subject-name-subject)
-       (message-forward-subject-author-subject): Decode non-ASCII
-       newsgroup names.
-       (autoload): Autoload gnus-group-decoded-name.
-
-2003-10-27  Simon Josefsson  <jas@extundo.com>
-
-       * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): New optional
-       parameter key, overrides the key id used to store passphrase
-       under (uses true key id from gpg output if nil).
-       (pgg-gpg-encrypt-region): Search for passphrase using user suplied
-       string STR, instead of (pgg-lookup-key STR t).
-       (pgg-gpg-encrypt-region): Store passphrase under user suplied
-       string, instead of real key id taken from gpg output.
-       (pgg-gpg-decrypt-region): Likewise.
-       (pgg-gpg-sign-region): Likewise.
-       * pgg.el (pgg-decrypt-region): Don't set pgg-default-user-id.
-
-2003-10-27  Romain FRANCOISE  <romain@orebokech.com>
-
-       * gnus-art.el (gnus-article-goto-prev-page): Doc fix. 
-
-2003-10-27  Simon Josefsson  <jas@extundo.com>
-
-       * mm-bodies.el (mm-body-encoding): Don't use QP when message body
-       only consists of short lines and ASCII, when
-       mm-use-ultra-safe-encoding.  Refer to 'About foo' thread in
-       gnus-bug, e.g. <ilullrg4k7p.fsf@extundo.com>, for more discussion.
-       This make it possible to pipe the raw RFC 822 message into 'gpg'
-       and have the signature work.  Potential problem: what if message
-       contain data that would be dash-escaped by OpenPGP
-       implementations? Then PGP 2.x might not be able to parse the raw
-       RFC 822 message correctly.  If that problem is worth fixing, it
-       should be fixed by detecting the situation, instead of applying QP
-       to everything.  Based on discussion with "John A. Martin"
-       <jam@jamux.com>.
-
-2003-10-27  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-mark-spam-as-expired-and-move-routine)
-       (spam-ham-copy-or-move-routine): don't ask when deleting copied
-       articles, and use move instead of copy when possible
-       (spam-split): added the option of specifying a string as a
-       spam-split parameter; such a string will override
-       spam-split-group temporarily.
-
-       * nnmail.el (nnmail-cache-insert): protect from nil message IDs,
-       but should we do something else?
+       * nnrss.el (nnrss-opml-export): Use
+       mm-set-buffer-file-coding-system instead of
+       set-buffer-file-coding-system.
 
-       * gnus-registry.el (gnus-registry-spool-action): protect from nil
-       message IDs
+2004-02-27  Jesper Harder  <harder@ifa.au.dk>
 
-2003-10-26  Simon Josefsson  <jas@extundo.com>
+       * spam-stat.el: Pedantic docstring and whitespace fixes (courtesy
+       of checkdoc.el).
+       * nnrss.el: do.
+       * gnus-mlspl.el: do.
+       * gnus-ml.el: do.
+       * gnus-srvr.el: do.
 
-       * gnus-art.el (gnus-button-alist): Allow & in mailto URLs.
-       (gnus-header-button-alist): Likewise.
-       (gnus-url-mailto): Handle ?to parameters.  Replace \r\n with \n.
-       Reverse parameter list to use same order as in the URL.  Reported
-       by f95-msv@f.kth.se (M\e,Ae\e(Brten Svantesson).
+       * nnrss.el (nnrss-opml-export): Turn on sgml-mode.
 
-2003-10-25  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-02-27  Kevin Ryde  <user42@zip.com.au>  (tiny change)
 
-       * spam.el (spam-move-spam-nonspam-groups-only): documentation fix
-       for the variable
+       * gnus.el (gnus-group, gnus-summary, gnus-summary-sort):
+       Corrections to custom-manual links.
 
-2003-10-25  Steve Youngs  <sryoungs@bigpond.net.au>
+       * gnus-art.el (gnus-article): Ditto.
 
-       * Makefile.in (clean-some): Remove auto-autoloads.* and
-       custom-load.* as well.
-       (distclean): Ditto.
+       * mm-decode.el (mime-display, mime-security): Ditto.
 
-       * dgnushack.el (dgnushack-make-load): Add a local vars section to
-       the dummy gnus-load.el.
+2004-02-26  Jesper Harder  <harder@ifa.au.dk>
 
-2003-10-24  Teodor Zlatanov  <tzz@lifelogs.com>
+       * flow-fill.el: Typo.
 
-       * spam.el (spam-ham-copy-or-move-routine): do not delete if copy
-       is t, also don't intepret the list of groups as a list of lists
-       (spam-mark-spam-as-expired-and-move-routine)
-       (spam-ham-copy-or-move-routine): delete articles only if 1 or
-       more groups were specified (and "copy" was not specified for
-       spam-ham-copy-or-move-routine) (fixed twice)
+2004-02-26  Andrew Cohen <cohen@andy.bu.edu>
 
-2003-10-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * spam-wash.el: New file.
 
-       * nndoc.el (nndoc-guess-type): Reverse the sort order.  Suggested
-       by ARISAWA Akihiro <ari@mbf.ocn.ne.jp>.
-       (nndoc-dissect-buffer): Don't miss even-numbered articles.
+2004-02-26  Mark A. Hershberger <mah@everybody.org> 
 
-2003-10-24  Steve Youngs  <sryoungs@bigpond.net.au>
+       * nnrss.el (nnrss-opml-import, nnrss-opml-export): New functions.
 
-       * dgnushack.el (dgnushack-gnus-load-file): Set to
-       "auto-autoloads.el" if building with XEmacs.
-       (dgnushack-cus-load-file): Set to "custom-load.el" if building
-       with XEmacs.
-       (dgnushack-make-cus-load): We don't delete the resulting file if
-       building with XEmacs so byte-compile it.
-       (dgnushack-make-load): When building with XEmacs do nothing except
-       byte-compile the autoload file and create a dummy gnus-load.el
-       file. 
+2004-02-26  Teodor Zlatanov  <tzz@lifelogs.com>
 
-2003-10-23  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * 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
 
-       * message.el (message-make-fqdn): Bind case-fold-search.
-       Suggested by Christopher Richards <richards@CS.Princeton.EDU>.
+2004-02-26  Jesper Harder  <harder@ifa.au.dk>
 
-2003-10-23  Teodor Zlatanov  <tzz@lifelogs.com>
+       * spam-stat.el (spam-stat-washing-hook): New option.
+       (spam-stat-buffer-words): Use it.
+       (spam-stat-process-directory, spam-stat-test-directory): Use
+       insert-file-contents-literally.
+       (spam-stat-coding-system): New variable.
+       (spam-stat-load, spam-stat-save): Use it.
 
-       * gnus.el (spam-process-destination, ham-process-destination):
-       allow multiple groups as a choice
+2004-02-25  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * spam.el (spam-check-blackholes): remove "[IP address]"
-       requirement, now just "IP address" is enough for detection for
-       blackhole checking
-       (spam-check-blackholes): oops, the dots were not escaped
-       (spam-mark-spam-as-expired-and-move-routine): added multiple group
-       support (multiple copies, then delete)
-       (spam-ham-copy-routine): new function
-       (spam-ham-move-routine): new function
-       (spam-ham-copy-or-move-routine): new function (used to be
-       spam-ham-move-routine), handle multiple groups
-       (spam-summary-prepare-exit): call the new functions
+       * spam-report.el (spam-report-plug-agent): Quote
+       spam-report-url-to-file and spam-report-url-ping-plain.
 
-2003-10-23  Simon Josefsson  <jas@extundo.com>
+2004-02-25  Reiner Steib  <Reiner.Steib@gmx.de>
 
-       * flow-fill.el (fill-flowed-encode, fill-flowed): Autoload.
+       * gnus-art.el (gnus-button-alist, gnus-header-button-alist): Allow
+       / in mailto URLs.
 
-2003-10-22  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-02-24  Reiner Steib  <Reiner.Steib@gmx.de>
 
-       * gnus-art.el (gnus-emphasis-strikethru): Use the :strike-through
-       attribute in Emacs.
+       * spam-report.el (spam-report-process-queue): Fix interactive use.
+       (spam-report-url-ping-temp-agent-function, spam-report-plug-agent)
+       (spam-report-unplug-agent): Doc fixes.
+       (spam-report-url-ping-mm-url, spam-report-url-to-file)
+       (spam-report-agentize, spam-report-deagentize): Autoload
 
-2003-10-21  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-02-24  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * message.el (message-bounce): Don't erase except bounced header.
+       * dgnushack.el (with-syntax-table): Redefine it for XEmacs 21.5.
 
-2003-10-21  Teodor Zlatanov  <tzz@lifelogs.com>
+       * message.el (message-setup-fill-variables): Add mml tags to
+       paragraph-start and paragraph-separate.  Suggested by Andrew Korty
+       <ajk@iu.edu>.
+       (message-mode): Don't modify paragraph-separate there.
 
-       * spam.el (spam-reverse-ip-string): new function to reverse an IP
-       address in a string
-       (spam-check-blackholes): use spam-reverse-ip-string
+2004-02-17  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-10-21  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * compface.el (uncompface-use-external): Default to undecided.
+       (uncompface-use-external-threshold): New variable.
+       (uncompface-float-time): New macro.
+       (uncompface): Determine whether to use the external decoder if
+       uncompface-use-external is undecided.
 
-       * gnus-art.el (gnus-narrow-to-page): Clear as well as set the
-       value for gnus-page-broken.
+2004-02-15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-sum.el (gnus-summary-beginning-of-article): Use
-       gnus-break-pages instead of gnus-page-broken.
-       (gnus-summary-end-of-article): Use gnus-break-pages instead of
-       gnus-page-broken; narrow to the end of a page beforehand.
-       (gnus-summary-toggle-header): Use gnus-break-pages instead of
-       gnus-page-broken; remove delimiter buttons unless gnus-break-pages
-       is non-nil.
+       * mm-view.el (mm-inline-image-emacs): Don't insert blank lines
+       after images.
 
-2003-10-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-art.el (gnus-mime-display-single): Remove dead code.
 
-       * gnus-picon.el (gnus-picon-transform-address): Protect against
-       errors. 
+2004-02-14  Jesper Harder  <harder@ifa.au.dk>
 
-2003-10-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * nnrss.el (nnrss-request-article, nnrss-find-el): Cleanup.
 
-       * gnus-msg.el (nnspool-rejected-article-hook): Remove defvar.
-       (xemacs-codename): Move defvar to gnus-util.el.
+       * html2text.el (html2text-get-attr, html2text-fix-paragraph): do
 
-       * gnus-util.el (xemacs-codename): Defvar when compiling.
+       * gnus-sum.el (gnus-summary-limit-to-age)
+       (gnus-summary-limit-children): do.
 
-2003-10-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-int.el (gnus-request-scan): do.
 
-       * spam-report.el (spam-report-url-ping-plain): Include a
-       User-Agent. 
+       * gnus-group.el (gnus-group-suspend): do.
 
-       * gnus-msg.el (gnus-extended-version): Use it.
+       * gnus-cus.el (gnus-agent-cat-prepare-category-field): do.
 
-       * gnus-util.el (gnus-emacs-version): Separated out into own
-       function. 
+       * gnus-cite.el (gnus-cite-parse-attributions): do.
 
-2003-10-19  Reiner Steib  <Reiner.Steib@gmx.de>
+       * gnus-agent.el (gnus-summary-set-agent-mark)
+       (gnus-agent-regenerate-group): do.
 
-       * message.el (message-mode-field-menu): Added
-       message-generate-unsubscribed-mail-followup-to.
-       (message-forward-subject-fwd): Avoid double "Fwd: "
-       (message-change-subject): Added comment.
+       * deuglify.el (gnus-article-outlook-unwrap-lines): do.
 
-2003-10-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * binhex.el (binhex-decode-region-internal): do.
 
-       * gnus-sum.el (gnus-nov-parse-line): Remove condition-cases.
+2004-02-12  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * mml.el (mml-insert-mime): Quote mml.
+       * gnus-fun.el (gnus-face-properties-alist): New user option.
+       (gnus-display-x-face-in-from): Use it.
 
-2003-10-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-art.el (article-display-face): Ditto.
 
-       * gnus-sum.el (gnus-remove-odd-characters): Use
-       mm-subst-char-in-string instead of subst-char-in-string.
-       (gnus-summary-refer-article): Use gnus-replace-in-string instead
-       of replace-regexp-in-string.
+       * compface.el (uncompface-use-external): Default to nil.
 
-2003-10-19  Jesper Harder  <harder@ifa.au.dk>
+2004-02-12  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-uu.el (gnus-uu-uustrip-article): Really strip directory
-       from file name.
+       * nntp.el (nntp-erase-buffer): New function.
+       (nntp-retrieve-data, nntp-send-command)
+       (nntp-send-buffer, nntp-retrieve-groups, nntp-handle-authinfo)
+       (nntp-possibly-change-group): Use it.
 
-2003-10-18  Jesper Harder  <harder@ifa.au.dk>
+       * nnnil.el (nnnil-retrieve-headers, nnnil-request-list): Use
+       with-current-buffer.
 
-       * gnus-sum.el (gnus-summary-save-parts-last-directory): Default
-       to mm-default-directory.
-       (gnus-summary-save-parts-1): Use mm-file-name-rewrite-functions.
+2004-02-12  TAKAI Kousuke  <tak@kmc.gr.jp>
 
-2003-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * compface.el: Merge the ELisp-based uncompface program.
+       (compface): New customization group.
+       (uncompface-use-external): New user option.
+       (uncompface): Call uncompface-internal if uncompface-use-external
+       is nil.
+       (uncompface-internal): New function.  Note that there are also
+       some other functions and variables added for this function.
 
-       * pop3.el (pop3-read-response): Check whether the process is
-       alive. 
+2004-02-10  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-sum.el (gnus-summary-refer-article): Strip spaces.
+       * nnrss.el (nnrss-read-group-data): Initialize nnrss-group-hashtb
+       if necessary.
 
-       * rfc2047.el (rfc2047-encode-region): Do error out on invalid
-       strings. 
+2004-02-09  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * nntp.el (nntp-retrieve-headers-with-xover): Get error messages
-       right. 
+       * 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
 
-       * gnus-agent.el (gnus-agent-read-servers): Remove sit-for.
+       * spam.el (spam-register-routine): improved message about
+       registration
 
-       * gnus-art.el (article-treat-dumbquotes): Doc fix.
+2004-02-09  Jesper Harder  <harder@ifa.au.dk>
 
-       * message.el (message-field-value): New function.
-       (message-insert-disposition-notification-to): Use Reply-To, too.
+       * rfc2047.el (rfc2047-qp-or-base64): New function to reduce
+       dependencies.
+       (rfc2047-encode): Use it.
 
-       * imap.el (imap-mailbox-status): Upcase STATUS commands. 
+       * gnus-art.el (gnus-button-marker-list): Move before first
+       reference.
 
-       * gnus-sum.el (gnus-remove-odd-characters): New function.
-       (gnus-nov-parse-line): Use it.
+       * imap.el (imap-parse-flag-list, imap-parse-body-extension)
+       (imap-parse-body): Fix format string mismatch.
 
-2003-10-18  Matt Swift  <swift@alum.mit.edu>
+       * gnus-score.el (gnus-summary-increase-score): do.
 
-       * mm-decode.el (mm-inline-media-tests): Recognize pjpeg as jpeg. 
+       * nnrss.el (nnrss-close): New function.
 
-2003-10-18  Romain FRANCOISE  <romain@orebokech.com>
+2004-02-08  Jesper Harder  <harder@ifa.au.dk>
 
-       * message.el (message-forward-make-body): does both
-       m-f-make-body-mml and m-f-make-body-plain, resulting in a strange
-       message buffer.
+       * nnrss.el (nnrss-make-filename): New function.
+       (nnrss-request-delete-group, nnrss-read-server-data)
+       (nnrss-save-server-data, nnrss-read-group-data)
+       (nnrss-save-group-data): Use it.
+       (nnrss-save-server-data, nnrss-save-group-data): Use gnus-prin1.
+       (nnrss-read-server-data, nnrss-read-group-data): Use load.
+       (nnrss-group-hashtb): Make it a hash table rather than an obarray.
 
-2003-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-02-07  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-art.el (gnus-narrow-to-page): Only break page if it's
-       broken.
+       * mml.el (mml-compute-boundary-1): Don't uncompress files.
 
-       * nnrss.el (nnrss-find-rss-via-syndic8): Return nil if xml-rpc
-       isn't available.
+2004-02-06  Jesper Harder  <harder@ifa.au.dk>
 
-       * message.el (message-hidden-headers): Doc fix.
+       * mml.el (mml-mode, mml-x-dnd-attach-file): Attach drop and drag
+       files.
 
-2003-10-18  Jesper Harder  <harder@ifa.au.dk>
+       * message.el (message-generate-headers-first): Don't quote nil
+       and t in docstrings.
 
-       * gnus-msg.el (gnus-summary-resend-message-edit): Avoid error when
-       fields aren't found.
+       * imap.el (imap-id): do.
 
-2003-10-18  Simon Josefsson  <jas@extundo.com>
+       * gnus-agent.el (gnus-agent-consider-all-articles)
+       (gnus-agent-queue-mail): do.
 
-       * message.el (message-forward-make-body-plain)
-       (message-forward-make-body-mime, message-forward-make-body-mml)
-       (message-forward-make-body-digest-plain)
-       (message-forward-make-body-digest-mime)
-       (message-forward-make-body-digest): New, derived from
-       message-forward-make-body.
-       (message-forward-make-body): Use them.
-       (message-forward-show-mml): New default 'best.
-       (message-forward-make-body): Support it.
+2004-02-05  Reiner Steib  <Reiner.Steib@gmx.de>
 
-2003-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * spam-report.el (spam-report-process-queue): New function.
+       Process requests from `spam-report-requests-file'.
+       (spam-report-process-queue): Doc fix.
 
-       * gnus-art.el (gnus-article-mode): Set gnus-page-broken to nil.
-       (gnus-article-prepare): Don't set to t.
-       (gnus-narrow-to-page): Set to t if we break.
+2004-02-05  Teodor Zlatanov  <tzz@lifelogs.com>
 
-2003-06-11  Daniel N\e,Ai\e(Bri  <dne@mayonnaise.net>
+       * 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
 
-       * message.el (message-resend): Generate Resent-Message-ID header.
+2004-02-05  Jesper Harder  <harder@ifa.au.dk>
 
-2003-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * pop3.el: Require nnheader.
 
-       * gnus-art.el (gnus-article-next-page): Don't go to the next line
-       before checking end-of-buffer.
-       (gnus-mime-delete-part): Don't insert parts twice.
+       * mml-smime.el: Require cl.  Autoload message-fetch-field.
 
-2003-10-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * mml-sec.el (mml-signencrypt-style): Don't depend on Gnus.
 
-       * gnus-art.el (article-update-date-lapsed): Make sure point
-       doesn't move around (much).
+       * gnus-picon.el: Require cl.
 
-2003-07-28  Vasily Korytov  <deskpot@myrealbox.com>
+       * gnus-fun.el: Require gnus-ems and gnus-util.
 
-       * mail-source.el (mail-source-keyword-map): List "cur" before
-       "new" for maildirs.
+       * gnus.el (gnus-method-to-server): Move defsubst before first use.
 
-2003-10-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-diary.el (gnus-diary-header-schedule): caddr -> car (cddr
 
-       * gnus-sum.el (gnus-summary-enter-digest-group): ogroup, nor
-       group. 
+       * gnus-art.el (gnus-article-edit-mode): Define before first
+       reference.
 
-       * gnus-msg.el (gnus-inews-insert-archive-gcc): Use the parent
-       name for gcc-self.
-       (gnus-inews-insert-archive-gcc): Paren mistake.
+2004-02-04  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-sum.el (gnus-summary-enter-digest-group): Add
-       parent-group. 
+       * gnus-uu.el (gnus-uu-check-correct-stripped-uucode): Simplify.
+       (gnus-uu-post-encoded): Use point-at-bol.
 
-       * gnus-art.el (gnus-ignored-headers): Add more headers.
+       * gnus-topic.el (gnus-group-active-topic-p): do.
 
-       * rfc2047.el (rfc2047-encode): See which encoding is shorter --
-       base64 or QP.
+       * gnus-start.el (gnus-newsrc-to-gnus-format): do.
 
-       * nnmail.el (nnmail-article-group): Default to "bogus".
+       * gnus-group.el (gnus-group-kill-region): do.
 
-       * mail-source.el (mail-source-delete-incoming): Change to nil.
+       * gnus-art.el (article-date-ut): do.
 
-2003-10-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * message.el (message-fetch-field): Remove redundant
+       case-fold-search binding.
+       (message-narrow-to-field): Simplify.
 
-       * mail-source.el (mail-source-fetch-imap): Fix mismatched parens.
+2004-02-03  Reiner Steib  <Reiner.Steib@gmx.de>
 
-2003-10-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * spam.el (spam-directory): Derive from `gnus-directory'.
 
-       * mail-source.el (defvar): Add post/pre/scripts.
-       (mail-source-fetch-imap): Use them.
+       * spam-report.el (spam-report-url-to-file)
+       (spam-report-requests-file): New function and variable for offline
+       reporting.
+       (spam-report-url-ping-function): Add `spam-report-url-to-file'
+       and user defined function.
+       (spam-report-url-ping-mm-url): Remove doubled slash.
 
-       * nndraft.el (nndraft-request-move-article): Fix infinite
-       recursion. 
+2004-02-03  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * gnus-group.el (gnus-group-mark-regexp): Jump to groups.
+       * spam.el (spam-list-of-processors): fixed spamassassin variable names
 
-2003-10-16  Ed L. Cashin  <ecashin@uga.edu>
+2004-02-03  Jesper Harder  <harder@ifa.au.dk>
 
-       * imap.el (imap-interactive-login): Set imap-password to nil if
-       login fails.
+       * spam.el (spam-check-spamoracle, spam-spamoracle-learn): Fix
+       format string mismatch.
 
-2003-10-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * sieve.el (sieve-deactivate-all): do.
 
-       * message.el (message-inserted-headers): New variable.
-       (message-mode): Make local.
-       (message-mode): Set all the local action variables to nil.      
+       * nnfolder.el (nnfolder-request-set-mark, nnfolder-save-marks): do.
 
-2003-10-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * nnlistserv.el (nnlistserv-kk-wash-article): do.
 
-       * mm-decode.el (mm-inline-text-html-with-images): Doc fix.
-       (mm-w3m-safe-url-regexp): Doc fix.
+       * nnml.el (nnml-request-set-mark, nnml-save-marks): do. 
 
-2003-10-12  Jesper Harder  <harder@ifa.au.dk>
+       * mm-bodies.el (mm-7bit-chars): Don't include \r.
 
-       * gnus-sum.el (gnus-summary-respool-query): Don't narrow to head,
-       it's done by nnmail-article-group.
+2004-02-02  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * gnus-uu.el (gnus-uu-grab-articles): Fix misplaced parens.
-       From Mark Hood <markhood@speakeasy.net> (tiny change)
+       * spam.el (spam-list-of-checks): added spam-use-BBDB-eclusive to
+       the list of checks
 
-2003-10-10  Jesper Harder  <harder@ifa.au.dk>
+2004-01-31  Jesper Harder  <harder@ifa.au.dk>
 
-       * mm-decode.el (mm-file-name-delete-gotchas): Avoid infloop in
-       XEmacs.
+       * rfc2047.el (rfc2047-pad-base64): Deal with more cases of invalid
+       padding.
 
-2003-10-10  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-01-27  Simon Josefsson  <jas@extundo.com>
 
-       * spam.el (spam-initialize): new function, does the spam-face
-       update and all the hooks, replaces spam-install-hooks-function
+       * mm-view.el (mm-fill-flowed): Add.
+       (mm-inline-text): Use it.  Tiny patch from Ralf Angeli
+       <angeli@iwi.uni-sb.de>.
 
-       * gnus-registry.el (gnus-registry-initialize): new autoloaded
-       function to explicitly initialize the registry
+2004-01-27  Teodor Zlatanov  <tzz@lifelogs.com>
 
-2003-10-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * spam.el (spam-spamassassin-register-ham-routine)
+       (spam-spamassassin-register-spam-routine): fixed function names
 
-       * mm-decode.el (mm-w3m-safe-url-regexp): Doc fix.
+2004-01-27  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * mm-view.el (mm-w3m-mode-map): Doc fix.
-       (mm-inline-text-html-render-with-w3m): Add a comment.
+       * gnus.el (gnus-tmp-grouplens): Remove.
+       (gnus-summary-line-format): Remove grouplens.
 
-2003-10-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-group.el (gnus-group-line-format): Ditto.
 
-       * gnus-group.el: Remove superfluous eval-when-compiles.
+       * gnus-spec.el (gnus-format-specs): Ditto.
+       (gnus-update-format-specifications): Flush the group format spec
+       cache if there's the grouplens stuff.
+       (gnus-parse-simple-format): Replace %l with the empty string.
 
-2003-10-10  Jesper Harder  <harder@ifa.au.dk>
+2004-01-27  Steve Youngs  <sryoungs@bigpond.net.au>
 
-       * gnus-group.el (gnus-group-suspend): Reset gnus-backlog-articles.
+       * gnus-spec.el (gnus-parse-simple-format): Fix setq value
+       omission. 
+       From Jerry James  <james@xemacs.org>
 
-2003-10-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-01-26  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * dns.el (query-dns): Don't error out on malformed resolv files.
+       * gnus-msg.el (gnus-summary-resend-message-edit): Call mime-to-mml.
+       Suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
 
-2003-10-06  Jesper Harder  <harder@ifa.au.dk>
+2004-01-25  Paul Jarc  <prj@po.cwru.edu>
 
-       * gnus.el (gnus-group-faq-directory): Update .tw entry.  From
-       Albert Chun-Chieh Huang <mr894348@cs.nthu.edu.tw>
+       * nnmaildir.el (nnmaildir--num-file, nnmaildir--mkfile,
+       nnmaildir--emlink-p, nnmaildir--eexist-p, nnmaildir--new-number):
+       New macros and functions.
+       * nnmaildir.el (nnmaildir--group-maxnum, nnmaildir--update-nov):
+       Handle > NLINK_MAX messages.
+       * nnmaildir.el (nnmaildir-request-set-mark): Use
+       nnmaildir--emlink-p and nnmaildir--eexist-p.
 
-2003-10-03  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-01-25  Alex Schroeder  <alex@gnu.org>
 
-       * spam.el (spam-check-blackholes): exit the loop if matches are
-       found (idea from Adrian Lanz <lanz@fowi.ethz.ch>)
-       (spam-check-bogofilter-headers, spam-check-blackholes, spam-check-BBDB)
-       (spam-from-listed-p): use nnmail-fetch-field instead of message-fetch-field
-       
+       * spam-stat.el (spam-stat-process-directory-age): New option.
+       (spam-stat-process-directory): Use it.
 
-2003-10-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-01-24  Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>  (tiny change)
 
-       * mm-decode.el (mm-attachment-file-modes): Change the default
-       value into 384 from ?\600 which doesn't mean an integer in XEmacs.
+       * spam-stat.el (spam-stat-reduce-size): Set spam-stat-dirty.
+       (spam-stat-save): Accept prefix argument.
 
-2003-10-03  Jesper Harder  <harder@ifa.au.dk>
+2004-01-23  Paul Jarc  <prj@po.cwru.edu>
 
-       * mm-decode.el (mm-file-name-delete-control)
-       (mm-file-name-delete-gotchas): New functions.
-       (mm-file-name-rewrite-functions): Use them.
-       (mm-attachment-file-modes): New option.
-       (mm-save-part-to-file): Use it.
+       * nnmaildir.el (nnmaildir-request-set-mark): Handle the "too many
+       links" error.
 
-2003-10-02  Reiner Steib  <Reiner.Steib@gmx.de>
+2004-01-23  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * spam.el (spam-install-hooks-function): Added Autoload cookie.
+       * dgnushack.el: Advise byte-optimize-form-code-walker to optimize
+       the rest of the and/or forms.
 
-2003-10-02  Jesper Harder  <harder@ifa.au.dk>
+2004-01-23  Jesper Harder  <harder@ifa.au.dk>
 
-       * pgg-def.el (pgg-default-keyserver-address): Change to
-       subkeys.pgp.net.  From Michael Shields <shields@msrl.com>
+       * gnus.el (gnus-tmp-grouplens): Define for the sake of backward
+       compatibility with old .newsrc.eld files.
 
-2003-10-01  Simon Josefsson  <jas@extundo.com>
+       * gnus-xmas.el (gnus-xmas-grouplens-menu-add): Remove.
 
-       * message.el (message-idna-to-ascii-rhs-1): RHS can be terminated
-       by ',', as in 'foo@example.org, bar@example.org'.
+       * gnus-sum.el (gnus-summary-line-format-alist): Remove grouplens.
 
-2003-10-01  Jesper Harder  <harder@ifa.au.dk>
+       * gnus-start.el (gnus-1): do.
 
-       * message.el (message-send): Fix reversed logic of supersedes
-       check.
+       * gnus-group.el (gnus-group-line-format-alist): do.
 
-2003-09-30  Reiner Steib  <Reiner.Steib@gmx.de>
+       * gnus.el (gnus-use-grouplens, gnus-visual): do.
 
-       * gnus-art.el (gnus-article-view-part-as-charset): Doc fix,
-       suggested by Norbert Koch <viteno@xemacs.org>.
+       * gnus-gl.el: Remove.
 
-2003-09-29  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-01-23  Kevin Greiner <kgreiner@xpediantsolutions.com>
 
-       * gnus-topic.el (gnus-topic-goto-missing-topic): Revert 2003-02-09
-       change in order to correct the position where an invisible topic
-       (because gnus-topic-display-empty-topics is nil) may be inserted.
+       * gnus-sum.el (gnus-adjust-marks): Now correctly handles a list of
+       marks consisting of a single range {for example, (3 . 5)} rather
+       than a list of a single range { ((3 . 5)) }.
 
-2003-09-22  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-01-23  Jesper Harder  <harder@ifa.au.dk>
 
-       * message.el (message-ignored-supersedes-headers): Add X-Payment.
+       * spam-stat.el (spam-stat-store-gnus-article-buffer): Use
+       with-current-buffer.
+       (spam-stat-store-current-buffer): Use insert-buffer-substring to
+       avoid consing a string.
 
-2003-09-20  Jesper Harder  <harder@ifa.au.dk>
+       * mm-util.el (mm-charset-synonym-alist): Add ks_c_5601-1987.
+       Remove obsolete entries for big5 and gb2312.
 
-       * rfc2047.el (rfc2047-encode): Limit line length to 76 characters.
+2004-01-22  Kevin Greiner <kgreiner@xpediantsolutions.com>
 
-2003-09-20  Simon Josefsson  <jas@extundo.com>
+       * gnus-sum.el (gnus-adjust-marks): Avoid splicing null INTO the
+       uncompressed list.
 
-       * tls.el (tls-process-connection-type): Doc fix.
+2004-01-22  Jesper Harder  <harder@ifa.au.dk>
 
-       * imap.el (imap-starttls-open): Rewrite, should support both old
-       starttls.el and new starttls.el that uses GNUTLS.
+       * spam-stat.el (spam-stat-strip-xref): New function.
+       (spam-stat-process-directory): Use it.
 
-2003-09-18  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-util.el (gnus-fetch-field): Don't bind case-fold-search
+       here -- it's done in message-fetch-field.
 
-       * gnus-art.el (gnus-treat-display-x-face): Use set-default instead
-       of custom-set-default which isn't available in old XEmacsen.
+2004-01-21  Kevin Greiner <kgreiner@xpediantsolutions.com>
 
-2003-09-17  Jesper Harder  <harder@ifa.au.dk>
+       * gnus-agent.el (gnus-agent-queue-mail,
+       gnus-agent-prompt-send-queue): New variables.
+       (gnus-agent-send-mail): Use gnus-agent-queue-mail.
+       * gnus-draft.el (gnus-group-send-queue): Pass the group name
+       "nndraft:queue" along to gnus-draft-send.  Use
+       gnus-agent-prompt-send-queue.
+       (gnus-draft-send): Rebind gnus-agent-queue-mail to nil when group
+       is "nndraft:queue".  Suggested by Gaute Strokkenes
+       <gs234@srcf.ucam.org>
 
-       * gnus-msg.el (gnus-summary-resend-message-edit): Don't convert
-       to MML.  MIME -> MML -> MIME does not work for PGP/MIME.
+       * gnus-agent.el (agent-disable-undownloaded-faces): Removed
+       (agent-enable-undownloaded-faces): Added
+       (gnus-agent-cat-groups): Use eval-and-compile, not
+       eval-when-compile, to define gnus-agent-set-cat-groups as the setf
+       method of gnus-agent-cat-groups even when the buffer has been
+       evaled.
+       (gnus-agent-save-active,gnus-agent-save-active-1): Merged to
+       delete gnus-agent-save-active-1.
+       (gnus-agent-save-groups): Deleted. Identical to
+       gnus-agent-save-active.
+       (gnus-agent-write-active): No longer adjust agent's copy of active
+       file as agent's adjustments are now stored in their own
+       file. Removed optional parameter.
+       (gnus-agent-possibly-alter-active): Ignore groups of unagentized
+       servers.  Add use of min/max range limits from server's local
+       file.
+       (gnus-agent-save-alist): Removed unused optional argument.
+       (gnus-agent-load-local,gnus-agent-read-and-cache-local),
+       (gnus-agent-read-local,gnus-agent-save-local,gnus-agent-get-local),
+       (gnus-agent-set-local): A per-server file that keeps min/max range
+       limits for articles known to the agent.  Provides a fast mechanism
+       for altering many active ranges.
+       (gnus-agent-expire-group,gnus-agent-expire): No longer save the
+       active file (local makes it unnecessary).
+       (gnus-agent-regenerate-group): Fixed XEmacs compatibility.
+
+       * gnus-cus.el (agent-disable-undownloaded-faces): Removed
+       (agent-enable-undownloaded-faces): Added
+
+       * gnus-draft.el (gnus-draft-send): Bind gnus-agent-queue-mail to
+       disable it when sending to "nndraft:queue".
+       (gnus-group-send-queue): Add safety check to avoid sending queue
+       when unplugged.
+
+       * gnus-group.el (gnus-group-catchup): Use new
+       gnus-sequence-of-unread-articles, not
+       gnus-list-of-unread-articles, to avoid exhausting memory with huge
+       numbers of articles.  Use gnus-range-map to avoid having to
+       uncompress the unread list.
+       (gnus-group-archive-directory,
+       gnus-group-recent-archive-directory): Fixed invalid ange-ftp
+       reference.
 
-       * message.el (message-bounce, message-forward-show-mml): do.
+       * gnus-range.el (gnus-range-map): Iterate over list or sequence.
+       (gnus-sorted-range-intersection): Intersection of two ranges
+       without requiring that they first be uncompressed.
+
+       * gnus-start.el (gnus-activate-group): Unless blocked by the
+       caller, possibly expand the active range to include both cached
+       and agentized articles.
+       (gnus-convert-old-newsrc): Rewrote in anticipation of having
+       multiple version-dependent converters.
+       (gnus-groups-to-gnus-format): Replaced gnus-agent-save-groups with
+       gnus-agent-save-active.
+       (gnus-save-newsrc-file): Save dirty agent range limits.
+
+       * gnus-sum.el (gnus-select-newgroup): Replaced inline code with
+       gnus-agent-possibly-alter-active.
+       (gnus-adjust-marked-articles): Faster handling of simple lists
        
-2003-09-13  Jesper Harder  <harder@ifa.au.dk>
-
-       * rfc2047.el (rfc2047-charset-encoding-alist): Add viscii.
-       (rfc2047-encode): Add factors for big5, gb2312 and euc-kr.
-
-       * nnweb.el (nnweb-google-parse-1): Fix parsing.
-
-2003-09-12  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-group.el (gnus-group-fetch-control): ISC changed
-       compression from .Z to .gz.
-
-       * rfc2047.el (rfc2047-header-encoding-alist): Add "Approved" to
-       address-mime.
-
-2003-09-11  Jesper Harder  <harder@ifa.au.dk>
-
-       * rfc2047.el (rfc2047-encode): Restrict encoded-words to 75
-       characters.
-
-2003-09-10  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus.el (gnus-group-charter-alist): Update.
-
-2003-09-10  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * 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
-       <knauel@informatik.uni-tuebingen.de>.
-       (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)
-
-2003-09-08  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-registry.el (gnus-registry-delete-id): function to
-       completely delete an ID, including all the cache hashtables
-       (gnus-registry-delete-group): use gnus-registry-delete-id
-       (gnus-registry-simplify-subject): only run if the argument is a
-       string, return nil otherwise
-
-2003-09-07  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-msg.el (gnus-summary-resend-bounced-mail): Docstring fix.
-
-2003-09-05  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-registry.el (gnus-registry-split-fancy-with-parent): yet
-       another error *sigh*
-
-       * gnus-registry.el (gnus-registry-fetch-extra-entry): don't use
-       puthash unless gnus-registry-entry-caching is on
-       (gnus-registry-split-fancy-with-parent): misplaced parenthesis
-       made everything a part of the 'else'
-       (gnus-registry-save): used 'entry-caching' instead of 'caching'
-
-2003-09-05  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-button-alist): Improve Info regexp.
-
-2003-09-04  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-registry.el: added brief explanation of basics
-       (gnus-registry-track-extra): new variable for tracking of message
-       subjects
-       (gnus-registry-entry-caching): caching parameter, used for extra
-       data
-       (gnus-registry-minimum-subject-length): minimum subject length
-       before it's considered when tracing subjects
-       (gnus-registry-save): accomodate extra data entry caching
-       (gnus-registry-action): change function name, add the subject and
-       pass it to gnus-registry-add-group
-       (gnus-registry-spool-action): change function name, add the
-       subject and pass it to gnus-registry-add-group
-       (gnus-registry-split-fancy-with-parent): add subject tracking
-       (gnus-registry-register-message-ids): pass subject to
-       gnus-registry-add-group
-       (gnus-registry-simplify-subject)
-       (gnus-registry-fetch-simplified-message-subject-fast): new
-       functions
-       (gnus-registry-fetch-extra, gnus-registry-fetch-extra-entry): add
-       extra data entry caching
-       (gnus-registry-add-group): handle the extra subject parameter
-       (gnus-registry-install-hooks, gnus-registry-unload-hook): fix the
-       gnus-register-* function names
-
-       * nnmail.el (nnmail-cache-insert): add subject parameter, pass it
-       on to the nnmail-spool-hook
-
-       * nnbabyl.el (nnbabyl-request-accept-article): added subject to
-       nnmail-cache-insert call
-
-       * nndiary.el (nndiary-request-accept-article): added subject to
-       nnmail-cache-insert call
-
-       * nnfolder.el (nnfolder-request-accept-article): added subject to
-       nnmail-cache-insert call
-
-       * nnimap.el (nnimap-split-articles): added subject to
-       nnmail-cache-insert call
-       (nnimap-request-accept-article): added subject to
-       nnmail-cache-insert call
-
-       * nnmbox.el (nnmbox-request-accept-article): added subject to
-       nnmail-cache-insert call
-
-       * nnmh.el (nnmh-request-accept-article): added subject to
-       nnmail-cache-insert call
-
-       * nnml.el (nnml-request-accept-article): added subject to
-       nnmail-cache-insert call
-
-2003-09-04  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-button-handle-info-url)
-       (gnus-button-handle-info-url-gnome)
-       (gnus-button-handle-info-url-kde, gnus-button-alist): Handle GNOME
-       and KDE style Info URLs.
-
-       * gnus-util.el (gnus-url-unhex-string): Don't replace "+" with " ".
-
-2003-09-02  Jesper Harder  <harder@ifa.au.dk>
-
-       * rfc2047.el (rfc2047-fold-region): Don't fold at the beginning
-       of the field.
-
-2003-09-01  Simon Josefsson  <jas@extundo.com>
-
-       * mml.el (mml-insert-mime-headers-always): New variable.
-       (mml-insert-mime-headers): Use it.  Based on (tiny) patch from
-       Lars Balker Rasmussen <lars@balker.org>.
-
-2003-08-30  Simon Josefsson  <jas@extundo.com>
-
-       * 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
-       <gs234@srcf.ucam.org> (tiny change).
-
-2003-08-29  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-group-delete-group): Doc fix.  Suggested by
-       Jochen K\e,A|\e(Bpper <jochen@jochen-kuepper.de>.
-
-2003-08-29  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (article-display-x-face): Make it possible to set
-       the gnus-article-x-face-command variable to the lambda form.
-
-2003-08-27  Simon Josefsson  <jas@extundo.com>
-
-       * mm-decode.el (mm-remove-part): Try to kill external displayers
-       cleanly first (if it refuses, C-g aborts loop and kill process
-       unconditionally).  Also make sure process is dead before we remove
-       the files it may be using.  Reported by David Coe
-       <davidc@debian.org>.
+2004-01-21  Jesper Harder  <harder@ifa.au.dk>
+
+       * spam-stat.el (spam-stat-test-directory): New optional argument
+       displays a list of files detected.  Suggested by Andrew Cohen
+       <cohen@andy.bu.edu>.
+       (spam-stat-buffer-words-with-scores): Don't narrow and change
+       syntax table here.  Reported by Andrew Cohen <cohen@andy.bu.edu>.
+
+2004-01-20  Teodor Zlatanov  <tzz@lifelogs.com>  
+
+       * 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 <hubert@uhoreg.ca>:
+
+       * spam.el (spam-use-spamassassin, spam-use-spamassassin-headers)
+       (spam-install-hooks, spam-spamassassin, spam-spamassassin-path)
+       (spam-spamassassin-arguments)
+       (spam-spamassassin-spam-flag-header)
+       (spam-spamassassin-positive-spam-flag-header)
+       (spam-spamassassin-spam-status-header, spam-sa-learn-path)
+       (spam-sa-learn-rebuild, spam-sa-learn-spam-switch)
+       (spam-sa-learn-ham-switch, spam-sa-learn-unregister-switch)
+       (spam-list-of-processors, spam-list-of-checks)
+       (spam-list-of-statistical-checks, spam-registration-functions)
+       (spam-check-spamassassin-headers, spam-check-spamassassin)
+       (spam-spamassassin-score)
+       (spam-spamassassin-register-with-sa-learn)
+       (spam-spamassassin-register-spam-routine)
+       (spam-spamassassin-register-ham-routine)
+       (spam-assassin-register-spam-routine)
+       (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
 
-2003-08-27  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-cache.el (gnus-cache-generate-active): Fix bug in
-       replacement.  From Vagn Johansen <v@johansen.mail.dk> (tiny
-       change).
-
-2003-08-25  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el: Don't use defvaralias.
-       (gnus-treat-display-x-face): Warn if the obsolete variable
-       `gnus-treat-display-xface' exists.
-
-2003-08-25  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-treat-display-face): Fix typo.
-       (gnus-treat-display-xface): Rename to gnus-treat-display-x-face
-       (reported by Jochen K\e,A|\e(Bpper <jochen@jochen-kuepper.de>)
-
-2003-08-24  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-header-button-alist, gnus-button-alist): Fix
-       type.
-
-2003-08-22  Jesper Harder  <harder@ifa.au.dk>
-
-       * message.el (message-make-forward-subject-function): Fix
-       customize mismatch.
-
-       * gnus.el (gnus-message-archive-method): do.
-
-2003-08-20  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus.el (gnus-read-group): Offer to continue only if the invalid
-       char is `/' and add more information for the user.
-
-       * gnus-art.el (gnus-button-alist): Add `+' (gnus-button-handle-man).
-       (gnus-header-button-alist): Added `In-Reply-To'.
-
-       * nnimap.el (nnimap-open-connection): Allow different user names
-       on the same server (and in the same authinfo file).
-
-2003-08-20  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sieve.el (gnus-sieve-crosspost): Fix type.
-
-       * message.el (message-make-forward-subject-function): Add
-       message-forward-subject-name-subject to choices.
-
-       * gnus-art.el (gnus-article-edit-done, gnus-article-edit-exit):
-       Redisplay article after editing.
-
-2003-08-20  Simon Josefsson  <jas@extundo.com>
-
-       * 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 m2oeysiev3.fsf@naima.lensflare.org.
-       Tiny patch from letters@hotpop.com (Jari Aalto+mail.linux).
-
-2003-08-13  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-score.el (gnus-summary-score-effect): Fix interactive use.
-
-2003-08-10  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-draft.el (gnus-draft-send-all-messages): ask if all drafts
-       should be sent unless gnus-expert-user is on
-
-2003-08-09  Jesper Harder  <harder@ifa.au.dk>
-
-       * pgg-gpg.el (pgg-gpg-extra-args): Fix customization type.
-
-2003-08-07  Jesper Harder  <harder@ifa.au.dk>
-
-       * pgg-gpg.el (pgg-gpg-process-region): Bind
-       default-enable-multibyte-characters to nil.
-
-2003-08-07  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * canlock.el (canlock-password): Fix customization type.
-       (canlock-password-for-verify): Ditto.
-       * deuglify.el (gnus-outlook-deuglify-unwrap-min): Ditto.
-       (gnus-outlook-deuglify-unwrap-max): Ditto.
-       (gnus-outlook-deuglify-unwrap-stop-chars): Ditto.
-       * gnus-sum.el (gnus-sum-thread-tree-root): Ditto.
-       (gnus-sum-thread-tree-false-root): Ditto.
-       (gnus-sum-thread-tree-single-indent): Ditto.
-       * message.el (message-archive-note): Ditto.
-       (message-subscribed-address-file): Ditto.
-       (message-user-fqdn): Ditto.
-       * spam-report.el (spam-report-gmane-regex): Ditto.
-       * spam.el (spam-blackhole-good-server-regex): Ditto.
-
-       * gnus-start.el (gnus-save-killed-list): Fix last change.
-       * message.el (message-courtesy-message): Ditto.
-
-2003-08-07  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-header-face-alist): Revert previous change.
-       (gnus-header-newsgroups-face): Explain that it's only used for
-       crossposts.
-
-2003-08-07  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-registry.el (gnus-registry-max-entries): Fix customization
-       type.
-       * gnus-score.el (gnus-adaptive-word-length-limit): Ditto.
-       * gnus.el (gnus-refer-article-method): Ditto.
-       * message.el (message-courtesy-message): Ditto.
-
-2003-08-06  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-header-face-alist): Fix "Newsgroups" entry.
-       From Chunyu Wang <spr@db.cs.hit.edu.cn> (tiny patch)
-
-2003-08-05  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-start.el (gnus-save-killed-list): Fix customization type.
-       * gnus-sum.el (gnus-thread-hide-subtree): Ditto.
-       * gnus.el (gnus-use-long-file-name): Ditto.
-
-2003-08-04  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-group.el (gnus-group-rename-group): Don't allow renaming to
-       an existing name.
-
-       * gnus-sum.el (gnus-summary-highlight): Add uncached to docstring.
-
-       * nnmail.el (nnmail-large-newsgroup): Docstring fix.
-
-       * nntp.el (nntp-large-newsgroup): do.
-
-       * nnspool.el (nnspool-large-newsgroup): do.
-
-       * gnus-cus.el (gnus-group-parameters): Typo.
-
-2003-07-31  Simon Josefsson  <jas@extundo.com>
-
-       * mml-sec.el (mml-signencrypt-style-alist): Use separate S/MIME
-       method by default (revert partial 2003-07-10 patch).
-
-2003-07-28  Dave Love  <fx@gnu.org>
-
-       * pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el: Require cl when compiling.
-
-2003-07-26  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * 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\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
-
-       * flow-fill.el (fill-flowed): Empty lines separate paragraphs
-       even if the preceding line ends with a soft break.  Tiny patch
-       from Mark Thomas <swoon@bellatlantic.net>.
-
-2003-07-25  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-use-regex-body, spam-regex-body-spam) 
-       (spam-regex-body-ham): new variables, default to nil/empty/empty
-       (spam-install-hooks): added spam-use-regex-body to list or
-       pre-install conditions
-       (spam-list-of-checks): added spam-use-regex-body and
-       spam-check-regex-body to list of checks
-       (spam-list-of-statistical-checks): added spam-use-regex-body to
-       list of statistical checks
-       (spam-check-regex-body): invokes spam-check-regex-headers with
-       appropriate variable masking
-       (spam-check-regex-headers): changes to print "body" or "header"
-       where appropriate
-
-2003-07-25  Jesper Harder  <harder@ifa.au.dk>
-
-       * smime.el (smime-ask-passphrase): Use read-passwd rather than
-       comint-read-noecho.  The former is more secure.
-
-2003-07-24  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-registry.el (gnus-registry-cache-whitespace): make "adding
-       whitespace" message level 5 instead of 4
-       (gnus-registry-clean-empty-function): new function to remove empty
-       registry entries
-       (gnus-registry-clean-empty): new variable to enable cleaning the
-       registry when saving it by calling gnus-registry-clean-empty-function
-
-       * spam.el (spam-summary-prepare-exit): use spam-process-ham-in-spam-groups
-       (spam-process-ham-in-spam-groups): new variable
-
-2003-07-24  Jesper Harder  <harder@ifa.au.dk>
-
-       * pgg-gpg.el (pgg-gpg-process-region): Add "--yes" to options.
-
-       * pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el, pgg.el: Reapply changes
-       from 2003-04-03 to fix security problem.  See
-       http://www.debian.org/security/2003/dsa-339
-
-2003-07-23  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus.el (gnus-install-group-spam-parameters): add the
-       gnus-ticked-mark to the possible choices of ham marks
-
-       * spam.el (spam-process-ham-in-nonham-groups): new variable
-       (spam-summary-prepare-exit): use spam-process-ham-in-nonham-groups
-
-2003-07-23  Jesper Harder  <harder@ifa.au.dk>
-
-       * rfc2047.el (rfc2047-header-encoding-alist): Add Mail-Followup-To
-       and Mail-Copies-To to address-mime.
-       (rfc2047-narrow-to-field): Use rfc2047-point-at-bol.
-
-2003-07-19  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-util.el (mm-coding-system-priorities): Docstring improvement.
-
-2003-07-17  Jesper Harder  <harder@ifa.au.dk>
+       * gnus-registry.el (gnus-registry-split-fancy-with-parent):
+       Suppress unnecessary messages.  From Nevin Kapur
+       <nkapur@cs.caltech.edu>.
 
-       * gnus-sum.el (gnus-thread-latest-date): Move condition-case to
-       the right place.
+2004-01-20  Jesper Harder  <harder@ifa.au.dk>
 
-2003-07-14  Simon Josefsson  <jas@extundo.com>
+       * spam-stat.el (spam-stat-to-hash-table): Use :size keyword in
+       make-hash-table.
 
-       * mail-source.el (mail-source-fetch-imap): Don't assume
-       imap-error-text returns something.
+2004-01-19  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-07-12  Nevin Kapur  <kapur@mts.jhu.edu>
+       * canlock.el (base64-encode-string): Don't autoload it.
 
-       * nnimap.el (nnimap-request-newgroups): Use the pattern in
-       nnimap-list-pattern instead of "*".
+2004-01-16  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-07-10  Simon Josefsson  <jas@extundo.com>
+       * run-at-time.el: Remove useless (require 'itimer),
+       eval-and-compile and (featurep 'xemacs).
 
-       * mml-sec.el (mml-signencrypt-style-alist): Use "combined" by
-       default.  Improve docstring.
+2004-01-16  Jesper Harder  <harder@ifa.au.dk>
 
-2003-07-10  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+       * gnus-msg.el (gnus-post-news): Use blank Newsgroups line if
+       GROUP is a virtual group.
 
-       * imap.el (imap-arrival-filter): Fix test for missing process
-       buffer.
+2004-01-16  Steve Youngs  <sryoungs@bigpond.net.au>
 
-2003-07-09  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
-       From Gaute B Strokkenes <gs234@cam.ac.uk> (tiny patch).
+       * gnus.el: Autoload `message-y-or-n-p'.
 
-       * imap.el (imap-wait-for-tag): Clarify comment.  Use timeout zero
-       for second, after-process-has-died, accept-process-output.
-       (imap-arrival-filter): If PROC has no buffer, do nothing.
+2004-01-15  Jesper Harder  <harder@ifa.au.dk>
 
-2003-07-09  Jesper Harder  <harder@ifa.au.dk>
+       * pgg-parse.el: Remove unnecessary (require 'custom).
 
-       * flow-fill.el: Docstring and message fixes.
+       * pgg-def.el: do.
 
-       * deuglify.el: do.
+       * nnmail.el: do.
 
-       * gnus-int.el: do.
+       * gnus-undo.el: do.
 
-       * gnus-msg.el: do.
+       * gnus-picon.el: do.
 
        * gnus-util.el: do.
 
-       * gnus-draft.el: do.
-
-       * gnus-start.el: do.
-
-       * gnus.el: do.
-
-       * gnus-group.el: do.
-
-       * gnus-art.el: do.
-
-       * gnus-sum.el: do.
-
-       * mail-source.el (mail-source-movemail): Handle non-numerical
-       return values.
-
-2003-07-08  Jesper Harder  <harder@ifa.au.dk>
-
-       * mailcap.el (mailcap-parse-args-syntax-table)
-       (mailcap-viewer-passes-test): Docstring fix.
-
-       * mm-bodies.el (mm-long-lines-p): Docstring fix.
-
-       * mm-decode.el (mm-w3m-safe-url-regexp, mm-verify-option)
-       (mm-decrypt-option, mm-handle-set-external-undisplayer)
-       (mm-file-name-replace-whitespace): Docstring fix.
-
-       * mm-uu.el (mm-uu-emacs-sources-regexp): Docstring fix.
-       (mm-uu-pgp-signed-test): Fix message.
-
-       * mml.el (mml-tweak-sexp-alist): Docstring fix.
-       (mml-parse-1, mml-insert-mime-headers): Fix message.
-
-       * message.el (message-archive-header)
-       (message-subscribed-address-functions)
-       (message-subscribed-addresses, message-subscribed-regexps)
-       (message-canlock-generate)
-       (message-generate-new-buffer-clone-locals): Docstring fixes.
-
-2003-07-07  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
-
-       * imap.el (imap-wait-for-tag): After the process has died, look
-       for more output still pending.  From Gaute B Strokkenes
-       <gs234@cam.ac.uk> (tiny patch).
-
-2003-07-07  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-bogofilter-score): redisplay article normally
-       after spam-bogofilter-score is called
-
-2003-07-06  Jesper Harder  <harder@ifa.au.dk>
-
-       * message.el (message-send-mail-with-sendmail): Handle
-       non-numeric return values.
-
-       * gnus-sum.el (gnus-print-buffer): Apply emphasis.
-       From Michael Piotrowski <mxp@dynalabs.de> (tiny change).
-
-       * gnus-start.el (gnus-clear-system): Revert change from
-       2003-06-19.
-
-2003-07-04  Dave Love  <fx@gnu.org>
-
-       * rfc2047.el (rfc2047-q-encode-region): Exclude especials from
-       characters not encoded, and make the list more legible.
+2004-01-15  Reiner Steib  <Reiner.Steib@gmx.de>
 
-2003-07-04  Jesper Harder  <harder@ifa.au.dk>
+       * gnus-sum.el (gnus-pick-line-number): Add autoload.
 
-       * message.el (message-make-from): Revert change from 2002-01-08.
+2004-01-15  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-06-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * mm-decode.el (mm-multiple-handles): Recognize a string as a mime
+       handle, as well as a list.
 
-       * nnheader.el (nnheader-init-server-buffer): Don't add
-       nntp-server-buffer to list of Gnus buffers.
+       * mm-view.el (mm-w3m-cid-retrieve-1): Call itself recursively.
+       Suggested by ARISAWA Akihiro <ari@mbf.sphere.ne.jp>.
+       (mm-w3m-cid-retrieve): Simplify.
 
-2003-06-25  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-01-14  Kai Grossjohann  <kai@emptydomain.de>
 
-       * spam.el (spam-parse-list): prevent empty ("") strings
+       * message.el (message-kill-to-signature): Allow prefix arg to
+       specify number of lines to keep before signature.  From Vasily
+       Korytov.
+       (message-kill-to-signature): Change docstring.
 
-2003-06-24  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-01-14  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * spam.el (spam-parse-list): use gnus-extract-address-components
-       instead of ietf-drums-parse-addresses
-       (spam-from-listed-p): let* was unnecessary
+       * canlock.el: Always require sha1-el.
+       (canlock-sha1): Bind sha1-maximum-internal-length to nil.
 
-2003-06-24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el: Autoload sha1 only when compiling.
 
-       * gnus-ems.el (gnus-put-image): Mark the right text segment with
-       gnus-image-category. 
+       * lpath.el: Bind eudc-protocol for both Emacs and XEmacs; fbind
+       eudc-expand-inline for XEmacs.
 
-       * gnus-srvr.el (gnus-browse-unsubscribe-group): Strip prefix from
-       native groups.
+2004-01-13  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * gnus-topic.el (gnus-group-prepare-topics): Update topic line
-       format specs.
+       * message.el (message-canlock-generate): Require sha1-el.
 
-       * gnus-picon.el: Written by moi, moi, moi.
+2004-01-13  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-group.el (gnus-group-kill-group): Clean up.
+       * message.el (message-expand-name): Silence the byte compiler.
 
-2003-06-23  Teodor Zlatanov  <tzz@lifelogs.com>
+       * lpath.el: Add detect-coding-system.
 
-       * spam.el (spam-from-listed-p, spam-parse-list): use
-       ietf-drums-parse-addresses to extract the address portion of the
-       whitelist/blacklist file if it looks like an address can be found
+       * dgnushack.el (dgnushack-compile): Remove obsolete check for
+       cus-edit.
 
-2003-06-23  Didier Verna  <didier@xemacs.org>
+2004-01-13  Simon Josefsson  <jas@extundo.com>
 
-       * gnus-ems.el (gnus-put-image): New argument CATEGORY. Add it as a
-       text property.
-       (gnus-remove-image): New argument CATEGORY. Only remove if
-       category matches.
-       * gnus-xmas.el (gnus-xmas-put-image):
-       (gnus-xmas-remove-image): Ditto, with extents.
-       * gnus-art.el (gnus-delete-images): Pass CATEGORY argument to
-       gnus-[xmas-]remove-image.
-       (article-display-face): Don't always act as a toggle. Call
-       `gnus-put-image' with CATEGORY argument.
-       (article-display-x-face): Call `gnus-put-image' with CATEGORY
-       argument.
-       * smiley.el (smiley-region): Ditto.
-       * gnus-fun.el (gnus-display-x-face-in-from): Ditto.
-       * gnus-picon.el (gnus-picon-insert-glyph): Ditto.
-       (gnus-treat-mail-picon): Don't always act as a toggle.
-       * gnus-picon.el (gnus-treat-newsgroups-picon): Ditto.
+       * gnus-score.el (gnus-score-edit-all-score): Fix prototype.
+       Invoke gnus-score-mode.  Reported by
+       bojohan+news@dd.chalmers.se (Johan Bockg\e,Ae\e(Brd).
 
-2003-06-23  Didier Verna  <didier@xemacs.org>
+       * gnus-range.el (gnus-compress-sequence): Doc fix.  Suggested by
+       Jim Blandy <jimb@redhat.com> (tiny change).
 
-       * gnus-art.el (article-display-face): Check for existence of the
-       original article buffer before switching to it.
+2004-01-12  Jesper Harder  <harder@ifa.au.dk>
 
-2003-06-20  Jesper Harder  <harder@ifa.au.dk>
+       * gnus-srvr.el (gnus-browse-foreign-server): Reduce consing.
 
-       * mm-util.el (mm-append-to-file): Say "Appended to".  Suggested by
-       Dan Jacobson <jidanni@jidanni.org>.
+2004-01-12  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * mm-view.el (mm-inline-message): Bind
-       gnus-original-article-buffer to the buffer in the mml handle
-       holding the message.
+       * spam.el (spam-get-article-as-string): updated to use
+       gnus-request-article-this-buffer, much simpler
+       (spam-get-article-as-buffer): removed
 
-2003-06-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-01-12  Kai Grossjohann  <kai.grossjohann@mci.com>
 
-       * message.el (sender, from): No need to bind them.
+       * message.el (message-expand-name): Use EUDC if the user uses
+       that.
 
-2003-06-19  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-01-12  Jesper Harder  <harder@ifa.au.dk>
 
-       * spam.el (spam-enter-list): search-forward specified wrong
-
-2003-06-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el: Comment fix.
-
-2003-06-20  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-msg.el (gnus-configure-posting-styles): Remove unused
-       variable.  From Jan Rychter <jan@rychter.com>.
-
-       * spam.el (spam-spamoracle-learn): insert-string is obsolete.
-
-2003-06-19  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-enter-list): do not enter duplicate addresses into
-       the whitelist/blacklist
-
-2003-06-19  Jesper Harder  <harder@ifa.au.dk>
+       * rfc2047.el (rfc2047-parse-and-decode, rfc2047-decode): Use a
+       character for the encoding to avoid consing a string.
+       
+       * rfc2047.el (rfc2047-decode-string): Don't cons a string
+       unnecessarily.
 
-       * nnheader.el (nnheader-init-server-buffer): Add
-       nntp-server-buffer to gnus-buffers.
+       * mm-util.el (mm-replace-chars-in-string): Remove.
 
-       * gnus-start.el (gnus-clear-system): Now we don't need to kill
-       nntp-server-buffer separately.
+       * rfc2047.el (rfc2047-decode): Use mm-subst-char-in-string instead
+       of mm-replace-chars-in-string.
 
-2003-06-18  Didier Verna  <didier@xemacs.org>
+2004-01-11  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-art.el (article-display-face): Correctly toggle between
-       display and hiding. Handle multiple Face headers.
+       * gnus.sum.el (gnus-remove-odd-characters): Don't cons two new
+       strings.
 
-2003-06-17  Dave Love  <fx@gnu.org>
+       * mm-util.el (mm-subst-char-in-string): Support inplace.        
 
-       * nnimap.el: Require cl when compiling.
+       * gnus-sum.el (gnus-summary-remove-list-identifiers): Don't cons
+       a new string in every iteration.  Use shy groups.
 
-       * message.el (message-fix-before-sending): Reinstate nullifying
-       the invisible text property.
-       (sender, from): Defvar when compiling.
-       (message-is-yours-p): Remove autoload cookie.
+2004-01-10  Jesper Harder  <harder@ifa.au.dk>
 
-2003-06-17  Reiner Steib  <Reiner.Steib@gmx.de>
+       * gnus-start.el (gnus-subscribe-newsgroup, gnus-start-draft-setup)
+       (gnus-group-change-level, gnus-kill-newsgroup)
+       (gnus-check-bogus-newsgroups, gnus-get-unread-articles-in-group)
+       (gnus-get-unread-articles, gnus-make-articles-unread)
+       (gnus-make-ascending-articles-unread): Use accessor
+       macros (gnus-group-entry, gnus-group-unread, gnus-info-marks etc.)
+       to get group information for improved readability.
 
-       * gnus-util.el (gnus-extract-address-components): Added
-       doc-string.
+       * gnus-srvr.el (gnus-browse-unsubscribe-group): do.
 
-2003-06-16  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+       * gnus-soup.el (gnus-soup-group-brew): do.
 
-       * nnml.el (nnml-current-group-article-to-file-alist): Don't read
-       overview when using compressed files.  From Michael Albinus
-       <Michael.Albinus@alcatel.de>.
+       * gnus-msg.el (gnus-put-message): do.
 
-2003-06-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-move.el (gnus-group-move-group-to-server): do.
 
-       * gnus-sum.el (gnus-summary-refer-parent-article): Extract
-       Message-ID from In-Reply-To header.
+       * gnus-kill.el (gnus-batch-score): do.
 
-2003-06-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-group.el (gnus-group-prepare-flat, gnus-group-delete-group)
+       (gnus-group-update-group-line, gnus-group-insert-group-line-info)
+       (gnus-group-update-group, gnus-group-read-group)
+       (gnus-group-make-group, gnus-group-make-help-group)
+       (gnus-group-make-archive-group, gnus-group-make-directory-group)
+       (gnus-group-make-empty-virtual, gnus-group-sort-selected-flat)
+       (gnus-group-sort-by-unread, gnus-group-catchup)
+       (gnus-group-unsubscribe-group, gnus-group-kill-group)
+       (gnus-group-yank-group, gnus-group-set-info)
+       (gnus-group-list-groups): do.
 
-       * message.el (message-is-yours-p): Narrow to head; extract from
-       and sender by itself.
-       (message-cancel-news, message-supersede): Remove useless things.
+       * gnus.el (gnus-generate-new-group-name): do.
 
-2003-06-15  Reiner Steib  <Reiner.Steib@gmx.de>
+       * gnus-delay.el (gnus-delay-send-queue): do.
 
-       * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind
-       `gnus-article-emulate-mime'.
+       * nnvirtual.el (nnvirtual-catchup-group): do.
 
-2003-06-15  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
-       From Tommi Vainikainen <thv+gnus@iki.fi>.
+       * nnkiboze.el (nnkiboze-generate-group, nnkiboze-generate-group):
+       do.
 
-       * message.el (message-is-yours-p): New function.  Separated common
-       code from message-cancel-news and message-supersede.  Added
-       matching code which uses message-alternative-emails regexp as last
-       resort.
-       (message-cancel-news, message-supersede): Use message-is-yours-p.
+       * gnus-topic.el (gnus-topic-find-groups, gnus-topic-clean-alist)
+       (gnus-group-prepare-topics, gnus-topic-check-topology): do.
+       
+       * gnus-sum.el (gnus-update-read-articles, gnus-select-newsgroup)
+       (gnus-mark-xrefs-as-read, gnus-compute-read-articles)
+       (gnus-summary-walk-group-buffer, gnus-summary-move-article)
+       (gnus-group-make-articles-read): do.
+       
+2004-01-09  Jesper Harder  <harder@ifa.au.dk>
 
-2003-06-13  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+       * gnus-art.el (article-decode-mime-words, article-babel)
+       (gnus-article-highlight-signature, gnus-article-add-buttons)
+       (gnus-signature-toggle): Use gnus-with-article-buffer.
+       
+       * gnus-art.el (gnus-article-highlight-headers)
+       (gnus-article-add-buttons-to-head): Use gnus-with-article-headers.
+       
+       * gnus-art.el (gnus-mm-display-part, gnus-article-wash-status)
+       (gnus-article-set-globals, gnus-request-article-this-buffer)
+       (gnus-button-message-id, gnus-article-maybe-hide-headers)
+       (gnus-mime-view-part-externally, gnus-mime-view-part-internally)
+       (gnus-mime-display-alternative): Use with-current-buffer.
 
-       * nnimap.el (nnimap-split-articles): Narrow the right buffer to
-       the headers.  From Niklas Morberg <niklas.morberg@axis.com>.
+2004-01-09  Teodor Zlatanov  <tzz@lifelogs.com>
 
-2003-06-12  Dave Love  <fx@gnu.org>
+       * 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
 
-       * nnheader.el (nnheader-functionp): Deleted.
+2004-01-09  Jesper Harder  <harder@ifa.au.dk>
 
-       * nnmail.el (nnmail-split-fancy-syntax-table): Define all in
-       defvar.
-       (nnmail-version): Deleted.
-       (nnmail-check-duplication, nnmail-expiry-target-group): Don't use
-       nnheader-functionp.
+       * deuglify.el (gnus-article-outlook-unwrap-lines)
+       (gnus-outlook-rearrange-article)
+       (gnus-outlook-repair-attribution-outlook)
+       (gnus-outlook-repair-attribution-block)
+       (gnus-outlook-repair-attribution-other): Remove redundant
+       save-excursion.
 
-2003-06-10  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-01-09  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * spam.el (spam-check-bogofilter-headers): fix for when the score
-       is requested but the message is not spam
+       * 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
 
-2003-06-09  Teodor Zlatanov  <tzz@lifelogs.com>
-       From Eric
-       <knauel@informatik.uni-tuebingen.de>
+2004-01-09  Jesper Harder  <harder@ifa.au.dk>
 
-       * spam.el (spam-use-spamoracle): new variable
-       (spam-install-hooks): add spamoracle to the list of conditions
-       for activation of spam-install-hooks
-       (spam-spamoracle): new variable customization group
-       (spam-spamoracle, spam-spamoracle): new variables
-       (spam-group-spam-processor-spamoracle-p)
-       (spam-group-ham-processor-spamoracle-p): new functions
-       (spam-summary-prepare-exit): added spamoracle ham/spam exit processing
-       (spam-list-of-checks, spam-list-of-statistical-checks): add
-       spam-use-spamoracle
-       (spam-check-spamoracle, spam-spamoracle-learn)
-       (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): new functions
+       * pop3.el (pop3-md5): Remove.
+       (pop3-apop): Replace pop3-md5 with md5.
 
-       * gnus.el (gnus-group-spam-exit-processor-spamoracle)
-       (gnus-group-ham-exit-processor-spamoracle): new variables for SpamOracle
-       (spam-process, ham-process): added spamoracle spam/ham processors
+       * mm-bodies.el: base64 is always built-in.
 
-2003-06-08  Jesper Harder  <harder@ifa.au.dk>
+       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Use
+       with-current-buffer.
 
-       * message.el (message-beginning-of-line): Docstring improvement.
-       Suggested by Michael R. Wolf <MichaelRunningWolf@att.net>
+2004-01-08  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-06-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * canlock.el (canlock-insert-header): Remove excessive grouping in
+       regexp.
 
-       * gnus-sum.el (gnus-summary-make-menu-bar): Removed ["Add buttons"
-       gnus-summary-display-buttonized t]
+       * gnus-sum.el (gnus-summary-read-document): Ditto.
 
-2003-06-07  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+       * gnus-uu.el (gnus-uu-part-number): Ditto.
 
-       * nnmail.el (nnmail-split-fancy-match-partial-words): Doc string
-       fix.  Reported by Johan Bockg\e,Ae\e(Brd <bojohan+news@dd.chalmers.se>.
+       * html2text.el (html2text-remove-tags): Ditto.
+       (html2text-format-tags): Ditto.
+       (html2text-format-single-elements): Ditto.
 
-2003-06-07  Jesper Harder  <harder@ifa.au.dk>
+       * mml.el (mml-parse-1): Ditto.
 
-       * message.el (message-beginning-of-line): Docstring improvement.
+2004-01-08  Jesper Harder  <harder@ifa.au.dk>
 
-2003-06-06  Jesper Harder  <harder@ifa.au.dk>
+       * gnus-sum.el (gnus-summary-update-mark): Revert previous change.
 
-       * gnus-srvr.el (gnus-browse-foreign-server): Parse garbage NNTP
-       groups correctly.
+       * gnus-group.el (gnus-group-mark-group): Fix for multibyte marks.
 
-2003-06-06  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
-       From Benjamin Rutt <rutt+news@cis.ohio-state.edu>.
+       * gnus-sum.el (gnus-summary-update-mark): Fix for multibyte marks.
 
-       * message.el (message-fetch-field): Augment documentation to state
-       the narrowed-to-headers restriction.
-       (message-change-subject, message-reduce-to-to-cc)
-       (message-generate-unsubscribed-mail-followup-to)
-       (message-insert-importance-high, message-insert-importance-low)
-       (message-insert-or-toggle-importance)
-       (message-insert-disposition-notification-to): Narrow to headers
-       before calling message-fetch-field or message-remove-header.
+       * gnus-util.el (gnus-replace-in-string): Remove Emacs 20 code.
 
-2003-06-06  Teodor Zlatanov  <tzz@lifelogs.com>
+2003-11-15  Simon Josefsson  <jas@extundo.com>
 
-       * gnus-registry.el (gnus-registry-trim): fix for when
-       gnus-registry-max-entries is nil
+       * pgg-gpg.el (pgg-gpg-lookup-all-secret-keys)
+       (pgg-gpg-lookup-key): Use regexp match instead of
+       split-string (split-string is different between emacs 21.2 and
+       21.4).  Reported by ultrasoul@ultrasoul.com (David D. Smith).
 
-2003-06-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-01-08  Jesper Harder  <harder@ifa.au.dk>
 
-       * qp.el (quoted-printable-decode-region): Don't error out on
-       malformed text.
+       * gnus-art.el (gnus-mime-view-all-parts)
+       (gnus-article-part-wrapper, gnus-article-view-part): Use
+       with-current-buffer.
 
-2003-06-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-01-07  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * rfc2047.el (rfc2047-encode-region): Don't error out on invalid
-       strings.
+       * spam.el (spam-disable-spam-split-during-ham-respool)
+       (spam-spamoracle-database, spam-cache-lookups)
+       (spam-split-last-successful-check, spam-clear-cache, spam-xor)
+       (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-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-check-blackholes, spam-check-BBDB, spam-from-listed-p)
+       (spam-check-bogofilter-headers): use message-fetch-field instead
+       of nnmail-fetch-field
 
-2003-06-04  Jesper Harder  <harder@ifa.au.dk>
+2004-01-07  Reiner Steib  <Reiner.Steib@gmx.de>
 
-       * mml1991.el (mml1991-pgg-sign): Insert pgg output as unibyte.
-       From: Ivan Boldyrev <boldyrev+nospam@cgitftp.uiggm.nsc.ru> (tiny
-       change)
+       * gnus-score.el (gnus-score-find-trace): Add `k' (kill-buffer).
 
-2003-06-03  Dave Love  <fx@gnu.org>
+2004-01-07  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * gnus-soup.el (gnus-soup-send-packet): Don't use
-       message-functionp.
+       * 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
+       instead of re-running spam-split to find the spam/ham
+       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
+       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
+
+2004-01-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-cite-prefix-regexp): Use with-syntax-table.
+
+       * nnmail.el (nnmail-split-fancy): do.
+
+       * mml.el (mml-parse): do.
+
+       * gnus-score.el (gnus-enter-score-words-into-hashtb)
+       (gnus-score-adaptive): do.
+
+2004-01-07  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-treat-emphasize): Ignore Emacs version number.
+       (gnus-mime-button-map): Don't set keymap parent.
+       (gnus-button-ctan-directory-regexp): Use shy grouping.
+       (gnus-prev-page-map): Don't set keymap parent.
+       (gnus-prev-page-map): Remove duplicated one.
+       (gnus-next-page-map): Don't set keymap parent.
+       (gnus-mime-security-button-map): Ditto.
+
+       * nnheader.el (nnheader-directory-files-is-safe): Ignore Emacs
+       version number.
+
+       * sha1-el.el (sha1-string-external): Use with-temp-buffer.
+
+2004-01-07  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * canlock.el (canlock-sha1-function): Remove.
+       (canlock-sha1-function-for-verify): Remove.
+       (canlock-openssl-program): Remove.
+       (canlock-openssl-args): Remove.
+       (canlock-ignore-errors): Remove.
+       (canlock-sha1-with-openssl): Remove.
+       (canlock-sha1): Use sha1 instead of to call canlock-sha1-function.
+       (canlock-verify): Don't use canlock-ignore-errors.
+
+       * sha1-el.el (sha1-string-external): Make it can return a string
+       in binary form.
+       (sha1-region-external): Ditto.
+       (sha1-string-internal): Ditto.
+       (sha1-region-internal): Ditto.
+       (sha1-region): Ditto.
+       (sha1-string): Ditto.
+       (sha1): Ditto.
 
-       * gnus.el (gnus-agent-cache): Doc fix.
-       (gnus-other-frame): Quote lambda used as hook.
+2004-01-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * message.el: Doc fixes.
-       (message-functionp): Deleted.  Callers changed.
-       (message-fix-before-sending): Highlight with overlays.  Clarify
-       `illegible text' messages.
-       (rmail-enable-mime-composing, gnus-message-group-art): Defvar when
-       compiling.
-       (gnus-find-method-for-group, nnvirtual-find-group-art): Autoload.
+       * spam.el (spam-report-articles-gmane): New command.
 
-2003-06-03  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+2004-01-07  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * nnmail.el (nnmail-split-fancy-match-partial-words): New user
-       option.
-       (nnmail-split-it): Obey it.  Don't let-bind regexp twice.
+       * gnus.el: Don't make unnecessary *Group* buffer when loading.
 
-       * message.el (message-fetch-field): Mention narrow-to-headers
-       requirement.
+       * run-at-time.el (run-at-time-saved): Remove.
+       (run-at-time): Doc fix.
 
-2003-06-03  Jesper Harder  <harder@ifa.au.dk>
+2004-01-07  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-xmas.el (gnus-xmas-create-image): Use
-       insert-file-contents-literally.  From: Eric Eide
-       <eeide@cs.utah.edu>
+       * gnus-sum.el (gnus-summary-limit-to-replied): New command.
+       (gnus-summary-limit-map): Add it.
+       (gnus-summary-make-menu-bar): do.
 
-2003-06-02  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-01-06  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * gnus-registry.el (gnus-registry-fetch-group): always return the
-       short name of the group
+       * 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)
 
-2003-06-02  Jesper Harder  <harder@ifa.au.dk>
+2004-01-06  Reiner Steib  <Reiner.Steib@gmx.de>
 
-       * gnus-cus.el (defvar): Silence byte-compiler warnings.
+       * gnus-art.el (gnus-treat-ansi-sequences): Changed default.
 
-       * gnus-sum.el (gnus-get-newsgroup-headers): Unfold headers.
+2004-01-07  Steve Youngs  <sryoungs@bigpond.net.au>
 
-2003-05-31  Jesper Harder  <harder@ifa.au.dk>
+       * run-at-time.el (run-at-time-saved): Move to after the definition
+       of `run-at-time'.
 
-       * gnus-art.el (article-unsplit-urls): Use gnus-treat-article
-       rather than gnus-display-mime-function.
+       * dgnushack.el: Autoload `font-lock-fontify-buffer' in XEmacs.
 
-2003-05-30  Teodor Zlatanov  <tzz@lifelogs.com>
+2004-01-06  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * gnus-registry.el (gnus-registry-use-long-group-names): new variable
-       (gnus-registry-add-group): use it
-       (gnus-registry-trim-articles-without-groups): new variable
-       (gnus-registry-delete-group): use it
-       (gnus-registry-unload-hook): uninstall all the hooks
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Don't use
+       mm-w3m-local-map-property.
 
-       * spam.el (spam-install-hooks-function, spam-unload-hook): new
-       functions so users that load spam.el for customization don't get
-       all the hooks installed
-       (spam-install-hooks): new variable, set to t by default if user
-       has one of the spam-use-* variables set
+       * mm-view.el (mm-w3m-mode-map): Remove.
+       (mm-w3m-local-map-property): Remove.
+       (mm-inline-text-html-render-with-w3m): Don't use
+       mm-w3m-local-map-property.
 
-       * spam-stat.el (spam-stat-install-hooks, spam-stat-unload-hook): new
-       functions so users that load spam-stat.el for customization don't get
-       all the hooks installed
+2004-01-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-2003-05-30  Dave Love  <fx@gnu.org>
+       * run-at-time.el: New file.
 
-       * rfc2047.el (rfc2047-decode): Don't use
-       mm-with-unibyte-current-buffer.
+       * dgnushack.el (dgnushack-compile): Don't compile run-at-time
+       under Emacs.
 
-       * qp.el (quoted-printable-decode-string): Use
-       mm-with-unibyte-buffer.
+       * gnus.el ((fboundp 'gnus-set-text-properties)): Remove definition
+       of gnus-set-text-properties.
 
-2003-05-29  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnus-uu.el (gnus-uu-save-article): Ditto.
 
-       * gnus-registry.el (gnus-registry-save): allow forced saving even
-       when registry is not dirty.  Use gnus-registry-trim to shorten the
-       gnus-registry-alist.
-       (gnus-registry-max-entries): new variable
-       (gnus-registry-trim): new function, trim gnus-registry-alist to
-       size gnus-registry-max-entries, sorting by entry mtime so the
-       newest entries stick around
+       * gnus-salt.el (gnus-carpal-setup-buffer): Ditto.
 
-       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): instead of
-       just one specific variable, allow a list of specific variables
+       * gnus-cite.el (gnus-cite-parse): Ditto.
 
-2003-05-28  Dave Love  <fx@gnu.org>
+       * gnus-art.el (gnus-button-push): Use set-text-properties instead
+       of gnus-.
 
-       * rfc2047.el (rfc2047-encode-region): Skip ASCII at beginning and
-       end of region.
+       * gnus-xmas.el (run-at-time): Require run-at-time.
 
-2003-05-28  Jesper Harder  <harder@ifa.au.dk>
+       * gnus.el: Changed calls to nnheader-run-at-time and
+       password-run-at-time throughout to use run-at-time directly.
 
-       * lpath.el: Add put-char-table and get-char-table.
+       * password.el: Removed definition of run-at-time.
 
-2003-05-28  Teodor Zlatanov  <tzz@lifelogs.com>
+       * nnheaderxm.el: Remove definition of run-at-time.
 
-       * gnus-registry.el (gnus-registry-dirty): flag for modified registry
-       (gnus-registry-save, gnus-registry-read)
-       (gnus-registry-store-extra, gnus-registry-clear): use it (note
-       that gnus-registry-store-extra is invoked for all modifications to
-       set the mtime, so gnus-registry-dirty only needs to be set there)
+2004-01-05  Karl Pfl\e,Ad\e(Bsterer  <sigurd@12move.de>
 
-2003-05-23  Simon Josefsson  <jas@extundo.com>
+       * mml.el (mml-minibuffer-read-disposition): Show attachment type
+       in prompt (tiny change)
 
-       * mml1991.el (mml1991-pgg-sign): Use mml-sender instead of
-       message-sender.
+2004-01-06  Steve Youngs  <sryoungs@bigpond.net.au>
 
-       * gnus-art.el (gnus-use-idna): Check if idna-program is installed.
+       * messagexmas.el (message-xmas-redefine): Alias
+       `message-make-caesar-translation-table' to
+       ``message-xmas-make-caesar-translation-table' regardless of XEmacs
+       version.
 
-       * message.el (message-use-idna): Ditto.
+       * gnus-xmas.el (gnus-xmas-set-text-properties): Removed.
+       (gnus-xmas-define): Don't alias `gnus-set-text-properties' to
+       `gnus-xmas-set-text-properties'.
+       (gnus-xmas-redefine): Don't alias `gnus-completing-read' to
+       `gnus-xmas-completing-read'. 
+       (gnus-xmas-completing-read): Removed.
+       (gnus-xmas-open-network-stream): Removed.
 
-2003-05-20  Dave Love  <fx@gnu.org>
+       * gnus-ems.el (gnus-mode-line-modified): Don't conditionalise on
+       XEmacs version.
 
-       * rfc2047.el (rfc2047-q-encoding-alist): Deleted.
-       (rfc2047-q-encode-region): Don't use it.
-       (rfc2047-encode-message-header) <(eq method 'mime)>: Bind
-       rfc2047-encoding-type to `mime'.
-       (rfc2047-encode-string, rfc2047-encode): Doc fix.
+       * dns.el (dns-make-network-process): Use `open-network-stream'
+       instead of `gnus-xmas-open-network-stream'.
 
-2003-05-20  Jesper Harder  <harder@ifa.au.dk>
+       * dgnushack.el: Remove some XEmacs 21.1 specific stuff.
 
-       * message.el (message-send-mail): Don't insert a courtesy copy
-       notice in base64 encoded messages.
+       * .cvsignore: Add auto-autoloads.el, custom-load.el.
 
-2003-05-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+2004-01-06  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-sum.el (gnus-summary-move-article): Don't copy expirable
-       marks if the destination group is not auto-expirable.
+       * gnus-art.el (gnus-mime-display-alternative)
+       (gnus-insert-mime-button, gnus-insert-mime-security-button)
+       (gnus-insert-prev-page-button, gnus-insert-next-page-button):
+       Don't use gnus-local-map-property.
 
-2003-05-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-util.el (gnus-local-map-property): Remove.
 
-       * dgnushack.el (assq-delete-all): Removed the compiler macro.
+       * mm-view.el (mm-view-pkcs7-decrypt): Replace
+       gnus-completing-read-maybe-default with completing-read.
 
-2003-05-14  Kevin Greiner <kgreiner@xpediantsolutions.com>
+       * gnus-util.el (gnus-completing-read): do.
+       (gnus-completing-read-maybe-default): Remove.
 
-       * gnus-agent.el (gnus-agentize): Updated documentation to match
-       usage.
-       (gnus-agent-expire-group-1): Do not skip over a group when the
-       force argument is set.
-       * gnus.el (gnus-agent): Updated documentation to reflect that
-       gnus-agent now defaults to t.
+2004-01-06  Steve Youngs  <sryoungs@bigpond.net.au>
 
-2003-05-14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * password.el: Only autoload `run-at-time' if not XEmacs.
+       Only autoload the itimer functions if XEmacs.
 
-       * gnus.el (gnus-version-number): Bump.
+2004-01-06  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-2003-05-14 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+       * gnus-xmas.el (gnus-xmas-define): Defun char-width for non-MULE
+       XEmacsen.
 
-       * gnus.el: Gnus v5.10.2 is released.
+       * dgnushack.el: Autoload executable-find for XEmacs.
 
-2003-05-14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-01-06  Jesper Harder  <harder@ifa.au.dk>
 
-       * mail-source.el (mail-source-delete-incoming): Changed to t.
+       * gnus-art.el (gnus-read-string): Remove.
+       (gnus-summary-pipe-to-muttprint): Replace gnus-read-string with
+       read-string.
 
-       * rfc2047.el (rfc2047-syntax-table): Funcall.
+2004-01-05  Teodor Zlatanov  <tzz@lifelogs.com>
 
-       * lpath.el ((featurep 'xemacs)): Added set-char-table-range.
-       ((featurep 'xemacs)): No, don't.
+       * netrc.el: autoload password-read
+       (netrc): new configuration group
+       (netrc-encoding-method, netrc-openssl-path): configuration
+       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
+       decoding if netrc-encoding-method is non-nil but otherwise
+       behavior is standard
+       (netrc-encrypting-method, netrc-encrypt, netrc-parse):
+       s/encode/encrypt/ everywhere
 
-       * rfc2047.el (rfc2047-encodable-p): Use the header charset.
+       * spam.el: remove executable-find autoload
 
-       * gnus-sum.el (gnus-summary-reselect-current-group): Supply
-       leave-hidden.
+2004-01-05  Jesper Harder  <harder@ifa.au.dk>
 
-2003-05-14  Jonathan Kamens  <jik@kamens.brookline.ma.us>
+       * gnus-registry.el: Remove Emacs 20 hash table compatibility code.
 
-       * gnus-sum.el (gnus-summary-exit): Added `leave-hidden'.  (Tiny
-       patch.)
+       * gnus-uu.el (gnus-uu-post-encoded): bury-buffer is always fbound.
 
-2003-05-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+2004-01-05  Reiner Steib  <Reiner.Steib@gmx.de>
 
-       * gnus-registry.el (gnus-registry-store-extra-entry): Use
-       gnus-assq-delete-all.
+       * gnus-art.el (gnus-treat-ansi-sequences,
+       article-treat-ansi-sequences): New variable and function.
+       Suggested by Dan Jacobson <jidanni@jidanni.org>.
 
-       * gnus-xmas.el (gnus-xmas-assq-delete-all): New function.
+       * gnus-sum.el (gnus-summary-wash-map, gnus-summary-make-menu-bar):
+       Use it.
 
-       * message.el (message-ignored-bounced-headers): Add Delivered-To.
+2004-01-05  Jesper Harder  <harder@ifa.au.dk>
 
-       * gnus-sum.el (gnus-summary-find-next): Indent.
-       (gnus-summary-find-prev): Ditto.
-       (gnus-summary-catchup): Doc fix.
-       (gnus-summary-mark-current-read-and-unread-as-read): New function.
-       (gnus-summary-catchup): Really mark after point.
+       * mm-util.el (mm-quote-arg): Remove.
 
-       * gnus-util.el (gnus-user-date): Use %d instead of %m.
-       (gnus-user-date): Use floating point time so that we don't get
-       overflows.
+       * mm-decode.el (mm-mailcap-command): Replace mm-quote-arg with
+       shell-quote-argument.
 
-       * gnus-sum.el (gnus-summary-local-variables): Clean up.
+       * gnus-uu.el (gnus-uu-command): do.
 
-       * gnus-fun.el (gnus-display-x-face-in-from): Don't use centering
-       since none of the other image things do.
+       * gnus-sum.el (gnus-summary-insert-pseudos): do.
 
-2003-05-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * ietf-drums.el (ietf-drums-token-to-list): Replace mm-make-char
+       with make-char.
 
-       * dgnushack.el (assq-delete-all): New compiler macro for Emacs 20.
+       * mm-util.el (mm-make-char): Remove.
 
-2003-05-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * mml.el (mml-mode): Replace gnus-add-minor-mode with
+       add-minor-mode.
 
-       * lpath.el: Fbind find-coding-system.
+       * gnus-undo.el (gnus-undo-mode): do.
 
-       * dgnushack.el (dgnushack-make-load): Remove redundant format call
-       in message.  Suggested by Yoichi NAKAYAMA <yoichi@geiin.org>.
-       * pop3.el (pop3-movemail): Ditto.
+       * gnus-topic.el (gnus-topic-mode): do.
 
-2003-05-12  Colin Marquardt <c.marquardt@alcatel.de>  (tiny change)
+       * gnus-sum.el (gnus-dead-summary-mode): do.
 
-       * gnus.el (gnus-agent): Docstring fix.
+       * gnus-start.el (gnus-slave-mode): do.
 
-2003-05-12  Teodor Zlatanov  <tzz@lifelogs.com>
+       * gnus-salt.el (gnus-binary-mode, gnus-pick-mode): do.
 
-       * gnus-registry.el (gnus-registry-install): new variable
-       (gnus-registry-fetch-extra, gnus-registry-fetch-extra-entry)
-       (gnus-registry-store-extra-entry, gnus-registry-delete-group)
-       (gnus-registry-add-group): add a modification timestamp to each entry
-       (gnus-registry-install-hooks): new function
+       * gnus-ml.el (gnus-mailing-list-mode): do.
 
-2003-05-12  Kevin Greiner <kgreiner@xpediantsolutions.com>
+       * gnus-gl.el (gnus-grouplens-mode): do.
 
-       * gnus-agent.el (gnus-agent-cat-name): Eval macro while compiling.
-       (gnus-agent-cat-disable-undownloaded-faces): New function.
-       Accessor for new agent property
-       'agent-disable-undownloaded-faces'.
-       gnus-cus.el (gnus-agent-parameters): Added
-       agent-disable-undownloaded-faces and corrected documentation.
-       (gnus-agent-cat-prepare-category-field,
-       gnus-agent-customize-category): Changed to avoid creating free
-       references to each field's symbol.
-       gnus-sum.el (gnus-summary-use-undownloaded-faces): New local variable.
-       (gnus-select-newgroup): Initialize it.
-       (gnus-summary-highlight-line): Use it.
+       * gnus-draft.el (gnus-draft-mode): do.
 
-2003-05-12  Dave Love  <fx@gnu.org>
+       * gnus-dired.el (gnus-dired-mode): do.
 
-       * mm-util.el (mm-read-charset): Deleted.
-       (mm-coding-system-mime-charset): New.
-       (mm-read-coding-system, mm-mule-charset-to-mime-charset)
-       (mm-charset-to-coding-system, mm-mime-charset)
-       (mm-find-mime-charset-region): Use it.
-       (mm-default-multibyte-p): Fix non-mule case.
+       * gnus-ems.el (gnus-add-minor-mode): Remove.
 
-       * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-bol): Eval
-       and compile.
-       (rfc2047-syntax-table): Fix building table to work in Emacs 22.
-       (rfc2047-unfold-region): Delete unused var `leading'.
+       * gnus-spec.el (gnus-correct-length, gnus-correct-substring):
+       Replace gnus-char-width with char-width.
 
-2003-05-12  Simon Josefsson  <jas@extundo.com>
+       * gnus-ems.el (gnus-char-width): Remove.
 
-       * pgg.el (pgg-temp-buffer-show-function): Reuse existing visible
-       output window if one is available.  Tiny patch from Ville Skytt\e,Ad\e(B
-       <scop@xemacs.org>.
+       * gnus-spec.el (gnus-correct-length, gnus-correct-substring):
+       Replace gnus-char-width with char-width.
 
-2003-05-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-ems.el (gnus-char-width): Remove.
 
-       * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Added
-       space.
+       * spam-stat.el (with-syntax-table): Remove with-syntax-table
+       definition.
+       Remove Emacs 20 hash table compatibility code.
 
-2003-05-11  Jesper Harder  <harder@ifa.au.dk>
+       * rfc2047.el (with-syntax-table): Remove with-syntax-table Emacs
+       20 compatibility code.
 
-       * gnus-sum.el (gnus-summary-enter-digest-group): Don't do article
-       washing etc.
-       (gnus-handle-ephemeral-exit): Don't reload article after exiting.
+       * spam.el (spam-point-at-eol): Replace with point-at-eol.
 
-       * nndoc.el (nndoc-type-alist): `mime-digest' should be before
-       `mime-parts'.
+       * smime.el (smime-point-at-eol): Replace with point-at-eol.
 
-2003-05-10  Jesper Harder  <harder@ifa.au.dk>
+       * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-eol): Replace
+       with point-at-{eol,bol}.
 
-       * gnus-cite.el (gnus-article-hide-citation-maybe): Make toggling
-       work.  Update mode-line.
+       * netrc.el (netrc-point-at-eol): Replace with point-at-eol.
 
-2003-05-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * imap.el (imap-point-at-eol): Replace with point-at-eol.
 
-       * gnus.el (gnus-logo-color-alist): Added no colours.
+       * flow-fill.el (fill-flowed-point-at-bol,
+       fill-flowed-point-at-eol): Replace with point-at-{eol,bol}.
 
-2003-05-09  Dave Love  <fx@gnu.org>
+       * gnus-util.el (gnus-point-at-bol, gnus-point-at-eol): Remove.
+       Replace with point-at-{eol,bol} throughout all files.
 
-       * utf7.el (mm-util): Require.
-       (utf7-direct-encoding-chars, utf7-imap-direct-encoding-chars):
-       Defconst, not defvar.
-       (utf7-utf-16-coding-system): New.
-       (utf7-encode-internal): Hoist concat out of loop.
-       (utf7-fragment-encode): Use mm-with-unibyte-current-buffer.
-       (utf7-get-u16char-converter) [utf7-utf-16-coding-system]: New
-       case.
-       (utf7-latin1-u16-char-converter): Encode the region.
-       (utf7-u16-latin1-char-converter): Decode the region.
-       (utf7-encode, utf7-decode): Fix multibyteness.
+2004-01-05  Katsumi Yamaoka  <yamaoka@jpl.org>
 
-       * mm-bodies.el (mm-body-7-or-8): Don't special-case mule.
-       (mm-encode-body): Use mm-read-coding-system, not mm-read-charset.
-       (mm-uu-yenc-decode-function): Defvar when compiling.
-       (mm-encode-body, mm-decode-body): Doc fix.
+       * ntlm.el (ntlm-string-as-unibyte): New macro.
+       (ntlm-build-auth-response): Use it.
 
-2003-05-09  Teodor Zlatanov  <tzz@lifelogs.com>
+       Remove Emacs 20 stuff:
+       * dgnushack.el (dgnushack-compile): Don't modify max-specpdl-size.
+       (butlast, mapc, remove): Remove the compiler macros.
+       * gnus-msg.el (gnus-summary-news-other-window): Use remove instead
+       of delq and copy-sequence.
+       * gnus-art.el (popup-menu): Remove the compiler macro.
+       * nnmail.el (nnmail-split-fancy): Don't support customizing with
+       Emacs 20.
 
-       * gnus-registry.el (gnus-registry-unregistered-group-regex):
-       removed in favor of the group/topic/global variables
-       (gnus-registry-register-message-ids): fixed test to omit
-       gnus-registry-unregistered-group-regex
+2004-01-05  Simon Josefsson  <jas@extundo.com>
 
-       * gnus.el (gnus-variable-list): removed gnus-registry-alist and
-       gnus-registry-headers-alist from the list
-       (gnus-registry-headers-alist): removed
-       (registry-ignore): new parameter, with accompanying
-       gnus-registry-ignored-groups global variable
+       * ntlm.el: Fix namespace.  Change smb-passwd-hash into
+       ntlm-smb-passwd-hash, smb-owf-encrypt into ntlm-smb-owf-encrypt,
+       smb-passwd-hash into ntlm-smb-passwd-hash, smbdes-e-p16 into
+       ntlm-smb-des-e-p16, smbdes-e-p24 into ntlm-smb-des-e-p24, smbhash
+       into ntlm-smb-hash, smb-sp8 into ntlm-smb-sp8, smb-str-to-key into
+       ntlm-smb-str-to-key, smb-dohash into ntlm-smb-dohash, smb-perm1
+       into ntlm-smb-perm1, smb-perm2 into ntlm-smb-perm2, smb-perm3 into
+       ntlm-smb-perm3, smb-perm4 into ntlm-smb-perm4, smb-perm5 into
+       ntlm-smb-perm5, smb-perm6 into ntlm-smb-perm6, smb-sc into
+       ntlm-smb-sc, smb-sbox into ntlm-smb-sbox, string-permute into
+       ntlm-string-permute, string-lshift into ntlm-string-lshift,
+       string-xor into ntlm-string-xor.  Suggested by
+       Jesper Harder <harder@myrealbox.com>.
 
-       * gnus-start.el (gnus-clear-system): no need to clear the
-       registry, we can do it ourselves
-       (gnus-gnus-to-quick-newsrc-format): extra parameters so it can be
-       used by gnus-registry.el
-
-       * 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 <jdc@chow.mat.jhu.edu>
-       (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
+       * ntlm.el: Don't include poem.
 
-2003-05-09  Jesper Harder  <harder@ifa.au.dk>
+       * md4.el (print-int32, print-string-hexa): Remove.  Suggested by
+       Jesper Harder <harder@myrealbox.com>.
 
-       * gnus-picon.el (gnus-picon-transform-address): Parse the encoded
-       address.
+       * sasl-ntlm.el, ntlm.el, md4.el: New files.
 
-2003-05-08  Teodor Zlatanov  <tzz@lifelogs.com>
+       * hmac-md5.el (md5-binary): Fix byte compile warning.  (This
+       probably breaks emacs with DL patch, but do we care? Is anyone
+       still using the DL stuff?)
 
-       * gnus-start.el (gnus-clear-system): added gnus-registry-alist to
-       the list of cleared variables
+       * sieve-manage.el: Use the password package.
+       (sieve-manage-read-passwd): Remove.
+       (sieve-manage-interactive-login): Use password.  Re-add
+       condition-case around loop.
 
-       * gnus-registry.el (gnus-registry-split-fancy-with-parent):
-       nnmail-split-fancy-with-parent-ignore-groups can be a single regex
-       in addition to a list of regexes.
+       * pgg.el (pgg-passphrase-cache, pgg-run-at-time): Remove.
+       (pgg-add-passphrase-cache, pgg-remove-passphrase-cache): Use
+       the password package.
 
-       * spam.el (spam-use-regex-headers): docstring fix.  From Niklas
-       Morberg <niklas.morberg@axis.com>
+2003-02-19  Simon Josefsson  <jas@extundo.com>
 
-2003-05-08  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+       * sieve-manage.el (sieve-sasl-auth): Quote optional initial SASL
+       token.
 
-       * gnus-sum.el (gnus-summary-next-page): Mention
-       `gnus-article-skip-boring' in docstring.
+2002-08-07  Simon Josefsson  <jas@extundo.com>
 
-2003-05-08  Jesper Harder  <harder@ifa.au.dk>
+       * sieve-manage.el (require): Use SASL, not RFC2104/MD5.
+       (sieve-manage-authenticators):
+       (sieve-manage-authenticator-alist): Add some SASL mechs.
+       (sieve-sasl-auth): New function.
+       (sieve-manage-cram-md5-auth):
+       (sieve-manage-plain-auth): Rewrite using SASL library.
+       (sieve-manage-digest-md5-p, sieve-manage-digest-md5-auth)
+       (sieve-manage-scram-md5-p, sieve-manage-scram-md5-auth)
+       (sieve-manage-ntlm-p, sieve-manage-ntlm-auth)
+       (sieve-manage-login-p, sieve-manage-login-auth): Add wrappers.
 
-       * rfc2231.el (rfc2231-parse-string): "=" should have whitespace
-       syntax here.
+2004-01-05  Simon Josefsson  <jas@extundo.com>
 
-       * ietf-drums.el (ietf-drums-syntax-table): "=" should not have
-       whitespace syntax class when parsing email addresses.
+       * sasl.el, sasl-cram.el, sasl-digest.el, hmac-md5.el, hmac-def.el:
+       New files.
 
-       * message.el (message-forward-subject-name-subject): Don't use
-       mail-decode-encoded-word-string before parsing from.
+2004-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-2003-05-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-group.el (gnus-no-groups-message): Update.
 
-       * message.el (message-setup-1): Setup alternative email before
-       generate-headers.
+       * gnus-sum.el (gnus-summary-insert-new-articles): Remove . 
 
-       (message-forward-subject-name-subject): Fix the case when the
-       field "from" doesn't exist.
+2003-11-09  Simon Josefsson  <jas@extundo.com>
 
-2003-05-07  Dave Love  <fx@gnu.org>
+       * imap.el: Support for ID IMAP extension (RFC 2971).
+       (imap-local-variables): Add imap-id.
+       (imap-id): New variable.
+       (imap-id): New function.
+       (imap-parse-response): Parse untagged ID response.
+       * nnimap.el (nnimap-id): New variable.
+       (nnimap-open-connection): Use it.
 
-       * rfc2047.el (rfc2047-encode-region): Skip \n as whitespace.
+2003-12-28  Simon Josefsson  <jas@extundo.com>
 
-       * mm-util.el (mm-find-mime-charset-region): Expurgate utf-16 from
-       possible values.
+       * gnus-score.el (gnus-score-edit-all-score): New.
+       * gnus-group.el (gnus-group-score-map): Bind it to W e.
 
-2003-05-07  Jesper Harder  <harder@ifa.au.dk>
+2004-01-04  Simon Josefsson  <jas@extundo.com>
 
-       * message.el (message-kill-to-signature): Fix.
+       * password.el: Add.
 
-2003-05-06  Jesper Harder  <harder@ifa.au.dk>
+2004-01-04  Mario Lang  <lang@zid.tugraz.at>
 
-       * gnus-sum.el (gnus-auto-goto-ignores): Docstring fix.
+       * dns.el: Add support for AAAA records (see RFC 3596)
 
-       * gnus-art.el (gnus-mime-display-multipart-as-mixed)
-       (gnus-mime-display-multipart-related-as-mixed)
-       (gnus-button-mid-or-mail-heuristic-alist): do.
+       * Fix typo PRT -> PTR
 
-2003-05-05  Dave Love  <fx@gnu.org>
+       * Parse MX, PTR and SOA replies (see RFC 1035)
 
-       * mm-util.el (mm-default-multibyte-p): New.
-       (mm-coding-system-p): Maybe use find-coding-systems.
-
-2003-05-04  Dave Love  <fx@gnu.org>
-
-       * rfc2047.el (with-syntax-table): Define if necessary.
-       (rfc2047-syntax-table): Fix last change for XEmacs.
-       (rfc2047-parse-and-decode): Revert last change.
-
-2003-05-03  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus.el: Don't test for `mm-guess-mime-charset'.
-
-       * mm-util.el (mm-guess-mime-charset): Remove.  Not used any more.
-
-       * gnus.el (gnus-default-charset): Set default value to
-       `undecided'.
-
-       * gnus-art.el (article-decode-charset): Don't supply 4th arg to
-       mm-decode-body.
-
-       * 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 <deskpot@despammed.com>  (tiny change)
-
-       * gnus-util.el (gnus-multiple-choice): Add ", ?".
-
-2003-05-03  Dave Love  <fx@gnu.org>
-
-       * rfc2047.el (rfc2047-syntax-table): Don't call make-char-table
-       with 2 args.
-       (rfc2047-decode-string): Don't set the buffer multibyte before
-       calling buffer-string.
-
-       * mm-encode.el (mm-long-lines-p): Autoload.
-       (mm-encode-content-transfer-encoding): Doc fix.  Don't make buffer
-       unibyte.  Signal error on unknown encoding.
-       (mm-encode-buffer, mm-qp-or-base64): Doc fix.
-
-       * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-eol): New.
-       Callers of gnus- versions changed to use them.
-       (rfc2047-header-encoding-alist): Add `address-mime' part.  Doc
-       fixes.
-       (rfc2047-encoding-type): New.
-       (rfc2047-encode-message-header): Use mm-charset-to-coding-system.
-       Don't include header name field in encoding.  Add `address-mime'
-       case and bind rfc2047-encoding-type for `mime' case.
-       (rfc2047-encodable-p): Deleted.
-       (rfc2047-syntax-table): New.
-       (rfc2047-encode-region, rfc2047-encode): Rewritten to take account
-       of rfc2047 rules with respect to rfc2822 tokens and to do encoding
-       in place rather than by passing strings.
-       (rfc2047-encode-string): Doc fix.
-       (rfc2047-q-encode-region): Don't use
-       mm-with-unibyte-current-buffer.
-       (rfc2047-encoded-word-regexp): eval-and-compile.
-       (rfc2047-decode-region): Avoid concatenation in loop.
-       (rfc2047-parse-and-decode): Remove useless disjunction.
-
-2003-05-02  Dave Love  <fx@gnu.org>
-
-       * rfc2047.el (rfc2047-q-encode-region, rfc2047-decode): Use
-       mm-with-unibyte-current-buffer.
-       (ietf-drums, gnus-util): don't require.
-
-       * sieve.el (sieve-manage-mode-menu): Define before use.
-
-       * mml-smime.el (message-narrow-to-headers): Autoload.
-
-       * mm-util.el (mm-coding-system-p): Don't override nil from
-       coding-system-p.
-       (mm-mule4-p, mm-disable-multibyte-mule4)
-       (mm-with-unibyte-current-buffer-mule4): Deleted.
-       (mm-multibyte-p): Use defun, not defalias.
-       (mm-make-temp-file): Moved to group at top of file.
-       (mm-point-at-eol, mm-point-at-bol): New.
-
-       * gnus-cite.el (gnus-art): Require.
-
-       * gnus-ems.el (gnus-get-buffer-create)
-       (nnheader-find-etc-directory, message-text-with-property):
-       Autoload.
-       (gnus-tmp-unread, gnus-tmp-replied, gnus-tmp-score-char)
-       (gnus-tmp-indentation, gnus-tmp-opening-bracket, gnus-tmp-lines)
-       (gnus-tmp-name, gnus-tmp-closing-bracket, gnus-tmp-subject-or-nil)
-       (gnus-check-before-posting): Only defvar when compiling.
-
-       * gnus-int.el (gnus-agent-expire): Autoload, don't defun.
-
-       * gnus-util.el (rmail-default-rmail-file, mm-text-coding-system):
-       Defvar when compiling.
-       (gnus-output-to-rmail): Require mm-util.
-
-       * mail-source.el (mail-source-callback): Use mm-make-temp-file.
-       (mail-source-make-complex-temp-name): Deleted.
-
-       * message.el (message-use-idna): Use mm-coding-system-p.
-       (message-tokenize-header, message-make-organization)
-       (message-make-from):  Use with-temp-buffer.
-       (message-set-work-buffer): Deleted.
-       (message-fill-paragraph): Use `if' not `and' for compiler warning.
-       (message-check-news-header-syntax): Remove useless lambda.
-       (message-forward-make-body): Use mm-disable-multibyte,
-       mm-with-unibyte-current-buffer, mm-enable-multibyte.
-       (message-replace-chars-in-string): Deleted.
-
-       * mm-extern.el (mm-extern-local-file): Use mm-disable-multibyte.
-       (mm-extern-url): Use mm-with-unibyte-current-buffer,
-       mm-disable-multibyte.
-       (mm-extern-anon-ftp): Use mm-disable-multibyte.
-
-       * mml1991.el (mml1991-mailcrypt-encrypt, mml1991-gpg-encrypt): Use
-       mm-with-unibyte-current-buffer.
-
-       * mml2015.el (mml): Require.
-       (mml2015-mailcrypt-encrypt, mml2015-gpg-encrypt): Use
-       mm-with-unibyte-current-buffer.
-
-       * nnheader.el (gnus-util): Require.
-
-       * nntp.el (format-spec, format-spec-make, open-tls-stream):
-       Autoload.
-
-       * rfc2231.el (mail-header-remove-comments, mm-encode-body)
-       (mail-header-remove-whitespace): Autoload.
-
-       * sieve-manage.el (starttls-negotiate): Autoload.
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnrss.el (nnrss-find-rss-via-syndic8): Indent.
-
-2003-05-01  Mark A. Hershberger  <mah@everybody.org>
-
-       * nnrss.el (nnrss-find-rss-via-syndic8): Don't error out.
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump.
-
-2003-05-01  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam-report.el (spam-report-gmane-regex): docstring fix.  From
-       Jon Ericson <Jon.Ericson@jpl.nasa.gov> (tiny change)
-
-       * gnus.el (gnus-install-group-spam-parameters): docstring fix.
-       From Jon Ericson <Jon.Ericson@jpl.nasa.gov> (tiny change)
-
-       * gnus-registry.el (gnus-registry-fetch-extra)
-       (gnus-registry-store-extra, gnus-registry-group-count): new functions
-       (gnus-registry-fetch-group, gnus-registry-delete-group)
-       (gnus-registry-add-group): changed to work with extra data element
-       if present
-
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Gnus v5.10.1 is released.
-
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.24 is released.
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * dgnushack.el (when): Check whether defadvice is fbound.
-
-2003-05-01  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-registry.el (gnus-registry-unregistered-group-regex): new variable
-       (gnus-registry-register-message-ids): use it
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump.
-
-       * gnus.el: Update copyright for several files.
-
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.23 is released.
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * spam-stat.el (spam-stat-test-directory): Compare against zero.
-
-2003-05-01  Trey Jackson <tjackson@ichips.intel.com>  (tiny change)
-
-       * spam-stat.el (spam-stat-test-directory): Skip 0 length files.
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-forward-subject-name-subject): Decode
-       string when forwarding.
-
-2003-05-01  Oystein Viggen  <oysteivi@tihlde.org>
-
-       * dgnushack.el (when): Add defadvice.
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump.
-
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.22 is released.
-
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.21 is released.
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump.
-
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.20 is released.
-
-2003-05-01  Vasily Korytov  <deskpot@despammed.com>
-
-       * gnus-dired.el (gnus-dired-mode-map): Move to C-c C-l.
-
-2003-04-30  Mark A. Hershberger  <mah@everybody.org>
-
-       * mm-url.el (mm-url-insert-file-contents): set url-current-object
-       in the case where mm-url-use-external is set.
-
-       * nnrss.el (nnrss-request-article): Change the messages created to
-       multipart/alternative.  Hopefully fixes a problem interaction with
-       w3m.
-       (nnrss-find-rss-via-syndic8): Better handling if xml-rpc.el isn't
-       around.
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-check-news-header-syntax): Alter "posting"
-       message.
-
-       * nnrss.el (nnrss-node-text): Don't use char classes.
-
-2003-05-01  David Z. Maze  <dmaze@mit.edu>
-
-       * nnrss.el (nnrss-find-rss-via-syndic8): Have an `error' branch
-       in condition-case.
-
-2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-required-headers): Remove In-Reply-To.
-
-       * gnus-int.el (gnus-open-server): Revert changes.
-
-2003-04-30  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
-
-       * gnus-int.el (gnus-open-server): Try to open unagentized servers
-       even when unplugged.
-
-2003-04-30  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-prefer-mid-or-mail): Fixed typo in
-       doc-string.
-
-2003-05-01  Steve Youngs  <youngs@xemacs.org>
-
-       * lpath.el: Add a section for non-Mule XEmacsen.
-       fbind `find-charset-string' and `coding-system-base' in that
-       section.
-
-       * gnus-util.el (gnus-completing-read-maybe-default): New.
-       (gnus-completing-read): Use it.
-
-       * mm-view.el (mm-view-pkcs7-decrypt): Ditto.
-
-       * gnus-art.el (gnus-read-string): New.
-       (gnus-summary-pipe-to-muttprint): Use it.
-
-       * gnus-xmas.el (gnus-xmas-open-network-stream): New.
-
-       * dns.el (dns-make-network-process): Use it.
-
-       Take care of some differences between XEmacs 21.1 and newer
-       versions of XEmacs.
-
-2003-04-30  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-registry.el (gnus-registry-split-fancy-with-parent): added
-       diagnostic message
-       (gnus-registry-grep-in-list): don't run when word is nil
-       (gnus-registry-fetch-message-id-fast): new function
-       (gnus-registry-delete-group, gnus-registry-add-group): make sure
-       the id and group are not nil
-       (gnus-registry-register-message-ids): new function
-       (gnus-register-action): optimized logical flow
-       (gnus-summary-prepare-hook): added gnus-registry-register-message-ids
-
-2003-04-30  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
-
-       * gnus-delay.el (gnus-delay-article): Call
-       `gnus-agent-queue-setup' to create the delay group.
-
-       * gnus-agent.el (gnus-agent-queue-setup): Support optional arg
-       for the (queue) group name.
-
-2003-04-30  Simon Josefsson  <jas@extundo.com>
-
-       * mm-util.el (mm-charset-to-coding-system): Use user specified
-       charset unless coding-system-get is fboundp.
-
-2003-04-30  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-cat-defaccessor, gnus-agent-cat-name):
-       Wrapped in eval-when-compile.
-       (gnus-agent-mode): Bind gnus-agent-go-online to nil as you
-       shouldn't be asked twice to go online with each server.
-       (gnus-agent-get-undownloaded-list, gnus-agent-fetch-articles,
-       gnus-agent-crosspost, gnus-agent-flush-cache,
-       gnus-agent-fetch-session, gnus-agent-unread-articles,
-       gnus-agent-uncached-articles, gnus-agent-regenerate-group,
-       gnus-agent-group-covered-p): Expanded pop macros used for
-       effect. Avoids compilation warning in emacs 21.3.
-
-       * gnus-int.el (gnus-open-server): Restructured to only open
-       nnagent when gnus-plugged is nil.
-
-2003-04-30  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * lpath.el: Fbind string-to-multibyte.
-
-2003-04-30  Steve Youngs  <youngs@xemacs.org>
-
-       * dgnushack.el: Add some missing autoloads for XEmacs 21.1.
-
-2003-04-29  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-registry.el (gnus-registry-fetch-group): faster
-       (gnus-registry-delete-group): new function
-       (gnus-registry-add-group): new function
-       (gnus-register-spool-action): use it
-       (gnus-register-action): use it
-       (gnus-registry-translate-from-alist)
-       (gnus-registry-translate-to-alist): remove the headers registry
-       for now
-
-2003-04-29  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-alist): Fixed CTAN regexp.
-
-2003-04-29  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam-report.el (spam-report-gmane): gnus-summary-article-number
-       is not necessary, just use the function parameter
-
-2003-04-29  Karl Pflysterer  <sigurd@12move.de>
-
-       * spam-stat.el (spam-stat-save): No longer font-locks the file
-       when saving
-
-2003-04-29  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * canlock.el: Bind mail-header-separator when compiling (XEmacs
-       provides it in mail-lib/auto-autoloads.el).
-
-2003-04-29  Simon Josefsson  <jas@extundo.com>
-
-       * mml2015.el (mml2015-pgg-sign): Use mml-sender instead of
-       message-sender.
-
-       * mml.el (mml-generate-mime-1): Set mml-sender too.
-
-2003-04-29  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-display-while-building): Docstring fix.
-
-       * mm-url.el (mm-url-use-external): do.
-
-2003-04-29  Simon Josefsson  <jas@extundo.com>
-
-       * canlock.el (mail-fetch-field): Autoload it (fix xemacs compile
-       warnings).
-
-       * sieve-mode.el (c-mode): Ditto.
-
-       * pgg.el (run-at-time): Ditto.
-
-       * mm-url.el (require): Require timer when compiling for
-       with-timeout macro (fix xemacs compile warnings).
-
-2003-04-28  Dave Love  <fx@gnu.org>
-
-       * gnus-util.el (nnheader): Don't require.
-       (Nnheader-narrow-to-headers, nnheader-replace-chars-in-string):
-       Autoload.
-
-       * spam.el: Require cl when compiling.
-
-       * dns.el: Require cl when compiling.
-
-2003-04-28  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-article-goto-next-page)
-       (gnus-article-goto-prev-page): Revert 2003-02-12 change to make
-       gnus-pick-mode work.
-
-2003-04-28  Steve Youngs  <youngs@xemacs.org>
-
-       * Makefile.in (FLAGS): Use @FLAGS@.
-
-2003-04-27  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-mime-display-multipart-as-mixed)
-       (gnus-mime-display-multipart-alternative-as-mixed)
-       (gnus-mime-display-multipart-related-as-mixed): Added doc-strings,
-       allow customization.
-
-2003-04-27  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * dgnushack.el (dgnushack-compile-verbosely): New function.  Not
-       currently called (See source for explanation).
-
-2003-04-27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-catchup): Don't mark ticked messages.
-       (gnus-summary-mark-read-and-unread-as-read): Take an optional
-       mark.
-
-       * gnus.el (gnus-version-number): Bump.
-
-2003-04-27 06:47:31 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.19 is released.
-
-2003-04-27  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-registry.el (gnus-register-spool-action): Replaced literal
-       carriage-return character with its escape sequence.
-
-2003-04-27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-catchup-from-here): Doc fix.
-
-       * nnrss.el (nnrss-node-text): Use only one
-       gnus-replace-in-string.
-
-       * gnus.el: Remove gnus-functionp throughout.
-
-       * gnus-util.el (gnus-functionp): Removed.
-
-       * gnus-msg.el (gnus-summary-wide-reply-with-original): Doc fix.
-
-       * message.el (message-required-headers): Add In-Reply-To.
-
-2003-04-27  Marshall T. Vandegrift  <vandem2@rpi.edu>
-
-       * gnus-fun.el (gnus-face-from-file): Bind coding-system-for-read
-       to binary.
-
-2003-04-27  Jesper Harder  <harder@ifa.au.dk>
-
-       * mml.el (mml-preview): do.
-
-       * message.el (message-mode): do.
-
-       * gnus-undo.el (gnus-undo-mode): do.
-
-       * gnus-topic.el (gnus-topic-mode): do.
-
-       * gnus-sum.el (gnus-summary-mode, gnus-summary-edit-article): do.
-
-       * gnus-msg.el (gnus-setup-message)
-       (gnus-inews-add-send-actions, gnus-configure-posting-styles): do.
-
-       * gnus-gl.el (gnus-grouplens-mode): do.
-
-       * gnus-art.el (gnus-mime-save-part-and-strip)
-       (gnus-mime-delete-part): Use it.
-
-       * gnus-util.el (gnus-make-local-hook): New function.
-
-2003-04-25  Simon Josefsson  <jas@extundo.com>
-
-       * nnrss.el (nnrss-node-text): Don't use a star.
-       (nnrss-node-text): Use g-r-i-s, not g-r-r-i-s which doesn't exist.
-
-2003-04-24  Dave Love  <fx@gnu.org>
-
-       * mm-encode.el (mm-long-lines-p): Autoload.
-       (mm-encode-content-transfer-encoding): Don't try to make buffer
-       unibyte before decoding.  Don't ignore errors for base64 encoding.
-
-       * qp.el (quoted-printable-decode-region): Use mm-insert-byte.
-       Signal error on malformed text, as for base64.
-       (quoted-printable-encode-region): DTRT in Emacs 22.
-
-       * mm-util.el (mm-make-temp-file, mm-insert-byte): New.
-       (mm-auto-save-coding-system): Consider utf-8-emacs.
-       (mm-mime-mule-charset-alist, mm-mule-charset-to-mime-charset)
-       (mm-charset-to-coding-system, mm-mime-charset)
-       (mm-find-mime-charset-region): Check for :mime-charset coding
-       systems property.
-
-       * mml-sec.el (mml2015, mml1991): Don't require.
-       (mml2015-sign, mml2015-encrypt, mml1991-sign, mml1991-encrypt)
-       (message-goto-body, mml-insert-tag): Autoload.
-
-       * mm-decode.el (mm-tmp-directory): Re-write to help avoid warnings.
-
-       * gnus-start.el (message-make-date): Autoload rather than
-       requiring message.
-
-       * gnus-group.el (gnus-group-name-charset-group-alist): Use
-       mm-coding-system-p.
-       (gnus-cache-active-altered): Defvar when compiling.
-       (gnus-group-delete-group): Re-write to help avoid warnings.
-
-       * gnus-art.el (gnus-use-idna): Use mm-coding-system-p.
-
-       * pgg.el: Split eval-when-compile forms.
-
-2003-04-24  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-group.el (gnus-large-ephemeral-newsgroup)
-       (gnus-fetch-old-ephemeral-headers): News variables.
-       (gnus-group-read-ephemeral-group): Use them.
-
-2003-04-24  Simon Josefsson  <jas@extundo.com>
-
-       * sieve.el (sieve-upload): Don't use replace-regexp-in-string.
-
-       * nnrss.el (nnrss-node-text): Ditto.
-
-2003-04-24  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-msg.el (gnus-inews-do-gcc): Make sure the obsolete variable
-       gnus-inews-mark-gcc-as-read exists.
-
-2003-04-23  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sieve.el (gnus-sieve-generate): Rewrite regexp search so it
-       doesn't exceed the regexp stack space.
-
-2003-04-23  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-msg.el (gnus-inews-mark-gcc-as-read): Don't defvar it.
-
-       * gnus-art.el (gnus-article-hide-pgp-hook): do.
-
-2003-04-23  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * mml.el (mml-preview): Bind `=', RET, and mouse-2.
-
-2003-04-23  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-bodies.el (mm-decode-body): Don't override supplied charset.
-
-2003-04-23  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * dgnushack.el (merge, copy-list): Remove compiler macros.
-       (butlast): Add a compiler macro.
-
-2003-04-22  Paul Jarc  <prj@po.cwru.edu>
-
-       * gnus-util.el (gnus-merge): Added "type" argument to match CL
-       merge and gnus-sum.el's expectations.
-
-2003-04-21  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-url-regexp): Added nntp.
-
-       * message.el (message-generate-headers-first): Default to
-       '(references).
-
-       * gnus-art.el (gnus-mime-delete-part): Require confirmation.
-
-2003-04-21  Jesper Harder  <harder@ifa.au.dk>
-
-       * smime.el (smime-decrypt-region): Insert From header.
-
-2003-04-21  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
-
-       * gnus-fun.el (gnus-face-from-file, gnus-convert-png-to-face):
-       Max length of header is 726, not 740.  From Gaute B Strokkenes
-       <gs234@cam.ac.uk>.
-
-2003-04-20  Jesper Harder  <harder@ifa.au.dk>
-
-       * nndb.el, mml1991.el: Fix license template.
-
-2003-04-20  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-split-articles): Don't download body unless
-       required.
-
-       * imap.el (imap-gssapi-open, imap-ssl-open): Erase buffer before
-       starting process, like imap-kerberos4-open does.
-
-       * mml-smime.el, rfc1843.el, dig.el, smime.el, uudecode.el: Fix
-       license template.
-
-       * mml-sec.el: Fix license template.
-
-       * gnus-sieve.el, sieve.el, sieve-manage.el, sieve-mode.el: Fix
-       license template.
-
-       * pgg-def.el, pgg.el, pgg-gpg.el, pgg-parse.el, pgg-pgp5.el,
-       pgg-pgp.el: Fix license template.
-
-2003-04-19  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-delete-article): Improve docstring.
-
-2003-04-19  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-move-spam-nonspam-groups-only): dumb typo fix
-
-2003-04-18  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-split): allow a particular check as a parameter,
-       e.g. (: spam-split 'spam-use-bogofilter)
-       (spam-mark-only-unseen-as-spam): new parameter, see doc
-       (spam-mark-junk-as-spam-routine): use
-       spam-mark-only-unseen-as-spam, simplify routine to take advantage
-       of gnus-newsgroup-unread as well as gnus-newsgroup-unseen
-
-2003-04-17  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus.el (gnus-group-short-name, gnus-group-prefixed-p): new functions
-       (gnus-group-guess-full-name): don't prefix the group twice
-
-       * nnmail.el (nnmail-split-fancy-with-parent): docstring fix
-
-       * gnus-registry.el (gnus-registry-clear)
-       (gnus-registry-fetch-group, gnus-registry-grep-in-list)
-       (gnus-registry-split-fancy-with-parent): new functions
-       (gnus-register-spool-action, gnus-register-action): simplified the format
-       (gnus-registry): new customization group
-       (gnus-registry-unfollowed-groups): new variable
-
-2003-04-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-button-alist): Add nntp: urls.
-       (gnus-header-button-alist): Ditto.
-
-2003-04-17  Dave Love  <fx@gnu.org>
-
-       * gnus-util.el (gnus-string-equal): Revert last change.
-
-2003-04-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-srvr.el (gnus-browse-make-menu-bar): Fix typo.
-
-2003-04-17  Mike Woolley  <mike@ariel.co.uk>
-
-       * gnus-sum.el (gnus-sum-thread-tree-false-root): New variable.
-
-2003-04-15  Michael Shields  <shields@msrl.com>
-
-       * gnus-art.el (article-hide-boring-headers): Hide Reply-To: if
-       the broken-reply-to group parameter is set.  Idea from Vasily
-       Korytov <deskpot@myrealbox.com>.
-
-2003-04-17  Steve Youngs  <youngs@xemacs.org>
-
-       * dgnushack.el: 'setenv' is in env.el for XEmacsen <= 21.4, but in
-       process.el in XEmacsen >= 21.5.
-
-2003-04-17  Steve Youngs  <youngs@xemacs.org>
-
-       * dgnushack.el: Add a whole swag of autoloads and defaliases to
-       satisfy the byte-compiler when building with XEmacs.
-
-       * lpath.el (maybe-bind): Add 'w3-meta-content-type-charset-regexp'
-       and 'w3-meta-charset-content-type-regexp' in XEmacs.  The upstream
-       W3 doesn't have these.
-
-       * mailcap.el: Maybe require 'lpr in XEmacs.
-
-2003-04-16  Simon Josefsson  <jas@extundo.com>
-
-       * mml2015.el (mml2015-pgg-sign): Bind pgg-default-user-id to MML
-       sender tag, if available.
-
-2003-04-16  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-registry.el (gnus-register-action)
-       (gnus-register-spool-action, hashtable-to-alist)
-       (gnus-registry-translate-from-alist, alist-to-hashtable)
-       (gnus-registry-translate-to-alist, gnus-registry-headers-hashtb):
-       new variables and function fixes
-
-       * gnus.el (gnus-registry-headers-alist): new variable to hold
-       article header data
-       (gnus-variable-list): save gnus-registry-headers-alist
-
-       * spam-report.el (Module): new module for spam reporting
-
-       * gnus.el (spam-process): added
-       gnus-group-spam-exit-processor-report-gmane to the list of choices
-       (gnus-install-group-spam-parameters): defined new spam exit processor
-
-       * spam.el (autoload): autoload spam-report-gmane when needed
-       (spam-report-gmane-register-routine): glue for spam-report.el
-       (spam-group-spam-processor-report-gmane-p): glue for the
-       gnus-group-spam-exit-processor-report-gmane spam processor
-       (spam-summary-prepare-exit): check the report-gmane spam processor
-       and run spam-report-gmane-register-routine if it's active
-
-       From John Wiegley <johnw@gnu.org>
-
-       * spam.el (spam-bogofilter-score): check bogofilter headers before
-       checking bogofilter itself
-
-2003-04-16  Dave Love  <fx@gnu.org>
-
-       * gnus-agent.el: Wrap defsetf in eval-when-compile.
-       (gnus-agent-cat-defaccessor): Don't use gensym.
-
-       * mml1991.el: Require cl, mm-util when compiling.
-       (quoted-printable-decode-region, quoted-printable-encode-region):
-       Autoload.
-
-       * pgg.el: Require cl when compiling.
-
-       * nnmail.el (gnus): Require.
-
-       * gnus-util.el: Move provide to end.
-       (gnus-string-equal): Maybe use compare-strings.
-       (gnus-merge): New.
-
-       * gnus-sum.el (gnus-summary-prepare-threads): Don't use copy-list.
-       (gnus-summary-insert-articles): Use gnus-merge.
-
-       * gnus-fun.el: Require cl and mm-util when compiling.
-
-       * gnus-diary.el (gnus-diary-delay-format-french)
-       (gnus-diary-delay-format-english): Don't use setf with nthcdr.
-
-       * nndiary.el (nndiary-compute-reminders): Don't use setf with
-       nthcdr.
-
-2003-04-16  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-make-cat): Added optional parameter to
-       specify a predicate other than false.
-       (gnus-category-read): Use the new feature to create a 'default'
-       category with a 'short' predicate.
-
-2003-04-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-unique-id): Comment change.
-
-       * gnus-art.el (gnus-article-next-page-1): New function.
-       (gnus-article-next-page): Use it.
-
-2003-04-15  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-split): added save-restriction to save-excursion
-
-2003-04-15  Reiner Steib  <Reiner.Steib@gmx.de>
-       From Julien Avarre <julien@avarre.com>
-
-       * gnus-fun.el: Fixed autoload cookie.
-
-2003-04-15  Paul Jarc  <prj@po.cwru.edu>
-       From Remi Letot  <remi.letot@easynet.be>
-
-       * nnmaildir.el (nnmaildir-request-scan): Use gnus-remove-if
-       instead of remove-if.
-
-2003-04-14  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-msg.el (gnus-summary-news-other-window): Use delq and
-       copy-sequence instead of remove which is a cl run-time function in
-       Emacs 20.
-
-2003-04-14  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-msg.el (gnus-summary-news-other-window): Make a buffer
-       local copy of gnus-discouraged-post-methods with the current
-       method removed.
-
-2003-04-14  Simon Josefsson  <jas@extundo.com>
-
-       * mailcap.el (mailcap-mime-data): Add application/pgp-keys.
-
-2003-04-13  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * mm-util.el (mm-sort-coding-systems-predicate): Convert elements
-       of `mm-coding-system-priorities' to base coding system.
-
-       * gnus-sum.el: Added coding cookie ("middle dot" in
-       gnus-summary-morse-message).
-
-2003-04-13  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (article-fill-long-lines)
-       (article-verify-x-pgp-sig, article-decode-group-name)
-       (gnus-mime-button-menu): Split >80 character lines.
-
-2003-04-13  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-local-variables): Use defvar since
-       we're let-binding it.
-
-       * nnmbox.el (nnmbox-mbox-buffer): It's not a constant.
-
-2003-04-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-hide-headers): Don't do intangible.
-
-       * gnus.el (gnus-group-prefixed-name): Comment out the test for
-       colon.
-
-       * gnus-srvr.el (gnus-browse-read-group): Don't give the real name
-       to the ephemeral entry, but the prefixed name.
-
-       * gnus.el (gnus-group-prefixed-name): Clean up.
-
-2003-04-13  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-group-pathname): Bind
-       gnus-command-method so that gnus-agent-directory will always
-       return a valid directory.
-       * gnus-cache.el (gnus-cache-enter-article): Remove article from
-       gnus-newsgroup-undownloaded so that the summary will display the
-       article as downloaded.
-       (gnus-cache-remove-article): If the article isn't in the agent,
-       remove it from gnus-newsgroup-undownloaded so that the summary
-       will display the article as undownloaded.
-
-2003-04-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump.
-
-2003-04-13 01:12:01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.18 is released.
-
-2003-04-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-draft.el (gnus-draft-send): Add message-hidden-headers.
-
-2003-04-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-next-page): Use
-       gnus-article-over-scroll.
-       (gnus-article-over-scroll): New variable.
-
-       * message.el (message-newline-and-reformat): Place a boundary
-       before filling.
-       (message-make-forward-subject-function): Changed default to
-       message-forward-subject-name-subject.
-       (message-forward-subject-name-subject): New function.
-
-       * nnimap.el (nnimap-split-fancy): Ditto.
-
-       * gnus-sum.el (gnus-summary-line-message-size): Ditto.
-
-       * gnus-cus.el (gnus-group-parameters): Removed "which see".
-
-       * mml.el (mml-minibuffer-read-file): Bind
-       completion-ignored-extensions to nil.
-
-       * message.el (message-fix-before-sending): Comment fix.
-       (message-fix-before-sending): Make hidden headers visible.
-       (message-hide-headers): Bind after-change-functions to nil.
-       (message-forbidden-properties): Put invisible and intangible
-       back.
-       (message-strip-forbidden-properties): Ignore message-hidden text.
-
-       * gnus-msg.el: Hide headers.
-
-       * message.el (message-hidden-headers): New variable.
-       (message-hide-headers): New function.
-       (message-hide-header-p): New function.
-       (message-hide-header-p): Change logic.
-       (message-forbidden-properties): Remove intangible nil invisible
-       nil.
-       (message-hide-headers): Narrow to headers.
-
-       * lpath.el (featurep): Bind Info-directory, Info-menu.
-
-2003-04-12  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-bodies.el (mm-body-charset-encoding-alist): UTF-16 *must* be
-       encoded.
-       (mm-encode-body): Don't corrupt UTF-16.
-       (mm-body-encoding): Pay attention to mm-body-charset-encoding-alist.
-
-2003-04-10  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-get-undownloaded-list): Articles in
-       the CACHE are now detected and handled the same as an article
-       downloaded into the agent.
-       (gnus-agent-group-path): Modified to match nnmail-group-pathname
-       so that the agent front-end and back-end (nnagent) always use the
-       same directory.
-       (gnus-agent-group-pathname): New function. Wrapper for
-       nnmail-group-pathname.
-       (gnus-agent-expire-unagentized-dirs): New variable.  May be
-       customized to disable gnus-agent-expire-unagentized-dirs.
-       (gnus-agent-expire-unagentized-dirs): Expand gnus-agent-directory
-       as the directories in gnus-agent-expire-current-dirs were
-       expanded.
-
-2003-04-10  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Disable "Encrypt
-       body" entry in read only groups.
-
-2003-04-09  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Disable "Import file"
-       and "Create article" items in non-editable groups.
-
-2003-04-09  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-write-active): Added option of
-       replacing, rather than updating, the agent's active file.  Do NOT
-       use the fully qualified group name as gnus-active-to-gnus-format
-       blindly prefixes group names with server names.
-       (gnus-agent-save-group-info): Merge BOTH min/max of current active
-       range, was just merging min, with specified active range.
-       (gnus-agent-expire): Save agent's active ranges after
-       expiring all groups.
-       (gnus-agent-expire-group-1): Update min of agent's active range to
-       min article currently fetched.
-       (gnus-agent-expire-unagentized-dirs): Avoid asking to delete the
-       same ancestor multiple times.
-
-       * gnus-async.el (gnus-asynchronous): Moved defcustom of
-       gnus-asynchronous away from defgroup of gnus-asynchronous.  This
-       seems to fix an intermittant error in which loading gnus-async
-       fails to define gnus-asynchronous (the variable).
-
-       * gnus-sum.el: Concur with Steve Young, 5th argument to 'load' is
-       non-essential.  Removed on all platforms.
-       (gnus-select-newsgroup): When the agent is active, expand the
-       group's active range to include fetched articles that are no
-       longer in the server's active range.
-
-       * gnus-util.el (gnus-with-output-to-file): Removed all of the
-       print-* bindings as they should be handled by the function doing
-       the printing.
-
-2003-04-09  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-uu.el (mm-uu-copy-to-buffer): buffer-file-coding-system
-       might be unbound in non-MULE XEmacsen.
-
-2003-04-08  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-uu.el (mm-uu-diff-groups-regexp, mm-uu-type-alist)
-       (mm-uu-diff-extract, mm-uu-diff-test): New functionality:
-       recognize diffs.
-
-       * mm-bodies.el (mm-decode-body): Use the supplied charset
-       unconditionally if `code-pages' hasn't been loaded.
-
-2003-04-07  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (article-verify-x-pgp-sig): Don't use
-       `insert-buffer', the docstring says "This function is meant for
-       the user to run interactively.  Don't call it from programs!"
-
-       * mm-extern.el (mm-extern-mail-server): do.
-
-       * mml1991.el (mml1991-mailcrypt-sign, mml1991-mailcrypt-sign)
-       (mml1991-gpg-sign, mml1991-gpg-encrypt, mml1991-pgg-sign)
-       (mml1991-pgg-encrypt): do.
-
-       * pgg.el (pgg-decrypt-region): do.
-
-       * mm-view.el (mm-view-pkcs7-decrypt): do.
-
-       * mml-smime.el (mml-smime-verify): do.
-
-       * mml.el (mml-insert-mime, mml-preview): do.
-
-       * mml2015.el (mml2015-gpg-decrypt-1, mml2015-gpg-sign)
-       (mml2015-gpg-encrypt, mml2015-pgg-clear-decrypt)
-       (mml2015-pgg-encrypt): do.
-
-2003-04-06  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-bodies.el (mm-decode-body): Silence XEmacs when compiling.
-
-2003-04-06  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-uu.el (mm-uu-copy-to-buffer): Copy
-       `buffer-file-coding-system' to the new buffer.
-       (mm-uu-pgp-signed-extract-1): Don't copy
-       `buffer-file-coding-system' here.
-
-       * mm-bodies.el (mm-decode-body): last-coding-system-used doesn't
-       exist in XEmacs.
-       (mm-decode-body): Add missing quote.
-
-       * mm-uu.el (mm-uu-pgp-signed-extract-1): Set
-       buffer-file-coding-system.
-
-       * mm-bodies.el (mm-decode-body): Set buffer-file-coding-system to
-       last-coding-system-used.
-
-       * mml2015.el (mml2015-pgg-clear-verify): Encode the text
-       according to buffer-file-coding-system.
-
-       * pgg-gpg.el (pgg-gpg-process-region): Revert previous change.
-
-       * pgg-pgp.el (pgg-pgp-process-region, pgg-pgp-verify-region)
-       (pgg-pgp-snarf-keys-region): do.
-
-       * pgg-pgp5.el (pgg-pgp5-verify-region)
-       (pgg-pgp5-snarf-keys-region, pgg-pgp5-process-region): do.
-
-       * pgg.el (pgg-make-temp-file, pgg-temporary-file-directory): do.
-
-2003-04-05  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-split): (save-excursion) around (widen)
-       (spam-ham-move-routine): Use spam-group-ham-mark-p, not
-       spam-group-spam-mark-p (from Michael Shields <shields@msrl.com>)
-
-2003-04-05  Steve Youngs  <youngs@xemacs.org>
-
-       * 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 <kgreiner@xpediantsolutions.com>
-
-       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
-       print-escape-nonascii to fix more characters in compiled format
-       specs.
-
-2003-04-05  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player):
-       Fix customization type.
-
-2003-04-04  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
-       print-quoted, print-readably, print-escape-multibyte, and
-       print-level to match original behavior of gnus-prin1.  This should
-       repair the format of .newsrc.eld when using compiled format specs.
-
-2003-04-04  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-group.el (tool-bar-map): defvar it.
-
-       * gnus-art.el (tool-bar-map): do.
-
-       * gnus-sum.el (tool-bar-map): do.
-
-2003-04-03  Jesper Harder  <harder@ifa.au.dk>
-
-       * earcon.el (earcon-regexp-alist): catmeow is a wav file.
-
-2003-04-03  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-ctan-directory-regexp): Changed meaning
-       and value.
-       (gnus-button-alist): Use it.
-
-2003-04-03  Jesper Harder  <harder@ifa.au.dk>
-
-       * pgg-gpg.el (pgg-gpg-process-region): do.
-
-       * pgg-pgp.el (pgg-pgp-process-region, pgg-pgp-verify-region)
-       (pgg-pgp-snarf-keys-region): do.
-
-       * pgg-pgp5.el (pgg-pgp5-verify-region)
-       (pgg-pgp5-snarf-keys-region, pgg-pgp5-process-region): Use it.
-
-       * pgg.el (pgg-make-temp-file): New function. `make-temp-name' is
-       unsafe.
-       (pgg-temporary-file-directory): Remove.
-
-2003-04-02  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * lpath.el: Fbind Info-directory and Info-menu.
-
-2003-04-02  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-util.el (gnus-message): Added doc-string.
-
-       * gnus-score.el (gnus-score-find-trace): Changed behavior of `q'.
-       (gnus-score-edit-file-at-point): Goto first match when using `e'.
-
-2003-04-01  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-ctan-directory-regexp): New variable.
-       (gnus-button-alist): Use it.  Changed CTAN and "setq" entries.
-
-2003-04-01  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * nntp.el (nntp-via-rlogin-command-switches): Doc fix.
-       (nntp-open-via-rlogin-and-telnet): Disable the telnet linemode.
-
-2003-03-31  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
-       print-escape-newlines to print escape sequences rather than
-       literal newline characters.
-
-2003-03-31  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-valid-fqdn-regexp): Use
-       `message-valid-fqdn-regexp' for initialization.
-       (gnus-button-handle-info-url): Renamed and extended version of
-       `gnus-button-handle-info'.
-       (gnus-button-message-level): Renamed from `gnus-button-mail-level'
-       (gnus-button-handle-symbol, gnus-button-handle-library)
-       (gnus-button-handle-info-keystrokes): New functions.
-       (gnus-button-browse-level): New variable.
-       (gnus-button-alist): Use them.  Added levels.
-       (gnus-header-button-alist): Added levels.
-
-2003-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump.
-
-2003-03-31 20:08:19 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.17 is released.
-
-2003-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-start.el (gnus-unload): Removed.
-
-       * pop3.el (pop3-read-response): Use
-       nnheader-accept-process-output.
-       (pop3-retr): Ditto.
-
-       * mm-view.el (mm-text-html-renderer-alist): Add -nolist to Lynx.
-       (mm-text-html-washer-alist): Ditto.
-
-2003-03-31  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-gssapi-program): Also try GNU SASL.
-       (imap-gssapi-open): Accept GNU SASL greeting.
-       (imap-read-timeout): New.
-       (imap-wait-for-tag): Use it.
-
-2003-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nntp.el (nntp-accept-process-output): Use new function.
-
-       * nnheader.el (nnheader-read-timeout): New variable.
-       (nnheader-accept-process-output): New function.
-
-       * nntp.el (nntp-read-timeout): Removed.
-
-       * gnus-sum.el (gnus-summary-prepare-threads): Add comment.
-
-2003-03-30  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-cache.el (gnus-cache-braid-nov): Revoke last change.
-
-2003-03-30  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-idna-inside-rhs-p): Narrow to header before
-       searching.
-
-       * gnus-art.el (article-decode-idna-rhs): More restrictive regexp.
-
-2003-03-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnmail.el (nnmail-process-mmdf-mail-format): Indent.
-
-2003-03-28  Vasily Korytov  <deskpot@myrealbox.com>
-
-       * message.el (message-make-in-reply-to): Use
-       mail-extract-address-components to determine sender's
-       name/address.
-
-2003-03-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nndoc.el (nndoc-type-alist): Move mime-parts further ahead.
-
-       * gnus-registry.el (gnus-registry-translate-to-alist): Make a
-       valid lambda.
-       (gnus-registry-translate-from-alist): Ditto.
-
-       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bind
-       print-length to nil.
-
-       * gnus-sum.el (gnus-summary-highlight-line-0): Indent.
-
-       * gnus-fun.el (gnus-fun-ppm-change-string): New function.
-       (gnus-grab-cam-face): Use it.
-
-2003-03-28  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-request-set-mark)
-       (nnmaildir-close-group): Allow each mark directory in a group to
-       have its own inode for mark files, to accommodate AFS.
-
-2003-03-28  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-start.el (gnus-read-newsrc-el-hook): new hook called by
-       gnus-read-newsrc-el-file
-       (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-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-27  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (article-decode-group-name): Be correct instead of
-       smart.
-
-2003-03-27  Katsumi Yamaoka <yamaoka@jpl.org>
-
-       * lpath.el: Bind url-current-object for Emacs; bind
-       gnus-agent-expire-current-dirs for XEmacs; fbind open-ssl-stream
-       for both Emacsen.
-
-2003-03-27  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-article-loose-mime)
-       (gnus-article-emulate-mime): Move to gnus-article-mime customize
-       group.
-
-       * gnus-msg.el (gnus-mailing-list-groups): Fix customize type and
-       doc string.
-
-2003-03-26  Kevin Ryde <user42@zip.com.au>
-
-       * gnus-sum.el (gnus-summary-find-for-reselect): Renamed from
-       gnus-summary-find-uncancelled, skip temporary articles inserted by
-       "refer" functions.
-
-2003-03-26  Vasily Korytov  <deskpot@myrealbox.com>
-
-       * smiley.el (smiley-buffer): New function.
-
-2003-03-26  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-fetch-selected-article): Replaced
-       gnus-summary-update-line (which updated the article's face) with
-       gnus-summary-update-download-mark (which updates the article's
-       face by calling gnus-summary-update-line AND updates the download
-       mark to show that the article was fetched).
-
-2003-03-23  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Provides
-       option of deleting agent directories for groups/servers that are
-       not currently agentized.
-       (gnus-agent-expire): Use gnus-agent-expire-unagentized-dirs.
-
-       * gnus-int.el (gnus-open-server): Report backend errors in
-       condition handler.
-
-2003-03-23  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-idna-to-ascii-rhs-1): Don't continue outside
-       header.
-
-       * rfc2047.el (rfc2047-header-encoding-alist): Make Followup-To
-       same as Newsgroups.
-
-       * nntp.el (nntp-open-connection-function): Mention
-       nntp-open-tls-stream.
-       (nntp-open-tls-stream): New function.
-
-       * tls.el: New file.
-
-       * nnimap.el (nnimap-server-port, nnimap-stream): Say TLS/SSL
-       instead of SSL.
-       (nnimap-stream): Add other streams, link to imap variables.
-       (nnimap-authenticator): Add other authenticator, link to imap
-       variables.
-
-       * imap.el: Autoload open-tls-stream.
-       (imap-streams): Add tls in front of ssl.
-       (imap-stream-alist): Add tls.
-       (imap-default-tls-port): New variable.
-       (imap-tls-p, imap-tls-open): New functions.
-
-2003-03-22  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-url.el (mm-url-insert-file-contents): parse url only if
-       results is a list.
-
-2003-03-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mail-source.el (mail-source-fetch-imap): Revert.
-
-2003-03-22  Svend Tollak Munkejord  <stm@bacchus.pvv.org>
-
-       * deuglify.el (gnus-outlook-repair-attribution-outlook): Use a
-       less strict regexp.
-
-2003-03-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mail-source.el (mail-source-fetch-imap): Use buffer name for
-       more imap function.
-
-2003-03-21  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (article-decode-group-name): Replace Newsgroups and
-       Followup-To data inline.
-
-2003-03-21  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-treat-display-xface): Don't enable if
-       icontopbm isn't available.
-
-2003-03-21  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-int.el (gnus-open-server): Catch errors in backend's
-       open-server method.  Returns nil rather than crashing startup.
-
-       * gnus-sum.el (eval-when-compile): Modified to resolve
-       compile-time warnings.
-
-       * gnus-uu.el (gnus-uu-mark-series): Added informative msg.
-       Reports length of series so that the user can compare N with a
-       subject that should, if the entire series is present, contain
-       '(.../N)'.
-       (gnus-uu-delete-work-dir): Avoid hanging when O/S forbids deletion
-       of temp file (Win-XP may leave the temp file locked when the
-       uudecode process fails).
-
-2003-03-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-split-line): Ignore error.
-
-       * lpath.el (split-line): Avoid split-line warning message.
-
-2003-03-20  Kim F. Storm  <storm@cua.dk>
-
-       * message.el (message-split-line): New function.
-       (message-mode-map): Remap split-line to message-split-line.
-
-2003-03-20  Katsumi Yamaoka <yamaoka@jpl.org>
-
-       * message.el (message-make-overlay): Defalias it to make-overlay.
-       (message-delete-overlay): Defalias it to delete-overlay.
-       (message-overlay-put): Defalias it to overlay-put.
-       (message-idna-to-ascii-rhs-1): Use them.
-
-       * messagexmas.el (message-xmas-redefine): Defalias some overlay
-       functions to extent functions.
-
-2003-03-20  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * message.el (message-check-news-header-syntax): Fixed regexp.
-
-2003-03-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2231.el (rfc2231-decode-encoded-string): Downcase charset.
-
-       * mm-url.el (mm-url-insert): Move url-current-object stuff into
-       mm-url-insert-file-contents.
-
-       * nnrss.el (nnrss-fetch): Fetch the local stuff.
-       (nnrss-check-group): Use it.
-
-2003-03-20 Mark A. Hershberger  <mah@everybody.org>
-
-       * nnrss.el: Primitive XML Name-space support.  This means that RSS
-       feeds like Kevin Burton's[1] can now be read in Gnus.
-
-       Implemented support for Mark Pilgrim's RSS Autodiscovery.[2] This
-       means that if you want to read the RSS feed for example.com, all
-       you have to do is hit "G R http://www.example.com/ RET" and
-       nnrss.el will find and the feed listed on the site or (if you have
-       loaded xml-rpc.el) look it up on syndic8.com.
-
-       Marked the message as HTML (by adding a Content-Type header) so
-       that Gnus will render it as html if the user wants that.
-
-       Implemented the ability to save nnrss-group-alist so that any new
-       feeds the you subscribe to will be found the next time you start
-       up.
-
-       Implemented support for RSS 2.0 elements (author, pubDate).
-
-       Prefer for <content:encoded> over <description> where both
-       elements exist.
-
-       * mm-url.el (mm-url-insert): Set url-current-object.
-
-       * gnus-group.el (gnus-group-make-rss-group): New function.
-
-2003-03-20  Katsumi Yamaoka <yamaoka@jpl.org>
-
-       * message.el (message-idna-to-ascii-rhs-1): Don't use replace-*
-       for highlight overlays.
-
-2003-03-20  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-cache.el (gnus-cache-braid-nov): Test if a line looks like
-       a NOV.
-
-2003-03-20  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-use-idna): Disable if UTF-8 unavailable.
-       (message-idna-to-ascii-rhs): Use it.
-
-       * gnus-art.el (gnus-use-idna): Disable if UTF-8 unavailable.
-
-2003-03-19  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-group-ham-mark-p, spam-group-spam-mark-p)
-       (spam-group-ham-marks, spam-group-spam-marks): new functions
-       (spam-spam-marks, spam-ham-marks): removed in favor of the
-       spam-marks and ham-marks parameters
-       (spam-generic-register-routine, spam-ham-move-routine): use the
-       new spam-group-{spam,ham}-mark-p functions
-
-       * gnus.el (spam-marks, ham-marks): new group parameters with
-       default values same as the old spam-spam-marks and spam-ham-marks
-
-2003-03-19  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-article-decode-hook): Add IDNA.
-       (gnus-use-idna): New variable.
-       (article-decode-idna-rhs): New function.
-
-       * message.el (message-use-idna): New variable.
-       (message-mode-field-menu): Add entry for IDNA.
-       (message-idna-inside-rhs-p, message-idna-to-ascii-rhs-1)
-       (message-idna-to-ascii-rhs): New function.
-       (message-generate-headers): Invoke IDNA code.
-
-2003-03-19  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir--system-name): New function.
-       (nnmaildir-request-accept-article): Use it.
-
-2003-03-19  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-util.el (gnus-byte-compile): Make it work silently as the
-       gnus-compile function does.
-
-       * gnus-sum.el (gnus-summary-highlight-line-0): Revoke the last
-       bogus change.
-
-2003-03-19  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-util.el (mm-mule-charset-to-mime-charset): Test if
-       sort-coding-systems is defined.
-
-2003-03-18  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-open-server, nnmaildir-request-scan)
-       (nnmaildir-request-create-group, nnmaildir-request-delete-group):
-       Replace create-directory with target-prefix.
-
-2003-03-18  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-bodies.el (mm-decode-coding-region-safely): Don't use
-       find-charset-string which is slooow in XEmacs.
-
-2003-03-18  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-sum.el (gnus-summary-highlight-line-0): Silence the byte-
-       compiler under XEmacs.
-
-2003-03-18  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-treat-highlight-signature): Make the default
-       work for multipart/signed where the message text isn't `last'.
-
-2003-03-18  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-view.el (mm-setup-w3m): Set w3m-display-inline-images to
-       the value of mm-inline-text-html-with-images.
-       (mm-inline-text-html-render-with-w3m): Don't bind
-       w3m-display-inline-images.
-
-       * gnus-art.el (gnus-article-wash-html-with-w3m): Don't bind
-       w3m-display-inline-images.
-
-       * lpath.el: Bind w3m-display-inline-images; bind mm-w3m-mode-map
-       regardless of an Emacs flavor.
-
-2003-03-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump.
-
-2003-03-18 00:38:22 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.16 is released.
-
-2003-03-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * lpath.el (featurep): Bind mm-w3m-mode-map.
-
-2003-03-17  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmail.el (nnmail-cache-primary-mail-backend): Not all
-       'respool-able backends define a global nnchoke-get-new-mail
-       variable.
-
-2003-03-17  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-mime-delete-part): New function.
-       (gnus-mime-action-alist, gnus-mime-button-commands): Use it.
-
-2003-03-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-check-news-header-syntax): Don't push
-       groups twice onto list of unknown groups.
-
-       * nndoc.el (nndoc-type-alist): Move exim-bounce a bit further
-       back.
-
-       * nnheader.el (nnheader-find-etc-directory): Doc fix.
-
-       * gnus-msg.el (gnus-inews-add-send-actions): Don't restore window
-       config unless the summary buffer exists.
-
-       * gnus-sum.el (gnus-summary-next-group): Semi-exit group first to
-       that target group is computed correctly when articles are marked
-       as read by Xref handling.
-
-       * mail-source.el (mail-source-fetch-imap): Pass buffer-name to
-       imap-open.
-
-       * message.el (message-send-mail): Add courtesy string to Bcc's,
-       too.
-
-       * gnus-cite.el (gnus-cited-line-p): New function.
-
-2003-03-15  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-bodies.el (mm-decode-body): Add new optional parameter,
-       force, to use the supplied charset unconditionally.
-
-       * gnus-art.el (article-decode-charset): Use it.
-
-2003-03-14  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-bodies.el (mm-decode-coding-region-safely): New function.
-       (mm-decode-body): Use it.
-
-       * rfc2047.el (rfc2047-decode-region): do.
-       (rfc2047-decode-string): Guess coding system if the default is
-       invalid.
-
-2003-03-12  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-request-update-info): Pretend missing
-       articles are marked 'read, so we get correct article counts.
-
-2003-03-13  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-insert-mime-button): Exclude a newline from
-       the button.
-       (gnus-insert-prev-page-button): Ditto.
-       (gnus-insert-next-page-button): Ditto.
-       (gnus-insert-mime-security-button): Ditto.
-
-       * mm-view.el (mm-inline-image-emacs): Open the bottom of an image
-       one line.  Suggested by Greg Klanderman <gak@klanderman.net>.
-       (mm-inline-image-xemacs): Ditto.
-
-2003-03-12  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir--parse-filename, nnmaildir--sort-files,
-       nnmaildir--scan, nnmaildir-request-accept-article): Changes for
-       the recent filename uniqueness discussion.
-
-2003-03-12  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-view.el (mm-inline-image-emacs): Make it delete an excessive
-       newline next time.
-       (mm-inline-image-xemacs): Ditto.
-
-2003-03-10  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-agent.el (gnus-agent-synchronize-flags-server): Don't use
-       kill-line.
-
-2003-03-09  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-msg.el (gnus-inews-insert-archive-gcc): Don't use
-       kill-line.
-
-2003-03-09  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-fetched-hook): New variable.  Just
-       fixing the code to match the documentation.
-       (gnus-agent-fetch-selected-article): Replaced
-       gnus-summary-update-article-line with gnus-summary-update-line as
-       the former did not correctly recalculate the thread indentation.
-       (gnus-agent-find-parameter): The agent-predicate, if not found
-       anywhere else, defaults to the value of gnus-agent-predicate.
-       (gnus-agent-fetch-session): Fixed typo; now executes
-       gnus-agent-fetched-hook rather than the undocumented
-       gnus-agent-fetch-hook.
-       (gnus-agent-fetch-group-1): Removed part of 2003-03-06 fix.  The
-       default agent predicate is now provided by
-       gnus-agent-find-parameter.
-       (gnus-agent-message): New macro.  This macro avoids potentially
-       costly parameter evaluation when the message's level is too high
-       to display.
-       (gnus-agent-expire-group-1): Disabled undo tracking in temp
-       overview buffer. Uses new gnus-agent-message macro to reduce
-       overhead of optional messages. Reversed message levels to
-       emphasize percent completion messages.  Detailed messages of
-       little use except when debugging code.
-
-2003-03-08  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-ham-move-routine): use
-       spam-mark-ham-unread-before-move-from-spam-group
-       (spam-mark-ham-unread-before-move-from-spam-group): new variable
-
-2003-03-07  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el: load nnimap.el when compiling
-       (spam-setup-widening): use
-       nnimap-split-download-body-default instead of
-       nnimap-split-download-body which is a user-customizable variable
-
-2003-03-07  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-split-download-body-default): New, holds
-       default for n-s-d-b.
-       (nnimap-split-download-body): Add new setting (symbol default),
-       which uses contents of n-s-d-b-d, and made it the default.
-
-2003-03-07  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-use-hashcash): new variable
-       (spam-list-of-checks): added spam-use-hashcash with associated
-       spam-check-hashcash
-       (spam-check-hashcash): new function, installed iff hashcash.el is
-       loaded
-       (spam-setup-widening): don't use (return)
-
-2003-03-06  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-fetch-group-1): Added default
-       predicate of `false' to avoid an error when a group defines no
-       predicate. Fixed typo that disabled agent scoring (i.e. the
-       low/high predicates should now work).
-
-2003-03-06  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el: add spam-maybe-spam-stat-load to
-       gnus-get-top-new-news-hook, remove it from gnus-get-new-news-hook
-       (spam-bogofilter-register-with-bogofilter): use
-       spam-bogofilter-spam-switch and spam-bogofilter-ham-switch
-       (spam-bogofilter-spam-switch, spam-bogofilter-ham-switch): new
-       custom variables to replace "-s" and "-n"
-
-       * gnus-group.el (gnus-group-get-new-news): call the new
-       gnus-get-top-new-news-hook hook
-
-       * gnus-start.el (gnus-get-top-new-news-hook): new hook, run ONLY
-       by gnus-get-new-news, NOT by gnus-group-get-new-news-this-group
-
-2003-03-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-uu.el (mm-uu-pgp-encrypted-test): Fix message.
-
-2003-03-06  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-cus.el (gnus-group-customize): Don't use delete-if which is
-       a cl run-time function.
-
-2003-03-06  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-fetch-group-1): Added missing binding
-       on gnus-agent-short-article.
-       (gnus-category-read): Replaced CL function mapcar* with new macro:
-       gnus-mapcar.
-       * gnus-util.el (gnus-mapcar): New macro.  Generalizes mapcar to
-       support functions that accept multiple parameters.  A separate
-       sequence must be provided for each parameter in the function.
-       Iteration stops when the end of the shortest list is reached.
-
-2003-03-06  Jesper Harder  <harder@ifa.au.dk>
-
-       * nnimap.el (nnimap-request-accept-article): Use delete-region.
-
-       * html2text.el (html2text-clean-dtdd, html2text-delete-tags)
-       (html2text-delete-single-tag, html2text-clean-anchor)
-       (html2text-remove-tags): Use delete-region.
-       (html2text-fix-paragraphs): Simplify.
-
-       * mml1991.el (mml1991-mailcrypt-sign, mml1991-mailcrypt-encrypt)
-       (mml1991-gpg-sign, mml1991-gpg-encrypt, mml1991-pgg-sign)
-       (mml1991-pgg-encrypt, mml1991-pgg-encrypt): Use delete-region, not
-       kill-region.
-
-2003-03-04  John Paul Wallington  <jpw@gnu.org>
-
-       * gnus-agent.el (gnus-agent-enable-expiration)
-       (gnus-agent-article-alist, gnus-agent-article-alist)
-       (gnus-agent-cat-defaccessor): Doc fixes.
-
-2003-03-04  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-function-implies-unread-1): Grok
-       byte-compiled functions.
-
-2003-03-04  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-sum.el (gnus-auto-goto-ignores): New variable. Provides
-       customization between new maneuvering (which permits selecting
-       undownloaded articles) and old maneuvering (which skipped over
-       undownloaded articles) behaviors.
-       (gnus-summary-find-next): Pass through the unread and subject
-       parameters when calling gnus-summary-find-prev.
-       (gnus-summary-find-next,gnus-summary-find-prev): Apply
-       gnus-auto-goto-ignores to filter out unacceptable articles.
-
-2003-03-04  Jesper Harder  <harder@ifa.au.dk>
-
-       * mail-source.el (mail-source-read-passwd): Remove. `read-passwd'
-       exists in all supported Emacs versions, so we don't need this
-       compatibility function.
-       (mail-source-fetch-pop, mail-source-check-pop)
-       (mail-source-fetch-webmail): Use read-passwd.
-
-       * nntp.el (nntp-send-authinfo, nntp-send-nosy-authinfo)
-       (nntp-open-telnet, nntp-open-via-telnet-and-telnet): Use
-       read-passwd.
-
-       * nnwarchive.el (nnwarchive-open-server): Use read-passwd.
-
-       * imap.el (imap-read-passwd): Remove.
-       (imap-interactive-login): Use read-passwd.
-
-       * canlock.el (canlock-read-passwd): Remove.
-       (canlock-insert-header, canlock-verify): Use read-passwd.
-
-       * sieve-manage.el (sieve-manage-read-passwd): Remove.
-       (sieve-manage-interactive-login): Use read-passwd.
-
-       * pop3.el (pop3-read-passwd): Remove.
-       (pop3-movemail, pop3-get-message-count, pop3-apop): Use
-       read-passwd.
-
-       * pgg.el (pgg-read-passphrase): Simplify.
-
-2003-03-04  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-mode): Fixed the mode line reports
-       'plugged' when actually 'unplugged' bug.
-       (gnus-category-read): Ignore nil values when converting an
-       old-format category so that the new-format category will default
-       those attributes to the global variables.
-
-2003-03-03  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * mail-source.el (mail-source-delete-old-incoming-confirm): Fixed
-       doc-string.
-
-2003-03-03  Jesper Harder  <harder@ifa.au.dk>
-
-       * nnrss.el (nnrss-decode-entities-unibyte-string): Use `buffer-string'.
-       * nndoc.el (nndoc-dissect-mime-parts-sub): do.
-       * nndb.el (nndb-request-accept-article, nndb-status-message): do.
-       * mm-url.el (mm-url-decode-entities-string): do.
-       * mml1991.el (mml1991-mailcrypt-sign, mml1991-gpg-sign): do.
-       * mm-decode.el (mm-find-raw-part-by-type): do.
-       * message.el (message-send-mail-partially)
-       (message-send-mail-with-sendmail): do.
-       * gnus-uu.el (gnus-uu-save-article, gnus-uu-reginize-string): do.
-       * gnus-kill.el (gnus-pp-gnus-kill): do.
-       * gnus-art.el (gnus-article-treat-unfold-headers)
-       (gnus-article-encrypt-body): do.
-
-2003-02-24  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * mail-source.el (mail-source-delete-incoming): Allow integer value.
-       (mail-source-delete-old-incoming-confirm): New variable.
-       (mail-source-delete-old-incoming): Use it.  New function.
-       (mail-source-callback): Call `mail-source-delete-old-incoming' if
-       `mail-source-delete-incoming' is a nonnegative integer.
-
-2003-03-03  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-msg.el (gnus-extended-version): Fix for 'emacs-gnus-config.
-       (gnus-user-agent): Fixed typo.
-
-2003-03-03  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-enable-expiration): Fixed documentation.
-       (gnus-agent-expire-group-1): Removed invalid (interactive) specifier.
-
-2003-03-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agent-fetch-articles): Fix nil message.
-       (gnus-agent-fetch-session): Allow debugging to take place.
-
-2003-03-03  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-highlight-selected-summary)
-       (gnus-article-get-xrefs, gnus-summary-show-thread): Use
-       `gnus-point-at-bol' and `gnus-point-at-eol' instead of
-       `(progn (beginning-of-line) (point))'.  It's shorter, faster,
-       and makes it clear that we don't need the side effect.
-       * gnus-util.el (gnus-delete-line): do.
-       * gnus-xmas.el (gnus-group-add-icon): do.
-       * nnmail.el (nnmail-article-group, nnmail-cache-fetch-group): do.
-       * nntp.el (nntp-send-authinfo-from-file): do.
-       * nnml.el (nnml-header-value): do.
-       * nnheader.el (nnheader-insert-references): do.
-       * gnus-cite.el (gnus-article-highlight-citation)
-       (gnus-cite-parse): do.
-       * gnus-score.el (gnus-score-followup): do.
-       * gnus-draft.el (gnus-draft-send): do.
-       * gnus-group.el (gnus-group-highlight-line): do.
-       * gnus-cache.el (gnus-cache-braid-nov): do.
-       * nnfolder.el (nnfolder-retrieve-headers)
-       (nnfolder-request-article): do.
-       * gnus-art.el (article-hide-boring-headers)
-       (gnus-article-hide-header): do.
-
-       * nnheader.el (nnheader-find-nov-line): Use gnus-delete-line.
-       * nnml.el (nnml-request-replace-article): do.
-       * nnmbox.el (nnmbox-request-move-article, nnmbox-delete-mail): do.
-       * nnfolder.el (nnfolder-request-move-article): do.
-       * gnus-cache.el (gnus-cache-possibly-remove-article): do.
-       * gnus-art.el (gnus-mm-display-part): do.
-
-       * gnus-art.el (gnus-article-goto-part): Use gnus-goto-char.
-
-2003-03-02  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * nntp.el (nntp-possibly-change-group): Avoid calling
-       process-buffer on nil (Which happened when you lost your
-       connection while fetching); instead signal a "Server Closed
-       Connection" error.
-
-2003-03-02  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-enable-expiration): New
-       variable. Either ENABLE or DISABLE.  Sets default behavior for
-       selecting which groups are expired.
-       (gnus-agent-cat-set-property, gnus-agent-cat-defaccessor,
-       gnus-agent-set-cat-groups): Provides abstract interface for
-       accessing agent category.  Category now implemented by an alist.
-       (gnus-agent-add-group, gnus-agent-remove-group,
-       gnus-category-insert-line, gnus-category-edit-predicate,
-       gnus-category-edit-score, gnus-category-edit-groups,
-       gnus-category-copy, gnus-category-add, gnus-group-category): Use
-       new agent category abstraction.
-       (gnus-agent-find-parameter): New function. Search for agent
-       configuration parameter first in the group's parameters, then its
-       topics (if any), and then the group's category.  If not found
-       anywhere, use the original defined constants.
-       (gnus-agent-fetch-headers, gnus-agent-fetch-group-1): Use new
-       gnus-agent-find-parameter.
-       (gnus-agent-fetch-headers, gnus-agent-uncached-articles): Clearing
-       gnus-agent-cache now blocks retrieving headers and articles from
-       the local cache.  Fetched content is still added to the cache
-       before being returned.
-       (gnus-agent-fetch-session): Use error-message-string to generate
-       displayed error message.
-       (gnus-agent-customize-category): New Command. 'e' in category
-       buffer opens category customization buffer.
-       (gnus-category-read): Reads either positional or alist format;
-       returns alist format.
-       (gnus-category-write): Writes category file compatible with
-       current, and previous, versions of gnus-agent.
-       (gnus-category-make-function, gnus-category-make-function-1):
-       Corrected documentation; parameter is predicate NOT category.
-       (gnus-predicate-implies-unread): Now works in more cases per the
-       todo comment.
-       (gnus-function-implies-unread-1): New function. Supports
-       gnus-predicate-implies-unread.
-       (gnus-agent-expire-group): Command now provides default of group
-       under point.
-       (gnus-agent-expire-group-1): Obeys new agent-enable-expiration and
-       agent-days-until-old parameters. No longer supports
-       gnus-agent-expire-days being set to an alist.
-       (gnus-agent-request-article): Now performs its own checks of
-       gnus-agent, gnus-agent-cache, and gnus-plugged rather than
-       assuming that the caller will do them correctly.
-       (): Added one-time hook to gnus-group-prepare-hook.  Detects when
-       gnus-agent-expire-days is set to an alist.  Converts said alist
-       into group parameter so that gnus-agent-expire-days will not be
-       needed.
-       * gnus-art.el (gnus-request-article-this-buffer): Conditional
-       checks surrounding gnus-agent-request-article removed; now
-       performed by gnus-agent-request-article.
-       * gnus-cus.el (gnus-agent-parameters): New variable. List of
-       customizable group/topic parameters that regulate the agent.
-       (gnus-group-customize): Uses gnus-agent-parameters.  Replaced
-       kill-buffer with gnus-kill-buffer to remove the killed buffer from
-       the list of gnus buffers.
-       (gnus-trim-whitespace): Removes leading and trailing whitespace
-       from multiline strings.
-       (gnus-agent-cat-prepare-category-field,
-       gnus-agent-customize-category): Constructs a category
-       customization buffer.
-       * gnus-int.el (gnus-retrieve-headers,
-       gnus-request-expire-articles): No longer checks gnus-agent-cache
-       as it is handled internally by the agent.
-       (gnus-request-head, gnus-request-body): Conditional checks
-       surrounding gnus-agent-request-article removed; now performed by
-       gnus-agent-request-article.
-
-       * gnus-start.el (): Added defvar statements to resolve compilation
-       warnings.
-       (gnus-long-file-names): New function. Isolates platform dependent
-       msdos-long-file-names.
-       (gnus-save-startup-file-via-temp-buffer): New variable. Provides
-       option of writing directly to file.  Avoids memory exhausted
-       errors when .newsrc.eld is huge.
-       (gnus-save-newsrc-file): Uses new
-       gnus-save-startup-file-via-temp-buffer.
-       (gnus-gnus-to-quick-newsrc-format): Rewritten to write to
-       standard-output.
-       (gnus-display-time-event-handler): Changed to alias from a defun
-       to avoid a compile-time warning when display-time-event-handler is
-       not defined.
-       * gnus-util.el (gnus-with-output-to-file): New macro. Binds
-       standard-output such that prin1 and princ will write directly to a
-       file.
-
-       * gnus.el (gnus-agent-cache): Expanded documentation.
-       (gnus-summary-high-undownloaded-face): Removed second bold keyword
-       so that this face is actually bold.
-
-       * nnkiboze.el (nnkiboze-request-article): Only use the cache when
-       gnus-use-cache has been set.
-
-2003-03-02  Jesper Harder  <harder@ifa.au.dk>
-
-       * nnvirtual.el (nnvirtual-update-xref-header): Simplify.
-
-2003-03-01  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-article-refer-article): Be more permissive.
-
-2003-03-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * spam.el: Fix typo.
-
-2003-03-01  Satyaki Das  <satyaki@theforce.stanford.edu>
-       (Trivial patch.)
-
-       * pgg-gpg.el (pgg-gpg-process-region): Insert process status into
-       errors-buffer. This produces a nicer error message in case of
-       problems.
-
-2003-03-01  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-maybe-spam-stat-load, spam-maybe-spam-stat-load):
-       load stats iff spam-use-stat is on
-
-       * spam.el: add spam-maybe-spam-stat-load to gnus-startup hook,
-       also use spam-maybe-spam-stat-load and spam-maybe-spam-stat-save
-       instead of spam-stat-load and spam-stat-save in the
-       gnus-get-new-news-hook and gnus-save-newsrc-hook, respectively
-
-2003-03-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-text): Ignore errors from enriched-decode.
-
-2003-03-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-make-fqdn): Protect against nil user-mail.
-
-2003-02-28  Vasily Korytov <deskpot@myrealbox.com>
-
-       * gnus-art.el (gnus-boring-article-headers): New values:
-       'to-list and 'cc-list.
-
-2003-02-28  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-setup-widening): new function to set
-       nnimap-split-download-body, we add it to gnus-get-new-news-hook
-       (spam-list-of-statistical-checks): list of statistical splitter
-       checks
-       (spam-split): added a widen call when a statistical check is
-       enabled
-
-2003-02-28  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-msg.el (gnus-user-agent): Changed default to
-       'emacs-gnus-type, renamed 'full.
-
-2003-02-28  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-request-accept-article): Don't use
-       mail-header-unfold-field.
-
-2003-02-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * imap.el (imap-ssl-open): Don't depend on ssl.el.
-       * nntp.el (nntp-open-ssl-stream): Don't depend on ssl.el.
-
-2003-02-26  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el: add spam-stat-load to gnus-get-new-news-hook
-       (spam-split): remove spam-stat-load call
-
-2003-02-26  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-toggle-header): Run
-       gnus-article-decode-hook instead of calling a-decode-encoded-words
-       directly (the latter is run as part of the former).
-
-2003-02-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-expire-group): Remove debug.
-
-2003-02-25  Jesper Harder  <harder@ifa.au.dk>
-
-       * message.el (message-sendmail-envelope-from): New option.
-       (message-sendmail-envelope-from): New function.
-       (message-send-mail-with-sendmail): Use it.
-
-2003-02-25  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): Added
-       compensation for TDMA addresses.
-
-2003-02-24  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-msg.el (gnus-user-agent): New variable.
-       (gnus-version-expose-system): Removed.  Obsoleted by
-       `gnus-user-agent'.
-       (gnus-extended-version): Use `gnus-user-agent'.
-
-2003-02-24  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-stat-register-spam-routine,
-       spam-stat-register-ham-routine): remove spam-stat-save
-       (spam-stat hook): add spam-stat-save to the gnus-save-newsrc-hook
-
-2003-02-24  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-group.el (gnus-topic-mode-p): Fixed free variable
-       reference.
-
-2003-02-24  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * nnheader.el (nnheader-find-nov-line): Changed midpoint
-       calculation to avoid integer overflow.
-
-2003-02-24  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-start.el (gnus-backup-startup-file): Fixed custom type.
-
-2003-02-24  Ted Zlatanov <tzz@lifelogs.com>
-       * spam.el: disabled spam-get-article-as-filename
-
-       From Michael Shields  <shields@msrl.com>
-
-       * gnus-group.el (gnus-group-is-exiting-without-update-p): New.
-       * gnus-sum.el (gnus-summary-exit-no-update): Use it.
-       * gnus-sum.el (gnus-summary-expire-articles): Use it.
-       * spam.el (spam-summary-prepare-exit): Use it.
-       * gnus.el (gnus-install-group-spam-parameters): New.
-       * spam.el (spam-group-ham-processor-copy-p): New.
-       * spam.el (spam-summary-prepare-exit): Support for ham copying.
-       * spam.el (spam-mark-spam-as-expired-and-move-routine): Fix bug
-       that would cause the current message to be moved if the group had
-       no spam.
-       * spam.el (spam-ham-move-routine): New `copy' argument.
-
-2003-02-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-       From Martin Thornquist <martint@ifi.uio.no>
-
-       * gnus-topic.el (gnus-topic-select-group): Select last group if
-       after last group.
-       * gnus-group.el (gnus-group-select-group): Ditto.
-
-2003-02-24  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (popup-menu): Compiler macro for Emacs 20.
-       (gnus-article-refer-article): Use gnus-point-at-(b|e)ol instead of
-       point-at-(b|e)ol which aren't available in Emacs 20.
-
-       * gnus-registry.el (puthash): Alias to cl-puthash for Emacs 20.
-
-2003-02-23  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-start.el (gnus-activate-group): Re-enabled the catch error
-       clause of the condition-case statement.  Errors connecting to a
-       server no longer terminate gnus.
-
-       * gnus-agent.el (gnus-agent-toggle-plugged): Renamed parameter to
-       make its use obvious.  Added no-nothing case to avoid
-       opening(closing) servers when already open(closed).
-       (gnus-agent-while-plugged): Added macro to facilitate internal use
-       of gnus-agent-toggle-plugged.
-       (gnus-agent-fetch-group): Use new gnus-agent-while-plugged to
-       temporarily open servers.
-       (gnus-agent-get-undownloaded-list): Sort list of article numbers
-       as sorting gnus-newsgroup-headers is wrong.
-       (gnus-agent-summary-fetch-group): Use new gnus-agent-while-plugged
-       to temporarily open servers. Corrected logic to handle setting
-       gnus-agent-mark-unread-after-downloaded.
-       (gnus-agent-fetch-articles): Now handles headers with missing
-       article sizes and/or missing article lengths.  Now clears the
-       message buffer when finished.
-       (gnus-agent-fetch-group-1): Position point before calling
-       gnus-summary-set-agent-mark.
-       (gnus-get-predicate): Corrected description, parameter is
-       predicate not category.
-       (gnus-agent-expire-group): Adapted the gnus-agent-expire-* code to
-       provide a separate single group expiration function.
-       (gnus-agent-regenerate-group): Now clears the message buffer when
-       finished.
-
-2003-02-23  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus.el (gnus-agent-target-move-group-header): New variable.
-       * gnus-draft.el (gnus-draft-send): If special header
-       "X-Gnus-Agent-Target-Move-Group" is present, do like Gcc into
-       that group, instead of performing the regular sending functions.
-
-2003-02-23  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-xmas.el (gnus-xmas-mime-button-menu): Accept a prefix arg.
-
-2003-02-20  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * message.el (message-user-fqdn, message-valid-fqdn-regexp): New
-       variables.
-       (message-make-fqdn): Use it.  Improved validity check.
-
-2003-02-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-user-mail-address): Check whether
-       user-mail-address looks valid.
-
-       * gnus-msg.el (gnus-mailing-list-followup-to): New function.
-
-       * gnus-util.el (gnus-fetch-original-field): New function.
-
-2003-02-23  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * message.el (message-mode): \\(...\\) around additional
-       paragraph-separate alternative.
-
-2003-02-23  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-mime-button-commands): Add ellipsis.
-       (gnus-mime-button-menu): Define MIME popup menu with easy-menu to
-       display key bindings.
-       (gnus-mime-button-menu): Rewrite.
-
-2003-02-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-button-url-regexp): Removed `.
-
-2003-02-23  Max Froumentin  <mf@w3.org>
-
-       * gnus-art.el (gnus-button-url-regexp): Remove `, enter '.
-
-2003-02-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-mime-action-on-part): Require a match
-       interactively.
-
-       * gnus-start.el (gnus-save-newsrc-file): Use
-       gnus-backup-startup-file.
-       (gnus-backup-startup-file): New variable.
-
-2003-02-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-summary-buffer-name): Moved function here.
-
-       * gnus-draft.el (defun): Remove debug.
-
-2003-02-22  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-refer-article): Skip method if we
-       can't open server.
-
-2003-02-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-draft.el (defun): Configure posting styles.
-
-       * 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\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * message.el (message-mode): MML tags separate paragraphs.  Small
-       change from David S Goldberg <david.goldberg6@verizon.net>.
-
-       * gnus-agent.el (gnus-agent-get-undownloaded-list): Sort
-       `gnus-newsgroup-headers'.
-
-       * gnus-art.el (gnus-article-refer-article): Grok more message id
-       formats.  From Karl Pfl\e,Ad\e(Bsterer <sigurd@12move.de>.
-
-2003-02-22  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-decode.el (mm-path-name-rewrite-functions): Doc fix: don't
-       use "path name".
-
-2003-02-21  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-sum.el (gnus-summary-move-article)
-       (gnus-summary-expire-articles): send data header for article, not
-       just article ID
-
-       * gnus-registry.el (gnus-registry-hashtb, gnus-register-action)
-       (gnus-register-spool-action): added hashtable of message ID keys
-       with message motion data
-
-2003-02-21  Florian Weimer  <fw@deneb.enyo.de>
-       From Reiner Steib  <Reiner.Steib@gmx.de>.
-
-       * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): New
-       variable, used in `gnus-button-mid-or-mail-heuristic'.
-       (gnus-button-mid-or-mail-heuristic): New function derived from
-       Florian Weimer's Perl script.
-       (gnus-button-handle-mid-or-mail): Allow a function instead of
-       'guess.
-       (gnus-button-guessed-mid-regexp): Removed.
-
-2003-02-20  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-resend): Bind message-setup-hook to nil;
-       remove X-Draft-From header.
-
-2003-02-20  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-simplify-subject-fully, gnus-subject-equal)
-       (gnus-newsgroup-undownloaded)
-       (gnus-summary-save-parts-default-mime, gnus-auto-select-next):
-       Doc fixes.
-
-2003-02-17  John Paul Wallington  <jpw@gnu.org>
-
-       * gnus.el (gnus-shell-command-separator, gnus-email-address)
-       (gnus-default-charset, gnus-other-frame-parameters): Doc fixes.
-
-2003-02-20  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-spec.el (gnus-xmas-format): Use insert instead of
-       insert-string which is obsolete in Emacs 21.4.
-
-       * message.el (message-cross-post-followup-to-header): do.
-
-       * spam.el (spam-ifile-register-with-ifile)
-       (spam-stat-register-spam-routine)
-       (spam-stat-register-ham-routine)
-       (spam-bogofilter-register-with-bogofilter): do.
-
-       * mailcap.el (mailcap-mime-data): Fix typo.
-
-       * gnus-topic.el (gnus-topic-make-menu-bar): Add ellipsis.
-
-2003-02-19  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-cite.el (gnus-cite-unsightly-citation-regexp)
-       (gnus-cite-parse): Renamed `gnus-unsightly-citation-regexp' to
-       `gnus-cite-unsightly-citation-regexp'.
-
-2003-02-19  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-msg.el (gnus-copy-article-buffer): Copy an article header
-       even if there's just a header.
-
-2003-02-19  Jesper Harder  <harder@ifa.au.dk>
-
-       * message.el (message-fix-before-sending): Fix highlighting of
-       illegible and invisible text.
-
-       * gnus-util.el (gnus-multiple-choice): Separate choices with
-       ",\e,A \e(B".  Suggested by Dan Jacobson <jidanni@dman.ddts.net>.
-
-2003-02-18  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-exit-no-update): Use gnus-kill-buffer.
-
-2003-02-18  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-ham-move-routine)
-       (spam-mark-spam-as-expired-and-move-routine): use
-       gnus-summary-kill-process-mark and gnus-summary-yank-process-mark
-       around process-mark manipulation on the group
-
-2003-02-17  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Add MIME/Multipart
-       submenu.
-
-2003-02-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mail-source.el (mail-source-fetch): Reverse the return value of
-       the continuation question.
-
-2003-02-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nndraft.el (nndraft-request-move-article): Bind
-       nnmh-allow-delete-final to t.
-
-2003-02-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-uu.el (mm-uu-uu-filename): Fix use of character constant.
-
-2003-02-11  Stefan Monnier  <monnier@cs.yale.edu>
-
-       * nntp.el (nntp-accept-process-output): Don't use point-max to get
-       the buffer's size.
-
-2003-01-31  Joe Buehler  <jhpb@draco.hekimian.com>
-
-       * nnheader.el: Added cygwin to system-type comparisons.
-
-2003-01-27  Juanma Barranquero  <lektu@terra.es>
-
-       * imap.el (imap-mailbox-status): Fix typo.
-
-2003-02-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-prepare): Don't set agent mark if
-       online.
-
-2003-02-14  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-agent-group-make-menu-bar): Include all
-       commands.
-       * gnus-sum.el: Small change from Frank Weinberg
-       <frank@usenet-rundfahrt.de>:
-       (gnus-auto-center-group): New variable.
-       (gnus-summary-read-group-1): Use it.
-       (gnus-summary-next-group): Fix docstring.
-
-2003-02-13  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-util.el (gnus-faces-at): Simplify.
-
-2003-02-13  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-ham-move-routine)
-       (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\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * 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 <kbk@shore.net>.
-
-2003-02-13  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-article-only-boring-p): Make sure that the
-       gnus-article-boring-faces variable is bound; use gnus-faces-at.
-
-       * gnus-util.el (gnus-faces-at): New macro.
-
-2003-02-13  Michael Shields  <shields@msrl.com>
-
-       * gnus-cite.el
-       (gnus-cite-attribution-suffix, gnus-cite-parse):
-       Better handling for Microsoft citation styles.
-       (gnus-unsightly-citation-regexp): New.
-
-2003-02-12  Michael Shields  <shields@msrl.com>
-
-       * gnus-art.el (article-strip-banner): Strip both per-group and
-       per-user-address banners.
-       (article-really-strip-banner): New.
-
-2003-02-12  Michael Shields  <shields@msrl.com>
-
-       * gnus-sum.el (gnus-article-goto-next-page,
-       gnus-article-goto-prev-page): Call gnus-summary-*-page, instead of
-       relying on the summary bindings of `n' and `p'.
-
-2003-02-12  Michael Shields  <shields@msrl.com>
-
-       * gnus-art.el (gnus-article-only-boring-p): New.
-       (gnus-article-skip-boring): New.
-       * gnus-cite.el (gnus-article-boring-faces): New.
-       * gnus-sum.el (gnus-summary-next-page): Use
-       gnus-article-only-boring-p.
-
-2003-02-12  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-mark-spam-as-expired-and-move-routine)
-       (spam-ham-move-routine): unmark all articles before marking those
-       of interest and calling gnus-summary-move-article
-
-2003-02-12  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus.el (gnus-kill-buffer): Move to gnus.el because it's
-       logically the complement of gnus-get-buffer-create and
-       gnus-add-buffer.
-
-       * gnus-util.el (gnus-kill-buffer): do.
-
-       * nnmail.el: Autoload gnus-kill-buffer.
-
-2003-02-11  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-summary-set-agent-mark): Added call to
-       gnus-summary-goto-subject as gnus-summary-update-mark operates on
-       the current LINE.
-       (gnus-agent-summary-fetch-group): Minimized the number of times
-       that the article is updated in the buffer.
-
-2003-02-11  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-ham-move-routine): use the process-mark instead of
-       gnus-current-article when moving articles
-       (spam-mark-spam-as-expired-and-move-routine): ditto, use the process-mark
-
-2003-02-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-topic.el (gnus-topic-expire-articles): Recursive.
-       (gnus-topic-catchup-articles): Ditto.
-       (gnus-topic-mark-topic): Reverse recursive logic.
-
-2003-02-11  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-refer-thread): Handle case where
-       gnus-refer-thread-limit is t.
-
-2003-02-10  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-util.el (mm-mule-charset-to-mime-charset): Use
-       sort-coding-systems to prefer utf-8 over utf-16.
-
-2003-02-09  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-expire-days):
-       gnus-request-move-article depends on gnus-agent-expire to clean up
-       the cache after moving the article.  Therefore, g-a-e-d can NOT
-       default to nil or can gnus-agent-expire be disabled by doing so.
-       If you don't want to run gnus-agent-expire, don't call it.
-       (gnus-agent-expire): The broken test to disable gnus-agent-expire
-       when g-a-e-d was NOT nil was removed.
-       (gnus-agent-article-name): Removed unnecessary input test as
-       article IDs are always strings.
-       (gnus-agent-regenerate-group): Added check to protect against
-       servers that generate absurdly long article IDs.  Valid IDs are
-       less than 10 digits to avoid overflow errors.  Fixed logic error
-       when ensuring that the final article ID is present in the new
-       alist.
-
-2003-02-09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-topic.el (gnus-topic-goto-missing-topic): Just move to the
-       next line after finding the parent.
-
-2003-02-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bumped.
-
-2003-02-08 23:23:27 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.15 is released.
-
-2003-02-08  Michael Welsh Duggan  <md5i@cs.cmu.edu>
-
-       * nnmail.el (nnmail-split-it): If a message ends up matching the
-         same mailbox more than once, it will cause duplicates to appear
-         in the mailbox.
-
-2003-02-08  Simon Josefsson  <jas@extundo.com>
-
-       * 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 <satyaki@chicory.stanford.edu>.
-
-2003-02-08  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-article-refer-article): Use
-       gnus-replace-in-string.
-
-       * gnus-util.el (gnus-map-function): Remove unneeded let-binding.
-       (gnus-remove-duplicates): do.
-
-2003-02-07  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-int.el (gnus-internal-registry-spool-current-method): new variable
-       (gnus-request-scan): set
-       gnus-internal-registry-spool-current-method to gnus-command-method
-       before a request-scan operation
-
-       * gnus-registry.el (regtest-nnmail): use
-       gnus-internal-registry-spool-current-method
-
-2003-02-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mail-source.el (mail-source-fetch): Typo fix.
-
-2003-02-07  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * nnmail.el (nnmail-spool-hook): new hook
-       (nnmail-cache-insert): call nnmail-spool-hook
-
-       * gnus-registry.el: new file with examples of using the hooks
-
-       * gnus.el (gnus-registry): added registry customization group
-       (gnus-group-prefixed-name): improve function to return full group
-       name optionally
-       (gnus-group-guess-prefixed-name): shortcut to
-       gnus-group-prefixed-name, using just the group name
-       (gnus-group-full-name): always get a group's full name
-       (gnus-group-guess-full-name): shortcut, using just the group name
-
-       * gnus-sum.el (gnus-summary-article-move-hook)
-       (gnus-summary-article-delete-hook)
-       (gnus-summary-article-expire-hook): new hooks
-       (gnus-summary-move-article, gnus-summary-expire-articles)
-       (gnus-summary-delete-article): invoke the new hooks
-
-2003-02-07  Frank Weinberg  <frank@usenet-rundfahrt.de>
-
-       * gnus-art.el (gnus-article-refer-article): Strip leading "news:"
-       from message-ID
-
-2003-02-07  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-util.el (gnus-run-hooks): Use save-current-buffer.
-
-2003-02-07  John Paul Wallington  <jpw@gnu.org>
-
-       * mm-util.el (mm-delete-duplicates, mm-append-to-file)
-       (mm-write-region, mm-detect-coding-region): Doc fixes.
-
-2003-02-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mail-source.el (mail-source-fetch): Ignore errors.
-       (mail-source-ignore-errors): New variable.
-
-       * gnus-sum.el (gnus-summary-refer-thread): Don't re-fetch current
-       articles.
-
-       * gnus-msg.el (gnus-version-expose-system): Change default.
-
-2003-02-07  Vasily Korytov  <deskpot@myrealbox.com>
-
-       * gnus-msg.el (gnus-version-expose-system): New variable.
-
-2003-02-07  Simon Josefsson  <jas@extundo.com>
-
-       * mml-sec.el (mml-unsecure-message): Don't use kill-region.  Tiny
-       patch from deskpot@myrealbox.com (Vasily Korytov).
-
-2003-02-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (article-display-face): Get the Face header from
-       the current buffer.
-
-2003-02-06  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-mime-view-part-internally): Bind
-       buffer-read-only to nil.
-
-2003-02-05  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-agent.el (gnus-agent-expire-1,2): Pass the dir argument
-       from g-a-e-1 to g-a-e-2.
-
-2003-02-05  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-check-BBDB): no need to regexp-quote the argument
-       of bbdb-search-simple, use spam-use-BBDB-exclusive
-       (spam-check-whitelist): use spam-use-whitelist-exclusive
-       (spam-use-whitelist-exclusive): new variable affecting
-       spam-use-whitelist
-       (spam-use-BBDB-exclusive): new variable affecting spam-use-BBDB
-
-2003-02-05  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-agent.el (gnus-agent-expire-days): Change default to nil.
-       (gnus-agent-expire): Don't expire if g-a-e-d is nil.
-       (gnus-agent-expire): Move most code into gnus-agent-expire-1.
-       (gnus-agent-expire-1): New.
-       (gnus-agent-expire-1): Move code into gnus-agent-expire-2.
-       (gnus-agent-expire-2): New.
-
-2003-02-05  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-util.el (gnus-delete-if): Rename to gnus-remove-if.
-       "delete-if" is misleading because it isn't actually destructive.
-
-       * gnus-topic.el (gnus-group-prepare-topics): Use new name.
-
-       * nnmail.el (nnmail-purge-split-history): do.
-
-       * gnus-win.el (gnus-get-buffer-window): do.
-
-       * gnus-sum.el (gnus-simplify-whitespace): Remove unnecessary
-       let-binding.
-       (gnus-simplify-all-whitespace): do.
-
-2003-02-05  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-delay.el (gnus-delay-article): Fix binding of the
-       nndraft:delayed group.
-
-2003-02-04  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus.el (spam group parameters): change 'other to 'const in
-       the group parameter definitions to soothe XEmacs
-
-2003-02-04  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-delay.el (gnus-delay-article): Really create
-       nndraft:delayed group if it doesn't exist.
-
-2003-02-04  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-search-article): Speed up by
-       disabling various visual features while searching.
-       (gnus-summary-recenter): Test gnus-auto-center-summary first.
-
-2003-02-03  Jesper Harder  <harder@ifa.au.dk>
-
-       * spam.el (spam-list-of-checks): Don't quote nil and t in
-       docstrings.  From the elisp manual:
-
-          When a documentation string refers to a Lisp symbol, write
-          it [..] with single-quotes around it.  [..] There are two
-          exceptions: write t and nil without single-quotes.
-
-       * messcompat.el (message-from-style): do.
-
-       * message.el (message-send-mail): do.
-
-       * gnus-util.el (gnus-use-byte-compile): do.
-
-       * gnus-score.el (gnus-score-lower-thread): do.
-
-       * gnus-int.el (gnus-server-unopen-status): do.
-
-       * gnus.el (gnus-define-group-parameter, gnus-large-newsgroup)
-       (large-newsgroup-initial, gnus-install-group-spam-parameters): do.
-
-       * gnus-cus.el (gnus-group-customize, gnus-score-parameters)
-       (gnus-group-parameters): do.
-
-       * gnus-art.el (gnus-article-mime-match-handle-function): do.
-
-       * mm-decode.el (mm-text-html-renderer): do.
-
-2003-02-02  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * nnheader.el (nnheader-directory-separator-character): Change the
-       way to compute the dafault value.
-
-2003-02-02  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-button-handle-describe-key): Implement it.
-       (gnus-button-alist): Fix regexp for describe-key.
-       (gnus-button-handle-describe-function)
-       (gnus-button-handle-describe-variable)
-       (gnus-button-handle-apropos, gnus-button-handle-apropos-command)
-       (gnus-button-handle-apropos-variable)
-       (gnus-button-handle-apropos-documentation): Docstring fix.
-
-       * gnus-util.el (gnus-kill-buffer): Use get-buffer.
-
-2003-02-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-draft.el (gnus-group-send-queue): Bind gnus-posting-styles
-       to nil.
-
-       * nnmail.el: Removed gnus-util autoload.
-
-       * gnus.el: Use gnus-prin1-to-string throughout.
-
-       * gnus-util.el (gnus-prin1-to-string): Bind print-length and
-       print-level.
-
-       * gnus-art.el (article-display-x-face): Removed grey x-face stuff.
-       (gnus-treat-display-grey-xface): Removed.
-
-       * gnus-fun.el (gnus-grab-cam-face): New.
-       (gnus-convert-image-to-gray-x-face): Removed.
-       (gnus-convert-gray-x-face-to-xpm): removed.
-       (gnus-convert-gray-x-face-region): Removed.
-       (gnus-grab-gray-x-face): Removed.
-
-       * nnmail.el (nnmail-expiry-wait-function): Doc indent.
-
-2003-01-31  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-util.el (gnus-kill-buffer): Functions in gnus-util
-       shouldn't depend on the rest of Gnus, so test if gnus-buffers is
-       bound.
-
-       * nnmail.el (nnmail-cache-close): Use gnus-kill-buffer.
-
-2003-01-30  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-cite.el (gnus-cite-reply-regexp, gnus-cite-always-check):
-       Remove -- these are bogus options which are never used.
-
-2003-01-29  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-article-mode): Use summary tool bar.
-
-2003-01-27  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-check-blackholes)
-       (spam-blackhole-good-server-regex): new variable to skip some IPs
-       when checking blackholes; use it
-       (spam-check-bogofilter-headers)
-       (spam-bogofilter-bogosity-positive-spam-header): new variable, in
-       case more X-Bogosity is used than just "Yes/No"
-       (spam-ham-move-routine): semi-fixed, only first article is
-       properly moved now
-
-2003-01-27  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-util.el (gnus-kill-buffer): Remove buffer from gnus-buffers
-       as well.
-
-       * gnus-sum.el (gnus-select-newsgroup): Use gnus-kill-buffer.
-
-       * gnus-score.el (gnus-score-headers, gnus-score-find-bnews): do.
-
-       * gnus-start.el (gnus-save-newsrc-file, gnus-clear-system): do.
-
-       * gnus-bcklg.el (gnus-backlog-shutdown): do.
-
-       * gnus-srvr.el (gnus-server-exit, gnus-browse-exit): do.
-
-2003-01-26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el (gnus-face-encode): New function.
-       (gnus-convert-png-to-face): Use it.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Added M-& to marks.
-
-2003-01-26  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-decode.el (mm-dissection-list): Remove.
-       (mm-dissect-singlepart): Don't push to mm-dissection-list, it's
-       only used in mm-remove-all-parts.
-       (mm-remove-all-parts): Remove it, it's never called.
-
-2003-01-25  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-group-make-group): Report errors.
-
-       * nnimap.el (nnimap-request-create-group): Ditto.
-
-       * sieve-manage.el (sieve-manage-is-okno): Parse literal strings.
-
-       * sieve.el (sieve-upload): Fix error printing.
-
-       * mm-encode.el (mm-qp-or-base64): Always QP iff
-       mm-use-ultra-safe-encoding and cleartext PGP.
-
-       * gnus-sum.el (gnus-summary-select-article): Inhibit
-       redisplay (mainly for secured messages).
-
-       * nnmail.el (nnmail-article-group): Copy body too (but don't
-       process it).
-
-2003-01-25  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-article-setup-buffer): Reset
-       gnus-button-marker-list.
-
-2003-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nntp.el (nntp-read-timeout): Default to using a second delay
-       under Microsoft Windows.
-
-2003-01-24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnheader.el (nnheader-directory-separator-character): New
-       variable.
-
-2003-01-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-agent-max-fetch-size)
-       (gnus-agent-article-alist, gnus-agent-get-undownloaded-list)
-       (gnus-agent-catchup, gnus-agent-summary-fetch-group)
-       (gnus-agent-fetch-articles, gnus-agent-backup-overview-buffer)
-       (gnus-agent-flush-cache, gnus-agent-fetch-headers)
-       (gnus-agent-braid-nov, gnus-agent-load-alist)
-       (gnus-agent-article-alist-save-format)
-       (gnus-agent-read-agentview, gnus-agent-save-alist)
-       (gnus-agent-fetch-group-1, gnus-agent-expire)
-       (gnus-agent-uncached-articles, gnus-agent-retrieve-headers)
-       (gnus-agent-regenerate-group): Reformat to keep under eighty
-       columns.  Reword docstrings so that first line is under eighty
-       chars and a complete sentence.  Still need to work on the rear
-       end of the file, in particular gnus-agent-expire.
-
-2003-01-24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agentize): Indent.
-
-       * gnus.el (gnus-version-number): Bumped.
-
-2003-01-24 20:32:44 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.14 is released.
-
-2003-01-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-sum.el (gnus-summary-prepare-threads): Reset state for %B
-       before beginning.  Tiny patch from Mark Thomas
-       <swoon@bellatlantic.net>.
-
-2003-01-24  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-check-blackholes, spam-split)
-       (spam-mark-junk-as-spam-routine, spam-summary-prepare-exit): added
-       gnus-message calls to show to users what spam.el is doing
-
-2003-01-24  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-msg.el (gnus-message-replysign)
-       (gnus-message-replyencrypt): Fix typo.
-
-2003-01-24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-mime-security-show-details): Toggle showing
-       details.
-
-2003-01-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-press-button): let* -> let.
-       (gnus-mime-security-show-details): Cleaned up.
-       (gnus-mime-security-press-button): Save excursion.
-       (gnus-insert-mime-security-button): Clean up.
-
-       * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Doc fix.
-
-       * gnus-async.el (gnus-async-wait-for-article): Don't use a
-       timeout.
-
-       * nntp.el (nntp-accept-process-output): Removed timeout.
-       (nntp-read-timeout): New variable.
-       (nntp-accept-process-output): Use it.
-
-       * gnus-sum.el (gnus-data-find-list): Remove *.
-
-2003-01-23  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-sum.el (gnus-summary-first-subject): Fixed bug that I
-       introduced on 2002-01-22.
-       (gnus-summary-first-unseen-or-unread-subject): Ditto.
-
-2003-01-23  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-check-regex-headers, spam-list-of-checks)
-       (spam-regex-headers-spam, spam-regex-headers-ham): added spam/ham
-       checks of incoming mail based on simple header regexp matching
-
-2003-01-22  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * gnus-sum.el (gnus-spam-mark): set to `$'
-
-2003-01-22  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-get-undownloaded-list): Now computes
-       gnus-newsgroup-unfetched, the list of articles whose headers have
-       not been fetched from the server.
-
-       * gnus-sum.el (gnus-summary-find-next): Removed undownloaded
-       parameter as it never worked due to a bug.  Added check to prevent
-       selection of any article in the gnus-newsgroup-unfetched list.
-       (gnus-summary-find-prev): Added check to prevent selection of any
-       article in the gnus-newsgroup-unfetched list.
-       (gnus-summary-first-subject): Documented API. Modified
-       implementation so that constraints are handled independently.
-       Added check to prevent selection of any article in the
-       gnus-newsgroup-unfetched list.
-       (gnus-summary-first-unseen-subject): Updated parameters in
-       gnus-summary-first-subject call to match new API.
-       (gnus-summary-first-unseen-or-unread-subject): Ditto.
-       (gnus-summary-catchup): Do not mark unfetched articles as read.
-
-2003-01-22  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-treat-strip-pgp, gnus-article-hide-pgp-hook):
-       make-obsolete-variable allows only two arguments in XEmacs and
-       Emacs 20.
-
-       * gnus-sum.el (gnus-summary-wash-hide-map): Remove
-       gnus-article-hide-pgp.
-       (gnus-summary-make-menu-bar): do.
-
-       * gnus-art.el (gnus-treat-strip-pgp): Make obsolete.
-       (gnus-treatment-function-alist): Remove gnus-treat-strip-pgp and
-       gnus-article-hide-pgp.
-       (article-hide-pgp): Remove.
-       (gnus-article-hide): Remove gnus-article-hide-pgp.
-
-       * gnus.el: Remove gnus-article-hide-pgp
-
-2003-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-required-headers): Doc fix.
-
-2003-01-21  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-group-ham-processor-bogofilter-p): fixed bug
-       (spam-ifile-register-ham-routine, spam-ifile-ham-category): new
-       option to make ifile a purely binary classifier
-
-2003-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mml-sec.el (mml-secure-sign-pgpauto): Renamed.
-       (mml-secure-encrypt-pgpmime): Removed double.
-
-       * gnus-sum.el (gnus-summary-mark-article-as-replied): Added
-       debugging statements.
-
-2003-01-21  Andreas Fuchs  <asf@void.at>
-
-       * mml-sec.el (mml-sign-alist): Added pgpauto.
-
-2003-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bumped version number.
-
-2003-01-21 07:15:41 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.13 is released.
-
-2003-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-button-url-regexp): Removed |.
-
-       * message.el (message-send-hook): Doc fix.
-
-       * gnus-win.el (gnus-buffer-configuration): Display article
-       instead of article-copy when `reply'.
-
-2003-01-21  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus.el (gnus-format): Change customize group to gnus.
-       (gnus-cache): Add link.
-       (gnus-group-charter-alist): Fix docstring.
-
-2003-01-20  Jesper Harder  <harder@ifa.au.dk>
-
-       * mailcap.el (mailcap-print-command): lpr-command might be
-       unbound in XEmacs.
-
-2003-01-18  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-regenerate-group): Added interactive form.
-
-       * gnus-sum.el (gnus-summary-update-article-line): Fixed
-       calculation of net characters added for use in the gnus-data
-       structure.
-
-2003-01-18  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * nnmail.el (nnmail-process-unix-mail-format): Improve error
-       message.  Suggested by Jari Aalto.
-
-2003-01-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-followup-with-original): Clean up.
-       (gnus-article-reply-with-original): Ditto.
-
-       * gnus-sum.el (gnus-summary-catchup): Make sure downloadable,
-       read articles don't become unread.
-
-2003-01-17  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-fun.el (gnus-x-face-from-file):
-       (gnus-face-from-file): Suggest image format in minibuffer prompt.
-
-       * gnus-fun.el (gnus-convert-image-to-x-face-command)
-       (gnus-convert-image-to-face-command): Doc fix.
-
-2003-01-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el (gnus-convert-face-to-png): Protect against errors.
-
-2003-01-17  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-mime-print-part): Use mm-save-part-to-file to
-       avoid encoding problems.
-
-       * mailcap.el (mailcap-ps-command): New variable.
-       (mailcap-mime-data): Add print entry where applicable.  Use
-       pdftotext on a tty.
-
-2003-01-16  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-alter-header-function): Add type and group.
-
-2003-01-16  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-fun.el (gnus-convert-image-to-x-face-command)
-       (gnus-convert-image-to-face-command, gnus-x-face-from-file)
-       (gnus-face-from-file): Doc fix; don't mention image format.
-
-2003-01-16  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-get-article-as-filename): new function (unused for now)
-       (spam-get-article-as-buffer): new function
-       (spam-get-article-as-string): use spam-get-article-as-buffer
-       (spam-summary-prepare-exit): fixed bug, noticed by Malcolm Purvis
-
-2003-01-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el: Don't use `path'.
-       From the GNU coding standards:
-
-           Please do not use the term ``pathname'' that is used in Unix
-           documentation; use ``file name'' (two words) instead.  We use
-           the term ``path'' only for search paths, which are lists of
-           directory names.
-
-       * nnsoup.el (nnsoup-file-name): Ditto.
-
-       * nnmail.el (nnmail-pathname-coding-system): Ditto.
-       (nnmail-group-pathname): Ditto.
-
-       * nnimap.el (nnimap-group-overview-filename): Ditto.
-
-       * nnheader.el (nnheader-pathname-coding-system): Ditto.
-       (nnheader-group-pathname): Ditto.
-
-       * nnfolder.el (nnfolder-group-pathname): Ditto.
-
-       * gnus.el (gnus-home-directory): Ditto.
-
-       * gnus-group.el (gnus-group-icon-list): Ditto.
-
-2003-01-16  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-mime-print-part): Use mm-handle-media-type.
-
-       * message.el (message-mode-menu): Use it.
-       (message-mode-menu): Deactivate "Yank Original" if there's no
-       reply buffer.
-
-       * messagexmas.el (message-xmas-redefine): Redefine in XEmacs.
-
-       * message.el (message-mark-active-p): New function.
-
-2003-01-15  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-use-bogofilter-headers, spam-bogofilter-header)
-       (spam-bogofilter-database-directory): new variables
-       (spam-check-bogofilter-headers, spam-check-bogofilter)
-       (spam-bogofilter-register-with-bogofilter)
-       (spam-bogofilter-register-spam-routine)
-       (spam-bogofilter-register-ham-routine)
-       (spam-group-ham-processor-bogofilter-p): new functions for the new
-       Bogofilter interface
-       (spam-summary-prepare-exit): use the new Bogofilter functions
-       (spam-list-of-checks): added spam-use-bogofilter-headers
-       (spam-bogofilter-score): rewrote function
-       (spam-check-bogofilter): optional score parameter, uses
-       spam-check-bogofilter-headers better
-       (spam-check-bogofilter-headers): optional score parameter
-
-       * gnus.el (gnus-install-group-spam-parameters): new variable, t by
-       default, in the gnus-start customization group.  Used to disable
-       the spam-*/ham-* parameters.
-       (gnus-group-ham-exit-processor-bogofilter): new ham processor
-
-2003-01-15  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-xmas.el (gnus-xmas-redefine): Use region-exists-p in
-       XEmacs.
-
-       * gnus-ems.el (gnus-mark-active-p): do.
-
-2003-01-15  Kevin Ryde  <user42@zip.com.au>
-
-       * gnus.texi (Using MIME): Mention auto-compression-mode with
-       gnus-mime-copy-part.
-
-2003-01-15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-send): Don't warn about duplicates when
-       superseding.
-
-2003-01-15  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-split-download-body): New variable.
-       (nnimap-split-articles): Use it.
-
-2003-01-14  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-check-overview-buffer): This data
-       integrity checker was incorrectly flagging, and removing, articles
-       whose article number was negative.
-       (gnus-agent-fetch-group-1): When executed in the group's summary
-       buffer, refresh each downloaded line to update the status flag and
-       font.  Preserve the value of gnus-newsgroup-headers so that
-       gnus-agent-fetch-articles can split the requests by size.
-       (gnus-agent-expire): Corrected day calculation for when
-       gnus-agent-expire-days contains a list.
-
-2003-01-14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-audio.el (gnus-audio-au-player): Use executable-find.
-
-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.
-         (gnus-audio-play): Added ARG-DESCRIPTOR to prompt for a file to play.
-
-2003-01-14  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-msg.el (gnus-inews-add-send-actions): Allow a list of
-       articles to be marked as well.
-
-2003-01-14  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-       * gnus-agent.el (gnus-agent-get-undownloaded-list): Include the
-       fictious headers generated by nnagent (ie. Undownloaded Article
-       ####) in the list of articles that have not been downloaded.
-
-       * gnus-int.el (): Added require declarations to resolve
-       compile-time warnings.
-       (gnus-open-server): If the server status is set to offline,
-       recursively execute gnus-open-server to open the offline backend
-       (e.g. nnagent).
-
-2003-01-14  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (gnus-article-reply-with-original): Use
-       gnus-mark-active-p.
-       (gnus-article-followup-with-original): do.
-
-2003-01-13  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-sum.el: Removed `(when t ...)' around `gnus-define-keys'.
-
-2003-01-13  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-score.el (gnus-score-edit-file-at-point): New function.
-       (gnus-score-find-trace): Bind it to `e' key.  Added `q' for quit.
-
-2003-01-13  Romain FRANCOISE  <romain@orebokech.com>
-
-       * gnus-fun.el (gnus-x-face-from-file): Quote file name.
-       (gnus-face-from-file): Ditto.
-
-2003-01-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-articles-to-read): Don't just apply
-       gnus-alter-articles-to-read-function to the unread articles.
-
-2003-01-13  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * deuglify.el (gnus-article-outlook-unwrap-lines)
-       (gnus-article-outlook-repair-attribution)
-       (gnus-article-outlook-rearrange-citation): New function names,
-       renamed from "gnus-outlook-" to "gnus-article-outlook-".  Changed
-       doc-string.
-
-       * gnus-sum.el (gnus-summary-mode-map): Use new function names,
-       removed `W k' key binding (use `W Y f' instead).
-       (gnus-summary-make-menu-bar): Use new function names.
-
-2003-01-13  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-fun.el (gnus-random-x-face): Doc fix.
-       (gnus-insert-random-x-face-header): New function.
-
-2003-01-13  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Deactivate items if
-       mark is not active.
-
-       * gnus-msg.el (gnus-inews-do-gcc): Comment.
-
-       * gnus-ems.el (gnus-mark-active-p): New function.
-
-       * gnus-group.el (gnus-topic-mode-p): New function.
-       (gnus-group-make-menu-bar): Show more key bindings in topic mode.
-       Deactivate items if mark is not active.
-
-2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bumped version.
-       (gnus-summary-line-format): Doc fix.
-
-2003-01-12 22:02:49 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.12 is released.
-
-2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mail-source.el (mail-sources): Removed autoload to make it
-       compile under XEmacs.
-
-2003-01-12  Raymond Scholz  <ray-2003@zonix.de>
-
-       * gnus-msg.el (gnus-confirm-mail-reply-to-news):  May be a
-       regexp or a function too.
-       (gnus-confirm-treat-mail-like-news): New variable.  Ask for
-       confirmation even if the original article is mail.
-
-2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-inews-add-send-actions): Get the right
-       articles to be marked when not yanking.
-
-2003-01-12  Fran\e,Ag\e(Bois-David Collin  <Francois-David.Collin@curie.fr>
-
-       * mm-decode.el (mm-get-part): Use mm-with-unibyte-current-buffer.
-
-2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el (gnus-face-from-file): Autoload.
-
-       * gnus-cite.el (gnus-cite-delete-overlays): Protect against more
-       errors.
-
-2003-01-12  Simon Josefsson  <jas@extundo.com>
-
-       * sieve.el (sieve-upload-and-bury): New.  Suggested by
-       kai.grossjohann@uni-duisburg.de (Kai Gro\e,A_\e(Bjohann).
-
-       * sieve-mode.el (sieve-mode-map): Bind s-u-a-b to C-c C-c.
-       Suggested by kai.grossjohann@uni-duisburg.de (Kai Gro\e,A_\e(Bjohann).
-
-2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-ignored-headers): Don't include the ^ and :
-       in every string.
-
-       * gnus.el (gnus-version-number): Bumped version number.
-
-2003-01-12 13:46:20 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.11 is released.
-
-2003-01-12  Jesper Harder  <harder@ifa.au.dk>
-
-       * message.el (message-fetch-reply-field): Narrow to headers.
-
-       * gnus-msg.el (gnus-inews-do-gcc): Don't try to mark GCC's as read
-       if Gnus isn't alive.
-
-2003-01-11  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-fetch-group-1): Remove downloadable
-       marks from articles that are already stored in the agent.
-       (gnus-agent-backup-overview-buffer): New debug tool.  Creates a
-       backup copy of an invalid .overview file for later analysis.
-
-2003-01-12  Gregorio Gervasio, Jr.  <gtgj@pacbell.net>
-
-       * gnus-sum.el (gnus-summary-exit): Reverse change to make group
-       exit work with two frames.
-
-2003-01-11  Fran\e,Ag\e(Bois-David Collin  <Francois-David.Collin@wanadoo.fr>
-
-       * message.el (message-forward-make-body): Use mule4.
-
-2003-01-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-mode-map): Move wide-reply command.
-
-2003-01-10  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * deuglify.el (gnus-outlook-deuglify-attrib-verb-regexp): Added
-       castellano.
-       (gnus-outlook-display-hook): New variable.
-       (gnus-outlook-display-article-buffer): New function.
-       (gnus-outlook-unwrap-lines, gnus-outlook-repair-attribution)
-       (gnus-outlook-deuglify-article): Made them interactive and added
-       optional arg.  Use `g-o-d-a-b'.
-       (gnus-article-outlook-deuglify-article): Use `g-o-d-a-b'.
-
-       * gnus-sum.el: Added autoloads.
-       (gnus-summary-mode-map): Added gnus-summary-wash-deuglify-map.
-       (gnus-summary-make-menu-bar): Added "(Outlook) Deuglify" menu.
-
-2003-01-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-display-mime): Use the mime emulation
-       variable.
-
-       * gnus-sum.el (gnus-article-emulate-mime): New variable.
-
-       * gnus-start.el (gnus-read-newsrc-el-file): Make sure that the
-       newsrc-alist is initialized properly.
-
-       * mail-source.el (mail-sources): Autoload.
-
-       * gnus-sum.el (gnus-summary-make-false-root-always): Default to
-       nil.
-
-       * gnus-msg.el (gnus-configure-posting-styles): Make sure we don't
-       insert two newlines.
-
-       * message.el (message-check-news-header-syntax): Compute the
-       header length correctly.
-
-2003-01-10  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-expire): Do not remove article from
-       alist when keeping fetched article file.
-       (gnus-agent-retrieve-headers): When parsing response for article
-       numbers, use the same algorithm as gnus-agent-braid-nov to protect
-       against garbage in the server's response.
-
-       * gnus-int.el (gnus-request-expire-articles,
-       gnus-request-move-article): Only expire when the group's server
-       has been agentized.
-
-2003-01-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-cite.el (gnus-cite-delete-overlays): Protect against
-       errors when deleting overlays.
-
-       * gnus-score.el (gnus-score-followup): Allow tracing.
-
-       * gnus-art.el (gnus-treat-display-face): New variable.
-       (article-display-face): New command.
-
-       * gnus-fun.el (gnus-face-from-file): New function.
-       (gnus-convert-face-to-png): Ditto.
-
-       * gnus-art.el (gnus-ignored-headers): Added Face.
-
-2003-01-10  Simon Josefsson  <jas@extundo.com>
-
-       * nndraft.el (nndraft-request-group): Avoid crash in
-       directory-files when draft directory doesn't exists.
-
-       * gnus-sum.el (gnus-select-article-hook): Add :option.
-
-2003-01-10  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-use-stat): new variable
-       (spam-group-spam-processor-stat-p)
-       (spam-group-ham-processor-stat-p): new convenience functions
-       (spam-summary-prepare-exit): add spam/ham processors to sequence
-       (spam-list-of-checks): add spam-use-stat to list of checks
-       (spam-split): conditionally load the spam-stat tables
-       (spam-stat-register-spam-routine, spam-stat-register-ham-routine,
-       spam-check-ifile): new functions
-
-       * spam-stat.el (spam-stat): typo fix
-       (spam-stat-install-hooks): new variable
-       (spam-stat-split-fancy-spam-group): added documentation clarification
-       (spam-stat-split-fancy-spam-threshhold): new variable
-       (spam-stat-install-hooks): make hooks conditional
-       (spam-stat-split-fancy): use spam-stat-split-fancy-spam-threshhold
-
-       * gnus.el (gnus-group-ham-exit-processor-stat, spam-process): add
-       spam-stat ham/spam processor symbols
-
-2003-01-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-start.el (gnus-read-newsrc-el-file): Make sure the .eld
-       file exists.
-
-2003-01-10  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-read-group-1): Don't select first
-       undownloaded/downloadable only when unplugged.
-
-2003-01-10  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-srvr.el (gnus-browse-foreign-server): Optimize inner loop.
-
-2003-01-09  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-check-ifile): fixed call-process-region to use the
-       db parameter only if it's set
-       (spam-ifile-register-with-ifile): ditto
-
-2003-01-09  Alex Schroeder  <alex@emacswiki.org>
-
-       * spam-stat.el (spam-stat-save): Set spam-stat-ngood and
-       spam-stat-nbad before creating the hash table.
-       (spam-stat-reset): Set spam-stat-ngood and spam-stat-nbad to 0.
-       Changed copyright statement to FSF.
-
-2003-01-09  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-catchup): Do not mark cached nor
-       processable articles as read.
-       (gnus-agent-summary-fetch-series): Remove processable and
-       downloadable marks on all downloaded articles in the series.
-
-       * nntp.el (nntp-report): Throw error after reporting the problem.
-       (nntp-accept-process-output): Corrected error check to report an
-       error when the process is nil.
-
-2003-01-09  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-tool-bar-map): Add preview.
-
-2003-01-09  Jesper Harder  <harder@ifa.au.dk>
-
-       * mml.el (mml-preview): Get rid of MIME handles and buffers after
-       previewing.
-
-2003-01-08  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir--grp-add-art): Fix wrong-type-argument
-       bug when the (n+1)th article to be added to a group has a smaller
-       number than the n articles already added.
-
-2003-01-08  Jesper Harder  <harder@ifa.au.dk>
-
-       * message.el (message-mode-field-menu): Use backquote.
-
-2003-01-08  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el: fixed the BBDB autoloads again, using
-       bbdb-search-simple now (which is not a macro, thank god)
-
-       * lpath.el (bbdb-search): removed function from maybe-fbind list
-
-       * gnus.el (ham-process-destination): added new parameter for
-       destination of ham articles found in spam groups at summary exit
-
-       * spam.el (spam-get-ifile-database-parameter): use spam-ifile-database-path
-       (spam-check-ifile, spam-ifile-register-with-ifile): use spam-get-ifile-database-parameter
-       (spam-ifile-database-path): added new parameter for ifile's database
-       (spam-move-spam-nonspam-groups-only): new parameter to determine
-       if spam should be moved from all groups or only some
-       (spam-summary-prepare-exit): fixed logic to use
-       spam-move-spam-nonspam-groups-only when deciding to invoke
-       spam-mark-spam-as-expired-and-move-routine; always invoke that
-       routine after the spam has been expired-or-moved in case there's
-       some spam left over; use spam-ham-move-routine in spam groups
-       (spam-ham-move-routine): new function to move ham articles to the
-       ham-process-destinations group parameter
-
-2003-01-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-spec.el (gnus-parse-complex-format): %~ => ~*.
-
-       * gnus-agent.el (gnus-agent-fetch-selected-article): Use
-       gnus-summary-update-article-line.
-
-2003-01-08  Simon Josefsson  <jas@extundo.com>
-
-       * nnmail.el (nnmail-expiry-target-group): Request group, create it
-       not successful.
-
-2003-01-08  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * lpath.el (bbdb-records): Fbind it for both Emacs and XEmacs.
-
-2003-01-07  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-check-ifile): fixed the spam-ifile-all-categories
-       logic, finally
-
-2003-01-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-spec.el (gnus-parse-format): %C is a complex format.
-       (gnus-parse-format): Change to %~.
-
-       * message.el (message-generate-headers): Don't generate optional
-       empty headers.
-
-2003-01-07  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * message.el (message-cross-post-default)
-       (message-cross-post-note-function, message-shoot-gnksa-feet)
-       (message-strip-subject-trailing-was, message-change-subject)
-       (message-mark-insert-file, message-cross-post-followup-to)
-       (message-cross-post-followup-to, message-mode-map)
-       (message-generate-unsubscribed-mail-followup-to)
-       (message-make-mail-followup-to): Minor changes to doc-strings and
-       error messages.  Updated copyright line.
-
-       * message.el (message-make-mail-followup-to,
-       message-generate-unsubscribed-mail-followup-to): New function
-       names.  Renamed functions: "-mft" -> "-mail-followup-to".
-       (message-make-mft, message-gen-unsubscribed-mft): Removed function
-       names.
-
-       * mml.el (mml-preview-insert-mail-followup-to): New function name.
-       (mml-preview-insert-mft): Removed function name.
-       (mml-preview): Use new function names.
-
-       * gnus-art.el (gnus-article-edit-mode-map): Use new function names.
-
-       * message.el (message-mode-field-menu): Moved header related
-       commands from "Message" to "Field" menu.
-
-2003-01-07  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * message.el (message-generate-headers-first): Added customization
-       if variable is a list.
-
-2003-01-07  Michael Shields  <shields@msrl.com>
-
-       * gnus-art.el (gnus-article-next-page): Correctly handle the case
-       where the last line of the article is the last line of the window.
-
-2003-01-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-debug): Use ignore-errors.
-
-       * gnus-agent.el (gnus-agent-fetch-selected-article): Use
-       `gnus-summary-update-line'.
-
-2003-01-08  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-unbuttonized-mime-types)
-       (gnus-buttonized-mime-types): Doc fix.
-
-2003-01-08  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-decode.el (mm-inline-media-tests): .xpm is 'x-xpixmap'.
-
-2003-01-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-group-alist): Add and clear up.
-
-2003-01-07  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el: removed unnecessary condition-case for loading bbdb-com.el
-
-       * lpath.el (bbdb-search): added BBDB functions for a better way to
-       fix missing functions
-
-       * spam.el (spam-check-ifile): if should be an unless
-
-       * spam.el: define 'ignore alias for spam-BBDB-register-routine,
-       spam-enter-ham-BBDB, and bbdb-create-internal initially to hush up warnings
-       (spam-ifile-all-categories): doc string fixed to be less than 80 chars
-
-2003-01-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Added
-       gnus-summary-refer-thread to thread menu.
-
-2003-01-07  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-fetch-group-1): When fetching within a
-       summary buffer, articles that cannot be fetched are marked as
-       canceled.
-
-       * nntp.el (nntp-with-open-group): The quit signal handler must
-       propagate the quit signal to the next outer handler so that the
-       caller knows that the request aborted abnormally.
-
-2003-01-07  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-check-ifile, spam-ifile-register-with-ifile)
-       (spam-ifile-register-spam-routine)
-       (spam-ifile-register-ham-routine): added ifile functionality that
-       does not use ifile-gnus.el to classify and register articles
-       (spam-get-article-as-string): convenience function
-       (spam-summary-prepare-exit): added ifile spam and ham registration
-       (spam-ifile-all-categories, spam-ifile-spam-category)
-       (spam-ifile-path, spam-ifile): added customization options
-
-       * gnus.el (gnus-group-ham-exit-processor-ifile): added ifile ham
-       exit processor
-       (spam-process): added gnus-group-ham-exit-processor-ifile to the
-       list of choices
-
-2003-01-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-score.el (gnus-score-followup): Also score immediate
-       followups.
-
-2003-01-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnweb.el (nnweb-asynchronous-p): Changed to nil.
-
-2003-01-07  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-mode-menu): Fix receipt balloon help.
-
-2003-01-07  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-msg.el (gnus-group-post-news): Don't assume that "" will
-       always be interpreted as news.
-
-2003-01-07  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sieve.el (gnus-sieve-script): Use the crosspost argument to
-       gnus-sieve-script, instead of the global variable
-       gnus-sieve-crosspost.  One-line patch from Steinar Bang
-       <sb@dod.no>.
-
-2003-01-06  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus.el: Renamed gnus-summary-*-uncached-face as
-       gnus-summary-*-undownloaded-face to avoid confusing the agent with
-       the cache.
-
-       * gnus-sum.el: Ditto.
-
-2003-01-06  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-fetch-group): Modified to permit execution
-       in either the group or summary buffer.
-       New command "JS", in summary buffer, will fetch articles per the
-       group's category, predicate, and processable flags.
-       (gnus-agent-summary-fetch-series): Rewritten to call
-       gnus-agent-session-fetch-group once with all articles in the
-       series.
-       (gnus-agent-summary-fetch-group): Fixed bug and modified code to
-       return list of fetched articles.
-       (gnus-agent-fetch-articles): Split fetch list into sublists such
-       that the article buffer is only slightly larger than
-       gnus-agent-max-fetch-size.  Added unwind-protect to ensure that
-       the group's article alist is saved.
-       (gnus-agent-fetch-headers): The 'killed' and 'cached' marks no
-       longer result in the agent trying to fetch an article.
-       (gnus-agent-fetch-group-1): Can now be called in either the group
-       or summary buffer.  Removed the max-fetch-size code that I added
-       on 2002-12-13 as that capability is now part of
-       gnus-agent-fetch-articles.  Added code to update summary buffer.
-       When called in the group buffer, articles that can not be fetched
-       are AUTOMATICALLY MARKED AS READ.
-
-       * gnus-sum.el (): Modified eval-when-compile to minimize
-       misleading compilation warnings.
-       (gnus-update-summary-mark-positions): Changed code to use
-       gnus-undownloaded-mark rather than gnus-downloaded-mark.
-
-       * nnheader.el (nnheader-insert-nov-file): Do not try to insert an
-       empty file as the parser assumes that the file isn't empty.
-
-       * nntp.el (nntp-send-string): The process-send-string call can,
-       because it performs I/O on the process, change the process' state
-       from open to closed.  If this happens, call nntp-report
-       immediately to report the broken connection.
-       (nntp-report): Rewritten to avoid needing a global variable to
-       determine the appropriate course of action.  Instead, two function
-       implementations are provided and the nntp-report function value is
-       bound to the appropriate implementation.
-       (nntp-retrieve-data): Moved nntp-report call to end of implementation.
-       (nntp-with-open-group): Now binds nntp-report's function cell
-       rather than binding gnus-with-open-group-first-pass.  Added a
-       condition-case to detect a quit during a nntp command.  When the
-       quit occurs, the current connection is closed as a fetch articles
-       request could have several megabytes queued up for reading.
-       (nntp-retrieve-headers): Bind articles to itself.  If
-       nntp-with-open-group repeats this command, I must have access to
-       the original list of articles.
-       (nntp-retrieve-groups): Ditto for groups.
-       (nntp-retrieve-articles): Ditto for articles.
-       (*): Replaced nntp-possibly-change-group calls to
-       nntp-with-open-group forms in all, but one, occurrance.
-       (nntp-accept-process-output): Bug fix. Detect when called with
-       null process.
-
-2003-01-06  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-util.el (mm-find-mime-charset-region): Don't do Latin-9 hack
-       if we don't need to.
-       (mm-iso-8859-x-to-15-region): Fix misplaced parenthesis.
-
-2003-01-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-group.el (gnus-group-make-web-group): Pass the select
-       method on to group-create.
-       (gnus-group-line-format-alist): %U is an integer.
-
-       * gnus-sum.el (gnus-summary-exit-no-update): Don't update
-       ephemeral groups.
-       (gnus-summary-read-group-1): Ditto.
-       (gnus-group-make-articles-read): Ditto.
-
-       * mm-url.el (mm-url-program): Doc fix.
-
-       * message.el (message-mode-map): Rebound
-       message-insert-wide-reply.
-
-2003-01-05  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-xmas.el (gnus-xmas-group-startup-message): Bind the oort
-       color as `gnus-group-startup-message' does.
-
-2003-01-05  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el: fixed line lengths to 80 chars or less
-
-       * gnus-sum.el (gnus-read-mark-p): added the spam-mark as a
-       "not-read" mark
-       (gnus-summary-mark-forward): added the spam-mark to the list of
-       marks not to be marked as "read" when viewed
-
-2003-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-inews-make-draft): Quote article-reply.
-
-       * gnus-group.el (gnus-number-of-unseen-articles-in-group):
-       Protect against unactive groups.
-
-       * message.el (message-check-news-header-syntax): Check long
-       header lines.
-       (message-check-news-header-syntax): Update `start'.
-
-       * gnus-group.el (gnus-group-expire-articles): Doc fix.
-       (gnus-group-line-format): %U.
-       (gnus-group-line-format-alist): ?U.
-       (gnus-number-of-unseen-articles-in-group): New function.
-
-       * nntp.el (nntp-accept-process-output): Use a 0.1 second timeout.
-
-       * gnus.el (gnus-version-number): Bump version number.
-
-2003-01-05 01:53:30 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.10 is released.
-
-2003-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Fix version number.
-
-2003-01-05 01:40:09 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.08 is released.
-
-2003-01-04  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-util.el: Add mm-string-make-unibyte.
-
-       * gnus-group.el (gnus-group-jump-to-group): Make it work for
-       UTF-8 groups.
-
-2003-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-variable-list): Write gnus-format-specs last.
-
-       * gnus-sum.el (gnus-summary-goto-subjects): Fix typo.
-
-2003-01-04  Kevin Ryde  <user42@zip.com.au>
-
-       * gnus-art.el (gnus-mime-jka-compr-maybe-uncompress): New
-       function.
-
-2003-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-exit): Bind gnus-group-is-exiting-p.
-       (gnus-summary-read-group-1): Update group line.
-       (gnus-summary-exit-no-update): Update group on exit.
-
-       * gnus-group.el (gnus-group-line-format): Add %*.
-       (gnus-group-line-format-alist): Ditto.
-       (gnus-group-insert-group-line): Set it.
-       (gnus-group-is-exiting-p): New variable.
-       (gnus-group-insert-group-line): Use it.
-
-2003-01-03  Teodor Zlatanov  <tzz@beld.net>
-
-       * spam.el (spam-enter-ham-BBDB, spam-BBDB-register-routine):
-       enable BBDB ham processing
-       (spam-blacklist-register-routine): enable blacklist spam processing
-       (spam-whitelist-register-routine): enable whitelist ham processing
-       (spam-fetch-field-from-fast): fast fetching of the "from" field
-       from (gnus-data-list)
-       (spam-summary-prepare-exit): works completely now
-       (spam-use-blacklist): oops, should be nil by default
-       (spam-summary-prepare-exit): spam-use-PROCESSOR is only for
-       split processing now; before it was for summary exit as
-       well but that's done with the spam-contents and spam-process
-       parameters now
-
-2003-01-03  Jesper Harder  <harder@ifa.au.dk>
-
-       * mml.el (mml-insert-tag): Don't quote non-ASCII unibyte
-       characters.
-
-2003-01-02  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-group-spam-contents-p, spam-group-ham-contents-p)
-       (spam-group-processor-p, spam-group-processor-bogofilter-p)
-       (spam-group-processor-ifile-p, spam-group-processor-blacklist-p)
-       (spam-group-processor-whitelist-p, spam-group-processor-BBDB-p)
-       (spam-mark-spam-as-expired-and-move-routine)
-       (spam-generic-register-routine, spam-BBDB-register-routine)
-       (spam-ifile-register-routine, spam-blacklist-register-routine)
-       (spam-whitelist-register-routine): new functions
-       (spam-summary-prepare-exit): added summary exit processing (expire
-       or move) of spam-marked articles for spam groups; added slots for
-       all the spam-*-register-routine functions
-
-2003-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * pop3.el (pop3-retr): Wait 500 msecs.
-       (pop3-read-response): Ditto.
-
-       * gnus-msg.el (gnus-setup-message): Get the evaliation order
-       right.
-       (gnus-inews-make-draft): New function.
-       (gnus-setup-message): Use it.
-
-       * message.el (message-required-headers): Add From.
-
-2003-01-02  Katsumi Yamaoka  <yamaoka@jpl.org>
-       Trivial patch from Norbert Koch <nk@viteno.net>.
-
-       * gnus-msg.el (gnus-gcc-externalize-attachments): Fix typo.
-
-2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-generate-headers): Let header formatters do
-       their work.
-
-2003-01-02  Raymond Scholz  <ray-2003@zonix.de>
-
-       * deuglify.el (gnus-article-outlook-deuglify-article):
-       Rehighlight, reapply treatments and call
-       `gnus-article-prepare-hook'.  Suggested by Niels Olof Bouvin.
-       (gnus-outlook-repair-attribution-block): Recognize cited
-       attributions.  Suggested by Niklas Morberg.
-
-2003-01-02  Pete Kazmier  <pete@kazmier.com>
-
-       * gnus-art.el (gnus-treat-predicate): Check condition first.
-
-2003-01-02  Jesper Harder  <harder@ifa.au.dk>
-
-       * lpath.el: Add url-http-file-exists-p.
-
-       * gnus-group.el (gnus-group-fetch-charter): Use
-       http://TLH.news-admin.org/charters/GROUPNAME as a fallback.
-
-2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-draft-headers): Also generate From to get a
-       nicer draft buffer summary.
-
-       * gnus-xmas.el (gnus-xmas-read-event-char): Take an optional
-       parameter.
-
-       * gnus-art.el (article-wash-html): Clean up.
-       (article-wash-html): Typo fix.
-
-       * gnus-msg.el (gnus-summary-mail-forward): Clean up.
-       (gnus-summary-mail-forward): To many lists of lists.
-
-       * gnus-art.el (article-wash-html): Clean up.
-
-2003-01-02  pete-temp  <pete-temp-12-29-2002@kazmier.com>
-
-       * gnus-art.el (gnus-treat-wash-html): New variable.
-
-2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-check-news-header-syntax): Allow posting.
-       (message-check-news-header-syntax): Fix logic for sure, this
-       time.
-
-2003-01-02  Matthieu Moy  <Matthieu.Moy@imag.fr>
-
-       * message.el (message-check-news-header-syntax): Check syntax of
-       continuation headers.
-
-2003-01-02  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-url-regexp,
-       (gnus-button-mid-or-mail-regexp, gnus-button-alist,
-       (gnus-header-button-alist): Regexps are case insensitive here.
-
-2003-01-02  Simon Josefsson  <jas@extundo.com>
-
-       * dig.el (query-dig): Doc fix.
-
-2003-01-02  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-agent-fetch-selected-article): Update whole
-       summary buffer line, not just the download mark.
-
-2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-goto-subjects): New function.
-       (gnus-summary-insert-dormant-articles): New command and
-       keystroke.
-
-       * gnus-cache.el (gnus-summary-insert-cached-articles): Use new
-       function for mass insertion of subjects.
-
-       * nndraft.el (nndraft-generate-headers): Don't move point.
-
-       * gnus.el (nnheader): Require nnheader.
-
-       * nndraft.el (nndraft-request-associate-buffer): Use
-       make-local-variable.
-
-2003-01-02  Michael Shields  <shields@msrl.com>
-
-       * nndraft.el (nndraft-request-associate-buffer): Make
-       write-contents-hooks buffer-local before setting it.
-
-2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-group-parameter-value): Take an extra param.
-       (gnus-group-fast-parameter): Let group param results be nil.
-
-       * gnus-art.el (gnus-article-forward-header): New function.
-       (article-date-ut): Use it to remove continuation date headers.
-
-       * gnus-sum.el (gnus-summary-walk-group-buffer): Supply prompt to
-       read-event.
-       (gnus-summary-remove-bookmark): Clean up.
-       (gnus-summary-set-bookmark): Clean up.
-
-       * gnus-util.el (gnus-read-event-char): Take an optional prompt.
-
-       * gnus.el (gnus-group-startup-message): Bind data-directory to
-       the Gnus etc directory.
-
-2003-01-01  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-summary-prepare-exit): added slots for spam- and
-       ham-processing of articles; use the new
-       spam-group-(spam|ham)-contents-p functions
-       (spam-group-spam-contents-p, spam-group-ham-contents-p): new
-       convenience functions
-       (spam-mark-junk-as-spam-routine): use the new
-       spam-group-spam-contents-p function
-
-       * gnus.el (spam-process, spam-contents, spam-process-destination):
-       added new parameters with corresponding global variables
-       (gnus-group-spam-exit-processor-ifile,
-       gnus-group-spam-exit-processor-bogofilter,
-       gnus-group-spam-exit-processor-blacklist,
-       gnus-group-spam-exit-processor-whitelist,
-       gnus-group-spam-exit-processor-BBDB,
-       gnus-group-spam-classification-spam,
-       gnus-group-spam-classification-ham): added new symbols for the
-       spam-process and spam-contents parameters
-
-       * spam.el (spam-ham-marks, spam-spam-marks): changed list
-       customization and list itself to store mark symbol rather than
-       mark character.
-       (spam-bogofilter-register-routine): added logic to generate mark
-       values list from spam-ham-marks and spam-spam-marks, so (member)
-       would work.
-
-2003-01-02  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-cross-post-followup-to): Fix comment.
-
-2003-01-01  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-ham-marks, spam-spam-marks): changed list
-       customization and list itself to store mark symbol rather than
-       mark character.
-       (spam-bogofilter-register-routine): added logic to generate mark
-       values list from spam-ham-marks and spam-spam-marks, so (member)
-       would work.
-
-2003-01-01  Raymond Scholz  <ray-2002@zonix.de>
-
-       * message.el (message-signature-insert-empty-line): New variable.
-
-2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * message.el: Renamed functions and variables: "xpost" ->
-       "cross-post", "-fup2" -> "-followup-to".
-       (message-cross-post-old-target, message-cross-post-default,
-       message-cross-post-note, message-followup-to-note,
-       message-cross-post-note-function): New variables names.
-       (message-xpost-old-target, message-xpost-default,
-       message-xpost-note, message-fup2-note,
-       message-xpost-note-function): Removed variable names.
-       (message-cross-post-followup-to-header,
-       message-cross-post-insert-note, message-cross-post-followup-to):
-       New function names.
-       (message-xpost-fup2-header, message-xpost-insert-note,
-       message-xpost-fup2): Removed function names.
-
-2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * message.el (message-send-mail): Added message-cleanup-headers to
-       prevent newlines in headers.
-
-2003-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * dns.el (dns-make-network-process): Comment.
-
-       * gnus-sum.el (gnus-summary-display-while-building): Default to
-       nil.
-
-2003-01-01  Wes Hardaker  <wes@hardakers.net>
-
-       * gnus-sum.el (gnus-summary-display-while-building): New
-       variable.
-
-2003-01-01  Raymond Scholz  <ray-2003@zonix.de>
-
-       * deuglify.el (gnus-outlook-rearrange-article): Kill overlays
-       before rearranging the article.
-
-2003-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nndraft.el (nndraft-generate-headers): New function.
-       (nndraft-request-associate-buffer): Use it to write headers on
-       buffer save.
-
-       * message.el (message-generate-headers): Let the function be a
-       lambda form.
-       (message-draft-headers): New variable.
-
-       * gnus-msg.el (gnus-inews-make-draft-meta-information): New
-       function.
-       (gnus-setup-message): Use it.
-
-       * message.el (message-generate-headers-first): Doc fix.
-       (message-setup-1): Use new function for getting which headers to
-       generate.
-       (message-headers-to-generate): New function.
-
-2003-01-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-save-alist): Make directory.
-
-2002-12-31  Reiner Steib  <4uce.02.r.steib@gmx.net>
-
-       * gnus-sum.el (gnus-summary-limit-to-age): Make prompt string
-       mention negatives.
-
-2002-12-31  Raymond Scholz  <ray-2002@zonix.de>
-
-       * deuglify.el (gnus-outlook-rearrange-article): Use
-       `transpose-regions' instead of tempering the kill-ring.
-       (gnus-article-outlook-deuglify-article): Rehighlight article
-       instead of a complete redisplay.
-
-2002-12-31  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el: most defvars are defcustoms now
-
-       patches from Michael Shields  <shields@msrl.com>
-
-       * spam.el (spam-bogofilter-articles): Select the article
-       body using gnus-summary-show-article t instead of
-       gnus-summary-select-article; this presents the raw text
-       without running any hooks.
-
-       * spam.el (spam-bogofilter-articles): Use message-remove-header
-       to remove headers; the old way incorrectly removed just the first
-       line of folded headers.
-
-2002-12-31  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-start.el (gnus-load): Replace `ding-file' with `file'.
-
-2002-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-start.el (gnus-load): New function.
-       (gnus-read-newsrc-el-file): Use it.
-
-2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * gnus-art.el (gnus-button-valid-fqdn-regexp): New variable.
-       (gnus-button-handle-apropos-documentation): New function.
-       (gnus-button-handle-ctan): New function.
-       (gnus-button-alist): Use them.  Improve some regexps.
-       (gnus-button-prefer-mid-or-mail): Addition to doc-string.
-
-2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * message.el (message-subscribed-p): New function.
-       (message-send-mail): Use it.
-       * mml.el (mml-preview-insert-mft): New function.
-       (mml-preview): Use it.
-
-2002-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-thread-latest-date): Protect against errors
-       when sorting by date.
-
-       * gnus-art.el (gnus-article-edit-mode): New variable.
-       (gnus-article-setup-buffer): Warn user about discarding edits.
-
-       * gnus-sum.el (gnus-summary-pipe-output): Clean up.
-       (gnus-summary-pipe-output): Take a symbolic prefix to save all
-       headers.
-
-       * mm-uu.el (mm-uu-configure-list): Default to (shar . disabled).
-
-2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
-
-       * message.el (message-completion-alist): Added "Mail-Followup-To"
-       and "Mail-Copies-To".
-
-2002-07-21  Jesper harder  <harder@ifa.au.dk>
-
-       * gnus-group.el: Add key bindings for
-       gnus-group-sort-groups-by-real-name and
-       gnus-group-sort-selected-groups-by-real-name.
-
-2002-07-21  Jesper harder  <harder@ifa.au.dk>
-
-       * gnus.texi (Sorting Groups): Add key bindings for
-       gnus-group-sort-groups-by-real-name and
-       gnus-group-sort-selected-groups-by-real-name.
-
-2002-12-30  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-use-dig): new variable for blackhole checking
-       through dig.el
-       (spam-check-blackholes): added dig.el checking functionality and
-       more verbose reporting; query-dig is autoloaded from dig.el
-       (spam-use-blackholes): disabled by default
-       (spam-blackhole-servers): removed rbl.maps.vix.com from the
-       blackhole servers list
-
-2002-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-required-headers): New variable.
-
-2002-12-30  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * dig.el (query-dig): new function
-
-2002-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * flow-fill.el (fill-flowed): Don't infloop on too long fill
-       prefixes.
-
-       * dns.el (query-dns): Protect against errors.
-
-       * gnus-msg.el (gnus-article-yanked-articles): New variable.
-       (gnus-inews-add-send-actions): Mark all answered messages as
-       answered.
-
-2002-08-10  Jari Aalto  <jari.aalto@poboxes.com>
-
-       * nnmail.el (nnmail-split-it): Added tracing to
-       `:' split rule
-
-2002-08-13  Hrvoje Niksic  <hniksic@xemacs.org>
-
-       * mm-decode.el (mm-mailcap-command): Remove the quotes around '%s'
-       and "%s" so we don't overquote them.
-
-2002-08-13  Hrvoje Niksic  <hniksic@xemacs.org>
-
-       * (mm-display-external): Display the actual command that has been
-       executed in the echo area.
-
-2002-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-topic.el (gnus-topic-display-missing-topic): Bind entry.
-
-       * message.el (message-with-reply-buffer): New macro.
-       (message-fetch-reply-field): Use it.
-       (message-insert-wide-reply): New command and keystroke.
-       (message-carefully-insert-headers): New function.
-       (message-insert-to): Use new function.
-
-       * gnus-topic.el (gnus-topic-display-missing-topic): New function.
-       (gnus-topic-goto-missing-group): Use it.
-
-       * message.el (message-required-news-headers): Removed Lines.
-       (message-reply): Don't insert References first.
-       (message-followup): Ditto.
-       (message-make-references): New function.
-       (message-followup): Set message-reply-headers before generating
-       the buffer stuff.
-
-2002-12-29  Jesper Harder  <harder@ifa.au.dk>
-
-       * mml.el (mml-generate-mime-1): Reverse the order of
-       encoding/flowing.
-
-2002-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnmail.el (nnmail-expiry-target-group): Mark articles as read
-       after moving them.
-
-       * gnus-sum.el (gnus-summary-dummy-line-format): Update format to
-       fit with newer standard format.
-       (gnus-summary-make-false-root-always): New variable.
-       (gnus-gather-threads-by-subject): Use it.
-
-       * message.el (message-get-reply-headers): Take an address list
-       optional argument.
-
-2002-12-28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-keep-backlog): Change default to 20.
-
-       * gnus-agent.el (gnus-agent-check-overview-buffer): Start from
-       start.
-       (gnus-agent-check-overview-buffer): Remove negative article
-       numbers.
-
-       * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups): Doc fix.
-       (nnmail-cache-ignore-groups): Doc fix.
-
-       * nnimap.el (nnimap-debug): Made into a flag and defcustomed.
-       (nnimap-debug-buffer): New variable.
-       (nnimap-debug): Use it.
-
-2002-12-28  Lars Magne Ingebrigtsen  <kgreiner@xpediantsolutions.com>
-
-       * gnus.el (gnus-summary-high-uncached-face): New color scheme.
-
-2002-12-28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agent-check-overview-buffer): Sort lines if
-       they aren't already sorted.
-
-2002-12-28  Jesper Harder  <harder@ifa.au.dk>
-
-       * message.el (message-mode-menu): Add ellipses to menu items
-       expecting user interaction.
-       (message-mode-field-menu): do.
-
-2002-12-26  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-highlight-line): Don't bind `list' --
-       it isn't used any more.
-
-2002-12-22  Jesper Harder  <harder@ifa.au.dk>
-
-       * binhex.el (binhex-decoder-program): Fix docstring.
-
-2002-12-21  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * mm-decode.el (mm-mailcap-command): Do not backslash-quote
-       special chars if the mailcap file uses single quotes around %s.
-       From Laurent Martelli <laurent@bearteam.org>.
-
-2002-12-19  Paul Jarc  <prj@po.cwru.edu>
-
-       * gnus-int.el (gnus-request-update-info): nnchoke-r-u-i might not
-       return the info object.
-
-2002-12-18  Paul Jarc  <prj@po.cwru.edu>
-
-       * gnus-int.el (gnus-request-update-info): Artificially add
-       (1 . (1- min)) to the read range, in case the backend doesn't
-       store marks for nonexistent articles.
-
-2002-12-17  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * binhex.el (binhex-insert-char): Eval-and-compile.
-
-2002-12-17  Jesper Harder  <harder@ifa.au.dk>
-
-       * lpath.el: Add tool-bar-local-item-from-menu.
-
-       * message.el (message-tool-bar-local-item-from-menu): New function.
-       (message-tool-bar-map): Use it.
-
-2002-12-14  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-uu.el (gnus-uu-digest-headers): Mention nil value in docstring.
-
-       * gnus-art.el (gnus-article-header-rank): Last header in
-       gnus-sorted-header-list should have higher rank than non-members.
-
-2002-12-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-close-agent): Don't blank out the list of
-       covered methods.
-
-2002-12-12  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * nntp.el (nntp-with-open-group-first-pass): Do not wrap in
-       eval-when-compile.  Suggested by Kevin Greiner.
-
-2002-12-13  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * gnus-agent.el (gnus-agent-max-fetch-size): New, defcustom.
-       (gnus-agent-fetch-headers): Initialize gnus-agent-overview-buffer
-       even though no headers may have been fetched
-       (gnus-agent-fetch-group-1, and perhaps others, require this
-       behavior).
-       (gnus-agent-fetch-group-1): Fetch articles in chucks so that the
-       server buffer is constrained by gnus-agent-max-fetch-size.
-       Multiple chunks in the same group may perform arbitrarily large
-       updates.
-
-2002-12-12  Kevin Greiner <kgreiner@xpediantsolutions.com>
-
-       * 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 <kgreiner@xpediantsolutions.com>
-
-       * gnus.el (gnus-summary-high-uncached-face,
-       gnus-summary-normal-uncached-face, gnus-summary-low-uncached-face)
-       New faces.
-
-       * gnus-agent.el (gnus-agent-downloaded-article-face): REMOVED.  I
-       added this on 2002-11-23 but it just wasn't working out as
-       intended.  The idea isn't entirely dead, three new faces
-       gnus-summary-*-uncached-face are being added to gnus.el to provide
-       the basis for an improved implementation.
-       (gnus-agent-read-servers): Undo the change made on 2002-11-23. The
-       proper file to open is lib/servers.
-       (gnus-summary-set-agent-mark): Expanded documentation.  Unmarking
-       (i.e. removing the article from gnus-newsgroup-downloadable) will
-       now restore the article's default mark rather than simply setting
-       no mark.
-       (gnus-agent-get-undownloaded-list): Corrected documentation.
-       Added code to set new summary local variable,
-       gnus-newsgroup-agentized.  Reworked impl so that it doesn't create
-       a temporary list.  No longer sets gnus-newsgroup-downloadable.
-       (gnus-agent-summary-fetch-group): Keep gnus-newsgroup-undownloaded
-       up to date.  Call new gnus-summary-update-download-mark to keep
-       summary buffer up-to-date.
-       (gnus-agent-fetch-selected-article): Keep
-       gnus-newsgroup-undownloaded up to date.
-       (gnus-agent-fetch-articles): Return list of articles that were
-       successfully fetched.
-       (gnus-agent-check-overview-buffer): No more thingatpt.
-       (gnus-agent-expire): No longer deletes NOV entries of unread
-       articles.
-       (gnus-agent-unread-articles): New function.
-       (gnus-agent-regenerate-group): The article number must be
-       terminated by a tab character.  Added more messages to report
-       repairs.  Inhibit quits while writing changes so it is now safe
-       have to quit regeneration.  Renamed gnus-tmp-downloaded back to
-       downloaded to 1) resolve the unbound references and 2) avoid
-       confusing this list with the gnus-tmp-downloaded in gnus-sum.el
-
-       * gnus-art.el (gnus-article-prepare): The agent
-       downloaded/undownloaded mark is no longer stored as the article's
-       mark.
-
-       * gnus-salt.el (gnus-tree-highlight-node): Added uncached as
-       gnus-summary-highlight may use it.  Added downloaded as
-       gnus-summary-highlight was using it.
-
-       * gnus-sum.el (gnus-undownloaded-mark): Changed from ?@ to ?- as
-       the download mark now follows Kai's +/- convention.
-       (gnus-downloaded-mark): Added ?+ mark.
-       (gnus-summary-highlight): Added rules to select
-       gnus-summary-high-uncached-face,
-       gnus-summary-normal-uncached-face, and
-       gnus-summary-low-uncached-face.  Removed the
-       gnus-agent-downloaded-article-face.
-       (gnus-summary-line-format-alist): Implemented the download flag
-       format (?O) as named in the manual.  This implementation displays
-       either gnus-undownloaded-mark, gnus-downloaded-mark, or
-       gnus-no-mark.
-       (gnus-newsgroup-agentized): New local variable that identifies
-       which groups are agentized.  While the agent is now on by default,
-       you don't have to agentize every server that you use.
-       (gnus-update-summary-mark-positions): Completed support for the
-       download type of mark.
-       (gnus-summary-insert-line): Added undownloaded to the parameters.
-       (gnus-summary-prepare-threads): Set gnus-tmp-downloaded for
-       reference by the gnus-summary-line-format-spec.
-
-       * nntp.el (nntp-with-open-group): This macro handles dropped or
-       broken connections by opening a new connection and repeating the
-       failed command.
-       (nntp-retrieve-headers-with-xover): Some NNTP servers respond to
-       XOVER commands preceeding the active articles with the nov entry
-       of the first available article.  When gnus connected to such a
-       server, the unexpected nov entry would result in duplicate lines
-       in the agent's overview file.  This patch fixes the duplicate
-       lines problem and improves performance by skipping over all
-       articles IDs that preceed the first nov entry in the server's
-       reply.
-
-2002-12-11  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-sum.el (gnus-tmp-downloaded): New internal variable.
-       (gnus-summary-highlight): Use it instead of `downloaded'.
-       (gnus-summary-highlight-line): Ditto.
-
-       * gnus-agent.el (gnus-agent-regenerate-group): Ditto.
-
-2002-12-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-variable-list): Add gnus-agent-covered-methods.
-
-       * gnus-agent.el (gnus-agent-check-overview-buffer): Remove debug
-       calls.
-
-       * gnus-sum.el (gnus-summary-highlight-line): Don't set the
-       downloaded variable if we're in an uncovered group.
-
-       * gnus-agent.el (gnus-agent-downloaded-article-face): Change the
-       font to soemthing less noticeable.
-       (gnus-agent-group-covered-p): New function.
-
-2002-12-09  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-braid-nov): Remove corrupted lines.
-       Because of an unknown bug, the group buffer is saved in .overview
-       file.
-
-2002-12-09  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * nntp.el (nntp-send-command): Braino in last commit.  Replace
-       `and' with `or'.
-
-2002-12-08  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * nntp.el (nntp-send-command): Assume that echo does not happen
-       when nntp-open-connection-function is nntp-open-network-stream.
-       Suggested by Sebastian D.B. Krause <krause@my.gnus.org>.
-
-2002-12-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnslashdot.el (nnslashdot-retrieve-headers-1): Update the parser.
-
-2002-12-06  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-request-group): bugfix: don't erase
-       nntp-server-buffer if we aren't going to write to it.
-
-2002-12-04  Katsumi Yamaoka  <yamaoka@jpl.org>
-       Trivial patch from Itai Zukerman <zukerman@math-hat.com>.
-
-       * mm-decode.el (mm-w3m-safe-url-regexp): Fix parenthesis.
-
-2002-12-04  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * rfc2047.el (rfc2047-decode-region): Remove newlines between
-       decoded words.
-
-2002-12-03  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus.el (fboundp): After loading mm-util, make sure it was the
-       right one.
-
-2002-11-29  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-art.el (gnus-inhibit-mime-unbuttonizing): Moved here from
-       gnus-sum.  Made into a user option.
-
-       * gnus-sum.el (gnus-simplify-ignored-prefixes)
-       (gnus-summary-mark-article-as-unread)
-
-2002-11-29  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * time-date.el (date-to-time): Typo.
-
-       * parse-time.el: Typo.
-
-       * nnsoup.el (nnsoup-retrieve-headers): Typo.
-
-       * nnmail.el (nnmail-split, nnmail-process-unix-mail-format): Typos.
-
-       * nnimap.el:
-       (nnimap-split-rule, nnimap-find-minmax-uid): Typos.
-
-       * mm-encode.el (mm-safer-encoding): Typo.
-
-       * messcompat.el: Typo.
-
-       * message.el (message-face-alist): Typo.
-
-       * imap.el (imap-interactive-login, imap-open): Typos.
-
-       * ietf-drums.el (ietf-drums-text-token, ietf-drums-qtext-token): Typos.
-
-       * gnus.el: Typo.
-
-       * gnus-win.el (gnus-configure-frame): Typo.
-
-       * gnus-util.el (gnus-atomic-progn-assign): Typo.
-
-       * gnus-topic.el (gnus-topic-sort-topics): Typo.
-
-       * gnus-sum.el (gnus-summary-article-number)
-       (gnus-summary-read-group-1, gnus-summary-mark-article)
-       (gnus-summary-fetch-faq, gnus-refer-article-methods): Typos.
-
-       * gnus-mule.el (gnus-mule-add-group): Typo.
-
-       * gnus-mlspl.el (gnus-group-split-fancy): Typo.
-
-       * gnus-group.el (gnus-group-fetch-faq): Typo.
-
-       * gnus-art.el (gnus-decode-header-methods): Typo.
-
-       * flow-fill.el: Typo.
-
-2002-11-19  Stefan Monnier  <monnier@cs.yale.edu>
-
-       * binhex.el (binhex-decode-region): Don't hardcode point-min == 1.
-
-2002-11-29  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-sum.el (gnus-simplify-ignored-prefixes)
-       (gnus-summary-mark-article-as-unread)
-       (gnus-mark-article-as-unread, gnus-summary-highlight-line):
-       Reformatting to avoid long lines.
-       (gnus-inhibit-mime-unbuttonizing): Moved to gnus-art.
-
-2002-11-28  Daiki Ueno  <ueno@unixuser.org>
-
-       * gnus-agent.el (gnus-agent-fetch-group-1): Article numbers should
-       be accessed through `mail-header-number'.
-
-2002-11-27  Kevin Greiner  <kgreiner@xpediantsolutions.com>
-
-       * gnus-sum.el (gnus-summary-insert-old-articles): No longer passes
-       compressed range to gnus-summary-insert-articles.
-
-2002-11-26  Kevin Ryde <user42@zip.com.au>
-
-       * gnus-art.el (gnus-mime-copy-part): Look for filename
-       parameter under content-disposition, not content-type.
-
-       * gnus-sum.el (gnus-summary-find-uncancelled): New function.
-       (gnus-summary-reselect-current-group): Use it.
-
-2002-11-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-uncached-articles): if
-       gnus-agent-load-alist fails, return ARTICLES.
-
-       * nnrss.el (nnrss-group-alist): Update the link of Jabber.
-
-2002-11-26  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-sum.el (gnus-summary-insert-old-articles): Remove
-       superfluous function call.
-       (gnus-summary-catchup-all, gnus-summary-catchup-all-and-exit):
-       Add warning to docstring.
-
-2002-11-26  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-agent.el: Autoload number-at-point instead.
-       (gnus-agent-check-overview-buffer): No warning for deactivate-mark.
-
-2002-11-26  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-agent-check-overview-buffer): Explicitly
-       require thingatpt (for number-at-point) and protect against
-       deactivate-mark being unbound (on XEmacs).
-
-2002-11-25  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-agent-check-overview-buffer): Make debugger
-       print message on entry.
-
-       From Kevin Greiner <kgreiner@xpediantsolutions.com>.
-
-       * gnus-range.el (gnus-range-difference): New function.
-       * gnus-sum.el (gnus-summary-insert-old-articles): Use it.
-
-2002-11-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-sum.el (gnus-summary-insert-old-articles): Use
-       gnus-remove-from-range instead of gnus-range-difference which
-       doesn't exist.
-
-2002-11-23  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-       From Kevin Greiner <kgreiner@xpediantsolutions.com>.
-
-       * gnus-agent.el (gnus-agent-downloaded-article-face): New face,
-       used for showing which articles have been downloaded.
-       (gnus-agent-article-alist): Format change.  Add documentation.
-       (gnus-agent-summary-mode-map): New keybinding `J s' for fetching
-       process-marked articles.
-       (gnus-agent-summary-fetch-series): Command for `J s'.  Articles
-       in the series are individually fetched to minimize lose of
-       content due to an error/quit.
-       (gnus-agent-synchronize-flags-server, gnus-agent-add-server): Use
-       gnus-message instead of message.
-       (gnus-agent-read-servers): Use file lib/methods instead of
-       lib/servers.  TODO: Why?
-       (gnus-summary-set-agent-mark): Adapt to new agent-alist format.
-       (gnus-agent-get-undownloaded-list): Remove articles that appear to
-       come from the agent.  This means that they are not downloaded.
-       (gnus-agent-fetch-selected-article): Don't use history.
-       (gnus-agent-save-history, gnus-agent-enter-history)
-       (gnus-agent-article-in-history-p, gnus-agent-history-path):
-       Removed function; history is not used anymore.
-       (gnus-agent-fetch-articles): Fix handling of crossposted articles.
-       (gnus-agent-crosspost): Started rewrite then realized that a typo
-       in gnus-agent-fetch-articles ensures that this function is never
-       called.  This will need to be fixed later.
-       (gnus-agent-check-overview-buffer): Some sanity checks on the
-       agent overview buffer.  This is a safety net used during
-       development.
-       (gnus-agent-flush-cache): The gnus-agent-article-alist format has
-       changed, write a number to the file indicating this.
-       (gnus-agent-fetch-headers): Rewrite to respect
-       gnus-agent-consider-all-articles without relying on the
-       `.fetched' files.  Make it fast.
-       (gnus-agent-braid-nov): Change resulting from
-       gnus-agent-fetch-headers change.
-       (gnus-agent-load-alist, gnus-agent-save-alist): Don't use
-       `.fetched' files.
-       (gnus-agent-read-agentview): New function, used by
-       gnus-agent-load-alist.
-       (gnus-agent-load-fetched-headers): Remove.
-       (gnus-agent-save-alist): Rewrite to accomodate new format.
-       (gnus-agent-fetch-group-1): Make sure list of articles is in the
-       same order as in gnus-newsgroup-headers.
-       (gnus-agent-expire): Document and implement extra args ARTICLES,
-       GROUP, FORCE.  Do not restrict usage.
-       (gnus-agent-uncached-articles): New function.
-       (gnus-agent-retrieve-headers): Use it.
-       (gnus-agent-regenerate-group): No longer needs to be called from
-       gnus-agent-regenerate.  Individual groups may be regenerated. The
-       regeneration code now fixes duplicate, and mis-ordered, NOV entries.
-       The article fetch dates are validated in the article alist.  The
-       article alist is pruned of entries that do not reference existing
-       NOV entries.  All changes are computed then applied with
-       inhibit-quit bound to t.  As a result, it is now safe to quit out of
-       regeneration.  The optional clean parameter has been replaced with
-       an optional reread parameter.  Clean is no longer necessary as
-       regeneration gets the appropriate setting from
-       gnus-agent-consider-all-articles.  The new reread parameter will
-       result in fetched, or all, articles being marked as unread.
-       (gnus-agent-regenerate): Removed code to regenerate the history
-       file as it is no longer used.
-
-       * gnus-start.el (gnus-make-ascending-articles-unread): New
-       function, for efficient mass-marking.
-
-       * gnus-sum.el (gnus-summary-highlight): Use new face for
-       downloaded articles.
-       (gnus-article-mark): Prefer to indicate read/unread status over
-       downloaded status.
-       (gnus-summary-highlight-line-0): New function, maybe rehighlights
-       line.
-       (gnus-summary-highlight-line): Use new face for downloaded
-       articles.
-       (gnus-summary-insert-old-articles): Improved performance by
-       replacing the initial LIST of older articles with a compressed
-       RANGE of older articles.  Some servers appear to lie about
-       their active range so the original list could contain millions
-       of article numbers.  The range is not expanded into a list
-       until the optional ALL parameter has been applied.
-
-2002-11-18  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-category-mode): Typo in doc string.
-
-2002-11-21  Teodor Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el:
-       added patch from Andreas Fuchs <asf@void.at> to prevent apply errors
-
-       * spam.el: added `M s t' and `M s x' key mappings
-
-2002-11-20  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-morse-message): Narrow to body.
-
-2002-11-19  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-morse-message): Load
-       morse.el (unmorse-region not autoloaded in Emacs 20 nor XEmacs).
-       (unmorse-region): Autoload it instead.
-
-2002-11-18  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-morse-message): New function.
-       (gnus-summary-wash-map): Bind to `W m'.
-       (gnus-summary-make-menu-bar): Add.
-
-       * nnimap.el (nnimap-request-expire-articles): Compress sequence
-       before storing \Deleted mark on expired articles.
-
-2002-11-17  Shenghuo Zhu <zsh@cs.rochester.edu>
-       Trivial patch from Markus Rost <rost@math.ohio-state.edu>
-
-       * gnus-sum.el (gnus-summary-goto-unread): Doc fix - escape open
-       parens in column 0.
-
-2002-11-17  Juanma Barranquero  <lektu@terra.es>
-
-       * nnweb.el (nnweb-google-create-mapping): Fix typo.
-
-       * nnlistserv.el (nnlistserv-kk-create-mapping): Likewise.
-
-       * gnus-nocem.el (gnus-nocem-liberal-fetch): Likewise.
-
-2002-11-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-set-auto-save-file-name): Use
-       make-directory, to avoid the dependence on gnus-util.
-
-2002-11-16  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-callback-callback-function):
-       (nnimap-callback-buffer): Removed, these cannot be global but must
-       be embedded into the callback.
-       (nnimap-make-callback): New.  Embedd article number, callback and
-       buffer in function.
-       (nnimap-callback, nnimap-request-article-part): Update.
-
-2002-11-15  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mml.el (mml-preview): Bind message-this-is-mail if it is mail.
-
-2002-11-13  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus.el (gnus-summary-line-format): Document %C.
-
-2002-11-11  Simon Josefsson  <jas@extundo.com>
-
-       * pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify): Display
-       output when called interactively.
-
-2002-11-08  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-article-edit-exit): Kill local variables.
-
-       * message.el (message-draft-coding-system): Improve comment; use
-       mm-auto-save-coding-system for the default value.
-
-       * nndraft.el (nndraft-request-article): Revert to the state before
-       2002-10-29; regexp-quote mail-header-separator.
-
-2002-11-06  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-draft.el (gnus-draft-setup): Set gnus-message-group-art to
-       allow editing of drafts from an nnvirtual group.
-
-2002-11-06  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * nndraft.el (nndraft-request-article): Replace emacs-mule with
-       mm-auto-save-coding-system.
-
-       * message.el (message-draft-coding-system): Default to
-       iso-2022-7bit.
-
-       * mm-util.el (mm-auto-save-coding-system): Undo last change to
-       restore the default value to emacs-mule or escape-quoted.
-
-2002-11-05  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-article-encrypt-body): Inhibit encrypting of
-       a delayed or a queued article as well as a draft.
-
-       * gnus-sum.el (gnus-summary-edit-article): Inhibit editing of a
-       delayed or a queued article in the raw format; treat a delayed
-       article as a raw article as well as a draft.
-       (gnus-summary-setup-default-charset): Clear gnus-newsgroup-charset
-       for the delayed group.
-
-       * nndraft.el (nndraft-request-article): Ignore auto save files for
-       a delayed or a queued article; don't bother to decode a queued
-       article; don't bind nnmail-file-coding-system for a queued article.
-
-       * nnmail.el (nnmail-split-fancy-with-parent): Ignore the delayed
-       and the queue group.
-
-2002-11-04  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-group.el (gnus-group-delete-group):
-       gnus-cache-active-hashtb might be void.
-
-2002-11-02  Simon Josefsson  <jas@extundo.com>
-
-       * pgg-gpg.el (pgg-gpg-encrypt-region): Makes PGG respect the
-       setting of the default user ID.  From Raymond Scholz
-       <ray-2002@zonix.de>.
-
-2002-11-01  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-bodies.el (mm-body-encoding): Don't return 8bit for 7bit
-       charset.
-
-2002-10-31  Ted Zlatanov <tzz@lifelogs.com>
-       From Alex Schroeder <alex@emacswiki.org>
-       * 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.
-
-2002-10-31  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-util.el (gnus-user-date-format-alist): Clarify and correct
-       documentation.
-
-2002-10-28  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-agent-fetched-headers)
-       (gnus-agent-load-fetched-headers)
-       (gnus-agent-save-fetched-headers): Remove variable and two
-       functions.  Kevin Greiner's version of gnus-agent-fetch-headers
-       works better.
-       (gnus-agent-fetch-headers): New implementation from Kevin
-       Greiner.  Uses gnus-agent-article-alist to store information
-       about fetched messages which aren't on the server anymore.  The
-       trick is to return a list of considered messages to the caller,
-       but to only fetch those which haven't been fetched yet.
-
-2002-10-30  Simon Josefsson  <jas@extundo.com>
-
-       * pgg-def.el (pgg-passphrase-cache-expiry): New, defcustom.
-
-       * pgg.el (pgg-passphrase-cache-expiry): Removed.
-
-2002-10-30  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * mm-view.el (mm-w3m-local-map-property): Make it work with older
-       versions of emacs-w3m than 1.3.3.
-
-       * lpath.el: Bind w3m-minor-mode-map.
-
-       * mm-view.el (mm-w3m-mode-command-alist)
-       (mm-w3m-mode-dont-bind-keys, mm-w3m-mode-ignored-keys): Removed.
-       (mm-w3m-mode-map): Undefined for Emacs21 and XEmacs.
-       (mm-setup-w3m): Simplified.
-       (mm-w3m-local-map-property): New function.
-       (mm-inline-text-html-render-with-w3m): Use it.
-
-       * gnus-art.el (gnus-article-wash-html-with-w3m): Use
-       mm-w3m-local-map-property.
-
-2002-10-29  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-util.el (mm-auto-save-coding-system): Default to
-       iso-2022-7bit.
-
-       * nndraft.el (nndraft-request-article): Decode an article using
-       the coding-system emacs-mule if it seems to have been saved using
-       emacs-mule.
-       (nndraft-request-replace-article): Use message-draft-coding-system
-       instead of mm-auto-save-coding-system for the draft or delayed
-       group.
-
-2002-10-28  Josh  <huber@alum.wpi.edu>
-
-       * mml.el (mml-mode-map): Fixed keybindings for mml-secure-*
-       functions.
-
-2002-10-28  Katsumi Yamaoka  <yamaoka@jpl.org>
-       From mah@everybody.org (Mark A. Hershberger).
-
-       * mm-url.el (mm-url-insert-file-contents): Make it return the same
-       type values ("url" size) regardless of the values of
-       mm-url-use-external.
-
-2002-10-26  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * nnimap.el (nnimap-request-article-part): Try harder to show
-       group name in debugging message.
-
-2002-10-25  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-agent-save-fetched-headers): Create
-       directory if it doesn't exist.
-       (gnus-agent-fetch-headers): Remove old cruft that tried to
-       abstain from downloading articles more than once if
-       gnus-agent-consider-all-articles was true.  This is now done
-       properly via the .fetched files.
-
-2002-10-25  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * nndraft.el (nndraft-request-article): Treat delayed articles
-       like drafts.
-
-2002-10-24  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-agent.el (gnus-agent-load-alist): Fix parenthesis.
-
-2002-10-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-agent-save-alist, gnus-agent-load-alist):
-       Remove unused optional arg DIR and corresponding code.
-
-       * nnimap.el (nnimap-request-article-part): Include group name in
-       debugging output.
-
-2002-10-24  Paul Jarc  <prj@po.cwru.edu>
-
-       * gnus-agent.el (gnus-agent-fetch-headers): Add some comments.
-
-2002-10-23  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
-
-       * gnus-agent.el (gnus-agent-fetched-headers): New variable,
-       contains range of headers that have been fetched by the agent
-       already.  Compare gnus-agent-article-alist.
-       (gnus-agent-file-header-cache): Like
-       gnus-agent-file-loading-cache, but for gnus-agent-fetched-headers.
-       (gnus-agent-fetch-headers): Improve comment.  Revert to old
-       seen/recent logic.
-       Remember which headers have been fetched before and don't fetch
-       them again the next time round.
-       (gnus-agent-load-fetched-headers)
-       (gnus-agent-save-fetched-headers): New functions, for remembering
-       which headers have been fetched before.
-
-2002-10-23  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * lpath.el: Remove useless bindings.
-
-2002-10-22  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-execute-command): Disable visual
-       features while searching.
-
-2002-10-22  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * pgg.el (pgg-snarf-keys): Do not refer unbinded local variables.
-
-2002-10-22  Simon Josefsson  <jas@extundo.com>
-
-       * pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify)
-       (pgg-snarf-keys): Add.
-
-2002-10-22  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * lpath.el: Fbind bbdb-records.
-
-       * spam.el: Don't autoload bbdb-records.
-
-2002-10-22  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * spam.el: Set autoload for bbdb-records after loading bbdb-com to
-       prevent inf-loop.
-
-2002-10-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnslashdot.el: Removed some test lines.
-       More test.
-
-2002-10-21  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-agent.el (gnus-agent-fetch-headers): Remove articles that
-       are known to be downloaded already.
-
-2002-10-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-view.el (mm-text-html-renderer-alist): Add w3m-standalone.
-       (mm-text-html-washer-alist): Ditto.
-
-2002-10-19  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * nnheader.el (nnheader-remove-body): Fix an error of detecting
-       boundary between headers and body.
-       * nnml.el (nnml-parse-head): Ditto.
-
-2002-10-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnslashdot.el (nnslashdot-generate-active): Ignore any bogus
-       entries.
-
-       * gnus-group.el (gnus-fetch-group): Allow an optional
-       specification of the articles to select.
-
-       * gnus-srvr.el (gnus-server-prepare): Removed superfluous cdr.
-
-2002-10-20  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-agent.el (gnus-agent-fetch-group-1): After fetching
-       headers from the group, update variable `articles' to contain
-       only those numbers where headers exist.  (When fetching all
-       articles in a group, Gnus creates lots of numbers where there is
-       no articles.)
-
-2002-10-20  Steve Youngs  <youngs@xemacs.org>
-
-       * pgg-parse.el (pgg-parse-public-key-algorithm-alist): XEmacs
-       doesn't have the 'alist custom type, use cons cells instead.
-       (pgg-parse-symmetric-key-algorithm-alist): Ditto.
-       (pgg-parse-hash-algorithm-alist): Ditto.
-       (pgg-parse-compression-algorithm-alist): Ditto.
-       (pgg-parse-signature-type-alist): Ditto.
-
-       * pgg-gpg.el (pgg-gpg-extra-args): Fix custom mismatch.
-
-       * pgg-pgp5.el (pgg-pgp5-extra-args): Ditto.
-
-       * pgg-pgp.el (pgg-pgp-extra-args): Ditto.
-
-2002-10-19  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-open-server): Check imap-state in IMAP server
-       buffer.
-
-2002-10-18  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-spec.el (gnus-make-format-preserve-properties)
-       (gnus-xmas-format, gnus-parse-simple-format): Preserve text
-       properties also on XEmacs.  `gnus-xmas-format' is like format but
-       preserves text properties on XEmacs (though it only understands
-       simple format specs).  The variable
-       `gnus-make-format-preserve-properties' controls whether the
-       function is used, and is checked in `gnus-parse-simple-format'.
-       Patch by Paul Moore <gustav@morpheus.demon.co.uk>.
-
-       * gnus-agent.el (gnus-agent-fetch-articles): More debugging
-       output.
-       (gnus-agent-consider-all-articles): New variable.
-       (gnus-agent-get-undownloaded-list): Comment that marks todo item.
-       (gnus-agent-fetch-headers): Depending on
-       gnus-agent-consider-all-articles, maybe get all articles.
-       (gnus-category-predicate-alist, gnus-agent-read-p): New predicate
-       `read'.
-       (gnus-predicate-imples-unread): New function.
-       (gnus-agent-fetch-headers): Optimize to call
-       gnus-list-of-unread-articles if that is sufficient.
-       Check unseen and recent instead of seen and recent.
-       (gnus-agent-fetch-headers): Abstain from calling
-       gnus-list-range-intersection if range (a . b) would have (> a b).
-
-2002-10-18  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-send-mail): Make it possible to perform
-       edebug-defun.
-
-2002-10-18  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-button-man-handler): Change default to
-       `manual-entry' (defined in both emacsen).
-       (gnus-button-man-handler): Remove emacsen difference and use
-       `manual-entry'.
-
-2002-10-18  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * spam.el: Wrap autoload settings for bbdb-records,
-       executable-find and ifile-spam-filter with eval-and-compile.
-       (spam-display-buffer-contents): Remove.
-       (spam-bogofilter-score): Merge spam-display-buffer-contents.
-
-2002-10-17  Ted Zlatanov  <tzz@lifelogs.com>
-
-       * spam.el (spam-display-buffer-contents): New function.
-       (spam-bogofilter-score): use spam-display-buffer-contents, patch
-       from Katsumi Yamaoka <yamaoka@jpl.org>.
-
-2002-10-17  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * nnheader.el (nnheader-parse-naked-head): New function.
-       (nnheader-parse-head): Use the above function, in order to handle
-       continuation lines properly.
-       (nnheader-remove-body): New function.
-       (nnheader-remove-cr-followed-by-lf): New function.
-       (nnheader-ms-strip-cr): Use the above function.
-
-       * gnus-agent.el (gnus-agent-regenerate-group): Call
-       `nnheader-remove-body'; use `nnheader-parse-naked-head' instead of
-       `nnheader-parse-head'.
-       * gnus-cache.el (gnus-cache-possibly-enter-article): Ditto.
-
-       * gnus-msg.el (gnus-inews-yank-articles): Do not unfold
-       continuation lines by itself; call `nnheader-parse-naked-head'
-       instead of `nnheader-parse-head'.
-       * nndiary.el (nndiary-parse-head): Ditto.
-       * nnfolder.el (nnfolder-parse-head): Ditto.
-       * nnimap.el (nnimap-retrieve-headers-progress): Ditto.
-       * nnmaildir.el (nnmaildir--update-nov): Ditto.
-       * nnml.el (nnml-parse-head): Ditto.
-
-2002-10-17  Steve Youngs  <youngs@xemacs.org>
-
-       * gnus-art.el (gnus-button-man-handler): Add 'manual-entry' for
-       XEmacs, default to it if featurep 'xemacs.
-
-2002-10-16  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * spam-stat.el: Check for the existence of hash functions instead
-       of the Emacs version to decide whether to load cl.  Suggested by
-       Kai Gro\e,A_\e(Bjohann.
-
-2002-10-15  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-agent.el (gnus-agent-fetch-selected-article): Open history
-       if it isn't open yet.
-
-2002-10-14  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-group.el: Require mm-url only when compiling.
-       (gnus-group-fetch-charter): Require mm-url.
-
-       * spam-stat.el: Require cl for the functions gethash,
-       hash-table-count, make-hash-table and mapc for Emacs 20.
-       (puthash): Alias to cl-puthash for Emacs 20.
-       (with-syntax-table): New macro for Emacs 20.
-
-2002-10-12  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-spec.el (gnus-pad-form): Use gnus-string-width-function.
-
-2002-10-11  Ted Zlatanov <tzz@lifelogs.com>
-
-       * spam.el (spam-check-ifile): added ifile as a spam checking
-       backend, and spam-use-ifle as the variable to toggle that check.
-
-2002-10-12  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-beginning-of-line): New variable.
-       (message-beginning-of-line): Use it.
-
-2002-10-11  Ted Zlatanov <tzz@lifelogs.com>
-
-       * spam.el: more compilation fixes for BBDB
-
-       * spam-stat.el added code from Alex Schroeder <alex@gnu.org>
-       (spam-stat-reduce-size): Interactive.
-       (spam-stat-reset): New function.
-       (spam-stat-save): Interactive.
-
-2002-10-11  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus.el: Autoload gnus-delay-initialize.
-
-       * message.el: Autoload gnus-delay-article.
-
-2002-10-11  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-spec.el (gnus-balloon-face-function): Use the help-echo
-       text property in Emacs.
-
-2002-10-11  Simon Josefsson  <jas@extundo.com>
-
-       * mml2015.el (mml2015-pgg-decrypt, mml2015-pgg-clear-decrypt)
-       (mml2015-pgg-verify, mml2015-pgg-clear-verify): Remove CR.
-
-       * mml1991.el (mml1991-pgg-sign): Remove CR.
-
-2002-10-10  Simon Josefsson  <jas@extundo.com>
-
-       * mml2015.el (mml2015-pgg-decrypt): Set gnus details even when
-       decrypt failed.
-       (mml2015-trust-boundaries-alist): Removed.
-       (mml2015-gpg-extract-signature-details): Don't use it.
-       (mml2015-unabbrev-trust-alist): New.
-       (mml2015-gpg-extract-signature-details): Use it.
-
-2002-10-10  Ted Zlatanov <tzz@lifelogs.com>
-
-       * spam.el: compilation fixes, spam-check-bbdb function is nil if no
-       BBDB installed
-
-       * spam-stat.el: added code from Alex Schroeder <alex@gnu.org> to do
-       statistical analysis of spam in Lisp only
-
-2002-10-10  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-open-server): Re-open server if it isn't in
-       auth, selected or examine state.
-
-       * pgg-gpg.el (pgg-gpg-verify-region): Filter out stuff into output
-       buffer and error buffer depending on type of information.
-
-       * mml2015.el (mml2015-gpg-extract-signature-details): Parse
-       --status-fd stuff even if gpg.el is not used (revert earlier
-       change).
-       (mml2015-pgg-{clear-,}verify): Store both output and errors as
-       gnus details.
-       (mml2015-pgg-{clear-,}verify): Extract signature info from errors
-       buffer.
-
-       * pgg.el (pgg-verify-region): Use it.
-
-       * pgg-def.el (pgg-query-keyserver): New variable.
-
-       * pgg.el (pgg-decrypt-region): Bind pgg-default-user-id to
-       key-identifier in packet.  Is this a good idea?
-
-       * mml.el (mml-mode-map): Add security commands that operates on
-       MIME parts.
-       (mml-menu): And menu items for them.
-
-       * mml1991.el (mml1991-pgg-encrypt): Remove headers.
-
-       * mml.el (mml-parse-1): Support sender in #secure tags.
-
-       * mml1991.el (mml1991-pgg-sign): Only use message-sender if it is
-       defined.
-
-       * mml-sec.el (mml-smime-encrypt-buffer): Warn about combined signing.
-       (mml-pgp-encrypt-buffer): Support combined signing.
-
-       * mml1991.el (mml1991-mailcrypt-encrypt): Support combined signing.
-       (mml1991-gpg-encrypt): Ditto.
-       (mml1991-pgg-encrypt): Ditto.
-       (mml1991-encrypt): Pass sign parameter.
-
-       * mml-sec.el (mml-signencrypt-style-alist): Defcustom.
-       (mml-signencrypt-style): Mention the variable.
-
-2002-10-09  Simon Josefsson  <jas@extundo.com>
-
-       * mml1991.el (mml1991-pgg-sign): Bind pgg-default-user-id, not
-       pgg-gpg-user-id.
-
-       * pgg.el (pgg-insert-url-with-w3): Ignore errors.
-       (pgg-fetch-key-function): Nil if w3 is not installed.
-
-2002-10-08  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-agent.el (gnus-agent-fetch-selected-article): Bind
-       gnus-agent-current-history.
-
-2002-10-06  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-parse-status): Don't use read to read token.
-
-2002-10-05  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-agent.el (gnus-agent-fetch-selected-article): Do nothing
-       for methods not covered by the agent, and when unplugged.
-
-2002-10-05  Simon Josefsson  <jas@extundo.com>
-
-       * pgg-gpg.el (pgg-gpg-encrypt-region): Query passphrase when
-       signing.
-
-       * gnus-agent.el (gnus-agent-read-servers): If getting method from
-       a named server fails, ignore the server.
-
-       * mml1991.el (mml1991-pgg-sign): Do QP.
-
-       * pgg-gpg.el (pgg-gpg-encrypt-region): Make signencrypt really
-       work.
-
-2002-10-04  Simon Josefsson  <jas@extundo.com>
-
-       * pgg-gpg.el (pgg-gpg-encrypt-region): Make signencrypt work.
-
-       * pgg-pgp.el (pgg-pgp-verify-region): Inline
-       binary-write-decoded-region from MEL.
-
-       * pgg.el (pgg-encrypt-region): Support sign.
-
-       * pgg-gpg.el (pgg-gpg-encrypt-region): Ditto.
-
-       * mml2015.el (mml2015-pgg-encrypt): Ditto.
-
-       * pgg.el, pgg-def.el, pgg-parse.el, pgg-gpg.el, pgg-pgp5.el,
-       pgg-pgp6.el: Moved from ../pgg/.  Modifications compared to EMIKO
-       branch where PGG was taken from in the ChangeLog entries below.
-
-2002-10-01  Simon Josefsson  <jas@extundo.com>
-
-       * pgg-pgp.el: Don't require mel.  Don't use luna.
-       (pgg-scheme-pgp-instance, pgg-make-scheme-pgp): Remove.
-       (pgg-pgp-process-region): Use expand-file-name instead of concat.
-       (pgg-pgp-process-region): Don't use binary-funcall.
-
-       * pgg-pgp5.el (pgg-pgp5-process-region): Don't use binary-funcall.
-
-       * pgg-gpg.el (pgg-gpg-process-region): Use expand-file-name
-       instead of concat.
-
-       * pgg-pgp5.el (pgg-pgp5-process-region): Ditto.
-
-2002-09-29  Simon Josefsson  <jas@extundo.com>
-
-       * pgg-parse.el (pgg-char-int, pgg-string-as-unibyte): Prevent byte
-       compile warnings.
-
-       * pgg.el (pgg-decrypt-region): Don't parse packet.
-
-       * pgg.el, pgg-gpg.el, pgg-pgp5.el: Don't depend on luna.el.
-
-2002-09-29  Daiki Ueno <ueno@unixuser.org>
-
-       * pgg.el: Remove dependency on calist.el.
-
-2002-09-28  Simon Josefsson  <jas@extundo.com>
-
-       * pgg.el (pgg-temporary-file-directory): New variable.
-       (pgg-verify-region): Don't assume set-buffer-multibyte exists.
-
-       * pgg-pgp5.el (pgg-pgp5-process-region, pgg-scheme-verify-region)
-       (pgg-scheme-snarf-keys-region): Use pgg-temporary-file-directory.
-
-       * pgg-parse.el (pgg-char-int): Defalias.
-       (pgg-format-key-identifier, pgg-byte-after, pgg-read-byte)
-       (pgg-read-bytes, pgg-read-body): Use it.
-       (pgg-decode-packets): Don't use MEL, use base64-*.
-       (pgg-parse-armor): Don't assume set-buffer-multibyte exists.
-       (pgg-string-as-unibyte): Defalias.
-       (pgg-parse-armor-region): Use it.
-
-       * pgg-gpg.el (pgg-gpg-process-region): Use
-       pgg-temporary-file-directory.
-
-       * luna.el: Don't def-edebug.
-
-       * pgg-pgp5.el (pgg-scheme-verify-region): Inline
-       binary-write-decoded-region from MEL.
-
-       * pgg-pgp5.el, pgg-gpg.el: Don't require mel.
-
-       * alist.el, calist.el: Don't require product/APEL.
-
-       * pgg-parse.el (top-level): Remove dependency on static.el,
-       pccl.el, mel.el.
-       (pgg-parse-crc24, pgg-parse-crc24-string): Only define if
-       `define-ccl-program' is boundp, instead of using broken.
-
-2002-10-01  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-required-mail-headers): Remove Lines:.
-
-2002-10-03  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Jesper Harder.
-
-       * 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-group-fetch-control to summary key map and menu.
-
-2002-10-03  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir--group-maxnum-art): fix maximum article
-       number when there are no articles.
-
-2002-10-03  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-agent.el (gnus-agent-summary-fetch-group): Optional prefix
-       arg ALL means to fetch all articles, not only downloadable ones.
-       (gnus-agent-fetch-selected-article): New function for
-       gnus-select-article-hook or gnus-mark-article-hook.
-
-2002-10-02  Katsumi Yamaoka  <yamaoka@jpl.org>
-       From Peter von der Ahe <nospam2159@daimi.au.dk>.
-
-       * gnus-ems.el (gnus-x-splash): Set coding-system-for-read to
-       raw-text.
-
-2002-09-30  Ted Zlatanov <tzz@lifelogs.com>
-
-       * spam.el: merged changes from pinard@iro.umontreal.ca (Fran\e,Ag\e(Bois
-       Pinard).
-       Major revamp of the code, documentation is in comments in the file
-       for now.
-
-2002-09-30  Simon Josefsson  <jas@extundo.com>
-
-       * mml2015.el (mml2015-pgg-clear-verify): Verifying in a unibyte
-       buffer seem to be needed?
-
-2002-09-29  Simon Josefsson  <jas@extundo.com>
-
-       * mml1991.el (pgg-output-buffer, pgg-errors-buffer): Prevent byte
-       compile warnings.
-
-       * mml1991.el (mml1991-function-alist): Add pgg.
-       (mml1991-pgg-sign, mml1991-pgg-encrypt): New functions.
-       (mml1991-pgg-encrypt): Fix recipients querying.
-
-2002-09-28  Simon Josefsson  <jas@extundo.com>
-
-       * mml2015.el (autoload): Autoload correct files.  Trivial patch
-       from dme@dme.org.
-       (mml2015-pgg-decrypt, mml2015-pgg-verify): Make sure either nil or
-       handle is returned.
-
-2002-09-27  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-start.el (gnus-fixup-nnimap-unread-after-getting-new-news):
-       Protect against non-existent of `nnimap-mailbox-info'.
-
-2002-09-27  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-start.el (gnus-fixup-nnimap-unread-after-getting-new-news): New.
-       (gnus-setup-news-hook): Use it.
-       (gnus-after-getting-new-news-hook): Ditto.
-
-       * nnimap.el (nnimap-fixup-unread-after-getting-new-news): Remove.
-
-2002-09-27  Katsumi Yamaoka  <yamaoka@jpl.org>
-       From Mats Lidell <matsl@contactor.se>.
-
-       * gnus-art.el (gnus-article-mode-syntax-table): Replace "-" to " ".
-
-2002-09-27  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * gnus-sum.el (gnus-nov-parse-line): When an error is signaled in
-       the part to decode encoded words, use raw words instead of decoded
-       words.
-
-2002-09-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnimap.el (nnimap-update-unseen): Use gnus-gethash-safe.
-
-       * mm-view.el (mm-w3m-mode-ignored-keys): New variable.
-       (mm-setup-w3m): Use it.
-
-2002-09-27  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-article-mode-syntax-table): Make M-. work in
-       article buffers.
-
-       * nnimap.el (nnimap-fixup-unread-after-getting-new-news): Autoload
-       it just in case.
-       (nnimap-update-unseen): New function; update unseen count in
-       `n-m-info'.
-       (nnimap-close-group): Call it.
-
-       * gnus-start.el (gnus-setup-news-hook): Add n-f-u-a-g-n-n.
-       (gnus-after-getting-new-news-hook): Ditto.
-
-       * nnimap.el (nnimap-retrieve-groups): Move the quick mail check
-       message into verboselevel 9.  Change slow mail check message.
-       (nnimap-retrieve-groups): Use prefixed names in n-mailbox-info.
-       (nnimap-fixup-unread-after-getting-new-news): New function, to be
-       used as a hook after getting new mail.
-
-2002-09-26  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-parse-resp-text-code): The UNSEEN value in
-       SELECT/EXAMINE is first unseen article, not number of unseen
-       articles.  Make them distinct by renaming the former to
-       `first-unseen' instead of `unseen'.
-
-       * nnimap.el (nnimap-retrieve-groups): Get uidvalidity and unseen
-       too.
-       (nnimap-retrieve-groups): Don't used cached data if uidvalidity
-       changed.
-       (nnimap-retrieve-groups): Store uidvalidity and unseen data too.
-
-       * gnus-int.el (gnus-server-unopen-status): Defcustom.
-
-       * mml-sec.el (mml-signencrypt-style): Docstring to font-lock
-       better.
-
-       * mml2015.el (mml2015-pgg-decrypt): Only add security information
-       if dissecting resulting buffer actually had any information.
-
-2002-09-26  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-group.el (gnus-group-sort-by-method): Remove `symbol-name'
-       because the function `string<' allows symbols.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Ditto.
-
-2002-09-25  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-forward-make-body): Revert an early change
-       because 8-bit utf-8 emails.
-
-2002-09-25  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.umu.se>
-
-       * gnus-agent.el (gnus-category-line-format): Doc fixes (mostly added
-       links to Info)
-       * gnus-art.el (gnus-treat-highlight-signature):
-       * gnus-art.el (gnus-treat-buttonize):
-       * gnus-art.el (gnus-treat-buttonize-head):
-       * gnus-art.el (gnus-treat-emphasize):
-       * gnus-art.el (gnus-treat-strip-cr):
-       * gnus-art.el (gnus-treat-unsplit-urls):
-       * gnus-art.el (gnus-treat-leading-whitespace):
-       * gnus-art.el (gnus-treat-hide-headers):
-       * gnus-art.el (gnus-treat-hide-boring-headers):
-       * gnus-art.el (gnus-treat-hide-signature):
-       * gnus-art.el (gnus-treat-fill-article):
-       * gnus-art.el (gnus-treat-hide-citation):
-       * gnus-art.el (gnus-treat-hide-citation-maybe):
-       * gnus-art.el (gnus-treat-strip-list-identifiers):
-       * gnus-art.el (gnus-treat-strip-pgp):
-       * gnus-art.el (gnus-treat-strip-pem):
-       * gnus-art.el (gnus-treat-strip-banner):
-       * gnus-art.el (gnus-treat-highlight-headers):
-       * gnus-art.el (gnus-treat-highlight-citation):
-       * gnus-art.el (gnus-treat-date-ut):
-       * gnus-art.el (gnus-treat-date-local):
-       * gnus-art.el (gnus-treat-date-english):
-       * gnus-art.el (gnus-treat-date-lapsed):
-       * gnus-art.el (gnus-treat-date-original):
-       * gnus-art.el (gnus-treat-date-iso8601):
-       * gnus-art.el (gnus-treat-date-user-defined):
-       * gnus-art.el (gnus-treat-strip-headers-in-body):
-       * gnus-art.el (gnus-treat-strip-trailing-blank-lines):
-       * gnus-art.el (gnus-treat-strip-leading-blank-lines):
-       * gnus-art.el (gnus-treat-strip-multiple-blank-lines):
-       * gnus-art.el (gnus-treat-unfold-headers):
-       * gnus-art.el (gnus-treat-fold-headers):
-       * gnus-art.el (gnus-treat-fold-newsgroups):
-       * gnus-art.el (gnus-treat-overstrike):
-       * gnus-art.el (gnus-treat-display-xface):
-       * gnus-art.el (gnus-treat-display-smileys):
-       * gnus-art.el (gnus-treat-from-picon):
-       * gnus-art.el (gnus-treat-mail-picon):
-       * gnus-art.el (gnus-treat-newsgroups-picon):
-       * gnus-art.el (gnus-treat-body-boundary):
-       * gnus-art.el (gnus-treat-capitalize-sentences):
-       * gnus-art.el (gnus-treat-fill-long-lines):
-       * gnus-art.el (gnus-treat-play-sounds):
-       * gnus-art.el (gnus-treat-translate):
-       * gnus-art.el (gnus-treat-x-pgp-sig):
-       * gnus-art.el (gnus-mime-button-line-format):
-       * gnus-art.el (gnus-button-man-level):
-       * gnus-art.el (gnus-button-emacs-level):
-       * gnus-cus.el (gnus-group-parameters):
-       * gnus-gl.el (bbb-build-mid-scores-alist):
-       * gnus-group.el (gnus-group-line-format):
-       * gnus-mlspl.el (gnus-group-split-setup):
-       * gnus-mlspl.el (gnus-group-split):
-       * gnus-msg.el (gnus-mailing-list-groups):
-       * gnus-msg.el (gnus-posting-styles):
-       * gnus-nocem.el (gnus-nocem-issuers):
-       * gnus-score.el (gnus-score-regexp-bad-p):
-       * gnus-srvr.el (gnus-server-line-format):
-       * gnus-topic.el (gnus-topic-line-format):
-       * gnus.el (gnus-summary-line-format):
-       * mail-source.el (mail-sources):
-       * message.el (message-subscribed-address-file):
-       * nnmail.el (nnmail-split-fancy):
-
-2002-09-24  Evgeny Roubinchtein  <zhenya@freeshell.org>
-
-       * mail-source.el(mail-source-run-script): use `functionp' to test
-       whether the argument `script' is in fact a function.
-       (mail-sources): adjust the defcustom to allow users to specify a
-       function or a string as the value of the `:prescript' and
-       `:postscript' arguments of the `file' and `pop3' mail sources.
-
-2002-09-25  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir--grp-add-art): fix minimum article
-       number when article 1 does not exist.
-
-2002-09-25  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * 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.
-       (gnus-button-handle-describe-function)
-       (gnus-button-handle-describe-variable): Doc fix.  From Reiner Steib.
-       (gnus-button-handle-describe-key, gnus-button-handle-apropos)
-       (gnus-button-handle-apropos-command): Doc fix.  From Reiner Steib.
-
-2002-09-25  Mark A. Hershberger  <mah@everybody.org>
-       Trivial patch.
-
-       * nnrss.el (nnrss-save-server-data): Save nnrss-group-alist in
-       the file.
-
-2002-09-24  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-1): Create nndraft:queue, nndraft:drafts.
-
-2002-09-24  Simon Josefsson  <jas@extundo.com>
-
-       * mml2015.el (top-level): Require mm-util for mm-make-temp-file.
-       (mml2015-use): Prefer PGG if installed.
-       (mml2015-function-alist): Add PGG wrappers.
-       (mml2015-gpg-extract-signature-details): Check mml2015-use too.
-       (mml2015-gpg-extract-signature-details): PGG strips "gpg: "
-       prefix, make regexp optionally skip it.
-       (mml2015-pgg-decrypt, mml2015-pgg-clear-decrypt)
-       (mml2015-pgg-verify, mml2015-pgg-clear-verify, mml2015-pgg-sign)
-       (mml2015-pgg-encrypt): New functions.
-       (defvar, autoload): Prevent byte-compile warnings.
-
-2002-09-24  Katsumi Yamaoka  <yamaoka@jpl.org>
-       From TSUCHIYA Masatoshi <tsuchiya@namazu.org>.
-
-       * gnus-art.el (article-strip-banner): Check for the existence of
-       from header.
-
-2002-09-23  Kai Gro\e,b_\e(Bjohann  <grossjoh@ls6.informatik.uni-dortmund.de>
-
-       * 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  <prj@po.cwru.edu>
-       From Josh Huber.
-
-       * nnmaildir.el (nnmaildir--update-nov): fix wrong-type error when
-       nnmail-extra-headers is non-nil.
-
-2002-09-23  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el: Store article numbers persistently.  General
-       revision.
-       (nnmaildir-request-expire-articles): handle 'immediate and 'never
-       for nnmail-expiry-wait; delete instead of moving if 'force is
-       given.
-
-2002-09-23  Simon Josefsson  <jas@extundo.com>
-       Trivial fix from beaker@iavmb.pl (Krzysztof J\e,Bj\e(Bdruczyk).
-
-       * smime.el (smime-sign-buffer): Get key and extra certs.
-       (smime-get-key-with-certs-by-email): Utility function.
-
-2002-09-21  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       Trivial patch from Micha Wiedenmann <mw-u1@gmx.de>
-
-       * gnus-soup.el (gnus-soup-add-article): Mark as read only when the
-       article exists.
-
-2002-09-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-next-group): Switch to the summary buffer.
-
-2002-09-20  Kai Gro\e,b_\e(Bjohann  <grossjoh@ls6.informatik.uni-dortmund.de>
-       From Reiner Steib.
-
-       * gnus-art.el (gnus-button-handle-custom,
-       gnus-button-handle-mid-or-mail,
-       gnus-button-handle-describe-{function,variable,key},
-       gnus-button-handle-apropos{,command,variable}): New functions.
-       (gnus-button-prefer-mid-or-mail,gnus-button-guessed-mid-regexp,
-       gnus-button-{man,emacs,mail}-level): New variables.
-       (gnus-button-alist): Use the above to buttonize emacs and mail
-       related links.
-
-2002-09-18  Juanma Barranquero  <lektu@terra.es>
-
-       * gnus-int.el (gnus-status-message): Fix spacing.
-
-       * imap.el (imap-continuation): Fix typos.
-
-2002-09-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-configure-posting-styles): Sort results.
-
-       * gnus-art.el (gnus-article-reply-with-original): Correct
-       with-current-buffer scope.
-
-       * message.el (message-completion-alist): Add Reply-To, From, etc.
-
-2002-09-18  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-request-expire-articles): Make flag setting
-       conditional.  From Nevin Kapur <nevin@jhu.edu>.
-
-2002-09-17  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-expiry-target): Don't search for which
-       articles exists here.
-       (nnimap-request-expire-articles): Do it here instead.  Only expire
-       when articles are found.  Suggested by Nevin Kapur
-       <nevin@jhu.edu>.
-
-2002-09-17  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Reiner Steib <reiner.steib@gmx.de>.
-
-       * message.el (message-strip-subject-trailing-was)
-       (message-change-subject, message-add-archive-header)
-       (message-xpost-fup2-header, message-xpost-insert-note)
-       (message-xpost-fup2, message-reduce-to-to-cc): New functions
-       adopted from message-utils.el.  Add functions to the keymap, mode
-       describtion and menu.
-       (message-change-subject,message-xpost-fup2): Signal error if
-       current header is empty.
-       (message-xpost-insert-note): Changed insert position.
-       (message-archive-note): Ensure to insert note in message body (not
-       in head).
-       (message-archive-header, message-archive-note)
-       (message-xpost-default, message-xpost-note, message-fup2-note)
-       (message-xpost-note-function): New variables adopted from
-       message-utils.el.  Changed some doc-strings.
-       (message-mark-insert-{begin,end}): Rename from
-       message-{begin,end}-inserted-text-mark (message-utils.el), changed
-       values.
-       (message-subject-trailing-was-query)
-       (message-subject-trailing-was-ask-regexp)
-       (message-subject-trailing-was-regexp): New variables.
-       (message-to-list-only): Added doc-string and menu entry.
-
-       * message-utils.el: Removed.  Functions are now in message.el.
-
-2002-09-16  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-reply-with-original,
-       gnus-article-followup-with-original): Switch to
-       gnus-summary-buffer before reply/followup.
-
-2002-09-15  John Paul Wallington  <jpw@shootybangbang.com>
-
-       * gnus-sum.el (gnus-summary-toggle-header): The article window may
-       not exist. Toggle it anyway.
-
-2002-09-13  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-copy-article-buffer): Bind mail-header-separator.
-
-       * gnus-art.el (article-fill-long-lines): Fill-paragraph properly.
-       Trivial patch from Urban Engberg <ue@ccieurope.com>.
-
-       * rfc2047.el (message-posting-charset): Defvar it.
-       (rfc2047-charset-encoding-alist): Use B for iso-8859-7 and
-       iso-8859-8. Fix doc.  Suggested by Dave Love <fx@gnu.org>.
-
-       * mail-source.el (mail-source-fetch): Hide password.
-
-       * gnus-sum.el (gnus-summary-next-group): Semi-exit only when needed.
-
-2002-09-12  Katsumi Yamaoka  <yamaoka@jpl.org>
-       From John Paul Wallington <jpw@shootybangbang.com>.
-
-       * gnus.el (gnus-visual, gnus-meta): Fix typo.
-
-2002-09-11  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-article-address-banner-alist): Doc fix.
-
-2002-09-11  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-expiry-target): Only expiry-target existing articles.
-       (nnimap-split-rule): Doc fix.
-       (nnimap-request-expire-articles): Cleanup code.
-
-2002-09-11  Katsumi Yamaoka  <yamaoka@jpl.org>
-       From TSUCHIYA Masatoshi <tsuchiya@namazu.org>.
-
-       * gnus-art.el (gnus-article-address-banner-alist): New option.
-       (article-strip-banner): Refer the above option to split banners of
-       free mail servers, when no group parameter is specified.
-
-2002-09-10  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * nntp.el (nntp-wait-for-string): Check for a process in the
-       current buffer instead of `nntp-server-buffer'.
-
-2002-09-09  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-button-man-handler): New variable.
-       (gnus-button-alist): Use g-b-handle-man.
-       (gnus-button-handle-man): New, call g-b-man-handler.
-
-2002-09-08  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-button-alist): Buttonize man page links.
-
-2002-09-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-dumbquotes-map): Add \230.
-
-2002-09-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-srvr.el (gnus-browse-make-menu-bar): Add "d".
-
-       * gnus-sum.el (gnus-summary-limit-to-unseen): New command and
-       keystroke.
-
-       * gnus-srvr.el (gnus-browse-describe-group): New command and
-       keystroke.
-
-2002-09-06  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-article-treat-body-boundary): Don't quote a
-       value for gnus-decoration property.
-
-2002-09-06  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * nnmail.el (nnmail-cache-fetch-group): Don't return "" (empty
-       string) as group name in case we have a CRLF in the file.
-
-2002-09-04  Jesper Harder  <harder@ifa.au.dk>
-
-       * rfc1843.el (rfc1843-decode-loosely): Move to mime customization
-       group.
-       (rfc1843-decode-hzp): do.
-       (rfc1843-newsgroups-regexp): do.
-
-2002-09-04  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-canlock-generate): Make sure sha1 doesn't
-       call external programs.
-
-2002-09-03  Simon Josefsson  <jas@extundo.com>
-
-       * nntp.el (nntp-wait-for-string): Dont infloop if process died.
-
-       * gnus-agent.el (gnus-agent-batch): Add doc.
-
-2002-09-03  Josh Huber  <huber@alum.wpi.edu>
-
-       * gnus-msg.el (gnus-summary-handle-replysign): Change the order we
-       check for signed and encrypted parts.
-       * mml.el (mml-parse-1): Correct small typo which preventing
-       setting recipients in a secure tag.
-
-2002-09-03  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-util.el (mm-coding-system-priorities): Default to a list of
-       iso-2022-jp and others for the Japanese environment.
-
-2002-09-03  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-util.el (gnus-frame-or-window-display-name): Exclude
-       invalid display names.
-
-2002-08-30  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-group-fetch-control): Fix typo in last
-       commit.  From Reiner Steib <4uce.02.r.steib@gmx.net>.
-
-2002-08-26  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus.el (gnus-group-charter-alist): New option.
-       (gnus-group-fetch-control-use-browse-url): New option.
-
-       * gnus-group.el (gnus-group-fetch-charter): New function.
-       (gnus-group-fetch-control): New function.
-       Add them to the keymap and menu. Require mm-url.
-
-2002-08-30  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-mlspl.el (gnus-group-split-fancy): Doc fix.
-       From Alex Schroeder <alex@emacswiki.org>.
-
-2002-08-29  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-group.el (gnus-group-make-menu-bar): Add ellipses to menu
-       items expecting user interaction.
-
-       * gnus-topic.el (gnus-topic-make-menu-bar): do.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): do.
-
-       * gnus-srvr.el (gnus-server-make-menu-bar): do.
-
-       * mml.el (mml-menu): do.
-
-2002-08-28  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mail-source.el (mail-source-touch-pop): New function.
-
-       * message.el (message-smtpmail-send-it): New function.
-       (message-send-mail-function): Add it for a candidate.
-
-2002-08-27  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-msg.el (posting-charset-alist): Use
-       gnus-define-group-parameter instead of defcustom.
-       (gnus-put-message): Handle SPC in GCC.
-       (gnus-inews-insert-gcc): Ditto.
-       (gnus-inews-insert-archive-gcc): Ditto.
-
-2002-08-26  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-agent.el (gnus-agent-auto-agentize-methods): New variable.
-       (gnus-agentize): Auto agentize all nntp and nnimap groups.
-       (gnus-agent-possibly-save-gcc): Autoload.
-       Suggested by (KOSEKI Yoshinori) <kose@meadowy.org>.
-
-2002-08-26  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus.el (gnus-other-frame-function): New user option.
-       (gnus-other-frame): Use it; add a doc-string; make it work with
-       the gnuclient program.
-
-       * gnus-util.el (gnus-frame-or-window-display-name): New function.
-
-       * lpath.el: Fbind `frame-parameter', `make-frame-on-display',
-       `device-connection' and `dfw-device'.
-
-2002-08-22  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-art.el (gnus-emphasis-alist): Strikethru had a lot of false
-       positives, make it stricter.  From Jochen Hein (trivial change).
-
-2002-08-21  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus.el (gnus-other-frame): Trivial fix.
-
-2002-08-21  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus.el (gnus-other-frame-parameters): New user option.
-       (gnus-other-frame-object): New variable.
-       (gnus-other-frame): Make it search for existing Gnus frame; don't
-       read new news; delete frame on exit.
-
-       * gnus-util.el (gnus-select-frame-set-input-focus): New function.
-
-       * lpath.el: Fbind w32-focus-frame and x-focus-frame.
-
-2002-08-20  Katsumi Yamaoka  <yamaoka@jpl.org>
-       From \e$B>.4X\e(B \e$B5HB'\e(B (KOSEKI Yoshinori) <kose@meadowy.org>.
-
-       * message.el (message-set-auto-save-file-name): Add support for
-       the Cygwin Emacs; the system-type is `cygwin'.
-       * nnheader.el (nnheader-file-name-translation-alist): Ditto.
-
-2002-08-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-button-url-regexp): Use POSIX regexp if possible.
-
-       * nnmh.el (nnmh-request-list-1): Use %.0f instead of %d to
-       avoid arithmetic errors.
-
-2002-08-20  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el: Don't fbind `gnus-article-replace-with-quoted-text'.
-
-2002-08-19  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-ignored-supersedes-headers): Add X-Hashcash.
-       (message-ignored-resent-headers): Add envelope From.
-
-2002-08-18  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus.el (gnus-summary-line-format): Document %k specifier.
-
-2002-08-17  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-sum.el (gnus-summary-line-message-size): New function.
-       (gnus-summary-line-format-alist): Use it.
-
-2002-08-15  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (article-make-date-line): Refer to the value for
-       `gnus-article-time-format' in the summary buffer.
-
-       * message.el (message-cite-prefix-regexp): Exclude ":" and "\e,A;\e(B".
-
-2002-08-14  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-button-alist): Use ' not ` for default value
-       quoting.
-       (gnus-button-alist): Fix doc.
-       (gnus-header-button-alist): Use ' not ` for default value quoting.
-       (gnus-header-button-alist): Don't inline gnus-button-url-regexp,
-       rationale similar to 2002-05-01 change.
-       (gnus-article-add-buttons-to-head): Evaluate expression.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Add MIME button option.
-
-2002-08-14  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-font-lock-keywords): Refer to the value for
-       `message-cite-prefix-regexp' dynamically.
-
-2002-08-13  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-decode-header-methods): Doc fix.
-
-2002-08-12  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-shell-open): Allow non-list `imap-shell-program'.
-       (imap-shell-open): Skip initial junk before IMAP greeting.
-
-2002-08-11  Simon Josefsson  <jas@extundo.com>
-
-       * message-utils.el (message-xpost-default,
-       message-xpost-fup2-header, message-xpost-fup2): Fixed
-       Typos.  Trivial changes from Reiner Steib
-       <4uce.02.r.steib@gmx.net>.
-
-2002-08-09  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-canlock-password): Set
-       canlock-password-for-verify to newly generated canlock-password.
-       When Emacs is restarted, Custom makes sure this is set, but during
-       the same session we must set it manually.
-
-2002-08-07  Jesper Harder  <harder@ifa.au.dk>
-
-       * yenc.el: New file.
-
-       * mm-uu.el (mm-uu-yenc-decode-function): New variable.
-       (mm-uu-type-alist): Add yenc.
-       (mm-uu-yenc-filename): New function.
-       (mm-uu-yenc-extract): New function.
-
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Add yenc.
-
-2002-08-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * dgnushack.el (merge): Don't use coerce.
-
-2002-05-27  Jesper Harder  <harder@ifa.au.dk>
-
-       * mailcap.el (mailcap-mime-data): Test window-system rather than
-       mm-device-type.
-       (mailcap-mime-data): Call xdvi and gv with "-safer".
-
-       * mm-util.el: Don't define mm-device-type.
-
-2002-08-05  Simon Josefsson  <jas@extundo.com>
-
-       * mm-util.el (mm-coding-system-priorities): coding-system type not
-       supported everywhere.
-
-2002-08-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bumped version number.
-
-2002-08-04 01:48:57 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.07 is released.
-
-2002-08-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-thread-sort-functions): Doc fix.
-       (gnus-article-sort-functions): Doc fix.
-       (t): New keystroke.
-       (gnus-article-sort-by-random): New function.
-       (gnus-thread-sort-by-random): New function.
-
-2002-08-02  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-logic.el (gnus-advanced-integer): Swap arguments in
-       funcall.  From Scott A Crosby <scrosby@cs.rice.edu>.
-
-2002-07-31  Danny Siu  <dsiu@adobe.com>
-
-       * nnimap.el (nnimap-split-articles): do not call nnmail-fetch-field
-       when splitting malformed messages without message-id
-
-2002-07-28  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Niklas Morberg <niklas.morberg@axis.com>.
-
-       * nnweb.el (nnweb-type, nnweb-type-definition)
-       (nnweb-gmane-create-mapping, nnweb-gmane-wash-article)
-       (nnweb-gmane-search, nnweb-gmane-identity): Added gmane
-       functionality.
-       * nnweb.el: Removed old non-functioning search engines.
-
-2002-07-27  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-forward-make-body): Don't use
-       `message-forward-ignored-headers' when doing a "raw" followup (it
-       is important to preserve e.g. CTE).
-
-       * flow-fill.el (fill-flowed): Disable filladapt-mode.
-
-       * gnus-sieve.el (gnus-sieve-guess-rule-for-article): Don't
-       regexp-quote, Cyrus Sieve is fixed.
-
-       * sieve-manage.el (sieve-manage-deletescript): New function.
-
-       * sieve.el (sieve-manage-mode-map): Fix down-mouse-2 and down-mouse-3.
-       (sieve-manage-mode): Fix menubar.
-       (sieve-activate): Change some messages.
-       (sieve-deactivate-all): New function.
-       (sieve-deactivate): New alias.
-       (sieve-remove): New function.
-       (sieve-help): Fix help.
-       All suggested by Ned Ludd.
-
-2002-07-24  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-decode.el (mm-inline-text-html-with-images): Doc fix.
-       (mm-w3m-safe-url-regexp): New user option.
-
-       * mm-view.el (mm-inline-text-html-render-with-w3m): Use
-       `mm-w3m-safe-url-regexp' to bind `w3m-safe-url-regexp'.
-
-2002-07-23  Karl Kleinpaste  <karl@charcoal.com>
-
-       * gnus-sum.el (gnus-summary-delete-article): Force
-       nnmail-expiry-target to 'delete, so that absolute deletion
-       happens when absolute deletion is requested.
-
-2002-07-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Nevin Kapur <nevin@jhu.edu>.
-
-       * nnmail.el (nnmail-fancy-expiry-target): Treat nonexisting
-       headers as empty headers.
-
-2002-07-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Jochen Hein <jochen@jochen.org>.
-
-       * gnus-art.el (gnus-emphasis-alist): Add strikethrough and
-       correct typo.
-       (gnus-emphasis-strikethru): New face.
-
-2002-07-20  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Jason Merrill <jason@redhat.com>.
-
-       * nnfolder.el (nnfolder-retrieve-headers): Avoid searching the
-       entire file for each of a sequence of missing articles.
-
-       * gnus-salt.el (gnus-binary-display-article): Respect an existing
-       value for gnus-view-pseudos.
-
-       * gnus-sum.el (gnus-summary-insert-new-articles): Count down to
-       avoid nreverse.
-
-2002-07-14  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Ted Zlatanov <teodor.zlatanov@divine.com>.
-
-       * gnus-sum.el (gnus-auto-expirable-marks): Remove `spam'.
-       (gnus-summary-mode-line-format-alist): Add %h for number of
-       spams.
-       (gnus-newsgroup-spam-marked): New variable.
-       (gnus-summary-local-variables): Add gnus-newsgroup-spam-marked.
-       (gnus-article-read-p, gnus-article-mark)
-       (gnus-set-global-variables, gnus-set-global-variables)
-       (gnus-article-marked-p, gnus-summary-mark-article-as-read)
-       (gnus-summary-mark-article-as-unread)
-       (gnus-summary-mark-article-as-unread, gnus-summary-mark-article)
-       (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  <jas@extundo.com>
-
-       * nnimap.el (nnimap-split-to-groups): Allow group string to be a
-       function.  From KANEMATSU Daiji <kdaiji@bea.com>.
-
-2002-07-09  Nevin Kapur  <nevin@jhu.edu>
-
-       * gnus-sum.el (gnus-summary-delete-article): Respect group
-       parameters while expiring.
-
-2002-07-08  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (article-make-date-line): Fix string.  From Henrik
-       Enberg.
-
-2002-07-08  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-art.el (article-unsplit-urls): Only display MIME when this
-       function is called interactively.  From Niklas Morberg.
-
-2002-07-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-topic.el (gnus-topic-indent, gnus-topic-unindent): Change
-       cdaar to cdar and car.
-
-       * nnsoup.el (nnsoup-retrieve-headers, nnsoup-request-type)
-       (nnsoup-read-active-file, nnsoup-article-to-area): Ditto.
-
-2002-07-05  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-sum.el (gnus-summary-toggle-header): Show headers anyway;
-       don't break a narrowed article.
-
-       * nntp.el (nntp-via-rlogin-command-switches): Doc fix.
-       (nntp-open-via-rlogin-and-telnet): Ditto.
-
-2002-07-02  Didier Verna  <didier@xemacs.org>
-
-       * nnmail.el (nnmail-split-methods): fix custom type.
-
-2002-07-02  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-art.el (article-unsplit-urls): Keep URL buttonized after
-       unsplitting.  From Niklas Morberg <niklas.morberg@axis.com>.
-
-2002-07-01  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-msg.el (gnus-summary-resend-default-address): New user option.
-       (gnus-summary-resend-message): Use it.
-
-2002-06-28  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * 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\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * 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 <yamaoka@jpl.org>.
-
-2002-06-28  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * nntp.el (nntp-open-via-rlogin-and-telnet): Revert last change.
-
-2002-06-28  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * nntp.el (nntp-open-via-rlogin-and-telnet): Hide commandline args.
-
-2002-06-26  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-font-lock-keywords): Revert 2002-06-22
-       change.
-
-2002-06-24  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-font-lock-keywords): Put colon in header
-       name match.
-
-2002-06-22  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-font-lock-keywords): Don't use header faces
-       in the body.  Thanks to Stefan Monnier for the hint on the
-       implementation.
-
-2002-05-09  Miles Bader  <miles@gnu.org>
-
-       * gnus-cite.el (gnus-cite-blank-line-after-header): New variable.
-       (gnus-article-hide-citation): Respect it.
-
-2002-04-12  Juanma Barranquero  <lektu@terra.es>
-
-       * pop3.el (pop3-open-server): Fix typo.
-
-2002-06-18  Josh Huber  <huber@alum.wpi.edu>
-
-       * gnus.el (gnus-find-subscribed-addresses): Use add-to-list
-       instead of push to ignore duplicate to-(list|address) values.
-       * nnmail.el (nnmail-cache-ignore-groups): New.
-       * nnmail.el (nnmail-cache-insert): Obey nnmail-cache-ignore-groups
-
-2002-06-18  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-delay.el (gnus-delay-send-queue): Delete the delay header
-       before sending.  Suggested by Jan Rychter.
-
-2002-06-18  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * dgnushack.el (remove): New compiler macro.
-       (last, coerce, subseq): Remove compiler macros for those built-in
-       or unused functions.
-
-2002-06-17  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * 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.
-
-2002-06-16  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * 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\e,Ax\e(Brn Mork <bmork@dod.no>.
-
-2002-06-16  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-cache.el (gnus-cache-remove-article): n is &optional.  From
-       Reiner Steib <4uce.02.r.steib@gmx.net>.
-
-2002-06-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnheader.el (nnheader-file-name-translation-alist): Set the
-       default value for MS Windows systems.
-
-       * gnus-ems.el (nnheader-file-name-translation-alist): Removed.
-
-2002-06-14  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-beginning-of-line): Keep the region active
-       in XEmacs.  Suggested by TAKAHASHI Kaoru <kaoru@kaisei.org>.
-
-2002-06-13  Josh Huber  <huber@alum.wpi.edu>
-
-       * gnus-msg.el (gnus-summary-followup): Use g-s-handle-replysign.
-       * gnus-msg.el (gnus-summary-reply): Ditto.
-       * gnus-msg.el (gnus-summary-handle-replysign): New.
-
-2002-06-12  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-send-mail-with-sendmail): Kill errbuf even
-       if sending failed.
-
-2002-06-11  Josh Huber  <huber@alum.wpi.edu>
-
-       * gnus-start.el (gnus-dribble-enter): Don't call set-window-point anymore
-       * mml2015.el (mml2015-mailcrypt-encrypt): Accept optional argument
-       to sign while encrypting.
-
-2002-06-11  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-int.el (gnus-request-move-article): Agent expire article if
-       successfuly moved.
-
-       * nnweb.el (nnweb-google-create-mapping): Honors the value of
-       nnweb-max-hits.  From Niklas Morberg <niklas.morberg@axis.com>.
-
-2002-06-10  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-int.el (gnus-request-expire-articles): Fix last change?
-
-2002-06-09  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-delete-article): Don't agent expire here.
-
-       * gnus-int.el (gnus-request-expire-articles): Do it here instead.
-
-2002-06-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * flow-fill.el (fill-flowed): Ignore errors.
-
-2002-06-06  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-send-mail-with-sendmail): Improve error message.
-
-2002-06-06  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-interactive): Change default from nil to t.
-       Better to be safe than to be fast.
-
-2002-06-05  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-send-mail-with-sendmail): Check return value
-       from call-process-region.
-
-2002-06-04  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-msg.el (gnus-group-mail, gnus-group-news)
-       (gnus-group-post-news, gnus-summary-mail-other-window)
-       (gnus-summary-news-other-window, gnus-summary-post-news): Bind
-       gnus-article-copy to nil, thereby inhibiting the `header' posting
-       style match to use data from last viewed article.
-       Suggested by Hrvoje Niksic.
-
-2002-06-04  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * spam.el (spam-point-at-eol): New alias.
-       (spam-parse-whitelist): Use it.
-
-2002-06-03  Simon Josefsson  <jas@extundo.com>
-
-       * nnmail.el (nnmail-mail-splitting-decodes): New variable.
-       (nnmail-article-group): Use it.
-
-2002-05-30  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-msg.el (gnus-inews-yank-articles): Merge split header lines
-       so that code reading them won't be surprised.  From Jesper Harder
-       <harder@ifa.au.dk>.
-
-2002-05-29  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-delete-article): Agent expire deleted
-       articles.
-
-       * gnus.el (gnus-agent-cache): Doc fix.
-       (gnus-agent): Change default to t.
-
-       * gnus-agent.el (gnus-agent-expire): Make it accept optional
-       ARTICLES, GROUP and FORCE parameters.
-
-2002-05-28  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-group-line-format): Doc fix.
-
-2002-05-28  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-msg.el (gnus-inews-yank-articles): Unfold headers of
-       original article before yanking.  From Jesper Harder
-       <harder@ifa.au.dk>.
-
-2002-05-26  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-menu-split): New function.
-       (gnus-summary-make-menu-bar): Split charset submenu.
-       (gnus-summary-menu-maxlen): New variable.
-       (gnus-summary-menu-split): Use it.
-
-2002-05-25  Simon Josefsson  <jas@extundo.com>
-
-       * mml.el (mml-preview): Generate some headers.
-
-       * gnus.el (gnus-large-newsgroup): Fix :type.
-
-       * nnimap.el (nnimap-nov-is-evil): Change default to t (because the
-       Agent cache NOV's by default now).
-       (nnimap-nov-is-evil): Make it default to `gnus-agent' instead.
-
-2002-05-18  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-dependencies-add-header): Avoid one unecessary
-       call to gnus-parent-id when we check for References loops.
-       (gnus-summary-prepare-threads): Avoid simplifying every Subject
-       twice by saving the simplified subject string in simp-subject.
-
-2002-05-23  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo.  Trivial
-       change from Benjamin Rutt <rutt+news@cis.ohio-state.edu>.
-
-       * nnweb.el (nnweb-type): Remove dejanewsold.  Trivial change from
-       Niklas Morberg <niklas.morberg@axis.com>.
-
-2002-05-22  Simon Josefsson  <jas@extundo.com>
-
-       * sieve.el (sieve-change-region): Define it before it is used.
-
-       * 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
-       <rutt+news@cis.ohio-state.edu>.
-
-       * nnimap.el (nnimap-nov-is-evil): Improve doc.
-
-2002-05-21  Simon Josefsson  <jas@extundo.com>
-
-       * sieve-mode.el (sieve-manage): Fix autoloads.
-
-       * sieve-manage.el (sieve-manage-cram-md5-auth): Just send the SASL
-       name (makes it work with recent Cyrus timsieved).
-
-2002-05-20  Jason  <jbaker@cs.utah.edu>
-       Trivial patch.
-
-       * gnus-art.el (gnus-request-article-this-buffer): Try
-       reconnecting if you don't get the message.
-
-2002-05-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-enter-digest-group): Only get
-       Reply-To headers from the headers.
-
-2002-05-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-url.el (mm-url-insert): Remove junk message.
-
-2002-05-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnslashdot.el (nnslashdot-request-list): Parse new html.
-       (nnslashdot-use-front-page): New variable.
-       (nnslashdot-request-list): Use it.
-
-       * mm-url.el (mm-url-timeout): New variable.
-       (mm-url-retries): Ditto.
-       (mm-url-insert): Use it.
-
-2002-05-16  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-simplify-all-whitespace): New function.
-       (gnus-simplify-subject-functions): Mention g-s-a-w.
-
-2002-05-15  Josh Huber  <huber@alum.wpi.edu>
-
-       * nnbabyl.el (nnbabyl-request-accept-article): Pass group to
-       nnmail-cache-insert.
-       * nndiary.el (nndiary-request-accept-article): Ditto.
-       * nnfolder.el (nnfolder-request-accept-article): Ditto.
-       * nnimap.el (nnimap-request-accept-article): Ditto.
-       * nnmail.el (nnmail-process-unix-mail-format): Ditto.
-       * nnmail.el (nnmail-check-duplication): Ditto. (from gnus-art)
-       * nnmbox.el (nnmbox-request-accept-article): Ditto.
-       * nnmh.el (nnmh-request-accept-article): Ditto.
-       * nnmail.el (nnmail-cache-insert): Change group to required,
-       removed code which tried to figure out the group.
-
-2002-05-13  Josh Huber  <huber@alum.wpi.edu>
-
-       * mml.el (mml-generate-mime-1): Fix mml generation for signed only
-       messages. From Hans de Graaff <hans@degraaff.org>.
-       * nnml.el (nnml-request-accept-article): Pass in the group name to
-       nnmail-cache-insert, since it's available.
-
-2002-05-10  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nndoc.el (nndoc-mime-digest-type-p): Set proper file-end.
-
-2002-05-08  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Florian Weimer <fw@deneb.enyo.de>.
-
-       * gnus.el (subscribed): New group parameter.
-       (gnus-find-subscribed-addresses): Use it.
-
-2002-05-08  Josh Huber  <huber@alum.wpi.edu>
-
-       * mml-sec.el (mml-signencrypt-style-alist): Rename.  Also, changed
-       the default for pgpmime to support pgp v2.
-       * mml-sec.el (mml-signencrypt-style): New accessor function to
-       allow users to get/set the signencrypt style more easily without
-       frobbing the alist directly.
-       * mml.el (mml-generate-mime-1): Use accessor function.
-
-2002-05-08  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-art.el (gnus-article-mode-syntax-table): Specify matching
-       parenthesis for "<" and ">".  Suggested by Andreas Schwab
-       <schwab@suse.de>.
-
-2002-05-07  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * nnmail.el (nnmail-cache-insert): Prefer group-art over group
-       when intuiting the group the message is written to.  From Josh
-       Huber <huber@alum.wpi.edu>.
-
-2002-05-06  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-topic.el (gnus-group-topic-parameters): Work when group
-       buffer doesn't show group.  From Matt Armstrong <matt@lickey.com>.
-
-2002-05-06  Josh Huber  <huber@alum.wpi.edu>
-
-       * mml2015.el (mml2015-gpg-encrypt): Changed name of optional
-       argument, and fixed compiler warning. (added autoload for
-       gpg-encrypt).
-
-2002-05-04  Simon Josefsson  <jas@extundo.com>
-
-       * mml1991.el (mml1991-function-alist): Doc fix.
-
-       * mml.el (mml-preview): Bind gnus-newsrc-hashtb temporarily if it
-       doesn't exist (for previewing messages without having Gnus
-       started).
-
-       * mm-util.el (mm-coding-system-priorities): Defcustom.
-
-       * mm-encode.el (mm-content-transfer-encoding-defaults): Defcustom.
-
-2002-05-01  Josh Huber  <huber@alum.wpi.edu>
-
-       * gnus-msg.el (gnus-message-replysignencrypted): enabled by
-       default.
-       * mml-sec.el:
-       * mml-sec.el (mml-signencrypt-style): New.
-       * mml-sec.el (mml-pgpmime-encrypt-buffer): Accept optional
-       argument `sign'.
-       * mml-sec.el (mml-secure-message-encrypt-pgp): Changed default to
-       signencrypt.
-       * mml-sec.el (mml-secure-message-encrypt-pgpmime): Ditto.
-       * mml.el (mml-generate-mime-1): Changed logic so a part which is
-       both signed & encryped is processed in one operation. (rather than
-       two separate ops: sign, then encrypt)
-       * mml2015.el (mml2015-gpg-extract-signature-details): Give some
-       indication if a message is signed by an expired key.
-       * mml2015.el (mml2015-gpg-encrypt): Accept optional argument which
-       enables combined sign & encrypt operation. (this was always on
-       before).
-       * mml2015.el (mml2015-encrypt): Accept optional argument `sign'.
-
-2002-05-01  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-retrieve-groups): Use separate data for each
-       server.
-       (nnimap-mailbox-info): defvar instead of defvoo.
-
-2002-05-01 20:09:21 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.06 is released.
-
-2002-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * lpath.el: Bind url-package-version.
-
-2002-05-01  Simon Josefsson  <jas@extundo.com>
-
-       * nnfolder.el (nnfolder-request-delete-group): Figure out nov/mrk
-       filename before deleting the group itself, because the presence of
-       a group filename decides if long filenames are used or not.
-
-       * gnus-art.el (gnus-button-alist): Don't inline
-       gnus-button-url-regexp.  This makes it possible to change g-b-u-r
-       without also modifying g-button-alist.
-       (gnus-button-alist): Fix type to allow variable as well as regexp.
-       (gnus-article-add-buttons): Evaluate regexp.  Strings evaluate to
-       themselves, variables to its contents.
-       (gnus-button-entry): Ditto.
-
-2002-05-01  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-parse-resp-text-code, imap-parse-status): Treat
-       UIDNEXT as a string.
-
-       * nnimap.el (nnimap-string-lessp-numerical): New function.
-       (nnimap-retrieve-groups): Compare UIDNEXT as strings instead of
-       integers.
-
-2002-04-29  Simon Josefsson  <jas@extundo.com>
-
-       * nnmail.el (nnmail-cache-insert): Accept optional group
-       parameter.
-
-       * nnimap.el (nnimap-retrieve-groups): Don't send STATUS when
-       n-r-g-a is disabled.
-
-2002-04-29  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-split-fancy): Fix doc.
-       (nnimap-split-fancy): Fix doc.
-
-       * nnimap.el (nnimap-retrieve-groups-asynchronous): New variable.
-       (nnimap-mailbox-info): New internal variable.
-       (nnimap-retrieve-groups): Implement faster new mail check.
-
-       * nnimap.el (nnimap-split-articles): Support
-       nnmail-cache-accepted-message-ids.
-       (nnimap-request-accept-article): Ditto.
-
-       * imap.el (imap-mailbox-status-asynch): New command.
-
-2002-04-29  Nevin Kapur  <nevin@jhu.edu>
-
-       * gnus.el (gnus-find-subscribed-addresses): Return nil when there
-       are no subscribed mail groups.
-       - Strip quoted names when comparing addresses
-
-2002-04-28  Jesper Harder  <harder@ifa.au.dk>
-
-       * mm-decode.el (mm-text-html-renderer): Change customize type to
-       const.
-
-       * gnus-msg.el (gnus-discouraged-post-methods): Fix typo.
-       (gnus-debug-exclude-variables): do.
-
-2002-04-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-article-mail): Use gnus-msg-mail instead.
-       Trivial change from Karl Pfl\e,Ad\e(Bsterer <sigurd@12move.de>.
-
-2002-04-27  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * dns.el (dns-make-network-process): New macro.
-       (query-dns): Use it.
-
-2002-04-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-summary-reply): Remove unbound variable
-       article-buffer.
-
-       * mm-url.el (mm-url-package-name): New variable.
-       (mm-url-package-version): New variable.
-       (mm-url-insert-file-contents): Bind url-package-name and
-       url-package-version here.
-       * nnrss.el (nnrss-insert-w3): Move the bindings.
-
-       * nnrss.el (nnrss-insert-w3): Bind url-package-name and
-       url-package-version. Trivial change from Andrew J Cosgriff
-       <ajc@polydistortion.net>
-
-       * mm-decode.el (mm-save-part): Fill in file name when GUI saving
-       attachments. Trivial change from Peter 'Luna' Runestig
-       <peter@runestig.com>.
-
-2002-04-19  Jesper Harder  <harder@ifa.au.dk>
-
-       * nnkiboze.el (nnkiboze-request-scan): Call
-       nnkiboze-possibly-change-group.
-       (nnkiboze-generate-group): Use mm-with-unibyte to avoid encoding
-       problems.
-       (nnkiboze-generate-group): Set newsrc to the *highest* article
-       number kibozed, not the lowest.
-
-2002-04-15  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-art.el (article-unsplit-urls): Allow trailing SPC.
-
-2002-04-24  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Dan Christensen <jdc+news@uwo.ca>.
-
-       * nndoc.el (nndoc-type-alist, nndoc-lanl-gov-announce-type-p)
-       (nndoc-transform-lanl-gov-announce, nndoc-generate-lanl-gov-head):
-       Recognize math postings.  Extract Date (now ignores "(15kb)").
-       Extract email address using gnus-extract-address-components
-       instead of just taking the first word.  Create Date and From
-       headers for message which are missing these headers.  Get rid
-       of spurious \\ lines (purely cosmetic).  Extend body-end and
-       file-end regexps, to exclude more garbage from the message.
-       Make URL rephrasing regexp more flexible, to match current
-       format.
-
-2002-04-23  Simon Josefsson  <jas@extundo.com>
-
-       * netrc.el: New file, functions copied from gnus-util.el by Ted
-       Zlatanov <tzz@lifelogs.com>.
-
-       * gnus-util.el: Require netrc.
-       (gnus-netrc-get, gnus-netrc-machine, gnus-parse-netrc): Aliased to
-       new code in netrc.el.
-
-2002-04-23  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-msg.el (gnus-summary-resend-message-edit): Remove
-       message-ignored-resent-headers, too.  From Matthieu Moy
-       <Matthieu.Moy@imag.fr>.
-
-2002-04-22  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.umu.se>
-
-       * gnus-srvr.el (gnus-server-browse-in-group-buffer): it is a
-       boolean not a string
-       * gnus-group.el (gnus-group-line-format): add description of %C
-       * gnus-group.el (gnus-group-line-format-alist): add gnus-tmp-comment
-         as %C
-       * gnus-group.el (gnus-group-insert-group-line): add gnus-tmp-comment
-
-2002-04-22  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-request-scan): typo: set
-       nnmaildir-get-new-mail, not nnmaildir-new-mail.  Don't call
-       nnmail-get-new-mail for 'find-new-groups.
-
-2002-04-21  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-request-update-info,
-       nnmaildir-request-group, nnmaildir-retrieve-groups): remove
-       unnecessary calls to nnmaildir-request-scan.
-
-2002-04-20  Josh Huber  <huber@alum.wpi.edu>
-
-       * gnus-msg.el:
-       * gnus-msg.el (gnus-message-replysign): New.
-       * gnus-msg.el (gnus-message-replyencrypt): New.
-       * gnus-msg.el (gnus-message-replysignencrypted): New.
-       * gnus-msg.el (gnus-summary-reply): Use the three new variables
-       (above) to automatically encrypt/sign to encrypted/signed
-       messages.
-       * message.el:
-       * message.el (message-mode-map): Add keybinding for
-       `message-to-list-only'
-       * message.el (message-mode): Add description for
-       `message-to-list-only'
-       * message.el (message-to-list-only): New.
-       * message.el (message-make-mft): Changed to use the cl loop macro,
-       and added optional flag to return only the matched list. (for use
-       in new message-to-list-only function)
-
-2002-04-20  Josh Huber  <huber@alum.wpi.edu>
-
-       * gnus-msg.el:
-       * gnus-msg.el (gnus-message-replysign):
-       * gnus-msg.el (gnus-replysign): New.
-       * gnus-msg.el (gnus-replyencrypt): New.
-       * gnus-msg.el (gnus-replysignencrypted): New.
-       * gnus-msg.el (gnus-summary-reply):
-       * message.el:
-       * message.el (message-mode-map):
-       * message.el (message-mode):
-       * message.el (message-to-list-only): New.
-       * message.el (message-make-mft):
-
-2002-04-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-win.el (gnus-configure-windows-hook): Fix typo.
-
-2002-04-18  Josh Huber  <huber@alum.wpi.edu>
-
-       * 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\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Ted Zlatanov <teodor.zlatanov@divine.com>.
-
-       * spam.el (spam-whitelist, spam-blacklist, spam-enter-whitelist):
-       Improve docstring.
-       (spam-enter-blacklist): New command.
-
-       * gnus-sum.el (gnus-spam-mark): New mark.
-       (gnus-auto-expirable-marks): Add gnus-spam-mark.
-       (gnus-summary-make-tool-bar): Correct conditional.
-       (gnus-summary-limit-to-unread): Add gnus-spam-mark.
-       (gnus-summary-mark-as-spam): New command.
-
-2002-04-13  Josh Huber  <huber@alum.wpi.edu>
-
-       * mml-sec.el (mml-secure-message): changed to support arbritrary
-       modes.
-       * mml-sec.el (mml-secure-message-encrypt-(smime|pgp|pgpmime)):
-       changed to support "signencrypt" mode.
-       * mml.el (mml-parse-1): changed to support different secure modes
-       more easily. (for signencrypt)
-
-2002-04-11  Stefan Monnier  <monnier@cs.yale.edu>
-
-       * gnus-sum.el (gnus-update-summary-mark-positions)
-       (gnus-summary-toggle-header):
-       * gnus-uu.el (gnus-uu-binhex-article, gnus-uu-reginize-string)
-       (gnus-uu-expand-numbers, gnus-uu-post-make-mime)
-       (gnus-uu-post-encoded):
-       * nnfolder.el (nnfolder-possibly-change-group):
-       * nnimap.el (nnimap-retrieve-headers):
-       * nnmbox.el (nnmbox-create-mbox): Don't assume point-min == 1.
-
-2002-04-08  Stefan Monnier  <monnier@cs.yale.edu>
-
-       * nnml.el (nnml-save-nov, nnml-generate-nov-file):
-       * pop3.el (pop3-md5): Don't hardcode point-min == 1.
-
-2002-04-12  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-srvr.el (gnus-server-set-info): Clear
-       `gnus-server-method-cache' when `gnus-server-alist' is changed.
-       From Daiki Ueno <ueno@unixuser.org>.
-
-2002-04-11  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Force
-       viewing of security buttons.  Thanks to Nicolas Kowalski
-       <Nicolas.Kowalski@imag.fr>.
-
-       * smime.el (smime-CA-directory): Fix doc.  Thanks to Arne
-       J\e,Ax\e(Brgensen <arne+usenet@daimi.au.dk>.
-       (smime-sign-buffer): Work in XEmacs.  Thanks to Nicolas Kowalski
-       <Nicolas.Kowalski@imag.fr>.
-       (smime-decrypt-buffer): Ditto.
-
-2002-04-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-prepare): Place point on the emtpy
-       header line.
-
-2002-04-11  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus.el (gnus-refer-article-method): Change `dejanews' to `google'.
-
-2002-04-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-delete-marked-with): Fix typo.
-
-2002-04-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-text-html-render-with-w3): Don't ignore
-       errors when debug.
-
-2002-04-07  Josh Huber  <huber@alum.wpi.edu>
-
-       * message.el (message-make-mft): Changed MFT code from using
-       message-recipients (which included Bcc) to use only the To and CC
-       headers.
-
-2002-04-05  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-art.el (gnus-treat-from-picon): Add to gnus-picon group and
-       add link.
-       (gnus-treat-mail-picon): Ditto.
-       (gnus-treat-newsgroups-picon): Ditto.
-       (gnus-picon-databases): Fix custom type.
-       (gnus-picon-databases): Add link.
-       (gnus-article-x-face-command): Add to gnus-picon group.
-
-2002-04-01  Jesper Harder  <harder@ifa.au.dk>
-
-       * message.el (message-buffer-naming-style): Remove.
-
-2002-04-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-make-tool-bar): Load tool-bar first.
-
-       * message.el (message-tool-bar-map): Ditto.
-
-       * gnus-sum.el (gnus-summary-make-tool-bar): Ditto.
-
-2002-04-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnwarchive.el (nnwarchive-mail-archive-article): Fix typo.
-
-2002-04-01  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el: fixed some buggy invocations of nnmaildir--pgname.
-
-2002-03-31  Andrew Cohen  <cohen@andy.bu.edu>
-       Trivial patch.
-
-       * dns.el: open-network-stream under XEmacs does udp.
-
-2002-03-31  Lars Magne Ingebrigtsen  <larsi@quimbies.gnus.org>
-
-       * spam.el (spam-enter-whitelist): New function.
-       (spam-parse-whitelist): Ditto.
-       (spam-refresh-list-cache): Ditto.
-       (spam-address-whitelisted-p): New function.
-
-       * dns.el (query-dns): Use TCP when make-network-process isn't
-       available.
-       (dns-servers): New variable.
-       (dns-parse-resolv-conf): New function.
-       (query-dns): Use it.
-
-       * spam.el: New file.
-
-       * dns.el (query-dns): Test.
-
-2002-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * lpath.el (featurep): Bind make-network-process.
-
-2002-03-31  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el: Use defstruct.  Use a single copy of
-       nnmail-extra-headers to save memory.  Store server's group name
-       prefix instead of each group's prefixed name.
-       * nnnil.el (nnnil-retrieve-headers, nnnil-request-list): Erase
-       nntp-server-buffer.
-
-2002-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * dns.el: New file.
-
-2002-03-28  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-dummy-line-format):
-       * gnus.el (gnus-summary-line-format): Fixing links to Info.
-       Trivial change from Bj\e,Av\e(Brn Torkelsson <torkel@pdc.kth.se>.
-
-2002-03-29  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-sum.el (gnus-summary-move-article)
-       (gnus-summary-copy-article): Mention `gnus-move-split-methods' in
-       the doc string.
-
-2002-03-28  Simon Josefsson  <jas@extundo.com>
-
-       * mml-sec.el (mml-secure-message): Search after
-       mail-header-separator from top of message.
-
-2002-03-28  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el: Cosmetic changes.
-       (nnmaildir--with-nntp-buffer, nnmaildir--with-work-buffer,
-       nnmaildir--with-nov-buffer, nnmaildir--with-move-buffer,
-       nnmaildir--group-ls): New macros/functions.  Use them.
-       (nnmaildir--unlink): Evalutate argument only once.
-
-2002-03-27  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-sum.el (gnus-summary-highlight): Use `eq' when comparing
-       symbols.
-       (gnus-summary-highlight-line): Use `gnus-point-at-bol' and
-       `gnus-point-at-eol'.
-
-2002-03-27  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir--subdir, nnmaildir--nov-dir,
-       nnmaildir--marks-dir): New macros.  Use them.
-       Use inhibit-quit for atomicity instead of in-memory journaling.
-       (nnmaildir--edit-prep): New function.
-       (Local Variables): Use it.
-
-2002-03-26  Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk)
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Fix typo.
-
-2002-03-25  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-mode): Fix doc.
-
-2002-03-25  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-subject-re-regexp): Skip Re[42]: junk.  From
-       Matthieu Moy <Matthieu.Moy@imag.fr>.
-
-2002-03-24  Jesper Harder  <harder@ifa.au.dk>
-
-       * mml-sec.el (mml-unsecure-message): Add docstring.
-
-2002-03-23  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmail.el (nnmail-large-newsgroup): Fix doc, allow non-numeric
-       value.
-       Trivial change from andre@slamdunknetworks.com
-
-2002-03-22  Josh Huber  <huber@alum.wpi.edu>
-
-       * mml.el (mml-mode-map): Added a keybinding for
-       `mml-unsecure-message'.  Also, added a menu entry for said
-       function in the Attachments menu.
-
-2002-03-22  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * canlock.el (canlock-version): Remove.
-       (canlock-sha1-with-openssl): Don't use `canlock-string-as-unibyte'
-       here; simplify \x insertions.
-       (canlock-sha1): New function, always return a unibyte string.
-       (canlock-make-cancel-key): Use `canlock-sha1'; simplify truncation
-       of a password.
-       (canlock-insert-header): Use `canlock-sha1'.
-       (canlock-verify): Ditto.
-
-2002-03-21  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-fix-before-sending): Add an option that
-       ignores illegible text.
-       Trivial change from Mark Milhollan <mlm@attglobal.net>
-
-       * message.el (message-font-lock-keywords): Support multi-line MML
-       tags.
-
-       * gnus-sum.el (gnus-print-buffer): Remove gnus-decoration.
-       Trivial change from lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Aa\e(Broly)
-
-2002-03-20  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Use intern'ed function
-       symbols for "View as different encoding" submenu.
-
-2002-03-19  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Add "View as different
-       encoding" submenu.
-
-2002-03-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-process-prefix): Make sure there is a mark.
-
-2002-03-19  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-sum.el (gnus-sum-thread-tree-root)
-       (gnus-sum-thread-tree-single-indent)
-       (gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent)
-       (gnus-sum-thread-tree-leaf-with-other)
-       (gnus-sum-thread-tree-single-leaf): Make customizable.
-
-2002-03-16  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-util.el (gnus-extract-address-components): Don't break on
-       names such as James "Kibo" Parry.  From Francis Litterio
-       <franl@world.std.com>.
-
-2002-03-13  Simon Josefsson  <jas@extundo.com>
-
-       * pop3.el (pop3-open-server): Revert multibyte change.  From
-       Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk).
-
-       * message.el (message-send-mail-with-qmail): Make it work.  From
-       Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk).
-
-2002-03-13  Josh Huber  <huber@alum.wpi.edu>
-
-       * 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  <jas@extundo.com>
-
-       * message.el (message-qmail-inject-args): May be function.
-       (message-send-mail-with-qmail): Call function if m-q-i-a is
-       function.  From fn@hungry.org (Faried Nawaz).
-
-2002-03-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-abbrevs-loaded): Remove.
-       (mailabbrev): Require it.
-
-       * nnslashdot.el (nnslashdot-request-article): Remove IFRAME.
-
-2002-03-12  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * pop3.el (pop3-open-server): Set process buffer unibyte.
-
-2002-03-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el (gnus-subscribe-to-mailing-list): New function.
-
-2002-03-10  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnslashdot.el (nnslashdot-request-article): Remove javascript
-       too.
-
-2002-03-09  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * 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 andre@slamdunknetworks.com
-
-2002-03-09  Paul Jarc  <prj@po.cwru.edu>
-
-       * gnus-start.el (gnus-auto-subscribed-groups): Include nnmaildir.
-
-2002-03-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * 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 <Matthieu.Moy@imag.fr>
-
-       * message.el (message-add-action): Use add-to-list.
-       (message-delete-action): New function.
-
-       * nndoc.el (nndoc-mail-in-mail-type-p): Break a long regexp into
-       pieces.
-
-2002-03-05  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnnil.el: New file.
-       * gnus.el (gnus-valid-select-methods): Include nnnil.
-
-2002-03-05  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-syntax-checks): Because canlock is
-       supported, we disable sender syntax check.
-       (message-shoot-gnksa-feet): Add cancel-messages option doc.
-
-       * gnus-draft.el (gnus-draft-send): If interactive, use its default
-       value of message-syntax-checks.
-
-       * qp.el (quoted-printable-decode-region): Doc addition.
-       From: Eli Zaretskii <eliz@is.elta.co.il>
-
-       * mail-source.el (make-source-make-complex-temp-name): Use
-       make-temp-file.
-
-       * mm-util.el (mm-make-temp-file): New function.
-       * nneething.el (nneething-file-name): Use it.
-       * mml-smime.el (mml-smime-encrypt): Ditto.
-       * mm-view.el (mm-inline-wash-with-file): Ditto.
-       * mm-decode.el (mm-display-external, mm-create-image-xemacs): Ditto.
-       * gnus-uu.el (gnus-uu-decode-binhex, gnus-uu-decode-binhex-view)
-       (gnus-uu-digest-mail-forward, gnus-uu-initialize): Ditto.
-       * gnus-start.el (gnus-slave-save-newsrc): Ditto.
-       * gnus-fun.el (gnus-convert-image-to-gray-x-face): Ditto.
-       * gnus-art.el (gnus-mime-print-part): Ditto.
-
-2002-03-04  Paul Jarc  <prj@po.cwru.edu>
-
-       * message.el (nnmaildir-article-number-to-base-name): New
-       function.
-       (nnmaildir-base-name-to-article-number): New function.
-
-2002-03-04  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * smime.el (smime-make-temp-file): Don't quote
-       `temporary-file-directory'.
-
-2002-03-04  Simon Josefsson  <jas@extundo.com>
-
-       * smime.el (smime-sign-region): Rename argument keyfiles to
-       keyfile. You only sign something with one key.
-       (smime-sign-buffer): Better completing-read prompt.
-       (smime-decrypt-buffer): Ditto.
-
-       * smime.el (smime-make-temp-file): Make it work under XEmacs.
-
-       * mm-view.el (mm-view-pkcs7-decrypt): Better prompt for
-       completing-read.
-       (mm-view-pkcs7-decrypt): CRLF->LF.
-
-2002-03-04  Paul Jarc  <prj@po.cwru.edu>
-
-       * message.el (message-hierarchical-addresses): New variable.
-       (message-get-reply-headers): Use it.
-       From Ted Zlatanov <teodor.zlatanov@divine.com>
-
-2002-03-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-mode): If buffer-file-name, don't set auto
-       save file name.
-       Trivial change from Geoff Greene <ggreene@wpi.edu>
-
-2002-03-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-multiple-choice): Use message. XEmacs only
-       takes one argument in read-char.
-
-       * message.el (message-fix-before-sending): Forward a char.
-       Check mmu-multibyte-p, add control-1.
-
-2002-03-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-read-init-file): Ditto.
-
-       * gnus-agent.el (gnus-agent-fetch-session): Ditto.
-
-       * dgnushack.el (dgnushack-make-load): Ditto.
-
-       * mail-source.el (mail-source-fetch): Extract the right error
-       code.
-
-       * message.el (message-fix-before-sending): Check illegible text.
-
-       * gnus-util.el (gnus-multiple-choice): New function.
-
-       * gnus-kill.el (gnus-score-insert-help): Removed, because it is
-       also defined in gnus-score.el.
-
-2002-03-01  Paul Jarc  <prj@po.cwru.edu>
-
-       * message.el (message-get-reply-headers): downcase email addresses
-       for comaparisons for duplicate removal.
-
-2002-03-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-view-pkcs7-verify): New function. A bogus
-       implementation of PKCS#7, which just allows users read the
-       message.
-       (mm-view-pkcs7): Use it.
-
-2002-02-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (large-newsgroup-initial): New parameter.
-
-       * gnus-sum.el (gnus-articles-to-read): Use large-newsgroup-initial.
-       (gnus-summary-insert-old-articles): Ditto.
-
-2002-02-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * 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 <tsuchiya@namazu.org>
-
-       * nnagent.el (nnagent-retrieve-headers): Remove articles with
-       small numbers.
-
-2002-02-24  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * deuglify.el: Fix comments.
-
-2002-02-23  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * html2text.el (html2text-clean-anchor): If there is no HREF,
-       insert nothing.
-
-       * mml.el (mml-generate-mime-1): Add cdr.
-       From: andre@slamdunknetworks.com
-
-       * mm-view.el (mm-text-html-renderer-alist): Add html2text.
-       (mm-text-html-washer-alist): Ditto.
-
-       * mm-decode.el (mm-text-html-renderer): Add html2text.
-
-       * html2text.el: Face lift.
-
-       * html2text.el: New file from Joakim Hove <hove@phys.ntnu.no>.
-
-2002-02-22  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el: Add gnus-article-outlook-deuglify-article.
-
-       * 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 <rscholz@zonix.de>.
-
-       * mm-decode.el (mm-display-external): Use
-       mm-file-name-rewrite-functions.  From <andre@slamdunknetworks.com>
-
-2002-02-22  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-request-list): Report the highest
-       article number, not the total number of articles.
-
-2002-02-21  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el: Move uu key map here.
-       (gnus-summary-make-menu-bar): Add gnus-summary-save-parts.
-
-2002-02-21  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-request-expire-articles): Use
-       nnmail-expiry-wait* if expire-age parameter is not set.
-
-2002-02-21  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-sort-groups-by-real-name): New
-       function.
-       (gnus-group-sort-selected-groups-by-real-name): New function.
-       (gnus-group-make-menu-bar): Add sort by real name.
-
-       * gnus-sum.el (gnus-dependencies-add-header): If replaced, don't
-       rebuild.
-       (gnus-summary-edit-article-done): Gnus-get-newsgroup-headers takes
-       nil as dependencies as well.
-
-2002-02-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nndoc.el (nndoc-dissect-mime-parts-sub): Fix MIME-Version header
-       for mime-parts.
-
-       * gnus-art.el (gnus-article-edit-done): Widen the buffer.
-
-       * gnus-group.el (gnus-group-name-decode): Don't test
-       multibyte-string, because it breaks XEmacs.
-       From: TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp>
-
-       * message.el (message-send-mail): Be talkative.
-
-       * mm-decode.el (mm-inlined-types): Add application/x-emacs-lisp.
-       (mm-automatic-display): Ditto.
-
-       * mailcap.el (mailcap-mime-data): Ditto.
-       From: Reiner Steib <4uce.02.r.steib@gmx.net>
-
-2002-02-20  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * many files: Remove trailing whitespaces, replace spc+tab with
-       tab, replace leading whitespaces with tabs.
-
-2002-02-19  Paul Jarc  <prj@po.cwru.edu>
-
-       * gnus-sum.el (gnus-summary-toggle-header): Fix handling of
-       articles with no body and no blank line after the header.
-
-2002-02-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-dissect-multipart): Consider the case of empty
-       parts.
-
-       * ietf-drums.el (ietf-drums-syntax-table): Modify syntax of
-       non-ascii chars.
-
-       * rfc2231.el (rfc2231-parse-string): Support non-ascii chars.
-
-       * gnus-art.el (gnus-article-wash-html-with-w3): Remove
-       w3-delay-image-loads.
-       * mm-view.el (mm-inline-text-html-render-with-w3): Ditto.
-       (mm-w3-prepare-buffer): Ditto.
-
-       * mail-source.el (mail-source-fetch-directory): Run scripts.
-
-2002-02-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el (gnus-respond-to-confirmation): Do the right thing
-       for Majordomo confirmations.
-
-2002-02-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el (gnus-respond-to-confirmation): New command.
-
-2002-02-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnultimate.el (nnultimate-retrieve-headers): Clean up.
-
-2002-02-18  Paul Jarc  <prj@po.cwru.edu>
-
-       * gnus-util.el (gnus-parent-id): Ignore trailing whitespace in the
-       References header field.  From Mark Thomas <mthomas@cmu.edu>.
-
-2002-02-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-render-with-file): With unibyte buffer.
-       (mm-inline-render-with-stdin): Ditto.
-       (mm-inline-render-with-function): Ditto.
-       (mm-inline-wash-with-file): Bind coding-system-for-write.
-       (mm-inline-wash-with-stdin): Ditto.
-
-2002-02-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       Suggested by Felix Natter <fnatter@gmx.net>
-
-       * gnus-art.el (gnus-mime-view-part-externally): Rename from
-       gnus-mime-externalize-view.
-       (gnus-mime-view-part-internally): Rename from
-       gnus-mime-internalize-view.
-       (gnus-article-view-part-externally): Rename from
-       gnus-article-externalize-part.
-       (gnus-mime-action-alist): Change correspondingly.
-       (gnus-mime-button-commands): Ditto.
-       (gnus-mime-action-alist): Remove duplication.
-
-       * gnus-sum.el (gnus-summary-mime-map): Change correspondingly.
-
-2002-02-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-dissect-buffer): Add loose-mime parameter.
-
-       * gnus-art.el (gnus-display-mime): Use it.
-
-       * mm-partial.el (mm-partial-find-parts): Use it.
-
-       * gnus-sum.el (gnus-article-loose-mime): Rename from
-       gnus-article-no-strict-mime.
-       (gnus-summary-save-parts): Use it.
-
-2002-02-18  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Remove unused
-       local variable.
-
-       * gnus-art.el (article-display-x-face): Don't sort multiple
-       X-Faces.
-
-2002-02-18  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Improved to speed
-       up.  Suggested by Yuuichi Teranishi <teranisi@gohome.org>.
-
-       * gnus-art.el (article-display-x-face): Sort gray X-Faces.
-
-2002-02-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       Some ideas is inspired by code from Hrvoje Niksic
-       <hniksic@arsdigita.com>
-
-       * gnus-art.el (gnus-article-wash-function): Set the default to
-       nil, so that we use mm-text-html-renderer instead.
-       (article-wash-html): Use mm-text-html-renderer.
-
-       * mm-decode.el (mm-inline-media-tests): Use mm-inline-text-*.
-       (mm-text-html-renderer): New variable.
-       (mm-inline-text-html-renderer): Set the default to nil, so that we
-       use mm-text-html-renderer instead.
-
-       * mm-view.el (mm-inline-text-html): New function.
-       (mm-text-html-renderer-alist): New variable.
-       (mm-inline-text-vcard): New function.
-       (mm-inline-text): Split.
-       (mm-links-remove-leading-blank): New function.
-       (mm-inline-render-with-file): New function.
-       (mm-inline-render-with-stdin): New function.
-       (mm-inline-render-with-function): New function.
-       (mm-text-html-washer-alist): New variable.
-       (mm-inline-wash-with-file): New function.
-       (mm-inline-wash-with-stdin): New function.
-
-2002-02-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message-utils.el: Fix installation doc.
-       From: Reiner Steib <4uce.02.r.steib@gmx.net>
-
-2002-02-16  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-discouraged-post-methods): New variable.
-       (gnus-post-method): Use it.
-       (gnus-summary-cancel-article): Find the correct post-method.
-
-       * gnus-soup.el (gnus-soup-send-packet): Via ... using ...
-       * message.el (message-send-news): Ditto.
-       Suggested by Lloyd Zusman <ljz@asfast.com> and IPmonger
-       <ipmonger@delamancha.org>
-
-       * gnus.el (gnus-select-method): Fix doc.
-       (gnus-server-string): Use 'using nntp'.
-
-       * gnus-agent.el (gnus-slave-unplugged): New command.
-       From: Felix Natter <fnatter@gmx.net>
-
-2002-02-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-edit-done): Kill-all-local-variables.
-       Call edit-done-function first, then change the window
-       configuration.
-       (gnus-article-edit-mode-map): Add message key bindings. Add menu.
-       (gnus-article-edit-mode): mml-mode.
-
-       * gnus-util.el (gnus-byte-compile): Work around a bug in XEmacs
-       21.4. Suggested by Russ Allbery <rra@stanford.edu> .
-
-       * message-utils.el: Adopt the file.
-
-       * message-utils.el: New file.
-       From Holger Schauer <Holger.Schauer@gmx.de>
-
-2002-02-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-move-article): Select-article only
-       when gnus-move-split-methods is non-nil. And we don't render or
-       mark the article.
-
-       * gnus-fun.el (gnus-shell-command-to-string): New function.
-       (gnus-shell-command-on-region): New function.
-       (gnus-random-x-face): Use them.
-       (gnus-x-face-from-file): Ditto.
-       (gnus-convert-image-to-gray-x-face): Ditto.
-       (gnus-convert-gray-x-face-to-xpm): Ditto.
-       (gnus-convert-image-to-x-face-command): Don't use 2>/dev/null.
-
-2002-02-14  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-treat-display-xface): Don't use
-       `shell-command-to-string' when compiling.
-       (gnus-treat-display-grey-xface): Ditto.
-
-2002-02-13  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir--article-count): If the group is
-       completely empty, report minimum article number as 1 instead of 0.
-
-2002-02-13  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-get-predicate): Use nconc.
-
-       * gnus-sum.el (gnus-summary-display-make-predicate): Use
-       gnus-summary-display-cache as cache.
-
-       * nndoc.el (nndoc-type-alist): Add mail-in-mail type.
-       (nndoc-mail-in-mail-type-p): New function.
-       (nndoc-mail-in-mail-article-begin): New function.
-
-2002-02-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mailcap.el (mailcap-mime-data): Use enriched-decode.
-
-       * gnus-cite.el (gnus-article-fill-cited-article): Bind
-       use-hard-newlines to nil.
-
-       * gnus-xmas.el (gnus-xmas-image-type-available-p): Assume that
-       image is not available if window-system is not available.
-
-       * gnus-sum.el (gnus-summary-display-make-predicate): Add unread.
-
-2002-02-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-article-unpropagated-mark-lists): Don't propagate
-       bookmark, because update-mark doesn't handle it correctly.
-
-2002-02-09  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-soup.el (gnus-soup-send-packet): Send news and mail
-       directly instead of calling message-send-mail.
-
-       * gnus-start.el (gnus-read-descriptions-file): Use
-       gnus-default-charset.
-
-       * mm-util.el (mm-guess-mime-charset): New function.
-
-       * gnus.el (gnus-default-charset): Use it.
-       (gnus-group-charset-alist): Remove .*, Let gnus-default-charset be
-       the default.
-
-2002-02-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-treat-display-grey-xface): New variable.
-       (article-display-x-face): Use it.  Disable grey xface, if
-       uncompface is not found.
-
-       * message.el (message-mode): Don't enable multibyte on an indirect
-       buffer.
-
-       * nnrss.el (nnrss-content-function): New variable.
-       (nnrss-request-article): Use it.
-
-2002-02-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el: Add article-unsplit-urls.
-       * gnus-sum.el: Ditto.
-       * gnus-art.el (gnus-treat-strip-cr): New variable.
-       (gnus-treatment-function-alist): Use it.
-       (article-unsplit-urls): New function.
-       (gnus-article-make-menu-bar): Use it.
-       From: Michael Cook <michael.cook@cisco.com>
-
-2002-02-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-braid-nov): Find the first article to
-       copy.
-
-2002-02-07  Paul Jarc  <prj@po.cwru.edu>
-
-       * gnus-util.el (gnus-split-references): Allow (broken) Message-IDs
-       with internal whitespace.
-       (gnus-parent-id): Ditto.
-
-2002-02-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-treat-body-boundary): Add
-       gnus-decoration property.
-       * gnus-msg.el (gnus-copy-article-buffer): Remove gnus-decoration.
-
-       * message.el (message-mode): Set local-abbrev-table.
-       From Matt Armstrong <matt@lickey.com>.
-
-       * gnus-art.el (gnus-article-treat-unfold-headers): Don't remove
-       too many spaces.
-
-       * rfc2047.el (rfc2047-unfold-region): Ditto.
-       (rfc2047-decode-region): Don't unfold. Let
-       gnus-article-treat-unfold-headers do it.
-
-       * gnus-sum.el (gnus-dependencies-add-header): Fix typo.
-       From: Jesper Harder <harder@ifa.au.dk>
-
-2002-02-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-posting-styles): Add x-face-file.
-       (gnus-configure-posting-styles): Use it.
-       (gnus-configure-posting-styles): Remove trailing newspaces.
-
-2002-02-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-articles-to-read): Fetch all if the predicate
-       is non-nil.
-
-       * mm-util.el (mm-use-find-coding-systems-region): Add doc.
-
-       * gnus.el (gnus-server-to-method): Switch position with
-       gnus-server-get-method.
-       (gnus-agent): Add doc.
-
-       * gnus-sum.el (gnus-article-no-strict-mime): New variable.
-       (gnus-summary-save-parts): Use it.
-
-       * gnus-art.el (gnus-display-mime): Use it.
-       * mm-partial.el (mm-partial-find-parts): Use it.
-
-       * 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\e,Av\e(Br <xsteve@riic.at>.
-
-       * nnagent.el (nnagent-request-expire-articles): Don't delete
-       files.
-
-2002-02-05  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-gen-unsubscribed-mft): New function.
-       From Sriram Karra <karra@cs.utah.edu>.
-
-       * gnus.el (gnus-article-unpropagated-mark-lists): Backslash the
-       open parenthesis.
-
-       * mm-view.el (mm-w3-prepare-buffer): Bind url-gateway-unplugged.
-       (mm-inline-text-html-render-with-w3): Ditto.
-       * gnus-art.el (gnus-article-wash-html-with-w3): Ditto.
-       Suggested by Dave Love  <d.love@dl.ac.uk>.
-
-       * mm-url.el (mm-url-load-url): Require w3-vars for old versions.
-
-       * nntp.el (nntp-send-command-and-decode): Check PROCESS.
-       * nntp.el (nntp-send-command): Ditto.
-       * nntp.el (nntp-send-command-nodelete): Ditto.
-
-2002-02-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-url.el (mm-url-load-url): New function.
-       (mm-url-insert-file-contents): Use it.
-
-       * gnus-msg.el (gnus-summary-mail-forward): Use gnus-article-charset.
-
-       * message.el (message-forward-make-body): Correctly copy
-       forward-buffer.
-
-       * rfc2047.el (rfc2047-decode-region): Don't decode us-ascii characters.
-
-2002-02-04  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-article-followup-with-original): Mark with
-       force, prevent errors when following up from article buffer.
-       (gnus-article-reply-with-original): Ditto.
-
-       * binhex.el (binhex-decoder-switches): Fix doc.  From
-       Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk).
-
-2002-02-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-treatment-function-alist): Move hide-citation,
-       highlight-citation after emphasize.
-
-2002-02-04  Simon Josefsson  <jas@extundo.com>
-
-       * nnfolder.el (nnfolder-open-marks):
-
-       * nnml.el (nnml-open-marks): Message when done.  From David
-       Edmondson <dme@sun.com>.
-
-2002-02-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * imap.el (imap-anonymous-auth): Fix typo.
-       From: Steinar Bang <sb@dod.no>
-
-       * gnus-cache.el (gnus-cache-braid-nov): Use set-buffer instead of
-       save-excursion.
-       (gnus-cache-braid-heads): Ditto.
-
-       * gnus-agent.el (gnus-agent-copy-nov-line): Move to the correct
-       line, because there are extra articles in the overview buffer.
-
-       * nntp.el (nntp-retrieve-groups): Check whether BUF is live.
-
-       * message.el (message-forward-rmail-make-body): Directly use
-       rmail-msg-restore-non-pruned-header to avoid calling
-       vertical-motion.
-
-2002-02-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-cache.el (gnus-summary-insert-cached-articles):
-       (gnus-summary-limit-include-cached): gnus-newsgroup-cached is sorted.
-
-       * gnus-group.el (gnus-group-mark-article-read): Nreverse
-       gnus-newsgroups-unselected.
-
-       * gnus-agent.el (gnus-summary-set-agent-mark): Use
-       gnus-add-to-sorted-list.
-
-       * gnus-sum.el (gnus-summary-update-info): gnus-newsgroup-unreads
-       gnus-newsgroup-unselected are sorted. Use gnus-sorted-union.
-       (gnus-build-all-threads): Use gnus-add-to-sorted-list.
-       (gnus-update-read-articles): UNREAD is sorted.
-       (gnus-newsgroup-unreads, gnus-newsgroup-unselected)
-       (gnus-newsgroup-marked, gnus-newsgroup-cached)
-       (gnus-newsgroup-expirable, gnus-newsgroup-downloadable)
-       (gnus-newsgroup-dormant): Require sorted.
-
-       * gnus-dired.el (gnus-dired-find-file-mailcap): Correctly handle
-       directories.
-       (gnus-dired-print): New function.
-
-       * gnus-art.el (gnus-mime-print-part): Add argument filename. Call
-       ps-despool.
-
-2002-02-02  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-dired.el (turn-on-gnus-dired-mode): Autoload.  Make defun.
-
-2002-02-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-1): Call gnus-agentize if gnus-agent is
-       t. This makes gnus-agent customizable without putting
-       gnus-agentize into .gnus.
-
-       * gnus.el (gnus-agent): Make it customizable.
-
-       * gnus-dired.el: New file.
-       From Benjamin Rutt <brutt@bloomington.in.us>
-
-       * 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-01  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-int.el (gnus-request-accept-article): Use gnus-get-function.
-
-2002-02-01  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-view.el (mm-w3m-mode-dont-bind-keys): New variable.
-       (mm-setup-w3m): Don't bind keys listed in the above.
-
-2002-02-01  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-view.el (mm-inline-text-html-render-with-w3m): Bind
-       `w3m-safe-url-regexp' with nil if `mm-inline-text-html-with-images'
-       is non-nil; bind `w3m-force-redisplay' with nil.
-
-       * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto.
-
-       * mm-decode.el (mm-inline-text-html-with-images): Supplement docs.
-
-2002-01-31  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-request-replace-article): Unfold. Don't
-       use mail-header-unfold-field.
-
-       * gnus-cache.el (gnus-summary-insert-cached-articles): Use
-       gnus-summary-limit.
-
-       * gnus-range.el (gnus-add-to-sorted-list): New function.
-       * gnus-sum.el (gnus-mark-article-as-read): Use it.
-       (gnus-mark-article-as-unread): Ditto.
-       (gnus-summary-mark-article-as-unread): Ditto.
-       (gnus-build-get-header): Ditto.
-       (gnus-summary-prepare-threads): Ditto.
-       (gnus-summary-insert-pseudos): Ditto.
-       (gnus-articles-to-read): Use gnus-sorted-union and gnus-sorted-nunion.
-       (gnus-summary-insert-new-articles): Use gnus-sorted-nunion.
-       (gnus-summary-insert-old-articles): Ditto.
-
-       * gnus-msg.el (gnus-posting-styles): Add new format of header.
-       (gnus-configure-posting-styles): Support the new format.
-
-       * mail-source.el (mail-source-bind, mail-source-bind-common): Set
-       edebug-form-spec to (sexp body).
-       Suggested by Joe Wells <jbw@izanami.cee.hw.ac.uk>.
-
-       * message.el (message-reply-headers): Add doc.
-
-2002-01-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-delete-group): Nix the entry in
-       gnus-cache-active-hashtb.
-
-       * gnus-agent.el (gnus-agent-mark-unread-afer-downloaded): New variable.
-       (gnus-agent-summary-fetch-group): Use it.
-
-       * gnus-msg.el (gnus-debug-files): New variable.
-       (gnus-debug-exclude-variables): New variable.
-       (gnus-debug): Use them.
-
-       * gnus-range.el (gnus-range-length): Don't use gnus-uncompress-range.
-
-2002-01-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-cite-prefix-regexp): Use text-mode-syntax-table.
-       (message-mode-syntax-table): Move back the previous position.
-
-       * nnagent.el (nnagent-retrieve-headers): Use gnus-sorted-difference.
-
-       * gnus-agent.el (gnus-agent-retrieve-headers): Use
-       gnus-sorted-difference.
-
-       * nnsoup.el (nnsoup-request-expire-articles): Use
-       gnus-sorted-difference.
-
-       * nnheader.el: Autoload gnus-sorted-difference.
-
-       * nnfolder.el (nnfolder-request-expire-articles): Use
-       gnus-sorted-difference.
-
-       * gnus-cache.el (gnus-cache-retrieve-headers): Use
-       gnus-sorted-difference.
-
-       * gnus-range.el: Autoload cookies.
-       (gnus-sorted-difference): New function.
-       (gnus-sorted-ndifference): New function.
-       (gnus-sorted-nintersection): Rename from
-       gnus-set-sorted-intersection.
-       (gnus-sorted-nunion): Rename from gnus-set-sorted-union.
-       (gnus-list-range-difference): Rename from
-       gnus-inverse-list-range-intersection.
-       (gnus-inverse-list-range-intersection): Use defalias.
-
-       * gnus-sum.el (gnus-select-newsgroup): Use gnus-sorted-difference,
-       gnus-sorted-ndifference, and gnus-sorted-nintersection.
-       (gnus-articles-to-read): Use gnus-sorted-difference.
-       (gnus-summary-limit-mark-excluded-as-read): Use
-       gnus-sorted-intersection and gnus-sorted-ndifference.
-       (gnus-list-of-read-articles): Use gnus-list-range-difference.
-       (gnus-summary-insert-articles): Use gnus-sorted-difference.
-
-       * gnus-sum.el (gnus-summary-update-info): Use gnus-sorted-union.
-
-2002-01-30  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-article-wash-html-with-w3m): Add keymap
-       property to the buffer for using emacs-w3m command keys.
-
-       * mm-decode.el (mm-inline-text-html-with-w3m-keymap): New user
-       option.
-
-       * mm-view.el (mm-w3m-mode-map): New variable.
-       (mm-w3m-mode-command-alist): New variable.
-       (mm-w3m-minor-mode): Removed.
-       (mm-setup-w3m): Setup `mm-w3m-mode-map'; don't add minor mode.
-       (mm-inline-text-html-render-with-w3m): Add keymap property to the
-       buffer for using emacs-w3m command keys.
-
-2002-01-29  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-mode-syntax-table): Move forward.
-       (message-cite-prefix-regexp): Auto detect non word constituents.
-       (message-cite-prefix-regexp): Don't use with-syntax-table.
-
-       * gnus-sum.el (gnus-summary-update-info): Use
-       gnus-list-range-intersection.
-
-       * gnus-agent.el (gnus-agent-fetch-headers): Use
-       gnus-list-range-intersection.
-
-       * gnus-range.el (gnus-range-normalize): Use correct predicate.
-       (gnus-list-range-intersection): Use it.
-       (gnus-inverse-list-range-intersection): Ditto.
-       (gnus-sorted-intersection): Add doc.
-       (gnus-set-sorted-intersection): Add doc.
-       (gnus-sorted-union): New function.
-       (gnus-set-sorted-union): New function.
-
-       * gnus-range.el (gnus-list-range-intersection): Correct the logic.
-       (gnus-inverse-list-range-intersection): Ditto.
-
-2002-01-29  Karl Kleinpaste  <karl@charcoal.com>
-
-       * mm-uu.el (mm-uu-type-alist): Add optional leading `0'.
-
-       * gnus-uu.el (gnus-uu-shar-name-marker): Add optional leading `0'
-       and permit `:' and `\' in order to handle full Windows pathnames.
-       (gnus-uu-begin-string): Add optional leading `0'.  Leading `0' is
-       technically not correct per standard, but seems to have common use.
-
-2002-01-29  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-uu.el (gnus-uu-expand-numbers): Ignore errors when
-       replacing numbers.
-
-2002-01-28  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-followup-with-original): Use (mark).
-
-       * gnus-score.el (gnus-score-insert-help): Move to (point-min).
-       Don't split when the window is small, e.g. when a small *BBDB*
-       window is the lowest one.
-
-       * gnus-agent.el (gnus-agent-retrieve-headers): Use
-       nnheader-find-nov-line to speed up. Use nreverse, because it is
-       sorted. Use nnheader-insert-nov-file.
-
-2002-01-28  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-decode.el (mm-inline-text-html-with-images): New user option.
-
-       * mm-view.el (mm-inline-text-html-render-with-w3m): Bind the value
-       of `w3m-display-inline-images' with the value of
-       `mm-inline-text-html-with-images'.
-       From: TSUCHIYA Masatoshi <tsuchiya@namazu.org>.
-
-       * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto.
-
-2002-01-27  Richard M. Stallman  <rms@gnu.org>
-
-       * time-date.el: Add autoload cookies.  Many doc fixes.
-       (time-add): New function.
-       (time-subtract): Renamed from subtract-time.
-       (subtract-time): New alias for time-subtract.
-
-2002-01-28  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-article-wash-html-with-w3m): Replace w3m to
-       emacs-w3m in doc-string.
-
-       * lpath.el: Bind `w3m-cid-retrieve-function-alist' and
-       `w3m-current-buffer'.
-
-2002-01-27  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * gnus-art.el (gnus-article-wash-html-with-w3m): Handle cid: URLs.
-
-       * mm-view.el (mm-setup-w3m): Add `mm-w3m-cid-retrieve' to
-       `w3m-cid-retrieve-function-alist' for `gnus-article-mode'.
-       (mm-w3m-cid-retrieve): New function.
-       (mm-inline-text-html-render-with-w3m): Handle cid: URLs.
-
-2002-01-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-fetch-articles): Don't save empty articles.
-
-2002-01-27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-util.el (gnus-cache-file-contents): Don't use equalp.
-
-2002-01-26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnheader.el (nnheader-insert-nov-file): Increased cutoff to
-       32K.
-
-       * gnus-sum.el (gnus-summary-expire-articles): Clean up.
-
-       * nnmail.el (nnmail-article-group): Decode headers before running
-       split rules over them.
-       (nnmail-mail-splitting-charset): New variable.
-
-       * smiley.el: Replaced with smiley-ems.el.
-
-2002-01-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-url.el (mm-url-predefined-programs): Add w3m.
-       (mm-url-program): Ditto.
-
-2002-01-26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnml.el (nnml-use-compressed-files): New variable.
-       (nnml-filenames-are-evil): Removed.
-       (nnml-current-group-article-to-file-alist): Don't use.
-       (nnml-update-file-alist): Inhibit.
-       (nnml-article-to-file): Use new var.
-
-2002-01-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-parse-without-error): Add edebug-form-spec.
-
-       * nnagent.el (nnagent-retrieve-headers): loop until eobp.
-
-2002-01-26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agent-load-alist): Use new caching
-       function.
-
-       * gnus-util.el (gnus-cache-file-contents): New function.
-
-       * gnus-agent.el (gnus-agent-file-loading-cache): New variable.
-       (gnus-agent-load-alist): Use it.
-
-       * nnagent.el (nnagent-retrieve-headers): Use optimized function.
-
-       * nnheader.el (nnheader-insert-nov-file): New function.
-
-       * gnus-util.el (gnus-parse-without-error): Correct the loop.
-
-       * gnus-sum.el (gnus-dependencies-add-header): Use in-reply-to if
-       there are no references.
-       (gnus-extract-message-id-from-in-reply-to): New function.
-       (gnus-nov-parse-line): Use in-reply-to if there are no
-       references.
-
-2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnagent.el (nnagent-retrieve-headers): Use new macro.
-
-       * gnus-util.el (gnus-parse-without-error): New macro.
-
-2002-01-25  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-wash-html-with-w3m): Call w3m-region.
-       (gnus-article-wash-function): use locate-library to decide which
-       to use.
-
-2002-01-25  Simon Josefsson  <jas@extundo.com>
-
-       * pop3.el (pop3-munge-message-separator): Work if no date.
-       Trivial patch from Marius Vollmer <mvo@zagadka.ping.de>.
-
-2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agent-save-alist): Fix.
-
-       * nnagent.el (nnagent-retrieve-headers): Must have cut too much by
-       mistake.  Reinstated lost code.
-
-2002-01-25  Josh Huber  <huber@alum.wpi.edu>
-
-       * mml2015.el (mml2015-mailcrypt-decrypt): Display a signature if
-       one exists in the case of an encrypted message with an internal
-       signature.
-
-2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agent-save-alist): Optimized.
-
-2002-01-25  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * dgnushack.el: Commented out the experimental code.
-
-2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-range.el (gnus-inverse-list-range-intersection): Off-by-one
-       error.
-
-       * gnus.el (gnus-server-to-method): Made into subst.
-       (gnus-server-method-cache): New variable.
-       (gnus-server-to-method): Use it.
-       (gnus-group-method-cache): New variable.
-       (gnus-find-method-for-group-1): Renamed.
-       (gnus-find-method-for-group): New function.
-       (gnus-group-method-cache): Removed.
-
-       * gnus-sum.el (gnus-compute-unseen-list): Use new optimized
-       function.
-
-       * gnus-range.el (gnus-members-of-range): New function.
-       (gnus-list-range-intersection): Renamed.
-       (gnus-inverse-list-range-intersection): New function.
-
-       * gnus-sum.el (gnus-compute-unseen-list): Made into own function.
-
-       * nnagent.el (nnagent-retrieve-headers): New implementation.
-
-       * gnus-agent.el (gnus-agent-get-undownloaded-list): New, faster
-       implementation.
-
-2002-01-25  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * lpath.el: Fbind `w3m-charset-to-coding-system'; bind
-       `w3m-meta-content-type-charset-regexp'.
-
-       * mm-view.el (mm-inline-text-html-render-with-w3m): Decode
-       charset-encoded html contents.
-
-2002-01-24  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-request-article): Make sure it is not
-       an empty file.
-
-       * nnweb.el (url): Ignore errors when request url.
-
-       * nnrss.el: Clean up the comments.
-
-2002-01-24  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * lpath.el: Fbind `w3m-region'; bind `w3m-mode-map'.
-
-       * mm-decode.el (mm-inline-text-html-renderer): New user option.
-       (mm-inline-media-tests): Test whether the value of
-       `mm-inline-text-html-renderer' is a function for text/html.
-
-       * mm-view.el (mm-inline-text-html-render-with-w3): New function
-       separated from `mm-inline-text'.
-       (mm-w3m-minor-mode): New variable.
-       (mm-w3m-setup): New variable.
-       (mm-setup-w3m): New function.
-       (mm-inline-text-html-render-with-w3m): New function.
-       (mm-inline-text): Funcall `mm-inline-text-html-renderer' for
-       text/html.
-
-2002-01-23  Paul Jarc  <prj@po.cwru.edu>
-
-       * lpath.el: fbind make-symbolic-link and unix-sync for nnmaildir.
-
-2002-01-23  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-xmas.el (gnus-xmas-redefine): Quote `gnus-completing-read'
-       and `gnus-xmas-completing-read'.
-
-2002-01-19  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * nneething.el (nneething-message-id-number): Abolished.
-       (nneething-encode-file-name): Not encode numerical characters.
-       (nneething-make-head): `nneething-message-id-number' is not
-       used to generate message IDs.
-
-2002-01-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-emphasis-alist): Include !? as sentence-ending
-       characters.
-
-2002-01-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-xmas.el (gnus-xmas-completing-read): New function.
-       (gnus-xmas-redefine): Redefine conditionally.
-
-2002-01-22  Josh Huber  <huber@alum.wpi.edu>
-
-       * mml.el (mml-parse-1): Fixed usage of recipients in the secure
-       tag.
-
-2002-01-22  Josh Huber  <huber@alum.wpi.edu>
-
-       * message.el (message-font-lock-keywords): Added the secure tag.
-       * mml-sec.el: Added functions to generate/modify/remove the secure
-       tag while in message mode.
-       * mml-sec.el (mml-secure-message): New.
-       * mml-sec.el (mml-unsecure-message): New.
-       * mml-sec.el (mml-secure-message-sign-smime): New.
-       * mml-sec.el (mml-secure-message-sign-pgp): New.
-       * mml-sec.el (mml-secure-message-sign-pgpmime): New.
-       * mml-sec.el (mml-secure-message-encrypt-smime): New.
-       * mml-sec.el (mml-secure-message-encrypt-pgp): New.
-       * mml-sec.el (mml-secure-message-encrypt-pgpmime): New.
-       * mml.el (mml-parse-1): Added code to recognise the secure tag and
-       convert it to either a part or multipart depending on if there are
-       other parts in the message.
-       * mml.el (mml-mode-map): Changed default sign/encrypt keybindings
-       to use the secure tag, rather than the part tag.
-       * mml.el (mml-preview): Added a save-excursion to keep cursor
-       position after doing an MML preview.
-
-2002-01-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnheader.el (nnheader-parse-overview-file): New function.
-       (nnheader-write-overview-file): New function.
-
-2002-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-group-fast-parameter): Check better if expansion
-       in wanted.
-
-       * nnweb.el (nnweb-type-definition): Clean up.
-
-2002-01-21  Alastair Burt  <burt@dfki.de>
-       Trivial patch.
-
-       * gnus-art.el (gnus-mm-display-part): Make sure that the summary
-       buffer exists before jumping to it.
-
-2002-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-wash-html-with-w3): Made into own
-       function.
-       (article-wash-html): Use it.
-       (gnus-article-wash-function): New variable.
-       (gnus-article-wash-html-with-w3m): New function.
-
-2002-01-20  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.umu.se>
-
-       * dgnushack.el (dgnushack-compile): Compile smiley-ems for
-       XEmacs.
-
-2002-01-20  John H. Palmieri  <palmieri@math.washington.edu>
-
-       * gnus-fun.el (gnus-convert-image-to-gray-x-face): More standard
-       command line.
-
-2002-01-21  Simon Josefsson  <jas@extundo.com>
-
-       * canlock.el (base64-encode-string): Autoload it from base64.
-       (canlock-make-cancel-key): Base64 encode unibyte string.
-
-2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnfolder.el (nnfolder-request-accept-article): Unfold
-       x-from-line.
-       (nnfolder-request-replace-article): Ditto.
-
-2002-01-20  Nevin Kapur  <nevin@jhu.edu>
-
-       * gnus-group.el (gnus-group-best-unread-group): Use the right
-       positioning function.
-
-2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * smiley-ems.el (smiley-region): Use new function.
-       (smiley-update-cache): Use general image functions.
-       (smiley-region): Use general functions.
-
-       * gnus-util.el (gnus-graphic-display-p): New function.
-
-       * nnmail.el (nnmail-article-group): Allow outputting traces of
-       non-strings.
-
-       * nndoc.el (nndoc-type-alist): Rules for exim bounces.
-       (nndoc-exim-bounce-type-p): New function.
-
-       * message.el (message-dont-send): Doc fix.
-
-       * gnus-util.el (gnus-completing-read): Remove
-       inherit-input-method.
-
-       * gnus-art.el (gnus-treat-smiley): Doc fix.
-
-       * gnus-agent.el (gnus-agent-fetch-headers): Ignore seen and recent
-       articles.
-
-2002-01-19  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-gssapi-open): Don't wait for logout to complete.
-       (imap-kerberos4-open): Ditto.
-       (imap-open): Set port correctly, don't set auth.
-
-2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-version-number): Bump version number.
-
-2002-01-20 05:33:30 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.05 is released.
-
-2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnkiboze.el (nnkiboze-generate-group): Make sure the directory
-       exists.
-
-       * gnus-spec.el (gnus-string-width-function): New function.
-       (gnus-tilde-cut-form): Use it.
-       (gnus-tilde-max-form): Ditto.
-       (gnus-use-correct-string-widths): Default to (featurep 'xemacs).
-       (gnus-substring-function): Use it.
-       (gnus-tilde-cut-form): Ditto.
-       (gnus-substring-function): New function.
-
-       * message.el (message-check-news-header-syntax): New message.
-
-       * gnus.el (gnus-slave-no-server): Doc fix.
-
-       * gnus-spec.el (gnus-use-correct-string-widths): Default to t.
-
-2002-01-15  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-sum.el (gnus-adjust-marked-articles): Fix the record for
-       `seen' if it looks like (seen NUM1 . NUM2).  It should be
-       (seen (NUM1 . NUM2)).
-
-2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-topic.el (gnus-topic-catchup-articles): Update article
-       number in closed topics.
-
-2002-01-19  Daniel Pittman  <daniel@rimspace.net>
-
-       * gnus-sum.el (gnus-summary-first-unseen-or-unread-subject): New
-       functions.
-
-2002-01-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-group-find-parameter): Clean up.
-
-       * gnus-sum.el (gnus-summary-goto-subject): Error on non-numerical
-       articles.
-
-       * gnus-util.el (gnus-completing-read-with-default): Renamed.
-
-       * nnmail.el (nnmail-article-group): Clean up.
-
-2002-01-19  Paul Stodghill  <stodghil@cs.cornell.edu>
-
-       * gnus-agent.el (gnus-category-name): Intern the category name.
-
-2002-01-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-topic.el (gnus-topic-move-group): Use gnus-topic-history.
-
-       * gnus-util.el (gnus-completing-read): New function.
-
-2002-01-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-add-wash-type): Use add-to-list.
-
-       * smiley-ems.el (smiley-region): Register smiley.
-       (smiley-toggle-buffer): Rewrite the function.
-       (smiley-active): Removed.
-
-2002-01-19  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-util.el (gnus-parent-id): Optimize null n case.  From
-       Jesper Harder <harder@ifa.au.dk>.
-
-2002-01-18  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * gnus-art.el (gnus-request-article-this-buffer): Call
-       `nneething-get-file-name' to extract the file name from the
-       message id.
-
-       * nneething.el (nneething-encode-file-name): New function.
-       (nneething-decode-file-name): Ditto.
-       (nneething-get-file-name): Ditto.
-       (nneething-make-head): Encode the file name and encapsulate it
-       into the field of the message id.
-
-2002-01-18  Simon Josefsson  <jas@extundo.com>
-
-       * nnml.el (nnml-request-update-info): Don't erase flags that isn't
-       stored in .marks.
-
-       * nnfolder.el (nnfolder-request-update-info): Ditto.
-
-2002-01-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-url-parse-query-string): Allow new line in value.
-
-2002-01-18  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-starttls-p): Don't check for binary.
-       (imap-gssapi-auth-p): Ditto.
-       (imap-kerberos4-auth-p): Ditto.
-       (imap-open): Change logic.  Iterate through all possible streams,
-       instead of bailing out after first failure.  Move authenticator
-       decision to `imap-authenticate'.
-       (imap-authenticate): Change logic, now finds the authenticator to
-       use, was previously in `imap-open'.
-       (imap-open): Return nil on failure.
-       (imap-open): Setup temp buffer correctly.
-       (imap-open): Return buffer only on success.
-       (imap-interactive-login, imap-interactive-login): Tell the user
-       which stream/authenticator is used for the queried
-       username/password.
-       (imap-open, imap-authenticate): Set variables.
-       (imap-gssapi-auth-p, imap-kerberos4-auth-p): Fix typo.
-       (imap-open): Don't assume how `with-temp-buffer' is implemented.
-
-2002-01-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el (gnus-grab-cam-x-face): New function.
-
-2002-01-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-emphasis-alist): Allow matching "*this*.)".
-
-2002-01-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-toggle-group-plugged): New function.
-       (gnus-agent-group-mode-map): Bind it to "Jo".
-       (gnus-agent-group-make-menu-bar): Add it into menu bar.
-
-2002-01-17  Karl Kleinpaste  <karl@charcoal.com>
-
-       * gnus-xmas.el (gnus-group-toolbar): Add .newsrc save button.
-       (gnus-summary-mail-toolbar): Add mail article deletion button.
-
-       * smiley.el (smiley-deformed-regexp-alist): Eliminate noseless
-       false positives for lines of "^^^^".
-
-       * gnus-picon.el (gnus-picon-find-face): faces database is all
-       lowercase.
-
-2002-01-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-retrieve-headers): Use correct buffer.
-       (gnus-agent-braid-nov): Switch back to nntp-server-buffer. Remove
-       duplications.
-       (gnus-agent-batch): Bind gnus-agent-confirmation-function.
-
-2002-01-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-initial-limit): Inline
-       gnus-summary-limit-children.
-       (gnus-summary-initial-limit): Don't limit if
-       gnus-newsgroup-display is nil.
-       (gnus-summary-initial-limit): No, don't.
-
-       * gnus-util.el
-       (gnus-put-text-property-excluding-characters-with-faces): Inline
-       gnus-put-text-property.
-
-       * gnus-spec.el (gnus-default-format-specs): New variable.
-
-       * gnus-start.el (gnus-read-newsrc-file): Don't clear
-       gnus-format-specs.
-       (gnus-read-newsrc-el-file): Default to gnus-default-format-specs.
-
-       * gnus-spec.el (gnus-update-format-specifications): Really check
-       the Gnus version of the .newsrc.eld file.
-       (gnus-format-specs): Save the new default summary format.
-
-       * gnus-util.el (gnus-parent-id): Check whether references is empty
-       before splitting.
-
-       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Inline some
-       functions.
-       (gnus-gather-threads-by-references): Inline
-       `gnus-split-references'.
-
-       * gnus-spec.el (gnus-summary-line-format-spec): New, optimized
-       default value of gnus-summary-line-format-spec.
-
-2002-01-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnslashdot.el (nnslashdot-retrieve-headers-1): A better error
-       message.
-       (nnslashdot-request-list): Ditto.
-       (nnslashdot-sid-strip): Removed.
-
-2002-01-15  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-close-asynchronous): Enable.
-       (nnimap-close-group): Expunge.
-
-2002-01-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-user-date-format-alist): Typo.
-       From: Frank Schmitt <usereplyto@Frank-Schmitt.net>
-
-2002-01-15  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * nneething.el (nneething-request-article): Set
-       `nnmail-file-coding-system' to `binary' locally, in order to read
-       files without any conversion.
-
-2002-01-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-retrieve-headers): Use
-       nnheader-file-coding-system and nnmail-active-file-coding-system.
-       (gnus-agent-regenerate-group): Ditto.
-       (gnus-agent-regenerate): Ditto.
-       (gnus-agent-write-active): Ditto.
-       Suggested by Katsumi Yamaoka <yamaoka@jpl.org>
-
-2002-01-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-button-alist): Don't highlight <URL:.
-       Suggested by Ian Fitchet <ian.fitchet@lunanbay.com>
-
-2002-01-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el: We don't need gnus-article-show-all-headers.
-
-       * gnus-art.el (article-show-all, gnus-article-show-all-header):
-       Ditto.
-
-       * gnus-sum.el (gnus-summary-select-article): Don't call
-       show-all-headers, because hidden headers are not hidden text any
-       more.
-
-2002-01-13  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-newline-and-reformat): Use `newline' instead
-       of inserting \n, so that the newline is marked as hard.
-
-       * gnus-spec.el (gnus-pad-form): Don't evaluate EL multiple times.
-       From Jesper Harder <harder@ifa.au.dk>.
-
-2002-01-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * imap.el (imap-close): Keep going if quit.
-
-       * gnus-agent.el (gnus-agent-retrieve-headers): Erase
-       nntp-server-buffer.
-
-2002-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-view.el (mm-display-inline-fontify): Require font-lock to
-       avoid unbinding shadowed variables.
-
-       * gnus-art.el (gnus-picon-databases): Moved here.
-       (gnus-picons-installed-p): Moved here.
-       (gnus-article-reply-with-original): Use `mark'.
-
-       * gnus.el (gnus-picon): Moved here and renamed.
-
-       * gnus-art.el (gnus-treat-from-picon): Only be on if picons are
-       installed.
-       (gnus-treat-mail-picon): Ditto.
-       (gnus-treat-newsgroups-picon): Ditto.
-
-       * gnus-picon.el (gnus-picons-installed-p): New function.
-
-2002-01-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-go-online): Fix doc.
-
-2002-01-12  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-need-unselect-to-notice-new-mail)
-       (nnimap-before-find-minmax-bugworkaround): Use it.
-       (nnimap-find-minmax-uid): Don't reselect current mailbox.
-       (nnimap-dont-close): New variable.
-       (nnimap-close-group): Use it.
-
-2002-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-reply-with-original): Use
-       `mark-active'.
-
-       * gnus-msg.el (gnus-summary-reply): Don't bug out on regions.
-
-       * gnus-logic.el (gnus-advanced-score-rule): Thinko fix.
-       (gnus-score-advanced): Clean up.
-       (gnus-score-advanced): Accept a multiple of the score.
-
-2002-01-12  Simon Josefsson  <jas@extundo.com>
-
-       * flow-fill.el (fill-flowed-display-column)
-       (fill-flowed-encode-columnq): New variables.  Suggested by
-       Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro\e,b_\e(Bjohann).
-       (fill-flowed-encode, fill-flowed): Use them.
-
-       * message.el (message-send-news, message-send-mail): Use
-       m-b-s-n-p-e-h-n.
-
-       * mml.el (autoload): Autoload fill-flowed-encode.
-       (mml-buffer-substring-no-properties-except-hard-newlines): New
-       function.
-       (mml-read-part): Use it.
-       (mml-generate-mime-1): Encode format=flowed if appropriate.
-       (mml-insert-mime-headers): Insert format=flowed.
-
-       * flow-fill.el (fill-flowed-encode): New function.
-       (fill-flowed): Bind fill-column to window width.
-
-2002-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-buffer-name): Return the dead name if
-       it exists.
-       (gnus-summary-setup-buffer): Wake up dead summary buffers.
-       (gnus-summary-buffer-name): Don't return the dead name after all.
-       (gnus-summary-setup-buffer): Kill the dead buffer.
-
-       * gnus-art.el (gnus-article-followup-with-original): Store the
-       value of the mark before deactivating it.
-
-2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-fun.el (gnus-display-x-face-in-from): Fake it.
-       From: Karl Kleinpaste <karl@charcoal.com>
-
-       * gnus-art.el (article-display-x-face): Ditto.
-       (gnus-article-reply-with-original): Use gnus-region-active-p.
-       (gnus-article-followup-with-original): Ditto.
-
-       * gnus-sum.el (gnus-summary-read-group-1): Don't select
-       downloadable article either.
-
-2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-display-x-face): Insert From:.
-
-       * gnus-sum.el (gnus-summary-move-article): Don't draw the
-       article. Bind gnus-display-mime-function and
-       gnus-article-prepare-hook.
-
-       * gnus-agent.el (gnus-agent-retrieve-headers): Load agentview.
-       (gnus-agent-toggle-plugged): Use gnus-agent-go-online. Move
-       gnus-agent-possibly-synchronize-flags to the last.
-       (gnus-agent-go-online): New function. New variable.
-
-2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-regenerate-group): Add clean option.
-       (gnus-agent-regenerate): Ditto.
-
-2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-ignored-news-headers)
-       (message-ignored-mail-headers): Add X-Gnus-Agent-Meta-Information:.
-       Suggested by ARISAWA Akihiro <ari@atesoft.advantest.co.jp>
-
-       * gnus.el (gnus-gethash-safe): New macro.
-
-       * gnus-agent.el (gnus-agent-regenerate-history): New function.
-       (gnus-agent-regenerate): Show messages.
-
-2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-regenerate-group): New function.
-       (gnus-agent-regenerate): New function.
-       (gnus-agent-save-alist): Sort.
-       (gnus-agent-copy-nov-line): Test eobp.
-       (gnus-agent-retrieve-headers): Erase buffer.
-
-2002-01-10  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-charset-to-coding-system): Change charset to cs.
-       From: Torsten Hilbrich <email@myrkr.in-berlin.de>
-
-       * gnus.el (gnus-agent-covered-methods): Move here.
-       (gnus-online): New function.
-       (gnus-agent-method-p): Move here.
-
-       * nnagent.el (nnagent-retrieve-headers): Check whether arts is
-       nil. Remove articles-alist.
-
-       * gnus-start.el (gnus-get-unread-articles): Check online.
-       (gnus-groups-to-gnus-format): Ditto.
-       (gnus-active-to-gnus-format): Ditto.
-
-       * gnus-agent.el (gnus-agent-get-function): Use it.
-       (gnus-agent-get-undownloaded-list): Ditto.
-       (gnus-agent-fetch-session): Only fetch online methods.
-
-       * gnus-srvr.el (gnus-server-make-menu-bar): Add offline.
-       (gnus-server-mode-map): Ditto.
-       (gnus-server-offline-face): New face.
-       (gnus-server-offline-face): New variable.
-       (gnus-server-font-lock-keywords): Add offline.
-       (gnus-server-insert-server-line): Ditto.
-       (gnus-server-offline-server): New function.
-
-       * gnus-int.el (gnus-open-server): Turn to offline.
-       (gnus-server-unopen-status): New variable.
-
-2002-01-10  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnkiboze.el (nnkiboze-request-article): Use
-       gnus-agent-request-article.
-
-       * nnagent.el (nnagent-retrieve-headers): Don't use nnml
-       function. Insert undownloaded NOV.
-
-       * gnus-agent.el (gnus-agent-retrieve-headers): New function.
-       (gnus-agent-request-article): New function.
-
-       * gnus.el (gnus-agent-cache): New variable.
-
-       * gnus-int.el (gnus-retrieve-headers): Use
-       gnus-agent-retrieve-headers.
-       (gnus-request-head): Use gnus-agent-request-article.
-       (gnus-request-body): Ditto.
-
-       * gnus-art.el (gnus-request-article-this-buffer): Use
-       gnus-agent-request-article.
-
-       * gnus-sum.el (gnus-summary-read-group-1): Don't show the first
-       article if it is undownloaded.
-
-2002-01-10  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-spec.el (gnus-spec-tab): Deal with wide characters.
-
-2002-01-09  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * canlock.el (canlock-string-as-unibyte): New macro.
-       (canlock-sha1-with-openssl): Return a unibyte string.
-       (canlock-make-cancel-key): Treat Message-ID as a unibyte string.
-
-2002-01-09  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-expand-group-parameters): Match \N or \& only.
-
-2002-01-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-encode.el (mm-content-transfer-encoding-defaults): Add
-       application/x-emacs-lisp.
-
-       * gnus-msg.el (gnus-bug): Use application/emacs-lisp.
-
-       * nntp.el (nntp-request-article): Add group parameter.
-       (nntp-request-head): Ditto.
-       (nntp-find-group-and-number): Add parameter group. Figure out
-       number if the status line doesn't give (e.g. quimby.gnus.org).
-
-2002-01-08  Simon Josefsson  <jas@extundo.com>
-
-       * mml.el (mml-generate-mime-1): Set recipient correctly.
-
-2002-01-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-read-from-minibuffer): Add parameter
-       initial-contents.
-       * gnus-msg.el (gnus-summary-resend-message): Use it.
-
-       * gnus-group.el (gnus-group-read-ephemeral-group): Restore the old
-       behavior of quit-config.
-
-       * message.el (message-make-from): Don't quote fullname.
-       From: Bj\e,Ax\e(Brn Mork <bmork@dod.no>
-
-       * gnus-group.el (gnus-group-suspend): Don't kill message buffers.
-       From: <andre@slamdunknetworks.com>
-
-2002-01-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-mark-article-read): Typo. Increase n.
-
-       * gnus-art.el (gnus-header-button-alist): Handle mailto.
-
-       * mml.el (mml-preview): Bind gnus-original-article-buffer because
-       article-decode-group-name uses it.  Bind gnus-article-prepare-hook
-       because bbdb may use it.
-
-2002-01-07  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
-
-       * nneething.el (nneething-request-article): When a non-text file
-       is converted to an article, its data is encoded in base64.  Call
-       `nneething-make-head' with options to specify MIME types.
-       (nneething-make-head): Add optional arguments to specify MIME
-       types.
-
-2002-01-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-fun.el (gnus-display-x-face-in-from): Fake a "From: "
-       header if there is not.
-
-       * gnus-xmas.el (gnus-xmas-put-image): Insert " " if bobp.
-
-       * gnus-msg.el (gnus-gcc-mark-as-read): New variable.
-       (gnus-inews-mark-gcc-as-read): Obsolete variable.
-       (gnus-inews-do-gcc): Use them.
-
-       * gnus-group.el (gnus-group-mark-article-read): Put holes into
-       gnus-newsgroup-unselected.
-
-2002-01-06  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-ssl-open, imap-ssl-open, imap-parse-fetch): Use
-       condition-case, not ignore-errors.
-
-2002-01-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-insert-old-articles): Bind
-       gnus-fetch-old-headers.
-
-       * gnus-art.el (article-display-x-face): Use the current buffer
-       unless `W f'. Otherwise, X-Face may be shown in the header of a
-       forwarded part.
-       (gnus-treatment-function-alist): Treat xface before hiding
-       headers.
-
-2002-01-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-group.el (gnus-group-read-ephemeral-group): Fix
-       parameters.
-
-2002-01-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-multibyte-p): Define conditionally when load.
-       (mm-guess-charset): New function.
-       (mm-charset-after): Use it.
-       (mm-detect-coding-region): New function.
-       (mm-detect-mime-charset-region): New function.
-
-       * gnus-sum.el (gnus-summary-show-article): Use
-       mm-detect-coding-region.
-
-2002-01-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-make-fqdn): Be less violent.
-
-       * gnus.el (gnus-logo-color-style): Compute custom form
-       automatically.
-
-       * gnus-sum.el (gnus-summary-enter-digest-group): Feed the adaptive
-       score file of the parent to the document group.
-
-       * gnus-group.el (gnus-group-read-ephemeral-group): Add an optional
-       parameters parameter.
-
-       * gnus-score.el (gnus-score-load-file): Clean up.
-
-2002-01-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-thread-sort-by-most-recent-number): Fix typo.
-       From: Damien Wyart <damien.wyart@free.fr>
-
-       * gnus-util.el (gnus-local-map-property): In Emacs 21, use keymap.
-
-2002-01-05  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-select-group-hook): Typo.
-
-       * rfc2047.el (rfc2047-decode-string): Return immediately if there
-       is no quoted-printable-encoded STRING.
-       From: Jesper Harder <harder@ifa.au.dk>
-
-       (rfc2047-decode-string): Decode it.
-
-2002-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-logo-color-alist): Added more colors from Luis.
-
-2002-01-05  Keiichi Suzuki  <keiichi@nanap.org>
-       Trivial patch.
-
-       * nntp.el (nntp-possibly-change-group): Erase contents of nntp
-       buffer to get rid of junk line.
-
-2002-01-05  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-mode-map): Bind message-goto-from to C-c C-f
-       C-o.
-       (message-mode-map): Bind message-insert-or-toggle-importance to
-       C-c C-u.
-       (message-mode-map): Bind message-disposition-notification-to to
-       C-c M-n.
-       (message-mode-menu): Add m-d-n-t.
-       (message-mode-field-menu): Add m-goto-from.
-       (message-mode): Doc fix.
-       (message-goto-from): New function.
-       (message-insert-disposition-notification-to): New function.
-       (message-tool-bar-map): Add receipt button.
-
-2002-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-thread-latest-date): New function.
-       (gnus-thread-sort-by-most-recent-number): Renamed.
-       (gnus-thread-sort-functions): Doc fix.
-       (gnus-select-group-hook): Don't use setq on a hook.
-       (gnus-thread-latest-date): Use date, not number
-
-       * gnus-agent.el (gnus-agent-expire-days): Doc fix.
-       (gnus-agent-expire): Allow regexp of expire-days.
-
-       * gnus-art.el (gnus-article-reply-with-original): Deactivate
-       region.
-       (gnus-article-followup-with-original): Ditto.
-
-       * gnus-sum.el (gnus-thread-highest-number): Doc fix.
-
-       * gnus-art.el (gnus-mime-display-alternative): Use
-       gnus-local-map-property.
-       (gnus-mime-display-alternative): Ditto.
-       (gnus-insert-mime-security-button): Ditto.
-       (gnus-insert-next-page-button): Ditto.
-       (gnus-button-prev-page): Take optional args.
-       (gnus-insert-prev-page-button): widget-convert.
-
-       * gnus-util.el (gnus-local-map-property): New function.
-
-       * gnus-art.el (gnus-prev-page-map): Use parent map.
-       (gnus-next-page-map): Ditto.
-
-       * gnus-spec.el (gnus-parse-format): Clean up.
-       (gnus-parse-format): Do complex formatting for %=.
-
-       * gnus-fun.el (gnus-display-x-face-in-from): Add the string
-       "X-Face: " to the data in the built-in scenario.
-
-       * gnus-spec.el (gnus-parse-simple-format): Use gnus-pad-form.
-       (gnus-correct-pad-form): Renamed.
-       (gnus-tilde-max-form): Clean up.
-       (gnus-pad-form): Use gnus-use-correct-string-widths.
-
-       * gnus-fun.el (gnus-display-x-face-in-from): Use native xface
-       support if that is available.
-
-       * gnus-sum.el (gnus-thread-highest-number): New function.
-       (gnus-thread-sort-by-most-recent-thread): New function.
-       (gnus-thread-sort-functions): Doc fix.
-
-2002-01-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-select-article): Disable multibyte in
-       all cases.
-       (gnus-summary-mode): Enable it in all cases.
-       (gnus-summary-display-article): Ditto.
-       (gnus-summary-edit-article): Ditto.
-
-       * gnus-ems.el (gnus-put-image): Really return glyph.
-
-       * gnus-art.el (gnus-article-x-face-command): Fix :type.
-       (gnus-treat-smiley): Don't take "P" in the interactive form.
-
-2002-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * compface.el (uncompface): XEmacs and Emacs have differing
-       capabilities.
-
-       * gnus-fun.el (gnus-display-x-face-in-from): Use face.
-
-       * gnus-ems.el (gnus-article-xface-ring-internal): Removed.
-       (gnus-article-xface-ring-size): Removed.
-       (gnus-article-display-xface): Removed.
-       (gnus-remove-image): Cleaned up.
-
-       * gnus-xmas.el (gnus-xmas-create-image): Convert pbm to xbm.
-       (gnus-xmas-create-image): Take pbm files.
-       (gnus-x-face): Removed.
-       (gnus-xmas-article-display-xface): Removed.
-
-       * gnus-fun.el (gnus-display-x-face-in-from): Bind
-       default-enable-multibyte-characters.
-
-       * compface.el (uncompface): Doc fix.
-
-       * gnus-art.el (gnus-article-x-face-command): Use
-       gnus-display-x-face-in-from.
-
-       * gnus-xmas.el (gnus-xmas-put-image): Return the image.
-
-       * gnus-ems.el (gnus-put-image): Return the image.
-
-       * gnus-fun.el (gnus-display-x-face-in-from): New function.
-       (gnus-x-face): Moved here.
-
-2002-01-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-xmas.el (gnus-xmas-put-image): Don't insert SPC or make
-       invisible if string is nil.
-       (gnus-xmas-article-display-xface): Use it.
-
-       * gnus-ems.el (gnus-put-image): Explicitly use SPC, and add text
-       property when string is nil.
-       (gnus-article-display-xface): Use it.
-
-2002-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (article-display-x-face): Check whether valid grey
-       face was returned.
-       (article-display-x-face): Place image in the right spot.
-
-       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Get rid of
-       stderr.
-       (gnus-convert-gray-x-face-to-xpm): Check whether output is valid.
-
-2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-xmas.el (gnus-xmas-create-image): Take optional
-       parameters.
-       (gnus-xmas-put-image): Allow non-strings to be passed.
-
-       * gnus-art.el (article-display-x-face): Use optional parameters.
-
-       * gnus-ems.el (gnus-create-image): Take optional parameters.
-
-       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Use uncompface.
-
-       * compface.el (compface-xbm-p): Removed.
-
-       * gnus-ems.el (gnus-article-compface-xbm): Removed.
-       (gnus-article-display-xface): Use compface.
-
-       * compface.el: New file.
-
-       * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Remove quotes.
-       (gnus-convert-image-to-x-face-command): Ditto.
-       (gnus-random-x-face): Quote argument.
-       (gnus-x-face-from-file): Ditto.
-
-2002-01-03  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-request-expire-articles): evaluate
-       the expire-group parameter once per article rather than once
-       per group; bind `nnmaildir-article-file-name' and `article'
-       for convenience.  Leave article alone when expire-group
-       specifies the current group.
-       (nnmaildir--update-nov): be more concurrency-friendly with
-       temp file names.
-
-2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-start.el (gnus-read-init-file): Cleaned up.
-
-2002-01-03  Dave Love  <d.love@dl.ac.uk>
-
-       * gnus-start.el (gnus-startup-file-coding-system): Removed.
-       (gnus-read-init-file): Don't use it.
-
-2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agent-fetch-session): Run hook.
-
-2002-01-03  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-start.el (gnus-read-init-file): Don't force coding system
-       for ~/.gnus.  From Dave Love <fx@gnu.org>.
-
-2002-01-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nntp.el (nntp-send-buffer): Use mm-with-unibyte-current-buffer.
-       * nnspool.el (nnspool-request-post): Ditto.
-
-       * mm-util.el (mm-use-find-coding-systems-region): New variable.
-       (mm-find-mime-charset-region): Use it.
-
-2002-01-03  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus.el (gnus-summary-line-format): Added :link.
-       * gnus-topic.el (gnus-topic-line-format): Ditto.
-       * gnus-sum.el (gnus-summary-dummy-line-format): Ditto.
-       * gnus-srvr.el (gnus-server-line-format): Ditto.
-       * gnus-group.el (gnus-group-line-format): Ditto.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Use correct syntax for
-       :keys, it works on both Emacsen.
-
-2002-01-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-charset-to-coding-system): Don't setq charset.
-
-2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-summary-send-map): Fix binding for very-wide.
-
-2002-01-03  Reiner Steib  <reiner.steib@gmx.de>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Menu bar entries for
-       very wide reply.
-
-2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-picon.el (gnus-picon-transform-address): Cache stuff.
-       (gnus-picon-cache): New variable.
-       (gnus-picon-transform-newsgroups): Cache stuff.
-
-       * gnus-art.el (gnus-article-reply-with-original): New command.
-       (gnus-article-followup-with-original): New command.
-
-       * gnus-msg.el (gnus-copy-article-buffer): Take optional BEG and
-       END parameters.
-       (gnus-summary-followup): Take a list of list of articles.
-       (gnus-inews-yank-articles): Allow lists of article/regions.
-
-       * gnus-art.el (gnus-article-read-summary-keys): `R' and `F' are no
-       longer the usual commands.
-
-       * gnus-fun.el (gnus-convert-image-to-gray-x-face): Use pnmnoraw.
-       (gnus-convert-gray-x-face-to-xpm): Don't use six parameters to
-       shell-command-on-region.
-
-2002-01-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-picon.el (gnus-picon-transform-newsgroups): Fix for the case
-         "Newsgroups: rec.music.beatles.moderated, rec.music.beatles".
-
-2002-01-03  Steve Youngs  <youngs@xemacs.org>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): XEmacs doesn't
-       understand ':keys', wrap it in an featurep 'xemacs.
-
-2002-01-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-ems.el (gnus-article-display-xface): Show xface in the
-       order of headers (Actually, it is called in a reversed order). Add
-       'gnus-image-text-deletable property.
-       (gnus-remove-image): Remove text with such a property.
-
-       * gnus-xmas.el (gnus-xmas-article-display-xface): Don't use
-       gnus-put-image.
-
-       * gnus-art.el (gnus-article-treat-fold-newsgroups): Replace ", *"
-       with ", "
-
-2002-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Renamed.
-
-       * gnus-art.el (gnus-ignored-headers): Hide all X-Faces.
-       (article-display-x-face): Display grey X-Faces.
-
-       * gnus-fun.el (gnus-convert-gray-x-face-region): New function.
-       (gnus-convert-gray-x-face-to-ppm): Ditto.
-       (gnus-convert-image-to-gray-x-face): Ditto.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Add a :keys to
-       gnus-summary-show-raw-article.
-
-2002-01-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       Display picons in XEmacs without showing text.
-
-       * gnus-xmas.el (gnus-xmas-create-image): Don't use
-       mm-create-image-xemacs to create xbm glyph, because it deletes
-       temporary files.
-       (gnus-xmas-put-image): Use end-glyph. Make text invisible.
-       (gnus-xmas-remove-image): Make text visible, remove glyph.
-
-       * gnus-picon.el (gnus-picon-transform-newsgroups)
-       (gnus-picon-transform-address): Insert spec backward, due to the
-       incompatibility of gnus-xmas-put-image.
-
-2002-01-02  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
-
-       * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Doc fix.
-
-2002-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el: Doc fix.
-
-       * gnus-art.el: Doc fix.
-
-       * gnus-agent.el: Doc fix.
-
-2002-01-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-diary.el, gnus-delay.el: Fix copyright lines.
-
-2002-01-01  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir--update-nov): automatically parse
-       NOV data out of the message again if nnmail-extra-headers has
-       changed.
-
-2002-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-fun.el: New file.
-       (gnus-convert-image-to-x-face-command): New variable.
-       (gnus-insert-x-face): New function.
-       (gnus-random-x-face): Renamed.
-       (gnus-x-face-from-file): Renamed.
-
-       * gnus-art.el (gnus-body-boundary-delimiter): Changed default to
-       "_".
-       (gnus-body-boundary-delimiter): Typo fix.
-
-2002-01-02  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-article-treat-body-boundary): Handle nil.
-       (gnus-body-boundary-delimiter): Fix type.
-
-2002-01-01  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-treat-buttonize, gnus-treat-buttonize-head)
-       (gnus-treat-emphasize, gnus-treat-strip-cr)
-       (gnus-treat-leading-whitespace, gnus-treat-hide-headers)
-       (gnus-treat-hide-boring-headers, gnus-treat-hide-signature)
-       (gnus-treat-fill-article, gnus-treat-hide-citation)
-       (gnus-treat-hide-citation-maybe)
-       (gnus-treat-strip-list-identifiers, gnus-treat-strip-pgp)
-       (gnus-treat-strip-pem, gnus-treat-strip-banner)
-       (gnus-treat-highlight-headers, gnus-treat-highlight-citation)
-       (gnus-treat-date-ut, gnus-treat-date-local)
-       (gnus-treat-date-english, gnus-treat-date-lapsed)
-       (gnus-treat-date-original, gnus-treat-date-iso8601)
-       (gnus-treat-date-user-defined, gnus-treat-strip-headers-in-body)
-       (gnus-treat-strip-trailing-blank-lines)
-       (gnus-treat-strip-leading-blank-lines)
-       (gnus-treat-strip-multiple-blank-lines)
-       (gnus-treat-unfold-headers, gnus-treat-fold-headers)
-       (gnus-treat-fold-newsgroups, gnus-treat-overstrike)
-       (gnus-treat-display-xface, gnus-treat-display-smileys)
-       (gnus-treat-from-picon, gnus-treat-mail-picon)
-       (gnus-treat-newsgroups-picon, gnus-treat-body-boundary)
-       (gnus-treat-capitalize-sentences, gnus-treat-fill-long-lines)
-       (gnus-treat-play-sounds, gnus-treat-translate)
-       (gnus-treat-x-pgp-sig): Doc fix, add link to manual.
-
-       * gnus-art.el (gnus-body-boundary-delimiter): New variable.
-       (gnus-article-treat-body-boundary): Use it.
-
-       * message.el (message-mode): Fix doc.
-       (message-mode-menu): Fix names.
-
-2002-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-first-subject): Really go to unseen
-       articles.
-
-       * gnus-picon.el (gnus-picon-find-face): Search MISC for all types.
-       (gnus-picon-transform-address): Search for unknown faces as well.
-       (gnus-picon-find-face): Don't search "news" for MISC.
-       (gnus-picon-user-directories): Changed default back to exclude
-       "unknown".
-
-       * gnus-sum.el (gnus-summary-hide-all-threads): Reversed logic.
-
-       * gnus-picon.el (gnus-picon-find-face): Search through all
-       databases.
-       (gnus-picon-find-face): New implementation.
-
-       * gnus-topic.el (gnus-topic-goto-previous-topic): New command and
-       keystroke.
-       (gnus-topic-goto-next-topic): Ditto.
-
-       * gnus.el (gnus-summary-line-format): Changed default.
-
-       * nnmail.el (nnmail-extra-headers): Change default.
-
-       * gnus-sum.el (gnus-extra-headers): Change default.
-
-       * message.el (message-news-other-window): Changed "news" to
-       "posting".
-       (message-news-other-frame): Ditto.
-       (message-do-send-housekeeping): Ditto.
-
-       * gnus-sum.el (gnus-summary-maybe-hide-threads): Use predicate
-       function.
-       (gnus-article-unread-p): New function.
-       (gnus-article-unseen-p): New function.
-       (gnus-dead-summary-mode-map): Typo.
-
-       * gnus-util.el (gnus-make-predicate): New function.
-       (gnus-make-predicate-1): New function.
-
-       * gnus-sum.el: New function.
-       (gnus-map-articles): New function.
-
-       * gnus-art.el (gnus-treat-fold-headers): New variable.
-       (gnus-article-treat-fold-headers): New command and keystroke.
-
-       * gnus-sum.el (gnus-dead-summary-mode-map): Clean up.
-       (gnus-dead-summary-mode-map): Bind q to bury-buffer.
-
-2002-01-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-fcc-externalize-attachments): New variable.
-       (message-do-fcc): Use it.
-
-       * gnus-msg.el (gnus-gcc-externalize-attachments): New variable.
-       (gnus-inews-do-gcc): Use it.
-
-       * mml.el (mml-tweak-sexp-alist): New variable.
-       (mml-externalize-attachments): New variable.
-       (mml-tweak-part): Use mml-tweak-sexp-alist.
-       (mml-tweak-externalize-attachments): New function.
-
-2002-01-01  Steve Youngs  <youngs@xemacs.org>
-
-       * gnus-xmas.el (gnus-xmas-article-display-xface): Uncomment
-       'set-glyph-face' so x-face back/foreground can be set.
-
-2001-12-31  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-fix-before-sending): Fix a typo.
-
-2002-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-treat-smiley): Renamed command.
-       (gnus-article-remove-images): New command and keystroke.
-
-       * gnus-sum.el (gnus-summary-toggle-smiley): Removed.
-
-       * smiley-ems.el (gnus-smiley-display): Removed.
-
-       * gnus.el (gnus-version-number): Update version.
-
-       * message.el (message-text-with-property): Renamed and moved
-       here.
-       (message-fix-before-sending): Highlight invisible text and place
-       point there.
-
-2002-01-01 02:32:53 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.04 is released.
-
-2002-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-delay.el (gnus-delay-send-queue): Renamed.
-
-       * gnus-art.el (gnus-ignored-headers): More headers,
-
-       * ietf-drums.el (ietf-drums-parse-addresses): Use `error' instead
-       of `scan-error', since XEmacs doesn't seem to support that.
-
-2001-12-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-best-unread-article): Take a prefix
-       arg.
-       (gnus-summary-best-unread-subject): Ditto.
-       (gnus-summary-best-unread-subject): No, don't.
-       (gnus-summary-better-unread-subject): New command.
-
-       * gnus-xmas.el (gnus-xmas-put-image): Insert the string itself.
-
-       * lpath.el ((featurep 'xemacs)): fbind url function.
-
-       * gnus-xmas.el (gnus-xmas-article-display-xface): Use data, not
-       buffer.
-       (gnus-xmas-remove-image): Implementation that does something.
-       (gnus-xmas-article-display-xface): Mark images properly.
-
-       * gnus-art.el (gnus-mime-print-part): Use mm-temp-directory.
-
-2001-12-31  Florian Weimer  <fw@deneb.enyo.de>
-
-       * gnus.el (gnus): Warn if trying to run Gnus un-byte-compiled.
-
-2001-12-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-group.el (gnus-group-line-format): Added %O to the default
-       value.
-
-       * gnus-util.el (gnus-text-with-property): The smallest point is
-       point-min.
-
-       * smiley-ems.el (smiley-region): Return images.
-       (gnus-smiley-display): Allow toggling.
-       (smiley-region): Use text properties, not overlays.
-
-       * gnus-xmas.el (gnus-xmas-remove-image): New function, not
-       implemented yet.
-
-       * smiley-ems.el (smiley-update-cache): Check for valid types.
-
-       * gnus-art.el (gnus-with-article-buffer): New macro.
-
-       * gnus-picon.el (gnus-picon-transform-newsgroups): Keep the
-       strings as well as the glyphs.
-       (gnus-picon-transform-address): Ditto.
-       (gnus-picon-insert-glyph): Ditto.
-       (gnus-picon-transform-newsgroups): Toggle.
-       (gnus-picon-transform-address): Toggle.
-
-       * gnus-ems.el (gnus-remove-image): New function.
-       (gnus-put-image): Take an optional string.
-
-       * gnus-util.el (gnus-text-with-property): New function.
-
-       * gnus-art.el (gnus-delete-images): New function.
-
-       * gnus-ems.el (gnus-article-display-xface): Mark and store image.
-
-       * gnus-art.el (gnus-article-wash-status-entry): Renamed.
-       (gnus-article-wash-status): Use it.
-       (gnus-signature-toggle): Clean up.
-       (gnus-add-wash-status): New function.
-       (gnus-delete-wash-status): New function.
-       (gnus-article-hide-text-type): Use them throughout.
-       (gnus-add-image): New function.
-
-       * gnus-ems.el (gnus-article-display-xface): Use new interface.
-
-       * gnus-xmas.el (gnus-xmas-article-display-xface): Use new
-       interface.
-
-       * gnus-art.el (article-display-x-face): Cleaned up.
-
-       * rfc2047.el (rfc2047-field-value): New function.
-
-       * mail-parse.el (mail-header-field-value): New alias.
-
-       * gnus-art.el (gnus-mime-print-part): Fix typos.
-
-       * smiley-ems.el (gnus-smiley-file-types): New variable.
-       (smiley-update-cache): Use it.
-       (smiley-regexp-alist): Suffix-less smiley names.
-       (smiley-regexp-alist): Added more smileys.
-
-       * gnus-sum.el (gnus-print-buffer): Made into own function.
-       (gnus-summary-print-article): Use it.
-
-       * mailcap.el (mailcap-mime-info): Actually return the bit that we
-       looked for when REQUEST is a string.
-
-       * gnus-art.el (gnus-mime-button-commands): Add printing
-       keystroke.
-       (gnus-mime-copy-part): Doc fix.
-       (gnus-mime-print-part): New command.
-
-2001-12-31  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-parse-fetch): Notice empty flags responses.  From
-       Nic Ferrier <nferrier@tf1.tapsellferrier.co.uk>.
-
-2001-12-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-picon.el (gnus-treat-from-picon): Autoload.
-       (picon): Fix doc.
-
-       * gnus-win.el (gnus-window-to-buffer): gnus-picon-buffer-name no
-       longer exists. Remove those codes.
-       * gnus.el (gnus-use-picons): Ditto.
-
-2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-treat-fold-newsgroups): Don't
-       infloop.
-
-       * gnus-sum.el (t): New `W D' map.
-
-       * gnus-art.el (gnus-treat-fold-newsgroups): New variable.
-       (gnus-article-treat-body-boundary): Clean up.
-       (gnus-body-boundary-face): Removed.
-       (gnus-article-goto-header): Moved here.
-       (gnus-article-goto-header): Allow better regexps.
-       (gnus-article-treat-fold-newsgroups): New command.
-
-       * gnus-sum.el (gnus-summary-move-article): We have to select an
-       article to give `gnus-read-move-group-name' an opportunity to
-       suggest an appropriate default.
-
-       * rfc2047.el (rfc2047-fold-line): New function.
-       (rfc2047-unfold-line): Ditto.
-       (rfc2047-fold-region): Don't fold just after the header name.
-
-       * mail-parse.el (mail-header-fold-line): New alias.
-       (mail-header-unfold-line): Ditto.
-
-       * gnus-art.el (gnus-body-boundary-face): Renamed.
-       (gnus-article-treat-body-boundary): Use it.
-       (gnus-article-treat-body-boundary): Use an invisible header and a
-       line of underline characters.
-
-2001-12-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * ietf-drums.el (ietf-drums-parse-addresses): Recover from errors.
-
-       * gnus-picon.el (gnus-picon-transform-address): Skip bad addresses.
-       (gnus-picon-split-address): New function.
-       (gnus-picon-find-face): Use it.
-       (gnus-picon-transform-address): Use it. Set first to t for each
-       address.
-
-       * gnus-art.el (gnus-with-article-headers): Move to here. Define
-       the macro then use it.
-       (gnus-treatment-function-alist): Treat picons earlier.
-
-2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-body-separator-face): New variable.
-       (gnus-article-treat-body-boundary): Use a blank, colored line.
-
-       * gnus-picon.el (gnus-picon-find-face): Look into misc/MISC as
-       well.
-
-       * gnus-art.el (gnus-treat-body-boundary): New variable.
-       (gnus-article-treat-unfold-headers): Use helper macro.
-       (gnus-article-treat-body-boundary): New command.
-
-       * gnus.el (gnus-logo-color-style): Change the default color.
-       (gnus-splash-face): Gray, gray.
-
-       * gnus-xmas.el (gnus-xmas-group-startup-message): Use general
-       colors.
-
-       * gnus.el (gnus-logo-color-alist): Moved here and renamed.
-       (gnus-logo-color-style): Ditto.
-       (gnus-logo-colors): Ditto.
-
-       * gnus-picon.el (gnus-picon-create-glyph): Cache glyphs.
-
-       * gnus-art.el (gnus-treat-newsgroups-picon): New variable.
-
-       * gnus-picon.el (gnus-treat-newsgroups-picon): New function.
-       (gnus-picon-transform-newsgroups): New function.
-
-       * ietf-drums.el (ietf-drums-parse-addresses): Accept a nil
-       string.
-
-       * gnus-picon.el (gnus-treat-mail-picon): Renamed.
-
-       * gnus-art.el (gnus-treat-cc-picon): New variable.
-       (gnus-treat-mail-picon): Renamed.
-
-       * gnus-picon.el: New implementation.
-       (gnus-picon-find-face): Renamed.
-       (gnus-treat-from-picon): Use it.
-       (gnus-picon-transform-address): Renamed.
-       (gnus-treat-from-picon): Use it.
-       (gnus-picon-create-glyph): Renamed.
-       (gnus-picon-transform-address): Use it.
-       (gnus-treat-cc-picon): New command.
-
-       * mm-decode.el (mm-create-image-xemacs): Separated out into
-       function.
-       (mm-get-image): Use it.
-
-       * gnus-art.el (gnus-treat-display-picons): Simplify.
-       (gnus-treat-from-picon): Renamed.
-
-       * gnus-ems.el (gnus-create-image): New function.
-       (gnus-put-image): New function.
-
-       * gnus-art.el (gnus-article-treat-unfold-headers): Doc fix.
-       (gnus-with-article-headers): New macro.
-       (gnus-article-goto-header): New function.
-
-       * gnus-xmas.el (gnus-image-type-available-p): New function.
-
-       * gnus-ems.el (gnus-image-type-available-p): New function.
-
-2001-12-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-check-group): Find the correct tag, because
-       xml.el is changed.
-
-2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-treat-unfold-headers): Only fold when
-       lines are shorter than the window width.
-       (gnus-ignored-headers): More headers.
-
-2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-treat-unfold-lines): New variable.
-       (gnus-treat-unfold-headers): Renamed.
-       (gnus-article-treat-unfold-headers): New command and keystroke.
-
-       * rfc2047.el (rfc2047-encode-message-header): Clean up.
-
-       * gnus-int.el (gnus-open-server): Mark quit-ed server as denied.
-
-2001-12-29  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * sha1-el.el (sha1-use-external): New variable.
-       (sha1-region): Use it.
-       (sha1-string): Ditto.
-
-       * dgnushack.el (dgnushack-compile): Compile gnus-picon for Emacs.
-       * gnus-picon.el: Less warnings when compile.
-
-2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-picon.el (gnus-picons-news-directories): Removed obsolete
-       alias.
-       (gnus-picons-database): Default to list.
-       (gnus-picons-lookup-internal): Use it.
-
-       * nnmail.el (nnmail-article-group): Default nnmail-split-methods
-       to "bogus".
-
-       * gnus-win.el (gnus-configure-windows-hook): New hook.
-
-2001-12-29  Sascha L\e,A|\e(Bdecke  <sascha@meta-x.de>
-
-       * gnus-win.el (gnus-configure-windows): Minimize tree buffer.
-
-2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-update-marks): Don't uncompress the seen
-       lists.
-       (gnus-select-newsgroup): Don't append; push.
-       (gnus-adjust-marked-articles): Remove obsolete ranges from
-       `seen'.
-       (gnus-update-marks): Clean up.
-       (gnus-select-newsgroup): Don't stomp gnus-newsgroup-seen.
-
-2001-12-29  Frank Schmitt  <usereplyto@Frank-Schmitt.net>
-
-       * gnus-sum.el (gnus-summary-limit-to-age): Allow negative days.
-
-2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-auto-select-subject): New variable.
-       (gnus-summary-best-unread-subject): New function.
-       (gnus-summary-best-unread-article): Use it.
-       (gnus-summary-first-unseen-subject): New function and command.
-
-       * gnus-art.el (gnus-treatment-function-alist): Emphasize after
-       other treatments.
-
-       * gnus-util.el (gnus-put-overlay-excluding-newlines): New
-       function.
-
-       * gnus-art.el (gnus-article-show-hidden-text): Remove the type
-       from the list of hidden types.
-
-       * mm-view.el (mm-inline-text): Ditto.
-       (mm-inline-text): Ditto.
-       (mm-w3-prepare-buffer): Ditto.
-
-       * gnus-art.el (article-wash-html): Inhibit more remote fetching.
-
-2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-ignored-headers): Added more headers.
-
-2001-12-29  Jesper Harder  <harder@ifa.au.dk>
-
-       * gnus-srvr.el (gnus-browse-foreign-server): Compute the prefix
-       once.
-
-2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-srvr.el (gnus-server-browse-in-group-buffer): Doc fix.
-
-2001-12-28  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-srvr.el (gnus-browse-foreign-server): Fix typo.  From
-       Jesper Harder <harder@ifa.au.dk>.
-
-2001-12-27  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-select-newsgroup): Make
-       `gnus-newsgroup-unseen' sorted.  Make `gnus-newsgroup-unseen'
-       contain all articles (instead of none) when no seen marks have
-       been set for the group.
-       (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  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-iso-8859-x-to-15-region): Use
-       insert-before-markers.
-       From Jesper Harder <harder@ifa.au.dk>
-
-2001-12-26  Paul Jarc  <prj@po.cwru.edu>
-
-       * nnmaildir.el (nnmaildir-save-mail): create the destination
-       groups if they do not exist.
-
-2001-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * canlock.el (canlock-sha1-with-openssl): Remove unused variable.
-
-2001-12-22 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-read-ephemeral-group): Call
-       gnus-group-real-name.
-
-       * gnus-sum.el (gnus-decode-encoded-word-methods): Backslash paren.
-       (gnus-newsgroup-variables): Ditto.
-
-       * gnus.el (gnus-group-prefixed-name): If group name is prefixed,
-       return it.
-
-2001-12-21  Paul Jarc  <prj@po.cwru.edu>
-
-       * gnus.el (gnus-valid-select-methods): Include nnmaildir.
-       * nnmaildir.el (top-level): Add commentary.
-       (nnmaildir-version): Indicate that nnmaildir is now a standard
-       part of Gnus, not separately released.
-
-2001-12-21 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * 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\e,Am\e(Bk  <Pavel@Janik.cz>
-
-2001-12-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmaildir.el: Copyright changes. Require cl only at compile time.
-
-2001-12-20  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (top-level): Don't require cl.  Suggested by ShengHuo
-       ZHU <zsh@cs.rochester.edu>.
-       (nnimap-close-group): Don't quote KEYLIST items.  Suggested by
-       Brian P Templeton <bpt@tunes.org>.
-
-2001-12-19 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmaildir.el: New file.
-       From Paul Jarc <prj@po.cwru.edu>.
-
-2001-12-19 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nndoc.el (nndoc-type-alist): Move forward to the end.
-
-2001-12-19  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus.el (gnus-find-subscribed-addresses): Replace `mapc' with
-       `dolist'.
-
-2001-12-19 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-win.el (gnus-frames-on-display-list): New function.
-       (gnus-get-buffer-window): Use it.
-
-2001-12-19 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnwarchive.el (nnwarchive-mail-archive-xover): Fix the regexp.
-
-2001-12-18 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-win.el (gnus-get-buffer-window): Use gnus-delete-if.
-
-2001-12-18 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-          From Harald Meland <Harald.Meland@usit.uio.no>
-
-       * gnus-win.el (gnus-get-buffer-window): New function.
-       (gnus-all-windows-visible-p): Use it.
-
-       * gnus-util.el (gnus-horizontal-recenter)
-       (gnus-horizontal-recenter, gnus-horizontal-recenter)
-       (gnus-horizontal-recenter, gnus-set-window-start): Use it.
-
-       * gnus-score.el (gnus-score-insert-help): Use it.
-
-       * gnus-salt.el (gnus-tree-recenter, gnus-generate-tree)
-       (gnus-generate-tree, gnus-highlight-selected-tree)
-       (gnus-highlight-selected-tree, gnus-tree-highlight-article): Use
-       it.
-
-       * gnus-art.el (gnus-article-set-window-start)
-       (gnus-mm-display-part, gnus-request-article-this-buffer)
-       (gnus-button-next-page, gnus-button-prev-page)
-       (gnus-article-button-next-page, gnus-article-button-prev-page):
-       Use it.
-
-2001-12-18  Josh Huber  <huber@alum.wpi.edu>
-
-       * ChangeLog, ChangeLog.1, nnwfm.el, smiley.el:
-       * gnus-cite.el, gnus-delay.el, gnus-spec.el, message.el:
-       * mml1991.el, nnultimate.el: Removed buffer-file-coding-system tag.
-
-2001-12-18 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * ChangeLog,  ChangeLog.1, nnwfm.el,  gnus-smiley.el:
-       * gnus-cite.el, gnus-delay.el, gnus-spec.el, message.el:
-       * mml1991.el, nnultimate.el: Add `coding'.
-
-2001-12-17  Josh Huber  <huber@alum.wpi.edu>
-
-       * ChangeLog: changed coding to buffer-file-coding-system
-       * ChangeLog.1: same
-       * nnwfm.el: same
-       * gnus-smiley.el: same
-       * gnus-cite.el: moved -*- magic cookie -*- to Local Variables
-       * gnus-delay.el: same
-       * gnus-spec.el: same
-       * message.el: same
-       * mml1991.el: same
-       * nnultimate.el: same
-
-2001-12-16  Simon Josefsson  <jas@extundo.com>
-       Inspired by code by Dirk Meyer <dischi@tzi.de>.
-
-       * gnus-sum.el (gnus-summary-muttprint-program): New variable.
-       (gnus-summary-save-map): Add muttprint.
-       (gnus-summary-make-menu-bar): Ditto.
-       (gnus-summary-muttprint): New function.
-
-       * gnus-art.el (gnus-summary-pipe-to-muttprint): New function.
-
-2001-12-14 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * uudecode.el (uudecode-decode-region-internal): Speedup by using
-       temporary list instead of buffer.
-
-       * mm-url.el (executable-find): autoload.
-
-2001-12-12  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
-
-       * gnus-mlspl.el (gnus-group-split-fancy): Doc fix (add reference
-       to variable, follow doc-string conventions).
-
-2001-12-13  Josh Huber  <huber@alum.wpi.edu>
-
-       * gnus-cus.el (gnus-extra-topic-parameters): added topic parameter
-       subscribe-level
-       * gnus-topic.el (gnus-subscribe-topics): use it.
-
-2001-12-13 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-summary-mail-forward): Forward all marked
-       messages. (A small patch with indentation)
-       From Sean Neakums <sneakums@zork.net>.
-
-       * gnus-uu.el (gnus-uu-grab-articles): Set gnus-current-article to
-       nil after shooting down the gnus-original-article-buffer.
-
-2001-12-13 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * uudecode.el (uudecode-use-external): New variable.
-       (uudecode-decode-region): Automatically detect external program.
-
-       * binhex.el (binhex-use-external): New variable.
-       (binhex-decode-region-internal): New function.
-       (binhex-decode-region): Automatically detect external program.
-
-       * mm-uu.el (mm-uu-decode-function,mm-uu-binhex-decode-function):
-       Use them.
-
-2001-12-12  Simon Josefsson  <jas@extundo.com>
-
-       * nnvirtual.el (nnvirtual-always-rescan)
-       (nnvirtual-component-regexp): Fix doc.
-
-       * nnoo.el (defvoo): Add doc to defvoo variables.
-
-       * nnml.el (nnml-directory, nnml-active-file)
-       (nnml-newsgroups-file, nnml-get-new-mail, nnml-nov-is-evil)
-       (nnml-marks-is-evil, nnml-filenames-are-evil)
-       (nnml-prepare-save-mail-hook, nnml-inhibit-expiry): Fix doc.
-
-       * nnmh.el (nnmh-directory, nnmh-get-new-mail)
-       (nnmh-prepare-save-mail-hook, nnmh-be-safe): Fix doc.
-       (nnmh-possibly-change-directory): Use `nnheader-report' instead of
-       `error'.
-
-       * nnmbox.el (nnmbox-mbox-file, nnmbox-active-file)
-       (nnmbox-get-new-mail, nnmbox-prepare-save-mail-hook):
-
-       * nnfolder.el (nnfolder-directory, nnfolder-active-file)
-       (nnfolder-newsgroups-file, nnfolder-get-new-mail)
-       (nnfolder-save-buffer-hook, nnfolder-inhibit-expiry)
-       (nnfolder-nov-is-evil, nnfolder-marks-is-evil): Fix doc.
-
-       * nnbabyl.el (nnbabyl-mbox-file, nnbabyl-active-file)
-       (nnbabyl-get-new-mail, nnbabyl-prepare-save-mail-hook): Fix doc.
-
-       * imap.el, nnimap.el: Fix indentation.
-
-       * gnus-sieve.el (gnus-sieve-article-add-rule): Autoload it.
-
-2001-12-12  Didier Verna  <didier@xemacs.org>
-
-       * gnus-msg.el (gnus-group-news): New function.
-       * gnus-group.el (gnus-group-mode-map): bind it to `i'.
-       * gnus-group.el (gnus-group-make-menu-bar): add a menu item for it.
-       * gnus-salt.el (gnus-carpal-group-buffer-buttons): add a button
-       for it.
-       * gnus-msg.el (gnus-summary-news-other-window): New function.
-       * gnus-msg.el ((gnus-summary-send-map "S" gnus-summary-mode-map)):
-       bind it to `i'.
-       * gnus-sum.el (gnus-summary-mode-map): bind it to `i'.
-       * gnus-sum.el (gnus-summary-make-menu-bar): add a menu item for it.
-       * gnus-salt.el (gnus-carpal-summary-buffer-buttons): add a button
-       for it (called with a prefix).
-       * gnus-msg.el (gnus-configure-posting-styles): add an optional
-       group-name argument.
-       * gnus-msg.el (gnus-setup-message): use it.
-
-2001-12-12 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-show-article): Fix doc.
-
-2001-12-10 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mime-to-mml): Remove Content-Disposition too.
-
-2001-12-09 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-buffer-name): Decode group name.
-       * gnus-group.el (gnus-group-name-decode): Decode unibyte
-       strings only.
-       From TSUCHIYA Masatoshi <tsuchiya@namazu.org>
-
-2001-12-08  Nevin Kapur  <nevin@jhu.edu>
-
-       * nnmail.el (nnmail-fancy-expiry-targets): New variable.
-       (nnmail-fancy-expiry-target): Use it.
-       Suggestions from Simon Josefsson <jas@extundo.com>.
-
-2001-12-07 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-show-article): Recount lines if not exist.
-
-2001-12-07 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnwfm.el (nnwfm-create-mapping): Use gnus-url-unhex-string.
-
-       * gnus-util.el (gnus-url-unhex-string): Move here.
-
-2001-12-07 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-decode-entities-unibyte-string): Use
-       mm-url-decode-entities-nbsp.
-
-       * nnlistserv.el, nnultimate.el, nnwarchive.el, nnweb.el:
-       * webmail.el, nnwfm.el: Use mm-url.
-
-       * mm-url.el (mm-url-fetch-form): Move from nnweb.
-       (mm-url-remove-markup): Move from nnweb.
-       (mm-url-fetch-simple): Move from webmail.
-
-       * nnslashdot.el (nnslashdot-request-post): Use mm-url-fetch-form.
-
-2001-12-07 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-print-truncate-and-quote): New function.
-       (gnus-summary-print-article): Use it.
-
-       * gnus-util.el (gnus-replace-in-string): Typo.
-
-2001-12-06 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnweb.el (nnweb-replace-in-string): Removed.
-
-       * gnus-util.el (gnus-replace-in-string): New function.
-       (gnus-mode-string-quote): Use it.
-
-       * nnrss.el (nnrss-format-string): Use gnus-replace-in-string.
-       * nnwfm.el (nnwfm-create-mapping): Ditto.
-
-2001-12-06 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * dgnushack.el (dgnushack-compile): nnrss.el and
-       nnslashdot.el don't depend on nnweb, url, w3.
-
-       * nnrss.el: Use mm-url.
-
-2001-12-06 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-url.el (mm-url-insert-file-contents): Support file:.
-
-2001-12-05 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el: Lower case for the description line. Sync from the
-       Emacs CVS.
-
-2001-12-05 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-find-new-groups): Fix doc.
-       From:  Stefan Monnier  <monnier@cs.yale.edu>
-
-2001-12-05  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * mm-view.wl (mm-inline-text): Decode a charset-encoded rich text.
-
-2001-12-04 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-url.el: Require executable.
-       Suggested by Katsumi Yamaoka <yamaoka@jpl.org>.
-
-2001-12-03 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * pop3.el (pop3-munge-message-separator): Only use valid date.
-       Trivial patch from Michael Welsh Duggan <md5i@cs.cmu.edu>.
-
-       * Makefile.in: gnus-load.elc may not be generated.
-
-2001-12-03 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-url.el: New file.
-       * nnslashdot.el: Use it.
-       * mm-extern.el (mm-extern-url): Use it.
-
-2001-12-01 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-save-article): Nix
-       gnus-display-mime-function and gnus-article-prepare-hook.
-
-       * gnus-spec.el (gnus-parse-complex-format): Properly handle %C at
-       the beginning of lines.
-       (gnus-complex-form-to-spec): Ditto.
-
-2001-12-01 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-make-mft): Fix the m-s-a-file regexp.
-       From Paul Jarc <prj@po.cwru.edu>.
-
-2001-11-30 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el: New variable message-subscribed-address-file;
-       use it in message-make-mft.  From Paul Jarc <prj@po.cwru.edu>.
-
-2001-11-30 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-tab-body-function): Set to nil.
-       (message-tab): Use text-mode-map or global-map.
-       Suggested by Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>.
-
-2001-11-30  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-agent.el (gnus-agent-fetch-headers): Use gnus-range-add
-       instead of gnus-union, for speed.  Suggested by Christoph Conrad
-       <christoph.conrad@gmx.de>.
-       (gnus-agent-fetch-group-1): Add verbose message.
-
-2001-11-29 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-write-active): Make sure sym is a cons
-       of integers.
-
-2001-11-29  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-newgroups-header-regexp)
-       (message-completion-alist, message-tab-body-function): Use
-       defcustom rather than defvar.
-       (message-tab): Mention `message-tab-body-function' in doc.
-       Suggested by Karl Eichwalder.
-
-2001-11-28 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-uu.el (gnus-uu-save-article): Use #part instead of #mml.
-
-2001-11-28 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnheader.el (nnheader-find-nov-line): Don't use macro
-       gnus-delete-line.
-
-       * gnus-group.el (gnus-group-name-decode): Defun instead of defsubst.
-       (gnus-group-name-charset): Ditto.
-
-       * gnus-util.el (gnus-buffer-live-p): Ditto.
-
-2001-11-28 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * sieve-manage.el (sieve-manage-stream-alist): Backslash before
-       open parenthesis in doc.
-       (sieve-manage-authenticator-alist): Typo in doc.
-       * imap.el (imap-authenticator-alist): Typo in doc.
-       (imap-stream-alist): Backslash.
-
-       * gnus-sum.el (gnus-summary-limit-to-author): Missing arguments.
-         Thanks to david.goldberg6@verizon.net (David S. Goldberg)
-
-2001-11-27 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-topic.el (gnus-topic-mode): Add LOCAL for add-hook.
-
-       * message.el (message-mode): make-local-hook is harmless in Emacs 21.
-
-       * gnus-msg.el (gnus-configure-posting-styles): use
-       make-local-hook. Add LOCAL for add-hook.
-
-2001-11-27  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-mode): Use `make-local-hook' unless
-       obsolete.
-       Patch by Katsumi Yamaoka <yamaoka@jpl.org>.
-
-2001-11-26  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * canlock.el: Remove sha1.el and base64.el stuff.
-
-2001-11-26  Didier Verna  <didier@xemacs.org>
-
-       * nnmbox.el (nnmbox-create-mbox): create the mbox file directory
-       if needed.
-
-2001-11-21  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-tamago-not-in-use-p): New function.
-       (message-strip-forbidden-properties): Use it.
-
-2001-11-26  Didier Verna  <didier@xemacs.org>
-
-       * gnus-start.el (gnus-check-first-time-used): only check for
-       existence of .el[d] files.
-
-2001-11-25 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-coding-system-priorities): Add backslash in the doc.
-
-       * message.el (message-setup-1): Clean up mc-*.
-
-2001-11-25 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-directory-sep-char-regexp): New variable.
-       * gnus-score.el (gnus-score-find-bnews): Use it.
-
-       * gnus-sum.el (gnus-summary-limit-to-subject): An exclusion version.
-       (gnus-summary-limit-to-author): Ditto.
-       (gnus-summary-limit-to-extra): Ditto.
-       (gnus-summary-find-matching): Support not-matching argument.
-
-2001-11-25  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-wash-subject): Use `insert' rather than
-       `insert-string', which is deprecated.
-
-2001-11-24  Simon Josefsson  <jas@extundo.com>
-
-       * mm-encode.el (mm-encode-content-transfer-encoding): Fix error
-       message. (Gnus does not "default" to using 8bit for the message,
-       it default to use 8bit encoding and the user-supplied CTE
-       value. Calling this behaviour "treating it as 8bit" is perhaps
-       better.)
-
-       * mm-bodies.el (mm-body-encoding): Intern encoding if needed
-       (compare mm-charset-to-coding-system).
-
-2001-11-23 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * canlock.el (canlock-sha1-with-openssl): Use unibyte
-       buffer. Correctly decode hex.
-
-2001-11-21 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-category-insert-line): Convert category
-       names to strings.
-
-2001-11-20 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (sha1): eval-and-compile.
-
-2001-11-20  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-allow-no-recipients): New variable.
-       (message-send): Use it, customize the prompting when posting to
-       Gcc/Fcc alone.  From prj@po.cwru.edu (Paul Jarc).
-
-2001-11-20 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-coding-system-priorities): New variable.
-       (mm-sort-coding-systems-predicate): New function.
-       (mm-find-mime-charset-region): Resort coding systems if needed.
-       Suggested by Katsumi Yamaoka <yamaoka@jpl.org>.
-
-2001-11-20  Didier Verna  <didier@xemacs.org>
-
-       * gnus-group.el (gnus-group-make-help-group): new optional
-       argument to control the error behavior.
-       * gnus-start.el (gnus-check-first-time-used): use it to avoid
-       erroring.
-
-2001-11-19  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-mode-map): Use C-c C-f C-i for Importance:
-       instead of C-c C-u.  Suggested by Per Abrahamsen
-       <abraham@dina.kvl.dk>.
-
-2001-11-18 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-read-folder): Use group instead of
-       nnfolder-current-group.
-       Suggested by Lorentey Karoly <lorentey@elte.hu>.
-
-2001-11-17  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-send): Ask user if Fcc/Gcc should be
-       performed when no other sender was specified.
-       Suggested by prj@po.cwru.edu (Paul Jarc).
-
-2001-11-17  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-mode, message-mode-map): Use C-c C-u for
-       Importance: instead of C-c C-p (used by SC).
-
-2001-11-16  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-insert-importance-high)
-       (message-insert-importance-low): Save point.
-
-       * mail-source.el (mail-source-fetch-imap): Fix BODY.PEEK return
-       value.
-
-2001-11-16  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-strip-special-text-properties): New option.
-       (message-strip-forbidden-properties): Obey it.
-
-2001-11-14  Sam Steingold  <sds@gnu.org>
-
-       * gnus-score.el: Fixed some doc strings to properly quote symbols.
-
-2001-11-15  Simon Josefsson  <jas@extundo.com>
-
-       Support "Importance:" header in Message.
-
-       * message.el (message-mode-map): Bind C-c C-p to
-       `message-insert-or-toggle-importance'
-       (message-mode-menu): Add message-insert-importance-{high,low}.
-       (message-insert-importance-high, message-insert-importance-low)
-       (message-insert-or-toggle-importance): New functions.
-       (message-tool-bar-map): Add {un,}important.
-       (message-mode): Doc fix.
-
-2001-11-15  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-tool-bar-map): Fix attach toolbar tooltip.
-
-       * mml.el (mml-menu): Fix toolbar tooltip.
-
-2001-11-15 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-save-marks): gnus-prin1 takes one argument.
-       * nnml.el (nnml-save-marks): Ditto.
-
-       * gnus-sum.el (gnus-newsgroup-variables): Fix doc.
-
-2001-11-15  Simon Josefsson  <jas@extundo.com>
-
-       * nnml.el (nnml-save-marks):
-       * nnfolder.el (nnfolder-save-marks): Use `gnus-prin1'.
-       Suggested by Istvan Marko <mi-gnus@imarko.dhs.org>.
-
-2001-11-15  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-art.el (gnus-article-wash-status-strings): Use
-       `copy-sequence', not `copy-seq'.
-
-2001-11-15  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-art.el (gnus-article-wash-status-strings): New constant.
-       (gnus-gnus-article-wash-status-entry): New function.
-       (gnus-article-wash-status): Use it.
-
-2001-11-13 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml1991.el: Add coding header.
-
-2001-11-12  Simon Josefsson  <jas@extundo.com>
-
-       * mml1991.el (mml1991-use, mml1991-function-alist): New variables.
-       (mml1991-gpg-sign, mml1991-gpg-encrypt): Renamed, from
-       `mml1991-sign' and `mml1991-encrypt'.
-       (mml1991-encrypt, mml1991-sign): New glue functions.
-       (mml1991-mailcrypt-sign, mml1991-mailcrypt-encrypt): New functions.
-
-       * mml.el (mml-mode-map): `C-c RET o' map for PGP.
-       (mml-menu): Add PGP to menu.
-
-       * mml-sec.el (top-level): Require mml1991.  Don't require smime.
-       (mml-sign-alist, mml-encrypt-alist): Add "pgp".
-       (mml-pgp-sign-buffer, mml-pgp-encrypt-buffer)
-       (mml-secure-sign-pgp, mml-secure-encrypt-pgp): New glue functions.
-
-       * mml2015.el: Mention RFC 3156.
-
-       * mml1991.el: New file.  From Sascha L\e,A|\e(Bdecke <sascha@meta-x.de>.
-
-2001-11-12 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-auto-subscribed-groups): Use ^nnml.
-
-       * gnus-sum.el (gnus-summary-move-article): Use number-to-string.
-         From <Michael.Cook@cisco.com>
-
-2001-11-11  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (top-level): Autoload sha1.
-       (message-canlock-generate): Use sha1 instead of md5 (sha1 used by
-       canlock, no need to require two different hash algs).  Suggested
-       by Ferenc Wagner <wferi@bolyai1.elte.hu>.
-
-2001-11-09  Simon Josefsson  <jas@extundo.com>
-
-       * gnus.el (gnus-local-domain): Fix doc.  From Pavel Jan\e,Am\e(Bk
-       <Pavel@Janik.cz>.
-
-2001-11-09  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-point-in-header-p): New function.
-       (message-do-auto-fill): Use it.
-       (message-beginning-of-line): New function.  Goes to beginning of
-       header value (i.e., end of header name), or to beginning of line
-       if already at beginning of value.  Behaves like
-       `beginning-of-line' when in message body.
-       (message-mode-map): Bind it.
-
-2001-11-08  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-msg.el (gnus-posting-styles): Add doc.
-
-2001-11-07  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sieve.el (gnus-sieve-generate): Don't invoke sieve-mode.
-
-       * sieve-mode.el (sieve-control-commands-face)
-       (sieve-control-commands-face, sieve-action-commands-face)
-       (sieve-test-commands-face, sieve-tagged-arguments-face): New
-       faces.
-       (sieve-font-lock-keywords): Use them.
-       (sieve-mode): Only set font-lock-defaults in emacs.
-
-       * gnus-art.el (gnus-default-article-saver): Add
-       gnus-summary-save-body-in-file.
-       (gnus-summary-write-to-file): Fix doc.
-
-2001-11-07  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-art.el (gnus-treat-highlight-signature): Add cross
-       reference to the correct chapter in the manual.
-
-       * mml.el (mml-mode): Add cross reference to Emacs MIME manual.
-       Suggested by "Golubev I. N." <gin@mo.msk.ru>.
-
-2001-11-07 06:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-preview): Bind mail-header-separator.
-
-2001-11-07  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el: Always require canlock.
-       (message-ignored-supersedes-headers): Include Cancel-Lock and
-       Cancel-Key.
-       (message-insert-canlock): Don't require canlock.
-       (message-cancel-news): Don't check whether canlock is available.
-       (message-supersede): Support cancel-locks.
-
-       * gnus-art.el: Don't autoload canlock.
-
-2001-11-06 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mail-source.el (mail-source-fetch-imap): ASYNC param.
-       From: <andre@slamdunknetworks.com>
-
-2001-11-06 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * many files: Fix copyright lines.
-
-2001-11-05 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-generate-mime-1): Use mm-with-unibyte-current-buffer.
-       Suggested by Dave Love  <fx@gnu.org>.
-
-2001-11-04 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-kill-buffer): Remove auto-save file after
-       confirm.
-
-       * message.el (message-send-mail): Call message-generate-headers
-       once.  Suggested by Matt Armstrong <matt@lickey.com>.
-
-       * gnus-topic.el (gnus-topic-rename): Initial-input.
-       Suggested by Katsuhiro Hermit Endo <hermit@koka-in.org>.
-
-2001-11-03  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-forbidden-properties): New constant.
-       (message-strip-forbidden-properties): New function.
-       (message-mode): Activate it.
-
-2001-11-02 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-iso-8859-15-compatible): Fix doc.
-       (mm-hack-charsets): Fix doc.
-
-2001-11-02  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-int.el (gnus-check-server): Message "...done" when done.
-
-       * imap.el (imap-close): Don't message (imap-send-command-wait
-       returns if the connection is dropped).
-       (imap-wait-for-tag): Nix out message only when necessary.
-
-       * gnus-sieve.el (gnus-sieve-script): Use "stop" instead of "elsif"
-       for non-crossposting.
-       (gnus-sieve-crosspost): Default to t to be consistent with other
-       parts of Gnus.
-
-2001-11-01 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-iso-8859-15-compatible): Add inconvertible chars.
-       (mm-iso-8859-x-to-15-table): Ditto.
-       (mm-iso-8859-x-to-15-region): Ditto.
-       (mm-find-mime-charset-region): Ditto.
-
-2001-11-01  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-close-asynchronous): New variable.
-       (nnimap-close-group): Use it.
-       (nnimap-expunge): Don't use it.
-
-       * imap.el (imap-callbacks): New variable.
-       (imap-remassoc): Copied from `gnus-remassoc'.
-       (imap-add-callback): New function.
-       (imap-mailbox-expunge, imap-mailbox-close): Support asynchronous
-       behaviour.
-       (imap-parse-response): Call the callback.
-
-       * message.el (message-insert-canlock): New variable.
-       (message-canlock-generate, message-canlock-password)
-       (message-insert-canlock): New functions.
-       (message-send-news): Call `message-insert-canlock'.
-       (top-level): Require canlock when compiling.
-       (message-insert-canlock): Require canlock before we need it.
-
-2001-11-01 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-copy-article-buffer): Copy sequence.
-
-2001-11-01 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * dgnushack.el (dgnushack-make-load): A workaround for
-       custom-add-loads bug in some versions of XEmacs.
-
-2001-11-01 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-charset-synonym-alist): Revert (some).
-
-2001-11-01 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-iso-8859-x-to-15-region): New function.
-       (mm-hack-charsets): New variable.
-       (mm-iso-8859-15-compatible): New variable.
-       (mm-iso-8859-x-to-15-table): New variable.
-       (mm-find-mime-charset-region): Add parameter hack-charsets.
-
-       * mm-bodies.el (mm-encode-body): Use it.
-       * mml.el (mml-parse-1): Ditto.
-
-2001-11-01  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-group-make-menu-bar): Add Sieve.
-
-2001-11-01 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-charset-to-coding-system): Return nil, if charset
-       is nil.
-
-2001-11-01 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * smiley-ems.el (smiley-update-cache): Auto detect file type.
-
-       * message.el (message-forward-rmail-make-body): Use
-       save-window-excursion.
-       (message-encode-message-body): Search with noerror.
-       (message-setup-1): Convert compose-mail send-actions to
-       message-send-actions.
-
-2001-11-01  Simon Josefsson  <jas@extundo.com>
-
-       * sieve.el: Don't require easy-mmode. Suggested by Katsumi Yamaoka
-       <yamaoka@jpl.org>.
-
-2001-10-31 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * sieve-manage.el (sieve-string-bytes): No complain.
-
-2001-11-01  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-group-mode-map): Bind "D u" to
-       `gnus-sieve-update' and "D g" to `gnus-sieve-generate'. (Functions
-       has autoload cookies, so no `require' should be necessary.)
-
-       * sieve.el, sieve-mode.el, sieve-manage.el, gnus-sieve.el: New
-       files.
-
-2001-10-31  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-cus.el (gnus-group-parameters): Support integer `display'
-       parameter.
-
-       * gnus-sum.el (gnus-select-newsgroup): If group parameter
-       `display' is a number (and C-u wasn't used to enter group), only
-       fetch that number of articles.
-
-2001-10-31  Matt Armstrong  <matt@lickey.com>
-
-       * gnus.el (gnus-find-subscribed-addresses): Doc fix:
-       not-subscribed -> subscribed.
-
-2001-10-31 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From: Josh Huber <huber@alum.wpi.edu>
-
-       * message.el (message-subscribed-address-functions): New variable.
-       (message-subscribed-addresses): New variable.
-       (message-subscribed-regexps): New variable.
-       (message-goto-mail-followup-to): New function.
-       (message-send-mail): Add Mail-Followup-To.
-       (message-make-mft): New function.
-
-       * gnus.el (gnus-find-subscribed-addresses): New function.
-
-2001-10-31 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mail-source.el (mail-source-fetch): If debug, don't regain signals.
-       (mail-source-fetch-pop): Ditto.
-       (mail-source-check-pop): Ditto.
-
-       * gnus-start.el (gnus-read-init-file): Ditto.
-       (gnus-activate-group): Ditto.
-       (gnus-read-newsrc-el-file): Ditto.
-
-2001-10-30 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-get-reply-headers): Make sure there is ", ".
-
-       * mm-util.el (mm-mime-mule-charset-alist): Move down and call
-       mm-coding-system-p. Don't correct it only in XEmacs.
-       (mm-charset-to-coding-system): Use mm-coding-system-p and
-       mm-get-coding-system-list.
-       (mm-emacs-mule, mm-mule4-p): New variables.
-       (mm-enable-multibyte, mm-disable-multibyte,
-       mm-enable-multibyte-mule4, mm-disable-multibyte-mule4,
-       mm-with-unibyte-current-buffer,
-       mm-with-unibyte-current-buffer-mule4): Use them.
-       (mm-find-mime-charset-region): Treat iso-2022-jp.
-
-       From  Dave Love  <fx@gnu.org>:
-
-       * mm-util.el (mm-mime-mule-charset-alist): Make it correct by
-       construction.
-       (mm-charset-synonym-alist): Remove windows-125[02].  Make other
-       entries conditional on not having a coding system defined for
-       them.
-       (mm-mule-charset-to-mime-charset): Use
-       find-coding-systems-for-charsets if defined.
-       (mm-charset-to-coding-system): Don't use
-       mm-get-coding-system-list.  Look in mm-charset-synonym-alist
-       later.  Add last resort search of coding systems.
-       (mm-enable-multibyte-mule4, mm-disable-multibyte-mule4)
-       (mm-with-unibyte-current-buffer-mule4): Just treat Mule 5 like
-       Mule 4.
-       (mm-find-mime-charset-region): Re-write.
-       (mm-with-unibyte-current-buffer): Restore buffer as well as
-       multibyteness.
-
-2001-10-30 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * canlock.el, sha1-el.el, hex-util.el: Move from contrib
-       directory. Thanks to Katsumi Yamaoka <yamaoka@jpl.org> and Shuhei
-       KOBAYASHI <shuhei@aqua.ocn.ne.jp>.
-
-2001-10-30 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-display-x-face): Nix buffer-read-only
-       again.
-
-       * mml2015.el (mml2015-gpg-verify): Convert <LF> to <CR><LF>.
-
-2001-10-30 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-spec.el (gnus-parse-simple-format): Use
-         buffer-substring-no-properties.
-
-2001-10-30  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (article-verify-cancel-lock): New function.
-
-       * nnheader.el (nntp-process-response): New variable.
-       (nnheader-init-server-buffer): Make `nntp-process-response'
-       buffer-local in `nntp-server-buffer'.
-
-       * nntp.el (nntp-prepare-post-hook): New hook.
-       (nntp-wait-for): Save a server's ID in `nntp-process-response'.
-       (nntp-async-trigger): Ditto.
-       (nntp-request-post): Insert a server's ID if there's no Message-ID
-       header; run `nntp-prepare-post-hook'.
-
-2001-10-30 04:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-decode-group-name): Use nnmail-fetch-field
-       instead.
-
-       * message.el (message-forward-subject-author-subject): Don't use
-       message-news-p, which widens the buffer.
-       (message-forward-make-body): New function.
-       (message-forward): Use it.
-       (message-insinuate-rmail): New function.
-       (message-forward-rmail-make-body): New function.
-
-2001-10-30 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-extern.el (mm-extern): Provide it.
-
-       * mm-partial.el (mm-partial): Provide it.
-
-2001-10-28 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-setup-message): Call post-command-hook.
-
-2001-10-29  Simon Josefsson  <jas@extundo.com>
-
-       * mml.el (mml-preview): Bind message-this-is-news if it is
-       news. From Jesper Harder <harder@myrealbox.com>.
-
-2001-10-28  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-group-make-articles-read): Inline group.
-
-2001-10-29  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * smiley-ems.el (smiley-regexp-alist): Add support for sad and
-       ironic smilies.
-
-2001-10-27  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-indent-citation): Don't add trailing
-       whitespace when citing text.
-
-       * gnus.el (gnus-group-faq-directory): Fix.  From Jesper Harder
-       <harder@ifa.au.dk>.
-
-2001-10-26 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnweb.el (nnweb-possibly-change-server): Create nnweb-hashtb if
-       not available.
-       (nnweb-request-scan): Nix nnweb-hashtb if ephemeral.
-       (nnweb-type-definition): Add google as alias of dejanews.
-       (nnweb-google-parse-1): Forward 1 line.
-
-2001-10-26  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-msg.el (gnus-summary-mail-forward): Doc fix: add pointer to
-       variable `message-forward-ignored-headers'.
-
-2001-10-24  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus.el (gnus-expand-group-parameter): New function.
-       (gnus-expand-group-parameters): Call it.
-       (gnus-group-fast-parameter): New function.
-       (gnus-group-find-parameter): Call it.
-
-2001-10-23  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus.el (gnus-news-group-p): Rewrote.  Now accepts a header
-       vector (it didn't before because of a bug).
-       * gnus-msg.el (gnus-post-news): Use header vector directly, if
-       available.  Before it converted it to an article number.
-
-       This makes followup to news articles with negative numbers in
-       nnvirtual groups use news instead of mail.
-
-2001-10-23  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus.el (post-method): Use `native' instead of `nil'.
-
-       * gnus-msg.el (gnus-post-method): Ditto.
-
-2001-10-23  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus.el (gnus-define-group-parameter): Grammar fix.
-
-2001-10-22  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-msg.el (gnus-extended-version): Include
-       system-configuration.
-       Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro\e,b_\e(Bjohann).
-
-2001-10-22  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus.el (post-method): Customization fix: `native' is not a
-       valid value.
-       * gnus-msg.el (gnus-post-method): Doc and customization fix:
-       `native' is not a valid value.
-
-2001-10-21  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap): Defgroup
-       (nnimap-strict-function, nnimap-strict-function-match): New
-       widget, from Per Abrahamsen  <abraham@dina.kvl.dk>.
-       (nnimap-split-crosspost, nnimap-split-inbox)
-       (nnimap-split-rule, nnimap-split-predicate)
-       (nnimap-split-predicate): Defcustom.
-       (nnimap-split-inbox, nnimap-expunge-search-string)
-       (nnimap-importantize-dormant): Remove "*" from doc.
-
-2001-10-20  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-sum.el (gnus-summary-limit-to-score): Prompt for score if
-       not supplied via prefix arg.  From Lisp, make arg mandatory.
-       Suggested by Frank Schmitt.
-
-2001-10-20  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-do-auto-fill): Avoid calling
-       'rfc822-goto-eoh'.
-
-2001-10-20  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Paul Jarc <prj@po.cwru.edu>.
-
-       * message.el (message-get-reply-headers): Restructure the logic
-       and add comments.  From Paul Jarc <prj@po.cwru.edu>.
-
-2001-10-20  Simon Josefsson  <jas@extundo.com>
-
-       * 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 <dmaze@MIT.EDU>.
-
-       * nnfolder.el (nnfolder-marks-changed-p): Ditto.
-
-2001-10-19  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * mm-decode.el (mm-default-directory): Fix customize type.
-
-       * message.el (message-setup-fill-variables): Kludge to use
-       normal-auto-fill-function even if auto fill is already activated.
-
-2001-10-19  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-do-auto-fill): New version that does not
-       rely on text properties, by Simon Josefsson <jas@extundo.com>.
-       (message-setup-1): Removed the `message-field' property.
-
-       * gnus-draft.el (gnus-draft-edit-message): Removed the
-       `message-field' property.
-
-2001-10-19  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-draft.el (gnus-draft-edit-message): Change `field' to
-       `message-field'.  The `field' property has a special significance in
-       Emacs 21.
-
-       * message.el (message-send, message-setup-1): Ditto.
-
-2001-10-18  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-group-make-articles-read): Call g-r-set-mark
-       when undoing.
-
-2001-10-18  Simon Josefsson  <jas@extundo.com>
-       From Frank Schmitt <usereplyto@Frank-Schmitt.net>
-
-       * gnus-sum.el (gnus-summary-limit-to-display-predicate): Fix typo.
-       (gnus-summary-make-menu-bar): Ditto.
-
-2001-10-17  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-expiry-target): Make sure it is back to the
-       server. Suggested by ShengHuo ZHU <zsh@cs.rochester.edu>.
-
-2001-10-17 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-line-format-alist): user-date entry.
-       * gnus-util.el (gnus-user-date): New function.
-       From Frank Schmitt <usenet@Frank-Schmitt.net>.
-
-2001-10-17  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-check-news-header-syntax): Special case
-       nnvirtual groups.
-
-       * gnus-sum.el (gnus-summary-respool-default-method): Changed
-       customize type to `symbol'.
-
-2001-10-17 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-spec.el (gnus-parse-simple-format): Support extended spec
-       %&foo;.
-       (gnus-parse-simple-format): Support user extended spec too.
-       %u&foo; invokes gnus-user-format-function-foo.
-
-2001-10-17 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnml.el (nnml-request-expire-articles): Make sure it is back to
-       the server.
-       * nnmbox.el (nnmbox-request-expire-articles): Ditto.
-       * nnfolder.el (nnfolder-request-expire-articles): Ditto.
-       * nnbabyl.el (nnbabyl-request-expire-articles): Ditto.
-       * nndiary.el (nndiary-request-expire-articles): Ditto.
-       (nndiary-schedule): Defsubst it before use it.
-       (nndiary-error): eval-and-compile.
-
-2001-10-17  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-msg.el (gnus-post-method): Changed two instances of
-       `active' to `current' and one `null' to `not'.
-
-2001-10-16  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Katsumi Yamaoka <yamaoka@jpl.org>.
-
-       * message.el (message-setup-fill-variables): Use
-       `normal-auto-fill-function' instead of `auto-fill-function'.
-
-2001-10-16  Simon Josefsson  <jas@extundo.com>
-
-       * mml2015.el (mml2015-fix-micalg): Fix for Mutt-bug.
-       (mml2015-gpg-decrypt-1): Decanonicalize decrypted MIME
-       body. (Mailcrypt seem to do this, but gpg.el doesn't.)
-
-2001-10-16  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       Patch by Oliver Scholz <oscholz@my.gnus.org>.
-
-       * gnus-draft.el (gnus-draft-edit-message): Add text property
-       `field' with value `header' to message headers.
-       * message.el (message-setup-1): Really add text property to all of
-       the header, not just part of it.
-
-2001-09-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-group.el (gnus-group-sort-by-server): Use it.
-
-       * gnus.el (gnus-method-to-full-server-name): New, bogus function.
-
-       * gnus-topic.el (gnus-topic-sort-groups-by-server): New command
-       and keystroke.
-
-2001-10-14  Simon Josefsson  <jas@extundo.com>
-
-       * dig.el: Doc fix.
-
-       * smime.el: Doc fix.
-
-       * gnus-msg.el (gnus-inews-do-gcc): Port header encoded-word
-       charset magic from message.el.
-
-2001-10-12  Simon Josefsson  <jas@extundo.com>
-       Suggested by david.goldberg6@verizon.net (David S. Goldberg)
-
-       * gnus-cite.el (gnus-article-toggle-cited-text): Don't remove
-       'cite from g-a-wash-types.
-       (gnus-cite-toggle): Ditto.  Add 'cite.  Set modeline.
-       (gnus-article-hide-citation): Fix.
-
-       * gnus-cite.el (gnus-article-hide-citation): Add `c' mode line
-       character.
-       (gnus-article-toggle-cited-text): Toggle `c' mode line character.
-
-       * gnus-art.el (gnus-treat-hide-citation-maybe): Remove duplicate
-       definition.
-       (gnus-signature-toggle): Toggle `s' mode line character.
-
-       * gnus-art.el (article-emphasize): Set `g-a-wash-types' after
-       doing stuff that clears it.
-
-2001-10-12  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-cache.el (gnus-summary-limit-include-cached): Rewrite.
-       From Eric Marsden <emarsden@laas.fr>.
-
-2001-10-12 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-do-auto-fill): Use gnus-point-at-bol.
-       (autoload): Add some autoloads.
-
-2001-10-12  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       Suggested by Oliver Scholz <epameinondas@gmx.de>.
-
-       * message.el (message-do-auto-fill): New function.  Like
-       `do-auto-fill' but don't fill when in the message header.
-       (message-setup-1): Put a text property on the message header.
-       (message-setup-fill-variables): Use `message-do-auto-fill'.
-
-2001-10-10 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-send-mail-partially): Insert an empty line
-       first, because of the change of message-make-lines.
-
-2001-10-10  Florian Weimer  <fw@deneb.enyo.de>
-
-       * mm-util.el (mm-charset-synonym-alist): If Emacs doesn't support
-       iso-8859-15, make it an alias for iso-8859-1.
-
-2001-10-10  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-send-news): Don't modify the value of
-       `message-syntax-checks' if it is not a list (possibly it is
-       `dont-check-for-anything-just-trust-me').
-
-2001-10-10  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-group.el (gnus-group-name-charset-group-alist): Use
-       `find-coding-system' for XEmacs to check whether the coding-system
-       `utf-8' is available.
-
-2001-10-09 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * dgnushack.el (dgnushack-compile): Detect mh-e and xml.
-
-2001-10-09  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-send-news): Oops, missed case with no
-       "Followup-To" header...
-
-2001-10-09  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-send-news): Allow
-       `gnus-group-name-charset-group-alist' to affect encoding of the
-       "Newsgroups" and "Followup-To" headers.
-
-2001-10-07 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * Makefile.in (install-el): Depend on gnus-load.el.
-
-2001-10-07 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * Makefile.in (install-el): Use -f.
-       From: Amos Gouaux <amos+lists.ding@utdallas.edu>
-
-2001-10-07  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-send-news): Don't encode Followups-To when
-       `gnus-group-name-charset-group-alist is' ".*".  [Yuck]
-
-       * gnus-util.el (gnus-decode-newsgroups): No space in newsgroup
-       header.
-
-       * gnus-art.el (article-decode-group-name): Also decode
-       "Followup-To".
-
-       * rfc2047.el (rfc2047-encode-message-header): Encode without
-       asking for null methods.
-
-       * gnus-group.el (gnus-group-name-charset-group-alist): Make utf-8
-       default charset for newsgroup names in accordance with USEFOR.
-
-       * gnus-group.el (gnus-group-name-charset-method-alist,
-       gnus-group-name-charset-group-alist): Removed "*" from doc
-       strings, "*" should not be used for complex variables.
-
-2001-10-06  Simon Josefsson  <jas@extundo.com>
-
-       Support UTF-8 group names better.
-
-       * message.el (message-check-news-header-syntax): Encode group
-       names before comparison.
-
-       * gnus-msg.el (gnus-copy-article-buffer): Run all
-       `gnus-article-decode-hook's except `article-decode-charset'
-       instead of hardcoding call to one of them.
-
-       * gnus-art.el (gnus-article-decode-hook): Add
-       `article-decode-group-name'.
-       (article-decode-group-name): New function, use `g-d-n'.
-
-       * gnus-group.el (gnus-group-insert-group-line): Decode
-       gnus-tmp-group using `g-d-n'.
-
-       * gnus-util.el (gnus-decode-newsgroups): New function.
-
-2001-10-06  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-srvr.el (gnus-browse-foreign-server): Fixed bug non-nil
-       `gnus-group-name-charset-group-alist'.
-
-2001-10-06 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * Makefile.in: Install el in install. Add uninstall.
-
-2001-10-05  Simon Josefsson  <jas@extundo.com>
-
-       * nnheader.el (gnus-verbose-backends, gnus-nov-is-evil): Custom.
-
-       * gnus-sum.el (gnus-summary-move-article): Also activate new groups.
-
-       * nnfolder.el (nnfolder-normalize-buffer): Don't insert \n\n in
-       empty folders.
-
-       * gnus-sum.el (gnus-select-newsgroup): Don't enable `display'
-       limiting if read-all (C-u RET) was used.
-
-2001-10-04  Simon Josefsson  <jas@extundo.com>
-
-       * mail-source.el (mail-source-movemail-program): New variable.
-       (mail-source-movemail): Use it.  Suggested by Taylor Hutt
-       <thutt@thutt.vmware.com>.
-
-2001-10-03  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): New param.
-       (gnus-summary-line-format-alist): Fix param.
-
-2001-10-02  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-request-move-article): Use imap.el directly,
-       don't go through `nnimap-request-expire-articles' to delete the
-       article.  Thanks to prj@po.cwru.edu (Paul Jarc).
-
-2001-10-02 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-write-active): The min in the
-       agent/active may be larger than that in the server/active.
-
-2001-10-01  Simon Josefsson  <jas@extundo.com>
-
-       * mail-source.el (mail-source-fetch-imap): Use BODY.PEEK if server
-       is IMAP4rev1.
-
-       * nnml.el (gnus-article-unpropagatable-p): Autoload gnus-sum.
-
-       * nnfolder.el: Ditto.
-
-2001-09-30  Dan Christensen  <jdc@uwo.ca>
-
-       * gnus-sum.el (gnus-summary-extract-address-component): New function.
-       (gnus-summary-from-or-to-or-newsgroups): Optimize.
-
-2001-09-29  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-mode-map): Keybinding for `gnus-delay-article'.
-       (message-mode-menu): Menu item for same.
-
-       * gnus-group.el (gnus-group-make-menu-bar): Menu item for sending
-       delayed articles.
-
-       * gnus-delay.el (gnus-delay-send-drafts): Do nothing if
-       nndraft:delayed does not exist.
-       (gnus-delay-initialize): Don't set up keymap, that's done from
-       message.el now.
-       (gnus-delay, gnus-delay-group, gnus-delay-header)
-       (gnus-delay-default-delay, gnus-delay-default-hour): Customize.
-
-2001-09-29  Simon Josefsson  <jas@extundo.com>
-
-       * mm-util.el (mm-mime-mule-charset-alist): Encode mule-utf-8 as
-       utf-8, not eight-bit-control.
-
-       * imap.el (imap-shell-host, imap-default-user, imap-use-utf7)
-       (imap-log, imap-debug): Custom.
-       (imap-log-buffer, imap-debug-buffer): New constants.
-       (imap-kerberos4-open, imap-gssapi-open, imap-ssl-open)
-       (imap-network-open, imap-shell-open, imap-starttls-open)
-       (imap-send-command-1, imap-send-command, imap-arrival-filter)
-       (imap-debug): Use imap-*-buffer.
-
-       * nndoc.el (nndoc-article-type): Add mailman.
-       (nndoc-type-alist): Ditto.
-       (nndoc-mailman-type-p): New function.
-
-2001-09-28 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-xmas.el (gnus-article-x-face-command): Merge it into
-       gnus-art.el.
-
-2001-09-27  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-topic.el (gnus-topic-mode-map): Add catchup.
-       (gnus-topic-catchup-articles): New function. Suggested by Robin
-       S. Socha <robin-dated-1001857693.185e29@socha.net>.
-
-2001-09-27 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Gerd M\e,Av\e(Bllmann <gerd@gnu.org>.
-
-       * gnus-ems.el (gnus-article-display-xface): Insert xface after
-       previous ones.
-
-2001-09-27 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Daiki Ueno  <ueno@unixuser.org>
-
-       * gnus-sum.el (gnus-summary-show-article): The arglist of
-       detect-coding-region is incompatible.
-
-2001-09-26 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Katsuhiro Hermit Endo <hermit@koka-in.org>
-
-       * gnus-group.el (gnus-group-delete-group): Typo.
-
-2001-09-26  Simon Josefsson  <jas@extundo.com>
-
-       * nnmail.el (nnmail-expiry-target-group): Add doc warning.
-
-       * nnimap.el (nnimap-expiry-target): Use temp buffer.
-
-2001-09-26 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-cus.el (gnus-group-parameters): Display as sexp.
-
-2001-09-22  Simon Josefsson  <jas@extundo.com>
-
-       * nnml.el (nnml-open-marks): Remove unpropagatable marks.
-
-       * nnfolder.el (nnfolder-open-marks): Ditto.
-
-       * gnus-sum.el (gnus-article-unpropagatable-p): New function.
-       (gnus-update-marks): Use it.
-       (gnus-update-marks): Use `gnus-article-mark-to-type' instead of
-       hardcoded list.
-
-       * gnus.el (gnus-article-special-mark-lists): Add killed.
-       (gnus-article-unpropagated-mark-lists): New constant.
-
-2001-09-22  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-mode-hook): Add gnus-pick-mode as
-       custom option.
-
-2001-09-23  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-draft.el (gnus-draft-setup): Add mark in backend as well.
-
-2001-09-23 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-button-mailto): Hack save-selected-window-window.
-
-2001-09-22  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-group.el (gnus-group-sort-function): Fix customize type to
-       accept lists of functions.
-
-2001-09-20  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-group-catchup): Update expire marks in
-       backend.  Also, if ALL also set expire marks on tick/dormant.
-
-2001-09-20  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-tab-body-function): New variable.
-       * message.el (message-tab): Use it.
-
-2001-09-19  Sam Steingold  <sds@gnu.org>
-
-       * gnus-win.el (gnus-buffer-configuration): Respect
-       `gnus-bug-create-help-buffer'.
-
-2001-09-18  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-spec.el (gnus-correct-pad-form): Re-revert.
-       (gnus-parse-simple-format): Re-revert.
-
-2001-09-16  Katsuhiro Hermit Endo  <hermit@koka-in.org>
-       Trivial patch.
-
-       * gnus-spec.el (gnus-parse-complex-format): Don't fold search
-       case.  (Thanks to Daiki Ueno <ueno@unixuser.org>.)
-
-2001-09-18  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-spec.el (gnus-correct-pad-form): Remove until papers are
-       signed.
-       (gnus-parse-simple-format): Don't use it.
-
-2001-09-17  Miles Bader  <miles@gnu.org>
-
-       * 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  <zsh@cs.rochester.edu>
-
-       * gnus-srvr.el (gnus-server-mode): Fix bogus fontification.
-       From Gerd M\e,Av\e(Bllmann <gerd@gnu.org>.
-
-2001-09-17  Didier Verna  <didier@xemacs.org>
-
-       * nndiary.el: version 0.2-b14.
-       * gnus-diary.el (gnus-diary-check-message): fix `read-string'
-       compatibility problem with XEmacs 21.1.
-
-2001-09-15  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-group-line-format): Document %c.
-
-       * nnml.el (nnml-parse-head): Handle CRLF files.
-       (nnml-generate-nov-file): Ditto.
-       (nnml-retrieve-headers): Ditto.
-
-2001-09-15  Michael Welsh Duggan  <md5i@cs.cmu.edu>
-
-       * gnus-spec.el (gnus-parse-format): Don't treat %c as %C.
-
-2001-09-13  Martin Kretzschmar  <Martin.Kretzschmar@inf.tu-dresden.de>
-
-       * gnus-spec.el (gnus-correct-substring): Still stopped one
-       character before we wanted (never included last character).
-       (gnus-tilde-max-form, gnus-tilde-cut-form) Made readable again,
-       add missing "," (once per function)
-
-2001-09-14  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-start.el (gnus-group-mode-hook): Moved from gnus-group
-       (otherwise e.g. gnus-agentize in .gnus overrides the customized
-       default before gnus-group is loaded and the variable set.)
-
-       * nnimap.el (nnimap-request-set-mark): Do not store bookmark,
-       killed or unsent marks.
-
-       * gnus-draft.el (gnus-draft-setup): Don't set mark when there
-       isn't an article to set it on (e.g. when you `a' in a group).
-
-2001-09-12  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
-
-       * mm-util.el (mm-charset-synonym-alist): add windows-1250 so we
-       can read e-mails from Microsoft Outlook users not using ISO
-       8859-2 character set.
-
-2001-09-12 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-diary.el: Minor modifications to avoid warnings.
-       (gnus-summary-misc-menu): defvar.
-       (gnus-diary-check-message): Use gnus-point-at-eol.
-       (gnus-diary-kill-entire-line): eval-and-compile.
-
-2001-09-12  Didier Verna  <didier@xemacs.org>
-
-       * nndiary.el: new version (0.2-b13).
-       * nndiary.el (nndiary-mail-sources): doc update.
-       * nndiary.el (nndiary-split-methods): ditto.
-       * nndiary.el (nndiary-request-accept-article-hooks): New.
-       * nndiary.el (nndiary-request-accept-article): use it, check
-       message validity.
-       * nndiary.el (nndiary-get-new-mail): changed default to nil.
-       * nndiary.el (nndiary-schedule): fix bug (misplaced
-       condition-case): it didn't return nil on error.
-       * gnus-diary.el: new version.
-       * gnus-diary.el (gnus-diary-summary-line-format): removed %I.
-       * gnus-diary.el (gnus-diary-header-value-history): New.
-       * gnus-diary.el (gnus-diary-narrow-to-headers): New.
-       * gnus-diary.el (gnus-diary-add-header): New.
-       * gnus-diary.el (gnus-diary-check-message): New.
-       * 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  <tsuchiya@namazu.org>
-
-       * gnus-sum.el (gnus-select-newsgroup): Make
-       `gnus-current-select-method' buffer-local.
-
-       * gnus-art.el (gnus-request-article-this-buffer): Refer
-       `gnus-current-select-method' in the current summary buffer.
-
-2001-09-10  Simon Josefsson  <jas@extundo.com>
-       From Daniel Pittman <daniel@rimspace.net>
-
-       * gnus-spec.el (gnus-correct-pad-form): Fix.
-
-2001-09-09  Simon Josefsson  <jas@extundo.com>
-
-       * mm-decode.el (mm-inline-media-tests): Add
-       application/x-emacs-lisp.
-       (mm-attachment-override-types): Add
-       application/{x-,}pkcs7-signature.
-
-       * gnus-srvr.el (gnus-server-mode-hook, gnus-server-exit-hook)
-       (gnus-server-line-format, gnus-server-mode-line-format)
-       (gnus-server-browse-in-group-buffer): Customize.
-
-2001-09-08 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnml.el (nnml-marks-changed-p): Typo.
-       (nnml-save-marks, nnml-open-marks): Use gnus-sethash.
-       (nnml-marks-changed-p): Use gnus-gethash.
-       (nnml-marks-modtime): Use gnus-make-hashtable.
-
-       * nnfolder.el (nnfolder-marks-changed-p): Typo.
-       (nnfolder-request-expire-articles, nnfolder-save-marks)
-       (nnfolder-open-marks): Typo.
-       (nnfolder-save-marks, nnfolder-open-marks): Use gnus-sethash.
-       (nnfolder-marks-changed-p): Use gnus-gethash.
-       (nnfolder-marks-modtime): Use gnus-make-hashtable.
-
-2001-09-08  Simon Josefsson  <jas@extundo.com>
-
-       * nnfolder.el (nnfolder-marks-modtime): New variable.
-       (nnfolder-marks-changed-p): New function.
-       (nnfolder-save-marks, nnfolder-open-marks): Save modtime.
-       (nnfolder-request-update-info): Don't update if marks didn't change.
-
-       * nnml.el (nnml-marks-modtime): New variable.
-       (nnml-marks-changed-p): New function.
-       (nnml-save-marks, nnml-open-marks): Save modtime.
-       (nnml-request-update-info): Don't update if marks didn't change.
-
-       * gnus-agent.el (gnus-agent-any-covered-gcc)
-       (gnus-agent-add-server, gnus-agent-remove-server): Use
-       gnus-agent-method-p.
-
-       * gnus-art.el (gnus-buttonized-mime-types): New variable.
-       (gnus-unbuttonized-mime-type-p): Use it.
-
-       * gnus-agent.el (gnus-agent-fetch-group): If online, actually
-       fetch group.
-
-2001-09-08  Simon Josefsson  <jas@extundo.com>
-       From Daniel Pittman <daniel@rimspace.net>
-
-       * gnus-spec.el (gnus-correct-pad-form): New function.
-       (gnus-parse-simple-format): Use it.
-
-2001-09-07  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-group-sort-groups): Unmark all groups.
-       (gnus-group-sort-selected-groups): Ditto.  Suggested by Harry
-       Putnam <reader@newsguy.com>.
-       (gnus-group-sort-selected-groups): Touch dribble file.
-
-2001-09-07 Raja R Harinath  <harinath@cs.umn.edu>
-
-       * nnml.el (nnml-filenames-are-evil): New variable.
-       (nnml-article-to-file-alist): Rename to ...
-       (nnml-current-group-article-to-file-alist): ... this.
-       Respect `nnml-filenames-are-evil'.
-       (nnml-active-number): Update.
-       (nnml-update-file-alist): Update.
-       (nnml-request-article): Use nnheader-article-to-file-alist.
-       (nnml-request-rename-group): Likewise.
-
-2001-09-06  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-sum.el (gnus-summary-insert-line): Fix.
-
-2001-09-06  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.umu.se>
-
-       * gnus-sum.el: Bind g-s-t-s to "W g".
-       * gnus-sum.el (gnus-summary-make-menu-bar): Add g-s-t-s.
-       * gnus-sum.el (gnus-summary-toggle-smiley): New function. Toggles
-       display of graphical smilies.
-
-2001-09-07 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-setup-news): A typo.
-       From Bill White <billw@wolfram.com>.
-
-2001-09-06  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-insert-line): Insert forwarded, recent
-       and unseen marks.
-
-2001-09-05  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * nnmail.el (nnmail-split-fancy): Document `junk'.
-
-2001-09-04  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-search): Don't error if server is broken.
-
-2001-09-02  Benjamin Rutt  <brutt@bloomington.in.us>
-
-       * nnmbox.el (nnmbox-find-article): Fix infinite loop when
-       searching for an article that isn't in the mbox.
-
-2001-09-02 23:12:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnslashdot.el (nnslashdot-retrieve-headers-1): Get references
-       right, and get all the comments.
-
-2001-09-02  Simon Josefsson  <jas@extundo.com>
-       Suggested by Dan Christensen <jdc+news@uwo.ca>
-
-       * nnfolder.el (nnfolder-request-update-info): Fix message.
-
-       * nnml.el (nnml-request-update-info): Ditto.
-
-2001-09-01  Simon Josefsson  <jas@extundo.com>
-
-       * nnml.el (nnml-request-expire-articles): Also bind
-       `nnml-current-group' and `nnml-article-file-alist' when using
-       expiry-target. (Otherwise nnml will be in a inconsistent internal
-       state causing all kind of problems.)
-       (nnml-request-expire-articles): If `nnml-article-to-file' or
-       `file-attributes' failes, return article as un-expirable instead
-       of treating it as expired.
-
-2001-08-31  Sam Steingold  <sds@gnu.org>
-
-       * imap.el (imap-mailbox-examine, imap-mailbox-examine-1): Fix a
-       typo: `exmine' --> `examine'.
-
-2001-08-30 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nndoc.el (nndoc-forward-type-p): It is not a digest.
-
-2001-08-30 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnml.el (nnml-check-directory-twice): Remove.
-       (nnml-retrieve-headers): Ditto.
-       (nnml-article-to-file): Use nnheader-directory-files-is-safe.
-
-2001-08-30  Andrew Innes  <andrewi@gnu.org>
-
-       * nnheader.el (nnheader-directory-files-is-safe): No need to read
-       directory twice on Windows, or on GNU Emacs-21.
-
-2001-08-30  Andrew Innes  <andrewi@gnu.org>
-
-       * nnml.el (nnml-request-article): Use nnml-article-to-file-alist.
-       (nnml-request-rename-group): Ditto.
-       (nnml-active-number): Ditto.
-       (nnml-request-create-group): Use nnml-directory-articles.
-       (nnml-request-expire-articles): Use nnml-directory-articles, which
-       gets list from nov database if available.
-       (nnml-get-nov-buffer): New function.
-       (nnml-open-nov): Use it.
-       (nnml-update-file-alist): Use nnml-article-to-file-alist, which
-       gets alist from nov database if available.
-       (nnml-directory-articles): New function.
-       (nnml-article-to-file-alist): New function.
-
-2001-08-30  Andrew Innes  <andrewi@gnu.org>
-
-       * mm-decode.el (mm-display-external): Use `name' as filename, if
-       `filename' attribute is not present.
-
-2001-08-30  Andrew Innes  <andrewi@gnu.org>
-
-       * mail-source.el (mail-source-flash): New defcustom.
-       (mail-source-new-mail-p): Ring visible bell if appropriate.
-       (mail-source-start-idle-timer): Use unwind-protect to ensure idle
-       timer is cleared even if mail check signals an error.
-
-2001-08-29 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-move-article): Only update marks of
-       type 'list.
-
-2001-08-29 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * flow-fill.el (fill-flowed): eol might be point-max.
-
-2001-08-27  Simon Josefsson  <jas@extundo.com>
-
-       * nnml.el (nnml-request-update-info): Fix message.
-       (nnml-open-marks): Ditto.
-
-       * nnfolder.el (nnfolder-request-update-info):
-       (nnfolder-open-marks): Fix message.
-
-2001-08-25  Simon Josefsson  <jas@extundo.com>
-
-       * nnfolder.el (nnfolder-save-marks): Don't create directory named
-       after group in ~/.
-
-2001-08-25  Simon Josefsson  <jas@extundo.com>
-       From Andreas Jaeger  <aj@suse.de>
-
-       * nnfolder.el (nnfolder-open-marks): Fix typo.
-       * nnml.el (nnml-open-marks): Likewise.
-
-2001-08-25  Simon Josefsson  <jas@extundo.com>
-
-       Make nnfolder groups self-contained as far as marks are concerned.
-
-       * nnfolder.el (nnfolder-marks-directory, nnfolder-marks-is-evil)
-       (nnfolder-marks, nnfolder-marks-file-suffix): New variables.
-       (nnfolder-open-server): Make marks directory.
-       (nnfolder-request-delete-group): Delete marks file.
-       (nnfolder-request-delete-group): Check of nov/marks file exist
-       before deleting.
-       (nnfolder-request-rename-group): Rename marks file.
-       (nnfolder-request-rename-group): Only rename nov/mark if they exists.
-       (nnfolder-request-set-mark, nnfolder-request-update-info)
-       (nnfolder-group-marks-pathname, nnfolder-save-marks)
-       (nnfolder-open-marks): New functions.
-       (top-level): Require gnus.
-
-2001-08-25 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnweb.el (nnweb-type-definition): Use google raw file.
-       (nnweb-google-parse-1): Ditto.
-       (nnweb-google-identity): Ditto.
-       (nnweb-reference-wash-article): Move nnweb-decode-entities here.
-       (nnweb-altavista-wash-article): Ditto.
-       (nnweb-request-article): Remove nnweb-decode-entities.
-
-       * nnml.el: Require 'gnus.
-
-2001-08-25  Simon Josefsson  <jas@extundo.com>
-
-       * nnml.el (nnml-marks-is-evil): Add doc.
-
-2001-08-25  Simon Josefsson  <jas@extundo.com>
-
-       * nnml.el (nnml-save-marks): Wrap saving marks in a
-       condition-case, to allow user to start Gnus if saving marks failed
-       for some reason.
-
-2001-08-24 16:05:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-spec.el (gnus-compile): Don't compile gnus-version.
-
-       * gnus-group.el (gnus-update-group-mark-positions): Bind
-       gnus-group-update-hook to nil.
-
-2001-08-24 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-generate-mime-1): Force as multibyte string.
-
-2001-08-24 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-insert-line)
-       (gnus-summary-prepare-threads): gnus-tmp-lines should be a string.
-       From Martin Kretzschmar <Martin.Kretzschmar@inf.tu-dresden.de>
-
-       * gnus-spec.el (gnus-correct-substring): Take optional END.
-
-       * nnrss.el (nnrss-request-article): Remove \n.
-       (nnrss-retrieve-headers): Lines number is -1.
-
-2001-08-24  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-group.el (gnus-info-clear-data): Call
-       nnfoo-request-set-mark to propagate marks.  Fix bug:
-       `gnus-group-update-line' doesn't update read range unless we call
-       `gnus-get-unread-articles-in-group' first.
-
-       * nnimap.el (nnimap-request-set-mark): Don't propagate seen flags
-       to server.
-
-2001-08-23 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-create-info-command): Return an interactive
-       function.
-
-2001-08-23 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Katsumi Yamaoka <yamaoka@jpl.org>
-
-       * gnus-spec.el (gnus-parse-complex-format): Use equal.
-
-2001-08-23 18:43:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-select-newsgroup): Use it.
-
-       * gnus-util.el (gnus-not-ignore): New function.
-
-       * lpath.el (featurep): Don't fbind char-int.
-
-       * gnus-util.el (gnus-create-info-command): New function.
-
-       * gnus-group.el (gnus-group-edit-group): Make C-c C-i go to the
-       right node.
-
-       * gnus-sum.el (gnus-select-newsgroup): Clean up.
-       (gnus-summary-limit-children): Use 'identity instead of `all'.
-       (gnus-summary-limit-to-display-predicate): New command and
-       keystroke.
-
-2001-08-23 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-group-alist): Use fm-releases.rdf.
-
-       * gnus-spec.el (gnus-format-specs): Miss a right parenthesis.
-
-2001-08-23 18:43:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-spec.el: Add the Gnus version.
-       (gnus-update-format-specifications): If the Gnus version changes,
-       nix out the format spec cache.
-
-       * gnus.el (gnus-continuum-version): Made into a command and
-       optionalize the VERSION.
-
-       * gnus-spec.el (gnus-parse-complex-format): Remove %C specs from
-       the start of the lines.
-
-2001-08-22 00:06:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-visual-p): Define function before use of
-       function.
-
-2001-08-21 23:28:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-adjust-marked-articles): Use new variable.
-       (gnus-article-mark-to-type): New function.
-       (gnus-update-missing-marks): Only update marks of type 'list.
-
-       * gnus.el (gnus-article-special-mark-lists): New variable.
-
-2001-08-21 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-limit-children): Check 'all.
-       (gnus-select-newsgroup): Still use 'all.
-       (gnus-summary-initial-limit): Comparing with 'all.
-
-2001-08-20 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-activate-group): If dont-check, don't update
-       active.
-
-2001-08-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnslashdot.el (nnslashdot-retrieve-headers-1): Replace
-       nnslashdot-*-retrieve-headers.
-       (nnslashdot-request-article): Fix for slashcode 2.2.
-       (nnslashdot-make-tuple): New function.
-       (nnslashdot-read-groups): Use it.
-
-2001-08-20 01:34:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-expand-group-parameters): Don't alter the variable
-       list.
-
-       * gnus-sum.el (gnus-summary-move-article): Don't select article.
-
-2001-08-20  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-msg.el (gnus-inews-do-gcc): If archive server can't be
-       opened, error instead of continuing (and exploding later).
-
-2001-08-20 01:34:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus.el (gnus-expand-group-parameters): Return the parameter
-       list.
-
-       * gnus-sum.el (gnus-summary-show-article): Doc fix.
-       (gnus-summary-show-article): Guess at charset if required.
-
-       * gnus-spec.el (gnus-correct-substring): Stopped one character
-       before we wanted.
-
-2001-08-19  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
-
-       * earcon.el (earcon-auto-play): Remove unused option.
-
-2001-08-19 16:14:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-score.el (gnus-score-headers): Move the "Scoring..."
-       message down in levels, since it happens very fast.
-
-       * smiley-ems.el (smiley-update-cache): Respect the symbol version
-       of smiley-regexp-alist.
-
-       * mm-view.el (mm-inline-text): Ignore vcard errors.
-
-       * gnus-art.el (gnus-ignored-headers): Added more junk headers.
-
-       * gnus-score.el (gnus-all-score-files): Use append instead of
-       nconc.
-
-       * gnus.el (gnus-splash-face): Doc fix.
-
-       * mm-decode.el (mm-mailcap-command): Use
-       mm-path-name-rewrite-functions.
-       (mm-path-name-rewrite-functions): New variable.
-
-       * gnus-spec.el (gnus-parse-complex-format): React to ?=.
-       (gnus-complex-form-to-spec): Insert tab.
-       (gnus-spec-tab): New function.
-
-       * gnus-sum.el (gnus-select-newsgroup): Set the marks before
-       entering the group.
-
-       * gnus-spec.el (gnus-complex-form-to-spec): Insert Lisp to match
-       the positional spec.
-       (gnus-parse-complex-format): React to %C.
-
-       * gnus-ems.el (gnus-char-width): Moved here.
-
-       * gnus-sum.el (gnus-select-newsgroup): Set
-       gnus-newsgroup-articles.
-       (gnus-unseen-mark): New variable.
-       (gnus-newsgroup-unseen): Ditto.
-       (gnus-newsgroup-seen): Ditto.
-       (gnus-adjust-marked-articles): Use them.
-       (gnus-update-marks): Use them.
-       (gnus-summary-update-secondary-mark): Display.
-       (gnus-summary-prepare-threads): Display.
-
-       * gnus-msg.el (gnus-inews-group-method): Use and return the
-       method, not the server.
-
-2001-08-19  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-srvr.el (gnus-server-agent-face): New.
-       (gnus-server-agent-face): New.
-       (gnus-server-mode): Turn on font-lock-mode.
-
-       * gnus.el (gnus-server-visual): Add defgroup.
-
-2001-08-19  Simon Josefsson  <jas@extundo.com>
-       From Joe Casadonte <jcasadonte@northbound-train.com>
-
-       * gnus-srvr.el (gnus-server-opened-face, gnus-server-closed-face,
-       gnus-server-denied-face): New.
-       (gnus-server-opened-face, gnus-server-closed-face,
-       gnus-server-denied-face): New.
-       (gnus-server-font-lock-keywords): Add.
-
-2001-08-19  Simon Josefsson  <jas@extundo.com>
-
-       * nnml.el (nnml-request-set-mark): Return nil.
-       (nnml-save-marks): Use nnml-possibly-create-directory.
-       (nnml-open-marks): Only work in temp buffer when inserting/reading
-       .marks file.
-
-2001-08-18 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-expand-group-parameters): Fix.
-
-       * gnus-spec.el (gnus-char-width): New function.
-       (gnus-correct-substring, gnus-correct-length): Use it.
-
-       * message.el (message-required-mail-headers): Fix doc.
-
-2001-08-18 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-group-make-articles-read): gnus-request-set-mark.
-
-       * mm-decode.el (mm-save-part-to-file): Insert the handle.
-
-2001-08-18 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnslashdot.el (nnslashdot-threaded-retrieve-headers):
-       slashdot 2.2 (not fully fixed yet).
-       (nnslashdot-request-article): Ditto.
-
-2001-08-18  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-util.el (gnus-remassoc, gnus-update-alist-soft): Moved from
-       nnimap.
-
-       * nnimap.el (nnimap-remassoc, nnimap-update-alist-soft): Moved to
-       gnus-util.
-       (nnimap-request-update-info-internal): Use new functions.
-
-       * nnml.el (nnml-request-set-mark, nnml-request-update-info): Use
-       new functions.
-
-2001-08-18  Simon Josefsson  <jas@extundo.com>
-
-       Make nnml groups self-contained as far as marks are concerned.
-
-       * nnml.el (nnml-request-delete-group): Delete marks file.
-       (nnml-request-rename-group): Move marks file.
-       (nnml-marks-file-name, nnml-marks-is-evil, nnml-marks): New server
-       variables.
-       (nnml-request-set-mark, nnml-request-update-info): New server
-       functions.
-       (nnml-save-marks, nnml-open-marks): New functions.
-
-2001-08-18  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-sum.el (gnus-summary-move-article): Use `add' instead of
-       `set' when setting marks.
-
-2001-08-17 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-info-find-node): Take an argument.
-
-       * gnus-art.el (gnus-button-handle-info): New function.
-       (gnus-url-unhex-string): Replace "+" with " ".
-
-2001-08-17 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-check-news-header-syntax): Check bad From.
-
-2001-08-18 00:14:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-spec.el (gnus-correct-length): New function.
-       (gnus-correct-substring): New function.
-       (gnus-tilde-max-form): Use it.
-
-2001-08-17  Nevin Kapur  <nevin@jhu.edu>
-
-       * nnmh.el: Docstring changes as below.
-
-       * nnml.el: Docstring changes as below.
-
-       * nnbabyl.el: Docstring changes as below.
-
-       * nnmbox.el: Docstring changes as below.
-
-       * nnfolder.el: Added docstrings identifying each virtual server
-       parameter.
-
-2001-08-18  Simon Josefsson  <jas@extundo.com>
-
-       * mml.el (mml-menu): Collapse Attach, Insert and Security submenu.
-
-2001-08-17  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.kth.se>
-
-       * message.el: rename "Abort Message" to "Postpone Message".
-       Remove "Attach file as MIME" from Message menu, it's already in
-       the MIME menu.
-
-2001-08-17 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * smime.el (smime-point-at-eol): eval-and-compile.
-       (smime-make-temp-file): New function.
-       (smime-sign-region, smime-encrypt-region, smime-decrypt-region):
-       Use it.
-
-2001-08-17 10:41:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agent-fetch-group): Go online if offline.
-       (gnus-agent-summary-fetch-group): New command and keystroke.
-
-       * gnus-art.el (gnus-insert-mime-button): Tiny clean-up.
-       (gnus-mime-display-security): Make it respect
-       gnus-unbuttonized-mime-type-p.
-
-       * gnus-sum.el (gnus-articles-to-read): Comments.
-       (gnus-article-marked-p): New function.
-       (gnus-summary-display-make-predicate): New function.
-       (gnus-select-newsgroup): Use them.
-
-       * mm-decode.el (mm-save-part-to-file): Made it not error.
-
-2001-08-17  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-wait-for-tag): If process-status isn't open or
-       run, return nil instead of sit-for looping.
-
-2001-08-17 10:41:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * lpath.el (featurep): fbind xml-parse-region.
-
-       * gnus.el (gnus-message-archive-method): Default to "archive".
-       (gnus-message-archive-method): Doc fix.
-       (gnus-parameters-get-parameter): Cleaned up.
-       (gnus-expand-group-parameter): New function.
-
-       * gnus-start.el (gnus-setup-news): Push the archive server only
-       the server list.
-
-       * mml.el (mml-menu): Changed name to "Attachments".
-
-       * mm-decode.el (mm-destroy-postponed-undisplay-list): Only message
-       when there is something to detroy.
-
-2001-05-21 17:11:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-srvr.el (gnus-server-browse-in-group-buffer): Default to
-       nil.
-
-2001-08-15  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-delay.el (gnus-delay-article): Allow "01:23" time spec,
-       which specifies a time today or tomorrow.
-
-2001-08-15  Simon Josefsson  <jas@extundo.com>
-       From Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk)
-
-       * gnus-agent.el (gnus-agent-make-mode-line-string)
-       (gnus-agent-toggle-plugged): Use new API.
-
-2001-08-14  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-delay.el (gnus-delay-send-drafts): Fix check whether
-       deadline has expired.
-
-2001-08-12  Simon Josefsson  <jas@extundo.com>
-       Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE
-
-       Support `recent' mark indicating newly arrived messages (to
-       separate from old but unread messages).
-
-       * nnimap.el (nnimap-retrieve-groups): Push dummy article into
-       `nnmail-split-history' if recent is > 0.
-       (nnimap-request-update-info-internal): Update `recent' marks.
-       (nnimap-request-set-mark): Never set `recent' marks.
-       (nnimap-mark-to-predicate-alist, nnimap-mark-to-flag-alist): Add
-       recent.
-
-       * gnus-sum.el (gnus-recent-mark): New mark.
-       (gnus-newsgroup-recent): New variable.
-       (gnus-summary-local-variables): Add gnus-newsgroup-recent.
-       (gnus-summary-prepare-threads): Mark recent articles.
-       (gnus-summary-add-mark): Support recent.
-       (gnus-summary-update-secondary-mark): Support recent.
-
-       * gnus.el (gnus-article-mark-lists): Add recent.
-
-2001-08-12  Simon Josefsson  <jas@extundo.com>
-
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Returns
-       whether successful decoding took place.  Add doc.
-
-2001-08-12  Simon Josefsson  <jas@extundo.com>
-       Suggested by Per Abrahamsen <abraham@dina.kvl.dk>
-
-       * gnus.el (gnus-summary-line-format, gnus-parameters):
-       * gnus-gl.el (gnus-summary-grouplens-line-format):
-       * gnus-salt.el (gnus-summary-pick-line-format):
-       * gnus-spec.el (gnus-format-specs): %n is 23 chars.
-
-2001-08-11 09:40:00  Karl Kleinpaste  <karl@charcoal.com>
-       Committed by Kai Gro\e,b_\e(Bjohann.
-
-       * gnus-score.el (gnus-score-string): Fix `match' regexp
-       for `extra' header case.
-
-2001-08-10 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmbox.el (nnmbox-read-mbox): No warning.
-
-2001-08-10 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nndoc.el (nndoc-article-type): Fix doc.
-       (nndoc-generate-article-function): New variable.
-       (nndoc-dissection-function): New variable.
-       (nndoc-type-alist): Add oe-dbx.
-       (nndoc-oe-dbx-type-p): New function.
-       (nndoc-oe-dbx-dissection): New function.
-       (nndoc-oe-dbx-generate-article): New function.
-
-2001-08-11  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-delay.el (gnus-delay-send-drafts): Cleaner way to check
-       whether deadline has been reached.  Patch from Dan Nicolaescu
-       <dann@godzilla.ics.uci.edu>.
-
-2001-08-10 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-ml.el (turn-on-gnus-mailing-list-mode): Use
-       gnus-group-find-parameter. Suggested by Janne Rinta-Manty
-       <rintaman@cs.Helsinki.FI>.
-
-       * mail-source.el (mail-source-movemail): The error buffer is
-       modified, but nothing in it.
-
-2001-08-10 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-bogus-system-names): New variable.
-       (message-make-fqdn): Use it.
-
-2001-08-09 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nndraft.el (nndraft-request-group): Use
-       nndraft-auto-save-file-name.
-
-2001-08-09  Simon Josefsson  <jas@extundo.com>
-
-       * mm-view.el (mm-view-pkcs7-decrypt): Operate in current buffer.
-       Don't ask whether to decrypt.  Just leave result in buffer (don't
-       call mm).
-
-       * mm-decode.el (mm-dissect-buffer): Possibly verify/decrypt single
-       parts as well.
-       (mm-inline-media-tests): Ignore application/{x-,}pkcs7-mime.
-       (mm-possibly-verify-or-decrypt): Support application/{x-,}pkcs7-mime.
-
-2001-08-09  Simon Josefsson  <jas@extundo.com>
-
-       * mm-decode.el (mm-insert-part): Return decoding success status.
-       (mm-save-part-to-file): Error if decoding failed.
-
-2001-08-09 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-tab): Use indent-relative.
-       (message-mode): Don't bind indent-line-function to indent-relative.
-
-2001-08-09  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-get-reply-headers): Fix string. Suggested by
-       Christoph Conrad <cc@cli.de>.
-
-2001-08-08 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-tab): Use the current value of
-       indent-line-function.
-       (message-mode): Bind indent-line-function to indent-relative.
-
-2001-08-08  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-gssapi-auth-p, imap-kerberos4-auth-p): Also check
-       whether `imtest' is installed.
-
-2001-08-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       Trivial patch from Nuutti Kotivuori  <nuutti.kotivuori@smarttrust.com>
-
-       * 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  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * 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\e,Av\e(Bllmann
-       <gerd@gnu.org>.
-
-       * gnus-art.el (gnus-output-to-file): Bind file-name-coding-system.
-
-       * gnus-util.el (gnus-output-to-rmail): Ditto.
-       (gnus-output-to-mail): Ditto.
-
-       * nnmail.el (nnmail-pathname-coding-system): Set default to nil.
-
-2001-08-06  Florian Weimer  <fw@deneb.enyo.de>
-
-       * message.el (message-indent-citation): Use
-       `message-yank-cited-prefix' for empty lines.
-
-2001-08-05  Florian Weimer  <fw@deneb.enyo.de>
-
-       * message.el (message-indent-citation): Quote only lines starting
-       with ">" using `message-yank-cited-prefix'.
-
-2001-08-05  Nuutti Kotivuori  <nuutti.kotivuori@smarttrust.com>
-       Trivial patch.
-
-       * gnus-cache.el (gnus-cache-possibly-enter-article): Use
-       gnus-cache-fully-p.
-
-2001-08-04  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-cache.el (gnus-cache-possibly-update-active): Create active
-       file if it doesn't exist (by calling gnus-cache-read-active).
-
-2001-08-04  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-cache.el (gnus-cache-possibly-enter-article): Revert.
-       (gnus-cache-passively-or-fully-p): Removed.
-       (gnus-cache-fully-p): Fix it.
-
-       * mm-view.el (mm-pkcs7-signed-magic): Support more ASN.1 lengths.
-
-2001-08-04  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-cache.el (gnus-cache-fully-p)
-       (gnus-cache-passively-or-fully-p): New functions.
-       (gnus-cache-possibly-enter-article): Cosmetic change, use
-       `g-c-p-o-f-p'.
-       (gnus-cache-possibly-enter-article): Use `g-c-p-u-a'; last change
-       was bogus (`g-c-p-a-a' does not change active info, just change
-       the functions parameters).
-       (gnus-cache-possibly-remove-articles-1): Make sure articles are
-       not removed in groups that match `gnus-uncacheable-groups'.
-
-       Reported and modifications based on discussions with Nuutti
-       Kotivuori <nuutti.kotivuori@smarttrust.com>.
-
-2001-08-04  Simon Josefsson  <jas@extundo.com>
-       Trivial patch from Nuutti Kotivuori  <nuutti.kotivuori@smarttrust.com>
-
-       * gnus-cache.el (gnus-cache-possibly-update-active): New function;
-       calls `gnus-cache-update-active' if bounds has been extended.
-
-2001-08-04 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-security-verify-or-decrypt): Insert
-       before remove.
-       (gnus-mime-security-show-details): Ditto.
-
-2001-08-04  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * nnmail.el (nnmail-split-fancy-with-parent): Correct `mapconcat'
-       syntax.  Protect string-match against nil string and regexp.
-
-2001-08-03 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-find-charset-region): Remove control-1.
-
-2001-08-03 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-readable-p): Emacs 20 takes one argument.
-
-2001-08-04  Simon Josefsson  <jas@extundo.com>
-
-       * smime.el (smime-sign-region, smime-encrypt-region): Fix details
-       buffer.  Delete MIME-Version header.
-
-2001-08-03  Simon Josefsson  <jas@extundo.com>
-
-       * gnus-cache.el (gnus-cache-possibly-enter-article): The article
-       that is entered does not necessarily have the highest article
-       number in the group, so use `gnus-cache-possibly-alter-active'
-       instead of `gnus-cache-update-active'.
-
-2001-08-03 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-gpg-extract-signature-details): Don't barf.
-
-2001-08-03  Simon Josefsson  <jas@extundo.com>
-
-       * mml.el (mml-menu): Rename from MML to Mime. Collapse Security
-       menu.
-
-2001-08-02  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus.el (post-method): New group parameter.  It also provides
-       the user option `gnus-post-method-alist' and the internal function
-       `gnus-parameter-post-method'.
-
-       * gnus-msg.el (gnus-post-method): Bind the value of
-       `gnus-post-method' to the group parameter if it is defined.
-
-2001-08-02  Simon Josefsson  <jas@extundo.com>
-
-       * smime.el (smime-extra-arguments): Removed.
-       (smime-call-openssl-region): Don't use it.
-
-2001-08-02  Simon Josefsson  <jas@extundo.com>
-
-       * smime.el (smime-sign-region): Handle stderr.
-       (smime-encrypt-region): Ditto.
-
-       * mm-view.el (mm-pkcs7-signed-magic): Make it a regexp.  Don't
-       match the ASN.1 length bytes.
-       (mm-pkcs7-enveloped-magic): Ditto.
-       (mm-view-pkcs7-get-type): Don't regexp quote.
-
-2001-08-01 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Andreas Fuchs <asf@void.at>
-
-       * mml2015.el (mml2015-trust-boundaries-alist): Typo.
-
-2001-08-01 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-header-button-alist): References regexp.
-
-2001-08-01  Gerd Moellmann  <gerd@gnu.org>
-
-       * mm-view.el (autoload): Don't autoload `diff-mode' if it's
-       already fboundp.  Add INTERACTIVE arg to autoload form.
-
-2001-08-01 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnslashdot.el (nnslashdot-init): Add as gnus buffer.
-
-       * nnmail.el (nnmail-cache-open): Ditto.
-
-2001-07-31 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-button-fetch-group): Fix the regexp.
-
-2001-07-31  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-msg.el (gnus-post-method): Refer to `gnus-parameters'.
-
-2001-07-31 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       Originally from Pavel Jan\e,Am\e(Bk <Pavel@Janik.cz>
-
-       * gnus-agent.el (gnus-agent-make-mode-line-string): New function.
-       (gnus-agent-toggle-plugged): Use it.
-
-2001-07-31  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-startup-file-coding-system): Revert to binary.
-       (gnus-ding-file-coding-system): New variable.
-       (gnus-read-newsrc-el-file, gnus-save-newsrc-file)
-       (gnus-slave-save-newsrc): Use it.
-
-2001-07-31  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-delay.el (gnus-delay-initialize): Use standard define-key
-       syntax.
-
-2001-07-30 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       Originally from Andreas Fuchs <asf@void.at>
-
-       * mml2015.el (mml2015-trust-boundaries-alist): New variable.
-       (mml2015-gpg-pretty-print-fpr): New function.
-       (mml2015-gpg-extract-signature-details): More details, rename from
-       `m-g-e-from'.
-       (mml2015-gpg-verify): Use them.
-       (mml2015-gpg-clear-verify): Use them.
-
-2001-07-31  Simon Josefsson  <jas@extundo.com>
-
-       * mml-smime.el (mml-smime-sign, mml-smime-encrypt): Goto end of
-       buffer when done.
-
-2001-07-30  Simon Josefsson  <jas@extundo.com>
-
-       * smime.el (smime-call-openssl-region): Revert previous change,
-       just pass on buf to `call-process-region'.
-       (smime-verify-region): Doc fix.  Don't message stuff.  Use
-       `smime-new-details-buffer'.  Inserts error messages into buffer.
-       (smime-noverify-region): Ditto.
-       (smime-decrypt-region): Ditto.  Handles stderr separately.
-       (smime-verify-buffer, smime-noverify-buffer)
-       (smime-decrypt-buffer): Doc fix.
-       (smime-new-details-buffer): New function.
-       (smime-pkcs7-region, smime-pkcs7-certificates-region)
-       (smime-pkcs7-email-region): Use `smime-new-details-buffer'.
-       (smime-sign-region, smime-encrypt-region): Don't use
-       `insert-buffer'.
-
-       * mml-smime.el (mml-smime-verify): Fix security button strings.
-
-2001-07-30 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-save-part-and-strip): Save
-       gnus-article-mime-handles.
-
-2001-07-29  Simon Josefsson  <jas@extundo.com>
-
-       * mail-source.el (top-level): Require message for message-directory.
-       (mail-source-directory): Change default to message-directory.
-
-       * smime.el (smime-keys, smime-CA-directory, smime-CA-file)
-       (smime-certificate-directory, smime-openssl-program)
-       (smime-encrypt-cipher, smime-dns-server): Fix doc (leading "*").
-       (smime-extra-arguments): New variable.
-       (smime-dns-server): Fix customize group.
-       (smime-call-openssl-region): Use `smime-extra-arguments'.
-
-2001-07-29  Simon Josefsson  <jas@extundo.com>
-       From Vladimir Volovich <vvv@vsu.ru>
-
-       * smime.el (smime-call-openssl-region): Ignore stderr.
-
-2001-07-29  Simon Josefsson  <jas@extundo.com>
-       From Christoph Conrad <christoph.conrad@gmx.de>
-
-       * gnus-agent.el (gnus-agent-save-group-info): Don't destroy active
-       file.
-
-2001-07-29  Simon Josefsson  <jas@extundo.com>
-
-       * mm-view.el (mm-view-pkcs7-decrypt): Adhere to `mm-decrypt-option'.
-
-       Support S/MIME decryption.
-
-       * mm-decode.el (mm-inline-media-tests):
-       (mm-inlined-types):
-       (mm-automatic-display):
-       (mm-attachment-override-types): Add application/{x-,}pkcs7-mime.
-
-       * mm-view.el (mm-pkcs7-signed-magic):
-       (mm-pkcs7-enveloped-magic): New variables.
-       (mm-view-pkcs7-get-type): New function; identify PKCS#7 type.
-       (mm-view-pkcs7): New function; mm viewer for PKCS#7 blobs.
-       (mm-view-pkcs7-decrypt): New function; mm viewer for encrypted
-       PKCS#7 blobs.
-
-       * smime.el (smime-decrypt-region): Expand keyfile.
-
-2001-07-29  Simon Josefsson  <jas@extundo.com>
-
-       * nntp.el (nntp-open-ssl-stream): Don't mess with internal
-       `ssl.el' variables.
-
-       * gnus-agent.el (gnus-agent-save-group-info): Delete everything
-       but line instead of narrowing to it, because `nnmail-parse-active'
-       calls widen.  Thanks to Christoph Conrad
-       <christoph.conrad@gmx.de>.
-
-2001-07-29  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus.el (gnus-summary-line-format): Mention `gnus-sum-thread-*'
-       for %B spec.
-
-       * gnus-sum.el (gnus-summary-prepare-threads): If
-       gnus-sum-thread-tree-root is nil, use subject instead.
-       (gnus-sum-thread-tree-root, gnus-sum-thread-tree-single-indent)
-       (gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent)
-       (gnus-sum-thread-tree-leaf-with-other)
-       (gnus-sum-thread-tree-single-leaf): Documentation.
-       (gnus-sum-thread-tree-single-indent): Allow nil.
-
-2001-07-28 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-fill-paragraph): Do nothing if the user
-       wants filladapt-mode.
-
-2001-07-27 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-image-type-from-buffer): New function.
-       (mm-get-image): Use it.
-
-2001-07-27 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-large-newsgroup): Add doc, "If it is nil, ..."
-
-       * gnus-art.el (gnus-mime-view-all-parts): buffer-read-only covers
-       mm-display-parts too.
-
-2001-07-27 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-request-accept-article): Bind
-       nntp-server-buffer.
-
-       * nnmail.el (nnmail-parse-active): Read from buffer instead of
-       nntp-server-buffer.
-
-2001-07-27 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-check-news-header-syntax): Use
-       message-post-method.
-       (message-send-news): Bind message-post-method.
-
-2001-07-27 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-tweak-type-alist): New variable.
-       (mml-tweak-function-alist): New variable.
-       (mml-tweak-part): New function.
-       (mml-generate-mime-1): Use it.
-
-2001-07-26 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-request-accept-article): Replace
-       nnfolder-request-list.
-
-2001-07-27  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-open-server): Set nnimap-server-buffer if
-       nnoo-change-server failed to do it.
-
-2001-07-26 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-parameters): Make it customizable.
-
-2001-07-26 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mm-display-part): Narrow to point if eobp.
-
-       * message.el (message-set-auto-save-file-name): More
-       poor-system-types.
-
-       * mailcap.el (mailcap-parse-mimetypes): poor-system-types.
-
-       * gnus-ems.el (nnheader-file-name-translation-alist): M$Windows-NT
-       supports +.
-
-2001-07-26 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-readable-p): New function.
-       (mm-inline-media-tests): Fix the default testers.
-
-2001-07-26  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-version): Bump version number.
-
-2001-07-26 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Steven E. Harris <seh@speakeasy.org>
-
-       * nnheader.el (nnheader-translate-file-chars): cygwin32 is running
-       in M$Windows too.
-
-2001-07-26  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-delay.el (gnus-delay-send-drafts): Don't `error'.
-
-2001-07-25 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-bcklg.el (gnus-backlog-shutdown): Make interactive.
-
-       * mm-decode.el (mm-get-image): Guess then use the type.
-
-       * gnus-art.el (gnus-mime-view-part-as-type): Don't copy cache.
-
-2001-07-25 12:54:00  Danny Siu  <dsiu@adobe.com>
-
-       * 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  <zsh@cs.rochester.edu>
-       From Henrik Enberg <henrik@enberg.org>
-
-       * gnus-msg.el: Customization patch.
-
-2001-07-25 22:22:22  Raymond Scholz  <rscholz@zonix.de>
-
-       * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups): New
-       variable.
-       (nnmail-split-fancy-with-parent): Ignore certain groups.
-
-2001-07-25 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-byte-compile): New function.
-       (gnus-use-byte-compile): New variable.
-       (gnus-make-sort-function): Use it.
-
-       * nnmail.el (nnmail-get-new-mail): Use it.
-
-       * gnus-agent.el (gnus-category-make-function): Simple function or
-       compiled function.
-       (gnus-agent-fetch-group-1): Don't use (caaddr predicate).
-
-       * gnus-gl.el (bbb-build-rate-command): Remove quote before lambda.
-       * gnus-topic.el (gnus-topic-sort-topics-1): Ditto.
-       (gnus-topic-sort-topics-1): Use gnus-byte-compile.
-
-       * message.el (message-check-news-header-syntax): Remove quote.
-
-2001-07-24 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-use-mail-followup-to): `t' is not a
-       documented value.
-
-2001-07-24 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-display-arrow): Test fboundp.
-
-2001-07-24 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-encode.el (mm-encode-buffer): Don't use 7bit encoding if
-       there are long lines.
-
-2001-07-24  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * dgnushack.el (copy-list): New compiler macro.
-
-2001-07-24 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-bounce): If no Return-Path, the whole
-       content is considered as the original message.
-
-       * nnml.el (nnml-check-directory-twice): New variable.
-       (nnml-article-to-file): Use it.
-       (nnml-retrieve-headers): Hack it.
-
-2001-07-24 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-win.el (gnus-buffer-configuration): New configure.
-
-       * gnus-art.el (gnus-mm-display-part): Don't select-window if it is
-       not alive.
-
-       * mm-decode.el (mm-remove-part): Don't murder the current window (nil).
-       (mm-display-external): Use display-term configure.
-
-2001-07-24  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * 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  <zsh@cs.rochester.edu>
-       From Karl Kleinpaste <karl@charcoal.com>
-
-       * gnus-sum.el (gnus-summary-line-format-alist): Add %B.
-       (gnus-summary-prepare-threads): Ditto.
-
-       * gnus.el (gnus-summary-line-format): Add %B.
-
-2001-07-23 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-articles-to-read): Use gnus-group-decoded-name.
-
-       * mm-util.el (mm-string-as-multibyte): New function.
-
-       * nnmh.el (nnmh-request-list-1): Encode, not decode!
-
-2001-07-23 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-universal-coding-system): New variable.
-
-       * gnus-start.el (gnus-startup-file-coding-system): Use it.
-
-       * score-mode.el (score-mode-coding-system): Use it.
-
-2001-07-23  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-start.el (gnus-setup-news): Call
-       `gnus-check-bogus-newsgroups' just after the native server is
-       opened.
-
-2001-07-23  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * nnmail.el (nnmail-do-request-post): Util function to be used by
-       `nnchoke-request-post' for all nnmail-derived backends.
-
-       * nnml.el (nnml-request-post): Use it.
-
-       * gnus.el (gnus-valid-select-methods): nnml is a post-mail
-       backend, for it groks nnml-request-post.
-
-       * gnus-group.el (gnus-group-highlight, gnus-group-highlight-line):
-       Treat `mail-post' backends like `mail' backends, not like `news'
-       backends.
-
-2001-07-22 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-setup-message): make-local-hook.
-
-2001-07-22  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-delay.el (gnus-delay-article): Fix `read-string' for
-       XEmacs.  Allow more units.  Submitted by Karl Kleinpaste
-       <karl@charcoal.com>, slightly changed by Kai.
-
-       * message.el (message-check-news-header-syntax): When checking
-       whether the groups exist, check the right server based on
-       `gnus-post-method'.
-
-2001-07-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-delay.el: New file.
-
-2001-07-21 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-read-coding-system): Take two arguments.
-
-       * gnus-sum.el (gnus-summary-show-article): Use
-       mm-read-coding-system.
-
-       * gnus-art.el (article-de-quoted-unreadable):
-       (article-de-base64-unreadable, article-wash-html):
-       (gnus-mime-inline-part, gnus-mime-view-part-as-charset): Ditto.
-
-2001-07-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * nnml.el (nnml-request-post): New function.  Can be used for
-       annotations in nnml groups.
-
-2001-07-19  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * nntp.el (nntp-request-newgroups): Use UTC date for NEWGROUPS
-       command.
-
-       * gnus-start.el (gnus-find-new-newsgroups): Use
-       `message-make-date' instead of `current-time-string'.
-       (gnus-ask-server-for-new-groups): Ditto.
-       (gnus-check-first-time-used): Ditto.
-
-2001-07-20 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-score.el (gnus-home-score-file): nnheader-translate-file-chars.
-
-2001-07-18  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-shorten-references): Change `maxcount' and
-       `cut' to obey USEFOR draft 5.
-
-2001-07-12  Colin Walters  <walters@cis.ohio-state.edu>
-
-       * gnus-sum.el (gnus-summary-display-arrow): New variable.
-       (gnus-summary-set-article-display-arrow): New function.
-       (gnus-summary-goto-subject): Use it.
-
-2001-07-18 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-import-article): Insert date if
-       doesn't exist.
-
-2001-07-18 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-content-type-parameters): New variable.
-       (mml-content-disposition-parameters): New variable.
-       (mml-insert-mime-headers): Use them.
-       (mml-parse-1): Accept charset.
-
-2001-07-17 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-select-group): Doc fix.
-
-       * gnus-eform.el (gnus-edit-form-done): Return nil if end-of-file.
-
-2001-07-17  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * dgnushack.el (dgnushack-make-auto-load): Advise `make-autoload'
-       to handle `define-derived-mode'.
-
-2001-07-16 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From:  Stefan Monnier  <monnier@cs.yale.edu>
-
-       * message.el (message-mode): Use define-derived-mode.
-       (message-tab): message-completion-alist.
-
-       * imap.el (imap-interactive-login): Use make-local-variable.
-       (imap-open): Ditto.
-       (imap-authenticate): Ditto.
-
-       * gnus-msg.el (gnus-setup-message): Change-major-mode-hook.
-
-       * gnus-art.el (gnus-article-edit-mode): Use define-derived-mode.
-
-2001-07-16  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-citation-line-function): Refer to
-       gnus-cite-attribution-suffix.
-
-2001-07-15  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
-
-       * gnus-art.el,...: Error convention changes.
-
-2001-07-13 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-rebuild-thread): Count hidden lines too.
-
-2001-07-13 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-read-group-data): Nuke emacs-lisp-mode-hook.
-       (nnrss-read-server-data): Ditto.
-
-2001-07-13 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-setup.el (gnus-use-installed-gnus): Typo.
-       * Cleanup files.
-       From Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk).
-
-2001-07-13 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-summary-line-format): Add %o.
-
-       * gnus-sum.el (gnus-summary-pipe-output): Don't configure as pipe
-       unless shell outputs something.
-
-2001-07-13 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-boring-article-headers): Better doc.
-       (article-hide-headers): Better regexp.
-       Suggested by Matt Swift <swift@alum.mit.edu>.
-
-       * nnheader.el (nnheader-max-head-length): Better doc.
-       (nnheader-header-value): Skip spaces.
-       (nnheader-parse-head): Remove space.
-       Suggested by Matt Swift <swift@alum.mit.edu>.
-
-       * gnus-sum.el (gnus-summary-show-raw-article): New function.
-       (gnus-get-newsgroup-headers): Remove space.
-
-2001-07-12 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-msg-treat-broken-reply-to): Add force.
-       (gnus-summary-reply): Use it.
-       (gnus-summary-reply-broken-reply-to): New function.
-       (gnus-msg-force-broken-reply-to): New function.
-
-       * mm-view.el (mm-inline-text): Showing as text/plain when error.
-
-2001-07-12 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-draft.el (gnus-draft-setup): Restore gnus-newsgroup-name.
-
-2001-07-12 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-external-terminal-program): New variable.
-       (mm-display-external): Use it. Use term to display when no
-       window-system.
-
-2001-07-12  Bj\e,Av\e(Brn Torkelsson  <torkel@hpc2n.umu.se>
-
-       * gnus-srvr.el (gnus-browse-make-menu-bar): Changed one of the
-       Browse->Next entries to Browse->Prev
-
-2001-07-11 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-inews-do-gcc): Don't test gnus-alive-p.
-
-2001-07-11 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-encode.el (mm-content-transfer-encoding-defaults): Use base64
-       for the default encoding.
-
-       * nnrss.el (nnrss-url-field): New field.
-       (nnrss-request-article): Add newsgroups.
-
-       * nnfolder.el (nnfolder-read-folder): Force to use a multibyte buffer.
-
-2001-07-11 04:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nndraft.el (nndraft-request-restore-buffer): Don't remove Date.
-
-       * gnus-draft.el (gnus-draft-edit-message): Remove Date here.
-       (gnus-draft-setup): Remove backlog.
-
-2001-07-10  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
-
-       * gnus-logic.el, gnus-srvr.el, gnus-vm.el, nnheaderxm.el, nnoo.el:
-       Cleanup.
-
-2001-07-09 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-bug): Erase buffer.
-
-       * nnfolder.el (nnfolder-possibly-change-group): Don't create group.
-
-2001-07-09 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-attachment-override-p): Fix typo.
-
-2001-03-19 05:28:00  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-kill.el (gnus-execute): Work with the extra headers.
-       * gnus-sum.el (gnus-summary-execute-command): Ditto.
-
-2001-07-09 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-text): w3-coding-system-for-mime-charset
-       may not defined. From: Raja R Harinath <harinath@cs.umn.edu>.
-
-       * message.el (message-send-mail-real-function): New variable.
-       (message-send-mail-partially, message-send-mail):
-
-       * nngateway.el (nngateway-request-post): Use it.
-
-       * gnus-agent.el (gnus-agentize): Use it.
-
-       * nnsoup.el (nnsoup-old-functions, nnsoup-set-variables)
-       (nnsoup-revert-variables): Use it.
-
-2001-07-09  Colin Walters  <walters@cis.ohio-state.edu>
-
-       * mm-decode.el (mm-inline-media-tests): Default to displaying as
-       text/plain if the type doesn't match any other media types.
-       (mm-inlined-types): Doc fix.
-       (mm-display-inline): Revert previous change (now handled by a
-       default type in `mm-inline-media-tests'.
-       (mm-inlinable-p): Revive.
-       (mm-display-part): Call `mm-inlinable-p'.
-       (mm-attachment-override-p): Ditto.
-       (mm-inlined-p): Doc fix.
-
-       * gnus-art.el (gnus-mime-display-single): Call `mm-inlinable-p' as
-       well as `mm-inlined-p'.
-
-2001-07-09 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * 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  <zsh@cs.rochester.edu>
-       From  Paul Jarc <prj@po.cwru.edu>
-
-       * message.el (message-use-mail-followup-to): New variable.
-       (message-get-reply-headers): Use it.
-
-2001-07-04  Gerd Moellmann  <gerd@gnu.org>
-
-       * nnheader.el (nnheader-init-server-buffer): Make sure the
-       *nntpd* buffer is made multibyte instead of a random buffer.
-
-2001-07-09 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-get-newsgroup-headers-xover): Get headers only
-       when it returns headers.
-
-2001-07-07  Simon Josefsson  <jas@extundo.com>
-
-       * rfc2047.el (rfc2047-encode-message-header): Skip header when
-       trying to fold. Thanks to Colin Walters
-       <walters@cis.ohio-state.edu>
-
-2001-07-06  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-parse-address-list, imap-parse-flag-list)
-       (imap-parse-body-extension, imap-parse-body-ext, imap-parse-body):
-       Add information in `assert's.
-
-       * nnimap.el (nnimap-possibly-change-group): Ignore uidvalidity
-       changes. (From nnimaps' point of view, `nnimap-verify-uidvalidity'
-       and `nnimap-group-overview-filename', should handle all
-       change-of-uidvalidity related issues.  But there may be other
-       problems.)
-
-2001-07-05  Colin Walters  <walters@cis.ohio-state.edu>
-
-       * rfc2047.el (rfc2047-encode-message-header): Don't include the
-       header name when folding.
-
-2001-07-05  Colin Walters  <walters@cis.ohio-state.edu>
-
-       * mm-decode.el (mm-inlined-types): Document relationship with
-       `mm-inline-media-tests'.
-       (mm-display-inline): Default to displaying as plain text if no
-       inlining handler is available.
-       (mm-inlinable-p): Remove.
-       (mm-inlined-p): Don't call `mm-inlinable-p'.
-       (mm-automatic-display-p): Ditto.
-       (mm-attachment-override-p): Ditto.
-
-2001-07-04  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-importantize-dormant): New variable.
-       (nnimap-request-update-info-internal): Use it.
-       (nnimap-request-set-mark): Ditto.
-
-2001-07-04  Didier Verna  <didier@lrde.epita.fr>
-
-       * nntp.el (nntp-send-command): don't pass a buffer argument to
-       `point'. Only XEmacs accepts this.
-       * nntp.el (nntp-send-command-nodelete): ditto.
-       * nntp.el (nntp-send-command-and-decode): ditto.
-
-2001-07-04  Didier Verna  <didier@lrde.epita.fr>
-
-       * nntp.el (nntp-open-connection-function): doc update.
-       * nntp.el (nntp-pre-command): New.
-       * nntp.el (nntp-via-rlogin-command): New.
-       * nntp.el (nntp-via-telnet-command): New.
-       * nntp.el (nntp-via-telnet-switches): New.
-       * nntp.el (nntp-via-user-name): New.
-       * nntp.el (nntp-via-user-password): New.
-       * nntp.el (nntp-via-address): New.
-       * nntp.el (nntp-via-envuser): New.
-       * nntp.el (nntp-via-shell-prompt): New.
-       * nntp.el (nntp-open-telnet-stream): New.
-       * nntp.el (nntp-open-via-rlogin-and-telnet): New.
-       * nntp.el (nntp-open-via-telnet-and-telnet): New.
-       * nntp.el (nntp-wait-for): check for possibly echo'ed commands.
-       * nntp.el (nntp-send-command): ditto.
-       * nntp.el (nntp-send-command-nodelete): ditto.
-       * nntp.el (nntp-send-command-and-decode): ditto.
-
-2001-06-30  YAGI Tatsuya  <yagi@is.titech.ac.jp>
-       Trivial patch.
-
-       * gnus-start.el (gnus-check-first-time-used): Use `if' instead of
-       `when'.
-
-2001-07-03  Simon Josefsson  <jas@extundo.com>
-       From Nuutti Kotivuori <nuutti.kotivuori@smarttrust.com>
-
-       * flow-fill.el (fill-flowed): Use (1+ (point-at-eol)) instead.
-
-2001-07-03  Simon Josefsson  <jas@extundo.com>
-
-       * flow-fill.el (fill-flowed): If `fill-region' inserts empty line,
-       remove it (workaround XEmacs `fill-region' bug).
-
-2001-07-01  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-date-days-ago): Defeat locale.
-
-2001-06-28 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-format-error): New function.
-       (mml2015-mailcrypt-decrypt, mml2015-mailcrypt-clear-decrypt)
-       (mml2015-mailcrypt-verify, mml2015-gpg-clear-verify)
-       (mml2015-mailcrypt-clear-verify, mml2015-gpg-verify): Use it.
-
-2001-06-26 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-retrieve-headers): The description may not exist.
-       Suggested by Christoph Conrad <C.Conrad@cli.de>.
-
-       * gnus-sum.el (gnus-summary-set-local-parameters): Don't override
-       group variables.
-
-2001-06-25 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnslashdot.el (nnslashdot-write-groups): Use gnus-prin1.
-
-       * nnrss.el (nnrss-save-server-data): Bind print-level and print-length.
-       (nnrss-save-group-data): Ditto.
-
-       * gnus-agent.el (gnus-agent-save-alist): Ditto.
-
-2001-06-25  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-do-send-housekeeping): Narrow to headers.
-
-2001-06-24  Simon Josefsson  <jas@extundo.com>
-
-       * rfc2047.el (rfc2047-fold-region): The check to skip WSP
-       insertion when breaking lines looked for " \t" instead of "[ \t]".
-       (rfc2047-encode-message-header): Fold lines even if
-       no QP encoding is done.
-
-2001-06-23  Simon Josefsson  <jas@extundo.com>
-       From Samuel Tardieu <sam@inf.enst.fr>
-
-       * smime.el (smime-keys): Support additional certificates.
-       (smime-make-certfiles): New function.
-       (smime-sign-region): Use previous variables.
-       (smime-get-certfiles): New function.
-       (smime-sign-buffer): Use it.
-       (smime-verify-region): Support both CAfile and CApath.
-
-2001-06-23  Simon Josefsson  <jas@extundo.com>
-
-       * smime.el (smime-decrypt-region): Perhaps work.
-
-2001-06-22 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-copy-article-buffer): Typo.
-
-2001-04-06  Ralph Schleicher  <rs@nunatak.allgaeu.org>
-
-       * mm-decode.el (mm-save-part): Rewrite file name.
-       (mm-file-name-rewrite-functions): New variable.
-       (mm-file-name-delete-whitespace): New function.
-       (mm-file-name-trim-whitespace): New function.
-       (mm-file-name-collapse-whitespace): New function.
-       (mm-file-name-replace-whitespace): New variable and function.
-
-2001-06-22  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-make-date): Workaround locale for weekdays.
-
-2001-06-21 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-goto-body): Return nil if not found. (revert!)
-
-2001-06-21 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Fremlin <chief@bandits.org>
-
-       * message.el (message-goto-body): Some messages have no header.
-
-       * gnus-msg.el (gnus-copy-article-buffer): Use it.
-
-2001-06-21  Ralph Schleicher  <rs@nunatak.allgaeu.org>
-
-       * nnultimate.el (nnultimate-retrieve-headers): Date fix.
-
-2001-06-21 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-make-date): Add week day.
-       Suggested by Jason R. Mastaler <jason@mastaler.com>.
-
-2001-06-19  Simon Josefsson  <jas@extundo.com>
-
-       * message.el (message-yank-prefix): Doc fix.
-       (message-yank-cited-prefix): Ditto.
-       (message-delete-not-region): Keep citation prefix on first line,
-       if possible and appropriate.
-
-2001-06-19  Simon Josefsson  <jas@extundo.com>
-
-       * imap.el (imap-process-connection-type): New variable.
-       (imap-kerberos4-open, imap-gssapi-open): Use it.  This makes
-       recent `imtest's work completely (no line length issues), while
-       making making old `imtest's unusable.  Thanks to NAGY Andras
-       <nagya@inf.elte.hu> for his work.
-
-2000-12-30  NAGY Andras  <nagya@inf.elte.hu>
-
-       * imap.el (imap-ssl-program): Add -quiet to shut up
-       OpenSSL/SSLeay's internal debug talk.
-
-2001-06-19  Matt Armstrong  <matt@lickey.com>
-
-       * imap.el (imap-parse-flag-list): Workaround bug in Courier IMAP
-       server.
-
-2001-06-19 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmail.el (nnmail-article-buffer): New variable.
-       (nnmail-split-incoming): Use it.
-
-2001-06-15  Eli Zaretskii  <eliz@is.elta.co.il>
-
-       * qp.el (quoted-printable-decode-region): If called interactively,
-       use coding-system-for-read.
-
-2001-06-16 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-check-news-header-syntax): Check Reply-To.
-
-2001-06-16 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-parse-1): Use message options.
-
-       * message.el (message-do-fcc): Don't do anything if there is no
-       FCC.
-
-2001-06-16  Simon Josefsson  <jas@extundo.com>
-
-       * nnimap.el (nnimap-split-articles): Support 'junk to-groups.
-       (nnimap-expunge-search-string): New variable.
-       (nnimap-request-expire-articles): Use it.
-
-2001-06-15 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-send-mail-with-qmail): wrong exit status is
-       100 not 1. Reported by Paul Jarc <prj@po.cwru.edu>.
-
-2001-06-15 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-strip-multiple-blank-lines): Use
-       delete-region instead of replace-match.
-
-2001-06-14 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnweb.el (nnweb-google-parse-1): Fix Google content regexp.
-       (nnweb-google-wash-article): Ditto.
-
-2001-06-14 Ferenc Wagner  <wferi@bolyai1.elte.hu>
-
-       * nnweb.el (nnweb-google-parse-1): Fix Google url regexp.
-
-2001-06-13  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus.el (gnus-define-group-parameter): Don't quote the defcustom
-       specs.
-
-2001-06-13 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-email-address): Move it here.
-
-       * gnus-art.el (article-de-quoted-unreadable): Read charset if
-       requested.
-       (article-de-base64-unreadable): Ditto.
-       (article-wash-html): Ditto.
-
-2001-06-12 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-options-set-recipient): Don't add ", "
-       unless necessary. Suggested by Josh Huber <huber@alum.wpi.edu>.
-
-2001-06-12 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-group-alist): Use |fr| instead of [fr].
-
-2001-06-12 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-plain-save-name): Use file-relative-name.
-       From Marc Lefranc <Marc.Lefranc@univ-lille1.fr>.
-
-       * nnrss.el (nnrss-node-text): Node might be nil.
-
-2001-06-11 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-uu.el (gnus-uu-save-article): Use mml tag instead of
-       part. From Katsumi Yamaoka <yamaoka@jpl.org>.
-
-       * nnrss.el (nnrss-group-alist): More items.
-
-2001-06-09 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-node-text): Use cddr instead xml-node-children.
-
-2001-06-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       Trivial patch from Dale Hagglund  <rdh@best.com>
-
-       * gnus-mlspl.el (gnus-group-split-fancy): Fix generation of split
-       restrict clauses.
-
-2001-06-07 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       From Benjamin Rutt <brutt+news@bloomington.in.us>
-
-       * message.el (message-wide-reply-confirm-recipients): New variable.
-
-2001-06-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       Trivial patch from Mark Thomas  <mthomas@edrc.cmu.edu>
-
-       * nnmail.el (nnmail-fix-eudora-headers): Change the In-Reply-To
-       fix so it works with XEmacs.
-
-2001-06-07 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-retrieve-headers): Support description as extra
-       headers.
-
-2001-06-07 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el: Fix a few bugs.
-
-2001-06-05  Simon Josefsson  <jas@extundo.com>
-
-       * mm-decode.el (mm-handle-set-external-undisplayer): Don't
-       generate compiler warnings.  From Alex Schroeder <alex@gnu.org>.
-
-2001-06-04  Hrvoje Niksic  <hniksic@arsdigita.com>
-
-       * mm-decode.el (mm-pipe-part): Bind coding-system-for-write to
-       binary so that we don't transmit ISO 2022 garbage to the process.
-       This is needed under XEmacs.
-
-2001-06-03  Simon Josefsson  <simon@josefsson.org>
-
-       * imap.el (imap-ssl-open): Require ssl. (Otherwise ssl.el is
-       autoloaded incorrectly below because ssl-program-* is bound.)
-       Thanks to Amos Gouaux for report.
-
-2001-06-02  Simon Josefsson  <simon@josefsson.org>
-
-       * imap.el (imap-kerberos4-open):
-       (imap-gssapi-open):
-       (imap-ssl-open):
-       (imap-network-open):
-       (imap-shell-open):
-       (imap-starttls-open): Set buffer to workaround spurious
-       `accept-process-output' buffer changes.  Thanks to Mats Lidell
-       <Mats.Lidell@contactor.se> for report and partial patch and Jake
-       Colman <colman@ppllc.com> for report.
-
-2001-05-31 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-catchup): New argument.
-       (gnus-summary-catchup-from-here): New function.
-
-2001-05-30  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * mm-view.el (mm-inline-image-xemacs): Insert newline, then move
-       back, then insert glyph.  (Before, the glyph was inserted first,
-       then the newline.)  This works around a behavior in XEmacs where
-       it is not possible to insert a character after a glyph which is at
-       the end of a buffer.  Patch by Lloyd Zusman <ljz@asfast.com>.
-
-2001-05-28  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       From Jaap-Henk Hoepman (jhh@xs4all.nl).
-
-       * 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\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-salt.el (gnus-tree-highlight-node): Bind `default-high' and
-       `default-low' when evaluating `gnus-summary-highlight'.
-       From Raja R Harinath <harinath@cs.umn.edu>.
-
-2001-05-27  Simon Josefsson  <simon@josefsson.org>
-
-       * message.el (message-yank-cited-prefix): New variable.
-       (message-indent-citation): Use it.
-
-       * mml2015.el (mml2015-mailcrypt-verify): Store gpg stderr output
-       as details.
-       (mml2015-mailcrypt-clear-verify): Ditto.
-
-2001-05-24  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-       From Nevin Kapur <nevin@jhu.edu>.
-
-       * gnus-sum.el (gnus-summary-default-high-score,
-       gnus-summary-default-low-score): New variables.
-       (gnus-summary-highlight): Use them.
-
-2001-05-16  Didier Verna  <didier@lrde.epita.fr>
-
-       * message.el (message-mail): pass the 'send-actions argument to
-       `message-setup'.
-
-2001-05-16  Simon Josefsson  <simon@josefsson.org>
-       From Raymond Scholz <ray-2001@zonix.de>
-
-       * gnus-art.el (gnus-mime-view-part-as-charset):
-       (gnus-mime-internalize-part): Doc fixes.
-
-2001-05-11  Simon Josefsson  <simon@josefsson.org>
-
-       * gnus-start.el (gnus-ignored-newsgroups): Also ignore NNTP type
-       status lines without any text ("^215$").
-
-2001-05-06 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-check-group): Reverse.
-
-2001-05-07  Simon Josefsson  <simon@josefsson.org>
-
-       * message.el (message-get-reply-headers):
-       (message-followup): Fix typo, suggested by David Green
-       <dgreen@uab.edu>
-
-2001-05-05 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnslashdot.el (nnslashdot-request-expire-articles): Fix.
-
-       * nnrss.el (nnrss-open-server): Read server data when it is called.
-       (nnrss-request-expire-articles): Fix.
-
-2001-05-05 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-do-send-housekeeping): mail-abbrevs may
-       rename buffer behind Gnus.
-
-2001-05-04 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-check-group): Use nnheader-translate-file-chars.
-       (nnrss-group-alist): Add more resources.
-       (nnrss-check-group): Ignore errors.
-
-2001-05-04 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-request-expire-articles): Correct the return value.
-
-       * nnslashdot.el (nnslashdot-request-list): Add time.
-       (nnslashdot-request-expire-articles): New function.
-
-       * gnus-start.el (gnus-check-bogus-newsgroups): Remove bogus
-       secondary methods too.
-
-2001-05-03 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-use-followup-to): Set default value to t.
-
-2001-05-03  Florian Weimer  <fw@deneb.enyo.de>
-
-       * message.el (message-dont-reply-to-names): Fix documentation.
-       (message-get-reply-headers): Use Mail-Followup-To only for wide
-       replies.
-
-2001-05-03 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-request-expire-articles): Calculate # of days
-       correctly.
-       (nnrss-check-group): Use time.
-
-2001-05-01 19:21:19 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.03 is released.
-
-2001-05-01 19:06:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnultimate.el (nnultimate-topic-article-to-article): Use the
-       group.
-
-2001-04-24 19:50:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-srvr.el (gnus-server-insert-server-line): Add a space.
-
-2001-04-15 14:55:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnultimate.el (nnultimate-retrieve-headers): Return all
-       available headers.
-
-       * gnus-sum.el (gnus-read-all-available-headers): New variable.
-       (gnus-get-newsgroup-headers-xover): Use it.
-
-2001-04-14 15:47:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnultimate.el (nnultimate-retrieve-headers): Clean up.
-
-2001-04-30 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nntp.el (nntp-retrieve-groups): Use throw instead of error.
-
-2001-04-29 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el (nnrss-insert-w3): Use cache before I figure out how to
-       disable it.
-
-       * gnus.el (gnus-info-nodes): Remove a few The's.
-
-2001-04-29 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mail-source.el (mail-source-movemail): Call-process may return a
-       signal description string.
-
-       * gnus-start.el (gnus-read-newsrc-el-file):
-       gnus-newsrc-file-version may be nil.
-
-       * nnmail.el (nnmail-get-new-mail): Use the exact file only.
-       Suggested by Michael Sperber [Mr. Preprocessor]
-       <sperber@informatik.uni-tuebingen.de>.
-
-2001-04-25  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * mm-uu.el (mm-uu-configure-list): Fixed customize type.
-
-2001-04-24  Hrvoje Niksic  <hniksic@arsdigita.com>
-
-       * mm-view.el (mm-display-inline-fontify): Allow XEmacs to fully
-       fontify HANDLE.
-
-2001-04-18  Simon Josefsson  <simon@josefsson.org>
-
-       * smime.el (smime-ask-passphrase): Rework to return value.
-       (smime-sign-region): Rework to bind value and use it.
-       (smime-decrypt-region): Ditto.
-
-2001-04-18  Simon Josefsson  <simon@josefsson.org>
-       Trivial patch from Mathias Herberts  <Mathias.Herberts@iroise.net>
-
-       * smime.el (smime-ask-passphrase): New function.
-       (smime-sign-region): Use it.
-       (smime-encrypt-cipher): New variable.
-       (smime-decrypt-region): Ditto.
-
-2001-04-12  Jason Merrill  <jason_merrill@redhat.com>
-       Committed by Simon Josefsson  <simon@josefsson.org>
-
-       * imap.el (imap-shell-open): Erase the buffer *after* copying it into
-       the log.
-
-2001-04-14 01:14:42 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
-
-       * gnus.el: Oort Gnus v0.02 is released.
-
-2001-04-14 00:48:42  Lars Magne Ingebrigtsen  <larsi@quimby.gnus.org>
-
-       * gnus.el: Oort Gnus v0.01 is released.
-
-2001-04-13 22:01:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-highlight): Highlight read
-       undownloaded articles as read articles.
-
-       * gnus-agent.el (gnus-agent-get-undownloaded-list): Clean up.
-       (gnus-agent-get-undownloaded-list): Mark all undownloaded
-       articles, even read ones, as such.
-
-       * gnus-sum.el (gnus-summary-find-matching): Clean up.
-       (gnus-find-matching-articles): New function.
-       (gnus-summary-limit-include-matching-articles): New command.
-       (gnus-summary-limit-include-thread): Include articles that have
-       matching subjects.
-       (gnus-offer-save-summaries): Clean up.
-
-2001-04-13  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * nnmail.el (nnmail-split-fancy-with-parent): Add docstring.
-
-2001-04-12 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Jason Merrill <jason_merrill@redhat.com>
-
-       * gnus-sum.el (gnus-summary-insert-new-articles): Reverse the articles.
-
-2001-04-10 08:01:15  Katsumi Yamaoka  <yamaoka@jpl.org>
-       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-post-news): Fill the Newsgroups header by the
-       newsgroup names when the original article is a news message.
-
-2001-04-12 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-cite-prefix-regexp): Use POSIX regexp if
-       supported. Suggest by Jim Meyering <jim@meyering.net>.
-
-2001-04-02  Nevin Kapur  <nevin@jhu.edu>
-       Committed by Kai Gro\e,b_\e(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>.
-
-       * nnmail.el (nnmail-split-it): Added check for .* at the end of
-       regexp in nnmail-split-fancy.
-
-2001-04-10  Simon Josefsson  <simon@josefsson.org>
-
-       * message.el (message-options-set-recipient): Look at Cc and Bcc too.
-
-2001-04-10  Colin Marquardt  <colin@marquardt-home.de>
-
-       * message.el (message-send-mail): Improve the interaction with the
-       user.
-
-2001-04-10  Simon Josefsson  <simon@josefsson.org>
-
-       * imap.el (imap-message-copy): Work around buggy servers that
-       doesn't send TRYCREATE tags.
-
-2001-04-09 01:15:54  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-start.el (gnus-read-newsrc-el-file): Work with Semi-gnusae.
-
-2001-04-05 21:43:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-update-summary-mark-positions): Use a valid
-       date.
-
-2001-04-04 16:13:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-group.el (gnus-group-quit): Check that the dribble buffer
-       lives.
-
-2001-04-02 00:40:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-parse-news-url): New function.
-       (gnus-button-handle-news): New function.
-       (gnus-button-alist): Point to new functions.
-
-       * gnus-group.el (gnus-group-quit): Only mark buffer in non-empty.
-
-       * gnus-start.el (gnus-read-newsrc-el-file): Nix out
-       gnus-format-specs.
-
-       * message.el (message-check-news-header-syntax): Question even
-       when Gnus doesn't know the group names.
-       (message-send-news): Clean up.
-
-       * gnus-start.el (gnus-dribble-read-file): Say whether Gnus was
-       exited on purpose without saving.
-
-       * gnus-group.el (gnus-group-quit): Mark the dribble file as `Q'.
-
-2001-04-01 00:37:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-score.el (gnus-score-orphans): Clean up.
-
-       * gnus-win.el (gnus-remove-some-windows): Leave one Gnus window.
-
-       * gnus-sum.el (gnus-summary-exit): Kill the summary buffer a bit
-       later.
-
-       * gnus-start.el (gnus-close-all-servers): Find the right items to
-       close.
-
-       * qp.el (quoted-printable-decode-region): Just message
-       malformation; don't quit.
-
-2001-03-31 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Gerd Moellmann <gerd@gnu.org>.
-
-       * gnus.el (gnus-interactive): A typo.
-
-2001-03-26  Juanma Barranquero  <lektu@uol.com.br>
-       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-delete-alist): Declare it as an alias of
-       `assq-delete-all', if that function exists; otherwise use the old
-       definition. Documentation changed to match the one in
-       `assq-delete-all'.
-
-2001-04-01 00:37:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-start.el (gnus-close-all-servers): New function.
-
-       * gnus-srvr.el (gnus-server-close-all-servers): Clean up.
-       (gnus-server-remove-denials): Clean up.
-
-       * gnus-sum.el (gnus-summary-sort-by-original): New command and
-       keystroke.
-
-2001-03-31 02:56:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-send-news): Message where we are sending.
-       (message-send-mail): Ditto.
-
-       * gnus.el (gnus-server-string): New function.
-
-       * gnus-sum.el (gnus-summary-up-thread): Doc fix.
-
-       * mm-decode.el (mm-default-directory): Customized.
-       (mm-tmp-directory): Ditto.
-
-       * gnus-sum.el (gnus-summary-catchup-and-exit): Doc fix.
-       (gnus-get-newsgroup-headers): Return -1 for articles without Lines
-       or Chars.
-       (gnus-summary-line-format-alist): ?l is now a string.
-       (gnus-summary-prepare-threads): Output ? for unknown lines.
-       (gnus-summary-insert-line): Ditto.
-       (gnus-summary-print-article): Unbalanced parentheses.
-
-       * gnus-msg.el (gnus-inews-do-gcc): Check group to allow it to find
-       out whether new stuff has arrived.
-
-2001-03-31 02:14:38  Alan Shutko  <ats@acm.org>
-
-       * gnus-sum.el: Let printing work on ttys on Emacs.
-
-2001-03-31 01:11:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-post-news): Add an empty Newsgroups header
-       when forcing news.
-
-       * gnus-sum.el (gnus-summary-mark-article-as-replied): Make into a
-       command.
-
-2001-03-31 01:04:54  Francis Litterio  <franl@world.std.com>
-
-       * message.el (message-set-auto-save-file-name): Don't use
-       asterisks under nt.
-
-2001-03-31 00:03:42  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-inews-insert-draft-meta-information): Allow
-       lists of articles.
-
-       * gnus-uu.el (gnus-uu-digest-mail-forward): Mark as forwarded.
-
-       * gnus-msg.el (gnus-put-message): Clean up.
-       (gnus-summary-reply): Mark all replied-to articles as replied to.
-       (gnus-inews-add-send-actions): Also mark as forwarded.
-       (gnus-summary-mail-forward): Mark as forwarded.
-
-       * gnus-sum.el (gnus-summary-mark-article-as-replied): Take a list
-       of articles.
-       (gnus-summary-mark-article-as-forwarded): Ditto.
-
-       * gnus-msg.el (gnus-summary-resend-message): Mark article as
-       forwarded.
-       (gnus-summary-mail-forward): Clean up.
-
-       * gnus.el (gnus-article-mark-lists): Added forward.
-
-       * gnus-sum.el (gnus-forwarded-mark): New variable.
-       (gnus-summary-prepare-threads): Use it.
-       (gnus-summary-update-secondary-mark): Ditto.
-       (gnus-newsgroup-forwarded): New variable.
-
-2001-03-30 23:13:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-summary-reply): Allow very wide replies.
-       (gnus-summary-very-wide-reply): New command and keystroke.
-       (gnus-summary-very-wide-reply-with-original): Ditto.
-
-       * gnus-score.el (gnus-adaptive-word-length-limit): New variable.
-       (gnus-score-adaptive): Use it.
-
-       * gnus-start.el (gnus-get-unread-articles): Clean up.
-
-2001-03-21 20:00:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnultimate.el (nnultimate-retrieve-headers): Work for other
-       boards.
-
-2001-03-21  Didier Verna  <didier@lrde.epita.fr>
-
-       * gnus-start.el (gnus-subscribe-newsgroup-hooks): New.
-       * gnus-start.el (gnus-subscribe-newsgroup): use it.
-
-2001-03-15 09:47:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnultimate.el (nnultimate-retrieve-headers): Understand
-       long-form month names.
-
-2001-03-18 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-show-all-headers):
-       gnus-article-show-all-headers is broken. Use
-       gnus-summary-toggle-header instead.
-
-       * mml2015.el (mml2015-gpg-extract-from): No error.
-
-2001-03-18 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Bj\e,Ax\e(Brn Mork <bmork@dod.no>.
-
-       * mml2015.el (mml2015-gpg-extract-from): New function.
-       (mml2015-gpg-verify): Use it.
-       (mml2015-gpg-clear-verify): Use it.
-
-2001-03-17 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-setup-fill-variables): Use
-       fill-paragraph-function.
-       (message-fill-paragraph): Take an argument.
-       (message-newline-and-reformat): Take another argument.
-
-2001-03-16 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (rmail-output): It is in rmailout.el not rmail.el.
-
-2001-03-16 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-forward): local-variable-p takes an extra
-       argument in XEmacs.
-
-2001-03-16  Simon Josefsson  <simon@josefsson.org>
-
-       * nnimap.el (nnimap-dont-use-nov-p): Renamed from
-       `nnimap-use-nov-p' (it really tested the negative).
-       (nnimap-retrieve-headers): Use it.
-
-2001-03-11  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-generate-headers-first): Update doc.
-
-2001-03-10  Matthias Wiehl  <mwiehl@gmx.de>
-       Trivial patch.
-
-       * gnus.el (gnus-summary-line-format): Typo.
-
-2001-03-11  Simon Josefsson  <simon@josefsson.org>
-
-       * mailcap.el (mailcap-mime-data): Add application/sieve.
-       (mailcap-mime-extensions): Add .siv, .xls.
-
-2001-03-14 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Christoph Conrad <christoph.conrad@gmx.de>
-
-       * gnus-score.el (gnus-summary-lower-thread): Typo.
-
-2001-03-14 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-forward-decoded-p): New variable.
-       (message-forward-subject-author-subject): Use it.
-       (message-make-forward-subject): Use it.
-       (message-forward): Use it.
-
-       * gnus-uu.el (gnus-uu-digest-mail-forward): Use it.
-
-       * mm-util.el, message.el, rfc2047.el, gnus-sum.el, gnus-score.el:
-       Sync with Emacs 21 (tag EMACS_PRETEST_21_0_100).
-
-;;Has been fixed -- zsh.
-;;2001-03-05  Dave Love  <fx@gnu.org>
-;;
-;;     * mm-util.el (mm-mime-mule-charset-alist): Fix utf-8 case.
-;;     Move it after definition of mm-coding-system-p.
-;;
-2001-03-01  Dave Love  <fx@gnu.org>
-
-       * mm-util.el (mm-inhibit-file-name-handlers): Add
-       image-file-handler.
-
-2001-02-11  Dave Love  <fx@gnu.org>
-
-       * message.el (message-signature-file): Fix doc, :type.
-
-2001-02-08  Dave Love  <fx@gnu.org>
-
-       * rfc2047.el (rfc2047-fold-region): Don't forward-char at EOB.
-       (message-posting-charset): Defvar when compiling again.
-       (rfc2047-encodable-p): Require message.
-
-       * gnus-sum.el (gnus-alter-articles-to-read-function):
-       * gnus-score.el (gnus-score-after-write-file-function): Fix :type.
-
-2001-03-08 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnrss.el: New file.
-
-2001-03-08 02:41:36  Katsumi Yamaoka  <yamaoka@jpl.org>
-       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2047.el (rfc2047-unfold-region): Fix arg of
-       `skip-chars-forward'.
-
-2001-03-07 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nndraft.el (nndraft-request-group): Restore auto save files if
-       the original files do not exist.
-
-2001-03-07 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-score.el (gnus-score-find-bnews): Print messages on illegal
-       SCORE paths.
-
-       * mm-decode.el (mm-dissect-buffer): Call
-       mail-extract-address-components only if necessary.
-
-2001-03-06 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-score.el (gnus-score-find-bnews): Maybe there is no
-       directory part.
-       (gnus-score-search-global-directories): Use file-directory-p.
-
-       * gnus-score.el (gnus-score-score-files-1): Use
-       gnus-kill-files-directory.
-       From Adrian Aichner <adrian@xemacs.org>.
-
-2001-03-05 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (charset): Move here from gnus-sum.el.
-
-2001-03-04 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-preview): Disable local map.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Make
-       gnus-article-post-menu here.
-
-       * gnus-art.el (gnus-article-make-menu-bar): Make summary-menu bar
-       if it has not been made.
-
-2001-03-02 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-describe-key): Map key to event.
-       (gnus-article-describe-key-briefly): Ditto
-
-2001-03-01 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-limit-include-expunged): Fix.
-
-2001-03-01 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Katsumi Yamaoka <yamaoka@jpl.org>.
-
-       * dgnushack.el (coerce, merge, subseq): defmacro.
-
-2001-03-01 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * lpath.el (nndraft-request-group): Move it here from nndraft.el.
-       A fake defalias in nndraft.el results a not-activated bug in
-       uncompiled versions.
-
-2001-02-26 11:27:27  Paul Jarc  <prj@po.cwru.edu>
-       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-split-references): Handle malformed References:.
-
-2001-02-26 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-mime-part-status): 1 part.
-
-2001-02-25 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From NAGY Andras <nagya@inf.elte.hu>.
-
-       * gnus.el (gnus-parameters): Typo.
-
-2001-02-24 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-read-method): Remove redundancy.
-
-2001-02-23 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnslashdot.el (nnslashdot-backslash-url): New variable.
-       (nnslashdot-request-list): Use it.
-
-2001-02-23 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnml.el (nnml-generate-active-info): Fix the case when there is
-       no file.
-
-       * gnus-sum.el (gnus-summary-import-article): Display it. Enable edit.
-       (gnus-summary-create-article): New function.
-
-       * gnus-group.el (gnus-group-mark-article-read): New function.
-
-       * gnus-msg.el (gnus-inews-do-gcc): Use it.
-
-       * gnus-art.el (gnus-article-edit-article): Set modified-p nil.
-
-2001-02-23 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-edit-done): Don't use
-       gnus-article-edit-exit.
-       (gnus-article-edit-exit): Confirm and insert original-article-buffer.
-
-       * gnus.el (gnus-parameters): New variable.
-       Suggested by NAGY Andras <nagya@inf.elte.hu>.
-       (gnus-parameters-get-parameter): New function.
-       (gnus-group-find-parameter): Use it.
-
-2001-02-23  Simon Josefsson  <simon@josefsson.org>
-
-       * gnus-msg.el (gnus-post-method): Fix documentation to reflect
-       change of default value to `current'.
-
-2001-02-23 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nneething.el (nneething-get-head): Insert unreadable file too.
-
-2001-02-22 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-insert-articles): Remove fetched headers.
-
-       * webmail.el (webmail-type-definition): Deja is bought by google.
-
-2001-02-22 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-fetch-headers): New function.
-       (gnus-select-newsgroup): Use it.
-       (gnus-summary-insert-articles): New function.
-       (gnus-summary-insert-old-articles): New function.
-       (gnus-summary-insert-new-articles): New function.
-
-       * gnus-group.el (gnus-group-prepare-flat-list-dead): Use decoded-name.
-       (gnus-group-list-active): Ditto.
-       * gnus-sum.el (gnus-set-mode-line): Ditto.
-       (gnus-summary-read-group-1): Ditto.
-
-2001-02-21 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-topic.el (gnus-topic-get-new-news-this-topic): Redraw the
-       current topic.
-
-2001-02-21 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * smiley.el (gnus-smiley-display): Don't do widening.
-
-       * smiley-ems.el (gnus-smiley-display): Don't do widening. Smiley
-       within body.
-
-       * gnus-msg.el (gnus-inews-do-gcc): Activate group anyway.
-
-       * gnus-art.el (gnus-mime-display-multipart-alternative-as-mixed):
-       New variable.
-       (gnus-mime-display-multipart-related-as-mixed): New variable.
-       (gnus-mime-display-part): Use them.
-
-2001-02-20 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-setup-news): Allow gnus-group-line-format to be
-       something special.
-
-2001-02-20 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnweb.el (nnweb-request-group): Set nnweb-group anyway.
-       (nnweb-request-article): Call reference if exists.
-       (nnweb-type-definition): Dejanews is bought by google.com.
-       Beta!
-
-2001-02-19 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-draft.el (gnus-draft-reminder): "Confirm to exit?"
-
-2001-02-19  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-sum.el (gnus-thread-sort-functions): Doc fix.  Refer to
-       gnus-article-sort-functions.
-       (gnus-article-sort-functions): Doc fix.  Refer to
-       gnus-thread-sort-functions.
-
-2001-02-18 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       From Paul Jarc <prj@po.cwru.edu>.
-
-       * message.el (message-get-reply-headers): More fixes.
-
-2001-02-17  Paul Jarc  <prj@po.cwru.edu>
-       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-get-reply-headers): Fix bug with
-       Mail-Followup-To/to-address interaction.
-
-2001-02-17 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-configure-posting-styles): Match header in
-       gnus-article-copy.
-
-2001-02-16 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-do-send-housekeeping): Rename to a better
-       name.
-
-2001-02-16 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-cancel-news): Check article first, then ask
-       yes or no.
-
-2001-02-16 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-uu.el (mm-uu-type-alist): Add emacs-sources.
-
-2001-02-16 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-range.el (gnus-range-normalize): New function.
-
-2001-02-15  NAGY Andras  <nagya@inf.elte.hu>
-
-       * imap.el (imap-gssapi-open): Set imap-c-l-s-first.
-
-2001-02-14 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-srvr.el (gnus-server-regenerate-server): Use gnus-get-function.
-
-       * nnagent.el (nnagent-request-regenerate): New function.
-
-       * nnfolder.el (nnfolder-request-regenerate): New deffoo.
-
-       * nnml.el (nnml-generate-nov-databases): Accept argument
-       server. Don't open server if it is opened.
-       (nnml-request-regenerate): Use it. Change to deffoo.
-
-2001-02-14  Katsumi Yamaoka  <yamaoka@jpl.org>
-       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-define-group-parameter): Fix.
-
-2001-02-14 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-define-group-parameter): Improved.
-
-       * gnus-sum.el (charset): Define parameter.
-       (ignored-charsets): Ditto.
-       (gnus-summary-setup-default-charset): Use them.
-
-       * gnus-start.el (gnus-read-descriptions-file): Use them.
-
-       * gnus-cus.el (gnus-group-parameters): Remove them.
-
-2001-02-14 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-print-article): Redo highlight.
-
-2001-02-13 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-read-group-1): Remove
-       gnus-summary-set-local-parameters.
-       (gnus-summary-setup-buffer): Put it here.
-
-2001-02-13 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (to-address): Define parameter.
-       (to-list): Ditto.
-       * gnus-art.el (article-hide-boring-headers): Use them.
-       * gnus-msg.el (gnus-post-news): Ditto.
-       * gnus-cus.el (gnus-group-parameters): Remove them.
-
-2001-02-13 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-draft.el (gnus-draft-reminder): New function.
-
-       * gnus-art.el (gnus-sender-save-name): New function.
-
-2001-02-13 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-mime-charset): Error message.
-
-2001-02-13 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-check-news-body-syntax): Don't check mml lines.
-
-2001-02-12 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-topic.el (gnus-subscribe-topics): Return nil if not
-       subscribe.
-
-       * gnus-start.el (gnus-call-subscribe-functions): New function.
-       (gnus-find-new-newsgroups): Use it.
-       (gnus-ask-server-for-new-groups): Use it.
-       (gnus-check-first-time-used): Use it.
-       (gnus-subscribe-newsgroup-method): Grok a list of functions.
-       (gnus-subscribe-options-newsgroup-method): Ditto.
-       (gnus-subscribe-hierarchically): Return gnus-subscribe-newsgroup's
-       return .
-
-2001-02-12  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-cus.el (gnus-score-customize): Doc fix.
-
-2001-02-11  Jesper Harder  <harder@ifa.au.dk>
-
-       * dgnushack.el (my-getenv): Typo.
-
-2001-02-11 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * dgnushack.el (dgnushack-make-load): Don't autoload smiley functions.
-
-2001-02-11 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-suspend): Offer save summaries.
-
-       * gnus-art.el (gnus-treat-leading-whitespace): New variable.
-       (gnus-treatment-function-alist): Use it.
-       (article-remove-leading-whitespace): New function.
-       (gnus-article-make-menu-bar): Use it.
-
-       * gnus-sum.el (gnus-summary-wash-empty-map): Add
-       remove-leading-whitespace.
-       (gnus-summary-wash-map): Bind strip-headers-in-body to `W a',
-       because of conflict.
-
-2001-02-09 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * Makefile.in: Hack generating gnus-load.el.
-       * dgnushack.el: Ditto.
-       * gnus-load.el: Remove it.
-
-2001-02-09 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * dgnushack.el : Add URLDIR.
-
-       * Makefile.in (EMACS_COMP): Ditto.
-
-2001-02-09 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-cus.el (gnus-score-customize): Error on no score file.
-
-2001-02-09 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-merge-handles): New function.
-
-       * mm-view.el (mm-inline-message): Use it.
-       (mm-view-message): Ditto.
-
-       * mm-partial.el (mm-inline-partial): Ditto.
-
-       * mm-extern.el (mm-inline-external-body): Ditto.
-
-       * gnus-art.el (gnus-mime-view-part): Ditto.
-       (gnus-mime-view-part-as-type): Ditto.
-       (gnus-mime-save-part-and-strip): Prevent users to strip in some
-       cases.
-
-2001-02-08 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-cancel-news): Allow to shoot foot.
-       (message-supersede): Ditto.
-
-2001-02-08  Tommi Vainikainen  <thv@iki.fi>
-       Trivial patch.
-
-       * gnus-sum.el (gnus-simplify-subject-re): Use
-       message-subject-re-regexp.
-
-2001-02-08 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmail.el (nnmail-expiry-target-group): Bind
-       nnmail-cache-accepted-message-ids to nil.
-
-       * gnus-xmas.el (gnus-xmas-article-display-xface): Use binary
-       coding system.
-
-2001-02-07 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * qp.el (quoted-printable-encode-region): Make sure characters are
-       between 00 and FF.  Don't check charset.
-
-       * mm-encode.el (mm-encode-content-transfer-encoding): Use unibyte
-       in Emacs 20.
-       * rfc2047.el (rfc2047-q-encode-region): Ditto.
-
-2001-02-07 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-make-forward-subject): Argument decoded.
-       (message-forward): Use it when digest.
-
-       * gnus-uu.el (gnus-uu-grab-articles): Shoot down original article
-       buffer.
-
-2001-02-07  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * message.el (message-generate-headers-first): Doc fix.
-
-2001-02-07 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-make-date-line): Error proof.
-
-2001-02-06 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-listing-limit): New variable.
-       (gnus-group-prepare-flat-list-dead): Use old trick to speed up.
-
-       * gnus-topic.el (gnus-group-prepare-topics): Use gnus-killed-hashtb.
-
-2001-02-06 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-newline-and-reformat): Special case for
-       breaking at BOL.
-
-2001-02-06  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-uu.el (gnus-uu-save-article): Make the topics summary a
-       message/rfc822.
-
-2001-02-06 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-encode-message-body): Don't insert
-       Content-Type if it is inside a mail.
-
-2001-02-06 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-xmas.el (gnus-xmas-article-menu-add): Add
-       gnus-article-commands-menu.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Don't share menu bar
-       in Emacs.
-
-       * gnus-start.el (gnus-read-descriptions-file): Use
-       gnus-group-name-charset and gnus-group-charset-alist.
-
-2001-02-04 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-mark-as-processable): Understand
-       active region.
-
-       * gnus-start.el (gnus-group-change-level): Remove from both
-       gnus-zombie-list and gnus-killed-list.
-
-2001-02-04 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-subscribe-options-newsgroup-method): Add
-       gnus-subscribe-topics.
-
-       * gnus-cus.el (gnus-extra-topic-parameters): Fix doc.
-
-2001-02-04 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-make-menu-bar): Make
-       gnus-article-post-menu.
-
-       * gnus-xmas.el (gnus-xmas-article-menu-add): Add post menu.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Use t if XEmacs.
-
-       * gnus-group.el (gnus-group-make-menu-bar): Ditto.
-
-       * message.el (message-mode-menu): Ditto.
-
-       * gnus-art.el (defvar): eval-when-compile.
-
-2001-02-02 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agentize): Fix doc.
-
-2001-02-02  Karl Kleinpaste  <karl@charcoal.com>
-
-       * mml.el (mml-preview): Bind `q'.
-
-2001-02-02 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-mime-mule-charset-alist): non-Mule case.
-
-2001-01-31  Dave Love  <fx@gnu.org>
-
-       * mm-util.el (mm-mime-mule-charset-alist)
-       (mm-find-mime-charset-region): Consider mule-utf-8.
-
-2001-01-31  Dave Love  <fx@gnu.org>
-
-       * gnus-art.el (gnus-article-x-face-command)
-       (gnus-treat-display-xface, gnus-treat-display-smileys): Add
-       :version.
-
-2001-01-26  Dave Love  <fx@gnu.org>
-
-       * mm-util.el (mm-multibyte-string-p): New.
-
-;;     * qp.el: Remove un-logged bogus changes from 2000-12-20.
-;;     (quoted-printable-encode-region): Doc fix.  Don't call
-;;     string-as-multibyte on class.  Clarify line-folding.
-       (quoted-printable-encode-string): Make temp buffer inherit
-       string's multibyteness.
-
-2001-01-23  Gerd Moellmann  <gerd@gnu.org>
-
-       * nnheader.el (toplevel): Don't require `gnus-util' at
-       compile-time; this creates a circular dependency, and prevents
-       a bootstrap.
-
-2001-01-22  Andreas Schwab  <schwab@suse.de>
-
-       * nnheader.el (gnus-delete-line): Autoload it as a macro.
-
-2001-01-31 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmail.el (nnmail-remove-list-identifiers): Use consp.
-
-       * gnus-art.el (article-hide-list-identifiers): Ditto.
-
-       * gnus-sum.el (gnus-summary-remove-list-identifiers): Ditto.
-
-2001-01-31 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-remove-list-identifiers): Similar.
-
-       * gnus-art.el (article-hide-list-identifiers): Similar.
-
-2001-01-31  Karl Kleinpaste  <karl@charcoal.com>
-
-       * nnmail.el (nnmail-remove-list-identifiers): Improved.
-
-2001-01-31 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-score.el (gnus-summary-score-entry): match may be an integer.
-
-2001-01-30 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-string-equal): New function.
-
-       * gnus-art.el (article-hide-boring-headers): Use it.
-
-2001-01-27  Karl Kleinpaste  <karl@charcoal.com>
-
-       * gnus-art.el (gnus-article-banner-alist): eGroups new banner.
-
-2001-01-27 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-msg-mail): Support switch-action.
-
-2001-01-26 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-summary-save-in-pipe): Prompt for saving
-       command if there is not last-saver.
-
-2001-01-24 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nntp.el (nntp-open-connection): 201 is possible.
-
-2001-01-24 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2047.el (rfc2047-encode): MIME charset is not coding system.
-       (rfc2047-charset-encoding-alist): Add big5.
-
-2001-01-24 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-add-server): Redraw the line.
-       (gnus-agent-remove-server): Ditto.
-       (autoload): gnus-server-update-server.
-
-       * gnus-srvr.el (gnus-server-line-format): Add %a.
-       (gnus-server-line-format-alist): Add gnus-tmp-agent.
-       (gnus-server-insert-server-line): Use it.
-
-2001-01-24 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-mime-mule-charset-alist): Preferred MIME names
-       GB2312 and Big5.
-
-2001-01-24  Simon Josefsson  <sj@extundo.com>
-
-       * mail-source.el (mail-sources): Add :program specifier to IMAP
-       mail source.
-       (mail-source-fetch-imap): Map :program to `imap-shell-program'.
-
-2001-01-24 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-score.el (gnus-score-lower-thread): Fix a doc typo.
-
-2001-01-24 12:22:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nntp.el (nntp-wait-for): Return the success code.
-       (nntp-open-connection): Use it.
-
-2001-01-11 11:49:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-int.el (gnus-check-server): Allow breaking the opening.
-
-2001-01-23 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-print-article): Remove process mark.
-
-2001-01-22 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-print-article): Take one prefix
-       argument. Allow to print several articles in one file.
-
-2001-01-21 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * webmail.el (webmail-type-definition): netaddress changes.
-
-2001-01-21 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el: Fix copyright. Remove trailing spaces.
-
-       * message.el (message-forward): Use mule4.
-
-2001-01-20 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-string-as-unibyte): New function.
-
-       * message.el (message-forward): Use it.
-
-2001-01-19 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-cite-original-without-signature): Don't peel
-       off the blank line.
-       (message-get-reply-headers): Add Cc if it is not in follow-to.
-
-2001-01-20  Simon Josefsson  <sj@extundo.com>
-
-       * mm-decode.el (mm-handle-multipart-from): Add.
-       (mm-dissect-buffer): Save From: header value.
-       (mm-security-from): Remove.
-       (mm-possibly-verify-or-decrypt): Don't set mm-security-from.
-
-       * mml-smime.el (mml-smime-verify): Use `mm-handle-multipart-from'
-       instead of `mml-security-from'.  Protect null from value.
-
-2001-01-20  Simon Josefsson  <sj@extundo.com>
-
-       * mailcap.el (mailcap-mime-data): Run `gnumeric' on
-       application/vnd.ms-excel attachments.
-
-2001-01-19  Simon Josefsson  <sj@extundo.com>
-
-       * gnus-art.el (gnus-button-alist): Add `?=' to mailto URL regexp.
-
-2001-01-19 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-ignored-mail-headers): Ditto.
-
-2001-01-19  Simon Josefsson  <sj@extundo.com>
-
-       * message.el (message-ignored-news-headers): Only search beginning
-       of line.
-
-2001-01-19  ShengHuo Zhu  <zsh@cs.rochester.edu>
-       Trivial patch from Alberto Lusiani  <a.lusiani@noemail.org>
-
-       * message.el (message-send-mail): Content-Type may not be there.
-
-2001-01-18 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-ems.el (gnus-article-display-xface): Add BUFFER.
-       * gnus-xmas.el (gnus-xmas-article-display-xface): Ditto.
-
-       * gnus-art.el (article-display-x-face): Insert X-Face if there is
-       not.
-
-2001-01-18 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-read-group-1): Don't test dead
-       non-native groups.
-
-2001-01-18 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-yank-original): Understand
-       universal-argument.
-
-2001-01-18 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-boring-article-headers): Add to-address.
-       (article-hide-boring-headers): Ditto.
-
-       * mm-view.el (mm-inline-message): Insert a newline unless bolp.
-
-2001-01-18 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2047.el (rfc2047-fold-region): Don't insert LWSP if there is
-       one.
-
-2001-01-16  Simon Josefsson  <simon@josefsson.org>
-
-       * message.el (message-make-in-reply-to): Add comment to message-id
-       (old syntax, see 2000-08-02 change).
-
-2001-01-16 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-url-mailto): Use gnus-msg-mail.
-       (gnus-button-mailto): Setup message. Moved to gnus-msg.el.
-       (gnus-button-reply): Ditto.
-
-2001-01-16  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (article-display-x-face): Fix.
-
-2001-01-15 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-display-x-face): Use
-       gnus-original-article-buffer.
-
-2001-01-15  Jack Twilley  <jmt@tbe.net>
-
-       * message.el (message-add-header): Move to point-max.
-
-2001-01-15  Simon Josefsson  <simon@josefsson.org>
-
-       * smime.el (smime-CA-directory, smime-CA-file): Change default to
-       nil, improve documentation.
-       (smime-certificate-directory): Comment out false hints (until it
-       is implemented).
-
-       * mml-smime.el (mml-smime-sign): Place user in customize buffer if
-       there aren't any keys.
-       (mml-smime-verify): If smime-CA-{file,directory} set, also try to
-       verify certificate.  Default is changed to only check integrity.
-       Improved security status texts.  If a certificate doesn't contain
-       a email address, don't fail.
-
-       * smime.el (smime-noverify-region):
-       (smime-noverify-buffer): New functions.  Verifies integrity only.
-
-2001-01-12 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-sort-by-score): Reverse order.
-
-2001-01-12 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-win.el (gnus-configure-windows): switch-to-buffer in XEmacs.
-       (gnus-remove-some-windows): Ditto.
-
-2001-01-12 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-make-date-line): 11th.
-
-2001-01-11 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-gpg-encrypt): Remove CR.
-       (mml2015-gpg-sign): Ditto.
-
-2001-01-10 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el: Sync with EMACS_PRETEST_21_0_95.
-       * gnus.el (gnus-default-posting-charset): Bogus. Removed.
-
-2001-01-08  Dave Love  <fx@gnu.org>
-
-       * mm-encode.el (mm-qp-or-base64): Don't base64 for the sake of a
-       single character.
-
-       * mm-util.el (mm-mime-mule-charset-alist): Add Latin-{8,9}.
-
-       * message.el: Doc and message fixes.
-       (message-send-rename-function)
-       (message-make-forward-subject-function)
-       (message-send-mail-function, message-reply-to-function)
-       (message-wide-reply-to-function, message-followup-to-function)
-       (message-distribution-function, message-auto-save-directory): Fix
-       :type.
-
-       * gnus/mml.el (mml-parse-1): Frob mml-confirmation-set when
-       proceeding after warnings.  Amend multipart warning message.
-
-2001-01-04  Dave Love  <fx@gnu.org>
-
-       * gnus-util.el (nnmail-pathname-coding-system): Defvar when
-       compiling.
-       (gnus-make-directory): Require nnmail.
-
-       * mm-decode.el (mm-inline-media-tests): Add
-       image/x-portable-bitmap.
-       (mm-get-image): Grok pbm.
-
-2001-01-10  Paul Stevenson  <p.stevenson@surrey.ac.uk>
-
-       * nnvirtual.el (nnvirtual-request-expire-articles): delq nil.
-
-2001-01-09  Didier Verna  <didier@xemacs.org>
-
-       * dgnushack.el (dgnushack-compile): give a dummy value to
-       `gnus-xmas-glyph-directory' for the time of compilation.
-       * gnus-agent.el: moved some XEmacs specific hook add-ons from
-       `gnus-xmas-[re]define' to avoid loosing user custom settings.
-       * gnus-art.el: ditto.
-       * gnus-group.el: ditto.
-       * gnus-salt.el: ditto.
-       * gnus-sum.el: ditto.
-       * gnus-topic.el: ditto.
-       * gnus-xmas.el (gnus-xmas-define): see above.
-       * gnus-xmas.el (gnus-xmas-redefine): see above.
-       * gnus-xmas.el (gnus-xmas-glyph-directory): generate a
-       non-continuable error when the directory can't be found.
-
-2001-01-09 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-interactively-view-part): Don't copy-sequence
-       handle.
-       * gnus-art.el (gnus-mime-view-part): Copy it.
-       (gnus-mime-view-part-as-type): Add into gnus-article-mime-handles.
-
-2001-01-09  Michael Downes  <mjd@ams.org>
-
-       * gnus-sum.el (gnus-summary-read-group-1): More useful message.
-
-2001-01-08 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmail.el (nnmail-get-new-mail): Find group only if file is not
-       orig-file. Use ',source.
-
-2001-01-08 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-xmas.el (gnus-xmas-modeline-glyph):
-       (gnus-xmas-group-startup-message):
-       Detect gnus-xmas-glyph-directory when it is nil.
-
-2001-01-08 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * pop3.el (pop3-get-message-count): Andrew Innes
-       <andrewi@gnu.org>'s patch of 1999-12-01 was not fully committed.
-
-2001-01-05 06:49:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agent-fetch-session): Say what we quit.
-
-       * time-date.el (time-to-number-of-days): New function.
-
-2001-01-04 11:06:14  Gregory Chernov  <greg@visiontech-dml.com>
-       Trivial patch.
-
-       * nnslashdot.el (nnslashdot-request-list): Always get the right
-       sid.
-
-2001-01-05 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-minibuffer-local-map): New keymap.
-       (message-read-from-minibuffer): Use it.
-       * gnus-msg.el (gnus-summary-resend-message): Use it
-
-2001-01-04 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-display-time-event-handler): New function.
-       (gnus-after-getting-new-news-hook): Use it.
-
-2001-01-03 07:26:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-ignored-mail-headers): Add draft header.
-
-2001-01-02 06:28:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-expire-articles): Don't save
-       excursion.
-
-       * nnslashdot.el (nnslashdot-request-list): Get the right year.
-
-2001-01-01 00:52:44  Ed L. Cashin  <ecashin@coe.uga.edu>
-       A revoked patch.
-
-       * gnus-sum.el (gnus-summary-expire-articles): Save excursion.
-
-2000-12-31 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * qp.el (quoted-printable-decode-region): Don't backward-char.
-
-2000-12-31 03:57:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-draft.el: Mark articles as replied.
-
-       * gnus-sum.el (gnus-summary-add-mark): New function.
-
-       * gnus-group.el (gnus-add-mark): New function.
-
-       * gnus-sum.el (gnus-summary-buffer-name): New function.
-       (gnus-summary-setup-buffer): Use it.
-
-       * gnus-draft.el: Set things up with the right post method and
-       stuff.
-
-       * message.el (message-ignored-news-headers): Remove X-Draft-From.
-
-       * gnus-msg.el (gnus-inews-insert-draft-meta-information): New function.
-
-       * gnus.el (gnus-draft-meta-information-header): New variable.
-
-2000-12-30 00:17:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-treatment-function-alist): Move the date
-       functions before the header sorting functions.
-
-       * mm-uu.el (mm-uu-pgp-signed-extract-1): Unquote "- " quotes.
-
-       * dgnushack.el (dgnushack-compile): Message whether there is w3.
-       Don't (push "/usr/share/emacs/site-lisp" load-path).
-
-       * gnus-cite.el (gnus-article-fill-cited-article): Don't add space
-       to empty fill prefixes.
-
-2000-12-30 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nntp.el (nntp-open-connection): Kill pbuffer if process is nil.
-       Suggested by Christoph Conrad <christoph.conrad@gmx.de>.
-
-2000-12-30 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnheader.el (autoload): Autoload gnus-sorted-intersection.
-
-       * nnml.el (autoload): Move to nnheader.el.
-
-       * nnfolder.el (nnfolder-existing-articles): Reversed, i.e. sorted.
-       (nnfolder-request-expire-articles): Use gnus-sorted-intersection.
-       (nnfolder-retrieve-headers): Use intersection. Suggested by Jonas
-       Kvarnstr\e,Av\e(Bm <jonkv@ida.liu.se>.
-
-2000-12-30 00:17:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (article-make-date-line): Get the hours right.
-       (gnus-ignored-headers): More hiding.
-
-       * nnmail.el (nnmail-expiry-wait): Not an integer.
-
-       * message.el (message-goto-body): Only expand abbrev when called
-       interactively.
-       (message-make-lines): Use it.
-
-2000-12-29 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-inews-yank-articles): Reparse headers.
-
-2000-12-30 00:17:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-limit-include-expunged): Really
-       include the expunged articles.
-
-       * gnus-group.el (gnus-group-sort-by-server): New function.
-
-       * gnus.el (gnus-method-to-server-name): New function.
-       (gnus-group-prefixed-name): Use it.
-
-       * gnus-group.el (gnus-group-sort-function): Doc fix.
-       (gnus-group-sort-groups-by-server): New command.
-
-2000-12-29 13:25:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-treat-date-english): New variable.
-       (article-date-english): New command.
-       (gnus-english-month-names): New variable.
-       (article-make-date-line): Do 'english.
-
-       * gnus-cite.el (gnus-article-fill-cited-article): Add a space
-       after the fill prefix.
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Removed "Enter
-       score...".
-
-       * gnus-art.el (gnus-ignored-headers): Hide more headers.
-
-       * message.el (message-mode-map): Bind comment-region.
-
-       * gnus-art.el (gnus-mime-display-part): Let w3 display
-       multipart/related.
-
-       * mm-bodies.el (mm-long-lines-p): New function.
-       (mm-body-encoding): Use it.
-       (mm-body-encoding): Encode articles with lines longer than 1000
-       characters.
-
-2000-12-29 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-enable-multibyte): Use
-       default-enable-multibyte-characters.
-       (mm-enable-multibyte-mule4): Ditto.
-       (mm-disable-multibyte): Test XEmacs.
-       (mm-disable-multibyte-mule4): Ditto.
-       (mm-with-unibyte-current-buffer): Simplified.
-       (mm-with-unibyte-current-buffer-mule4): Ditto.
-
-2000-12-28 19:44:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnheaderxm.el (nnheader-string-as-multibyte): New alias.
-
-       * nnheader.el (nnheader-string-as-multibyte): New alias.
-
-       * mm-view.el (mm-inline-text): Warn when bugging out in w3.
-
-       * gnus-uu.el (gnus-message-process-mark): New function.
-       (gnus-uu-mark-by-regexp): Use it.
-       (gnus-new-processable): New function.
-
-2000-12-28 19:21:57  Inge Frick  <inge@nada.kth.se>
-        Trivial patch.
-
-       * gnus-sum.el (gnus-no-mark): New variable.
-
-2000-11-01 01:12:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnwfm.el (nnwfm-create-mapping): Remove quote marks and
-       backslashes.
-
-2000-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-article-banner-alist): Remove duplicate
-       definition.
-
-2000-12-25 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * dgnushack.el (dgnushack-compile): elc is in the current directory.
-
-       * qp.el (quoted-printable-encode-region): Don't check multibyte in
-       XEmacs.
-
-2000-12-25  Lloyd Zusman  <ljz@asfast.com>
-       Trivial patch.
-
-       * mml.el (mml-read-tag): Save tag location.
-
-2000-12-25  Simon Josefsson  <simon@josefsson.org>
-
-       * starttls.el: Sync with Emacs 21.
-
-2000-12-24 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-mail): Support yank-action.
-
-       * message.el (message-setup): Revoke the last change.
-
-2000-12-24 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-setup): Use cons. Suggested by Johan Vromans
-       <jvromans@squirrel.nl>.
-
-2000-12-24  Simon Josefsson  <sj@extundo.com>
-
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Preserve
-       mailing list junk at end of part.
-
-2000-12-23  Simon Josefsson  <sj@extundo.com>
-
-       * nnimap.el (nnimap-expiry-target): New function.
-       (nnimap-request-expire-articles): Use it.
-
-2000-12-22 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-group-parameters-more): New variable.
-       * gnus-cus.el (gnus-group-customize): Use it.
-
-       * gnus.el (gnus-define-group-parameter): New macro.
-       (auto-expire): Use it
-       (total-expire): Use it.
-       * gnus-art.el (banner): Use it.
-
-       * mml.el (mml-parse): save-excursion. Suggested by Lloyd Zusman
-       <ljz@asfast.com>.
-
-2000-12-22 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-topic.el (gnus-topic-create-topic): Use list.
-
-       * gnus-vm.el (gnus-summary-save-article-vm): Require gnus-art
-       before binding gnus-default-article-saver.
-
-       * gnus-sum.el (gnus-summary-save-article):
-       (gnus-summary-pipe-output):
-       (gnus-summary-save-article-mail):
-       (gnus-summary-save-article-rmail):
-       (gnus-summary-save-article-file):
-       (gnus-summary-write-article-file):
-       (gnus-summary-save-article-body-file): Ditto.
-
-       * gnus-mh.el (gnus-summary-save-article-folder): Ditto.
-
-2000-12-22 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-security-button-map):
-       (gnus-mime-button-map): Add parent.
-
-2000-12-22 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * messagexmas.el (message-xmas-redefine): New function.
-
-       * message.el: Use it.
-
-       * gnus-art.el (gnus-article-check-hidden-text): Return t.
-
-       * gnus-util.el (gnus-remove-text-properties-when): Return t.
-
-2000-12-22 03:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-dissect-multipart): Avoid errors owing to
-       malformatted messages.
-
-2000-12-22 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-image-load-path): New function.
-
-       * gnus-group.el (gnus-group-make-tool-bar): Use it.
-
-       * gnus-sum.el (gnus-summary-make-tool-bar): Use it.
-
-       * message.el (message-tool-bar-map): Use it.
-
-       * Makefile.in (install-el): New rule.
-
-2000-12-21  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (article-treat-dumbquotes): Quote \.
-
-2000-12-21 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-treat-emphasize): Don't treat emphasis if
-       Emacs 20 runs on a terminal.
-
-2000-12-21 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-bug): Revert to save-excursion.
-
-       * mml.el (gnus-add-minor-mode): Autoload.
-
-       * message.el (message-forward): Save-restriction.
-
-2000-12-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-art.el (article-treat-dumbquotes): More doc, provided by
-       Paul Stevenson <p.stevenson@surrey.ac.uk>
-
-2000-12-21 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-ml.el (gnus-mailing-list-mode-map): Use C-c C-n prefix.
-
-       * mml.el (gnus-ems): Don't require.
-
-       * gnus.el (gnus-decode-rfc1522): Removed.
-       (gnus-set-text-properties): Define.
-
-2000-12-21 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-*): handle may be nil.
-
-       * gnus-sum.el (gnus-summary-mode): Turn on gnus-mailing-list-mode.
-
-       * gnus.el (gnus-group-remove-excess-properties): Not defined
-       in gnus-xmas.
-
-2000-12-20 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-mail-user-agent): Add :version.
-
-2000-12-21  Miles Bader  <miles@gnu.org>
-
-       * message.el (message-mode): Set `comment-start' to the  yank prefix.
-
-2000-12-20 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-mail-user-agent): New variable.
-       (message-setup): Renamed to message-setup-1. Support
-       mail-user-agent.
-       (message-mail-user-agent): New function.
-       (message-mail): Use it.
-       (message-reply): Use it.
-       (message-resend): Use it.
-       (message-mail-other-window): Use it.
-       (message-mail-other-frame): Use it.
-
-       * gnus-msg.el (gnus-bug): Support mail-user-agent.
-
-2000-12-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-tool-bar-map): Simplify.
-       (message-narrow-to-head-1): New function.
-       (message-narrow-to-head): Use it.
-       (message-reply): Ditto.
-       (message-cancel-news): Ditto.
-       (message-supersede): Ditto.
-       (message-make-forward-subject): Ditto.
-       (message-bounce): Ditto.
-
-2000-12-20 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * uudecode.el (uudecode-decode-region-external): make-temp-file
-       may not be defined.
-
-       * binhex.el (defalias): eval-and-compile.
-
-       * message.el (message-tool-bar-map): New function.
-       (message-mode): Use it.
-
-2000-12-20 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nntp.el (nntp-find-connection): Remove the entry.
-       (nntp-retrieve-groups): (gnus-buffer-live-p buf).
-
-2000-12-20 05:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-summary-mail-forward): Use original buffer.
-
-       * message.el (message-forward): Copy buffer in unibyte mode.
-
-2000-12-20 04:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-make-forward-subject): Don't widen. Decode.
-       (message-forward): Don't decode subject.
-
-2000-12-20  Christoph Conrad  <C.Conrad@cli.de>
-
-       * qp.el (quoted-printable-encode-region): Upcase QP.
-
-2000-12-20 03:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-possibly-verify-or-decrypt): Use
-       mail-extract-a-c instead. Don't depend on Gnus.
-
-       * mml.el (gnus-ems): Require it.
-
-       * gnus-msg.el (gnus-summary-mail-forward):
-
-       * message.el (message-forward):  Move mime-to-mml here.
-
-2000-12-20 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el, gnus-sum.el, message.el: Add :help unless Emacs.
-       * gnus-art.el (gnus-insert-mime-button): Simplify.
-       (gnus-mime-display-alternative): Ditto.
-       (gnus-insert-mime-security-button): Ditto.
-
-2000-12-20 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-add-text-properties-when): In XEmacs,
-       text-property-not-all doesn't return nil when start=mark(end).
-       (gnus-remove-text-properties-when): Ditto.
-
-2000-12-20 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-group-change-level): Remove group from
-       gnus-active-hashtb if real killed.
-
-2000-12-19 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-insert-mime-button): Emacs20 needs local-map.
-       (gnus-mime-display-alternative): Ditto.
-       (gnus-insert-mime-security-button): Ditto.
-
-2000-12-19 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-start.el (gnus-group-change-level): Don't add it into
-       killed-list if it was killed.
-
-2000-12-19 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmbox.el (nnmbox-file-coding-system): Use binary.
-       (nnmbox-active-file-coding-system): Ditto.
-
-       * gnus-cus.el (gnus-group-parameters): Add posting-style.
-
-2000-12-19 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-version):
-       (gnus-version-number): Set to Oort Gnus 0.01.
-
-       * gnus-art.el (gnus-mime-security-button-map):
-       (gnus-insert-mime-security-button): Fix for Emacs21.
-
-2000-12-19 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el, gnus-sum.el, message.el: Comment out :help in
-       easymenu, because XEmacs doesn't understand :help.
-
-       * mm-uu.el: Require binhex.
-
-2000-12-19 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el: Merged. Emacs21 CVS tag is zsh-merge-ognus-1.
-
-2000-12-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-charset-synonym-alist): Fix a typo.
-
-2000-12-18  Gerd Moellmann  <gerd@gnu.org>
-
-       * *.xpm, *.pbm: Convert icons icons to size 24x24.
-
-2000-12-18  Dave Love  <fx@gnu.org>
-
-       * gnus-msg.el (news-setup, news-reply-mode): Don't autoload
-       (unused).
-
-2000-12-13  Miles Bader  <miles@gnu.org>
-
-       * smiley-ems.el (smiley-region): Bind `inhibit-point-motion-hooks'
-       to t, so that we don't get stuck while trying to smilefy
-       intangible text.
-
-2000-12-12  Gerd Moellmann  <gerd@gnu.org>
-
-       * smiley-ems.el (smiley-regexp-alist): Make regexps match
-       at the end of the buffer.
-       (smiley-region): In the loop, move to the end of the submatch
-       matching the smiley instead of using the end of the match
-       of the whole regexp.
-
-2000-12-12  Eli Zaretskii  <eliz@is.elta.co.il>
-
-       * message.el (message-mode): Doc fix.
-
-2000-12-12  Gerd Moellmann  <gerd@gnu.org>
-
-       * smiley-ems.el (smiley-region): Doc fix.
-
-2000-12-11  Miles Bader  <miles@gnu.org>
-
-       * gnus-sum.el (gnus-summary-recenter): When trying to keep the
-       bottom line visible, check to see if it's partially obscured, and
-       if so, either scroll one more line to make it fully visible, or
-       revert to showing the second line from the top.
-
-2000-12-07  Dave Love  <fx@gnu.org>
-
-       * mailcap.el (mailcap-download-directory)
-       * gnus-audio.el (gnus-audio-directory)
-       * smiley-ems.el (smiley-data-directory): Fix :type.
-
-2000-11-30  Dave Love  <fx@gnu.org>
-
-       * message.el (message-auto-save-directory): Use
-       file-name-as-directory.
-       (message-set-auto-save-file-name): Create
-       message-auto-save-directory if necessary.
-       (message-replace-chars-in-string): Removed -- unused.
-       (message-mail-alias-type): Customize.
-       (message-headers): Remove duplicate defgroup.
-
-2000-11-29  Dave Love  <fx@gnu.org>
-
-       * qp.el (quoted-printable-decode-region): Use error, not message
-       to report malformed text (like base64).  Amend message.
-
-2000-11-29  Miles Bader  <miles@gnu.org>
-
-       * message.el (message-header-lines): Fontify tag.
-
-2000-11-27  Dave Love  <fx@gnu.org>
-
-       * nnlistserv.el: Ignore errors when requiring nnweb and avoid a
-       compiler warning.
-
-;2000-11-26  Dave Love  <fx@gnu.org>
-;
-;      * mm-uu.el (mm-uu-configure-list): Fix typo in :type.
-;
-2000-11-23  Dave Love  <fx@gnu.org>
-
-       * uu-post.pbm, uu-decode.pbm: new files from XPMs.
-
-       * mm-uu.el (uudecode): Require.
-       (uudecode-decode-region, uudecode-decode-region-external): Don't
-       autoload.
-       (mm-uu-copy-to-buffer): Doc fix.
-       (mm-uu-decode-function, mm-uu-binhex-decode-function): Doc, custom
-       type fix.
-
-       * mailcap.el: Doc fixes.
-       (mailcap-mime-data): Various adjustments.
-       (mailcap): New group.
-       (mailcap-download-directory): Customize.
-       (mailcap-generate-unique-filename, mailcap-binary-suffixes)
-       (mailcap-temporary-directory): Deleted (unused).
-       (mailcap-unescape-mime-test): Simplify slightly.
-       (mailcap-viewer-passes-test): Use functionp.
-       (mailcap-command-p): Aliased to executable-find.
-
-       * rfc2047.el (rfc2047-encode-message-header): Don't encode if
-       default-enable-multibyte-characters is nil.
-
-2000-11-22  Gerd Moellmann  <gerd@gnu.org>
-
-       * gnus-group.el (gnus-group-make-tool-bar): Fix a paren typo.
-
-2000-11-21  Dave Love  <fx@gnu.org>
-
-       * gnus-art.el (gnus-mime-button-map): Don't inherit from
-       gnus-article-mode-map.
-;      (gnus-mime-button-menu): Use mouse-set-point.
-       (gnus-insert-mime-button, gnus-mime-display-alternative)
-       (gnus-mime-display-alternative): Don't use local-map property.
-
-2000-11-17  Dave Love  <fx@gnu.org>
-
-       * uudecode.el (uudecode-insert-char): Fix bogus feature test.
-       (uudecode-decode-region-external): Doc fix.  Use with-temp-buffer
-       and make-temp-file.
-       (uudecode-decode-region): Doc fix.
-
-2000-11-14  Dave Love  <fx@gnu.org>
-
-       * cu-exit.pbm, exit-summ.pbm, followup.pbm, fuwo.pbm:
-       * mail-reply.pbm, next-ur.pbm, post.pbm, prev-ur.pbm:
-       * reply-wo.pbm, reply.pbm, rot13.pbm, save-aif.pbm, save-art.pbm:
-       New files, derived from the XPMs.
-
-2000-11-10  Dave Love  <fx@gnu.org>
-
-       * gnus-agent.el (gnus-agent-confirmation-function): Add :version.
-       (gnus-agent-lib-file, gnus-agent-load-alist)
-       (gnus-agent-save-alist, gnus-agent-article-name): Use
-       expand-file-name.
-
-       * gnus-group.el (gnus-group-name-charset-method-alist): Add
-       :version.
-       (nnkiboze-score-file): Defvar when compiling.
-
-       * gnus-start.el (gnus-read-newsrc-file): Add :version.
-
-       * gnus-art.el (gnus-article-banner-alist)
-       (gnus-emphasize-whitespace-regexp, gnus-ignored-mime-types)
-       (gnus-article-date-lapsed-new-header)
-       (gnus-article-mime-match-handle-function, gnus-mime-action-alist)
-       (gnus-treat-strip-list-identifiers, gnus-treat-date-iso8601)
-       (gnus-treat-strip-headers-in-body)
-       (gnus-treat-capitalize-sentences, gnus-treat-play-sounds)
-       (gnus-treat-translate): Add :version.
-       (gnus-article-mime-part-function): Fix defcustom.
-
-       * nnmail.el (nnmail-expiry-target)
-       (nnmail-scan-directory-mail-source-once, nnmail-extra-headers)
-       (nnmail-split-header-length-limit): Add :version.
-
-       * gnus-sum.el (gnus-auto-expirable-marks)
-       (gnus-inhibit-user-auto-expire, gnus-list-identifiers)
-       (gnus-extra-headers, gnus-ignored-from-addresses)
-       (gnus-newsgroup-ignored-charsets)
-       (gnus-group-highlight-words-alist)
-       (gnus-summary-show-article-charset-alist): Add :version.
-
-       * catchup.pbm, describe-group.pbm, exit-gnus.pbm, get-news.pbm:
-       gnntg.pbm, kill-group.pbm, subscribe.pbm, unsubscribe.pbm: New
-       files, converted from the XPMs.
-
-       * gnus-cache.el (gnus-cache-active-file): Don't use
-       file-name-as-directory on directory.
-       (gnus-cache-file-name): Use expand-file-name, not concat.  Don't
-       use file-name-as-directory on directory.
-
-       * time-date.el (timezone-make-date-arpa-standard): Autoload.
-       (date-to-time): Use it.
-
-;      * message.el (message-mode) <adaptive-fill-regexp>:
-;      <adaptive-fill-first-line-regexp>: Use [:alnum:] in regexp range.
-;      (message-newline-and-reformat): Likewise.
-       (message-forward-as-mime, message-forward-ignored-headers)
-       (message-buffer-naming-style, message-default-charset)
-       (message-dont-reply-to-names, message-send-mail-partially-limit):
-       Add :version.
-
-       * mm-util.el: Doc fixes.
-       (mm-mime-charset): Don't use the raw result of
-       mm-preferred-coding-system.
-       (mm-with-unibyte-buffer, mm-with-unibyte-current-buffer)
-       (mm-with-unibyte): Simplify.
-
-       * gnus-int.el (gnus-start-news-server): Use expand-file-name, not
-       concat.
-
-       * pop3.el (pop3-version): Deleted.
-       (pop3-make-date): New function, avoiding message-make-date.
-       (pop3-munge-message-separator): Use it.
-
-2000-11-09  Dave Love  <fx@gnu.org>
-
-       * gnus-group.el (gnus-group-make-directory-group)
-       (gnus-group-fetch-faq): Use expand-file-name.
-       (gnus-group-fetch-faq): Simplify completing-read form.
-
-       * mm-bodies.el (mm-encode-body): Use mm-multibyte-p, don't just
-       test for Mule.
-
-       * message.el (tool-bar-map): Defvar when compiling.
-
-       * gnus-setup.el (running-xemacs, gnus-use-installed-tm)
-       (gnus-tm-lisp-directory): Deleted.
-       (gnus-use-installed-mailcrypt, gnus-emacs-lisp-directory): Use
-       (featurep 'xemacs).
-       (gnus-gnus-lisp-directory, gnus-mailcrypt-lisp-directory)
-       (gnus-mailcrypt-lisp-directory, gnus-bbdb-lisp-directory): Remove
-       version numbers from file names.
-
-2000-11-08  Dave Love  <fx@gnu.org>
-
-       * mm-view.el: Use featurep for XEmacs test.
-       (mm-inline-message): Test for `remove-specifier'; don't use
-       condition-case.
-
-       * mm-bodies.el (mm-encode-body): Use mm-multibyte-p.
-
-       * gnus-score.el (gnus-score-load-file): Use expand-file-name.
-       (gnus-score-find-bnews): Don't concat "".
-
-       * cu-exit.xpm, prev-ur.xpm, next-ur.xpm, post.xpm, fuwo.xpm:
-       * followup.xpm, uu-post.xpm, uu-decode.xpm, mail-reply.xpm:
-       * reply.xpm, reply-wo.xpm, rot13.xpm, save-aif.xpm, save-art.xpm:
-       * exit-summ.xpm: New files, renamed from icons by Luis Fernandes.
-
-       * gnus-sum.el: Put some defvars in eval-when-compile.
-       (gnus-summary-mode-hook): Add :options.
-       (gnus-summary-make-menu-bar): Add some :help, used by tool bar.
-       (gnus-summary-tool-bar-map): New variable.
-       (gnus-summary-make-tool-bar): New function.
-       (gnus-summary-mode): Put kill-all-local-variables first.
-
-       * gnus-group.el (gnus-group-toolbar-map): New variable.
-       (gnus-group-make-tool-bar): Rewritten.
-       (gnus-group-mode): Put kill-all-local-variables first.
-
-       * rfc2047.el: Require gnus-util.
-
-       * nnml.el (gnus-sorted-intersection): Autoload.
-
-       * nnheader.el: Wrap subst-char-in-string def in eval-and-compile.
-       Put some defvars in eval-when-compile.
-       (gnus-intersection, gnus-sorted-complement):  Autoload.
-
-       * imap.el (imap-point-at-eol): New, replacing gnus-point-at-eol.
-
-       * mm-encode.el (mm-body-7-or-8): Autoload.
-
-       * mm-decode.el (mm-insert-inline): Autoload.
-
-       * mml.el:
-       * message.el: Put some defvars in eval-when-compile.
-
-       * gnus-msg.el: Put some defvars in eval-when-compile.
-       (gnus-msg-mail): Move after gnus-setup-message.
-
-       * smiley-ems.el (smiley-data-directory, smiley-regexp-alist): Doc fix.
-
-2000-11-07  Dave Love  <fx@gnu.org>
-
-       * gnus-util.el (nnheader): Don't require message (recursive
-       autoload).
-
-       * uudecode.el: Avoid compiler warnings.
-
-       * rfc2047.el: (rfc2047-fold-region): Use gnus-point-at-bol.
-       (rfc2047-charset-encoding-alist): Add iso-8859-1[45].
-
-2000-11-06  Dave Love  <fx@gnu.org>
-
-       * gnus-salt.el (gnus-binary-mode): Fix call to gnus-add-minor-mode.
-
-       * uudecode.el: Use (featurep 'xemacs).  Require cl when compiling.
-       (uudecode-char-int): New alias, replacing char-int.
-       (uudecode-decode-region): Don't call buffer-disable-undo.
-
-;      * mm-uu.el (mm-uu-configure): Unquote lambda.
-;      (mm-uu-configure-list): Doc fix.
-;
-;      * earcon.el (running-xemacs): Don't define.
-;
-;2000-11-03  Stefan Monnier  <monnier@cs.yale.edu>
-;
-;      * message.el (message-font-lock-keywords): Match a final newline
-;      to help font-lock's multiline support.
-;
-2000-11-03  Dave Love  <fx@gnu.org>
-
-       * gnus-nocem.el (gnus-nocem-check-article-limit): Default to 500.
-
-       * mm-partial.el (mm-inline-partial): Space-prefix temp buffer
-       name.
-
-       * gnus-cus.el (gnus-group-parameters) <gcc-self>: Fix custom type.
-       <banner>: Fix custom type, doc.
-
-       * mm-decode.el (mm-display-external): Space-prefix temp buffer
-       name.  Don't disable undo explicitly.
-
-;2000-11-02  Dave Love  <fx@gnu.org>
-;
-;      * message.el (message-font-lock-keywords): Use [:alpha:] for
-;      cite-prefix.
-
-2000-11-01  Dave Love  <fx@gnu.org>
-
-       * rfc2047.el (base64): Require unconditionally.
-       (message-posting-charset): Defvar when compiling.
-       (rfc2047-encode-message-header, rfc2047-encodable-p): Require
-       message.
-
-       * gnus-sum.el (nnoo): Require.
-       (mm-uu-dissect): Autoload.
-
-       * mml.el (mml-parse-1): Clarify message.
-       (mml-minibuffer-read-type): Use mailcap-mime-types.
-
-2000-11-01  Stefan Monnier  <monnier@cs.yale.edu>
-
-       * mml.el: Fix a typo in the requiring of CL.
-
-2000-11-01  Dave Love  <fx@gnu.org>
-
-       * utf7.el: Require cl when compiling.
-
-       * binhex.el: Use (featurep 'xemacs).
-       (binhex-char-int): New alias, replacing char-int.  Change callers.
-       (binhex-decode-region): Simplify work buffer code.
-       (binhex-decode-region-external): Use expand-file-name, not concat.
-
-2000-10-30  Dave Love  <fx@gnu.org>
-
-       * gnus-art.el: Fix 2000-10-27 change properly.
-
-2000-10-28  Miles Bader  <miles@gnu.org>
-
-       * gnus-art.el (gnus-read-save-file-name): Remove extraneous paren.
-
-2000-10-27  Dave Love  <fx@gnu.org>
-
-       * gnus-group.el (gnus-group-make-menu-bar): Add some :help
-       strings.
-       (gnus-group-make-tool-bar): New function.
-       (gnus-group-mode): Use it.
-
-       * message.el (message-mode-menu): Add some :help strings.
-       (message-mode) [message-tool-bar-map]: Define tool-bar-map.
-       (featurep): Use (featurep 'xemacs).  Install tool bar for Emacs.
-
-       * catchup.xpm, exit-gnus.xpm, gnntg.xpm, subscribe.xpm:
-       * describe-group.xpm, get-news.xpm, kill-group.xpm:
-       * unsubscribe.xpm: New files.  Renamed icons from Luis Fernandes.
-
-       * mm-decode.el (mm-valid-and-fit-image-p): Don't test
-       display-graphic-p here.
-
-2000-10-27  Miles Bader  <miles@lsi.nec.co.jp>
-
-       * gnus-ems.el (gnus-ems-redefine): Use (featurep 'xemacs) instead
-       of the `gnus-xemacs' variable, as the latter has been removed.
-       * gnus-start.el (gnus-1, gnus-read-descriptions-file): Likewise.
-       * gnus-art.el (gnus-treat-display-xface)
-       (gnus-treat-display-smileys, gnus-treat-display-picons)
-       (gnus-article-read-summary-keys): Likewise.
-
-2000-10-26  Dave Love  <fx@gnu.org>
-
-       (defvar): Use rmail-spool-directory unconditionally.
-
-2000-10-18  Dave Love  <fx@gnu.org>
-
-       * mm-bodies.el (mm-uu-decode-function)
-       (mm-uu-binhex-decode-function): Defvar when compiling.
-
-       * gnus-nocem.el (gnus-nocem-issuers): Update.
-       (gnus-nocem-check-from): New option.
-       (gnus-nocem-scan-groups): Use it.
-       (gnus-nocem-check-article): Bind gnus-newsgroup-name.
-       (gnus-nocem-check-article-limit): Add :version.
-
-2000-10-16  Stefan Monnier  <monnier@cs.yale.edu>
-
-       * ietf-drums.el (mm-util): Require CL when compiling.
-
-2000-10-15  Dave Love  <fx@gnu.org>
-
-       * qp.el: Require mm-util.
-
-2000-10-13  Dave Love  <fx@gnu.org>
-
-       * qp.el (quoted-printable-decode-region): Avoid invalid
-       coding-systems.
-
-2000-10-12  Gerd Moellmann  <gerd@gnu.org>
-
-       * mm-bodies.el: Don't require `mm-uu' at compile-time; it leads
-       to a recursive load.
-
-2000-10-12  Dave Love  <fx@gnu.org>
-
-       * mm-util.el (mm-charset-synonym-alist): Add windows-1252.
-
-       * gnus.el (gnus-group-startup-message): Check for PBM image.
-
-2000-10-09  Dave Love  <fx@gnu.org>
-
-       * mail-source.el (mail-source-fetch-imap): Bind
-       default-enable-multibyte-characters rather than using
-       mm-disable-multibyte.
-
-2000-10-05  Dave Love  <fx@gnu.org>
-
-       * qp.el (mm-decode-coding-region, mm-encode-coding-region):
-       Autoload.
-       (quoted-printable-decode-region):  Rename arg which confused
-       charset with coding-system.  Don't use nonascii-insert-offset.
-       Coding-system encode the region initially.  Don't recognize `=='
-       as valid QP.  Coding-system decode the region finally.
-       (quoted-printable-decode-string): Rename arg which confused
-       charset with coding-system.
-
-       * mm-bodies.el: Require mm-uu, Don't require qp, uudecode.
-       (mm-encode-body): Apply mm-charset-to-coding-system to arg of
-       mm-encode-coding-region.
-       (mm-decode-body, mm-decode-string): Rename variables which
-       confused charset with coding-system.
-       (binhex-decode-region): Don't autoload.
-       (mm-body-encoding): Require message.
-       (mm-decode-content-transfer-encoding): Require mm-uu in relevant
-       cond branches.
-
-       * gnus-art.el (article-de-quoted-unreadable)
-       (article-de-base64-unreadable): Fold search case
-       rather than downcasing string.  Apply mm-charset-to-coding-system
-       to arg of quoted-printable-decode-region.
-
-2000-10-04  Dave Love  <fx@gnu.org>
-
-       * gnus-ems.el: Don't turn off compiler warnings in local vars.
-       Require ring when compiling.
-       (gnus-article-compface-xbm): New variable.
-
-2000-10-04  Dave Love  <fx@gnu.org>
-
-       * smiley-ems.el (smiley-regexp-alist, smiley-update-cache): Use
-       pbm images.
-
-       * frown.pbm, smile.pbm, wry.pbm: New files.
-
-       * frown.xbm, smile.xbm, wry.xbm: Deleted.
-
-2000-10-03  Dave Love  <fx@gnu.org>
-
-       * mail-source.el (mail-sources): Revert to nil.
-
-       * nnmail.el (nnmail-spool-file): Revert to `((file))'.
-
-       * qp.el: Don't require mm-util.
-       (quoted-printable-decode-region): Rewritten.
-       (quoted-printable-decode-string, quoted-printable-encode-region):
-       Doc fix.
-       (quoted-printable-encode-region): Barf on multibyte characters.
-       Maybe make the class multibyte.  Upcase chars, not formatted
-       strings.  Allow mm-use-ultra-safe-encoding to be unbound.
-       (quoted-printable-encode-string): Don't use
-       mm-with-unibyte-buffer.
-
-2000-09-29  Gerd Moellmann  <gerd@gnu.org>
-
-       * smiley-ems.el (smiley-update-cache):  Use `:ascent center'.
-
-2000-09-21  Dave Love  <fx@gnu.org>
-
-       * smiley-ems.el (smiley-region): Test if display-graphic-p bound
-       (for Emacs 20).  Tidy somewhat.
-
-2000-09-21  Dave Love  <fx@gnu.org>
-
-       * gnus-ems.el (gnus-article-display-xface): Use unibyte for the
-       image processing.  Rationalize logic somewhat.
-
-2000-09-20  Dave Love  <fx@gnu.org>
-
-       * gnus-start.el (gnus-1) <gnus-simple-splash>: Don't test for X
-       specifically.
-
-       * gnus.el (gnus-version-number): Avoid some redundant
-       autoloads.
-
-2000-09-20  Gerd Moellmann  <gerd@gnu.org>
-
-       * gnus-ems.el (gnus-article-display-xface): Don't convert PBM
-       to XBM; we always have PBM support.
-
-2000-09-14  Dave Love  <fx@gnu.org>
-
-       * gnus.el (gnus-charset):
-       * mm-decode.el (mime-display):
-       * imap.el (imap) <defgroup>: Add :version.
-
-2000-09-13  Gerd Moellmann  <gerd@gnu.org>
-
-       * parse-time.el: Fix author's mail address.
-
-       * earcon.el, flow-fill.el, gnus-cite.el, gnus-gl.el, gnus-ml.el:
-       * gnus-mlspl.el, gnus-nocem.el, gnus-range.el, gnus-salt.el:
-       * gnus-setup.el, gnus-soup.el, gnus-undo.el, gnus-vm.el:
-       * messcompat.el, nnbabyl.el, nndir.el, nneething.el:
-       * nngateway.el, nnheaderxm.el, nnkiboze.el, nnlistserv.el:
-       * nnmbox.el, nnmh.el, nnoo.el, nnsoup.el, nnspool.el, rfc2045.el:
-       * rfc2231.el, uudecode.el: Fix copyright notice.
-
-       * nnweb.el (toplevel): To make the file bootstrap in Emacs,
-       require `w3' at load-time only if not running in batch mode.
-
-2000-12-19 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el: Before merge with Emacs21.
-
-2000-12-19  Raymond Scholz  <ray-2000@zonix.de>
-
-       * gnus-art.el (gnus-article-dumbquotes-map): Add EUR symbol.
-
-2000-12-19  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * mml.el (mml-mode-map): Change mml prefix from `M-m' to `C-c C-m'
-       to avoid conflict with the standard `back-to-indentation'
-       binding.
-
-2000-12-17 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-extern.el (mm-inline-external-body): g-a-m-h may be a handle.
-
-       * mm-util.el (mm-enable-multibyte-mule4): Test charsetp.
-       (mm-disable-multibyte-mule4): Ditto.
-       (mm-with-unibyte-current-buffer-mule4): Ditto.
-
-2000-12-15 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * pop3.el (pop3-movemail): Use binary.
-       (pop3-movemail-file-coding-system): Removed.
-
-2000-12-14 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-charset-synonym-alist): Add cn-gb.
-
-2000-12-13 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnspool.el (nnspool-lib-dir): Check whether /usr/lib/news/active
-       exists.
-
-2000-12-13 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-post-method): Use backend name when the
-       address is "".
-
-2000-12-08 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-verify-x-pgp-sig): Don't test
-       mm-verify-option.
-       (gnus-treat-x-pgp-sig): Default value.
-       (gnus-ignored-headers): Redundant.
-
-2000-12-04 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-win.el (gnus-configure-frame): Save selected window.
-
-2000-02-15  Andrew Innes  <andrewi@gnu.org>
-
-       * nnmbox.el: Require gnus-range.
-       (nnmbox-group-building-active-articles): New variable.
-       (nnmbox-group-active-articles): New variable; this is a cache of
-       all active articles by group and number.
-       (nnmbox-in-header-p): New function.
-       (nnmbox-find-article): New function.
-       (nnmbox-record-active-article): New function.
-       (nnmbox-record-deleted-article): New function.
-       (nnmbox-is-article-active-p): New function.
-       (nnmbox-retrieve-headers): Use nnmbox-find-article.
-       (nnmbox-request-article): Ditto.  Also supply extra arg to
-       nnmbox-article-group-number.
-       (nnmbox-request-expire-articles): Ditto.
-       (nnmbox-request-move-article): Ditto.
-       (nnmbox-request-replace-article): Ditto.
-       (nnmbox-request-rename-group): Rename group entry in active
-       article cache.
-       (nnmbox-delete-mail): Update active article cache, unless article
-       is being replaced.
-       (nnmbox-possibly-change-newsgroup): Call nnmbox-read-mbox, rather
-       than partially duplicating it.
-       (nnmbox-article-group-number): Add extra `this-line' arg, to
-       handle articles belonging to multiple groups.
-       (nnmbox-save-mail): Update active article cache.
-       (nnmbox-read-mbox): Build active article cache when loading mbox.
-       Also do some repair work, if we find articles that are missing the
-       appropriate X-Gnus-Newsgroup lines in the header.  We can usually
-       reconstruct these from Xref info.
-
-2000-12-04 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mail-source.el (mail-source-report-new-mail): Use
-       nnheader-run-at-time.
-
-2000-02-15  Andrew Innes  <andrewi@gnu.org>
-
-       * mail-source.el (mail-source-fetch-pop): Clear pop password when
-       an error is thrown, and then rethrow the error.
-       (mail-source-check-pop): Ditto.
-       (mail-source-start-idle-timer): Prevent multiple pop checks
-       running if the check takes a long time.
-
-2000-12-04 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-msg-mail): COMPOSEFUNC should return t if
-       succeed.
-
-2000-12-04 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-win.el (gnus-configure-windows): Make sure
-       nntp-server-buffer is live.
-       (gnus-remove-some-windows): switch-to-buffer -> set-buffer.
-
-2000-11-21  Stefan Monnier  <monnier@cs.yale.edu>
-
-       * gnus-win.el (gnus-configure-windows): switch-to-buffer -> set-buffer.
-
-2000-12-04  Andreas Jaeger  <aj@suse.de>
-
-       * gnus-msg.el (gnus-summary-mail-forward): Fix typos in description.
-
-2000-12-03 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-fix-micalg): Alg might be nil.
-
-2000-12-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-       Trivial patch from Christopher Splinter  <chris@splinter.inka.de>
-
-       * gnus-sum.el (gnus-summary-limit-to-age): Fix typo.
-
-2000-12-01  Simon Josefsson  <sj@extundo.com>
-
-       * mml-smime.el (mml-smime-verify): Fix address parsing.
-
-2000-12-01  Simon Josefsson  <sj@extundo.com>
-
-       * mml-smime.el (mml-smime-verify): Don't modify MM buffer.  Handle
-       more than one certificate inside PKCS#7 blob.  Better security
-       information (clamed / actual sender, openssl output, certificates
-       inside message).
-
-       * smime.el (smime-verify-region): Output to /dev/null.
-       (smime-buffer-as-string-region): Don't parse empty lines.
-
-2000-11-30 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-security-button-line-format-alist): Add
-       ?d and ?D.
-       (gnus-mime-security-show-details-inline): New variable.
-       (gnus-mime-security-show-details): Use them.
-       (gnus-insert-mime-security-button): Ditto.
-
-       * mml2015.el (mml2015-gpg-verify): Set details when succeed.
-       Suggest by Michael Duggan (md5i@cs.cmu.edu).
-       (mml2015-gpg-clear-verify): Ditto.
-       (mml2015-gpg-decrypt-1): Ditto.
-       (mml2015-use): Prefer 'gpg.
-
-2000-11-30 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-add-text-properties-when): New function.
-       (gnus-remove-text-properties-when): Ditto.
-
-       * gnus-cite.el (gnus-article-hide-citation): Use them.
-       (gnus-article-toggle-cited-text): Use them.
-
-       * gnus-art.el (gnus-signature-toggle): Use them.
-       (gnus-article-show-hidden-text): Ditto.
-       (gnus-article-hide-text): Ditto.
-
-2000-11-30 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-find-charset-region): Remove eight-bit-*.
-
-2000-11-30  Simon Josefsson  <sj@extundo.com>
-
-       * smime.el (smime-point-at-eol): New alias.
-       (smime-buffer-as-string-region): Use it.
-
-2000-11-29 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nndraft.el (nndraft-request-restore-buffer): Remove Date field.
-
-2000-11-29 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-request-expire-articles): expiry-target.
-
-       * nnbabyl.el (nnbabyl-request-expire-articles): Ditto.
-
-       * nnmbox.el (nnmbox-request-expire-articles): Ditto.
-
-2000-11-22  Jan Nieuwenhuizen  <janneke@gnu.org>
-
-       * nnmh.el (nnmh-request-expire-articles): Implemented
-       expiry-target for nnmh backend.
-
-2000-11-30  Simon Josefsson  <sj@extundo.com>
-
-       * mm-decode.el (mm-security-from): New variable.
-       (mm-possibly-verify-or-decrypt): Use it rather than `from'.
-
-       * mml-smime.el (mml-smime-verify): Use `mm-security-from' rather
-       than `from'.
-
-2000-11-30  Simon Josefsson  <sj@extundo.com>
-
-       * mml-smime.el (mml-smime-verify): Verify that certificate mail
-       address match sender address.
-
-       * mm-decode.el (mm-possibly-verify-or-decrypt): Bind sender address.
-
-       * smime.el (smime-verify-region): Don't copy buffer.
-       (smime-decrypt-buffer): Use expand-file-name on keyfile.
-       (smime-pkcs7-region): New function.
-       (smime-pkcs7-certificates-region): Ditto.
-       (smime-pkcs7-email-region): Ditto.
-       (smime-buffer-as-string-region): Ditto.
-
-       * gnus-art.el (gnus-mime-security-show-details): Goto beginning of
-       buffer.
-
-2000-11-23  Jens Krinke  <j.krinke@gmx.de>
-
-       * smime.el (smime-decrypt-region): Fix keyfile argument.
-
-2000-11-29 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmail.el (nnmail-cache-accepted-message-ids): Add doc.
-
-2000-11-28 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-shoot-gnksa-feet): New variable.
-       (message-gnksa-enable-p): New function.
-       (message-send): Use it.
-       (message-check-news-body-syntax): Ditto.
-
-2000-11-28  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * message.el (message-make-message-id): Remove the redundancy.
-
-2000-11-22 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-setup): Discourage using mc-install-*-mode.
-
-       * gnus-setup.el (gnus-use-mailcrypt): Don't hook mail-crypt.
-
-2000-11-22 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-cite.el (gnus-cite-parse): Guess citation length.
-
-2000-11-22 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-ml.el (gnus-mailing-list-insinuate): New function.
-
-2000-11-22 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-ml.el (gnus-mailing-list-archive): Find the real url.
-
-2000-11-22 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-xmas.el (gnus-xmas-article-display-xface): Use
-       insert-buffer-substring.
-
-       * message.el (message-send-mail): Use buffer-substring-no-properties.
-       (message-send-news): Ditto.
-
-2000-11-22  David Edmondson  <dme@dme.org>
-
-       * imap.el (imap-wait-for-tag): Message read info.
-
-2000-11-21 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-mailcrypt-encrypt): Ensure the part is encrypted.
-       (mml2015-mailcrypt-encrypt): Use unibyte-buffer.
-       (mml2015-gpg-encrypt): Ditto.
-
-2000-11-21 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-verify-option): Default value.
-
-       * mml-sec.el (mml-secure-part): Error message.
-
-2000-11-20 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-ml.el (gnus-mailing-list-archive): Use browse-url.
-
-2000-11-20 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-make-menu-bar): Use easy-menu-add.
-
-2000-11-20 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-describe-key): Use prompt.
-       (gnus-article-describe-key-briefly): Ditto.
-
-2000-11-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-expire): Ignore corrupted history.
-
-2000-11-20 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-describe-key): New function.
-       (gnus-article-describe-key-briefly): New function.
-
-2000-11-19 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-decrypt-option): Doc typo.
-
-       * gnus-art.el (gnus-article-read-summary-keys): lookup-key may
-       return a number.
-
-2000-11-19 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-newline-and-reformat): Typo.
-
-2000-11-19 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-verify-x-pgp-sig): Check whether
-       original-article-buffer exists.
-
-       * rfc2047.el (rfc2047-q-encoding-alist): Match Resent-.
-       (rfc2047-header-encoding-alist): Addresses are different from text.
-       (rfc2047-encode-message-header): Ditto.
-       (rfc2047-dissect-region): Extra parameter.
-       (rfc2047-encode-region): Ditto.
-       (rfc2047-encode-string): Ditto.
-
-2000-11-19 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-uu.el (mm-uu-pgp-encrypted-extract-1): New function.
-       (mm-uu-pgp-encrypted-extract): Use it.
-       (mm-uu-pgp-signed-extract-1): New function.
-       (mm-uu-pgp-signed-extract): Use it.
-
-       * gnus-art.el (gnus-mime-display-security): New function.
-       (gnus-mime-display-part): Use it.
-       (gnus-mime-security-verify-or-decrypt): New function.
-       (gnus-mime-security-press-button): New function.
-       (gnus-insert-mime-security-button): Use it.
-
-       * mm-decode.el (mm-possibly-verify-or-decrypt): Use mm-h-m-c-p.
-       (mm-find-raw-part-by-type): Ditto.
-       (mm-verify-function-alist): Add x-gnus-pgp-signature handle.
-       (mm-decrypt-function-alist): Add x-gnus-pgp-encrypted handle.
-       (mm-destroy-parts): Kill nested multibyte buffer.
-
-       * mml2015.el (mml2015-mailcrypt-verify): Use mm-h-m-c-p.
-       (mml2015-gpg-verify): Ditto.
-
-2000-11-18  Simon Josefsson  <sj@extundo.com>
-
-       * mml2015.el (mml2015-mailcrypt-clear-verify): New function.
-       (mml2015-function-alist): Use it.
-
-       * mml-sec.el (mml-sign-alist): Update names.
-       (mml-encrypt-alist): Ditto.
-       (mml-secure-part-smime-sign): Moved to mml-smime.el
-       as `mml-smime-sign-query'.
-       (mml-secure-part-smime-encrypt-by-file): Moved to mml-smime.el as
-       `mml-smime-get-file-cert'.
-       (mml-secure-part-smime-encrypt-by-dns): Moved to mml-smime.el as
-       `mml-smime-get-dns-cert'.
-       (mml-secure-part-smime-encrypt): Moved to mml-smime.el as
-       `mml-smime-encrypt-query'.
-       (mml-smime-sign-buffer): Use mml-smime-sign.
-       (mml-smime-encrypt-buffer): Use mml-smime-encrypt.
-
-       * mml-smime.el (mml-smime-sign): New function.
-       (mml-smime-encrypt):
-       (mml-smime-sign-query):
-       (mml-smime-get-file-cert):
-       (mml-smime-get-dns-cert):
-       (mml-smime-encrypt-query): Moved from mml-sec.el.
-
-2000-11-16  Simon Josefsson  <sj@extundo.com>
-
-       * mml2015.el (mml2015-gpg-clear-verify): New function.
-       (mml2015-function-alist): Add it.
-
-2000-11-17 14:21  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-setup-fill-variables): Use
-       message-cite-prefix-regexp.
-       (message-newline-and-reformat): Check the end of citation, leading
-       WSP, break in the cite prefix.
-       (message-fill-paragraph): New function.
-
-2000-11-17 13:44  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * lpath.el: Shut up.
-
-2000-11-17  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-msg.el (gnus-group-posting-charset-alist): No longer allow
-       raw 8-bit in headers in dk.* newsgroups.
-
-2000-11-17 08:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-newline-and-reformat): Match extra WSPs.
-
-2000-11-16 23:31  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-generate-mime-1): Ignore ascii.
-
-2000-11-16 Justin Sheehy  <justin@iago.org>
-
-       * gnus-sum.el (gnus-summary-make-menu-bar): Fix menu items.
-
-2000-11-16 17:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-cite-prefix-regexp): Prefix should not end
-       at space.
-
-2000-11-15 18:09  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-mode-syntax-table): Add - as a word
-       constituent as in articles.
-       (message-setup-fill-variables): Add -_. as supercite-style prefix.
-       * gnus-art.el (gnus-article-mode-syntax-table): Remove ?-.
-       * gnus-cite.el (gnus-cite-parse): Match from the beginning of line.
-
-2000-11-15 13:21  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-inews-do-gcc): Expire the article.
-
-2000-11-12  David Edmondson  <dme@dme.org>
-
-       * message.el (message-font-lock-keywords): use
-       message-cite-prefix-regexp.
-
-2000-11-15  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-group.el (gnus-group-jump-to-group-prompt): New variable by
-       Stein Arild Str\e,Ax\e(Bmme.
-       (gnus-group-jump-to-group): Use it.
-       (gnus-group-jump-to-group-prompt): Customize.
-
-2000-11-14 10:32:42  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mailcap.el (mailcap-possible-viewers): Match the entire string.
-
-2000-11-14 10:20:56  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-mailcrypt-verify): replace-match is
-       incompatible.
-       (mml2015-mailcrypt-sign): Ditto.
-
-2000-11-14 10:12:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-inews-do-gcc): Update summary data when the
-       group is open.
-
-2000-11-14 00:48:52  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-bcklg.el (gnus-backlog-enter-article): Don't enter
-       nnvirtual articles.
-       (gnus-backlog-request-article): Don't request nnvirtual articles.
-
-2000-11-13 22:08:09  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-mailcrypt-sign): Remove "-" escape.
-       * mml.el (mml-generate-mime-1): Save cont. skip multipart attributes.
-
-2000-11-13 20:43:37  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-get-part): Don't call mm-insert-part.
-       * mml.el (mml-generate-mime-1): Use charset attribute.
-       * mm-bodies.el (mm-encode-body): Add parameter charset.
-       * mm-util.el (mm-mime-charset): Show error when find 8-bit characters.
-
-2000-11-13 16:09:09  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-mailcrypt-decrypt): Handle quit.
-       (mml2015-mailcrypt-clear-decrypt): Ditto.
-       (mml2015-mailcrypt-verify): Ditto.
-       (mml2015-mailcrypt-clear-verify): Ditto.
-       (mml2015-gpg-verify): Ditto.
-
-2000-11-13 15:29:58  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * smime.el (smime-openssl-program): Test the existence of openssl.
-       * mml-smime.el: Require mm-decode.
-       (mml-smime-verify-test): New function.
-       * mm-decode.el (mm-verify-function-alist): Use it.
-
-2000-11-13 09:50:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-repair-multipart): Fix Mime-Version
-       anyway.
-
-2000-11-13  Simon Josefsson  <sj@extundo.com>
-
-       * mm-uu.el (mm-uu-pgp-signed-extract): Explain why clear
-       verification doesn't work.
-
-2000-11-12 23:36:45  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-inews-mark-gcc-as-read): New variable.
-       (gnus-inews-do-gcc): Use it.
-
-2000-11-12 21:35:04  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2231.el (rfc2231-encode-string): Insert semi-colon and
-       leading space.
-       * mm-extern.el (mm-inline-external-body): Report error when no
-       access-type.
-
-2000-11-12 19:48:30  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-select-newsgroup): Change the error message.
-
-2000-11-12 11:53:18  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-button-menu): Use select-window.
-
-2000-11-12 09:47:54  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-display-part): Display multipart/related
-       as multipart/mixed.
-
-2000-11-12  David Edmondson  <dme@dme.org>
-
-       * message.el (message-cite-prefix-regexp): moved from gnus-cite.el
-       and replace `.' with `\w' to allow for different syntax tables
-       (from Vladimir Volovich).
-       * message.el (message-newline-and-reformat): use
-       `message-cite-prefix-regexp'.
-       * gnus-cite.el (gnus-supercite-regexp): use
-       `message-cite-prefix-regexp'.
-       * gnus-cite.el (gnus-cite-parse): use
-       `message-cite-prefix-regexp'.
-
-2000-11-12 08:52:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-mailcrypt-verify): Replace armors with
-       PGP SIGNATURE.  Escape leading "-"'s.
-       (mml2015-mailcrypt-sign): Replace armors with PGP MESSAGE.
-
-2000-11-11 15:55:35  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-uu.el (mm-uu-type-alist): Stricter shar regexp.
-
-2000-11-11  Simon Josefsson  <sj@extundo.com>
-
-       * mml2015.el (mml2015-gpg-verify): Set "OK" security status.
-
-       * smime.el (smime-details-buffer): New variable.
-       (smime-sign-region):
-       (smime-encrypt-region):
-       (smime-verify-region):
-       (smime-decrypt-region): Copy OpenSSL output to the buffer.
-
-       * mml-smime.el (mml-smime-verify): Support security info.
-
-2000-11-10 17:11:22  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-verify-option): Set default to nil.
-       (mm-decrypt-option): Ditto.
-       * gnus-art.el (article-verify-x-pgp-sig): New function.
-
-2000-11-10 09:01:25  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-display-alternative): Show button if no
-       preferred part.
-
-2000-11-07  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-       * gnus-sum.el (gnus-move-split-methods): Say that
-       `gnus-split-methods' uses file names, whereas this uses group
-       names.  (Report from Nevin Kapur)
-
-2000-11-10 01:23:20  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-partial.el (mm-inline-partial): Insert MIME-Version.
-
-2000-11-09 17:02:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnheader.el (nnheader-directory-files-is-safe): New variable.
-       (nnheader-directory-articles): Use it.
-       (nnheader-article-to-file-alist): Ditto.
-
-2000-11-09 16:20:37  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2047.el (rfc2047-pad-base64): New function.
-       (rfc2047-decode): Use it.
-
-2000-11-09 08:53:04  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-srvr.el (gnus-browse-foreign-server): Bind the original
-       select method.
-
-2000-11-08 19:58:58  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-gpg-decrypt-1):
-       (mml2015-gpg-verify): buffer-string has no argument in Emacs.
-
-2000-11-08 16:37:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-cache.el (gnus-cache-generate-nov-databases): Reopen cache.
-
-2000-11-08 08:38:30  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * pop3.el (pop3-munge-message-separator): A message may have an
-       empty body.
-
-2000-11-07 18:02:26  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-uu.el (mm-uu-type-alist): Don't test pgp stuff.
-       (mm-uu-pgp-encrypted-extract): Clean mml2015 buffer.
-       (mm-uu-pgp-signed-extract): Use coding-system.
-
-2000-11-07 14:33:19  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-display-part): Show MIME security button.
-       (gnus-insert-mime-security-button): New function.
-       * mm-decode.el (mm-possibly-verify-or-decrypt): Add security info.
-       * mml2015.el:  Add security info when verify or decrypt.
-       * mm-uu.el (mm-uu-pgp-signed-extract): Use multipart.
-       (mm-uu-pgp-encrypted-extract): Ditto.
-
-2000-11-07 08:49:36  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-display-parts): New function.
-       * gnus-art.el (gnus-mime-view-all-parts): Use it. Remove parts first.
-
-2000-02-02  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
-
-       * gnus-mlspl.el: Documentation tweaks.
-
-2000-11-06 22:06:44  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-possibly-verify-or-decrypt): Fix.
-       * gnus-art.el (gnus-article-encrypt-body): Rename and support prefix
-       argument.
-
-2000-11-06 19:10:14  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2231.el (rfc2231-encode-string): Use us-ascii if charset is nil.
-
-2000-11-06 18:17:53  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-article-encrypt): New function.
-       (gnus-article-encrypt-protocol-alist): New variable.
-       (gnus-article-encrypt-protocol): New variable.
-       * mml2015.el (mml2015-self-encrypt): New function.
-       (mml2015-mailcrypt-encrypt): Set mc-pgp-always-sign.
-
-2000-11-06 16:02:52  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-uu.el (mm-uu-gpg-key-skip-to-last): New function.
-       (mm-uu-pgp-key-extract): Use application/pgp-keys, don't snarf,
-       let mailcap do it.
-       * mml2015.el: Remove snarf code.
-       * mm-decode.el: Remove snarf code.
-
-2000-11-06 14:03:10  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-insert-mml-markup): Ignore internal stuff.
-       (mml-insert-mime): Understand gnus-decoded.
-       (mime-to-mml): New parameter handles.
-       * gnus-art.el (gnus-mime-save-part-and-strip): Use it.
-       * gnus-sum.el (gnus-summary-edit-article): Add argument `3'.
-
-2000-11-06 13:51:37  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mime-security): New group.
-       (mm-verify-function-alist): Add test function.
-       (mm-decrypt-function-alist): Ditto.
-       (mm-snarf-option): Set default value as nil.
-       (mm-find-part-by-type): Recursive parameter.
-       (mm-possibly-verify-or-decrypt): Support draft-ietf-openpgp-multsig.
-       * mml2015.el: Support draft-ietf-openpgp-multsig.
-
-2000-11-06 13:01:27  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-view-part-as-charset): New function.
-       (gnus-article-view-part-as-charset): New function.
-
-2000-11-05 22:34:07  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-verify-option): Default value.
-       (mm-possibly-verify-or-decrypt): Dealing with broken messages.
-
-2000-11-05 15:06:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnvirtual.el (nnvirtual-request-expire-articles): Uncompress range.
-
-2000-11-05  Simon Josefsson  <sj@extundo.com>
-
-       * mml-smime.el (mml-smime-verify): Work in original multipart
-       buffert.
-
-       * mm-decode.el (mm-handle-multipart-original-buffer): New macro.
-       (mm-handle-multipart-ctl-parameter): Ditto.
-       (mm-alist-to-plist): New function.
-       (mm-dissect-buffer): Store CTL parameters and copy original buffer
-       for multiparts.
-       (mm-destroy-parts): Destroy multipart buffert.
-       (mm-remove-part): Ditto.
-
-       * mml-smime.el (mml-smime-sign): Not used.
-       (mml-smime-encrypt): Ditto.
-
-       * mm-decode.el (mml-smime-verify): Autoload mml-smime.
-
-       Verify S/MIME signature support.
-
-       * mm-decode.el (mm-inline-media-tests): Add
-       application/{x-,}pkcs7-signature.
-       (mm-inlined-types): Ditto.
-       (mm-automatic-display): Ditto.
-       (mm-verify-function-alist): Ditto.  Add name of method.
-       (mm-decrypt-function-alist): Add name of method.
-       (mm-find-part-by-type): Add documentation.
-       (mm-possibly-verify-or-decrypt): Use new format of
-       mm-{verify,decrypt}-function-alist.  Use method names.
-
-       * mml-smime.el (mml-smime-verify): New function.
-
-2000-11-04 20:38:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-text): Move point to the end of inserted text.
-
-2000-11-04 19:07:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-function-alist): Clear verify and decrypt.
-       * mm-uu.el: Reorganized.  Add gnatsweb, pgp-signed, pgp-encrypted.
-       * mm-decode.el (mm-snarf-option): New variable.
-
-2000-11-04 13:08:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-subst-char-in-string): New function.
-       (mm-replace-chars-in-string): Use it.
-       * message.el (message-replace-chars-in-string): Use it.
-       * nnheader.el (nnheader-replace-chars-in-string): Use it.
-       * gnus-mh.el (mh-lib-progs): Shut up.
-
-2000-11-04  ShengHuo Zhu  <zsh@cs.rochester.edu>
-
-       * base64.el, md5.el: Moved to contrib directory.
-
-2000-11-04 11:13:56  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-search-article-forward): Don't move
-       the last article when search.
-
-2000-11-04 10:34:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnheader.el (nnheader-pathname-coding-system): Default iso-8859-1.
-       * nnmail.el (nnmail-pathname-coding-system): Ditto.
-
-2000-09-29  David Edmondson  <dme@thus.net>
-
-       * message.el (message-newline-and-reformat): Typo.
-
-2000-11-04 10:11:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2231.el (rfc2231-decode-encoded-string): Test mm-multibyte-p.
-
-2000-11-04 09:53:42  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nntp.el (nntp-decode-text): Delete bogus status lines.
-
-2000-11-03  Stefan Monnier  <monnier@cs.yale.edu>
-
-       * message.el (message-font-lock-keywords): Match a final newline
-       to help font-lock's multiline support.
-
-2000-11-04 09:11:44  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnoo.el (nnoo-set): New function.
-
-2000-11-04  ShengHuo Zhu  <zsh@cs.rochester.edu>
-
-       * gpg.el, gpg-ring.el: Moved to contrib directory.
-
-2000-11-04  Simon Josefsson  <sj@extundo.com>
-
-       * nnimap.el (nnimap-split-inbox): Typo.
-
-2000-11-03 10:46:44  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-msg-mail): Move it backwards.
-
-2000-11-03  Simon Josefsson  <sj@extundo.com>
-
-       * rfc2231.el (rfc2231-parse-qp-string): New function.
-       (require): rfc2047.
-
-       * mail-parse.el (mail-header-parse-content-type):
-       (mail-header-parse-content-disposition): Support invalid QP
-       encoded strings, by using `rfc2231-parse-qp-string'.
-
-2000-11-03 08:58:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2231.el (rfc2231-parse-string): Decode when there is no number.
-       (rfc2231-decode-encoded-string): Typo "> X 1".
-       (rfc2231-encode-string): Insert the name of charset.
-       * mail-parse.el (mail-header-encode-parameter): Use RFC2231.
-
-2000-11-02 23:35:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-save-part): Return the filename.
-       * gnus-sum.el (gnus-summary-edit-article): Remove a hack.
-       * gnus-art.el (gnus-mime-save-part-and-strip): New function.
-       (gnus-mime-action-alist): Use it.
-       (gnus-mime-button-commands): Use it.
-       * mm-extern.el (mm-extern-local-file): Error when the file is gone.
-       (mm-inline-external-body): unwind-protect.
-
-2000-11-02 21:08:49  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-insert-mime-button): Show url.
-
-2000-11-02 19:51:19  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-generate-mime-1): Support external url.
-       * nnwarchive.el (nnwarchive-mail-archive-article): Use external url.
-
-2000-11-02 16:53:32  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-partial.el (mm-inline-partial): Buffer name with a leading space.
-       * mm-decode.el (mm-display-external): Ditto.
-       * mm-extern.el: New file.
-       * mm-decode.el (mm-inline-media-tests): Hook it up.
-       (mm-inlined-types): Inline message/external-body.
-
-2000-11-02  Simon Josefsson  <sj@extundo.com>
-
-       * gnus-art.el (gnus-visible-headers): Add Mail-Followup-To.
-
-       * message.el (message-get-reply-headers): Better handling when
-       Mail-Followup-To is very large.
-
-2000-11-02 13:27:56  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-uu.el (gnus-uu-post-news): Comment out the redundancy.
-       * gnus-art.el (gnus-article-edit-done):
-       * gnus-sum.el (gnus-summary-edit-article-done): Move line
-       counting code here.
-       * gnus-msg.el (gnus-setup-message): Remove a hack.
-
-2000-11-02 09:33:01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-newsgroup-variables): New variable.
-       (gnus-summary-mode): Make them local variables.
-       (gnus-set-global-variables): Globalize them.
-       (gnus-summary-exit): Kill them.
-
-2000-11-02  Hrvoje Niksic  <hniksic@arsdigita.com>
-
-       * rfc2047.el (rfc2047-encoded-word-regexp): Allow empty encoded
-       word.
-
-2000-11-01 10:07:13  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-display-part): Add to signed or encrypted.
-       gnus-article-wash-types.
-       * gnus-art.el (gnus-article-wash-status): Use them.
-
-2000-11-01 08:54:11  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-read-tag): Remove spaces and LF.
-
-2000-11-01 08:01:03  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-mailcrypt-encrypt): Use from and sign parameters.
-       * mml.el (mml-generate-mime-1): Add sender and recipients attributes.
-
-2000-11-01 07:39:24  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-force-verify-and-decrypt): New function.
-
-2000-10-31 22:06:13  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-article-charset): New variable.
-       (gnus-summary-display-article): Set it.
-       * gnus-msg.el (gnus-copy-article-buffer): Use it.
-       * gnus-art.el (gnus-article-mode): Make it local variable.
-
-2000-11-01 01:12:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnultimate.el (nnultimate-create-mapping): Use nreverse.
-
-2000-10-31 23:45:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnwfm.el: New file.
-
-       * nnweb.el (nnweb-replace-in-string): New function.
-
-2000-10-31 17:32:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el: Wrap gpg.el.
-       * gpg.el (gpg-verify): The last argument of apply is a list.
-       (gpg-encrypt): Add passphrase as a parameter.
-
-2000-10-31 17:28:45  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gpg.el: New file.
-       * gpg-ring.el: New file.
-
-2000-10-31 11:44:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-show-article): Fix the summary line.
-
-2000-10-31  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-sum.el (gnus-summary-insert-line): Work with quoted
-       double-quote characters.
-       (gnus-summary-prepare-threads): Ditto.
-
-2000-10-31 08:36:03  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-mime-display-single): Forward line -1.
-       * mml.el (mml-read-tag): Don't skip the leading space.
-       * lpath.el (font-lock-set-defaults): Shut up.
-
-2000-10-31 00:04:35  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el: Fix doc. Remove bogus mml2015-setup.
-
-2000-10-30 23:37:07  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * qp.el (quoted-printable-encode-region): Replace leading - when
-       ultra safe.
-       * mml.el (mml-generate-mime-postprocess-function): Removed.
-       (mml-postprocess-alist): Removed.
-       (mml-generate-mime-1): Use ultra-safe when sign.
-       * mml2015.el (mml2015-fix-micalg): Uppercase.
-       (mml2015-verify): Insert LF.
-       (mml2015-mailcrypt-sign): Downcase; search backward.
-
-2000-10-16 11:36:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnultimate.el (nnultimate-forum-table-p): Be a bit more
-       restrictive.
-       (nnultimate-table-regexp): New variable.
-       (nnultimate-forum-table-p): Use it.
-
-2000-10-30  Ed L Cashin  <ecashin@coe.uga.edu>
-       Trivial patch.
-
-       * gnus-sum.el (gnus-summary-expire-articles): Save point.
-
-2000-10-30 08:52:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml-sec.el (mml-pgpmime-sign-buffer): Use mml2015-sign.
-       (mml-pgpmime-encrypt-buffer): Use mml2015-encrypt.
-
-2000-10-30 08:38:12  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el: Shut up.
-
-2000-10-30 08:17:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus.el (gnus-server-browse-hashtb): Removed.
-       * gnus-group.el (gnus-group-prepare-flat-list-dead): Use gnus-active.
-       (gnus-group-insert-group-line-info): Use simplified method.
-       * gnus-srvr.el (gnus-browse-foreign-server): Use gnus-set-active.
-
-2000-10-30 01:52:40  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-union): Renamed from gnus-agent-union, and
-       moved here.
-       * gnus-agent.el (gnus-agent-fetch-headers): Use it.
-       * gnus-group.el (gnus-group-prepare-flat): Use it.
-       * gnus-topic.el (gnus-group-prepare-topics): Use it.
-
-2000-10-30 01:23:49  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-mode): Show menu in XEmacs.
-
-2000-10-30 00:49:33  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-srvr.el (gnus-server-browse-in-group-buffer): New variable.
-       (gnus-server-read-server-in-server-buffer): New function.
-       (gnus-browse-foreign-server): Browse in group buffer.
-       * gnus-group.el (gnus-group-prepare-flat): List group not in list.
-       (gnus-group-prepare-flat-list-dead): Use gnus-group-insert-group-line.
-       * gnus-topic.el (gnus-group-prepare-topics): Ditto.
-       * gnus.el (gnus-server-browse-hashtb): New variable.
-
-2000-10-29 22:31:40  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-open-nov): Use group.
-
-2000-10-29 17:23:15  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el: Add NOV. Set version to 2.0.
-       (nnfolder-nov-is-evil): If non-nil, nnfolder acts like 1.0.
-
-2000-10-29 10:35:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el (mml2015-mailcrypt-sign): Use mc-sign-generic.
-
-2000-10-29 09:42:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-srvr.el (gnus-browse-foreign-server): Show level mark.
-       (gnus-browse-unsubscribe-group): Unsubscribed is not killed.
-
-2000-10-29 08:28:58  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-read-folder): Don't goto point-min.
-
-2000-10-28 19:11:01  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-verify-function-alist): New variable.
-       (mm-verify-option): New variable.
-       (mm-decrypt-function-alist): Ditto.
-       (mm-decrypt-option): Ditto.
-       (mm-find-raw-part-by-type): New function.
-       (mm-possibly-verify-or-decrypt): New function.
-       (mm-dissect-multipart): Use it.
-       * mml2015.el (mml2015-fix-micalg): New function.
-       (mml2015-decrypt): Use new interface.
-       (mml2015-verify):  Use new interface.
-       (mml2015-setup): Make it bogus.
-
-2000-10-28 16:54:45  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-generate-mime-postprocess-function): Set to
-       mml-postprocess.
-       (autoload): Autoload mml2015 and mml-smime.
-       (mml-postprocess-alist): Use mml2015-sign and mml2015-encrypt.
-       * mml2015.el (mml2015-encrypt): New function.
-       (mml2015-sign): New function.
-       (mml2015-encrypt-function): New variable.
-       (mml2015-sign-function): New variable.
-       (mml2015-mailcrypt-encrypt): Use message-recipients.
-       (mml2015-setup): Don't set mml-generate-mime-postprocess-function.
-       * mml-smime.el (mml-smime-setup): Ditto.
-
-2000-10-28  Simon Josefsson  <sj@extundo.com>
-
-       * imap.el (imap-parse-resp-text-code): Workaround bug in Stalker
-       Communigate Pro 3.3.1 server.
-
-       * mml-sec.el (mml-smime-encrypt-buffer): Support certfiles stored
-       in buffers.
-       (mml-secure-dns-server): Removed.
-       (mml-secure-part-smime-encrypt-by-dns): Use DIG interface.  Don't
-       write certificates to files.
-
-       * smime.el (smime-dns-server): New variable.
-       (smime-mail-to-domain):
-       (smime-cert-by-dns): New functions.
-
-       * dig.el: New file.
-
-2000-10-28 10:09:41  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-options): New variable.
-       (message-options-set-recipient): New function.
-       (message-send): Use them.
-       * gnus-int.el (gnus-request-replace-article): Use them.
-       (gnus-request-accept-article): Ditto.
-       * mml.el (mml-preview): Use them.
-       * gnus-sum.el (gnus-summary-edit-article): Use them.
-
-       * message.el (message-options-get): New function.
-       (message-options-get): New function.
-       * rfc2047.el (rfc2047-encode-message-header): Use them.
-       * mm-bodies.el (mm-encode-body): Use them.
-
-2000-10-28  Simon Josefsson  <sj@extundo.com>
-
-       * nnimap.el (nnimap-retrieve-which-headers):
-       (nnimap-request-article-part): Quote message-id.
-
-       * smime.el (smime-CA-directory): Rename from `smime-CAs'.
-       (smime-CA-file): New variable.
-       (smime-call-openssl-region): Don't error.
-       (smime-sign-region): Return result value.
-       (smime-encrypt-region): Ditto.
-       (smime-verify-region): New function.
-       (smime-decrypt-region): Ditto.
-       (smime-verify-buffer): Ditto.
-       (smime-decrypt-buffer): Ditto.
-
-       * mml.el: Require mml-sec.
-       (mml-generate-mime-1): Support "sign" and "encrypt" MML tags.
-       (mml-mode-map): Add "sign" and "encrypt" maps.
-       (mml-menu): Add security menu.
-       (mml-preview): Use generate-new-buffer.
-
-       * mml-sec.el: New file.
-
-2000-10-28 03:43:03  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-find-part-by-type): Move it here.
-       * mml.el (mml-postprocess): Move it here.
-       (mml-postprocess-alist): Move it here. Merge them.
-
-2000-10-28 03:38:39  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2047.el (rfc2047-encode-message-header): Make sure no
-       unencoded stuff in the header.
-
-2000-10-28 02:40:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-listed-groups): New variable.
-       (gnus-group-list-option): New variable.
-       (gnus-group-list-limit-map): New keymap.
-       (gnus-group-list-flush-map): New keymap.
-       (gnus-group-list-plus-map): New keymap.
-       (gnus-group-prepare-logic): New function.
-       (gnus-group-prepare-flat): Merge with
-       gnus-group-prepare-flat-predicate. Use gnus-group-listed-groups.
-       (gnus-group-prepare-flat-list-dead): Ditto.
-       (gnus-group-list-matching): Use gnus-group-prepare-function.
-       (gnus-group-list-dormant): Ditto.
-       (gnus-group-list-cached): Ditto.
-       (gnus-group-listed-groups): New function.
-       (gnus-group-list-limit): New function.
-       (gnus-group-list-flush): New function.
-       (gnus-group-list-plus): New function.
-       * gnus-topic.el (gnus-group-prepare-topics): Accept predicate.
-       (gnus-topic-prepare-topic): Ditto.
-
-2000-10-27  Paul Jarc  <prj@po.cwru.edu>
-
-       * message.el (message-insert-to, message-get-reply-headers):
-       (message-reply, message-followup): Mail-{Followup,Reply}-To.
-
-2000-10-27 19:45:58  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml2015.el: New file.
-       * smime.el: New file.
-       * mml-smime.el: New file.
+2004-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-2000-10-27 19:42:12  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el (gnus-logo-color-style): Changed colors to `no'.
 
-       * ChangeLog: Moved to ChangeLog.1.
+       * Moved to Changelog.1.
 
-    Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+    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.
 
index c88d229..b60fb5d 100644 (file)
+2004-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump version.
+
+2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: No Gnus v0.1 is released.
+
+2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: No Gnus v0.1 is released.
+
+2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: No Gnus v0.0 is released.
+
+2004-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+       (gnus-version): No.
+
+2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Gnus v5.10.6 is released.
+
+2004-01-04  Kai Grossjohann  <kai@emptydomain.de>
+
+       * gnus-sum.el (gnus-summary-print-article): Doc fix.
+
+2004-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+
+2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Gnus v5.10.5 is released.
+
+2004-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-face-from-file): Message 9.
+
+2004-01-03  Romain FRANCOISE  <romain@orebokech.com>
+
+       * gnus-fun.el (gnus-face-from-file): Use gnus-message.
+
+2004-01-03  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-mid-or-mail-heuristic): Treat Gmane
+       addresses specially.  Fix returned value and messages.
+
+       * mm-decode.el (mm-enable-external): New variable.
+       (mm-display-part): Use it.
+       (mm-display-external): Fix message in case of nil handle.
+
+       * Update copyright for several files.
+
+       * spam-report.el (spam-report-gmane): Adjust verbosity.
+       Delete trailing whitespace.  Update copyright.
+
+       * spam.el: Fix many (but not all) checkdoc complaints.
+       Delete trailing whitespace.
+
+       * message.el (message-header-synonyms): Defcustom.
+       (message-get-reply-headers): Catch `Original-To'.
+       (message-carefully-insert-headers): Added comment.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Improved "Washing" menu.
+
+2004-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-select-newsgroup): Use cat.
+
+       * gnus-agent.el (gnus-agent-cat-enable-undownloaded-faces): New
+       cat. 
+
+       * gnus.el (gnus-user-agent): Moved here.
+
+       * gnus-msg.el (gnus-user-agent): Moved from here.
+
+       * gnus.el (gnus-version-number): Bump.
+
+2004-01-03 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Gnus v5.10.4 is released.
+
+2004-01-02  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus.el (gnus-mode-line-buffer-identification): Show version in
+       help-echo.
+       (gnus-read-group): Allow most group names.  Changed warning.
+
+2004-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-dired.el (gnus-dired-mode-map): Change keymaps.
+
+2004-01-02  Arne J\e,Ax\e(Brgensen  <arne@arnested.dk>
+
+       * smime.el (smime-crl-check): Doc fix.
+
+2004-01-02  Edwin Steiner  <edwin.steiner@gmx.net>
+
+       * gnus-nocem.el (gnus-nocem-enter-article): Use the real group
+       hashtb (tiny patch).
+
+2004-01-02  Kai Grossjohann  <kai@emptydomain.de>
+
+       * nnml.el (nnml-save-mail): Grok compressed articles.  From
+       Michael Albinus <Michael.Albinus@alcatel.de>.
+
+2004-01-02  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-ham-copy-or-move-routine): use spam-list-articles
+       (spam-list-articles): rewritten to only check a mark once per
+       invocation
+
+2004-01-01  Simon Josefsson  <jas@extundo.com>
+
+       * mml-sec.el (mml-default-encrypt-method)
+       (mml-default-sign-method): Defcustom.
+
+2003-12-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mml.el (mml-generate-mime-1): Remove extra ).
+
+       * gnus-group.el (gnus-group-set-current-level): Signal errors on
+       topic lines.
+       (gnus-group-set-current-level): Fix fix.
+
+2003-12-31  Jeremy Maitin-Shepard  <jbms@attbi.com>
+
+       * mml.el (mml-generate-mime-1): Use mml-compute-boundary (tiny
+       change). 
+
+2003-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-group.el: Removed `(when t ...)' around `gnus-define-keys'.
+       (gnus-group-group-map): Added `gnus-group-read-ephemeral-group'
+       (already in previous commit inadvertently).
+       (gnus-group-make-menu-bar): Added `gnus-group-read-ephemeral-group'.
+       (gnus-group-read-ephemeral-group): Made interactive.
+
+       * gnus-score.el (gnus-score-find-trace): Added comment on sync
+       with `gnus-score-edit-file-at-point'.
+
+       * gnus-logic.el (gnus-score-advanced): Ditto.
+
+       * gnus-score.el (gnus-score-edit-file-at-point): Fix for
+       advanced scoring.
+
+2003-12-30  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-score.el (gnus-score-edit-file-at-point): Use
+       gnus-point-at-*, for portability.
+
+2003-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-treat-body-boundary): Fix doc-string and
+       custom type.
+       (gnus-button-mid-or-mail-regexp): Don't be too restrictive.
+       Suggested by Felix Wiemann <Felix.Wiemann@gmx.net>.
+       (gnus-button-alist): Added "M-x ... RET" and "mid:" buttons.
+       Added comments about relevant RFCs.
+
+       * gnus-sum.el (gnus-summary-mode): Untabify doc-string.
+       (gnus-summary-goto-article): Allow `%40'.
+       (gnus-summary-refer-article): Convert `%40' to `@'.
+
+2003-12-30  Simon Josefsson  <jas@extundo.com>
+
+       * smime.el (smime-crl-check): New.
+       (smime-verify-region): Use it.  From Arne J\e,Ax\e(Brgensen
+       <arne@arnested.dk> in <87llpk9v5q.fsf@seamus.arnested.dk> (tiny
+       change).
+
+2003-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-score.el (gnus-score-edit-file-at-point): Consider the
+       whole match element.  From Karl Pfl\e,Ad\e(Bsterer <sigurd@12move.de>.
+       (gnus-score-find-trace): Use it.  Added `f' and `t' commands,
+       added quick help.  With some suggestions from Karl Pfl\e,Ad\e(Bsterer
+       <sigurd@12move.de>.
+
+       * gnus-util.el (gnus-emacs-version): Added doc-string.
+
+       * mml.el (mml-minibuffer-read-disposition): New function.
+       (mml-attach-file): Use it.
+       (mml-preview): Added MIME preview to gnus-buffers.
+
+2003-12-30  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Add ellipses.
+
+2003-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el (gnus-get-unread-articles): Inline gnus-server-get-method.
+       (gnus-get-unread-articles): Cache methods.
+       (gnus-get-unread-articles-in-group): Indent.
+
+       * gnus.el (gnus-version-number): Bump.
+       (gnus-secondary-method-p): Extend servers to methods before comparing.
+       (gnus-secondary-method-p): Revert.
+
+2003-12-30 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Gnus v5.10.3 is released.
+
+2003-12-29  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-agent.el (gnus-agentize): Improve auto-agentizing logic.
+       Suggested by Steinar Bang <sb@dod.no>.
+       (gnus-agent-auto-agentize-methods): Customize.
+
+2003-12-29  Kevin Greiner <kgreiner@xpediantsolutions.com>
+       * gnus.el (gnus-server-to-method): Fixed bug in 2003-12-22
+       check-in.
+
+2003-12-28  Adrian Lanz  <lanz@fowi.ethz.ch>
+
+       * mail-source.el (mail-source-fetch-imap): Prevent storing of
+       identical entries for imap mail sources, when retrieving mail
+       messages from an imap server within the same Gnus session several
+       times (tiny change).
+
+2003-12-28  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-view.el (mm-text-html-washer-alist): Use
+       mm-inline-wash-with-stdin for w3m-standalone.
+
+       * mm-decode.el (mm-text-html-renderer): Add w3m-standalone.
+
+       * mml1991.el (mml1991-pgg-encrypt): Decode according to CTE before
+       encrypting.
+
+2003-12-28  Jesper Harder  <harder@ifa.au.dk>
+
+       * mml1991.el (mml1991-pgg-sign): Use unibyte when re-encoding.
+       From Ivan Boldyrev <boldyrev@uiggm.nsc.ru> (tiny change).
+
+2003-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el: Add an advice to byte-optimize-form-code-walker to
+       avoid the warning ``...called for effect'' for the pop form when
+       running Emacs 21.3.
+
+2003-12-26  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-bodies.el (mm-body-encoding): Don't use 7bit if the body
+       contains "^From " and mm-use-ultra-safe-encoding is true.
+
+2003-12-25  Jesper Harder  <harder@ifa.au.dk>
+
+       * mml1991.el (mml1991-pgg-sign): Encode and decode according to
+       CTE header.  Don't insert gpg output as unibyte.
+
+2003-12-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el: Remove display-time-event-handler and open-ssl-stream;
+       add delete-extent for Emacs; rearrange bindings assuming w3 may
+       not be available and XEmacs without the file-coding feature may be
+       used.
+
+2003-12-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (dgnushack-compile): Increase the value for
+       max-specpdl-size when compiling Gnus with Emacs 20.
+
+2003-12-22  Kevin Greiner <kgreiner@xpediantsolutions.com>
+       * 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
+       twice to open each server.
+
+       * gnus-start.el (gnus-get-unread-articles-in-group): Autoload
+       gnus-agent-possibly-alter-active rather than inline to resolve
+       compiler warnings.
+
+       * gnus.el (gnus-server-to-method): Added fallback of iterating
+       over gnus-newsrc-alist to resolve names of foreign servers.
+       Should fix recent agent bug.
+
+2003-12-22  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-score.el (gnus-summary-lower-score)
+       (gnus-summary-increase-score): Mention symbolic prefix in the
+       doc-string.  Suggested by Karl Pfl\e,Ad\e(Bsterer <sigurd@12move.de>.
+
+2003-12-21  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-agent.el (gnus-agent-read-agentview): Use
+       car-less-than-car.
+
+2003-12-20  Artem Chuprina <ran@ran.pp.ru>  (tiny change)
+
+       * message.el (message-yank-buffer): Bind message-reply-buffer to
+       a buffer rather than a string.
+
+2003-12-19  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-summary-followup): Correct documentation.
+
+2003-12-18  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-inews-add-send-actions): `yanked' can be a
+       list of lists.  Reported by Dmitri Paduchikh <paduch@imm.uran.ru>.
+
+2003-12-18  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * mm-url.el (mm-url-insert-file-contents-external)
+       (mm-url-insert-file-contents): Added doc-strings.  Autoload.
+
+2003-12-18  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-cus.el (defvar): defvar
+       gnus-agent-cat-disable-undownloaded-faces.
+
+2003-12-17  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-forward-subject-name-subject): Use
+       gnus-extract-address-components instead of
+       mail-header-parse-address because it may be called with non-ascii
+       text.
+
+2003-12-16  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * nnmail.el (nnmail-split-fancy): The widget now supports
+       restrictions.
+
+2003-12-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnheader.el (nnheader-find-etc-directory): Find the newest one.
+
+2003-12-16  Simon Josefsson  <jas@extundo.com>
+
+       * sha1-el.el (autoload): Don't use ignore-errors.
+       (sha1-use-external): Use condition-case.  Suggested by Katsumi
+       Yamaoka <yamaoka@jpl.org>.
+
+2003-12-15  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnmail.el (nnmail-split-fancy): Make it customizable with Emacs
+       20 as well.
+
+2003-12-15  Simon Josefsson  <jas@extundo.com>
+
+       * sha1-el.el (autoload): Ignore errors for
+       executable-find. (XEmacs ecrypto does not require sh-script where
+       executable.el is located.)
+       (sha1-use-external): Likewise.
+
+       * sha1-el.el (sha1): Add defgroup.
+       (sha1-maximum-internal-length, sha1-program, sha1-use-external)
+       (sha1-program): Use 'sha1sum' from GNU CoreUtils instead of OpenSSL.
+       (sha1): Autoload.
+
+       * nndraft.el (nndraft-request-move-article): Copy definition of
+       nnmh-request-move-article instead of calling it, because the nnmh
+       version uses nnmh-request-article which isn't the same as the
+       nndraft version.
+
+2003-12-13  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el: added some gnus-registry autoloads
+       (spam-split-symbolic-return): makes spam-split return 'spam
+       instead of the value of spam-split-group when spam is detected
+       (spam-split-symbolic-return-positive): makes spam-split return
+       'ham instead of nil when ham is detected
+       (spam-autodetect-recheck-messages): tells spam.el whether it
+       should recheck all messages in a group, or only the unseen ones
+       (spam-split-last-successful-check): spam-split will set this to
+       the last successful check; this was seen as a cleaner approach
+       than returning a cell like '(spam spam-use-bogofilter)
+       (spam-list-of-checks): documentation appended
+       (spam-split): accomodate the spam-split-symbolic-return and
+       spam-split-symbolic-return-positive variables
+       (spam-find-spam): new function called when the summary is built
+       (spam-log-registered-p): checks if a ham or spam registration has
+       already been done for an article
+       (spam-check-regex-headers, spam-check-blackholes, spam-check-BBDB)
+       (spam-check-ifile, spam-check-stat, spam-check-whitelist)
+       (spam-check-blacklist, spam-check-bogofilter-headers)
+       (spam-check-spamoracle): respect the spam-split-symbolic-return
+       and spam-split-symbolic-return-positive variables
+       (spam-initialize): add spam-find-spam to gnus-summary-prepare-hook
+       (spam-unload-hook): remove spam-find-spam from
+       gnus-summary-prepare-hook
+
+       * gnus.el (spam-autodetect, spam-autodetect-methods): new
+       configuration items for spam autodetection
+
+2003-12-12  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-draft.el (gnus-draft-mode-map): Bind `e' to
+       `gnus-draft-edit-message'.  We still have `B w' for
+       `gnus-summary-edit-article'.
+
+2003-12-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnheaderxm.el (nnheader-xmas-run-at-time): Use a simple function
+       definition if there is not a bug in start-itimer.
+
+       * pgg.el (pgg-run-at-time): Ditto.
+
+2003-12-11  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-possibly-alter-active): New Function.
+       (gnus-agent-regenerate-group): When necessary, alter the group's
+       active range to include articles newly recognized as being
+       downloaded.
+       (gnus-agent-regenerate): Removed code that updated the agent's
+       active file as the new gnus-agent-possibly-alter-active function
+       obsolesced it.
+
+       * gnus-cus.el (gnus-agent-customize-category): Added missing
+       agent-disable-undownloaded-faces parameter.
+       
+       * gnus-start.el (gnus-activate-group): Backed out my 2003-11-29
+       patch as it was too late at adjusting the active range.
+       (gnus-get-unread-articles-in-group): Added call to new
+       gnus-agent-possibly-alter-active to adjust the active range.
+
+2003-12-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-get-reply-headers): Narrow to headers.
+
+2003-12-10  Teodor Zlatanov  <tzz@lifelogs.com> 
+
+       * spam.el (spam-disable-spam-split-during-ham-respool): new
+       variable.  From lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly)
+       (spam-ham-copy-or-move-routine): respect
+       spam-disable-spam-split-during-ham-respool.  From
+       lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly)
+       (spam-split-disabled): new variable.  From
+       lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly)
+       (spam-split): respect spam-split-disabled.  From
+       lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly)
+
+2003-12-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnheaderxm.el (nnheader-xmas-run-at-time): Make it work
+       correctly for the first argument.
+
+       * pgg.el (pgg-run-at-time): New function.
+       (pgg-add-passphrase-cache): Use it.
+
+2003-12-10  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-parse.el (pgg-decode-packets): Rewrite to handle corrupt
+       input.
+       (pgg-decode-armor-region): Don't parse packet if decoding fail.
+
+2003-12-09  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-bogofilter): run in the correct buffer.
+       From lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Ba\e(Broly).
+       (spam-bogofilter-database-directory): correct customization
+       group.  From Xavier Maillard <zedek@gnu-rox.org>.
+
+2003-12-09  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * nnmail.el (nnmail-lazy, nnmail-split-fancy): New widgets.
+       (nnmail-split-fancy): Use it.
+
+2003-12-08  Joel Ray Holveck <joelh@piquan.org>  (tiny change)
+
+       * gnus-sum.el (gnus-summary-save-parts-1): Consider the "name"
+       parameter of Content-Type.
+
+2003-12-08  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-util.el: Revert 2003-12-03 change, instead, provide the
+       compiler macro for rmail-select-summary if rmail is not available,
+       and bind rmail-summary-displayed and rmail-maybe-display-summary
+       in order to silence the compiler even if tm is not available.
+
+2003-12-08  Simon Josefsson  <jas@extundo.com>
+
+       * flow-fill.el (fill-flowed-encode-tests, fill-flowed-test): Add.
+
+2003-12-08  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-extended-version): Bind float-output-format to
+       nil.
+
+2003-12-08  Simon Josefsson  <jas@extundo.com>
+
+       * mml-smime.el (mml-smime-sign): Replace CRLF with LF in OpenSSL
+       output.  Reported by Arne J\e,Ax\e(Brgensen <arne@arnested.dk>.
+
+2003-12-07  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-gpg.el (pgg-gpg-recipient-arg): Add.
+       (pgg-gpg-encrypt-region): Use it.  Tiny patch from Lloyd Zusman
+       <ljz@asfast.com>.
+       (pgg-gpg-recipient-argument): Doc fix.  Renamed fro p-g-r-a.
+       (pgg-gpg-encrypt-region): Update.
+
+2003-12-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * spam.el (spam-check-spamoracle, spam-spamoracle-learn): Don't
+       use = or zerop to test the return value of call-process, because
+       it can be a string.
+
+       * mail-source.el (mail-source-fetch-with-program): do.
+
+       * mailcap.el (mailcap-viewer-passes-test): do.
+
+       * gnus-uu.el (gnus-uu-treat-archive, gnus-uu-post-encode-mime)
+       (gnus-uu-post-encode-file): do.
+
+       * gnus-soup.el (gnus-soup-pack, gnus-soup-unpack-packet): do.
+
+       * message.el (message-fix-before-sending): Fix detection of
+       non-printables.  Don't replace unencodable utf-8.
+
+2003-12-05  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-url.el (mm-url-predefined-programs): Add user-agent for wget.
+       (mm-url-insert-file-contents-external): Signal an error if program
+       fails.
+
+2003-12-04  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam-report.el (spam-report-gmane): iterate over articles
+       instead of a single one; remove interactive usage
+
+2003-12-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dns.el: Fix misplaced eval-when-compile.
+
+       * gnus-util.el: Require alist and provide tm-view when compiling
+       with XEmacs.
+
+2003-12-03  Steve Youngs  <sryoungs@bigpond.net.au>
+
+       * gnus-xmas.el: Add autoloads for macros defined in gnus.el.
+       From Jerry James <james@xemacs.org>.
+
+       * gnus-util.el: Get rmail definitions when compiling.
+       From Jerry James <james@xemacs.org>.
+
+       * 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 <james@xemacs.org>.
+
+2003-12-01  Kevin Greiner <kgreiner@xpediantsolutions.com>
+       * 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  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-bogofilter): check the bogofilter headers
+       AFTER the save-excursion scope is over.  From Adrian Lanz
+       <lanz@fowi.ethz.ch>.
+       (spam-fetch-field-message-id-fast): doc fix
+
+2003-12-01  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-agent.el (gnus-agent-expire-days): Doc fix.
+
+2003-11-30  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-agent.el (gnus-agent-expire-group-1): Bind message-log-max
+       when messaging "X % completed" to inhibit logging them to the
+       message buffer.
+       (gnus-agent-expire-group-1): Mention group name in messages.
+       (gnus-agent-expire-group-1): Only print a message for an article
+       when there actually was something done to it.
+
+       * 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 <handa@m17n.org>.
+
+       * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Custom fix.
+
+2003-11-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-covered-methods): Remove nil methods. 
+
+2003-11-29  Kevin Greiner <kgreiner@xpediantsolutions.com>
+       * 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 <alex@freesources.org>  (tiny change)
+
+       * nnrss.el (nnrss-check-group): Set xml when nnrss-use-local is t.
+
+2003-11-29  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-group.el (gnus-group-make-menu-bar): Add
+       gnus-group-make-rss-group.
+
+2003-11-28  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el: Added custom-manual links to all variables that have
+       an index entry in the message manual.
+       (message-generate-headers-first): Fixed doc-string.
+
+2003-11-27  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-msg.el (gnus-summary-yank-message): Don't bind
+       gnus-display-mime-function to nil so that non-ascii text is
+       decoded and attachments are not shown.
+
+       * message.el (message-cite-original-without-signature): Replace
+       the value of message-reply-headers with the yanked article since
+       it may be a different article from the original.
+       (message-cite-original): Ditto.
+
+2003-11-25  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-blacklist-ignored-regexes): new variable, so
+       blacklisting can ignore certain regular expressions (e.g. the
+       user's e-mail address)
+       (spam-bogofilter-spam-strong-switch,
+       spam-bogofilter-ham-strong-switch): options used when articles are
+       already registered as the opposite classification
+       (spam-old-ham-articles, spam-old-spam-articles): lists of ham and
+       spam articles, generated when a summary buffer is entered, and
+       consulted when it's exited so we know what articles are changing
+       state from spam to ham or vice-versa
+       (spam-xor): everyone needs a little convenience
+       (spam-list-of-processors): lookup table for old-style spam/ham
+       exits processors
+       (spam-group-processor-p): support old-style and new-style spam/ham
+       exit processors
+       (spam-group-processor-multiple-p): handle new-style spam/ham exit
+       processors
+       (spam-summary-prepare): use spam-old-{ham,spam}-articles; change
+       logic to iterate over list of processors instead of manual
+       individual lookup, unregister any articles that change from ham to
+       spam or vice-versa in the course of the summary buffer usage; use
+       the new spam-register-routine
+       (spam-ham-copy-routine, spam-ham-move-routine,
+       spam-mark-spam-as-expired-and-move-routine): check that the list
+       of groups is not nil, because apply doesn't like to apply a
+       function across nil
+       (spam-registration-functions): variable for looking up spam/ham
+       registration/unregistration functions based on a spam-use-* symbol
+       (spam-classification-valid-p, spam-process-type-valid-p)
+       (spam-registration-check-valid-p)
+       (spam-unregistration-check-valid-p): convenience functions
+       (spam-registration-function, spam-unregistration-function): look
+       up the registration/unregistration function based on a
+       classification and the check (spam-use-* symbol)
+       (spam-list-articles): generate list of spam/ham articles from a
+       given list of articles
+       (spam-register-routine): do the heavy work of registering and
+       unregistering articles, using all the articles in the group or
+       specific ones as needed
+       (spam-generic-register-routine): removed, no longer used
+       (spam-log-unregistration-needed-p, spam-log-undo-registration):
+       handle article registration/unregistration with a given spam/ham
+       processor and group
+       (BBDB, ifile, spam-stat, blacklists, whitelists, spam-report,
+       bogofilter, spamoracle): rewrite registration/unregistration
+       functions to take a list of articles and the unregister option.
+       Much hilarity ensues.
+       (spam-initialize): spam-stat-maybe-{save,load} already respect spam-use-stat
+       (spam-stat-register-ham-routine, spam-stat-register-spam-routine):
+       don't load and save unnecessarily
+
+       * spam-stat.el (spam-stat-dirty): new variable, set when the stats
+       database is modified
+       (spam-stat-buffer-is-spam, spam-stat-buffer-is-non-spam)
+       (spam-stat-buffer-change-to-spam, spam-stat-to-hash-table)
+       (spam-stat-buffer-change-to-non-spam): set spam-stat-dirty when
+       needed
+       (spam-stat-save): respect spam-stat-dirty, unless the force
+       parameter is specified
+       (spam-stat-load): clear spam-stat-dirty
+
+       * gnus.el (gnus-install-group-spam-parameters): marked the
+       old-style exit processors as obsolete in the docs, added the
+       new-style exit processors while the old ones are still allowed
+
+
+2003-11-25  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (article-hide-boring-headers): Don't hide Reply-To
+       unless its list of addresses is identical to From.
+
+2003-11-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (mapc): Add the compiler macro for Emacs 20.
+
+2003-11-24  Kevin Greiner <kgreiner@xpediantsolutions.com>
+       * 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.
+       Compensating by adding a second text property storing the name
+       expected by gnus-agent.
+       (gnus-server-named-server): New function.
+       * gnus-agent.el (gnus-agent-remove-server, gnus-agent-add-server):
+       No longer expect an argument as it was ignored anyway.  Uses the
+       new gnus-server-named-server function to get gnus-agent compatible
+       names from the server buffer.
+
+2003-11-20  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus.el (gnus-agent-covered-methods): Documented use of
+       named servers, not methods, to identity agentized groups.
+       Users may now change their server configurations without having
+       the server become "unagentized".
+       (gnus-agent-covered-methods): Removed from gnus-variable-list to
+       avoid storing two copies of gnus-agent-covered-methods, one in
+       .newsrc.eld and the other in agent/lib/servers.
+       (gnus-server-to-method): Do not cache server for the nil method.
+       (gnus-method-to-server): New function.  Associate named server
+       with all, even foreign, methods.
+       (gnus-agent-method-p, gnus-agent-method-p-cache): Incorporated
+       simple last-response cache to offset performance lose of having to
+       always convert methods to named servers.
+       * gnus-agent.el (gnus-agent-expire-days): Removed obsolete
+       documentation.
+       (gnus-agentize, gnus-agent-add-server, gnus-agent-remove-server):
+       Modified to support new definition of gnus-agent-covered-method.
+       (gnus-agent-read-servers): Rewritten to convert old method data
+       into server names.
+       (gnus-agent-read-servers-validate)
+       (gnus-agent-read-servers-validate-native): New functions.
+       (gnus-agent-write-servers): No longer use gnus-method-simplify as
+       it failed to simplify foreign methods.
+       (gnus-agent-close-connections, gnus-agent-synchronize-flags)
+       (gnus-agent-possibly-synchronize-flags, gnus-agent-fetch-session)
+       (gnus-agent-regenerate): Uses new gnus-agent-covered-methods
+       function as gnus-agent-covered-methods variable no longer provides
+       methods.
+       (gnus-agent-covered-methods): New function
+       (gnus-agent-expire-group, gnus-agent-expire): Final message will,
+       if gnus-verbose is greater than 4, report statistics of NOV
+       entries and files deleted as well as total bytes recovered.
+       (gnus-agent-expire-done-message): New function
+       (gnus-agent-unread-articles): Bug fix.  No longer drops last
+       unread article onto read list.
+       (gnus-agent-regenerate-group): Changed prompt to use typical
+       style.
+       (gnus-agent-group-covered-p): Rewrote to internally use
+       gnus-agent-method-p.
+       * gnus-int.el (gnus-start-news-server): Partially convert old
+       gnus-agent-covered-methods to new format so that gnus-open-server
+       functions correctly.
+       * gnus-srvr.el (gnus-server-insert-server-line): Replaced
+       gnus-agent-covered-methods with gnus-agent-method-p.
+       * gnus-start.el (gnus-clear-system): Added
+       gnus-agent-covered-methods to compensate for removing it from
+       gnus-variable-list.
+       (gnus-setup-news): Complete conversion of old
+       gnus-agent-covered-methods to new format so that secondary and
+       foreign servers can be correctly opened.
+
+2003-11-20  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-ham-copy-or-move-routine): add respooling
+       support, not working well yet
+
+       * gnus.el (ham-process-destination): make 'respool option the
+       only one, so it can't be chosen together with other groups
+
+2003-11-19  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-track-extra): make it a set of
+       choices instead of a boolean
+       (gnus-registry-track-subject-p, gnus-registry-track-sender-p):
+       new convenience functions
+       (gnus-registry-split-fancy-with-parent): use convenience
+       functions, also don't return extra tracking info if sender or
+       subject is found in more than one groups
+       (gnus-registry-add-group): use new convenience functions to
+       decide if sender and subject should be tracked
+
+       * gnus.el (ham-process-destination): add 'respool option,
+       unused by spam.el yet
+
+2003-11-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-score.el (gnus-decay-score): Return a surely smaller value
+       than the argument in XEmacs.
+
+2003-11-18  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * 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 <sds@gnu.org>.
+
+2003-11-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * html2text.el (html2text-remove-tags): Remove the tag in a
+       simpler way to avoid inflooping.
+
+2003-11-17  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-gssapi-auth-p): Don't check capability (some
+       servers remove AUTH=GSSAPI from capability response returned after
+       successful authentication).
+
+2003-11-16  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.el (gnus-getenv-nntpserver): Fix regexp and simplify.
+       Reported by Artem Chuprina <ran@ran.pp.ru>.
+
+2003-11-14  Simon Josefsson  <jas@extundo.com>
+
+       * mm-util.el (mm-charset-synonym-alist): Map BIG5-HKSCS to BIG5
+       when it isn't available.
+
+2003-11-13  Alex Schroeder  <alex@gnu.org>
+
+       * nnrss.el (nnrss-check-group): Use dc:contributor if neither
+       rss:author nor dc:creator is provided.
+
+2003-11-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-decode.el (mm-dissect-buffer): Save start="<id>" value
+       contained in Content-Type header of multipart/related messages.
+
+       * mm-view.el (mm-w3m-cid-retrieve-1): New function.
+       (mm-w3m-cid-retrieve): Use it.
+
+       * mml.el (mml-generate-mime-1): Add start="<id>" to Content-Type.
+       (mml-insert-mime-headers): Insert Content-ID header.
+       (mml-insert-mml-markup): Insert start="<id>" value.
+
+2003-11-12  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * nnml.el (nnml-request-accept-article): pass sender to
+       nnmail-cache-insert
+
+       * nnmh.el (nnmh-request-accept-article): pass sender to
+       nnmail-cache-insert 
+
+       * nnmbox.el (nnmbox-request-accept-article): pass sender to
+       nnmail-cache-insert 
+
+       * nnfolder.el (nnfolder-request-accept-article): pass sender to
+       nnmail-cache-insert 
+
+       * nnbabyl.el (nnbabyl-request-accept-article): pass sender to
+       nnmail-cache-insert 
+
+       * nnmail.el (nnmail-cache-insert): accept sender parameter and
+       pass it to the nnmail-spool-hook
+
+       * gnus-registry.el (gnus-registry-track-extra): clarify doc
+       (gnus-registry-action): add sender lexical var and pass it to
+       gnus-registry-add-group
+       (gnus-registry-spool-action): take a sender parameter, pass to
+       gnus-registry-add-group
+       (gnus-registry-split-fancy-with-parent): trace by sender in
+       addition to subject
+       (gnus-registry-fetch-sender-fast): new function
+       (gnus-registry-add-group): accept sender parameter
+
+2003-11-11  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-ham-copy-routine, spam-ham-move-routine)
+       (spam-mark-spam-as-expired-and-move-routine): allow for the
+       groups to be a list of a single item
+
+       * gnus.el (gnus-install-group-spam-parameters):
+       ham-process-destination and spam-process-destination allow lists now
+
+2003-11-10  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * 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 <sds@gnu.org>.
+       (message-mode-field-menu): Moved some entries, added
+       `message-insert-wide-reply'.
+       (message-change-subject): Fixed comment.
+
+2003-11-10  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-def.el (pgg-encrypt-for-me): Change default from nil to t.
+
+2003-11-09  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-gpg.el (pgg-gpg-encrypt-region): Cache passphrase under hex
+       key id too (for decryption).
+       (pgg-gpg-sign-region): Likewise.
+
+2003-11-09  Simon Josefsson  <jas@extundo.com>
+
+       * 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
+       <satyakid@stanford.edu>.
+
+2003-11-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * nnmail.el (nnmail-cache-insert): make sure that the
+       nnmail-spool-hook is called with a valid newsgroup name (though
+       it may be wrong)
+
+       * gnus.el (gnus-group-real-prefix): return nil if group is not a
+       string, instead of triggering an error
+
+2003-11-06  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.el (gnus-group-guess-full-name-from-command-method): new function
+
+       * gnus-registry.el (gnus-registry-fetch-group): use long names if
+       requested 
+       (gnus-registry-split-fancy-with-parent): when long names are in
+       use, strip the name if we're in the native server, or else return nothing
+       (gnus-registry-spool-action, gnus-registry-action): use
+       gnus-group-guess-full-name-from-command-method instead of
+       gnus-group-guess-full-name
+
+       * spam.el (spam-mark-spam-as-expired-and-move-routine)
+       (spam-ham-copy-or-move-routine): prevent article deletions or
+       moves unless the backend allows it
+
+       * gnus.el (gnus-install-group-spam-parameters): fixed parameters
+       to list spamoracle as well, suggested by Jean-Marc Lasgouttes
+       <Jean-Marc.Lasgouttes@inria.fr>
+
+       * spam.el (spam-spamoracle): doc change, suggested by Jean-Marc
+       Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+
+2003-11-04  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-score.el (gnus-decay-score): Protect against arithmetic
+       errors.  Tiny patch from Norbert Koch <viteno@xemacs.org>.
+
+2003-10-31  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el
+       (spam-log-processing-to-registry): improved message and comments
+       (spam-log-unregistration-needed-p): new function
+       (spam-ifile-register-spam-routine)
+       (spam-ifile-register-ham-routine, spam-stat-register-spam-routine)
+       (spam-stat-register-ham-routine)
+       (spam-blacklist-register-routine)
+       (spam-whitelist-register-routine)
+       (spam-bogofilter-register-spam-routine)
+       (spam-bogofilter-register-ham-routine)
+       (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): change
+       spam-log-processing-to-registry invocations appropriately
+
+2003-10-31  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-kerberos4-open): Ignore output from ATHENA imtest.
+       Tiny patch from Derek Atkins <warlord@MIT.EDU>.
+       (imap-process-connection-type): Improve docstring.  Suggested by
+       Derek Atkins <warlord@MIT.EDU>.
+
+2003-10-31  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (autoload): autoload the gnus-registry functions we'll
+       need
+       (spam-log-to-registry): new variable for interfacing with the
+       gnus-registry
+       (spam-install-hooks): variable had the wrong customization group
+       (spam-fetch-field-message-id-fast): convenience function for fetch
+       a message ID quickly
+       (spam-log-processing-to-registry): new function
+       (spam-ifile-register-spam-routine)
+       (spam-ifile-register-ham-routine, spam-stat-register-spam-routine)
+       (spam-stat-register-ham-routine)
+       (spam-blacklist-register-routine)
+       (spam-whitelist-register-routine)
+       (spam-bogofilter-register-spam-routine)
+       (spam-bogofilter-register-ham-routine)
+       (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): add
+       spam-log-processing-to-registry invocations
+
+       * gnus-registry.el: fixed docs in the preface to mention
+       gnus-registry-initialize
+       (gnus-registry-store-extra): remove cached extra entry
+       information when new extra entry is stored
+
+2003-10-29  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-forward-make-body-plain): Fix ARG=1 mode
+       after separating m-f-m-b.
+
+2003-10-29  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-forward-make-body-plain): Remove ignored
+       headers.  Tiny patch from Andre Srinivasan <andre@e2open.com>.
+       (message-forward-make-body-plain): Fix ARG=1.
+
+2003-10-28  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-forward-subject-name-subject)
+       (message-forward-subject-author-subject): Decode non-ASCII
+       newsgroup names.
+       (autoload): Autoload gnus-group-decoded-name.
+
+2003-10-27  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): New optional
+       parameter key, overrides the key id used to store passphrase
+       under (uses true key id from gpg output if nil).
+       (pgg-gpg-encrypt-region): Search for passphrase using user suplied
+       string STR, instead of (pgg-lookup-key STR t).
+       (pgg-gpg-encrypt-region): Store passphrase under user suplied
+       string, instead of real key id taken from gpg output.
+       (pgg-gpg-decrypt-region): Likewise.
+       (pgg-gpg-sign-region): Likewise.
+       * pgg.el (pgg-decrypt-region): Don't set pgg-default-user-id.
+
+2003-10-27  Romain FRANCOISE  <romain@orebokech.com>
+
+       * gnus-art.el (gnus-article-goto-prev-page): Doc fix. 
+
+2003-10-27  Simon Josefsson  <jas@extundo.com>
+
+       * mm-bodies.el (mm-body-encoding): Don't use QP when message body
+       only consists of short lines and ASCII, when
+       mm-use-ultra-safe-encoding.  Refer to 'About foo' thread in
+       gnus-bug, e.g. <ilullrg4k7p.fsf@extundo.com>, for more discussion.
+       This make it possible to pipe the raw RFC 822 message into 'gpg'
+       and have the signature work.  Potential problem: what if message
+       contain data that would be dash-escaped by OpenPGP
+       implementations? Then PGP 2.x might not be able to parse the raw
+       RFC 822 message correctly.  If that problem is worth fixing, it
+       should be fixed by detecting the situation, instead of applying QP
+       to everything.  Based on discussion with "John A. Martin"
+       <jam@jamux.com>.
+
+2003-10-27  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-mark-spam-as-expired-and-move-routine)
+       (spam-ham-copy-or-move-routine): don't ask when deleting copied
+       articles, and use move instead of copy when possible
+       (spam-split): added the option of specifying a string as a
+       spam-split parameter; such a string will override
+       spam-split-group temporarily.
+
+       * nnmail.el (nnmail-cache-insert): protect from nil message IDs,
+       but should we do something else?
+
+       * gnus-registry.el (gnus-registry-spool-action): protect from nil
+       message IDs
+
+2003-10-26  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-button-alist): Allow & in mailto URLs.
+       (gnus-header-button-alist): Likewise.
+       (gnus-url-mailto): Handle ?to parameters.  Replace \r\n with \n.
+       Reverse parameter list to use same order as in the URL.  Reported
+       by f95-msv@f.kth.se (M\e,Ae\e(Brten Svantesson).
+
+2003-10-25  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-move-spam-nonspam-groups-only): documentation fix
+       for the variable
+
+2003-10-25  Steve Youngs  <sryoungs@bigpond.net.au>
+
+       * Makefile.in (clean-some): Remove auto-autoloads.* and
+       custom-load.* as well.
+       (distclean): Ditto.
+
+       * dgnushack.el (dgnushack-make-load): Add a local vars section to
+       the dummy gnus-load.el.
+
+2003-10-24  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-ham-copy-or-move-routine): do not delete if copy
+       is t, also don't intepret the list of groups as a list of lists
+       (spam-mark-spam-as-expired-and-move-routine)
+       (spam-ham-copy-or-move-routine): delete articles only if 1 or
+       more groups were specified (and "copy" was not specified for
+       spam-ham-copy-or-move-routine) (fixed twice)
+
+2003-10-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nndoc.el (nndoc-guess-type): Reverse the sort order.  Suggested
+       by ARISAWA Akihiro <ari@mbf.ocn.ne.jp>.
+       (nndoc-dissect-buffer): Don't miss even-numbered articles.
+
+2003-10-24  Steve Youngs  <sryoungs@bigpond.net.au>
+
+       * dgnushack.el (dgnushack-gnus-load-file): Set to
+       "auto-autoloads.el" if building with XEmacs.
+       (dgnushack-cus-load-file): Set to "custom-load.el" if building
+       with XEmacs.
+       (dgnushack-make-cus-load): We don't delete the resulting file if
+       building with XEmacs so byte-compile it.
+       (dgnushack-make-load): When building with XEmacs do nothing except
+       byte-compile the autoload file and create a dummy gnus-load.el
+       file. 
+
+2003-10-23  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-make-fqdn): Bind case-fold-search.
+       Suggested by Christopher Richards <richards@CS.Princeton.EDU>.
+
+2003-10-23  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.el (spam-process-destination, ham-process-destination):
+       allow multiple groups as a choice
+
+       * spam.el (spam-check-blackholes): remove "[IP address]"
+       requirement, now just "IP address" is enough for detection for
+       blackhole checking
+       (spam-check-blackholes): oops, the dots were not escaped
+       (spam-mark-spam-as-expired-and-move-routine): added multiple group
+       support (multiple copies, then delete)
+       (spam-ham-copy-routine): new function
+       (spam-ham-move-routine): new function
+       (spam-ham-copy-or-move-routine): new function (used to be
+       spam-ham-move-routine), handle multiple groups
+       (spam-summary-prepare-exit): call the new functions
+
+2003-10-23  Simon Josefsson  <jas@extundo.com>
+
+       * flow-fill.el (fill-flowed-encode, fill-flowed): Autoload.
+
+2003-10-22  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-emphasis-strikethru): Use the :strike-through
+       attribute in Emacs.
+
+2003-10-21  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-bounce): Don't erase except bounced header.
+
+2003-10-21  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-reverse-ip-string): new function to reverse an IP
+       address in a string
+       (spam-check-blackholes): use spam-reverse-ip-string
+
+2003-10-21  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-narrow-to-page): Clear as well as set the
+       value for gnus-page-broken.
+
+       * gnus-sum.el (gnus-summary-beginning-of-article): Use
+       gnus-break-pages instead of gnus-page-broken.
+       (gnus-summary-end-of-article): Use gnus-break-pages instead of
+       gnus-page-broken; narrow to the end of a page beforehand.
+       (gnus-summary-toggle-header): Use gnus-break-pages instead of
+       gnus-page-broken; remove delimiter buttons unless gnus-break-pages
+       is non-nil.
+
+2003-10-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-picon.el (gnus-picon-transform-address): Protect against
+       errors. 
+
+2003-10-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-msg.el (nnspool-rejected-article-hook): Remove defvar.
+       (xemacs-codename): Move defvar to gnus-util.el.
+
+       * gnus-util.el (xemacs-codename): Defvar when compiling.
+
+2003-10-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * spam-report.el (spam-report-url-ping-plain): Include a
+       User-Agent. 
+
+       * gnus-msg.el (gnus-extended-version): Use it.
+
+       * gnus-util.el (gnus-emacs-version): Separated out into own
+       function. 
+
+2003-10-19  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el (message-mode-field-menu): Added
+       message-generate-unsubscribed-mail-followup-to.
+       (message-forward-subject-fwd): Avoid double "Fwd: "
+       (message-change-subject): Added comment.
+
+2003-10-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-nov-parse-line): Remove condition-cases.
+
+       * mml.el (mml-insert-mime): Quote mml.
+
+2003-10-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-remove-odd-characters): Use
+       mm-subst-char-in-string instead of subst-char-in-string.
+       (gnus-summary-refer-article): Use gnus-replace-in-string instead
+       of replace-regexp-in-string.
+
+2003-10-19  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-uu.el (gnus-uu-uustrip-article): Really strip directory
+       from file name.
+
+2003-10-18  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-save-parts-last-directory): Default
+       to mm-default-directory.
+       (gnus-summary-save-parts-1): Use mm-file-name-rewrite-functions.
+
+2003-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * pop3.el (pop3-read-response): Check whether the process is
+       alive. 
+
+       * gnus-sum.el (gnus-summary-refer-article): Strip spaces.
+
+       * rfc2047.el (rfc2047-encode-region): Do error out on invalid
+       strings. 
+
+       * nntp.el (nntp-retrieve-headers-with-xover): Get error messages
+       right. 
+
+       * gnus-agent.el (gnus-agent-read-servers): Remove sit-for.
+
+       * gnus-art.el (article-treat-dumbquotes): Doc fix.
+
+       * message.el (message-field-value): New function.
+       (message-insert-disposition-notification-to): Use Reply-To, too.
+
+       * imap.el (imap-mailbox-status): Upcase STATUS commands. 
+
+       * gnus-sum.el (gnus-remove-odd-characters): New function.
+       (gnus-nov-parse-line): Use it.
+
+2003-10-18  Matt Swift  <swift@alum.mit.edu>
+
+       * mm-decode.el (mm-inline-media-tests): Recognize pjpeg as jpeg. 
+
+2003-10-18  Romain FRANCOISE  <romain@orebokech.com>
+
+       * message.el (message-forward-make-body): does both
+       m-f-make-body-mml and m-f-make-body-plain, resulting in a strange
+       message buffer.
+
+2003-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-narrow-to-page): Only break page if it's
+       broken.
+
+       * nnrss.el (nnrss-find-rss-via-syndic8): Return nil if xml-rpc
+       isn't available.
+
+       * message.el (message-hidden-headers): Doc fix.
+
+2003-10-18  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-summary-resend-message-edit): Avoid error when
+       fields aren't found.
+
+2003-10-18  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-forward-make-body-plain)
+       (message-forward-make-body-mime, message-forward-make-body-mml)
+       (message-forward-make-body-digest-plain)
+       (message-forward-make-body-digest-mime)
+       (message-forward-make-body-digest): New, derived from
+       message-forward-make-body.
+       (message-forward-make-body): Use them.
+       (message-forward-show-mml): New default 'best.
+       (message-forward-make-body): Support it.
+
+2003-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-mode): Set gnus-page-broken to nil.
+       (gnus-article-prepare): Don't set to t.
+       (gnus-narrow-to-page): Set to t if we break.
+
+2003-06-11  Daniel N\e,Ai\e(Bri  <dne@mayonnaise.net>
+
+       * message.el (message-resend): Generate Resent-Message-ID header.
+
+2003-10-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-next-page): Don't go to the next line
+       before checking end-of-buffer.
+       (gnus-mime-delete-part): Don't insert parts twice.
+
+2003-10-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (article-update-date-lapsed): Make sure point
+       doesn't move around (much).
+
+2003-07-28  Vasily Korytov  <deskpot@myrealbox.com>
+
+       * mail-source.el (mail-source-keyword-map): List "cur" before
+       "new" for maildirs.
+
+2003-10-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-enter-digest-group): ogroup, nor
+       group. 
+
+       * gnus-msg.el (gnus-inews-insert-archive-gcc): Use the parent
+       name for gcc-self.
+       (gnus-inews-insert-archive-gcc): Paren mistake.
+
+       * gnus-sum.el (gnus-summary-enter-digest-group): Add
+       parent-group. 
+
+       * gnus-art.el (gnus-ignored-headers): Add more headers.
+
+       * rfc2047.el (rfc2047-encode): See which encoding is shorter --
+       base64 or QP.
+
+       * nnmail.el (nnmail-article-group): Default to "bogus".
+
+       * mail-source.el (mail-source-delete-incoming): Change to nil.
+
+2003-10-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mail-source.el (mail-source-fetch-imap): Fix mismatched parens.
+
+2003-10-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (defvar): Add post/pre/scripts.
+       (mail-source-fetch-imap): Use them.
+
+       * nndraft.el (nndraft-request-move-article): Fix infinite
+       recursion. 
+
+       * gnus-group.el (gnus-group-mark-regexp): Jump to groups.
+
+2003-10-16  Ed L. Cashin  <ecashin@uga.edu>
+
+       * imap.el (imap-interactive-login): Set imap-password to nil if
+       login fails.
+
+2003-10-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-inserted-headers): New variable.
+       (message-mode): Make local.
+       (message-mode): Set all the local action variables to nil.      
+
+2003-10-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-decode.el (mm-inline-text-html-with-images): Doc fix.
+       (mm-w3m-safe-url-regexp): Doc fix.
+
+2003-10-12  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-respool-query): Don't narrow to head,
+       it's done by nnmail-article-group.
+
+       * gnus-uu.el (gnus-uu-grab-articles): Fix misplaced parens.
+       From Mark Hood <markhood@speakeasy.net> (tiny change)
+
+2003-10-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-decode.el (mm-file-name-delete-gotchas): Avoid infloop in
+       XEmacs.
+
+2003-10-10  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-initialize): new function, does the spam-face
+       update and all the hooks, replaces spam-install-hooks-function
+
+       * gnus-registry.el (gnus-registry-initialize): new autoloaded
+       function to explicitly initialize the registry
+
+2003-10-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-decode.el (mm-w3m-safe-url-regexp): Doc fix.
+
+       * mm-view.el (mm-w3m-mode-map): Doc fix.
+       (mm-inline-text-html-render-with-w3m): Add a comment.
+
+2003-10-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el: Remove superfluous eval-when-compiles.
+
+2003-10-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-group.el (gnus-group-suspend): Reset gnus-backlog-articles.
+
+2003-10-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * dns.el (query-dns): Don't error out on malformed resolv files.
+
+2003-10-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.el (gnus-group-faq-directory): Update .tw entry.  From
+       Albert Chun-Chieh Huang <mr894348@cs.nthu.edu.tw>
+
+2003-10-03  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-blackholes): exit the loop if matches are
+       found (idea from Adrian Lanz <lanz@fowi.ethz.ch>)
+       (spam-check-bogofilter-headers, spam-check-blackholes, spam-check-BBDB)
+       (spam-from-listed-p): use nnmail-fetch-field instead of message-fetch-field
+       
+
+2003-10-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-decode.el (mm-attachment-file-modes): Change the default
+       value into 384 from ?\600 which doesn't mean an integer in XEmacs.
+
+2003-10-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-decode.el (mm-file-name-delete-control)
+       (mm-file-name-delete-gotchas): New functions.
+       (mm-file-name-rewrite-functions): Use them.
+       (mm-attachment-file-modes): New option.
+       (mm-save-part-to-file): Use it.
+
+2003-10-02  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * spam.el (spam-install-hooks-function): Added Autoload cookie.
+
+2003-10-02  Jesper Harder  <harder@ifa.au.dk>
+
+       * pgg-def.el (pgg-default-keyserver-address): Change to
+       subkeys.pgp.net.  From Michael Shields <shields@msrl.com>
+
+2003-10-01  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-idna-to-ascii-rhs-1): RHS can be terminated
+       by ',', as in 'foo@example.org, bar@example.org'.
+
+2003-10-01  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-send): Fix reversed logic of supersedes
+       check.
+
+2003-09-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-article-view-part-as-charset): Doc fix,
+       suggested by Norbert Koch <viteno@xemacs.org>.
+
+2003-09-29  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-topic.el (gnus-topic-goto-missing-topic): Revert 2003-02-09
+       change in order to correct the position where an invisible topic
+       (because gnus-topic-display-empty-topics is nil) may be inserted.
+
+2003-09-22  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-ignored-supersedes-headers): Add X-Payment.
+
+2003-09-20  Jesper Harder  <harder@ifa.au.dk>
+
+       * rfc2047.el (rfc2047-encode): Limit line length to 76 characters.
+
+2003-09-20  Simon Josefsson  <jas@extundo.com>
+
+       * tls.el (tls-process-connection-type): Doc fix.
+
+       * imap.el (imap-starttls-open): Rewrite, should support both old
+       starttls.el and new starttls.el that uses GNUTLS.
+
+2003-09-18  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-treat-display-x-face): Use set-default instead
+       of custom-set-default which isn't available in old XEmacsen.
+
+2003-09-17  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-summary-resend-message-edit): Don't convert
+       to MML.  MIME -> MML -> MIME does not work for PGP/MIME.
+
+       * message.el (message-bounce, message-forward-show-mml): do.
+       
+2003-09-13  Jesper Harder  <harder@ifa.au.dk>
+
+       * rfc2047.el (rfc2047-charset-encoding-alist): Add viscii.
+       (rfc2047-encode): Add factors for big5, gb2312 and euc-kr.
+
+       * nnweb.el (nnweb-google-parse-1): Fix parsing.
+
+2003-09-12  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-group.el (gnus-group-fetch-control): ISC changed
+       compression from .Z to .gz.
+
+       * rfc2047.el (rfc2047-header-encoding-alist): Add "Approved" to
+       address-mime.
+
+2003-09-11  Jesper Harder  <harder@ifa.au.dk>
+
+       * rfc2047.el (rfc2047-encode): Restrict encoded-words to 75
+       characters.
+
+2003-09-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.el (gnus-group-charter-alist): Update.
+
+2003-09-10  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * 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
+       <knauel@informatik.uni-tuebingen.de>.
+       (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)
+
+2003-09-08  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-delete-id): function to
+       completely delete an ID, including all the cache hashtables
+       (gnus-registry-delete-group): use gnus-registry-delete-id
+       (gnus-registry-simplify-subject): only run if the argument is a
+       string, return nil otherwise
+
+2003-09-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-summary-resend-bounced-mail): Docstring fix.
+
+2003-09-05  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-split-fancy-with-parent): yet
+       another error *sigh*
+
+       * gnus-registry.el (gnus-registry-fetch-extra-entry): don't use
+       puthash unless gnus-registry-entry-caching is on
+       (gnus-registry-split-fancy-with-parent): misplaced parenthesis
+       made everything a part of the 'else'
+       (gnus-registry-save): used 'entry-caching' instead of 'caching'
+
+2003-09-05  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-button-alist): Improve Info regexp.
+
+2003-09-04  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el: added brief explanation of basics
+       (gnus-registry-track-extra): new variable for tracking of message
+       subjects
+       (gnus-registry-entry-caching): caching parameter, used for extra
+       data
+       (gnus-registry-minimum-subject-length): minimum subject length
+       before it's considered when tracing subjects
+       (gnus-registry-save): accomodate extra data entry caching
+       (gnus-registry-action): change function name, add the subject and
+       pass it to gnus-registry-add-group
+       (gnus-registry-spool-action): change function name, add the
+       subject and pass it to gnus-registry-add-group
+       (gnus-registry-split-fancy-with-parent): add subject tracking
+       (gnus-registry-register-message-ids): pass subject to
+       gnus-registry-add-group
+       (gnus-registry-simplify-subject)
+       (gnus-registry-fetch-simplified-message-subject-fast): new
+       functions
+       (gnus-registry-fetch-extra, gnus-registry-fetch-extra-entry): add
+       extra data entry caching
+       (gnus-registry-add-group): handle the extra subject parameter
+       (gnus-registry-install-hooks, gnus-registry-unload-hook): fix the
+       gnus-register-* function names
+
+       * nnmail.el (nnmail-cache-insert): add subject parameter, pass it
+       on to the nnmail-spool-hook
+
+       * nnbabyl.el (nnbabyl-request-accept-article): added subject to
+       nnmail-cache-insert call
+
+       * nndiary.el (nndiary-request-accept-article): added subject to
+       nnmail-cache-insert call
+
+       * nnfolder.el (nnfolder-request-accept-article): added subject to
+       nnmail-cache-insert call
+
+       * nnimap.el (nnimap-split-articles): added subject to
+       nnmail-cache-insert call
+       (nnimap-request-accept-article): added subject to
+       nnmail-cache-insert call
+
+       * nnmbox.el (nnmbox-request-accept-article): added subject to
+       nnmail-cache-insert call
+
+       * nnmh.el (nnmh-request-accept-article): added subject to
+       nnmail-cache-insert call
+
+       * nnml.el (nnml-request-accept-article): added subject to
+       nnmail-cache-insert call
+
+2003-09-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-button-handle-info-url)
+       (gnus-button-handle-info-url-gnome)
+       (gnus-button-handle-info-url-kde, gnus-button-alist): Handle GNOME
+       and KDE style Info URLs.
+
+       * gnus-util.el (gnus-url-unhex-string): Don't replace "+" with " ".
+
+2003-09-02  Jesper Harder  <harder@ifa.au.dk>
+
+       * rfc2047.el (rfc2047-fold-region): Don't fold at the beginning
+       of the field.
+
+2003-09-01  Simon Josefsson  <jas@extundo.com>
+
+       * mml.el (mml-insert-mime-headers-always): New variable.
+       (mml-insert-mime-headers): Use it.  Based on (tiny) patch from
+       Lars Balker Rasmussen <lars@balker.org>.
+
+2003-08-30  Simon Josefsson  <jas@extundo.com>
+
+       * 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
+       <gs234@srcf.ucam.org> (tiny change).
+
+2003-08-29  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-delete-group): Doc fix.  Suggested by
+       Jochen K\e,A|\e(Bpper <jochen@jochen-kuepper.de>.
+
+2003-08-29  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (article-display-x-face): Make it possible to set
+       the gnus-article-x-face-command variable to the lambda form.
+
+2003-08-27  Simon Josefsson  <jas@extundo.com>
+
+       * mm-decode.el (mm-remove-part): Try to kill external displayers
+       cleanly first (if it refuses, C-g aborts loop and kill process
+       unconditionally).  Also make sure process is dead before we remove
+       the files it may be using.  Reported by David Coe
+       <davidc@debian.org>.
+
+2003-08-27  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-cache.el (gnus-cache-generate-active): Fix bug in
+       replacement.  From Vagn Johansen <v@johansen.mail.dk> (tiny
+       change).
+
+2003-08-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el: Don't use defvaralias.
+       (gnus-treat-display-x-face): Warn if the obsolete variable
+       `gnus-treat-display-xface' exists.
+
+2003-08-25  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-treat-display-face): Fix typo.
+       (gnus-treat-display-xface): Rename to gnus-treat-display-x-face
+       (reported by Jochen K\e,A|\e(Bpper <jochen@jochen-kuepper.de>)
+
+2003-08-24  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-header-button-alist, gnus-button-alist): Fix
+       type.
+
+2003-08-22  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-make-forward-subject-function): Fix
+       customize mismatch.
+
+       * gnus.el (gnus-message-archive-method): do.
+
+2003-08-20  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus.el (gnus-read-group): Offer to continue only if the invalid
+       char is `/' and add more information for the user.
+
+       * gnus-art.el (gnus-button-alist): Add `+' (gnus-button-handle-man).
+       (gnus-header-button-alist): Added `In-Reply-To'.
+
+       * nnimap.el (nnimap-open-connection): Allow different user names
+       on the same server (and in the same authinfo file).
+
+2003-08-20  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sieve.el (gnus-sieve-crosspost): Fix type.
+
+       * message.el (message-make-forward-subject-function): Add
+       message-forward-subject-name-subject to choices.
+
+       * gnus-art.el (gnus-article-edit-done, gnus-article-edit-exit):
+       Redisplay article after editing.
+
+2003-08-20  Simon Josefsson  <jas@extundo.com>
+
+       * 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 m2oeysiev3.fsf@naima.lensflare.org.
+       Tiny patch from letters@hotpop.com (Jari Aalto+mail.linux).
+
+2003-08-13  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-score.el (gnus-summary-score-effect): Fix interactive use.
+
+2003-08-10  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-draft.el (gnus-draft-send-all-messages): ask if all drafts
+       should be sent unless gnus-expert-user is on
+
+2003-08-09  Jesper Harder  <harder@ifa.au.dk>
+
+       * pgg-gpg.el (pgg-gpg-extra-args): Fix customization type.
+
+2003-08-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * pgg-gpg.el (pgg-gpg-process-region): Bind
+       default-enable-multibyte-characters to nil.
+
+2003-08-07  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * canlock.el (canlock-password): Fix customization type.
+       (canlock-password-for-verify): Ditto.
+       * deuglify.el (gnus-outlook-deuglify-unwrap-min): Ditto.
+       (gnus-outlook-deuglify-unwrap-max): Ditto.
+       (gnus-outlook-deuglify-unwrap-stop-chars): Ditto.
+       * gnus-sum.el (gnus-sum-thread-tree-root): Ditto.
+       (gnus-sum-thread-tree-false-root): Ditto.
+       (gnus-sum-thread-tree-single-indent): Ditto.
+       * message.el (message-archive-note): Ditto.
+       (message-subscribed-address-file): Ditto.
+       (message-user-fqdn): Ditto.
+       * spam-report.el (spam-report-gmane-regex): Ditto.
+       * spam.el (spam-blackhole-good-server-regex): Ditto.
+
+       * gnus-start.el (gnus-save-killed-list): Fix last change.
+       * message.el (message-courtesy-message): Ditto.
+
+2003-08-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-header-face-alist): Revert previous change.
+       (gnus-header-newsgroups-face): Explain that it's only used for
+       crossposts.
+
+2003-08-07  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-registry.el (gnus-registry-max-entries): Fix customization
+       type.
+       * gnus-score.el (gnus-adaptive-word-length-limit): Ditto.
+       * gnus.el (gnus-refer-article-method): Ditto.
+       * message.el (message-courtesy-message): Ditto.
+
+2003-08-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-header-face-alist): Fix "Newsgroups" entry.
+       From Chunyu Wang <spr@db.cs.hit.edu.cn> (tiny patch)
+
+2003-08-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-start.el (gnus-save-killed-list): Fix customization type.
+       * gnus-sum.el (gnus-thread-hide-subtree): Ditto.
+       * gnus.el (gnus-use-long-file-name): Ditto.
+
+2003-08-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-group.el (gnus-group-rename-group): Don't allow renaming to
+       an existing name.
+
+       * gnus-sum.el (gnus-summary-highlight): Add uncached to docstring.
+
+       * nnmail.el (nnmail-large-newsgroup): Docstring fix.
+
+       * nntp.el (nntp-large-newsgroup): do.
+
+       * nnspool.el (nnspool-large-newsgroup): do.
+
+       * gnus-cus.el (gnus-group-parameters): Typo.
+
+2003-07-31  Simon Josefsson  <jas@extundo.com>
+
+       * mml-sec.el (mml-signencrypt-style-alist): Use separate S/MIME
+       method by default (revert partial 2003-07-10 patch).
+
+2003-07-28  Dave Love  <fx@gnu.org>
+
+       * pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el: Require cl when compiling.
+
+2003-07-26  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * 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\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * flow-fill.el (fill-flowed): Empty lines separate paragraphs
+       even if the preceding line ends with a soft break.  Tiny patch
+       from Mark Thomas <swoon@bellatlantic.net>.
+
+2003-07-25  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-use-regex-body, spam-regex-body-spam) 
+       (spam-regex-body-ham): new variables, default to nil/empty/empty
+       (spam-install-hooks): added spam-use-regex-body to list or
+       pre-install conditions
+       (spam-list-of-checks): added spam-use-regex-body and
+       spam-check-regex-body to list of checks
+       (spam-list-of-statistical-checks): added spam-use-regex-body to
+       list of statistical checks
+       (spam-check-regex-body): invokes spam-check-regex-headers with
+       appropriate variable masking
+       (spam-check-regex-headers): changes to print "body" or "header"
+       where appropriate
+
+2003-07-25  Jesper Harder  <harder@ifa.au.dk>
+
+       * smime.el (smime-ask-passphrase): Use read-passwd rather than
+       comint-read-noecho.  The former is more secure.
+
+2003-07-24  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-cache-whitespace): make "adding
+       whitespace" message level 5 instead of 4
+       (gnus-registry-clean-empty-function): new function to remove empty
+       registry entries
+       (gnus-registry-clean-empty): new variable to enable cleaning the
+       registry when saving it by calling gnus-registry-clean-empty-function
+
+       * spam.el (spam-summary-prepare-exit): use spam-process-ham-in-spam-groups
+       (spam-process-ham-in-spam-groups): new variable
+
+2003-07-24  Jesper Harder  <harder@ifa.au.dk>
+
+       * pgg-gpg.el (pgg-gpg-process-region): Add "--yes" to options.
+
+       * pgg-gpg.el, pgg-pgp.el, pgg-pgp5.el, pgg.el: Reapply changes
+       from 2003-04-03 to fix security problem.  See
+       http://www.debian.org/security/2003/dsa-339
+
+2003-07-23  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.el (gnus-install-group-spam-parameters): add the
+       gnus-ticked-mark to the possible choices of ham marks
+
+       * spam.el (spam-process-ham-in-nonham-groups): new variable
+       (spam-summary-prepare-exit): use spam-process-ham-in-nonham-groups
+
+2003-07-23  Jesper Harder  <harder@ifa.au.dk>
+
+       * rfc2047.el (rfc2047-header-encoding-alist): Add Mail-Followup-To
+       and Mail-Copies-To to address-mime.
+       (rfc2047-narrow-to-field): Use rfc2047-point-at-bol.
+
+2003-07-19  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-util.el (mm-coding-system-priorities): Docstring improvement.
+
+2003-07-17  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-thread-latest-date): Move condition-case to
+       the right place.
+
+2003-07-14  Simon Josefsson  <jas@extundo.com>
+
+       * mail-source.el (mail-source-fetch-imap): Don't assume
+       imap-error-text returns something.
+
+2003-07-12  Nevin Kapur  <kapur@mts.jhu.edu>
+
+       * nnimap.el (nnimap-request-newgroups): Use the pattern in
+       nnimap-list-pattern instead of "*".
+
+2003-07-10  Simon Josefsson  <jas@extundo.com>
+
+       * mml-sec.el (mml-signencrypt-style-alist): Use "combined" by
+       default.  Improve docstring.
+
+2003-07-10  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * imap.el (imap-arrival-filter): Fix test for missing process
+       buffer.
+
+2003-07-09  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+       From Gaute B Strokkenes <gs234@cam.ac.uk> (tiny patch).
+
+       * imap.el (imap-wait-for-tag): Clarify comment.  Use timeout zero
+       for second, after-process-has-died, accept-process-output.
+       (imap-arrival-filter): If PROC has no buffer, do nothing.
+
+2003-07-09  Jesper Harder  <harder@ifa.au.dk>
+
+       * flow-fill.el: Docstring and message fixes.
+
+       * deuglify.el: do.
+
+       * gnus-int.el: do.
+
+       * gnus-msg.el: do.
+
+       * gnus-util.el: do.
+
+       * gnus-draft.el: do.
+
+       * gnus-start.el: do.
+
+       * gnus.el: do.
+
+       * gnus-group.el: do.
+
+       * gnus-art.el: do.
+
+       * gnus-sum.el: do.
+
+       * mail-source.el (mail-source-movemail): Handle non-numerical
+       return values.
+
+2003-07-08  Jesper Harder  <harder@ifa.au.dk>
+
+       * mailcap.el (mailcap-parse-args-syntax-table)
+       (mailcap-viewer-passes-test): Docstring fix.
+
+       * mm-bodies.el (mm-long-lines-p): Docstring fix.
+
+       * mm-decode.el (mm-w3m-safe-url-regexp, mm-verify-option)
+       (mm-decrypt-option, mm-handle-set-external-undisplayer)
+       (mm-file-name-replace-whitespace): Docstring fix.
+
+       * mm-uu.el (mm-uu-emacs-sources-regexp): Docstring fix.
+       (mm-uu-pgp-signed-test): Fix message.
+
+       * mml.el (mml-tweak-sexp-alist): Docstring fix.
+       (mml-parse-1, mml-insert-mime-headers): Fix message.
+
+       * message.el (message-archive-header)
+       (message-subscribed-address-functions)
+       (message-subscribed-addresses, message-subscribed-regexps)
+       (message-canlock-generate)
+       (message-generate-new-buffer-clone-locals): Docstring fixes.
+
+2003-07-07  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * imap.el (imap-wait-for-tag): After the process has died, look
+       for more output still pending.  From Gaute B Strokkenes
+       <gs234@cam.ac.uk> (tiny patch).
+
+2003-07-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-bogofilter-score): redisplay article normally
+       after spam-bogofilter-score is called
+
+2003-07-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-send-mail-with-sendmail): Handle
+       non-numeric return values.
+
+       * gnus-sum.el (gnus-print-buffer): Apply emphasis.
+       From Michael Piotrowski <mxp@dynalabs.de> (tiny change).
+
+       * gnus-start.el (gnus-clear-system): Revert change from
+       2003-06-19.
+
+2003-07-04  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (rfc2047-q-encode-region): Exclude especials from
+       characters not encoded, and make the list more legible.
+
+2003-07-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-make-from): Revert change from 2002-01-08.
+
+2003-06-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnheader.el (nnheader-init-server-buffer): Don't add
+       nntp-server-buffer to list of Gnus buffers.
+
+2003-06-25  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-parse-list): prevent empty ("") strings
+
+2003-06-24  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-parse-list): use gnus-extract-address-components
+       instead of ietf-drums-parse-addresses
+       (spam-from-listed-p): let* was unnecessary
+
+2003-06-24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-ems.el (gnus-put-image): Mark the right text segment with
+       gnus-image-category. 
+
+       * gnus-srvr.el (gnus-browse-unsubscribe-group): Strip prefix from
+       native groups.
+
+       * gnus-topic.el (gnus-group-prepare-topics): Update topic line
+       format specs.
+
+       * gnus-picon.el: Written by moi, moi, moi.
+
+       * gnus-group.el (gnus-group-kill-group): Clean up.
+
+2003-06-23  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-from-listed-p, spam-parse-list): use
+       ietf-drums-parse-addresses to extract the address portion of the
+       whitelist/blacklist file if it looks like an address can be found
+
+2003-06-23  Didier Verna  <didier@xemacs.org>
+
+       * gnus-ems.el (gnus-put-image): New argument CATEGORY. Add it as a
+       text property.
+       (gnus-remove-image): New argument CATEGORY. Only remove if
+       category matches.
+       * gnus-xmas.el (gnus-xmas-put-image):
+       (gnus-xmas-remove-image): Ditto, with extents.
+       * gnus-art.el (gnus-delete-images): Pass CATEGORY argument to
+       gnus-[xmas-]remove-image.
+       (article-display-face): Don't always act as a toggle. Call
+       `gnus-put-image' with CATEGORY argument.
+       (article-display-x-face): Call `gnus-put-image' with CATEGORY
+       argument.
+       * smiley.el (smiley-region): Ditto.
+       * gnus-fun.el (gnus-display-x-face-in-from): Ditto.
+       * gnus-picon.el (gnus-picon-insert-glyph): Ditto.
+       (gnus-treat-mail-picon): Don't always act as a toggle.
+       * gnus-picon.el (gnus-treat-newsgroups-picon): Ditto.
+
+2003-06-23  Didier Verna  <didier@xemacs.org>
+
+       * gnus-art.el (article-display-face): Check for existence of the
+       original article buffer before switching to it.
+
+2003-06-20  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-util.el (mm-append-to-file): Say "Appended to".  Suggested by
+       Dan Jacobson <jidanni@jidanni.org>.
+
+       * mm-view.el (mm-inline-message): Bind
+       gnus-original-article-buffer to the buffer in the mml handle
+       holding the message.
+
+2003-06-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (sender, from): No need to bind them.
+
+2003-06-19  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-enter-list): search-forward specified wrong
+
+2003-06-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el: Comment fix.
+
+2003-06-20  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-configure-posting-styles): Remove unused
+       variable.  From Jan Rychter <jan@rychter.com>.
+
+       * spam.el (spam-spamoracle-learn): insert-string is obsolete.
+
+2003-06-19  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-enter-list): do not enter duplicate addresses into
+       the whitelist/blacklist
+
+2003-06-19  Jesper Harder  <harder@ifa.au.dk>
+
+       * nnheader.el (nnheader-init-server-buffer): Add
+       nntp-server-buffer to gnus-buffers.
+
+       * gnus-start.el (gnus-clear-system): Now we don't need to kill
+       nntp-server-buffer separately.
+
+2003-06-18  Didier Verna  <didier@xemacs.org>
+
+       * gnus-art.el (article-display-face): Correctly toggle between
+       display and hiding. Handle multiple Face headers.
+
+2003-06-17  Dave Love  <fx@gnu.org>
+
+       * nnimap.el: Require cl when compiling.
+
+       * message.el (message-fix-before-sending): Reinstate nullifying
+       the invisible text property.
+       (sender, from): Defvar when compiling.
+       (message-is-yours-p): Remove autoload cookie.
+
+2003-06-17  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-util.el (gnus-extract-address-components): Added
+       doc-string.
+
+2003-06-16  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * nnml.el (nnml-current-group-article-to-file-alist): Don't read
+       overview when using compressed files.  From Michael Albinus
+       <Michael.Albinus@alcatel.de>.
+
+2003-06-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-summary-refer-parent-article): Extract
+       Message-ID from In-Reply-To header.
+
+2003-06-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-is-yours-p): Narrow to head; extract from
+       and sender by itself.
+       (message-cancel-news, message-supersede): Remove useless things.
+
+2003-06-15  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind
+       `gnus-article-emulate-mime'.
+
+2003-06-15  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+       From Tommi Vainikainen <thv+gnus@iki.fi>.
+
+       * message.el (message-is-yours-p): New function.  Separated common
+       code from message-cancel-news and message-supersede.  Added
+       matching code which uses message-alternative-emails regexp as last
+       resort.
+       (message-cancel-news, message-supersede): Use message-is-yours-p.
+
+2003-06-13  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * nnimap.el (nnimap-split-articles): Narrow the right buffer to
+       the headers.  From Niklas Morberg <niklas.morberg@axis.com>.
+
+2003-06-12  Dave Love  <fx@gnu.org>
+
+       * nnheader.el (nnheader-functionp): Deleted.
+
+       * nnmail.el (nnmail-split-fancy-syntax-table): Define all in
+       defvar.
+       (nnmail-version): Deleted.
+       (nnmail-check-duplication, nnmail-expiry-target-group): Don't use
+       nnheader-functionp.
+
+2003-06-10  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-bogofilter-headers): fix for when the score
+       is requested but the message is not spam
+
+2003-06-09  Teodor Zlatanov  <tzz@lifelogs.com>
+       From Eric
+       <knauel@informatik.uni-tuebingen.de>
+
+       * spam.el (spam-use-spamoracle): new variable
+       (spam-install-hooks): add spamoracle to the list of conditions
+       for activation of spam-install-hooks
+       (spam-spamoracle): new variable customization group
+       (spam-spamoracle, spam-spamoracle): new variables
+       (spam-group-spam-processor-spamoracle-p)
+       (spam-group-ham-processor-spamoracle-p): new functions
+       (spam-summary-prepare-exit): added spamoracle ham/spam exit processing
+       (spam-list-of-checks, spam-list-of-statistical-checks): add
+       spam-use-spamoracle
+       (spam-check-spamoracle, spam-spamoracle-learn)
+       (spam-spamoracle-learn-ham, spam-spamoracle-learn-spam): new functions
+
+       * gnus.el (gnus-group-spam-exit-processor-spamoracle)
+       (gnus-group-ham-exit-processor-spamoracle): new variables for SpamOracle
+       (spam-process, ham-process): added spamoracle spam/ham processors
+
+2003-06-08  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-beginning-of-line): Docstring improvement.
+       Suggested by Michael R. Wolf <MichaelRunningWolf@att.net>
+
+2003-06-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Removed ["Add buttons"
+       gnus-summary-display-buttonized t]
+
+2003-06-07  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * nnmail.el (nnmail-split-fancy-match-partial-words): Doc string
+       fix.  Reported by Johan Bockg\e,Ae\e(Brd <bojohan+news@dd.chalmers.se>.
+
+2003-06-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-beginning-of-line): Docstring improvement.
+
+2003-06-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Parse garbage NNTP
+       groups correctly.
+
+2003-06-06  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+       From Benjamin Rutt <rutt+news@cis.ohio-state.edu>.
+
+       * message.el (message-fetch-field): Augment documentation to state
+       the narrowed-to-headers restriction.
+       (message-change-subject, message-reduce-to-to-cc)
+       (message-generate-unsubscribed-mail-followup-to)
+       (message-insert-importance-high, message-insert-importance-low)
+       (message-insert-or-toggle-importance)
+       (message-insert-disposition-notification-to): Narrow to headers
+       before calling message-fetch-field or message-remove-header.
+
+2003-06-06  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-trim): fix for when
+       gnus-registry-max-entries is nil
+
+2003-06-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * qp.el (quoted-printable-decode-region): Don't error out on
+       malformed text.
+
+2003-06-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * rfc2047.el (rfc2047-encode-region): Don't error out on invalid
+       strings.
+
+2003-06-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * mml1991.el (mml1991-pgg-sign): Insert pgg output as unibyte.
+       From: Ivan Boldyrev <boldyrev+nospam@cgitftp.uiggm.nsc.ru> (tiny
+       change)
+
+2003-06-03  Dave Love  <fx@gnu.org>
+
+       * gnus-soup.el (gnus-soup-send-packet): Don't use
+       message-functionp.
+
+       * gnus.el (gnus-agent-cache): Doc fix.
+       (gnus-other-frame): Quote lambda used as hook.
+
+       * message.el: Doc fixes.
+       (message-functionp): Deleted.  Callers changed.
+       (message-fix-before-sending): Highlight with overlays.  Clarify
+       `illegible text' messages.
+       (rmail-enable-mime-composing, gnus-message-group-art): Defvar when
+       compiling.
+       (gnus-find-method-for-group, nnvirtual-find-group-art): Autoload.
+
+2003-06-03  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * nnmail.el (nnmail-split-fancy-match-partial-words): New user
+       option.
+       (nnmail-split-it): Obey it.  Don't let-bind regexp twice.
+
+       * message.el (message-fetch-field): Mention narrow-to-headers
+       requirement.
+
+2003-06-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-xmas.el (gnus-xmas-create-image): Use
+       insert-file-contents-literally.  From: Eric Eide
+       <eeide@cs.utah.edu>
+
+2003-06-02  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-fetch-group): always return the
+       short name of the group
+
+2003-06-02  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-cus.el (defvar): Silence byte-compiler warnings.
+
+       * gnus-sum.el (gnus-get-newsgroup-headers): Unfold headers.
+
+2003-05-31  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (article-unsplit-urls): Use gnus-treat-article
+       rather than gnus-display-mime-function.
+
+2003-05-30  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-use-long-group-names): new variable
+       (gnus-registry-add-group): use it
+       (gnus-registry-trim-articles-without-groups): new variable
+       (gnus-registry-delete-group): use it
+       (gnus-registry-unload-hook): uninstall all the hooks
+
+       * spam.el (spam-install-hooks-function, spam-unload-hook): new
+       functions so users that load spam.el for customization don't get
+       all the hooks installed
+       (spam-install-hooks): new variable, set to t by default if user
+       has one of the spam-use-* variables set
+
+       * spam-stat.el (spam-stat-install-hooks, spam-stat-unload-hook): new
+       functions so users that load spam-stat.el for customization don't get
+       all the hooks installed
+
+2003-05-30  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (rfc2047-decode): Don't use
+       mm-with-unibyte-current-buffer.
+
+       * qp.el (quoted-printable-decode-string): Use
+       mm-with-unibyte-buffer.
+
+2003-05-29  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-save): allow forced saving even
+       when registry is not dirty.  Use gnus-registry-trim to shorten the
+       gnus-registry-alist.
+       (gnus-registry-max-entries): new variable
+       (gnus-registry-trim): new function, trim gnus-registry-alist to
+       size gnus-registry-max-entries, sorting by entry mtime so the
+       newest entries stick around
+
+       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): instead of
+       just one specific variable, allow a list of specific variables
+
+2003-05-28  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (rfc2047-encode-region): Skip ASCII at beginning and
+       end of region.
+
+2003-05-28  Jesper Harder  <harder@ifa.au.dk>
+
+       * lpath.el: Add put-char-table and get-char-table.
+
+2003-05-28  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-dirty): flag for modified registry
+       (gnus-registry-save, gnus-registry-read)
+       (gnus-registry-store-extra, gnus-registry-clear): use it (note
+       that gnus-registry-store-extra is invoked for all modifications to
+       set the mtime, so gnus-registry-dirty only needs to be set there)
+
+2003-05-23  Simon Josefsson  <jas@extundo.com>
+
+       * mml1991.el (mml1991-pgg-sign): Use mml-sender instead of
+       message-sender.
+
+       * gnus-art.el (gnus-use-idna): Check if idna-program is installed.
+
+       * message.el (message-use-idna): Ditto.
+
+2003-05-20  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (rfc2047-q-encoding-alist): Deleted.
+       (rfc2047-q-encode-region): Don't use it.
+       (rfc2047-encode-message-header) <(eq method 'mime)>: Bind
+       rfc2047-encoding-type to `mime'.
+       (rfc2047-encode-string, rfc2047-encode): Doc fix.
+
+2003-05-20  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-send-mail): Don't insert a courtesy copy
+       notice in base64 encoded messages.
+
+2003-05-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-summary-move-article): Don't copy expirable
+       marks if the destination group is not auto-expirable.
+
+2003-05-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (assq-delete-all): Removed the compiler macro.
+
+2003-05-14  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agentize): Updated documentation to match
+       usage.
+       (gnus-agent-expire-group-1): Do not skip over a group when the
+       force argument is set.
+       * gnus.el (gnus-agent): Updated documentation to reflect that
+       gnus-agent now defaults to t.
+
+2003-05-14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+
+2003-05-14 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Gnus v5.10.2 is released.
+
+2003-05-14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-delete-incoming): Changed to t.
+
+       * rfc2047.el (rfc2047-syntax-table): Funcall.
+
+       * lpath.el ((featurep 'xemacs)): Added set-char-table-range.
+       ((featurep 'xemacs)): No, don't.
+
+       * rfc2047.el (rfc2047-encodable-p): Use the header charset.
+
+       * gnus-sum.el (gnus-summary-reselect-current-group): Supply
+       leave-hidden.
+
+2003-05-14  Jonathan Kamens  <jik@kamens.brookline.ma.us>
+
+       * gnus-sum.el (gnus-summary-exit): Added `leave-hidden'.  (Tiny
+       patch.)
+
+2003-05-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-registry.el (gnus-registry-store-extra-entry): Use
+       gnus-assq-delete-all.
+
+       * gnus-xmas.el (gnus-xmas-assq-delete-all): New function.
+
+       * message.el (message-ignored-bounced-headers): Add Delivered-To.
+
+       * gnus-sum.el (gnus-summary-find-next): Indent.
+       (gnus-summary-find-prev): Ditto.
+       (gnus-summary-catchup): Doc fix.
+       (gnus-summary-mark-current-read-and-unread-as-read): New function.
+       (gnus-summary-catchup): Really mark after point.
+
+       * gnus-util.el (gnus-user-date): Use %d instead of %m.
+       (gnus-user-date): Use floating point time so that we don't get
+       overflows.
+
+       * gnus-sum.el (gnus-summary-local-variables): Clean up.
+
+       * gnus-fun.el (gnus-display-x-face-in-from): Don't use centering
+       since none of the other image things do.
+
+2003-05-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (assq-delete-all): New compiler macro for Emacs 20.
+
+2003-05-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el: Fbind find-coding-system.
+
+       * dgnushack.el (dgnushack-make-load): Remove redundant format call
+       in message.  Suggested by Yoichi NAKAYAMA <yoichi@geiin.org>.
+       * pop3.el (pop3-movemail): Ditto.
+
+2003-05-12  Colin Marquardt <c.marquardt@alcatel.de>  (tiny change)
+
+       * gnus.el (gnus-agent): Docstring fix.
+
+2003-05-12  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-install): new variable
+       (gnus-registry-fetch-extra, gnus-registry-fetch-extra-entry)
+       (gnus-registry-store-extra-entry, gnus-registry-delete-group)
+       (gnus-registry-add-group): add a modification timestamp to each entry
+       (gnus-registry-install-hooks): new function
+
+2003-05-12  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-cat-name): Eval macro while compiling.
+       (gnus-agent-cat-disable-undownloaded-faces): New function.
+       Accessor for new agent property
+       'agent-disable-undownloaded-faces'.
+       gnus-cus.el (gnus-agent-parameters): Added
+       agent-disable-undownloaded-faces and corrected documentation.
+       (gnus-agent-cat-prepare-category-field,
+       gnus-agent-customize-category): Changed to avoid creating free
+       references to each field's symbol.
+       gnus-sum.el (gnus-summary-use-undownloaded-faces): New local variable.
+       (gnus-select-newgroup): Initialize it.
+       (gnus-summary-highlight-line): Use it.
+
+2003-05-12  Dave Love  <fx@gnu.org>
+
+       * mm-util.el (mm-read-charset): Deleted.
+       (mm-coding-system-mime-charset): New.
+       (mm-read-coding-system, mm-mule-charset-to-mime-charset)
+       (mm-charset-to-coding-system, mm-mime-charset)
+       (mm-find-mime-charset-region): Use it.
+       (mm-default-multibyte-p): Fix non-mule case.
+
+       * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-bol): Eval
+       and compile.
+       (rfc2047-syntax-table): Fix building table to work in Emacs 22.
+       (rfc2047-unfold-region): Delete unused var `leading'.
+
+2003-05-12  Simon Josefsson  <jas@extundo.com>
+
+       * pgg.el (pgg-temp-buffer-show-function): Reuse existing visible
+       output window if one is available.  Tiny patch from Ville Skytt\e,Ad\e(B
+       <scop@xemacs.org>.
+
+2003-05-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Added
+       space.
+
+2003-05-11  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-enter-digest-group): Don't do article
+       washing etc.
+       (gnus-handle-ephemeral-exit): Don't reload article after exiting.
+
+       * nndoc.el (nndoc-type-alist): `mime-digest' should be before
+       `mime-parts'.
+
+2003-05-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-cite.el (gnus-article-hide-citation-maybe): Make toggling
+       work.  Update mode-line.
+
+2003-05-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-logo-color-alist): Added no colours.
+
+2003-05-09  Dave Love  <fx@gnu.org>
+
+       * utf7.el (mm-util): Require.
+       (utf7-direct-encoding-chars, utf7-imap-direct-encoding-chars):
+       Defconst, not defvar.
+       (utf7-utf-16-coding-system): New.
+       (utf7-encode-internal): Hoist concat out of loop.
+       (utf7-fragment-encode): Use mm-with-unibyte-current-buffer.
+       (utf7-get-u16char-converter) [utf7-utf-16-coding-system]: New
+       case.
+       (utf7-latin1-u16-char-converter): Encode the region.
+       (utf7-u16-latin1-char-converter): Decode the region.
+       (utf7-encode, utf7-decode): Fix multibyteness.
+
+       * mm-bodies.el (mm-body-7-or-8): Don't special-case mule.
+       (mm-encode-body): Use mm-read-coding-system, not mm-read-charset.
+       (mm-uu-yenc-decode-function): Defvar when compiling.
+       (mm-encode-body, mm-decode-body): Doc fix.
+
+2003-05-09  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-unregistered-group-regex):
+       removed in favor of the group/topic/global variables
+       (gnus-registry-register-message-ids): fixed test to omit
+       gnus-registry-unregistered-group-regex
+
+       * gnus.el (gnus-variable-list): removed gnus-registry-alist and
+       gnus-registry-headers-alist from the list
+       (gnus-registry-headers-alist): removed
+       (registry-ignore): new parameter, with accompanying
+       gnus-registry-ignored-groups global variable
+
+       * gnus-start.el (gnus-clear-system): no need to clear the
+       registry, we can do it ourselves
+       (gnus-gnus-to-quick-newsrc-format): extra parameters so it can be
+       used by gnus-registry.el
+
+       * 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 <jdc@chow.mat.jhu.edu>
+       (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  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-picon.el (gnus-picon-transform-address): Parse the encoded
+       address.
+
+2003-05-08  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-start.el (gnus-clear-system): added gnus-registry-alist to
+       the list of cleared variables
+
+       * gnus-registry.el (gnus-registry-split-fancy-with-parent):
+       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 <niklas.morberg@axis.com>
+
+2003-05-08  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * gnus-sum.el (gnus-summary-next-page): Mention
+       `gnus-article-skip-boring' in docstring.
+
+2003-05-08  Jesper Harder  <harder@ifa.au.dk>
+
+       * rfc2231.el (rfc2231-parse-string): "=" should have whitespace
+       syntax here.
+
+       * ietf-drums.el (ietf-drums-syntax-table): "=" should not have
+       whitespace syntax class when parsing email addresses.
+
+       * message.el (message-forward-subject-name-subject): Don't use
+       mail-decode-encoded-word-string before parsing from.
+
+2003-05-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-setup-1): Setup alternative email before
+       generate-headers.
+
+       (message-forward-subject-name-subject): Fix the case when the
+       field "from" doesn't exist.
+
+2003-05-07  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (rfc2047-encode-region): Skip \n as whitespace.
+
+       * mm-util.el (mm-find-mime-charset-region): Expurgate utf-16 from
+       possible values.
+
+2003-05-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-kill-to-signature): Fix.
+
+2003-05-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-auto-goto-ignores): Docstring fix.
+
+       * gnus-art.el (gnus-mime-display-multipart-as-mixed)
+       (gnus-mime-display-multipart-related-as-mixed)
+       (gnus-button-mid-or-mail-heuristic-alist): do.
+
+2003-05-05  Dave Love  <fx@gnu.org>
+
+       * mm-util.el (mm-default-multibyte-p): New.
+       (mm-coding-system-p): Maybe use find-coding-systems.
+
+2003-05-04  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (with-syntax-table): Define if necessary.
+       (rfc2047-syntax-table): Fix last change for XEmacs.
+       (rfc2047-parse-and-decode): Revert last change.
+
+2003-05-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.el: Don't test for `mm-guess-mime-charset'.
+
+       * mm-util.el (mm-guess-mime-charset): Remove.  Not used any more.
+
+       * gnus.el (gnus-default-charset): Set default value to
+       `undecided'.
+
+       * gnus-art.el (article-decode-charset): Don't supply 4th arg to
+       mm-decode-body.
+
+       * 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 <deskpot@despammed.com>  (tiny change)
+
+       * gnus-util.el (gnus-multiple-choice): Add ", ?".
+
+2003-05-03  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (rfc2047-syntax-table): Don't call make-char-table
+       with 2 args.
+       (rfc2047-decode-string): Don't set the buffer multibyte before
+       calling buffer-string.
+
+       * mm-encode.el (mm-long-lines-p): Autoload.
+       (mm-encode-content-transfer-encoding): Doc fix.  Don't make buffer
+       unibyte.  Signal error on unknown encoding.
+       (mm-encode-buffer, mm-qp-or-base64): Doc fix.
+
+       * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-eol): New.
+       Callers of gnus- versions changed to use them.
+       (rfc2047-header-encoding-alist): Add `address-mime' part.  Doc
+       fixes.
+       (rfc2047-encoding-type): New.
+       (rfc2047-encode-message-header): Use mm-charset-to-coding-system.
+       Don't include header name field in encoding.  Add `address-mime'
+       case and bind rfc2047-encoding-type for `mime' case.
+       (rfc2047-encodable-p): Deleted.
+       (rfc2047-syntax-table): New.
+       (rfc2047-encode-region, rfc2047-encode): Rewritten to take account
+       of rfc2047 rules with respect to rfc2822 tokens and to do encoding
+       in place rather than by passing strings.
+       (rfc2047-encode-string): Doc fix.
+       (rfc2047-q-encode-region): Don't use
+       mm-with-unibyte-current-buffer.
+       (rfc2047-encoded-word-regexp): eval-and-compile.
+       (rfc2047-decode-region): Avoid concatenation in loop.
+       (rfc2047-parse-and-decode): Remove useless disjunction.
+
+2003-05-02  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (rfc2047-q-encode-region, rfc2047-decode): Use
+       mm-with-unibyte-current-buffer.
+       (ietf-drums, gnus-util): don't require.
+
+       * sieve.el (sieve-manage-mode-menu): Define before use.
+
+       * mml-smime.el (message-narrow-to-headers): Autoload.
+
+       * mm-util.el (mm-coding-system-p): Don't override nil from
+       coding-system-p.
+       (mm-mule4-p, mm-disable-multibyte-mule4)
+       (mm-with-unibyte-current-buffer-mule4): Deleted.
+       (mm-multibyte-p): Use defun, not defalias.
+       (mm-make-temp-file): Moved to group at top of file.
+       (mm-point-at-eol, mm-point-at-bol): New.
+
+       * gnus-cite.el (gnus-art): Require.
+
+       * gnus-ems.el (gnus-get-buffer-create)
+       (nnheader-find-etc-directory, message-text-with-property):
+       Autoload.
+       (gnus-tmp-unread, gnus-tmp-replied, gnus-tmp-score-char)
+       (gnus-tmp-indentation, gnus-tmp-opening-bracket, gnus-tmp-lines)
+       (gnus-tmp-name, gnus-tmp-closing-bracket, gnus-tmp-subject-or-nil)
+       (gnus-check-before-posting): Only defvar when compiling.
+
+       * gnus-int.el (gnus-agent-expire): Autoload, don't defun.
+
+       * gnus-util.el (rmail-default-rmail-file, mm-text-coding-system):
+       Defvar when compiling.
+       (gnus-output-to-rmail): Require mm-util.
+
+       * mail-source.el (mail-source-callback): Use mm-make-temp-file.
+       (mail-source-make-complex-temp-name): Deleted.
+
+       * message.el (message-use-idna): Use mm-coding-system-p.
+       (message-tokenize-header, message-make-organization)
+       (message-make-from):  Use with-temp-buffer.
+       (message-set-work-buffer): Deleted.
+       (message-fill-paragraph): Use `if' not `and' for compiler warning.
+       (message-check-news-header-syntax): Remove useless lambda.
+       (message-forward-make-body): Use mm-disable-multibyte,
+       mm-with-unibyte-current-buffer, mm-enable-multibyte.
+       (message-replace-chars-in-string): Deleted.
+
+       * mm-extern.el (mm-extern-local-file): Use mm-disable-multibyte.
+       (mm-extern-url): Use mm-with-unibyte-current-buffer,
+       mm-disable-multibyte.
+       (mm-extern-anon-ftp): Use mm-disable-multibyte.
+
+       * mml1991.el (mml1991-mailcrypt-encrypt, mml1991-gpg-encrypt): Use
+       mm-with-unibyte-current-buffer.
+
+       * mml2015.el (mml): Require.
+       (mml2015-mailcrypt-encrypt, mml2015-gpg-encrypt): Use
+       mm-with-unibyte-current-buffer.
+
+       * nnheader.el (gnus-util): Require.
+
+       * nntp.el (format-spec, format-spec-make, open-tls-stream):
+       Autoload.
+
+       * rfc2231.el (mail-header-remove-comments, mm-encode-body)
+       (mail-header-remove-whitespace): Autoload.
+
+       * sieve-manage.el (starttls-negotiate): Autoload.
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnrss.el (nnrss-find-rss-via-syndic8): Indent.
+
+2003-05-01  Mark A. Hershberger  <mah@everybody.org>
+
+       * nnrss.el (nnrss-find-rss-via-syndic8): Don't error out.
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+
+2003-05-01  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam-report.el (spam-report-gmane-regex): docstring fix.  From
+       Jon Ericson <Jon.Ericson@jpl.nasa.gov> (tiny change)
+
+       * gnus.el (gnus-install-group-spam-parameters): docstring fix.
+       From Jon Ericson <Jon.Ericson@jpl.nasa.gov> (tiny change)
+
+       * gnus-registry.el (gnus-registry-fetch-extra)
+       (gnus-registry-store-extra, gnus-registry-group-count): new functions
+       (gnus-registry-fetch-group, gnus-registry-delete-group)
+       (gnus-registry-add-group): changed to work with extra data element
+       if present
+
+2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Gnus v5.10.1 is released.
+
+2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.24 is released.
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * dgnushack.el (when): Check whether defadvice is fbound.
+
+2003-05-01  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-unregistered-group-regex): new variable
+       (gnus-registry-register-message-ids): use it
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+
+       * gnus.el: Update copyright for several files.
+
+2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.23 is released.
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * spam-stat.el (spam-stat-test-directory): Compare against zero.
+
+2003-05-01  Trey Jackson <tjackson@ichips.intel.com>  (tiny change)
+
+       * spam-stat.el (spam-stat-test-directory): Skip 0 length files.
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-forward-subject-name-subject): Decode
+       string when forwarding.
+
+2003-05-01  Oystein Viggen  <oysteivi@tihlde.org>
+
+       * dgnushack.el (when): Add defadvice.
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+
+2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.22 is released.
+
+2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.21 is released.
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+
+2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.20 is released.
+
+2003-05-01  Vasily Korytov  <deskpot@despammed.com>
+
+       * gnus-dired.el (gnus-dired-mode-map): Move to C-c C-l.
+
+2003-04-30  Mark A. Hershberger  <mah@everybody.org>
+
+       * mm-url.el (mm-url-insert-file-contents): set url-current-object
+       in the case where mm-url-use-external is set.
+
+       * nnrss.el (nnrss-request-article): Change the messages created to
+       multipart/alternative.  Hopefully fixes a problem interaction with
+       w3m.
+       (nnrss-find-rss-via-syndic8): Better handling if xml-rpc.el isn't
+       around.
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-check-news-header-syntax): Alter "posting"
+       message.
+
+       * nnrss.el (nnrss-node-text): Don't use char classes.
+
+2003-05-01  David Z. Maze  <dmaze@mit.edu>
+
+       * nnrss.el (nnrss-find-rss-via-syndic8): Have an `error' branch
+       in condition-case.
+
+2003-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-required-headers): Remove In-Reply-To.
+
+       * gnus-int.el (gnus-open-server): Revert changes.
+
+2003-04-30  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * gnus-int.el (gnus-open-server): Try to open unagentized servers
+       even when unplugged.
+
+2003-04-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-prefer-mid-or-mail): Fixed typo in
+       doc-string.
+
+2003-05-01  Steve Youngs  <youngs@xemacs.org>
+
+       * lpath.el: Add a section for non-Mule XEmacsen.
+       fbind `find-charset-string' and `coding-system-base' in that
+       section.
+
+       * gnus-util.el (gnus-completing-read-maybe-default): New.
+       (gnus-completing-read): Use it.
+
+       * mm-view.el (mm-view-pkcs7-decrypt): Ditto.
+
+       * gnus-art.el (gnus-read-string): New.
+       (gnus-summary-pipe-to-muttprint): Use it.
+
+       * gnus-xmas.el (gnus-xmas-open-network-stream): New.
+
+       * dns.el (dns-make-network-process): Use it.
+
+       Take care of some differences between XEmacs 21.1 and newer
+       versions of XEmacs.
+
+2003-04-30  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-split-fancy-with-parent): added
+       diagnostic message
+       (gnus-registry-grep-in-list): don't run when word is nil
+       (gnus-registry-fetch-message-id-fast): new function
+       (gnus-registry-delete-group, gnus-registry-add-group): make sure
+       the id and group are not nil
+       (gnus-registry-register-message-ids): new function
+       (gnus-register-action): optimized logical flow
+       (gnus-summary-prepare-hook): added gnus-registry-register-message-ids
+
+2003-04-30  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * gnus-delay.el (gnus-delay-article): Call
+       `gnus-agent-queue-setup' to create the delay group.
+
+       * gnus-agent.el (gnus-agent-queue-setup): Support optional arg
+       for the (queue) group name.
+
+2003-04-30  Simon Josefsson  <jas@extundo.com>
+
+       * mm-util.el (mm-charset-to-coding-system): Use user specified
+       charset unless coding-system-get is fboundp.
+
+2003-04-30  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-cat-defaccessor, gnus-agent-cat-name):
+       Wrapped in eval-when-compile.
+       (gnus-agent-mode): Bind gnus-agent-go-online to nil as you
+       shouldn't be asked twice to go online with each server.
+       (gnus-agent-get-undownloaded-list, gnus-agent-fetch-articles,
+       gnus-agent-crosspost, gnus-agent-flush-cache,
+       gnus-agent-fetch-session, gnus-agent-unread-articles,
+       gnus-agent-uncached-articles, gnus-agent-regenerate-group,
+       gnus-agent-group-covered-p): Expanded pop macros used for
+       effect. Avoids compilation warning in emacs 21.3.
+
+       * gnus-int.el (gnus-open-server): Restructured to only open
+       nnagent when gnus-plugged is nil.
+
+2003-04-30  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el: Fbind string-to-multibyte.
+
+2003-04-30  Steve Youngs  <youngs@xemacs.org>
+
+       * dgnushack.el: Add some missing autoloads for XEmacs 21.1.
+
+2003-04-29  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-registry-fetch-group): faster
+       (gnus-registry-delete-group): new function
+       (gnus-registry-add-group): new function
+       (gnus-register-spool-action): use it
+       (gnus-register-action): use it
+       (gnus-registry-translate-from-alist)
+       (gnus-registry-translate-to-alist): remove the headers registry
+       for now
+
+2003-04-29  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-alist): Fixed CTAN regexp.
+
+2003-04-29  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam-report.el (spam-report-gmane): gnus-summary-article-number
+       is not necessary, just use the function parameter
+
+2003-04-29  Karl Pflysterer  <sigurd@12move.de>
+
+       * spam-stat.el (spam-stat-save): No longer font-locks the file
+       when saving
+
+2003-04-29  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * canlock.el: Bind mail-header-separator when compiling (XEmacs
+       provides it in mail-lib/auto-autoloads.el).
+
+2003-04-29  Simon Josefsson  <jas@extundo.com>
+
+       * mml2015.el (mml2015-pgg-sign): Use mml-sender instead of
+       message-sender.
+
+       * mml.el (mml-generate-mime-1): Set mml-sender too.
+
+2003-04-29  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-display-while-building): Docstring fix.
+
+       * mm-url.el (mm-url-use-external): do.
+
+2003-04-29  Simon Josefsson  <jas@extundo.com>
+
+       * canlock.el (mail-fetch-field): Autoload it (fix xemacs compile
+       warnings).
+
+       * sieve-mode.el (c-mode): Ditto.
+
+       * pgg.el (run-at-time): Ditto.
+
+       * mm-url.el (require): Require timer when compiling for
+       with-timeout macro (fix xemacs compile warnings).
+
+2003-04-28  Dave Love  <fx@gnu.org>
+
+       * gnus-util.el (nnheader): Don't require.
+       (Nnheader-narrow-to-headers, nnheader-replace-chars-in-string):
+       Autoload.
+
+       * spam.el: Require cl when compiling.
+
+       * dns.el: Require cl when compiling.
+
+2003-04-28  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-article-goto-next-page)
+       (gnus-article-goto-prev-page): Revert 2003-02-12 change to make
+       gnus-pick-mode work.
+
+2003-04-28  Steve Youngs  <youngs@xemacs.org>
+
+       * Makefile.in (FLAGS): Use @FLAGS@.
+
+2003-04-27  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-mime-display-multipart-as-mixed)
+       (gnus-mime-display-multipart-alternative-as-mixed)
+       (gnus-mime-display-multipart-related-as-mixed): Added doc-strings,
+       allow customization.
+
+2003-04-27  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * dgnushack.el (dgnushack-compile-verbosely): New function.  Not
+       currently called (See source for explanation).
+
+2003-04-27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-catchup): Don't mark ticked messages.
+       (gnus-summary-mark-read-and-unread-as-read): Take an optional
+       mark.
+
+       * gnus.el (gnus-version-number): Bump.
+
+2003-04-27 06:47:31 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.19 is released.
+
+2003-04-27  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-registry.el (gnus-register-spool-action): Replaced literal
+       carriage-return character with its escape sequence.
+
+2003-04-27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-catchup-from-here): Doc fix.
+
+       * nnrss.el (nnrss-node-text): Use only one
+       gnus-replace-in-string.
+
+       * gnus.el: Remove gnus-functionp throughout.
+
+       * gnus-util.el (gnus-functionp): Removed.
+
+       * gnus-msg.el (gnus-summary-wide-reply-with-original): Doc fix.
+
+       * message.el (message-required-headers): Add In-Reply-To.
+
+2003-04-27  Marshall T. Vandegrift  <vandem2@rpi.edu>
+
+       * gnus-fun.el (gnus-face-from-file): Bind coding-system-for-read
+       to binary.
+
+2003-04-27  Jesper Harder  <harder@ifa.au.dk>
+
+       * mml.el (mml-preview): do.
+
+       * message.el (message-mode): do.
+
+       * gnus-undo.el (gnus-undo-mode): do.
+
+       * gnus-topic.el (gnus-topic-mode): do.
+
+       * gnus-sum.el (gnus-summary-mode, gnus-summary-edit-article): do.
+
+       * gnus-msg.el (gnus-setup-message)
+       (gnus-inews-add-send-actions, gnus-configure-posting-styles): do.
+
+       * gnus-gl.el (gnus-grouplens-mode): do.
+
+       * gnus-art.el (gnus-mime-save-part-and-strip)
+       (gnus-mime-delete-part): Use it.
+
+       * gnus-util.el (gnus-make-local-hook): New function.
+
+2003-04-25  Simon Josefsson  <jas@extundo.com>
+
+       * nnrss.el (nnrss-node-text): Don't use a star.
+       (nnrss-node-text): Use g-r-i-s, not g-r-r-i-s which doesn't exist.
+
+2003-04-24  Dave Love  <fx@gnu.org>
+
+       * mm-encode.el (mm-long-lines-p): Autoload.
+       (mm-encode-content-transfer-encoding): Don't try to make buffer
+       unibyte before decoding.  Don't ignore errors for base64 encoding.
+
+       * qp.el (quoted-printable-decode-region): Use mm-insert-byte.
+       Signal error on malformed text, as for base64.
+       (quoted-printable-encode-region): DTRT in Emacs 22.
+
+       * mm-util.el (mm-make-temp-file, mm-insert-byte): New.
+       (mm-auto-save-coding-system): Consider utf-8-emacs.
+       (mm-mime-mule-charset-alist, mm-mule-charset-to-mime-charset)
+       (mm-charset-to-coding-system, mm-mime-charset)
+       (mm-find-mime-charset-region): Check for :mime-charset coding
+       systems property.
+
+       * mml-sec.el (mml2015, mml1991): Don't require.
+       (mml2015-sign, mml2015-encrypt, mml1991-sign, mml1991-encrypt)
+       (message-goto-body, mml-insert-tag): Autoload.
+
+       * mm-decode.el (mm-tmp-directory): Re-write to help avoid warnings.
+
+       * gnus-start.el (message-make-date): Autoload rather than
+       requiring message.
+
+       * gnus-group.el (gnus-group-name-charset-group-alist): Use
+       mm-coding-system-p.
+       (gnus-cache-active-altered): Defvar when compiling.
+       (gnus-group-delete-group): Re-write to help avoid warnings.
+
+       * gnus-art.el (gnus-use-idna): Use mm-coding-system-p.
+
+       * pgg.el: Split eval-when-compile forms.
+
+2003-04-24  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-group.el (gnus-large-ephemeral-newsgroup)
+       (gnus-fetch-old-ephemeral-headers): News variables.
+       (gnus-group-read-ephemeral-group): Use them.
+
+2003-04-24  Simon Josefsson  <jas@extundo.com>
+
+       * sieve.el (sieve-upload): Don't use replace-regexp-in-string.
+
+       * nnrss.el (nnrss-node-text): Ditto.
+
+2003-04-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-msg.el (gnus-inews-do-gcc): Make sure the obsolete variable
+       gnus-inews-mark-gcc-as-read exists.
+
+2003-04-23  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sieve.el (gnus-sieve-generate): Rewrite regexp search so it
+       doesn't exceed the regexp stack space.
+
+2003-04-23  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-inews-mark-gcc-as-read): Don't defvar it.
+
+       * gnus-art.el (gnus-article-hide-pgp-hook): do.
+
+2003-04-23  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * mml.el (mml-preview): Bind `=', RET, and mouse-2.
+
+2003-04-23  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-bodies.el (mm-decode-body): Don't override supplied charset.
+
+2003-04-23  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (merge, copy-list): Remove compiler macros.
+       (butlast): Add a compiler macro.
+
+2003-04-22  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus-util.el (gnus-merge): Added "type" argument to match CL
+       merge and gnus-sum.el's expectations.
+
+2003-04-21  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-url-regexp): Added nntp.
+
+       * message.el (message-generate-headers-first): Default to
+       '(references).
+
+       * gnus-art.el (gnus-mime-delete-part): Require confirmation.
+
+2003-04-21  Jesper Harder  <harder@ifa.au.dk>
+
+       * smime.el (smime-decrypt-region): Insert From header.
+
+2003-04-21  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * gnus-fun.el (gnus-face-from-file, gnus-convert-png-to-face):
+       Max length of header is 726, not 740.  From Gaute B Strokkenes
+       <gs234@cam.ac.uk>.
+
+2003-04-20  Jesper Harder  <harder@ifa.au.dk>
+
+       * nndb.el, mml1991.el: Fix license template.
+
+2003-04-20  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-split-articles): Don't download body unless
+       required.
+
+       * imap.el (imap-gssapi-open, imap-ssl-open): Erase buffer before
+       starting process, like imap-kerberos4-open does.
+
+       * mml-smime.el, rfc1843.el, dig.el, smime.el, uudecode.el: Fix
+       license template.
+
+       * mml-sec.el: Fix license template.
+
+       * gnus-sieve.el, sieve.el, sieve-manage.el, sieve-mode.el: Fix
+       license template.
+
+       * pgg-def.el, pgg.el, pgg-gpg.el, pgg-parse.el, pgg-pgp5.el,
+       pgg-pgp.el: Fix license template.
+
+2003-04-19  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-delete-article): Improve docstring.
+
+2003-04-19  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-move-spam-nonspam-groups-only): dumb typo fix
+
+2003-04-18  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-split): allow a particular check as a parameter,
+       e.g. (: spam-split 'spam-use-bogofilter)
+       (spam-mark-only-unseen-as-spam): new parameter, see doc
+       (spam-mark-junk-as-spam-routine): use
+       spam-mark-only-unseen-as-spam, simplify routine to take advantage
+       of gnus-newsgroup-unread as well as gnus-newsgroup-unseen
+
+2003-04-17  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.el (gnus-group-short-name, gnus-group-prefixed-p): new functions
+       (gnus-group-guess-full-name): don't prefix the group twice
+
+       * nnmail.el (nnmail-split-fancy-with-parent): docstring fix
+
+       * gnus-registry.el (gnus-registry-clear)
+       (gnus-registry-fetch-group, gnus-registry-grep-in-list)
+       (gnus-registry-split-fancy-with-parent): new functions
+       (gnus-register-spool-action, gnus-register-action): simplified the format
+       (gnus-registry): new customization group
+       (gnus-registry-unfollowed-groups): new variable
+
+2003-04-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-button-alist): Add nntp: urls.
+       (gnus-header-button-alist): Ditto.
+
+2003-04-17  Dave Love  <fx@gnu.org>
+
+       * gnus-util.el (gnus-string-equal): Revert last change.
+
+2003-04-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-srvr.el (gnus-browse-make-menu-bar): Fix typo.
+
+2003-04-17  Mike Woolley  <mike@ariel.co.uk>
+
+       * gnus-sum.el (gnus-sum-thread-tree-false-root): New variable.
+
+2003-04-15  Michael Shields  <shields@msrl.com>
+
+       * gnus-art.el (article-hide-boring-headers): Hide Reply-To: if
+       the broken-reply-to group parameter is set.  Idea from Vasily
+       Korytov <deskpot@myrealbox.com>.
+
+2003-04-17  Steve Youngs  <youngs@xemacs.org>
+
+       * dgnushack.el: 'setenv' is in env.el for XEmacsen <= 21.4, but in
+       process.el in XEmacsen >= 21.5.
+
+2003-04-17  Steve Youngs  <youngs@xemacs.org>
+
+       * dgnushack.el: Add a whole swag of autoloads and defaliases to
+       satisfy the byte-compiler when building with XEmacs.
+
+       * lpath.el (maybe-bind): Add 'w3-meta-content-type-charset-regexp'
+       and 'w3-meta-charset-content-type-regexp' in XEmacs.  The upstream
+       W3 doesn't have these.
+
+       * mailcap.el: Maybe require 'lpr in XEmacs.
+
+2003-04-16  Simon Josefsson  <jas@extundo.com>
+
+       * mml2015.el (mml2015-pgg-sign): Bind pgg-default-user-id to MML
+       sender tag, if available.
+
+2003-04-16  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-registry.el (gnus-register-action)
+       (gnus-register-spool-action, hashtable-to-alist)
+       (gnus-registry-translate-from-alist, alist-to-hashtable)
+       (gnus-registry-translate-to-alist, gnus-registry-headers-hashtb):
+       new variables and function fixes
+
+       * gnus.el (gnus-registry-headers-alist): new variable to hold
+       article header data
+       (gnus-variable-list): save gnus-registry-headers-alist
+
+       * spam-report.el (Module): new module for spam reporting
+
+       * gnus.el (spam-process): added
+       gnus-group-spam-exit-processor-report-gmane to the list of choices
+       (gnus-install-group-spam-parameters): defined new spam exit processor
+
+       * spam.el (autoload): autoload spam-report-gmane when needed
+       (spam-report-gmane-register-routine): glue for spam-report.el
+       (spam-group-spam-processor-report-gmane-p): glue for the
+       gnus-group-spam-exit-processor-report-gmane spam processor
+       (spam-summary-prepare-exit): check the report-gmane spam processor
+       and run spam-report-gmane-register-routine if it's active
+
+       From John Wiegley <johnw@gnu.org>
+
+       * spam.el (spam-bogofilter-score): check bogofilter headers before
+       checking bogofilter itself
+
+2003-04-16  Dave Love  <fx@gnu.org>
+
+       * gnus-agent.el: Wrap defsetf in eval-when-compile.
+       (gnus-agent-cat-defaccessor): Don't use gensym.
+
+       * mml1991.el: Require cl, mm-util when compiling.
+       (quoted-printable-decode-region, quoted-printable-encode-region):
+       Autoload.
+
+       * pgg.el: Require cl when compiling.
+
+       * nnmail.el (gnus): Require.
+
+       * gnus-util.el: Move provide to end.
+       (gnus-string-equal): Maybe use compare-strings.
+       (gnus-merge): New.
+
+       * gnus-sum.el (gnus-summary-prepare-threads): Don't use copy-list.
+       (gnus-summary-insert-articles): Use gnus-merge.
+
+       * gnus-fun.el: Require cl and mm-util when compiling.
+
+       * gnus-diary.el (gnus-diary-delay-format-french)
+       (gnus-diary-delay-format-english): Don't use setf with nthcdr.
+
+       * nndiary.el (nndiary-compute-reminders): Don't use setf with
+       nthcdr.
+
+2003-04-16  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-make-cat): Added optional parameter to
+       specify a predicate other than false.
+       (gnus-category-read): Use the new feature to create a 'default'
+       category with a 'short' predicate.
+
+2003-04-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-unique-id): Comment change.
+
+       * gnus-art.el (gnus-article-next-page-1): New function.
+       (gnus-article-next-page): Use it.
+
+2003-04-15  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-split): added save-restriction to save-excursion
+
+2003-04-15  Reiner Steib  <Reiner.Steib@gmx.de>
+       From Julien Avarre <julien@avarre.com>
+
+       * gnus-fun.el: Fixed autoload cookie.
+
+2003-04-15  Paul Jarc  <prj@po.cwru.edu>
+       From Remi Letot  <remi.letot@easynet.be>
+
+       * nnmaildir.el (nnmaildir-request-scan): Use gnus-remove-if
+       instead of remove-if.
+
+2003-04-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-msg.el (gnus-summary-news-other-window): Use delq and
+       copy-sequence instead of remove which is a cl run-time function in
+       Emacs 20.
+
+2003-04-14  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-summary-news-other-window): Make a buffer
+       local copy of gnus-discouraged-post-methods with the current
+       method removed.
+
+2003-04-14  Simon Josefsson  <jas@extundo.com>
+
+       * mailcap.el (mailcap-mime-data): Add application/pgp-keys.
+
+2003-04-13  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * mm-util.el (mm-sort-coding-systems-predicate): Convert elements
+       of `mm-coding-system-priorities' to base coding system.
+
+       * gnus-sum.el: Added coding cookie ("middle dot" in
+       gnus-summary-morse-message).
+
+2003-04-13  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (article-fill-long-lines)
+       (article-verify-x-pgp-sig, article-decode-group-name)
+       (gnus-mime-button-menu): Split >80 character lines.
+
+2003-04-13  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-local-variables): Use defvar since
+       we're let-binding it.
+
+       * nnmbox.el (nnmbox-mbox-buffer): It's not a constant.
+
+2003-04-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-hide-headers): Don't do intangible.
+
+       * gnus.el (gnus-group-prefixed-name): Comment out the test for
+       colon.
+
+       * gnus-srvr.el (gnus-browse-read-group): Don't give the real name
+       to the ephemeral entry, but the prefixed name.
+
+       * gnus.el (gnus-group-prefixed-name): Clean up.
+
+2003-04-13  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-group-pathname): Bind
+       gnus-command-method so that gnus-agent-directory will always
+       return a valid directory.
+       * gnus-cache.el (gnus-cache-enter-article): Remove article from
+       gnus-newsgroup-undownloaded so that the summary will display the
+       article as downloaded.
+       (gnus-cache-remove-article): If the article isn't in the agent,
+       remove it from gnus-newsgroup-undownloaded so that the summary
+       will display the article as undownloaded.
+
+2003-04-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+
+2003-04-13 01:12:01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.18 is released.
+
+2003-04-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-draft.el (gnus-draft-send): Add message-hidden-headers.
+
+2003-04-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-next-page): Use
+       gnus-article-over-scroll.
+       (gnus-article-over-scroll): New variable.
+
+       * message.el (message-newline-and-reformat): Place a boundary
+       before filling.
+       (message-make-forward-subject-function): Changed default to
+       message-forward-subject-name-subject.
+       (message-forward-subject-name-subject): New function.
+
+       * nnimap.el (nnimap-split-fancy): Ditto.
+
+       * gnus-sum.el (gnus-summary-line-message-size): Ditto.
+
+       * gnus-cus.el (gnus-group-parameters): Removed "which see".
+
+       * mml.el (mml-minibuffer-read-file): Bind
+       completion-ignored-extensions to nil.
+
+       * message.el (message-fix-before-sending): Comment fix.
+       (message-fix-before-sending): Make hidden headers visible.
+       (message-hide-headers): Bind after-change-functions to nil.
+       (message-forbidden-properties): Put invisible and intangible
+       back.
+       (message-strip-forbidden-properties): Ignore message-hidden text.
+
+       * gnus-msg.el: Hide headers.
+
+       * message.el (message-hidden-headers): New variable.
+       (message-hide-headers): New function.
+       (message-hide-header-p): New function.
+       (message-hide-header-p): Change logic.
+       (message-forbidden-properties): Remove intangible nil invisible
+       nil.
+       (message-hide-headers): Narrow to headers.
+
+       * lpath.el (featurep): Bind Info-directory, Info-menu.
+
+2003-04-12  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-bodies.el (mm-body-charset-encoding-alist): UTF-16 *must* be
+       encoded.
+       (mm-encode-body): Don't corrupt UTF-16.
+       (mm-body-encoding): Pay attention to mm-body-charset-encoding-alist.
+
+2003-04-10  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-get-undownloaded-list): Articles in
+       the CACHE are now detected and handled the same as an article
+       downloaded into the agent.
+       (gnus-agent-group-path): Modified to match nnmail-group-pathname
+       so that the agent front-end and back-end (nnagent) always use the
+       same directory.
+       (gnus-agent-group-pathname): New function. Wrapper for
+       nnmail-group-pathname.
+       (gnus-agent-expire-unagentized-dirs): New variable.  May be
+       customized to disable gnus-agent-expire-unagentized-dirs.
+       (gnus-agent-expire-unagentized-dirs): Expand gnus-agent-directory
+       as the directories in gnus-agent-expire-current-dirs were
+       expanded.
+
+2003-04-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Disable "Encrypt
+       body" entry in read only groups.
+
+2003-04-09  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Disable "Import file"
+       and "Create article" items in non-editable groups.
+
+2003-04-09  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-write-active): Added option of
+       replacing, rather than updating, the agent's active file.  Do NOT
+       use the fully qualified group name as gnus-active-to-gnus-format
+       blindly prefixes group names with server names.
+       (gnus-agent-save-group-info): Merge BOTH min/max of current active
+       range, was just merging min, with specified active range.
+       (gnus-agent-expire): Save agent's active ranges after
+       expiring all groups.
+       (gnus-agent-expire-group-1): Update min of agent's active range to
+       min article currently fetched.
+       (gnus-agent-expire-unagentized-dirs): Avoid asking to delete the
+       same ancestor multiple times.
+
+       * gnus-async.el (gnus-asynchronous): Moved defcustom of
+       gnus-asynchronous away from defgroup of gnus-asynchronous.  This
+       seems to fix an intermittant error in which loading gnus-async
+       fails to define gnus-asynchronous (the variable).
+
+       * gnus-sum.el: Concur with Steve Young, 5th argument to 'load' is
+       non-essential.  Removed on all platforms.
+       (gnus-select-newsgroup): When the agent is active, expand the
+       group's active range to include fetched articles that are no
+       longer in the server's active range.
+
+       * gnus-util.el (gnus-with-output-to-file): Removed all of the
+       print-* bindings as they should be handled by the function doing
+       the printing.
+
+2003-04-09  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-uu.el (mm-uu-copy-to-buffer): buffer-file-coding-system
+       might be unbound in non-MULE XEmacsen.
+
+2003-04-08  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-uu.el (mm-uu-diff-groups-regexp, mm-uu-type-alist)
+       (mm-uu-diff-extract, mm-uu-diff-test): New functionality:
+       recognize diffs.
+
+       * mm-bodies.el (mm-decode-body): Use the supplied charset
+       unconditionally if `code-pages' hasn't been loaded.
+
+2003-04-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (article-verify-x-pgp-sig): Don't use
+       `insert-buffer', the docstring says "This function is meant for
+       the user to run interactively.  Don't call it from programs!"
+
+       * mm-extern.el (mm-extern-mail-server): do.
+
+       * mml1991.el (mml1991-mailcrypt-sign, mml1991-mailcrypt-sign)
+       (mml1991-gpg-sign, mml1991-gpg-encrypt, mml1991-pgg-sign)
+       (mml1991-pgg-encrypt): do.
+
+       * pgg.el (pgg-decrypt-region): do.
+
+       * mm-view.el (mm-view-pkcs7-decrypt): do.
+
+       * mml-smime.el (mml-smime-verify): do.
+
+       * mml.el (mml-insert-mime, mml-preview): do.
+
+       * mml2015.el (mml2015-gpg-decrypt-1, mml2015-gpg-sign)
+       (mml2015-gpg-encrypt, mml2015-pgg-clear-decrypt)
+       (mml2015-pgg-encrypt): do.
+
+2003-04-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-bodies.el (mm-decode-body): Silence XEmacs when compiling.
+
+2003-04-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-uu.el (mm-uu-copy-to-buffer): Copy
+       `buffer-file-coding-system' to the new buffer.
+       (mm-uu-pgp-signed-extract-1): Don't copy
+       `buffer-file-coding-system' here.
+
+       * mm-bodies.el (mm-decode-body): last-coding-system-used doesn't
+       exist in XEmacs.
+       (mm-decode-body): Add missing quote.
+
+       * mm-uu.el (mm-uu-pgp-signed-extract-1): Set
+       buffer-file-coding-system.
+
+       * mm-bodies.el (mm-decode-body): Set buffer-file-coding-system to
+       last-coding-system-used.
+
+       * mml2015.el (mml2015-pgg-clear-verify): Encode the text
+       according to buffer-file-coding-system.
+
+       * pgg-gpg.el (pgg-gpg-process-region): Revert previous change.
+
+       * pgg-pgp.el (pgg-pgp-process-region, pgg-pgp-verify-region)
+       (pgg-pgp-snarf-keys-region): do.
+
+       * pgg-pgp5.el (pgg-pgp5-verify-region)
+       (pgg-pgp5-snarf-keys-region, pgg-pgp5-process-region): do.
+
+       * pgg.el (pgg-make-temp-file, pgg-temporary-file-directory): do.
+
+2003-04-05  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-split): (save-excursion) around (widen)
+       (spam-ham-move-routine): Use spam-group-ham-mark-p, not
+       spam-group-spam-mark-p (from Michael Shields <shields@msrl.com>)
+
+2003-04-05  Steve Youngs  <youngs@xemacs.org>
+
+       * 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 <kgreiner@xpediantsolutions.com>
+
+       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
+       print-escape-nonascii to fix more characters in compiled format
+       specs.
+
+2003-04-05  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player):
+       Fix customization type.
+
+2003-04-04  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
+       print-quoted, print-readably, print-escape-multibyte, and
+       print-level to match original behavior of gnus-prin1.  This should
+       repair the format of .newsrc.eld when using compiled format specs.
+
+2003-04-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-group.el (tool-bar-map): defvar it.
+
+       * gnus-art.el (tool-bar-map): do.
+
+       * gnus-sum.el (tool-bar-map): do.
+
+2003-04-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * earcon.el (earcon-regexp-alist): catmeow is a wav file.
+
+2003-04-03  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-ctan-directory-regexp): Changed meaning
+       and value.
+       (gnus-button-alist): Use it.
+
+2003-04-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * pgg-gpg.el (pgg-gpg-process-region): do.
+
+       * pgg-pgp.el (pgg-pgp-process-region, pgg-pgp-verify-region)
+       (pgg-pgp-snarf-keys-region): do.
+
+       * pgg-pgp5.el (pgg-pgp5-verify-region)
+       (pgg-pgp5-snarf-keys-region, pgg-pgp5-process-region): Use it.
+
+       * pgg.el (pgg-make-temp-file): New function. `make-temp-name' is
+       unsafe.
+       (pgg-temporary-file-directory): Remove.
+
+2003-04-02  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el: Fbind Info-directory and Info-menu.
+
+2003-04-02  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-util.el (gnus-message): Added doc-string.
+
+       * gnus-score.el (gnus-score-find-trace): Changed behavior of `q'.
+       (gnus-score-edit-file-at-point): Goto first match when using `e'.
+
+2003-04-01  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-ctan-directory-regexp): New variable.
+       (gnus-button-alist): Use it.  Changed CTAN and "setq" entries.
+
+2003-04-01  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nntp.el (nntp-via-rlogin-command-switches): Doc fix.
+       (nntp-open-via-rlogin-and-telnet): Disable the telnet linemode.
+
+2003-03-31  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
+       print-escape-newlines to print escape sequences rather than
+       literal newline characters.
+
+2003-03-31  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-valid-fqdn-regexp): Use
+       `message-valid-fqdn-regexp' for initialization.
+       (gnus-button-handle-info-url): Renamed and extended version of
+       `gnus-button-handle-info'.
+       (gnus-button-message-level): Renamed from `gnus-button-mail-level'
+       (gnus-button-handle-symbol, gnus-button-handle-library)
+       (gnus-button-handle-info-keystrokes): New functions.
+       (gnus-button-browse-level): New variable.
+       (gnus-button-alist): Use them.  Added levels.
+       (gnus-header-button-alist): Added levels.
+
+2003-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+
+2003-03-31 20:08:19 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.17 is released.
+
+2003-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el (gnus-unload): Removed.
+
+       * pop3.el (pop3-read-response): Use
+       nnheader-accept-process-output.
+       (pop3-retr): Ditto.
+
+       * mm-view.el (mm-text-html-renderer-alist): Add -nolist to Lynx.
+       (mm-text-html-washer-alist): Ditto.
+
+2003-03-31  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-gssapi-program): Also try GNU SASL.
+       (imap-gssapi-open): Accept GNU SASL greeting.
+       (imap-read-timeout): New.
+       (imap-wait-for-tag): Use it.
+
+2003-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nntp.el (nntp-accept-process-output): Use new function.
+
+       * nnheader.el (nnheader-read-timeout): New variable.
+       (nnheader-accept-process-output): New function.
+
+       * nntp.el (nntp-read-timeout): Removed.
+
+       * gnus-sum.el (gnus-summary-prepare-threads): Add comment.
+
+2003-03-30  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-cache.el (gnus-cache-braid-nov): Revoke last change.
+
+2003-03-30  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-idna-inside-rhs-p): Narrow to header before
+       searching.
+
+       * gnus-art.el (article-decode-idna-rhs): More restrictive regexp.
+
+2003-03-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnmail.el (nnmail-process-mmdf-mail-format): Indent.
+
+2003-03-28  Vasily Korytov  <deskpot@myrealbox.com>
+
+       * message.el (message-make-in-reply-to): Use
+       mail-extract-address-components to determine sender's
+       name/address.
+
+2003-03-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nndoc.el (nndoc-type-alist): Move mime-parts further ahead.
+
+       * gnus-registry.el (gnus-registry-translate-to-alist): Make a
+       valid lambda.
+       (gnus-registry-translate-from-alist): Ditto.
+
+       * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bind
+       print-length to nil.
+
+       * gnus-sum.el (gnus-summary-highlight-line-0): Indent.
+
+       * gnus-fun.el (gnus-fun-ppm-change-string): New function.
+       (gnus-grab-cam-face): Use it.
+
+2003-03-28  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-request-set-mark)
+       (nnmaildir-close-group): Allow each mark directory in a group to
+       have its own inode for mark files, to accommodate AFS.
+
+2003-03-28  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-start.el (gnus-read-newsrc-el-hook): new hook called by
+       gnus-read-newsrc-el-file
+       (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-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-27  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (article-decode-group-name): Be correct instead of
+       smart.
+
+2003-03-27  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lpath.el: Bind url-current-object for Emacs; bind
+       gnus-agent-expire-current-dirs for XEmacs; fbind open-ssl-stream
+       for both Emacsen.
+
+2003-03-27  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-article-loose-mime)
+       (gnus-article-emulate-mime): Move to gnus-article-mime customize
+       group.
+
+       * gnus-msg.el (gnus-mailing-list-groups): Fix customize type and
+       doc string.
+
+2003-03-26  Kevin Ryde <user42@zip.com.au>
+
+       * gnus-sum.el (gnus-summary-find-for-reselect): Renamed from
+       gnus-summary-find-uncancelled, skip temporary articles inserted by
+       "refer" functions.
+
+2003-03-26  Vasily Korytov  <deskpot@myrealbox.com>
+
+       * smiley.el (smiley-buffer): New function.
+
+2003-03-26  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-fetch-selected-article): Replaced
+       gnus-summary-update-line (which updated the article's face) with
+       gnus-summary-update-download-mark (which updates the article's
+       face by calling gnus-summary-update-line AND updates the download
+       mark to show that the article was fetched).
+
+2003-03-23  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-expire-unagentized-dirs): Provides
+       option of deleting agent directories for groups/servers that are
+       not currently agentized.
+       (gnus-agent-expire): Use gnus-agent-expire-unagentized-dirs.
+
+       * gnus-int.el (gnus-open-server): Report backend errors in
+       condition handler.
+
+2003-03-23  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-idna-to-ascii-rhs-1): Don't continue outside
+       header.
+
+       * rfc2047.el (rfc2047-header-encoding-alist): Make Followup-To
+       same as Newsgroups.
+
+       * nntp.el (nntp-open-connection-function): Mention
+       nntp-open-tls-stream.
+       (nntp-open-tls-stream): New function.
+
+       * tls.el: New file.
+
+       * nnimap.el (nnimap-server-port, nnimap-stream): Say TLS/SSL
+       instead of SSL.
+       (nnimap-stream): Add other streams, link to imap variables.
+       (nnimap-authenticator): Add other authenticator, link to imap
+       variables.
+
+       * imap.el: Autoload open-tls-stream.
+       (imap-streams): Add tls in front of ssl.
+       (imap-stream-alist): Add tls.
+       (imap-default-tls-port): New variable.
+       (imap-tls-p, imap-tls-open): New functions.
+
+2003-03-22  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-url.el (mm-url-insert-file-contents): parse url only if
+       results is a list.
+
+2003-03-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetch-imap): Revert.
+
+2003-03-22  Svend Tollak Munkejord  <stm@bacchus.pvv.org>
+
+       * deuglify.el (gnus-outlook-repair-attribution-outlook): Use a
+       less strict regexp.
+
+2003-03-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetch-imap): Use buffer name for
+       more imap function.
+
+2003-03-21  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (article-decode-group-name): Replace Newsgroups and
+       Followup-To data inline.
+
+2003-03-21  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-treat-display-xface): Don't enable if
+       icontopbm isn't available.
+
+2003-03-21  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-int.el (gnus-open-server): Catch errors in backend's
+       open-server method.  Returns nil rather than crashing startup.
+
+       * gnus-sum.el (eval-when-compile): Modified to resolve
+       compile-time warnings.
+
+       * gnus-uu.el (gnus-uu-mark-series): Added informative msg.
+       Reports length of series so that the user can compare N with a
+       subject that should, if the entire series is present, contain
+       '(.../N)'.
+       (gnus-uu-delete-work-dir): Avoid hanging when O/S forbids deletion
+       of temp file (Win-XP may leave the temp file locked when the
+       uudecode process fails).
+
+2003-03-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-split-line): Ignore error.
+
+       * lpath.el (split-line): Avoid split-line warning message.
+
+2003-03-20  Kim F. Storm  <storm@cua.dk>
+
+       * message.el (message-split-line): New function.
+       (message-mode-map): Remap split-line to message-split-line.
+
+2003-03-20  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * message.el (message-make-overlay): Defalias it to make-overlay.
+       (message-delete-overlay): Defalias it to delete-overlay.
+       (message-overlay-put): Defalias it to overlay-put.
+       (message-idna-to-ascii-rhs-1): Use them.
+
+       * messagexmas.el (message-xmas-redefine): Defalias some overlay
+       functions to extent functions.
+
+2003-03-20  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el (message-check-news-header-syntax): Fixed regexp.
+
+2003-03-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2231.el (rfc2231-decode-encoded-string): Downcase charset.
+
+       * mm-url.el (mm-url-insert): Move url-current-object stuff into
+       mm-url-insert-file-contents.
+
+       * nnrss.el (nnrss-fetch): Fetch the local stuff.
+       (nnrss-check-group): Use it.
+
+2003-03-20 Mark A. Hershberger  <mah@everybody.org>
+
+       * nnrss.el: Primitive XML Name-space support.  This means that RSS
+       feeds like Kevin Burton's[1] can now be read in Gnus.
+
+       Implemented support for Mark Pilgrim's RSS Autodiscovery.[2] This
+       means that if you want to read the RSS feed for example.com, all
+       you have to do is hit "G R http://www.example.com/ RET" and
+       nnrss.el will find and the feed listed on the site or (if you have
+       loaded xml-rpc.el) look it up on syndic8.com.
+
+       Marked the message as HTML (by adding a Content-Type header) so
+       that Gnus will render it as html if the user wants that.
+
+       Implemented the ability to save nnrss-group-alist so that any new
+       feeds the you subscribe to will be found the next time you start
+       up.
+
+       Implemented support for RSS 2.0 elements (author, pubDate).
+
+       Prefer for <content:encoded> over <description> where both
+       elements exist.
+
+       * mm-url.el (mm-url-insert): Set url-current-object.
+
+       * gnus-group.el (gnus-group-make-rss-group): New function.
+
+2003-03-20  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * message.el (message-idna-to-ascii-rhs-1): Don't use replace-*
+       for highlight overlays.
+
+2003-03-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-cache.el (gnus-cache-braid-nov): Test if a line looks like
+       a NOV.
+
+2003-03-20  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-use-idna): Disable if UTF-8 unavailable.
+       (message-idna-to-ascii-rhs): Use it.
+
+       * gnus-art.el (gnus-use-idna): Disable if UTF-8 unavailable.
+
+2003-03-19  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-group-ham-mark-p, spam-group-spam-mark-p)
+       (spam-group-ham-marks, spam-group-spam-marks): new functions
+       (spam-spam-marks, spam-ham-marks): removed in favor of the
+       spam-marks and ham-marks parameters
+       (spam-generic-register-routine, spam-ham-move-routine): use the
+       new spam-group-{spam,ham}-mark-p functions
+
+       * gnus.el (spam-marks, ham-marks): new group parameters with
+       default values same as the old spam-spam-marks and spam-ham-marks
+
+2003-03-19  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-article-decode-hook): Add IDNA.
+       (gnus-use-idna): New variable.
+       (article-decode-idna-rhs): New function.
+
+       * message.el (message-use-idna): New variable.
+       (message-mode-field-menu): Add entry for IDNA.
+       (message-idna-inside-rhs-p, message-idna-to-ascii-rhs-1)
+       (message-idna-to-ascii-rhs): New function.
+       (message-generate-headers): Invoke IDNA code.
+
+2003-03-19  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir--system-name): New function.
+       (nnmaildir-request-accept-article): Use it.
+
+2003-03-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-util.el (gnus-byte-compile): Make it work silently as the
+       gnus-compile function does.
+
+       * gnus-sum.el (gnus-summary-highlight-line-0): Revoke the last
+       bogus change.
+
+2003-03-19  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-util.el (mm-mule-charset-to-mime-charset): Test if
+       sort-coding-systems is defined.
+
+2003-03-18  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-open-server, nnmaildir-request-scan)
+       (nnmaildir-request-create-group, nnmaildir-request-delete-group):
+       Replace create-directory with target-prefix.
+
+2003-03-18  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-bodies.el (mm-decode-coding-region-safely): Don't use
+       find-charset-string which is slooow in XEmacs.
+
+2003-03-18  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-summary-highlight-line-0): Silence the byte-
+       compiler under XEmacs.
+
+2003-03-18  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-treat-highlight-signature): Make the default
+       work for multipart/signed where the message text isn't `last'.
+
+2003-03-18  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-view.el (mm-setup-w3m): Set w3m-display-inline-images to
+       the value of mm-inline-text-html-with-images.
+       (mm-inline-text-html-render-with-w3m): Don't bind
+       w3m-display-inline-images.
+
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Don't bind
+       w3m-display-inline-images.
+
+       * lpath.el: Bind w3m-display-inline-images; bind mm-w3m-mode-map
+       regardless of an Emacs flavor.
+
+2003-03-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump.
+
+2003-03-18 00:38:22 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.16 is released.
+
+2003-03-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * lpath.el (featurep): Bind mm-w3m-mode-map.
+
+2003-03-17  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmail.el (nnmail-cache-primary-mail-backend): Not all
+       'respool-able backends define a global nnchoke-get-new-mail
+       variable.
+
+2003-03-17  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-mime-delete-part): New function.
+       (gnus-mime-action-alist, gnus-mime-button-commands): Use it.
+
+2003-03-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-check-news-header-syntax): Don't push
+       groups twice onto list of unknown groups.
+
+       * nndoc.el (nndoc-type-alist): Move exim-bounce a bit further
+       back.
+
+       * nnheader.el (nnheader-find-etc-directory): Doc fix.
+
+       * gnus-msg.el (gnus-inews-add-send-actions): Don't restore window
+       config unless the summary buffer exists.
+
+       * gnus-sum.el (gnus-summary-next-group): Semi-exit group first to
+       that target group is computed correctly when articles are marked
+       as read by Xref handling.
+
+       * mail-source.el (mail-source-fetch-imap): Pass buffer-name to
+       imap-open.
+
+       * message.el (message-send-mail): Add courtesy string to Bcc's,
+       too.
+
+       * gnus-cite.el (gnus-cited-line-p): New function.
+
+2003-03-15  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-bodies.el (mm-decode-body): Add new optional parameter,
+       force, to use the supplied charset unconditionally.
+
+       * gnus-art.el (article-decode-charset): Use it.
+
+2003-03-14  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-bodies.el (mm-decode-coding-region-safely): New function.
+       (mm-decode-body): Use it.
+
+       * rfc2047.el (rfc2047-decode-region): do.
+       (rfc2047-decode-string): Guess coding system if the default is
+       invalid.
+
+2003-03-12  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-request-update-info): Pretend missing
+       articles are marked 'read, so we get correct article counts.
+
+2003-03-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-insert-mime-button): Exclude a newline from
+       the button.
+       (gnus-insert-prev-page-button): Ditto.
+       (gnus-insert-next-page-button): Ditto.
+       (gnus-insert-mime-security-button): Ditto.
+
+       * mm-view.el (mm-inline-image-emacs): Open the bottom of an image
+       one line.  Suggested by Greg Klanderman <gak@klanderman.net>.
+       (mm-inline-image-xemacs): Ditto.
+
+2003-03-12  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir--parse-filename, nnmaildir--sort-files,
+       nnmaildir--scan, nnmaildir-request-accept-article): Changes for
+       the recent filename uniqueness discussion.
+
+2003-03-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-view.el (mm-inline-image-emacs): Make it delete an excessive
+       newline next time.
+       (mm-inline-image-xemacs): Ditto.
+
+2003-03-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-agent.el (gnus-agent-synchronize-flags-server): Don't use
+       kill-line.
+
+2003-03-09  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-inews-insert-archive-gcc): Don't use
+       kill-line.
+
+2003-03-09  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-fetched-hook): New variable.  Just
+       fixing the code to match the documentation.
+       (gnus-agent-fetch-selected-article): Replaced
+       gnus-summary-update-article-line with gnus-summary-update-line as
+       the former did not correctly recalculate the thread indentation.
+       (gnus-agent-find-parameter): The agent-predicate, if not found
+       anywhere else, defaults to the value of gnus-agent-predicate.
+       (gnus-agent-fetch-session): Fixed typo; now executes
+       gnus-agent-fetched-hook rather than the undocumented
+       gnus-agent-fetch-hook.
+       (gnus-agent-fetch-group-1): Removed part of 2003-03-06 fix.  The
+       default agent predicate is now provided by
+       gnus-agent-find-parameter.
+       (gnus-agent-message): New macro.  This macro avoids potentially
+       costly parameter evaluation when the message's level is too high
+       to display.
+       (gnus-agent-expire-group-1): Disabled undo tracking in temp
+       overview buffer. Uses new gnus-agent-message macro to reduce
+       overhead of optional messages. Reversed message levels to
+       emphasize percent completion messages.  Detailed messages of
+       little use except when debugging code.
+
+2003-03-08  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-ham-move-routine): use
+       spam-mark-ham-unread-before-move-from-spam-group
+       (spam-mark-ham-unread-before-move-from-spam-group): new variable
+
+2003-03-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el: load nnimap.el when compiling
+       (spam-setup-widening): use
+       nnimap-split-download-body-default instead of
+       nnimap-split-download-body which is a user-customizable variable
+
+2003-03-07  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-split-download-body-default): New, holds
+       default for n-s-d-b.
+       (nnimap-split-download-body): Add new setting (symbol default),
+       which uses contents of n-s-d-b-d, and made it the default.
+
+2003-03-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-use-hashcash): new variable
+       (spam-list-of-checks): added spam-use-hashcash with associated
+       spam-check-hashcash
+       (spam-check-hashcash): new function, installed iff hashcash.el is
+       loaded
+       (spam-setup-widening): don't use (return)
+
+2003-03-06  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): Added default
+       predicate of `false' to avoid an error when a group defines no
+       predicate. Fixed typo that disabled agent scoring (i.e. the
+       low/high predicates should now work).
+
+2003-03-06  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el: add spam-maybe-spam-stat-load to
+       gnus-get-top-new-news-hook, remove it from gnus-get-new-news-hook
+       (spam-bogofilter-register-with-bogofilter): use
+       spam-bogofilter-spam-switch and spam-bogofilter-ham-switch
+       (spam-bogofilter-spam-switch, spam-bogofilter-ham-switch): new
+       custom variables to replace "-s" and "-n"
+
+       * gnus-group.el (gnus-group-get-new-news): call the new
+       gnus-get-top-new-news-hook hook
+
+       * gnus-start.el (gnus-get-top-new-news-hook): new hook, run ONLY
+       by gnus-get-new-news, NOT by gnus-group-get-new-news-this-group
+
+2003-03-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-uu.el (mm-uu-pgp-encrypted-test): Fix message.
+
+2003-03-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-cus.el (gnus-group-customize): Don't use delete-if which is
+       a cl run-time function.
+
+2003-03-06  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): Added missing binding
+       on gnus-agent-short-article.
+       (gnus-category-read): Replaced CL function mapcar* with new macro:
+       gnus-mapcar.
+       * gnus-util.el (gnus-mapcar): New macro.  Generalizes mapcar to
+       support functions that accept multiple parameters.  A separate
+       sequence must be provided for each parameter in the function.
+       Iteration stops when the end of the shortest list is reached.
+
+2003-03-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * nnimap.el (nnimap-request-accept-article): Use delete-region.
+
+       * html2text.el (html2text-clean-dtdd, html2text-delete-tags)
+       (html2text-delete-single-tag, html2text-clean-anchor)
+       (html2text-remove-tags): Use delete-region.
+       (html2text-fix-paragraphs): Simplify.
+
+       * mml1991.el (mml1991-mailcrypt-sign, mml1991-mailcrypt-encrypt)
+       (mml1991-gpg-sign, mml1991-gpg-encrypt, mml1991-pgg-sign)
+       (mml1991-pgg-encrypt, mml1991-pgg-encrypt): Use delete-region, not
+       kill-region.
+
+2003-03-04  John Paul Wallington  <jpw@gnu.org>
+
+       * gnus-agent.el (gnus-agent-enable-expiration)
+       (gnus-agent-article-alist, gnus-agent-article-alist)
+       (gnus-agent-cat-defaccessor): Doc fixes.
+
+2003-03-04  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-function-implies-unread-1): Grok
+       byte-compiled functions.
+
+2003-03-04  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-sum.el (gnus-auto-goto-ignores): New variable. Provides
+       customization between new maneuvering (which permits selecting
+       undownloaded articles) and old maneuvering (which skipped over
+       undownloaded articles) behaviors.
+       (gnus-summary-find-next): Pass through the unread and subject
+       parameters when calling gnus-summary-find-prev.
+       (gnus-summary-find-next,gnus-summary-find-prev): Apply
+       gnus-auto-goto-ignores to filter out unacceptable articles.
+
+2003-03-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * mail-source.el (mail-source-read-passwd): Remove. `read-passwd'
+       exists in all supported Emacs versions, so we don't need this
+       compatibility function.
+       (mail-source-fetch-pop, mail-source-check-pop)
+       (mail-source-fetch-webmail): Use read-passwd.
+
+       * nntp.el (nntp-send-authinfo, nntp-send-nosy-authinfo)
+       (nntp-open-telnet, nntp-open-via-telnet-and-telnet): Use
+       read-passwd.
+
+       * nnwarchive.el (nnwarchive-open-server): Use read-passwd.
+
+       * imap.el (imap-read-passwd): Remove.
+       (imap-interactive-login): Use read-passwd.
+
+       * canlock.el (canlock-read-passwd): Remove.
+       (canlock-insert-header, canlock-verify): Use read-passwd.
+
+       * sieve-manage.el (sieve-manage-read-passwd): Remove.
+       (sieve-manage-interactive-login): Use read-passwd.
+
+       * pop3.el (pop3-read-passwd): Remove.
+       (pop3-movemail, pop3-get-message-count, pop3-apop): Use
+       read-passwd.
+
+       * pgg.el (pgg-read-passphrase): Simplify.
+
+2003-03-04  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-mode): Fixed the mode line reports
+       'plugged' when actually 'unplugged' bug.
+       (gnus-category-read): Ignore nil values when converting an
+       old-format category so that the new-format category will default
+       those attributes to the global variables.
+
+2003-03-03  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * mail-source.el (mail-source-delete-old-incoming-confirm): Fixed
+       doc-string.
+
+2003-03-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * nnrss.el (nnrss-decode-entities-unibyte-string): Use `buffer-string'.
+       * nndoc.el (nndoc-dissect-mime-parts-sub): do.
+       * nndb.el (nndb-request-accept-article, nndb-status-message): do.
+       * mm-url.el (mm-url-decode-entities-string): do.
+       * mml1991.el (mml1991-mailcrypt-sign, mml1991-gpg-sign): do.
+       * mm-decode.el (mm-find-raw-part-by-type): do.
+       * message.el (message-send-mail-partially)
+       (message-send-mail-with-sendmail): do.
+       * gnus-uu.el (gnus-uu-save-article, gnus-uu-reginize-string): do.
+       * gnus-kill.el (gnus-pp-gnus-kill): do.
+       * gnus-art.el (gnus-article-treat-unfold-headers)
+       (gnus-article-encrypt-body): do.
+
+2003-02-24  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * mail-source.el (mail-source-delete-incoming): Allow integer value.
+       (mail-source-delete-old-incoming-confirm): New variable.
+       (mail-source-delete-old-incoming): Use it.  New function.
+       (mail-source-callback): Call `mail-source-delete-old-incoming' if
+       `mail-source-delete-incoming' is a nonnegative integer.
+
+2003-03-03  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-msg.el (gnus-extended-version): Fix for 'emacs-gnus-config.
+       (gnus-user-agent): Fixed typo.
+
+2003-03-03  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-enable-expiration): Fixed documentation.
+       (gnus-agent-expire-group-1): Removed invalid (interactive) specifier.
+
+2003-03-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-fetch-articles): Fix nil message.
+       (gnus-agent-fetch-session): Allow debugging to take place.
+
+2003-03-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-highlight-selected-summary)
+       (gnus-article-get-xrefs, gnus-summary-show-thread): Use
+       `gnus-point-at-bol' and `gnus-point-at-eol' instead of
+       `(progn (beginning-of-line) (point))'.  It's shorter, faster,
+       and makes it clear that we don't need the side effect.
+       * gnus-util.el (gnus-delete-line): do.
+       * gnus-xmas.el (gnus-group-add-icon): do.
+       * nnmail.el (nnmail-article-group, nnmail-cache-fetch-group): do.
+       * nntp.el (nntp-send-authinfo-from-file): do.
+       * nnml.el (nnml-header-value): do.
+       * nnheader.el (nnheader-insert-references): do.
+       * gnus-cite.el (gnus-article-highlight-citation)
+       (gnus-cite-parse): do.
+       * gnus-score.el (gnus-score-followup): do.
+       * gnus-draft.el (gnus-draft-send): do.
+       * gnus-group.el (gnus-group-highlight-line): do.
+       * gnus-cache.el (gnus-cache-braid-nov): do.
+       * nnfolder.el (nnfolder-retrieve-headers)
+       (nnfolder-request-article): do.
+       * gnus-art.el (article-hide-boring-headers)
+       (gnus-article-hide-header): do.
+
+       * nnheader.el (nnheader-find-nov-line): Use gnus-delete-line.
+       * nnml.el (nnml-request-replace-article): do.
+       * nnmbox.el (nnmbox-request-move-article, nnmbox-delete-mail): do.
+       * nnfolder.el (nnfolder-request-move-article): do.
+       * gnus-cache.el (gnus-cache-possibly-remove-article): do.
+       * gnus-art.el (gnus-mm-display-part): do.
+
+       * gnus-art.el (gnus-article-goto-part): Use gnus-goto-char.
+
+2003-03-02  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * nntp.el (nntp-possibly-change-group): Avoid calling
+       process-buffer on nil (Which happened when you lost your
+       connection while fetching); instead signal a "Server Closed
+       Connection" error.
+
+2003-03-02  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-enable-expiration): New
+       variable. Either ENABLE or DISABLE.  Sets default behavior for
+       selecting which groups are expired.
+       (gnus-agent-cat-set-property, gnus-agent-cat-defaccessor,
+       gnus-agent-set-cat-groups): Provides abstract interface for
+       accessing agent category.  Category now implemented by an alist.
+       (gnus-agent-add-group, gnus-agent-remove-group,
+       gnus-category-insert-line, gnus-category-edit-predicate,
+       gnus-category-edit-score, gnus-category-edit-groups,
+       gnus-category-copy, gnus-category-add, gnus-group-category): Use
+       new agent category abstraction.
+       (gnus-agent-find-parameter): New function. Search for agent
+       configuration parameter first in the group's parameters, then its
+       topics (if any), and then the group's category.  If not found
+       anywhere, use the original defined constants.
+       (gnus-agent-fetch-headers, gnus-agent-fetch-group-1): Use new
+       gnus-agent-find-parameter.
+       (gnus-agent-fetch-headers, gnus-agent-uncached-articles): Clearing
+       gnus-agent-cache now blocks retrieving headers and articles from
+       the local cache.  Fetched content is still added to the cache
+       before being returned.
+       (gnus-agent-fetch-session): Use error-message-string to generate
+       displayed error message.
+       (gnus-agent-customize-category): New Command. 'e' in category
+       buffer opens category customization buffer.
+       (gnus-category-read): Reads either positional or alist format;
+       returns alist format.
+       (gnus-category-write): Writes category file compatible with
+       current, and previous, versions of gnus-agent.
+       (gnus-category-make-function, gnus-category-make-function-1):
+       Corrected documentation; parameter is predicate NOT category.
+       (gnus-predicate-implies-unread): Now works in more cases per the
+       todo comment.
+       (gnus-function-implies-unread-1): New function. Supports
+       gnus-predicate-implies-unread.
+       (gnus-agent-expire-group): Command now provides default of group
+       under point.
+       (gnus-agent-expire-group-1): Obeys new agent-enable-expiration and
+       agent-days-until-old parameters. No longer supports
+       gnus-agent-expire-days being set to an alist.
+       (gnus-agent-request-article): Now performs its own checks of
+       gnus-agent, gnus-agent-cache, and gnus-plugged rather than
+       assuming that the caller will do them correctly.
+       (): Added one-time hook to gnus-group-prepare-hook.  Detects when
+       gnus-agent-expire-days is set to an alist.  Converts said alist
+       into group parameter so that gnus-agent-expire-days will not be
+       needed.
+       * gnus-art.el (gnus-request-article-this-buffer): Conditional
+       checks surrounding gnus-agent-request-article removed; now
+       performed by gnus-agent-request-article.
+       * gnus-cus.el (gnus-agent-parameters): New variable. List of
+       customizable group/topic parameters that regulate the agent.
+       (gnus-group-customize): Uses gnus-agent-parameters.  Replaced
+       kill-buffer with gnus-kill-buffer to remove the killed buffer from
+       the list of gnus buffers.
+       (gnus-trim-whitespace): Removes leading and trailing whitespace
+       from multiline strings.
+       (gnus-agent-cat-prepare-category-field,
+       gnus-agent-customize-category): Constructs a category
+       customization buffer.
+       * gnus-int.el (gnus-retrieve-headers,
+       gnus-request-expire-articles): No longer checks gnus-agent-cache
+       as it is handled internally by the agent.
+       (gnus-request-head, gnus-request-body): Conditional checks
+       surrounding gnus-agent-request-article removed; now performed by
+       gnus-agent-request-article.
+
+       * gnus-start.el (): Added defvar statements to resolve compilation
+       warnings.
+       (gnus-long-file-names): New function. Isolates platform dependent
+       msdos-long-file-names.
+       (gnus-save-startup-file-via-temp-buffer): New variable. Provides
+       option of writing directly to file.  Avoids memory exhausted
+       errors when .newsrc.eld is huge.
+       (gnus-save-newsrc-file): Uses new
+       gnus-save-startup-file-via-temp-buffer.
+       (gnus-gnus-to-quick-newsrc-format): Rewritten to write to
+       standard-output.
+       (gnus-display-time-event-handler): Changed to alias from a defun
+       to avoid a compile-time warning when display-time-event-handler is
+       not defined.
+       * gnus-util.el (gnus-with-output-to-file): New macro. Binds
+       standard-output such that prin1 and princ will write directly to a
+       file.
+
+       * gnus.el (gnus-agent-cache): Expanded documentation.
+       (gnus-summary-high-undownloaded-face): Removed second bold keyword
+       so that this face is actually bold.
+
+       * nnkiboze.el (nnkiboze-request-article): Only use the cache when
+       gnus-use-cache has been set.
+
+2003-03-02  Jesper Harder  <harder@ifa.au.dk>
+
+       * nnvirtual.el (nnvirtual-update-xref-header): Simplify.
+
+2003-03-01  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-article-refer-article): Be more permissive.
+
+2003-03-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * spam.el: Fix typo.
+
+2003-03-01  Satyaki Das  <satyaki@theforce.stanford.edu>
+       (Trivial patch.)
+
+       * pgg-gpg.el (pgg-gpg-process-region): Insert process status into
+       errors-buffer. This produces a nicer error message in case of
+       problems.
+
+2003-03-01  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-maybe-spam-stat-load, spam-maybe-spam-stat-load):
+       load stats iff spam-use-stat is on
+
+       * spam.el: add spam-maybe-spam-stat-load to gnus-startup hook,
+       also use spam-maybe-spam-stat-load and spam-maybe-spam-stat-save
+       instead of spam-stat-load and spam-stat-save in the
+       gnus-get-new-news-hook and gnus-save-newsrc-hook, respectively
+
+2003-03-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-inline-text): Ignore errors from enriched-decode.
+
+2003-03-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-make-fqdn): Protect against nil user-mail.
+
+2003-02-28  Vasily Korytov <deskpot@myrealbox.com>
+
+       * gnus-art.el (gnus-boring-article-headers): New values:
+       'to-list and 'cc-list.
+
+2003-02-28  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-setup-widening): new function to set
+       nnimap-split-download-body, we add it to gnus-get-new-news-hook
+       (spam-list-of-statistical-checks): list of statistical splitter
+       checks
+       (spam-split): added a widen call when a statistical check is
+       enabled
+
+2003-02-28  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-msg.el (gnus-user-agent): Changed default to
+       'emacs-gnus-type, renamed 'full.
+
+2003-02-28  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-request-accept-article): Don't use
+       mail-header-unfold-field.
+
+2003-02-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * imap.el (imap-ssl-open): Don't depend on ssl.el.
+       * nntp.el (nntp-open-ssl-stream): Don't depend on ssl.el.
+
+2003-02-26  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el: add spam-stat-load to gnus-get-new-news-hook
+       (spam-split): remove spam-stat-load call
+
+2003-02-26  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-toggle-header): Run
+       gnus-article-decode-hook instead of calling a-decode-encoded-words
+       directly (the latter is run as part of the former).
+
+2003-02-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-expire-group): Remove debug.
+
+2003-02-25  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-sendmail-envelope-from): New option.
+       (message-sendmail-envelope-from): New function.
+       (message-send-mail-with-sendmail): Use it.
+
+2003-02-25  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): Added
+       compensation for TDMA addresses.
+
+2003-02-24  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-msg.el (gnus-user-agent): New variable.
+       (gnus-version-expose-system): Removed.  Obsoleted by
+       `gnus-user-agent'.
+       (gnus-extended-version): Use `gnus-user-agent'.
+
+2003-02-24  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-stat-register-spam-routine,
+       spam-stat-register-ham-routine): remove spam-stat-save
+       (spam-stat hook): add spam-stat-save to the gnus-save-newsrc-hook
+
+2003-02-24  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-group.el (gnus-topic-mode-p): Fixed free variable
+       reference.
+
+2003-02-24  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * nnheader.el (nnheader-find-nov-line): Changed midpoint
+       calculation to avoid integer overflow.
+
+2003-02-24  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-start.el (gnus-backup-startup-file): Fixed custom type.
+
+2003-02-24  Ted Zlatanov <tzz@lifelogs.com>
+       * spam.el: disabled spam-get-article-as-filename
+
+       From Michael Shields  <shields@msrl.com>
+
+       * gnus-group.el (gnus-group-is-exiting-without-update-p): New.
+       * gnus-sum.el (gnus-summary-exit-no-update): Use it.
+       * gnus-sum.el (gnus-summary-expire-articles): Use it.
+       * spam.el (spam-summary-prepare-exit): Use it.
+       * gnus.el (gnus-install-group-spam-parameters): New.
+       * spam.el (spam-group-ham-processor-copy-p): New.
+       * spam.el (spam-summary-prepare-exit): Support for ham copying.
+       * spam.el (spam-mark-spam-as-expired-and-move-routine): Fix bug
+       that would cause the current message to be moved if the group had
+       no spam.
+       * spam.el (spam-ham-move-routine): New `copy' argument.
+
+2003-02-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+       From Martin Thornquist <martint@ifi.uio.no>
+
+       * gnus-topic.el (gnus-topic-select-group): Select last group if
+       after last group.
+       * gnus-group.el (gnus-group-select-group): Ditto.
+
+2003-02-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (popup-menu): Compiler macro for Emacs 20.
+       (gnus-article-refer-article): Use gnus-point-at-(b|e)ol instead of
+       point-at-(b|e)ol which aren't available in Emacs 20.
+
+       * gnus-registry.el (puthash): Alias to cl-puthash for Emacs 20.
+
+2003-02-23  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-start.el (gnus-activate-group): Re-enabled the catch error
+       clause of the condition-case statement.  Errors connecting to a
+       server no longer terminate gnus.
+
+       * gnus-agent.el (gnus-agent-toggle-plugged): Renamed parameter to
+       make its use obvious.  Added no-nothing case to avoid
+       opening(closing) servers when already open(closed).
+       (gnus-agent-while-plugged): Added macro to facilitate internal use
+       of gnus-agent-toggle-plugged.
+       (gnus-agent-fetch-group): Use new gnus-agent-while-plugged to
+       temporarily open servers.
+       (gnus-agent-get-undownloaded-list): Sort list of article numbers
+       as sorting gnus-newsgroup-headers is wrong.
+       (gnus-agent-summary-fetch-group): Use new gnus-agent-while-plugged
+       to temporarily open servers. Corrected logic to handle setting
+       gnus-agent-mark-unread-after-downloaded.
+       (gnus-agent-fetch-articles): Now handles headers with missing
+       article sizes and/or missing article lengths.  Now clears the
+       message buffer when finished.
+       (gnus-agent-fetch-group-1): Position point before calling
+       gnus-summary-set-agent-mark.
+       (gnus-get-predicate): Corrected description, parameter is
+       predicate not category.
+       (gnus-agent-expire-group): Adapted the gnus-agent-expire-* code to
+       provide a separate single group expiration function.
+       (gnus-agent-regenerate-group): Now clears the message buffer when
+       finished.
+
+2003-02-23  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus.el (gnus-agent-target-move-group-header): New variable.
+       * gnus-draft.el (gnus-draft-send): If special header
+       "X-Gnus-Agent-Target-Move-Group" is present, do like Gcc into
+       that group, instead of performing the regular sending functions.
+
+2003-02-23  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-xmas.el (gnus-xmas-mime-button-menu): Accept a prefix arg.
+
+2003-02-20  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el (message-user-fqdn, message-valid-fqdn-regexp): New
+       variables.
+       (message-make-fqdn): Use it.  Improved validity check.
+
+2003-02-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-user-mail-address): Check whether
+       user-mail-address looks valid.
+
+       * gnus-msg.el (gnus-mailing-list-followup-to): New function.
+
+       * gnus-util.el (gnus-fetch-original-field): New function.
+
+2003-02-23  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * message.el (message-mode): \\(...\\) around additional
+       paragraph-separate alternative.
+
+2003-02-23  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-mime-button-commands): Add ellipsis.
+       (gnus-mime-button-menu): Define MIME popup menu with easy-menu to
+       display key bindings.
+       (gnus-mime-button-menu): Rewrite.
+
+2003-02-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-button-url-regexp): Removed `.
+
+2003-02-23  Max Froumentin  <mf@w3.org>
+
+       * gnus-art.el (gnus-button-url-regexp): Remove `, enter '.
+
+2003-02-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-mime-action-on-part): Require a match
+       interactively.
+
+       * gnus-start.el (gnus-save-newsrc-file): Use
+       gnus-backup-startup-file.
+       (gnus-backup-startup-file): New variable.
+
+2003-02-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-summary-buffer-name): Moved function here.
+
+       * gnus-draft.el (defun): Remove debug.
+
+2003-02-22  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-refer-article): Skip method if we
+       can't open server.
+
+2003-02-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-draft.el (defun): Configure posting styles.
+
+       * 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\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * message.el (message-mode): MML tags separate paragraphs.  Small
+       change from David S Goldberg <david.goldberg6@verizon.net>.
+
+       * gnus-agent.el (gnus-agent-get-undownloaded-list): Sort
+       `gnus-newsgroup-headers'.
+
+       * gnus-art.el (gnus-article-refer-article): Grok more message id
+       formats.  From Karl Pfl\e,Ad\e(Bsterer <sigurd@12move.de>.
+
+2003-02-22  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-decode.el (mm-path-name-rewrite-functions): Doc fix: don't
+       use "path name".
+
+2003-02-21  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-sum.el (gnus-summary-move-article)
+       (gnus-summary-expire-articles): send data header for article, not
+       just article ID
+
+       * gnus-registry.el (gnus-registry-hashtb, gnus-register-action)
+       (gnus-register-spool-action): added hashtable of message ID keys
+       with message motion data
+
+2003-02-21  Florian Weimer  <fw@deneb.enyo.de>
+       From Reiner Steib  <Reiner.Steib@gmx.de>.
+
+       * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): New
+       variable, used in `gnus-button-mid-or-mail-heuristic'.
+       (gnus-button-mid-or-mail-heuristic): New function derived from
+       Florian Weimer's Perl script.
+       (gnus-button-handle-mid-or-mail): Allow a function instead of
+       'guess.
+       (gnus-button-guessed-mid-regexp): Removed.
+
+2003-02-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-resend): Bind message-setup-hook to nil;
+       remove X-Draft-From header.
+
+2003-02-20  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-simplify-subject-fully, gnus-subject-equal)
+       (gnus-newsgroup-undownloaded)
+       (gnus-summary-save-parts-default-mime, gnus-auto-select-next):
+       Doc fixes.
+
+2003-02-17  John Paul Wallington  <jpw@gnu.org>
+
+       * gnus.el (gnus-shell-command-separator, gnus-email-address)
+       (gnus-default-charset, gnus-other-frame-parameters): Doc fixes.
+
+2003-02-20  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-spec.el (gnus-xmas-format): Use insert instead of
+       insert-string which is obsolete in Emacs 21.4.
+
+       * message.el (message-cross-post-followup-to-header): do.
+
+       * spam.el (spam-ifile-register-with-ifile)
+       (spam-stat-register-spam-routine)
+       (spam-stat-register-ham-routine)
+       (spam-bogofilter-register-with-bogofilter): do.
+
+       * mailcap.el (mailcap-mime-data): Fix typo.
+
+       * gnus-topic.el (gnus-topic-make-menu-bar): Add ellipsis.
+
+2003-02-19  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-cite.el (gnus-cite-unsightly-citation-regexp)
+       (gnus-cite-parse): Renamed `gnus-unsightly-citation-regexp' to
+       `gnus-cite-unsightly-citation-regexp'.
+
+2003-02-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-msg.el (gnus-copy-article-buffer): Copy an article header
+       even if there's just a header.
+
+2003-02-19  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-fix-before-sending): Fix highlighting of
+       illegible and invisible text.
+
+       * gnus-util.el (gnus-multiple-choice): Separate choices with
+       ",\e,A \e(B".  Suggested by Dan Jacobson <jidanni@dman.ddts.net>.
+
+2003-02-18  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-exit-no-update): Use gnus-kill-buffer.
+
+2003-02-18  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-ham-move-routine)
+       (spam-mark-spam-as-expired-and-move-routine): use
+       gnus-summary-kill-process-mark and gnus-summary-yank-process-mark
+       around process-mark manipulation on the group
+
+2003-02-17  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Add MIME/Multipart
+       submenu.
+
+2003-02-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetch): Reverse the return value of
+       the continuation question.
+
+2003-02-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nndraft.el (nndraft-request-move-article): Bind
+       nnmh-allow-delete-final to t.
+
+2003-02-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-uu.el (mm-uu-uu-filename): Fix use of character constant.
+
+2003-02-11  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * nntp.el (nntp-accept-process-output): Don't use point-max to get
+       the buffer's size.
+
+2003-01-31  Joe Buehler  <jhpb@draco.hekimian.com>
+
+       * nnheader.el: Added cygwin to system-type comparisons.
+
+2003-01-27  Juanma Barranquero  <lektu@terra.es>
+
+       * imap.el (imap-mailbox-status): Fix typo.
+
+2003-02-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-prepare): Don't set agent mark if
+       online.
+
+2003-02-14  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-agent-group-make-menu-bar): Include all
+       commands.
+       * gnus-sum.el: Small change from Frank Weinberg
+       <frank@usenet-rundfahrt.de>:
+       (gnus-auto-center-group): New variable.
+       (gnus-summary-read-group-1): Use it.
+       (gnus-summary-next-group): Fix docstring.
+
+2003-02-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-util.el (gnus-faces-at): Simplify.
+
+2003-02-13  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-ham-move-routine)
+       (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\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * 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 <kbk@shore.net>.
+
+2003-02-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-article-only-boring-p): Make sure that the
+       gnus-article-boring-faces variable is bound; use gnus-faces-at.
+
+       * gnus-util.el (gnus-faces-at): New macro.
+
+2003-02-13  Michael Shields  <shields@msrl.com>
+
+       * gnus-cite.el
+       (gnus-cite-attribution-suffix, gnus-cite-parse):
+       Better handling for Microsoft citation styles.
+       (gnus-unsightly-citation-regexp): New.
+
+2003-02-12  Michael Shields  <shields@msrl.com>
+
+       * gnus-art.el (article-strip-banner): Strip both per-group and
+       per-user-address banners.
+       (article-really-strip-banner): New.
+
+2003-02-12  Michael Shields  <shields@msrl.com>
+
+       * gnus-sum.el (gnus-article-goto-next-page,
+       gnus-article-goto-prev-page): Call gnus-summary-*-page, instead of
+       relying on the summary bindings of `n' and `p'.
+
+2003-02-12  Michael Shields  <shields@msrl.com>
+
+       * gnus-art.el (gnus-article-only-boring-p): New.
+       (gnus-article-skip-boring): New.
+       * gnus-cite.el (gnus-article-boring-faces): New.
+       * gnus-sum.el (gnus-summary-next-page): Use
+       gnus-article-only-boring-p.
+
+2003-02-12  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-mark-spam-as-expired-and-move-routine)
+       (spam-ham-move-routine): unmark all articles before marking those
+       of interest and calling gnus-summary-move-article
+
+2003-02-12  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.el (gnus-kill-buffer): Move to gnus.el because it's
+       logically the complement of gnus-get-buffer-create and
+       gnus-add-buffer.
+
+       * gnus-util.el (gnus-kill-buffer): do.
+
+       * nnmail.el: Autoload gnus-kill-buffer.
+
+2003-02-11  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-summary-set-agent-mark): Added call to
+       gnus-summary-goto-subject as gnus-summary-update-mark operates on
+       the current LINE.
+       (gnus-agent-summary-fetch-group): Minimized the number of times
+       that the article is updated in the buffer.
+
+2003-02-11  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-ham-move-routine): use the process-mark instead of
+       gnus-current-article when moving articles
+       (spam-mark-spam-as-expired-and-move-routine): ditto, use the process-mark
+
+2003-02-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-topic.el (gnus-topic-expire-articles): Recursive.
+       (gnus-topic-catchup-articles): Ditto.
+       (gnus-topic-mark-topic): Reverse recursive logic.
+
+2003-02-11  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-refer-thread): Handle case where
+       gnus-refer-thread-limit is t.
+
+2003-02-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-util.el (mm-mule-charset-to-mime-charset): Use
+       sort-coding-systems to prefer utf-8 over utf-16.
+
+2003-02-09  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-expire-days):
+       gnus-request-move-article depends on gnus-agent-expire to clean up
+       the cache after moving the article.  Therefore, g-a-e-d can NOT
+       default to nil or can gnus-agent-expire be disabled by doing so.
+       If you don't want to run gnus-agent-expire, don't call it.
+       (gnus-agent-expire): The broken test to disable gnus-agent-expire
+       when g-a-e-d was NOT nil was removed.
+       (gnus-agent-article-name): Removed unnecessary input test as
+       article IDs are always strings.
+       (gnus-agent-regenerate-group): Added check to protect against
+       servers that generate absurdly long article IDs.  Valid IDs are
+       less than 10 digits to avoid overflow errors.  Fixed logic error
+       when ensuring that the final article ID is present in the new
+       alist.
+
+2003-02-09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-topic.el (gnus-topic-goto-missing-topic): Just move to the
+       next line after finding the parent.
+
+2003-02-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bumped.
+
+2003-02-08 23:23:27 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.15 is released.
+
+2003-02-08  Michael Welsh Duggan  <md5i@cs.cmu.edu>
+
+       * nnmail.el (nnmail-split-it): If a message ends up matching the
+         same mailbox more than once, it will cause duplicates to appear
+         in the mailbox.
+
+2003-02-08  Simon Josefsson  <jas@extundo.com>
+
+       * 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 <satyaki@chicory.stanford.edu>.
+
+2003-02-08  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-article-refer-article): Use
+       gnus-replace-in-string.
+
+       * gnus-util.el (gnus-map-function): Remove unneeded let-binding.
+       (gnus-remove-duplicates): do.
+
+2003-02-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-int.el (gnus-internal-registry-spool-current-method): new variable
+       (gnus-request-scan): set
+       gnus-internal-registry-spool-current-method to gnus-command-method
+       before a request-scan operation
+
+       * gnus-registry.el (regtest-nnmail): use
+       gnus-internal-registry-spool-current-method
+
+2003-02-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetch): Typo fix.
+
+2003-02-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * nnmail.el (nnmail-spool-hook): new hook
+       (nnmail-cache-insert): call nnmail-spool-hook
+
+       * gnus-registry.el: new file with examples of using the hooks
+
+       * gnus.el (gnus-registry): added registry customization group
+       (gnus-group-prefixed-name): improve function to return full group
+       name optionally
+       (gnus-group-guess-prefixed-name): shortcut to
+       gnus-group-prefixed-name, using just the group name
+       (gnus-group-full-name): always get a group's full name
+       (gnus-group-guess-full-name): shortcut, using just the group name
+
+       * gnus-sum.el (gnus-summary-article-move-hook)
+       (gnus-summary-article-delete-hook)
+       (gnus-summary-article-expire-hook): new hooks
+       (gnus-summary-move-article, gnus-summary-expire-articles)
+       (gnus-summary-delete-article): invoke the new hooks
+
+2003-02-07  Frank Weinberg  <frank@usenet-rundfahrt.de>
+
+       * gnus-art.el (gnus-article-refer-article): Strip leading "news:"
+       from message-ID
+
+2003-02-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-util.el (gnus-run-hooks): Use save-current-buffer.
+
+2003-02-07  John Paul Wallington  <jpw@gnu.org>
+
+       * mm-util.el (mm-delete-duplicates, mm-append-to-file)
+       (mm-write-region, mm-detect-coding-region): Doc fixes.
+
+2003-02-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-source-fetch): Ignore errors.
+       (mail-source-ignore-errors): New variable.
+
+       * gnus-sum.el (gnus-summary-refer-thread): Don't re-fetch current
+       articles.
+
+       * gnus-msg.el (gnus-version-expose-system): Change default.
+
+2003-02-07  Vasily Korytov  <deskpot@myrealbox.com>
+
+       * gnus-msg.el (gnus-version-expose-system): New variable.
+
+2003-02-07  Simon Josefsson  <jas@extundo.com>
+
+       * mml-sec.el (mml-unsecure-message): Don't use kill-region.  Tiny
+       patch from deskpot@myrealbox.com (Vasily Korytov).
+
+2003-02-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (article-display-face): Get the Face header from
+       the current buffer.
+
+2003-02-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-mime-view-part-internally): Bind
+       buffer-read-only to nil.
+
+2003-02-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-agent.el (gnus-agent-expire-1,2): Pass the dir argument
+       from g-a-e-1 to g-a-e-2.
+
+2003-02-05  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-BBDB): no need to regexp-quote the argument
+       of bbdb-search-simple, use spam-use-BBDB-exclusive
+       (spam-check-whitelist): use spam-use-whitelist-exclusive
+       (spam-use-whitelist-exclusive): new variable affecting
+       spam-use-whitelist
+       (spam-use-BBDB-exclusive): new variable affecting spam-use-BBDB
+
+2003-02-05  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-agent.el (gnus-agent-expire-days): Change default to nil.
+       (gnus-agent-expire): Don't expire if g-a-e-d is nil.
+       (gnus-agent-expire): Move most code into gnus-agent-expire-1.
+       (gnus-agent-expire-1): New.
+       (gnus-agent-expire-1): Move code into gnus-agent-expire-2.
+       (gnus-agent-expire-2): New.
+
+2003-02-05  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-util.el (gnus-delete-if): Rename to gnus-remove-if.
+       "delete-if" is misleading because it isn't actually destructive.
+
+       * gnus-topic.el (gnus-group-prepare-topics): Use new name.
+
+       * nnmail.el (nnmail-purge-split-history): do.
+
+       * gnus-win.el (gnus-get-buffer-window): do.
+
+       * gnus-sum.el (gnus-simplify-whitespace): Remove unnecessary
+       let-binding.
+       (gnus-simplify-all-whitespace): do.
+
+2003-02-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-delay.el (gnus-delay-article): Fix binding of the
+       nndraft:delayed group.
+
+2003-02-04  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.el (spam group parameters): change 'other to 'const in
+       the group parameter definitions to soothe XEmacs
+
+2003-02-04  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-delay.el (gnus-delay-article): Really create
+       nndraft:delayed group if it doesn't exist.
+
+2003-02-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-search-article): Speed up by
+       disabling various visual features while searching.
+       (gnus-summary-recenter): Test gnus-auto-center-summary first.
+
+2003-02-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * spam.el (spam-list-of-checks): Don't quote nil and t in
+       docstrings.  From the elisp manual:
+
+          When a documentation string refers to a Lisp symbol, write
+          it [..] with single-quotes around it.  [..] There are two
+          exceptions: write t and nil without single-quotes.
+
+       * messcompat.el (message-from-style): do.
+
+       * message.el (message-send-mail): do.
+
+       * gnus-util.el (gnus-use-byte-compile): do.
+
+       * gnus-score.el (gnus-score-lower-thread): do.
+
+       * gnus-int.el (gnus-server-unopen-status): do.
+
+       * gnus.el (gnus-define-group-parameter, gnus-large-newsgroup)
+       (large-newsgroup-initial, gnus-install-group-spam-parameters): do.
+
+       * gnus-cus.el (gnus-group-customize, gnus-score-parameters)
+       (gnus-group-parameters): do.
+
+       * gnus-art.el (gnus-article-mime-match-handle-function): do.
+
+       * mm-decode.el (mm-text-html-renderer): do.
+
+2003-02-02  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nnheader.el (nnheader-directory-separator-character): Change the
+       way to compute the dafault value.
+
+2003-02-02  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-button-handle-describe-key): Implement it.
+       (gnus-button-alist): Fix regexp for describe-key.
+       (gnus-button-handle-describe-function)
+       (gnus-button-handle-describe-variable)
+       (gnus-button-handle-apropos, gnus-button-handle-apropos-command)
+       (gnus-button-handle-apropos-variable)
+       (gnus-button-handle-apropos-documentation): Docstring fix.
+
+       * gnus-util.el (gnus-kill-buffer): Use get-buffer.
+
+2003-02-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-draft.el (gnus-group-send-queue): Bind gnus-posting-styles
+       to nil.
+
+       * nnmail.el: Removed gnus-util autoload.
+
+       * gnus.el: Use gnus-prin1-to-string throughout.
+
+       * gnus-util.el (gnus-prin1-to-string): Bind print-length and
+       print-level.
+
+       * gnus-art.el (article-display-x-face): Removed grey x-face stuff.
+       (gnus-treat-display-grey-xface): Removed.
+
+       * gnus-fun.el (gnus-grab-cam-face): New.
+       (gnus-convert-image-to-gray-x-face): Removed.
+       (gnus-convert-gray-x-face-to-xpm): removed.
+       (gnus-convert-gray-x-face-region): Removed.
+       (gnus-grab-gray-x-face): Removed.
+
+       * nnmail.el (nnmail-expiry-wait-function): Doc indent.
+
+2003-01-31  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-util.el (gnus-kill-buffer): Functions in gnus-util
+       shouldn't depend on the rest of Gnus, so test if gnus-buffers is
+       bound.
+
+       * nnmail.el (nnmail-cache-close): Use gnus-kill-buffer.
+
+2003-01-30  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-cite.el (gnus-cite-reply-regexp, gnus-cite-always-check):
+       Remove -- these are bogus options which are never used.
+
+2003-01-29  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-article-mode): Use summary tool bar.
+
+2003-01-27  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-blackholes)
+       (spam-blackhole-good-server-regex): new variable to skip some IPs
+       when checking blackholes; use it
+       (spam-check-bogofilter-headers)
+       (spam-bogofilter-bogosity-positive-spam-header): new variable, in
+       case more X-Bogosity is used than just "Yes/No"
+       (spam-ham-move-routine): semi-fixed, only first article is
+       properly moved now
+
+2003-01-27  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-util.el (gnus-kill-buffer): Remove buffer from gnus-buffers
+       as well.
+
+       * gnus-sum.el (gnus-select-newsgroup): Use gnus-kill-buffer.
+
+       * gnus-score.el (gnus-score-headers, gnus-score-find-bnews): do.
+
+       * gnus-start.el (gnus-save-newsrc-file, gnus-clear-system): do.
+
+       * gnus-bcklg.el (gnus-backlog-shutdown): do.
+
+       * gnus-srvr.el (gnus-server-exit, gnus-browse-exit): do.
+
+2003-01-26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-face-encode): New function.
+       (gnus-convert-png-to-face): Use it.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Added M-& to marks.
+
+2003-01-26  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-decode.el (mm-dissection-list): Remove.
+       (mm-dissect-singlepart): Don't push to mm-dissection-list, it's
+       only used in mm-remove-all-parts.
+       (mm-remove-all-parts): Remove it, it's never called.
+
+2003-01-25  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-make-group): Report errors.
+
+       * nnimap.el (nnimap-request-create-group): Ditto.
+
+       * sieve-manage.el (sieve-manage-is-okno): Parse literal strings.
+
+       * sieve.el (sieve-upload): Fix error printing.
+
+       * mm-encode.el (mm-qp-or-base64): Always QP iff
+       mm-use-ultra-safe-encoding and cleartext PGP.
+
+       * gnus-sum.el (gnus-summary-select-article): Inhibit
+       redisplay (mainly for secured messages).
+
+       * nnmail.el (nnmail-article-group): Copy body too (but don't
+       process it).
+
+2003-01-25  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-article-setup-buffer): Reset
+       gnus-button-marker-list.
+
+2003-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nntp.el (nntp-read-timeout): Default to using a second delay
+       under Microsoft Windows.
+
+2003-01-24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnheader.el (nnheader-directory-separator-character): New
+       variable.
+
+2003-01-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-agent-max-fetch-size)
+       (gnus-agent-article-alist, gnus-agent-get-undownloaded-list)
+       (gnus-agent-catchup, gnus-agent-summary-fetch-group)
+       (gnus-agent-fetch-articles, gnus-agent-backup-overview-buffer)
+       (gnus-agent-flush-cache, gnus-agent-fetch-headers)
+       (gnus-agent-braid-nov, gnus-agent-load-alist)
+       (gnus-agent-article-alist-save-format)
+       (gnus-agent-read-agentview, gnus-agent-save-alist)
+       (gnus-agent-fetch-group-1, gnus-agent-expire)
+       (gnus-agent-uncached-articles, gnus-agent-retrieve-headers)
+       (gnus-agent-regenerate-group): Reformat to keep under eighty
+       columns.  Reword docstrings so that first line is under eighty
+       chars and a complete sentence.  Still need to work on the rear
+       end of the file, in particular gnus-agent-expire.
+
+2003-01-24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agentize): Indent.
+
+       * gnus.el (gnus-version-number): Bumped.
+
+2003-01-24 20:32:44 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.14 is released.
+
+2003-01-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-sum.el (gnus-summary-prepare-threads): Reset state for %B
+       before beginning.  Tiny patch from Mark Thomas
+       <swoon@bellatlantic.net>.
+
+2003-01-24  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-blackholes, spam-split)
+       (spam-mark-junk-as-spam-routine, spam-summary-prepare-exit): added
+       gnus-message calls to show to users what spam.el is doing
+
+2003-01-24  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-message-replysign)
+       (gnus-message-replyencrypt): Fix typo.
+
+2003-01-24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-mime-security-show-details): Toggle showing
+       details.
+
+2003-01-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-press-button): let* -> let.
+       (gnus-mime-security-show-details): Cleaned up.
+       (gnus-mime-security-press-button): Save excursion.
+       (gnus-insert-mime-security-button): Clean up.
+
+       * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Doc fix.
+
+       * gnus-async.el (gnus-async-wait-for-article): Don't use a
+       timeout.
+
+       * nntp.el (nntp-accept-process-output): Removed timeout.
+       (nntp-read-timeout): New variable.
+       (nntp-accept-process-output): Use it.
+
+       * gnus-sum.el (gnus-data-find-list): Remove *.
+
+2003-01-23  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-sum.el (gnus-summary-first-subject): Fixed bug that I
+       introduced on 2002-01-22.
+       (gnus-summary-first-unseen-or-unread-subject): Ditto.
+
+2003-01-23  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-regex-headers, spam-list-of-checks)
+       (spam-regex-headers-spam, spam-regex-headers-ham): added spam/ham
+       checks of incoming mail based on simple header regexp matching
+
+2003-01-22  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus-sum.el (gnus-spam-mark): set to `$'
+
+2003-01-22  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-get-undownloaded-list): Now computes
+       gnus-newsgroup-unfetched, the list of articles whose headers have
+       not been fetched from the server.
+
+       * gnus-sum.el (gnus-summary-find-next): Removed undownloaded
+       parameter as it never worked due to a bug.  Added check to prevent
+       selection of any article in the gnus-newsgroup-unfetched list.
+       (gnus-summary-find-prev): Added check to prevent selection of any
+       article in the gnus-newsgroup-unfetched list.
+       (gnus-summary-first-subject): Documented API. Modified
+       implementation so that constraints are handled independently.
+       Added check to prevent selection of any article in the
+       gnus-newsgroup-unfetched list.
+       (gnus-summary-first-unseen-subject): Updated parameters in
+       gnus-summary-first-subject call to match new API.
+       (gnus-summary-first-unseen-or-unread-subject): Ditto.
+       (gnus-summary-catchup): Do not mark unfetched articles as read.
+
+2003-01-22  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-treat-strip-pgp, gnus-article-hide-pgp-hook):
+       make-obsolete-variable allows only two arguments in XEmacs and
+       Emacs 20.
+
+       * gnus-sum.el (gnus-summary-wash-hide-map): Remove
+       gnus-article-hide-pgp.
+       (gnus-summary-make-menu-bar): do.
+
+       * gnus-art.el (gnus-treat-strip-pgp): Make obsolete.
+       (gnus-treatment-function-alist): Remove gnus-treat-strip-pgp and
+       gnus-article-hide-pgp.
+       (article-hide-pgp): Remove.
+       (gnus-article-hide): Remove gnus-article-hide-pgp.
+
+       * gnus.el: Remove gnus-article-hide-pgp
+
+2003-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-required-headers): Doc fix.
+
+2003-01-21  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-group-ham-processor-bogofilter-p): fixed bug
+       (spam-ifile-register-ham-routine, spam-ifile-ham-category): new
+       option to make ifile a purely binary classifier
+
+2003-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mml-sec.el (mml-secure-sign-pgpauto): Renamed.
+       (mml-secure-encrypt-pgpmime): Removed double.
+
+       * gnus-sum.el (gnus-summary-mark-article-as-replied): Added
+       debugging statements.
+
+2003-01-21  Andreas Fuchs  <asf@void.at>
+
+       * mml-sec.el (mml-sign-alist): Added pgpauto.
+
+2003-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bumped version number.
+
+2003-01-21 07:15:41 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.13 is released.
+
+2003-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-button-url-regexp): Removed |.
+
+       * message.el (message-send-hook): Doc fix.
+
+       * gnus-win.el (gnus-buffer-configuration): Display article
+       instead of article-copy when `reply'.
+
+2003-01-21  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.el (gnus-format): Change customize group to gnus.
+       (gnus-cache): Add link.
+       (gnus-group-charter-alist): Fix docstring.
+
+2003-01-20  Jesper Harder  <harder@ifa.au.dk>
+
+       * mailcap.el (mailcap-print-command): lpr-command might be
+       unbound in XEmacs.
+
+2003-01-18  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-regenerate-group): Added interactive form.
+
+       * gnus-sum.el (gnus-summary-update-article-line): Fixed
+       calculation of net characters added for use in the gnus-data
+       structure.
+
+2003-01-18  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * nnmail.el (nnmail-process-unix-mail-format): Improve error
+       message.  Suggested by Jari Aalto.
+
+2003-01-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-followup-with-original): Clean up.
+       (gnus-article-reply-with-original): Ditto.
+
+       * gnus-sum.el (gnus-summary-catchup): Make sure downloadable,
+       read articles don't become unread.
+
+2003-01-17  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-fun.el (gnus-x-face-from-file):
+       (gnus-face-from-file): Suggest image format in minibuffer prompt.
+
+       * gnus-fun.el (gnus-convert-image-to-x-face-command)
+       (gnus-convert-image-to-face-command): Doc fix.
+
+2003-01-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-convert-face-to-png): Protect against errors.
+
+2003-01-17  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-mime-print-part): Use mm-save-part-to-file to
+       avoid encoding problems.
+
+       * mailcap.el (mailcap-ps-command): New variable.
+       (mailcap-mime-data): Add print entry where applicable.  Use
+       pdftotext on a tty.
+
+2003-01-16  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-alter-header-function): Add type and group.
+
+2003-01-16  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-fun.el (gnus-convert-image-to-x-face-command)
+       (gnus-convert-image-to-face-command, gnus-x-face-from-file)
+       (gnus-face-from-file): Doc fix; don't mention image format.
+
+2003-01-16  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-get-article-as-filename): new function (unused for now)
+       (spam-get-article-as-buffer): new function
+       (spam-get-article-as-string): use spam-get-article-as-buffer
+       (spam-summary-prepare-exit): fixed bug, noticed by Malcolm Purvis
+
+2003-01-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el: Don't use `path'.
+       From the GNU coding standards:
+
+           Please do not use the term ``pathname'' that is used in Unix
+           documentation; use ``file name'' (two words) instead.  We use
+           the term ``path'' only for search paths, which are lists of
+           directory names.
+
+       * nnsoup.el (nnsoup-file-name): Ditto.
+
+       * nnmail.el (nnmail-pathname-coding-system): Ditto.
+       (nnmail-group-pathname): Ditto.
+
+       * nnimap.el (nnimap-group-overview-filename): Ditto.
+
+       * nnheader.el (nnheader-pathname-coding-system): Ditto.
+       (nnheader-group-pathname): Ditto.
+
+       * nnfolder.el (nnfolder-group-pathname): Ditto.
+
+       * gnus.el (gnus-home-directory): Ditto.
+
+       * gnus-group.el (gnus-group-icon-list): Ditto.
+
+2003-01-16  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-mime-print-part): Use mm-handle-media-type.
+
+       * message.el (message-mode-menu): Use it.
+       (message-mode-menu): Deactivate "Yank Original" if there's no
+       reply buffer.
+
+       * messagexmas.el (message-xmas-redefine): Redefine in XEmacs.
+
+       * message.el (message-mark-active-p): New function.
+
+2003-01-15  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-use-bogofilter-headers, spam-bogofilter-header)
+       (spam-bogofilter-database-directory): new variables
+       (spam-check-bogofilter-headers, spam-check-bogofilter)
+       (spam-bogofilter-register-with-bogofilter)
+       (spam-bogofilter-register-spam-routine)
+       (spam-bogofilter-register-ham-routine)
+       (spam-group-ham-processor-bogofilter-p): new functions for the new
+       Bogofilter interface
+       (spam-summary-prepare-exit): use the new Bogofilter functions
+       (spam-list-of-checks): added spam-use-bogofilter-headers
+       (spam-bogofilter-score): rewrote function
+       (spam-check-bogofilter): optional score parameter, uses
+       spam-check-bogofilter-headers better
+       (spam-check-bogofilter-headers): optional score parameter
+
+       * gnus.el (gnus-install-group-spam-parameters): new variable, t by
+       default, in the gnus-start customization group.  Used to disable
+       the spam-*/ham-* parameters.
+       (gnus-group-ham-exit-processor-bogofilter): new ham processor
+
+2003-01-15  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-xmas.el (gnus-xmas-redefine): Use region-exists-p in
+       XEmacs.
+
+       * gnus-ems.el (gnus-mark-active-p): do.
+
+2003-01-15  Kevin Ryde  <user42@zip.com.au>
+
+       * gnus.texi (Using MIME): Mention auto-compression-mode with
+       gnus-mime-copy-part.
+
+2003-01-15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-send): Don't warn about duplicates when
+       superseding.
+
+2003-01-15  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-split-download-body): New variable.
+       (nnimap-split-articles): Use it.
+
+2003-01-14  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-check-overview-buffer): This data
+       integrity checker was incorrectly flagging, and removing, articles
+       whose article number was negative.
+       (gnus-agent-fetch-group-1): When executed in the group's summary
+       buffer, refresh each downloaded line to update the status flag and
+       font.  Preserve the value of gnus-newsgroup-headers so that
+       gnus-agent-fetch-articles can split the requests by size.
+       (gnus-agent-expire): Corrected day calculation for when
+       gnus-agent-expire-days contains a list.
+
+2003-01-14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-audio.el (gnus-audio-au-player): Use executable-find.
+
+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.
+         (gnus-audio-play): Added ARG-DESCRIPTOR to prompt for a file to play.
+
+2003-01-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-msg.el (gnus-inews-add-send-actions): Allow a list of
+       articles to be marked as well.
+
+2003-01-14  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+       * gnus-agent.el (gnus-agent-get-undownloaded-list): Include the
+       fictious headers generated by nnagent (ie. Undownloaded Article
+       ####) in the list of articles that have not been downloaded.
+
+       * gnus-int.el (): Added require declarations to resolve
+       compile-time warnings.
+       (gnus-open-server): If the server status is set to offline,
+       recursively execute gnus-open-server to open the offline backend
+       (e.g. nnagent).
+
+2003-01-14  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (gnus-article-reply-with-original): Use
+       gnus-mark-active-p.
+       (gnus-article-followup-with-original): do.
+
+2003-01-13  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-sum.el: Removed `(when t ...)' around `gnus-define-keys'.
+
+2003-01-13  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-score.el (gnus-score-edit-file-at-point): New function.
+       (gnus-score-find-trace): Bind it to `e' key.  Added `q' for quit.
+
+2003-01-13  Romain FRANCOISE  <romain@orebokech.com>
+
+       * gnus-fun.el (gnus-x-face-from-file): Quote file name.
+       (gnus-face-from-file): Ditto.
+
+2003-01-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-articles-to-read): Don't just apply
+       gnus-alter-articles-to-read-function to the unread articles.
+
+2003-01-13  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * deuglify.el (gnus-article-outlook-unwrap-lines)
+       (gnus-article-outlook-repair-attribution)
+       (gnus-article-outlook-rearrange-citation): New function names,
+       renamed from "gnus-outlook-" to "gnus-article-outlook-".  Changed
+       doc-string.
+
+       * gnus-sum.el (gnus-summary-mode-map): Use new function names,
+       removed `W k' key binding (use `W Y f' instead).
+       (gnus-summary-make-menu-bar): Use new function names.
+
+2003-01-13  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-fun.el (gnus-random-x-face): Doc fix.
+       (gnus-insert-random-x-face-header): New function.
+
+2003-01-13  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Deactivate items if
+       mark is not active.
+
+       * gnus-msg.el (gnus-inews-do-gcc): Comment.
+
+       * gnus-ems.el (gnus-mark-active-p): New function.
+
+       * gnus-group.el (gnus-topic-mode-p): New function.
+       (gnus-group-make-menu-bar): Show more key bindings in topic mode.
+       Deactivate items if mark is not active.
+
+2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bumped version.
+       (gnus-summary-line-format): Doc fix.
+
+2003-01-12 22:02:49 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.12 is released.
+
+2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mail-source.el (mail-sources): Removed autoload to make it
+       compile under XEmacs.
+
+2003-01-12  Raymond Scholz  <ray-2003@zonix.de>
+
+       * gnus-msg.el (gnus-confirm-mail-reply-to-news):  May be a
+       regexp or a function too.
+       (gnus-confirm-treat-mail-like-news): New variable.  Ask for
+       confirmation even if the original article is mail.
+
+2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-inews-add-send-actions): Get the right
+       articles to be marked when not yanking.
+
+2003-01-12  Fran\e,Ag\e(Bois-David Collin  <Francois-David.Collin@curie.fr>
+
+       * mm-decode.el (mm-get-part): Use mm-with-unibyte-current-buffer.
+
+2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-face-from-file): Autoload.
+
+       * gnus-cite.el (gnus-cite-delete-overlays): Protect against more
+       errors.
+
+2003-01-12  Simon Josefsson  <jas@extundo.com>
+
+       * sieve.el (sieve-upload-and-bury): New.  Suggested by
+       kai.grossjohann@uni-duisburg.de (Kai Gro\e,A_\e(Bjohann).
+
+       * sieve-mode.el (sieve-mode-map): Bind s-u-a-b to C-c C-c.
+       Suggested by kai.grossjohann@uni-duisburg.de (Kai Gro\e,A_\e(Bjohann).
+
+2003-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-ignored-headers): Don't include the ^ and :
+       in every string.
+
+       * gnus.el (gnus-version-number): Bumped version number.
+
+2003-01-12 13:46:20 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.11 is released.
+
+2003-01-12  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-fetch-reply-field): Narrow to headers.
+
+       * gnus-msg.el (gnus-inews-do-gcc): Don't try to mark GCC's as read
+       if Gnus isn't alive.
+
+2003-01-11  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): Remove downloadable
+       marks from articles that are already stored in the agent.
+       (gnus-agent-backup-overview-buffer): New debug tool.  Creates a
+       backup copy of an invalid .overview file for later analysis.
+
+2003-01-12  Gregorio Gervasio, Jr.  <gtgj@pacbell.net>
+
+       * gnus-sum.el (gnus-summary-exit): Reverse change to make group
+       exit work with two frames.
+
+2003-01-11  Fran\e,Ag\e(Bois-David Collin  <Francois-David.Collin@wanadoo.fr>
+
+       * message.el (message-forward-make-body): Use mule4.
+
+2003-01-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-mode-map): Move wide-reply command.
+
+2003-01-10  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * deuglify.el (gnus-outlook-deuglify-attrib-verb-regexp): Added
+       castellano.
+       (gnus-outlook-display-hook): New variable.
+       (gnus-outlook-display-article-buffer): New function.
+       (gnus-outlook-unwrap-lines, gnus-outlook-repair-attribution)
+       (gnus-outlook-deuglify-article): Made them interactive and added
+       optional arg.  Use `g-o-d-a-b'.
+       (gnus-article-outlook-deuglify-article): Use `g-o-d-a-b'.
+
+       * gnus-sum.el: Added autoloads.
+       (gnus-summary-mode-map): Added gnus-summary-wash-deuglify-map.
+       (gnus-summary-make-menu-bar): Added "(Outlook) Deuglify" menu.
+
+2003-01-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-display-mime): Use the mime emulation
+       variable.
+
+       * gnus-sum.el (gnus-article-emulate-mime): New variable.
+
+       * gnus-start.el (gnus-read-newsrc-el-file): Make sure that the
+       newsrc-alist is initialized properly.
+
+       * mail-source.el (mail-sources): Autoload.
+
+       * gnus-sum.el (gnus-summary-make-false-root-always): Default to
+       nil.
+
+       * gnus-msg.el (gnus-configure-posting-styles): Make sure we don't
+       insert two newlines.
+
+       * message.el (message-check-news-header-syntax): Compute the
+       header length correctly.
+
+2003-01-10  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-expire): Do not remove article from
+       alist when keeping fetched article file.
+       (gnus-agent-retrieve-headers): When parsing response for article
+       numbers, use the same algorithm as gnus-agent-braid-nov to protect
+       against garbage in the server's response.
+
+       * gnus-int.el (gnus-request-expire-articles,
+       gnus-request-move-article): Only expire when the group's server
+       has been agentized.
+
+2003-01-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-cite.el (gnus-cite-delete-overlays): Protect against
+       errors when deleting overlays.
+
+       * gnus-score.el (gnus-score-followup): Allow tracing.
+
+       * gnus-art.el (gnus-treat-display-face): New variable.
+       (article-display-face): New command.
+
+       * gnus-fun.el (gnus-face-from-file): New function.
+       (gnus-convert-face-to-png): Ditto.
+
+       * gnus-art.el (gnus-ignored-headers): Added Face.
+
+2003-01-10  Simon Josefsson  <jas@extundo.com>
+
+       * nndraft.el (nndraft-request-group): Avoid crash in
+       directory-files when draft directory doesn't exists.
+
+       * gnus-sum.el (gnus-select-article-hook): Add :option.
+
+2003-01-10  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-use-stat): new variable
+       (spam-group-spam-processor-stat-p)
+       (spam-group-ham-processor-stat-p): new convenience functions
+       (spam-summary-prepare-exit): add spam/ham processors to sequence
+       (spam-list-of-checks): add spam-use-stat to list of checks
+       (spam-split): conditionally load the spam-stat tables
+       (spam-stat-register-spam-routine, spam-stat-register-ham-routine,
+       spam-check-ifile): new functions
+
+       * spam-stat.el (spam-stat): typo fix
+       (spam-stat-install-hooks): new variable
+       (spam-stat-split-fancy-spam-group): added documentation clarification
+       (spam-stat-split-fancy-spam-threshhold): new variable
+       (spam-stat-install-hooks): make hooks conditional
+       (spam-stat-split-fancy): use spam-stat-split-fancy-spam-threshhold
+
+       * gnus.el (gnus-group-ham-exit-processor-stat, spam-process): add
+       spam-stat ham/spam processor symbols
+
+2003-01-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el (gnus-read-newsrc-el-file): Make sure the .eld
+       file exists.
+
+2003-01-10  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-read-group-1): Don't select first
+       undownloaded/downloadable only when unplugged.
+
+2003-01-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Optimize inner loop.
+
+2003-01-09  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-ifile): fixed call-process-region to use the
+       db parameter only if it's set
+       (spam-ifile-register-with-ifile): ditto
+
+2003-01-09  Alex Schroeder  <alex@emacswiki.org>
+
+       * spam-stat.el (spam-stat-save): Set spam-stat-ngood and
+       spam-stat-nbad before creating the hash table.
+       (spam-stat-reset): Set spam-stat-ngood and spam-stat-nbad to 0.
+       Changed copyright statement to FSF.
+
+2003-01-09  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-catchup): Do not mark cached nor
+       processable articles as read.
+       (gnus-agent-summary-fetch-series): Remove processable and
+       downloadable marks on all downloaded articles in the series.
+
+       * nntp.el (nntp-report): Throw error after reporting the problem.
+       (nntp-accept-process-output): Corrected error check to report an
+       error when the process is nil.
+
+2003-01-09  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-tool-bar-map): Add preview.
+
+2003-01-09  Jesper Harder  <harder@ifa.au.dk>
+
+       * mml.el (mml-preview): Get rid of MIME handles and buffers after
+       previewing.
+
+2003-01-08  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir--grp-add-art): Fix wrong-type-argument
+       bug when the (n+1)th article to be added to a group has a smaller
+       number than the n articles already added.
+
+2003-01-08  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-mode-field-menu): Use backquote.
+
+2003-01-08  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el: fixed the BBDB autoloads again, using
+       bbdb-search-simple now (which is not a macro, thank god)
+
+       * lpath.el (bbdb-search): removed function from maybe-fbind list
+
+       * gnus.el (ham-process-destination): added new parameter for
+       destination of ham articles found in spam groups at summary exit
+
+       * spam.el (spam-get-ifile-database-parameter): use spam-ifile-database-path
+       (spam-check-ifile, spam-ifile-register-with-ifile): use spam-get-ifile-database-parameter
+       (spam-ifile-database-path): added new parameter for ifile's database
+       (spam-move-spam-nonspam-groups-only): new parameter to determine
+       if spam should be moved from all groups or only some
+       (spam-summary-prepare-exit): fixed logic to use
+       spam-move-spam-nonspam-groups-only when deciding to invoke
+       spam-mark-spam-as-expired-and-move-routine; always invoke that
+       routine after the spam has been expired-or-moved in case there's
+       some spam left over; use spam-ham-move-routine in spam groups
+       (spam-ham-move-routine): new function to move ham articles to the
+       ham-process-destinations group parameter
+
+2003-01-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-spec.el (gnus-parse-complex-format): %~ => ~*.
+
+       * gnus-agent.el (gnus-agent-fetch-selected-article): Use
+       gnus-summary-update-article-line.
+
+2003-01-08  Simon Josefsson  <jas@extundo.com>
+
+       * nnmail.el (nnmail-expiry-target-group): Request group, create it
+       not successful.
+
+2003-01-08  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el (bbdb-records): Fbind it for both Emacs and XEmacs.
+
+2003-01-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-ifile): fixed the spam-ifile-all-categories
+       logic, finally
+
+2003-01-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-spec.el (gnus-parse-format): %C is a complex format.
+       (gnus-parse-format): Change to %~.
+
+       * message.el (message-generate-headers): Don't generate optional
+       empty headers.
+
+2003-01-07  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el (message-cross-post-default)
+       (message-cross-post-note-function, message-shoot-gnksa-feet)
+       (message-strip-subject-trailing-was, message-change-subject)
+       (message-mark-insert-file, message-cross-post-followup-to)
+       (message-cross-post-followup-to, message-mode-map)
+       (message-generate-unsubscribed-mail-followup-to)
+       (message-make-mail-followup-to): Minor changes to doc-strings and
+       error messages.  Updated copyright line.
+
+       * message.el (message-make-mail-followup-to,
+       message-generate-unsubscribed-mail-followup-to): New function
+       names.  Renamed functions: "-mft" -> "-mail-followup-to".
+       (message-make-mft, message-gen-unsubscribed-mft): Removed function
+       names.
+
+       * mml.el (mml-preview-insert-mail-followup-to): New function name.
+       (mml-preview-insert-mft): Removed function name.
+       (mml-preview): Use new function names.
+
+       * gnus-art.el (gnus-article-edit-mode-map): Use new function names.
+
+       * message.el (message-mode-field-menu): Moved header related
+       commands from "Message" to "Field" menu.
+
+2003-01-07  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el (message-generate-headers-first): Added customization
+       if variable is a list.
+
+2003-01-07  Michael Shields  <shields@msrl.com>
+
+       * gnus-art.el (gnus-article-next-page): Correctly handle the case
+       where the last line of the article is the last line of the window.
+
+2003-01-08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-debug): Use ignore-errors.
+
+       * gnus-agent.el (gnus-agent-fetch-selected-article): Use
+       `gnus-summary-update-line'.
+
+2003-01-08  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-unbuttonized-mime-types)
+       (gnus-buttonized-mime-types): Doc fix.
+
+2003-01-08  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-decode.el (mm-inline-media-tests): .xpm is 'x-xpixmap'.
+
+2003-01-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-group-alist): Add and clear up.
+
+2003-01-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el: removed unnecessary condition-case for loading bbdb-com.el
+
+       * lpath.el (bbdb-search): added BBDB functions for a better way to
+       fix missing functions
+
+       * spam.el (spam-check-ifile): if should be an unless
+
+       * spam.el: define 'ignore alias for spam-BBDB-register-routine,
+       spam-enter-ham-BBDB, and bbdb-create-internal initially to hush up warnings
+       (spam-ifile-all-categories): doc string fixed to be less than 80 chars
+
+2003-01-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Added
+       gnus-summary-refer-thread to thread menu.
+
+2003-01-07  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): When fetching within a
+       summary buffer, articles that cannot be fetched are marked as
+       canceled.
+
+       * nntp.el (nntp-with-open-group): The quit signal handler must
+       propagate the quit signal to the next outer handler so that the
+       caller knows that the request aborted abnormally.
+
+2003-01-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-check-ifile, spam-ifile-register-with-ifile)
+       (spam-ifile-register-spam-routine)
+       (spam-ifile-register-ham-routine): added ifile functionality that
+       does not use ifile-gnus.el to classify and register articles
+       (spam-get-article-as-string): convenience function
+       (spam-summary-prepare-exit): added ifile spam and ham registration
+       (spam-ifile-all-categories, spam-ifile-spam-category)
+       (spam-ifile-path, spam-ifile): added customization options
+
+       * gnus.el (gnus-group-ham-exit-processor-ifile): added ifile ham
+       exit processor
+       (spam-process): added gnus-group-ham-exit-processor-ifile to the
+       list of choices
+
+2003-01-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-score.el (gnus-score-followup): Also score immediate
+       followups.
+
+2003-01-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnweb.el (nnweb-asynchronous-p): Changed to nil.
+
+2003-01-07  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-mode-menu): Fix receipt balloon help.
+
+2003-01-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-msg.el (gnus-group-post-news): Don't assume that "" will
+       always be interpreted as news.
+
+2003-01-07  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sieve.el (gnus-sieve-script): Use the crosspost argument to
+       gnus-sieve-script, instead of the global variable
+       gnus-sieve-crosspost.  One-line patch from Steinar Bang
+       <sb@dod.no>.
+
+2003-01-06  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus.el: Renamed gnus-summary-*-uncached-face as
+       gnus-summary-*-undownloaded-face to avoid confusing the agent with
+       the cache.
+
+       * gnus-sum.el: Ditto.
+
+2003-01-06  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-fetch-group): Modified to permit execution
+       in either the group or summary buffer.
+       New command "JS", in summary buffer, will fetch articles per the
+       group's category, predicate, and processable flags.
+       (gnus-agent-summary-fetch-series): Rewritten to call
+       gnus-agent-session-fetch-group once with all articles in the
+       series.
+       (gnus-agent-summary-fetch-group): Fixed bug and modified code to
+       return list of fetched articles.
+       (gnus-agent-fetch-articles): Split fetch list into sublists such
+       that the article buffer is only slightly larger than
+       gnus-agent-max-fetch-size.  Added unwind-protect to ensure that
+       the group's article alist is saved.
+       (gnus-agent-fetch-headers): The 'killed' and 'cached' marks no
+       longer result in the agent trying to fetch an article.
+       (gnus-agent-fetch-group-1): Can now be called in either the group
+       or summary buffer.  Removed the max-fetch-size code that I added
+       on 2002-12-13 as that capability is now part of
+       gnus-agent-fetch-articles.  Added code to update summary buffer.
+       When called in the group buffer, articles that can not be fetched
+       are AUTOMATICALLY MARKED AS READ.
+
+       * gnus-sum.el (): Modified eval-when-compile to minimize
+       misleading compilation warnings.
+       (gnus-update-summary-mark-positions): Changed code to use
+       gnus-undownloaded-mark rather than gnus-downloaded-mark.
+
+       * nnheader.el (nnheader-insert-nov-file): Do not try to insert an
+       empty file as the parser assumes that the file isn't empty.
+
+       * nntp.el (nntp-send-string): The process-send-string call can,
+       because it performs I/O on the process, change the process' state
+       from open to closed.  If this happens, call nntp-report
+       immediately to report the broken connection.
+       (nntp-report): Rewritten to avoid needing a global variable to
+       determine the appropriate course of action.  Instead, two function
+       implementations are provided and the nntp-report function value is
+       bound to the appropriate implementation.
+       (nntp-retrieve-data): Moved nntp-report call to end of implementation.
+       (nntp-with-open-group): Now binds nntp-report's function cell
+       rather than binding gnus-with-open-group-first-pass.  Added a
+       condition-case to detect a quit during a nntp command.  When the
+       quit occurs, the current connection is closed as a fetch articles
+       request could have several megabytes queued up for reading.
+       (nntp-retrieve-headers): Bind articles to itself.  If
+       nntp-with-open-group repeats this command, I must have access to
+       the original list of articles.
+       (nntp-retrieve-groups): Ditto for groups.
+       (nntp-retrieve-articles): Ditto for articles.
+       (*): Replaced nntp-possibly-change-group calls to
+       nntp-with-open-group forms in all, but one, occurrance.
+       (nntp-accept-process-output): Bug fix. Detect when called with
+       null process.
+
+2003-01-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-util.el (mm-find-mime-charset-region): Don't do Latin-9 hack
+       if we don't need to.
+       (mm-iso-8859-x-to-15-region): Fix misplaced parenthesis.
+
+2003-01-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-make-web-group): Pass the select
+       method on to group-create.
+       (gnus-group-line-format-alist): %U is an integer.
+
+       * gnus-sum.el (gnus-summary-exit-no-update): Don't update
+       ephemeral groups.
+       (gnus-summary-read-group-1): Ditto.
+       (gnus-group-make-articles-read): Ditto.
+
+       * mm-url.el (mm-url-program): Doc fix.
+
+       * message.el (message-mode-map): Rebound
+       message-insert-wide-reply.
+
+2003-01-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-xmas.el (gnus-xmas-group-startup-message): Bind the oort
+       color as `gnus-group-startup-message' does.
+
+2003-01-05  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el: fixed line lengths to 80 chars or less
+
+       * gnus-sum.el (gnus-read-mark-p): added the spam-mark as a
+       "not-read" mark
+       (gnus-summary-mark-forward): added the spam-mark to the list of
+       marks not to be marked as "read" when viewed
+
+2003-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-inews-make-draft): Quote article-reply.
+
+       * gnus-group.el (gnus-number-of-unseen-articles-in-group):
+       Protect against unactive groups.
+
+       * message.el (message-check-news-header-syntax): Check long
+       header lines.
+       (message-check-news-header-syntax): Update `start'.
+
+       * gnus-group.el (gnus-group-expire-articles): Doc fix.
+       (gnus-group-line-format): %U.
+       (gnus-group-line-format-alist): ?U.
+       (gnus-number-of-unseen-articles-in-group): New function.
+
+       * nntp.el (nntp-accept-process-output): Use a 0.1 second timeout.
+
+       * gnus.el (gnus-version-number): Bump version number.
+
+2003-01-05 01:53:30 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.10 is released.
+
+2003-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Fix version number.
+
+2003-01-05 01:40:09 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.08 is released.
+
+2003-01-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-util.el: Add mm-string-make-unibyte.
+
+       * gnus-group.el (gnus-group-jump-to-group): Make it work for
+       UTF-8 groups.
+
+2003-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-variable-list): Write gnus-format-specs last.
+
+       * gnus-sum.el (gnus-summary-goto-subjects): Fix typo.
+
+2003-01-04  Kevin Ryde  <user42@zip.com.au>
+
+       * gnus-art.el (gnus-mime-jka-compr-maybe-uncompress): New
+       function.
+
+2003-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-exit): Bind gnus-group-is-exiting-p.
+       (gnus-summary-read-group-1): Update group line.
+       (gnus-summary-exit-no-update): Update group on exit.
+
+       * gnus-group.el (gnus-group-line-format): Add %*.
+       (gnus-group-line-format-alist): Ditto.
+       (gnus-group-insert-group-line): Set it.
+       (gnus-group-is-exiting-p): New variable.
+       (gnus-group-insert-group-line): Use it.
+
+2003-01-03  Teodor Zlatanov  <tzz@beld.net>
+
+       * spam.el (spam-enter-ham-BBDB, spam-BBDB-register-routine):
+       enable BBDB ham processing
+       (spam-blacklist-register-routine): enable blacklist spam processing
+       (spam-whitelist-register-routine): enable whitelist ham processing
+       (spam-fetch-field-from-fast): fast fetching of the "from" field
+       from (gnus-data-list)
+       (spam-summary-prepare-exit): works completely now
+       (spam-use-blacklist): oops, should be nil by default
+       (spam-summary-prepare-exit): spam-use-PROCESSOR is only for
+       split processing now; before it was for summary exit as
+       well but that's done with the spam-contents and spam-process
+       parameters now
+
+2003-01-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * mml.el (mml-insert-tag): Don't quote non-ASCII unibyte
+       characters.
+
+2003-01-02  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-group-spam-contents-p, spam-group-ham-contents-p)
+       (spam-group-processor-p, spam-group-processor-bogofilter-p)
+       (spam-group-processor-ifile-p, spam-group-processor-blacklist-p)
+       (spam-group-processor-whitelist-p, spam-group-processor-BBDB-p)
+       (spam-mark-spam-as-expired-and-move-routine)
+       (spam-generic-register-routine, spam-BBDB-register-routine)
+       (spam-ifile-register-routine, spam-blacklist-register-routine)
+       (spam-whitelist-register-routine): new functions
+       (spam-summary-prepare-exit): added summary exit processing (expire
+       or move) of spam-marked articles for spam groups; added slots for
+       all the spam-*-register-routine functions
+
+2003-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * pop3.el (pop3-retr): Wait 500 msecs.
+       (pop3-read-response): Ditto.
+
+       * gnus-msg.el (gnus-setup-message): Get the evaliation order
+       right.
+       (gnus-inews-make-draft): New function.
+       (gnus-setup-message): Use it.
+
+       * message.el (message-required-headers): Add From.
+
+2003-01-02  Katsumi Yamaoka  <yamaoka@jpl.org>
+       Trivial patch from Norbert Koch <nk@viteno.net>.
+
+       * gnus-msg.el (gnus-gcc-externalize-attachments): Fix typo.
+
+2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-generate-headers): Let header formatters do
+       their work.
+
+2003-01-02  Raymond Scholz  <ray-2003@zonix.de>
+
+       * deuglify.el (gnus-article-outlook-deuglify-article):
+       Rehighlight, reapply treatments and call
+       `gnus-article-prepare-hook'.  Suggested by Niels Olof Bouvin.
+       (gnus-outlook-repair-attribution-block): Recognize cited
+       attributions.  Suggested by Niklas Morberg.
+
+2003-01-02  Pete Kazmier  <pete@kazmier.com>
+
+       * gnus-art.el (gnus-treat-predicate): Check condition first.
+
+2003-01-02  Jesper Harder  <harder@ifa.au.dk>
+
+       * lpath.el: Add url-http-file-exists-p.
+
+       * gnus-group.el (gnus-group-fetch-charter): Use
+       http://TLH.news-admin.org/charters/GROUPNAME as a fallback.
+
+2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-draft-headers): Also generate From to get a
+       nicer draft buffer summary.
+
+       * gnus-xmas.el (gnus-xmas-read-event-char): Take an optional
+       parameter.
+
+       * gnus-art.el (article-wash-html): Clean up.
+       (article-wash-html): Typo fix.
+
+       * gnus-msg.el (gnus-summary-mail-forward): Clean up.
+       (gnus-summary-mail-forward): To many lists of lists.
+
+       * gnus-art.el (article-wash-html): Clean up.
+
+2003-01-02  pete-temp  <pete-temp-12-29-2002@kazmier.com>
+
+       * gnus-art.el (gnus-treat-wash-html): New variable.
+
+2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-check-news-header-syntax): Allow posting.
+       (message-check-news-header-syntax): Fix logic for sure, this
+       time.
+
+2003-01-02  Matthieu Moy  <Matthieu.Moy@imag.fr>
+
+       * message.el (message-check-news-header-syntax): Check syntax of
+       continuation headers.
+
+2003-01-02  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-url-regexp,
+       (gnus-button-mid-or-mail-regexp, gnus-button-alist,
+       (gnus-header-button-alist): Regexps are case insensitive here.
+
+2003-01-02  Simon Josefsson  <jas@extundo.com>
+
+       * dig.el (query-dig): Doc fix.
+
+2003-01-02  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-agent-fetch-selected-article): Update whole
+       summary buffer line, not just the download mark.
+
+2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-goto-subjects): New function.
+       (gnus-summary-insert-dormant-articles): New command and
+       keystroke.
+
+       * gnus-cache.el (gnus-summary-insert-cached-articles): Use new
+       function for mass insertion of subjects.
+
+       * nndraft.el (nndraft-generate-headers): Don't move point.
+
+       * gnus.el (nnheader): Require nnheader.
+
+       * nndraft.el (nndraft-request-associate-buffer): Use
+       make-local-variable.
+
+2003-01-02  Michael Shields  <shields@msrl.com>
+
+       * nndraft.el (nndraft-request-associate-buffer): Make
+       write-contents-hooks buffer-local before setting it.
+
+2003-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-group-parameter-value): Take an extra param.
+       (gnus-group-fast-parameter): Let group param results be nil.
+
+       * gnus-art.el (gnus-article-forward-header): New function.
+       (article-date-ut): Use it to remove continuation date headers.
+
+       * gnus-sum.el (gnus-summary-walk-group-buffer): Supply prompt to
+       read-event.
+       (gnus-summary-remove-bookmark): Clean up.
+       (gnus-summary-set-bookmark): Clean up.
+
+       * gnus-util.el (gnus-read-event-char): Take an optional prompt.
+
+       * gnus.el (gnus-group-startup-message): Bind data-directory to
+       the Gnus etc directory.
+
+2003-01-01  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-summary-prepare-exit): added slots for spam- and
+       ham-processing of articles; use the new
+       spam-group-(spam|ham)-contents-p functions
+       (spam-group-spam-contents-p, spam-group-ham-contents-p): new
+       convenience functions
+       (spam-mark-junk-as-spam-routine): use the new
+       spam-group-spam-contents-p function
+
+       * gnus.el (spam-process, spam-contents, spam-process-destination):
+       added new parameters with corresponding global variables
+       (gnus-group-spam-exit-processor-ifile,
+       gnus-group-spam-exit-processor-bogofilter,
+       gnus-group-spam-exit-processor-blacklist,
+       gnus-group-spam-exit-processor-whitelist,
+       gnus-group-spam-exit-processor-BBDB,
+       gnus-group-spam-classification-spam,
+       gnus-group-spam-classification-ham): added new symbols for the
+       spam-process and spam-contents parameters
+
+       * spam.el (spam-ham-marks, spam-spam-marks): changed list
+       customization and list itself to store mark symbol rather than
+       mark character.
+       (spam-bogofilter-register-routine): added logic to generate mark
+       values list from spam-ham-marks and spam-spam-marks, so (member)
+       would work.
+
+2003-01-02  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-cross-post-followup-to): Fix comment.
+
+2003-01-01  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-ham-marks, spam-spam-marks): changed list
+       customization and list itself to store mark symbol rather than
+       mark character.
+       (spam-bogofilter-register-routine): added logic to generate mark
+       values list from spam-ham-marks and spam-spam-marks, so (member)
+       would work.
+
+2003-01-01  Raymond Scholz  <ray-2002@zonix.de>
+
+       * message.el (message-signature-insert-empty-line): New variable.
+
+2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el: Renamed functions and variables: "xpost" ->
+       "cross-post", "-fup2" -> "-followup-to".
+       (message-cross-post-old-target, message-cross-post-default,
+       message-cross-post-note, message-followup-to-note,
+       message-cross-post-note-function): New variables names.
+       (message-xpost-old-target, message-xpost-default,
+       message-xpost-note, message-fup2-note,
+       message-xpost-note-function): Removed variable names.
+       (message-cross-post-followup-to-header,
+       message-cross-post-insert-note, message-cross-post-followup-to):
+       New function names.
+       (message-xpost-fup2-header, message-xpost-insert-note,
+       message-xpost-fup2): Removed function names.
+
+2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el (message-send-mail): Added message-cleanup-headers to
+       prevent newlines in headers.
+
+2003-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * dns.el (dns-make-network-process): Comment.
+
+       * gnus-sum.el (gnus-summary-display-while-building): Default to
+       nil.
+
+2003-01-01  Wes Hardaker  <wes@hardakers.net>
+
+       * gnus-sum.el (gnus-summary-display-while-building): New
+       variable.
+
+2003-01-01  Raymond Scholz  <ray-2003@zonix.de>
+
+       * deuglify.el (gnus-outlook-rearrange-article): Kill overlays
+       before rearranging the article.
+
+2003-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nndraft.el (nndraft-generate-headers): New function.
+       (nndraft-request-associate-buffer): Use it to write headers on
+       buffer save.
+
+       * message.el (message-generate-headers): Let the function be a
+       lambda form.
+       (message-draft-headers): New variable.
+
+       * gnus-msg.el (gnus-inews-make-draft-meta-information): New
+       function.
+       (gnus-setup-message): Use it.
+
+       * message.el (message-generate-headers-first): Doc fix.
+       (message-setup-1): Use new function for getting which headers to
+       generate.
+       (message-headers-to-generate): New function.
+
+2003-01-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-save-alist): Make directory.
+
+2002-12-31  Reiner Steib  <4uce.02.r.steib@gmx.net>
+
+       * gnus-sum.el (gnus-summary-limit-to-age): Make prompt string
+       mention negatives.
+
+2002-12-31  Raymond Scholz  <ray-2002@zonix.de>
+
+       * deuglify.el (gnus-outlook-rearrange-article): Use
+       `transpose-regions' instead of tempering the kill-ring.
+       (gnus-article-outlook-deuglify-article): Rehighlight article
+       instead of a complete redisplay.
+
+2002-12-31  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el: most defvars are defcustoms now
+
+       patches from Michael Shields  <shields@msrl.com>
+
+       * spam.el (spam-bogofilter-articles): Select the article
+       body using gnus-summary-show-article t instead of
+       gnus-summary-select-article; this presents the raw text
+       without running any hooks.
+
+       * spam.el (spam-bogofilter-articles): Use message-remove-header
+       to remove headers; the old way incorrectly removed just the first
+       line of folded headers.
+
+2002-12-31  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-start.el (gnus-load): Replace `ding-file' with `file'.
+
+2002-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el (gnus-load): New function.
+       (gnus-read-newsrc-el-file): Use it.
+
+2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-art.el (gnus-button-valid-fqdn-regexp): New variable.
+       (gnus-button-handle-apropos-documentation): New function.
+       (gnus-button-handle-ctan): New function.
+       (gnus-button-alist): Use them.  Improve some regexps.
+       (gnus-button-prefer-mid-or-mail): Addition to doc-string.
+
+2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el (message-subscribed-p): New function.
+       (message-send-mail): Use it.
+       * mml.el (mml-preview-insert-mft): New function.
+       (mml-preview): Use it.
+
+2002-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-thread-latest-date): Protect against errors
+       when sorting by date.
+
+       * gnus-art.el (gnus-article-edit-mode): New variable.
+       (gnus-article-setup-buffer): Warn user about discarding edits.
+
+       * gnus-sum.el (gnus-summary-pipe-output): Clean up.
+       (gnus-summary-pipe-output): Take a symbolic prefix to save all
+       headers.
+
+       * mm-uu.el (mm-uu-configure-list): Default to (shar . disabled).
+
+2002-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * message.el (message-completion-alist): Added "Mail-Followup-To"
+       and "Mail-Copies-To".
+
+2002-07-21  Jesper harder  <harder@ifa.au.dk>
+
+       * gnus-group.el: Add key bindings for
+       gnus-group-sort-groups-by-real-name and
+       gnus-group-sort-selected-groups-by-real-name.
+
+2002-07-21  Jesper harder  <harder@ifa.au.dk>
+
+       * gnus.texi (Sorting Groups): Add key bindings for
+       gnus-group-sort-groups-by-real-name and
+       gnus-group-sort-selected-groups-by-real-name.
+
+2002-12-30  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-use-dig): new variable for blackhole checking
+       through dig.el
+       (spam-check-blackholes): added dig.el checking functionality and
+       more verbose reporting; query-dig is autoloaded from dig.el
+       (spam-use-blackholes): disabled by default
+       (spam-blackhole-servers): removed rbl.maps.vix.com from the
+       blackhole servers list
+
+2002-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-required-headers): New variable.
+
+2002-12-30  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * dig.el (query-dig): new function
+
+2002-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * flow-fill.el (fill-flowed): Don't infloop on too long fill
+       prefixes.
+
+       * dns.el (query-dns): Protect against errors.
+
+       * gnus-msg.el (gnus-article-yanked-articles): New variable.
+       (gnus-inews-add-send-actions): Mark all answered messages as
+       answered.
+
+2002-08-10  Jari Aalto  <jari.aalto@poboxes.com>
+
+       * nnmail.el (nnmail-split-it): Added tracing to
+       `:' split rule
+
+2002-08-13  Hrvoje Niksic  <hniksic@xemacs.org>
+
+       * mm-decode.el (mm-mailcap-command): Remove the quotes around '%s'
+       and "%s" so we don't overquote them.
+
+2002-08-13  Hrvoje Niksic  <hniksic@xemacs.org>
+
+       * (mm-display-external): Display the actual command that has been
+       executed in the echo area.
+
+2002-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-topic.el (gnus-topic-display-missing-topic): Bind entry.
+
+       * message.el (message-with-reply-buffer): New macro.
+       (message-fetch-reply-field): Use it.
+       (message-insert-wide-reply): New command and keystroke.
+       (message-carefully-insert-headers): New function.
+       (message-insert-to): Use new function.
+
+       * gnus-topic.el (gnus-topic-display-missing-topic): New function.
+       (gnus-topic-goto-missing-group): Use it.
+
+       * message.el (message-required-news-headers): Removed Lines.
+       (message-reply): Don't insert References first.
+       (message-followup): Ditto.
+       (message-make-references): New function.
+       (message-followup): Set message-reply-headers before generating
+       the buffer stuff.
+
+2002-12-29  Jesper Harder  <harder@ifa.au.dk>
+
+       * mml.el (mml-generate-mime-1): Reverse the order of
+       encoding/flowing.
+
+2002-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnmail.el (nnmail-expiry-target-group): Mark articles as read
+       after moving them.
+
+       * gnus-sum.el (gnus-summary-dummy-line-format): Update format to
+       fit with newer standard format.
+       (gnus-summary-make-false-root-always): New variable.
+       (gnus-gather-threads-by-subject): Use it.
+
+       * message.el (message-get-reply-headers): Take an address list
+       optional argument.
+
+2002-12-28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-keep-backlog): Change default to 20.
+
+       * gnus-agent.el (gnus-agent-check-overview-buffer): Start from
+       start.
+       (gnus-agent-check-overview-buffer): Remove negative article
+       numbers.
+
+       * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups): Doc fix.
+       (nnmail-cache-ignore-groups): Doc fix.
+
+       * nnimap.el (nnimap-debug): Made into a flag and defcustomed.
+       (nnimap-debug-buffer): New variable.
+       (nnimap-debug): Use it.
+
+2002-12-28  Lars Magne Ingebrigtsen  <kgreiner@xpediantsolutions.com>
+
+       * gnus.el (gnus-summary-high-uncached-face): New color scheme.
+
+2002-12-28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-check-overview-buffer): Sort lines if
+       they aren't already sorted.
+
+2002-12-28  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-mode-menu): Add ellipses to menu items
+       expecting user interaction.
+       (message-mode-field-menu): do.
+
+2002-12-26  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-highlight-line): Don't bind `list' --
+       it isn't used any more.
+
+2002-12-22  Jesper Harder  <harder@ifa.au.dk>
+
+       * binhex.el (binhex-decoder-program): Fix docstring.
+
+2002-12-21  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * mm-decode.el (mm-mailcap-command): Do not backslash-quote
+       special chars if the mailcap file uses single quotes around %s.
+       From Laurent Martelli <laurent@bearteam.org>.
+
+2002-12-19  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus-int.el (gnus-request-update-info): nnchoke-r-u-i might not
+       return the info object.
+
+2002-12-18  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus-int.el (gnus-request-update-info): Artificially add
+       (1 . (1- min)) to the read range, in case the backend doesn't
+       store marks for nonexistent articles.
+
+2002-12-17  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * binhex.el (binhex-insert-char): Eval-and-compile.
+
+2002-12-17  Jesper Harder  <harder@ifa.au.dk>
+
+       * lpath.el: Add tool-bar-local-item-from-menu.
+
+       * message.el (message-tool-bar-local-item-from-menu): New function.
+       (message-tool-bar-map): Use it.
+
+2002-12-14  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-uu.el (gnus-uu-digest-headers): Mention nil value in docstring.
+
+       * gnus-art.el (gnus-article-header-rank): Last header in
+       gnus-sorted-header-list should have higher rank than non-members.
+
+2002-12-13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-close-agent): Don't blank out the list of
+       covered methods.
+
+2002-12-12  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * nntp.el (nntp-with-open-group-first-pass): Do not wrap in
+       eval-when-compile.  Suggested by Kevin Greiner.
+
+2002-12-13  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus-agent.el (gnus-agent-max-fetch-size): New, defcustom.
+       (gnus-agent-fetch-headers): Initialize gnus-agent-overview-buffer
+       even though no headers may have been fetched
+       (gnus-agent-fetch-group-1, and perhaps others, require this
+       behavior).
+       (gnus-agent-fetch-group-1): Fetch articles in chucks so that the
+       server buffer is constrained by gnus-agent-max-fetch-size.
+       Multiple chunks in the same group may perform arbitrarily large
+       updates.
+
+2002-12-12  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * 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 <kgreiner@xpediantsolutions.com>
+
+       * gnus.el (gnus-summary-high-uncached-face,
+       gnus-summary-normal-uncached-face, gnus-summary-low-uncached-face)
+       New faces.
+
+       * gnus-agent.el (gnus-agent-downloaded-article-face): REMOVED.  I
+       added this on 2002-11-23 but it just wasn't working out as
+       intended.  The idea isn't entirely dead, three new faces
+       gnus-summary-*-uncached-face are being added to gnus.el to provide
+       the basis for an improved implementation.
+       (gnus-agent-read-servers): Undo the change made on 2002-11-23. The
+       proper file to open is lib/servers.
+       (gnus-summary-set-agent-mark): Expanded documentation.  Unmarking
+       (i.e. removing the article from gnus-newsgroup-downloadable) will
+       now restore the article's default mark rather than simply setting
+       no mark.
+       (gnus-agent-get-undownloaded-list): Corrected documentation.
+       Added code to set new summary local variable,
+       gnus-newsgroup-agentized.  Reworked impl so that it doesn't create
+       a temporary list.  No longer sets gnus-newsgroup-downloadable.
+       (gnus-agent-summary-fetch-group): Keep gnus-newsgroup-undownloaded
+       up to date.  Call new gnus-summary-update-download-mark to keep
+       summary buffer up-to-date.
+       (gnus-agent-fetch-selected-article): Keep
+       gnus-newsgroup-undownloaded up to date.
+       (gnus-agent-fetch-articles): Return list of articles that were
+       successfully fetched.
+       (gnus-agent-check-overview-buffer): No more thingatpt.
+       (gnus-agent-expire): No longer deletes NOV entries of unread
+       articles.
+       (gnus-agent-unread-articles): New function.
+       (gnus-agent-regenerate-group): The article number must be
+       terminated by a tab character.  Added more messages to report
+       repairs.  Inhibit quits while writing changes so it is now safe
+       have to quit regeneration.  Renamed gnus-tmp-downloaded back to
+       downloaded to 1) resolve the unbound references and 2) avoid
+       confusing this list with the gnus-tmp-downloaded in gnus-sum.el
+
+       * gnus-art.el (gnus-article-prepare): The agent
+       downloaded/undownloaded mark is no longer stored as the article's
+       mark.
+
+       * gnus-salt.el (gnus-tree-highlight-node): Added uncached as
+       gnus-summary-highlight may use it.  Added downloaded as
+       gnus-summary-highlight was using it.
+
+       * gnus-sum.el (gnus-undownloaded-mark): Changed from ?@ to ?- as
+       the download mark now follows Kai's +/- convention.
+       (gnus-downloaded-mark): Added ?+ mark.
+       (gnus-summary-highlight): Added rules to select
+       gnus-summary-high-uncached-face,
+       gnus-summary-normal-uncached-face, and
+       gnus-summary-low-uncached-face.  Removed the
+       gnus-agent-downloaded-article-face.
+       (gnus-summary-line-format-alist): Implemented the download flag
+       format (?O) as named in the manual.  This implementation displays
+       either gnus-undownloaded-mark, gnus-downloaded-mark, or
+       gnus-no-mark.
+       (gnus-newsgroup-agentized): New local variable that identifies
+       which groups are agentized.  While the agent is now on by default,
+       you don't have to agentize every server that you use.
+       (gnus-update-summary-mark-positions): Completed support for the
+       download type of mark.
+       (gnus-summary-insert-line): Added undownloaded to the parameters.
+       (gnus-summary-prepare-threads): Set gnus-tmp-downloaded for
+       reference by the gnus-summary-line-format-spec.
+
+       * nntp.el (nntp-with-open-group): This macro handles dropped or
+       broken connections by opening a new connection and repeating the
+       failed command.
+       (nntp-retrieve-headers-with-xover): Some NNTP servers respond to
+       XOVER commands preceeding the active articles with the nov entry
+       of the first available article.  When gnus connected to such a
+       server, the unexpected nov entry would result in duplicate lines
+       in the agent's overview file.  This patch fixes the duplicate
+       lines problem and improves performance by skipping over all
+       articles IDs that preceed the first nov entry in the server's
+       reply.
+
+2002-12-11  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-tmp-downloaded): New internal variable.
+       (gnus-summary-highlight): Use it instead of `downloaded'.
+       (gnus-summary-highlight-line): Ditto.
+
+       * gnus-agent.el (gnus-agent-regenerate-group): Ditto.
+
+2002-12-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-variable-list): Add gnus-agent-covered-methods.
+
+       * gnus-agent.el (gnus-agent-check-overview-buffer): Remove debug
+       calls.
+
+       * gnus-sum.el (gnus-summary-highlight-line): Don't set the
+       downloaded variable if we're in an uncovered group.
+
+       * gnus-agent.el (gnus-agent-downloaded-article-face): Change the
+       font to soemthing less noticeable.
+       (gnus-agent-group-covered-p): New function.
+
+2002-12-09  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-braid-nov): Remove corrupted lines.
+       Because of an unknown bug, the group buffer is saved in .overview
+       file.
+
+2002-12-09  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * nntp.el (nntp-send-command): Braino in last commit.  Replace
+       `and' with `or'.
+
+2002-12-08  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * nntp.el (nntp-send-command): Assume that echo does not happen
+       when nntp-open-connection-function is nntp-open-network-stream.
+       Suggested by Sebastian D.B. Krause <krause@my.gnus.org>.
+
+2002-12-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-retrieve-headers-1): Update the parser.
+
+2002-12-06  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-request-group): bugfix: don't erase
+       nntp-server-buffer if we aren't going to write to it.
+
+2002-12-04  Katsumi Yamaoka  <yamaoka@jpl.org>
+       Trivial patch from Itai Zukerman <zukerman@math-hat.com>.
+
+       * mm-decode.el (mm-w3m-safe-url-regexp): Fix parenthesis.
+
+2002-12-04  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * rfc2047.el (rfc2047-decode-region): Remove newlines between
+       decoded words.
+
+2002-12-03  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus.el (fboundp): After loading mm-util, make sure it was the
+       right one.
+
+2002-11-29  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-art.el (gnus-inhibit-mime-unbuttonizing): Moved here from
+       gnus-sum.  Made into a user option.
+
+       * gnus-sum.el (gnus-simplify-ignored-prefixes)
+       (gnus-summary-mark-article-as-unread)
+
+2002-11-29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * time-date.el (date-to-time): Typo.
+
+       * parse-time.el: Typo.
+
+       * nnsoup.el (nnsoup-retrieve-headers): Typo.
+
+       * nnmail.el (nnmail-split, nnmail-process-unix-mail-format): Typos.
+
+       * nnimap.el:
+       (nnimap-split-rule, nnimap-find-minmax-uid): Typos.
+
+       * mm-encode.el (mm-safer-encoding): Typo.
+
+       * messcompat.el: Typo.
+
+       * message.el (message-face-alist): Typo.
+
+       * imap.el (imap-interactive-login, imap-open): Typos.
+
+       * ietf-drums.el (ietf-drums-text-token, ietf-drums-qtext-token): Typos.
+
+       * gnus.el: Typo.
+
+       * gnus-win.el (gnus-configure-frame): Typo.
+
+       * gnus-util.el (gnus-atomic-progn-assign): Typo.
+
+       * gnus-topic.el (gnus-topic-sort-topics): Typo.
+
+       * gnus-sum.el (gnus-summary-article-number)
+       (gnus-summary-read-group-1, gnus-summary-mark-article)
+       (gnus-summary-fetch-faq, gnus-refer-article-methods): Typos.
+
+       * gnus-mule.el (gnus-mule-add-group): Typo.
+
+       * gnus-mlspl.el (gnus-group-split-fancy): Typo.
+
+       * gnus-group.el (gnus-group-fetch-faq): Typo.
+
+       * gnus-art.el (gnus-decode-header-methods): Typo.
+
+       * flow-fill.el: Typo.
+
+2002-11-19  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * binhex.el (binhex-decode-region): Don't hardcode point-min == 1.
+
+2002-11-29  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-sum.el (gnus-simplify-ignored-prefixes)
+       (gnus-summary-mark-article-as-unread)
+       (gnus-mark-article-as-unread, gnus-summary-highlight-line):
+       Reformatting to avoid long lines.
+       (gnus-inhibit-mime-unbuttonizing): Moved to gnus-art.
+
+2002-11-28  Daiki Ueno  <ueno@unixuser.org>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): Article numbers should
+       be accessed through `mail-header-number'.
+
+2002-11-27  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
+       * gnus-sum.el (gnus-summary-insert-old-articles): No longer passes
+       compressed range to gnus-summary-insert-articles.
+
+2002-11-26  Kevin Ryde <user42@zip.com.au>
+
+       * gnus-art.el (gnus-mime-copy-part): Look for filename
+       parameter under content-disposition, not content-type.
+
+       * gnus-sum.el (gnus-summary-find-uncancelled): New function.
+       (gnus-summary-reselect-current-group): Use it.
+
+2002-11-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-uncached-articles): if
+       gnus-agent-load-alist fails, return ARTICLES.
+
+       * nnrss.el (nnrss-group-alist): Update the link of Jabber.
+
+2002-11-26  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-sum.el (gnus-summary-insert-old-articles): Remove
+       superfluous function call.
+       (gnus-summary-catchup-all, gnus-summary-catchup-all-and-exit):
+       Add warning to docstring.
+
+2002-11-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-agent.el: Autoload number-at-point instead.
+       (gnus-agent-check-overview-buffer): No warning for deactivate-mark.
+
+2002-11-26  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-agent-check-overview-buffer): Explicitly
+       require thingatpt (for number-at-point) and protect against
+       deactivate-mark being unbound (on XEmacs).
+
+2002-11-25  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-agent-check-overview-buffer): Make debugger
+       print message on entry.
+
+       From Kevin Greiner <kgreiner@xpediantsolutions.com>.
+
+       * gnus-range.el (gnus-range-difference): New function.
+       * gnus-sum.el (gnus-summary-insert-old-articles): Use it.
+
+2002-11-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-sum.el (gnus-summary-insert-old-articles): Use
+       gnus-remove-from-range instead of gnus-range-difference which
+       doesn't exist.
+
+2002-11-23  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+       From Kevin Greiner <kgreiner@xpediantsolutions.com>.
+
+       * gnus-agent.el (gnus-agent-downloaded-article-face): New face,
+       used for showing which articles have been downloaded.
+       (gnus-agent-article-alist): Format change.  Add documentation.
+       (gnus-agent-summary-mode-map): New keybinding `J s' for fetching
+       process-marked articles.
+       (gnus-agent-summary-fetch-series): Command for `J s'.  Articles
+       in the series are individually fetched to minimize lose of
+       content due to an error/quit.
+       (gnus-agent-synchronize-flags-server, gnus-agent-add-server): Use
+       gnus-message instead of message.
+       (gnus-agent-read-servers): Use file lib/methods instead of
+       lib/servers.  TODO: Why?
+       (gnus-summary-set-agent-mark): Adapt to new agent-alist format.
+       (gnus-agent-get-undownloaded-list): Remove articles that appear to
+       come from the agent.  This means that they are not downloaded.
+       (gnus-agent-fetch-selected-article): Don't use history.
+       (gnus-agent-save-history, gnus-agent-enter-history)
+       (gnus-agent-article-in-history-p, gnus-agent-history-path):
+       Removed function; history is not used anymore.
+       (gnus-agent-fetch-articles): Fix handling of crossposted articles.
+       (gnus-agent-crosspost): Started rewrite then realized that a typo
+       in gnus-agent-fetch-articles ensures that this function is never
+       called.  This will need to be fixed later.
+       (gnus-agent-check-overview-buffer): Some sanity checks on the
+       agent overview buffer.  This is a safety net used during
+       development.
+       (gnus-agent-flush-cache): The gnus-agent-article-alist format has
+       changed, write a number to the file indicating this.
+       (gnus-agent-fetch-headers): Rewrite to respect
+       gnus-agent-consider-all-articles without relying on the
+       `.fetched' files.  Make it fast.
+       (gnus-agent-braid-nov): Change resulting from
+       gnus-agent-fetch-headers change.
+       (gnus-agent-load-alist, gnus-agent-save-alist): Don't use
+       `.fetched' files.
+       (gnus-agent-read-agentview): New function, used by
+       gnus-agent-load-alist.
+       (gnus-agent-load-fetched-headers): Remove.
+       (gnus-agent-save-alist): Rewrite to accomodate new format.
+       (gnus-agent-fetch-group-1): Make sure list of articles is in the
+       same order as in gnus-newsgroup-headers.
+       (gnus-agent-expire): Document and implement extra args ARTICLES,
+       GROUP, FORCE.  Do not restrict usage.
+       (gnus-agent-uncached-articles): New function.
+       (gnus-agent-retrieve-headers): Use it.
+       (gnus-agent-regenerate-group): No longer needs to be called from
+       gnus-agent-regenerate.  Individual groups may be regenerated. The
+       regeneration code now fixes duplicate, and mis-ordered, NOV entries.
+       The article fetch dates are validated in the article alist.  The
+       article alist is pruned of entries that do not reference existing
+       NOV entries.  All changes are computed then applied with
+       inhibit-quit bound to t.  As a result, it is now safe to quit out of
+       regeneration.  The optional clean parameter has been replaced with
+       an optional reread parameter.  Clean is no longer necessary as
+       regeneration gets the appropriate setting from
+       gnus-agent-consider-all-articles.  The new reread parameter will
+       result in fetched, or all, articles being marked as unread.
+       (gnus-agent-regenerate): Removed code to regenerate the history
+       file as it is no longer used.
+
+       * gnus-start.el (gnus-make-ascending-articles-unread): New
+       function, for efficient mass-marking.
+
+       * gnus-sum.el (gnus-summary-highlight): Use new face for
+       downloaded articles.
+       (gnus-article-mark): Prefer to indicate read/unread status over
+       downloaded status.
+       (gnus-summary-highlight-line-0): New function, maybe rehighlights
+       line.
+       (gnus-summary-highlight-line): Use new face for downloaded
+       articles.
+       (gnus-summary-insert-old-articles): Improved performance by
+       replacing the initial LIST of older articles with a compressed
+       RANGE of older articles.  Some servers appear to lie about
+       their active range so the original list could contain millions
+       of article numbers.  The range is not expanded into a list
+       until the optional ALL parameter has been applied.
+
+2002-11-18  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-category-mode): Typo in doc string.
+
+2002-11-21  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el:
+       added patch from Andreas Fuchs <asf@void.at> to prevent apply errors
+
+       * spam.el: added `M s t' and `M s x' key mappings
+
+2002-11-20  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-morse-message): Narrow to body.
+
+2002-11-19  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-morse-message): Load
+       morse.el (unmorse-region not autoloaded in Emacs 20 nor XEmacs).
+       (unmorse-region): Autoload it instead.
+
+2002-11-18  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-morse-message): New function.
+       (gnus-summary-wash-map): Bind to `W m'.
+       (gnus-summary-make-menu-bar): Add.
+
+       * nnimap.el (nnimap-request-expire-articles): Compress sequence
+       before storing \Deleted mark on expired articles.
+
+2002-11-17  Shenghuo Zhu <zsh@cs.rochester.edu>
+       Trivial patch from Markus Rost <rost@math.ohio-state.edu>
+
+       * gnus-sum.el (gnus-summary-goto-unread): Doc fix - escape open
+       parens in column 0.
+
+2002-11-17  Juanma Barranquero  <lektu@terra.es>
+
+       * nnweb.el (nnweb-google-create-mapping): Fix typo.
+
+       * nnlistserv.el (nnlistserv-kk-create-mapping): Likewise.
+
+       * gnus-nocem.el (gnus-nocem-liberal-fetch): Likewise.
+
+2002-11-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-set-auto-save-file-name): Use
+       make-directory, to avoid the dependence on gnus-util.
+
+2002-11-16  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-callback-callback-function):
+       (nnimap-callback-buffer): Removed, these cannot be global but must
+       be embedded into the callback.
+       (nnimap-make-callback): New.  Embedd article number, callback and
+       buffer in function.
+       (nnimap-callback, nnimap-request-article-part): Update.
+
+2002-11-15  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mml.el (mml-preview): Bind message-this-is-mail if it is mail.
+
+2002-11-13  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus.el (gnus-summary-line-format): Document %C.
+
+2002-11-11  Simon Josefsson  <jas@extundo.com>
+
+       * pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify): Display
+       output when called interactively.
+
+2002-11-08  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-article-edit-exit): Kill local variables.
+
+       * message.el (message-draft-coding-system): Improve comment; use
+       mm-auto-save-coding-system for the default value.
+
+       * nndraft.el (nndraft-request-article): Revert to the state before
+       2002-10-29; regexp-quote mail-header-separator.
+
+2002-11-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-draft.el (gnus-draft-setup): Set gnus-message-group-art to
+       allow editing of drafts from an nnvirtual group.
+
+2002-11-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nndraft.el (nndraft-request-article): Replace emacs-mule with
+       mm-auto-save-coding-system.
+
+       * message.el (message-draft-coding-system): Default to
+       iso-2022-7bit.
+
+       * mm-util.el (mm-auto-save-coding-system): Undo last change to
+       restore the default value to emacs-mule or escape-quoted.
+
+2002-11-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-article-encrypt-body): Inhibit encrypting of
+       a delayed or a queued article as well as a draft.
+
+       * gnus-sum.el (gnus-summary-edit-article): Inhibit editing of a
+       delayed or a queued article in the raw format; treat a delayed
+       article as a raw article as well as a draft.
+       (gnus-summary-setup-default-charset): Clear gnus-newsgroup-charset
+       for the delayed group.
+
+       * nndraft.el (nndraft-request-article): Ignore auto save files for
+       a delayed or a queued article; don't bother to decode a queued
+       article; don't bind nnmail-file-coding-system for a queued article.
+
+       * nnmail.el (nnmail-split-fancy-with-parent): Ignore the delayed
+       and the queue group.
+
+2002-11-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-group.el (gnus-group-delete-group):
+       gnus-cache-active-hashtb might be void.
+
+2002-11-02  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-gpg.el (pgg-gpg-encrypt-region): Makes PGG respect the
+       setting of the default user ID.  From Raymond Scholz
+       <ray-2002@zonix.de>.
+
+2002-11-01  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-bodies.el (mm-body-encoding): Don't return 8bit for 7bit
+       charset.
+
+2002-10-31  Ted Zlatanov <tzz@lifelogs.com>
+       From Alex Schroeder <alex@emacswiki.org>
+       * 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.
+
+2002-10-31  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-util.el (gnus-user-date-format-alist): Clarify and correct
+       documentation.
+
+2002-10-28  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-agent-fetched-headers)
+       (gnus-agent-load-fetched-headers)
+       (gnus-agent-save-fetched-headers): Remove variable and two
+       functions.  Kevin Greiner's version of gnus-agent-fetch-headers
+       works better.
+       (gnus-agent-fetch-headers): New implementation from Kevin
+       Greiner.  Uses gnus-agent-article-alist to store information
+       about fetched messages which aren't on the server anymore.  The
+       trick is to return a list of considered messages to the caller,
+       but to only fetch those which haven't been fetched yet.
+
+2002-10-30  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-def.el (pgg-passphrase-cache-expiry): New, defcustom.
+
+       * pgg.el (pgg-passphrase-cache-expiry): Removed.
+
+2002-10-30  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * mm-view.el (mm-w3m-local-map-property): Make it work with older
+       versions of emacs-w3m than 1.3.3.
+
+       * lpath.el: Bind w3m-minor-mode-map.
+
+       * mm-view.el (mm-w3m-mode-command-alist)
+       (mm-w3m-mode-dont-bind-keys, mm-w3m-mode-ignored-keys): Removed.
+       (mm-w3m-mode-map): Undefined for Emacs21 and XEmacs.
+       (mm-setup-w3m): Simplified.
+       (mm-w3m-local-map-property): New function.
+       (mm-inline-text-html-render-with-w3m): Use it.
+
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Use
+       mm-w3m-local-map-property.
+
+2002-10-29  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-util.el (mm-auto-save-coding-system): Default to
+       iso-2022-7bit.
+
+       * nndraft.el (nndraft-request-article): Decode an article using
+       the coding-system emacs-mule if it seems to have been saved using
+       emacs-mule.
+       (nndraft-request-replace-article): Use message-draft-coding-system
+       instead of mm-auto-save-coding-system for the draft or delayed
+       group.
+
+2002-10-28  Josh  <huber@alum.wpi.edu>
+
+       * mml.el (mml-mode-map): Fixed keybindings for mml-secure-*
+       functions.
+
+2002-10-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+       From mah@everybody.org (Mark A. Hershberger).
+
+       * mm-url.el (mm-url-insert-file-contents): Make it return the same
+       type values ("url" size) regardless of the values of
+       mm-url-use-external.
+
+2002-10-26  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * nnimap.el (nnimap-request-article-part): Try harder to show
+       group name in debugging message.
+
+2002-10-25  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-agent-save-fetched-headers): Create
+       directory if it doesn't exist.
+       (gnus-agent-fetch-headers): Remove old cruft that tried to
+       abstain from downloading articles more than once if
+       gnus-agent-consider-all-articles was true.  This is now done
+       properly via the .fetched files.
+
+2002-10-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nndraft.el (nndraft-request-article): Treat delayed articles
+       like drafts.
+
+2002-10-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-agent.el (gnus-agent-load-alist): Fix parenthesis.
+
+2002-10-24  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-agent-save-alist, gnus-agent-load-alist):
+       Remove unused optional arg DIR and corresponding code.
+
+       * nnimap.el (nnimap-request-article-part): Include group name in
+       debugging output.
+
+2002-10-24  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus-agent.el (gnus-agent-fetch-headers): Add some comments.
+
+2002-10-23  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@uni-duisburg.de>
+
+       * gnus-agent.el (gnus-agent-fetched-headers): New variable,
+       contains range of headers that have been fetched by the agent
+       already.  Compare gnus-agent-article-alist.
+       (gnus-agent-file-header-cache): Like
+       gnus-agent-file-loading-cache, but for gnus-agent-fetched-headers.
+       (gnus-agent-fetch-headers): Improve comment.  Revert to old
+       seen/recent logic.
+       Remember which headers have been fetched before and don't fetch
+       them again the next time round.
+       (gnus-agent-load-fetched-headers)
+       (gnus-agent-save-fetched-headers): New functions, for remembering
+       which headers have been fetched before.
+
+2002-10-23  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el: Remove useless bindings.
+
+2002-10-22  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-execute-command): Disable visual
+       features while searching.
+
+2002-10-22  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * pgg.el (pgg-snarf-keys): Do not refer unbinded local variables.
+
+2002-10-22  Simon Josefsson  <jas@extundo.com>
+
+       * pgg.el (pgg-encrypt, pgg-decrypt, pgg-sign, pgg-verify)
+       (pgg-snarf-keys): Add.
+
+2002-10-22  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el: Fbind bbdb-records.
+
+       * spam.el: Don't autoload bbdb-records.
+
+2002-10-22  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * spam.el: Set autoload for bbdb-records after loading bbdb-com to
+       prevent inf-loop.
+
+2002-10-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el: Removed some test lines.
+       More test.
+
+2002-10-21  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-agent.el (gnus-agent-fetch-headers): Remove articles that
+       are known to be downloaded already.
+
+2002-10-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-view.el (mm-text-html-renderer-alist): Add w3m-standalone.
+       (mm-text-html-washer-alist): Ditto.
+
+2002-10-19  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * nnheader.el (nnheader-remove-body): Fix an error of detecting
+       boundary between headers and body.
+       * nnml.el (nnml-parse-head): Ditto.
+
+2002-10-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-generate-active): Ignore any bogus
+       entries.
+
+       * gnus-group.el (gnus-fetch-group): Allow an optional
+       specification of the articles to select.
+
+       * gnus-srvr.el (gnus-server-prepare): Removed superfluous cdr.
+
+2002-10-20  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): After fetching
+       headers from the group, update variable `articles' to contain
+       only those numbers where headers exist.  (When fetching all
+       articles in a group, Gnus creates lots of numbers where there is
+       no articles.)
+
+2002-10-20  Steve Youngs  <youngs@xemacs.org>
+
+       * pgg-parse.el (pgg-parse-public-key-algorithm-alist): XEmacs
+       doesn't have the 'alist custom type, use cons cells instead.
+       (pgg-parse-symmetric-key-algorithm-alist): Ditto.
+       (pgg-parse-hash-algorithm-alist): Ditto.
+       (pgg-parse-compression-algorithm-alist): Ditto.
+       (pgg-parse-signature-type-alist): Ditto.
+
+       * pgg-gpg.el (pgg-gpg-extra-args): Fix custom mismatch.
+
+       * pgg-pgp5.el (pgg-pgp5-extra-args): Ditto.
+
+       * pgg-pgp.el (pgg-pgp-extra-args): Ditto.
+
+2002-10-19  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-open-server): Check imap-state in IMAP server
+       buffer.
+
+2002-10-18  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-spec.el (gnus-make-format-preserve-properties)
+       (gnus-xmas-format, gnus-parse-simple-format): Preserve text
+       properties also on XEmacs.  `gnus-xmas-format' is like format but
+       preserves text properties on XEmacs (though it only understands
+       simple format specs).  The variable
+       `gnus-make-format-preserve-properties' controls whether the
+       function is used, and is checked in `gnus-parse-simple-format'.
+       Patch by Paul Moore <gustav@morpheus.demon.co.uk>.
+
+       * gnus-agent.el (gnus-agent-fetch-articles): More debugging
+       output.
+       (gnus-agent-consider-all-articles): New variable.
+       (gnus-agent-get-undownloaded-list): Comment that marks todo item.
+       (gnus-agent-fetch-headers): Depending on
+       gnus-agent-consider-all-articles, maybe get all articles.
+       (gnus-category-predicate-alist, gnus-agent-read-p): New predicate
+       `read'.
+       (gnus-predicate-imples-unread): New function.
+       (gnus-agent-fetch-headers): Optimize to call
+       gnus-list-of-unread-articles if that is sufficient.
+       Check unseen and recent instead of seen and recent.
+       (gnus-agent-fetch-headers): Abstain from calling
+       gnus-list-range-intersection if range (a . b) would have (> a b).
+
+2002-10-18  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-send-mail): Make it possible to perform
+       edebug-defun.
+
+2002-10-18  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-button-man-handler): Change default to
+       `manual-entry' (defined in both emacsen).
+       (gnus-button-man-handler): Remove emacsen difference and use
+       `manual-entry'.
+
+2002-10-18  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * spam.el: Wrap autoload settings for bbdb-records,
+       executable-find and ifile-spam-filter with eval-and-compile.
+       (spam-display-buffer-contents): Remove.
+       (spam-bogofilter-score): Merge spam-display-buffer-contents.
+
+2002-10-17  Ted Zlatanov  <tzz@lifelogs.com>
+
+       * spam.el (spam-display-buffer-contents): New function.
+       (spam-bogofilter-score): use spam-display-buffer-contents, patch
+       from Katsumi Yamaoka <yamaoka@jpl.org>.
+
+2002-10-17  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * nnheader.el (nnheader-parse-naked-head): New function.
+       (nnheader-parse-head): Use the above function, in order to handle
+       continuation lines properly.
+       (nnheader-remove-body): New function.
+       (nnheader-remove-cr-followed-by-lf): New function.
+       (nnheader-ms-strip-cr): Use the above function.
+
+       * gnus-agent.el (gnus-agent-regenerate-group): Call
+       `nnheader-remove-body'; use `nnheader-parse-naked-head' instead of
+       `nnheader-parse-head'.
+       * gnus-cache.el (gnus-cache-possibly-enter-article): Ditto.
+
+       * gnus-msg.el (gnus-inews-yank-articles): Do not unfold
+       continuation lines by itself; call `nnheader-parse-naked-head'
+       instead of `nnheader-parse-head'.
+       * nndiary.el (nndiary-parse-head): Ditto.
+       * nnfolder.el (nnfolder-parse-head): Ditto.
+       * nnimap.el (nnimap-retrieve-headers-progress): Ditto.
+       * nnmaildir.el (nnmaildir--update-nov): Ditto.
+       * nnml.el (nnml-parse-head): Ditto.
+
+2002-10-17  Steve Youngs  <youngs@xemacs.org>
+
+       * gnus-art.el (gnus-button-man-handler): Add 'manual-entry' for
+       XEmacs, default to it if featurep 'xemacs.
+
+2002-10-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * spam-stat.el: Check for the existence of hash functions instead
+       of the Emacs version to decide whether to load cl.  Suggested by
+       Kai Gro\e,A_\e(Bjohann.
+
+2002-10-15  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-agent.el (gnus-agent-fetch-selected-article): Open history
+       if it isn't open yet.
+
+2002-10-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-group.el: Require mm-url only when compiling.
+       (gnus-group-fetch-charter): Require mm-url.
+
+       * spam-stat.el: Require cl for the functions gethash,
+       hash-table-count, make-hash-table and mapc for Emacs 20.
+       (puthash): Alias to cl-puthash for Emacs 20.
+       (with-syntax-table): New macro for Emacs 20.
+
+2002-10-12  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-spec.el (gnus-pad-form): Use gnus-string-width-function.
+
+2002-10-11  Ted Zlatanov <tzz@lifelogs.com>
+
+       * spam.el (spam-check-ifile): added ifile as a spam checking
+       backend, and spam-use-ifle as the variable to toggle that check.
+
+2002-10-12  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-beginning-of-line): New variable.
+       (message-beginning-of-line): Use it.
+
+2002-10-11  Ted Zlatanov <tzz@lifelogs.com>
+
+       * spam.el: more compilation fixes for BBDB
+
+       * spam-stat.el added code from Alex Schroeder <alex@gnu.org>
+       (spam-stat-reduce-size): Interactive.
+       (spam-stat-reset): New function.
+       (spam-stat-save): Interactive.
+
+2002-10-11  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.el: Autoload gnus-delay-initialize.
+
+       * message.el: Autoload gnus-delay-article.
+
+2002-10-11  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-spec.el (gnus-balloon-face-function): Use the help-echo
+       text property in Emacs.
+
+2002-10-11  Simon Josefsson  <jas@extundo.com>
+
+       * mml2015.el (mml2015-pgg-decrypt, mml2015-pgg-clear-decrypt)
+       (mml2015-pgg-verify, mml2015-pgg-clear-verify): Remove CR.
+
+       * mml1991.el (mml1991-pgg-sign): Remove CR.
+
+2002-10-10  Simon Josefsson  <jas@extundo.com>
+
+       * mml2015.el (mml2015-pgg-decrypt): Set gnus details even when
+       decrypt failed.
+       (mml2015-trust-boundaries-alist): Removed.
+       (mml2015-gpg-extract-signature-details): Don't use it.
+       (mml2015-unabbrev-trust-alist): New.
+       (mml2015-gpg-extract-signature-details): Use it.
+
+2002-10-10  Ted Zlatanov <tzz@lifelogs.com>
+
+       * spam.el: compilation fixes, spam-check-bbdb function is nil if no
+       BBDB installed
+
+       * spam-stat.el: added code from Alex Schroeder <alex@gnu.org> to do
+       statistical analysis of spam in Lisp only
+
+2002-10-10  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-open-server): Re-open server if it isn't in
+       auth, selected or examine state.
+
+       * pgg-gpg.el (pgg-gpg-verify-region): Filter out stuff into output
+       buffer and error buffer depending on type of information.
+
+       * mml2015.el (mml2015-gpg-extract-signature-details): Parse
+       --status-fd stuff even if gpg.el is not used (revert earlier
+       change).
+       (mml2015-pgg-{clear-,}verify): Store both output and errors as
+       gnus details.
+       (mml2015-pgg-{clear-,}verify): Extract signature info from errors
+       buffer.
+
+       * pgg.el (pgg-verify-region): Use it.
+
+       * pgg-def.el (pgg-query-keyserver): New variable.
+
+       * pgg.el (pgg-decrypt-region): Bind pgg-default-user-id to
+       key-identifier in packet.  Is this a good idea?
+
+       * mml.el (mml-mode-map): Add security commands that operates on
+       MIME parts.
+       (mml-menu): And menu items for them.
+
+       * mml1991.el (mml1991-pgg-encrypt): Remove headers.
+
+       * mml.el (mml-parse-1): Support sender in #secure tags.
+
+       * mml1991.el (mml1991-pgg-sign): Only use message-sender if it is
+       defined.
+
+       * mml-sec.el (mml-smime-encrypt-buffer): Warn about combined signing.
+       (mml-pgp-encrypt-buffer): Support combined signing.
+
+       * mml1991.el (mml1991-mailcrypt-encrypt): Support combined signing.
+       (mml1991-gpg-encrypt): Ditto.
+       (mml1991-pgg-encrypt): Ditto.
+       (mml1991-encrypt): Pass sign parameter.
+
+       * mml-sec.el (mml-signencrypt-style-alist): Defcustom.
+       (mml-signencrypt-style): Mention the variable.
+
+2002-10-09  Simon Josefsson  <jas@extundo.com>
+
+       * mml1991.el (mml1991-pgg-sign): Bind pgg-default-user-id, not
+       pgg-gpg-user-id.
+
+       * pgg.el (pgg-insert-url-with-w3): Ignore errors.
+       (pgg-fetch-key-function): Nil if w3 is not installed.
+
+2002-10-08  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-agent.el (gnus-agent-fetch-selected-article): Bind
+       gnus-agent-current-history.
+
+2002-10-06  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-parse-status): Don't use read to read token.
+
+2002-10-05  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-agent.el (gnus-agent-fetch-selected-article): Do nothing
+       for methods not covered by the agent, and when unplugged.
+
+2002-10-05  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-gpg.el (pgg-gpg-encrypt-region): Query passphrase when
+       signing.
+
+       * gnus-agent.el (gnus-agent-read-servers): If getting method from
+       a named server fails, ignore the server.
+
+       * mml1991.el (mml1991-pgg-sign): Do QP.
+
+       * pgg-gpg.el (pgg-gpg-encrypt-region): Make signencrypt really
+       work.
+
+2002-10-04  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-gpg.el (pgg-gpg-encrypt-region): Make signencrypt work.
+
+       * pgg-pgp.el (pgg-pgp-verify-region): Inline
+       binary-write-decoded-region from MEL.
+
+       * pgg.el (pgg-encrypt-region): Support sign.
+
+       * pgg-gpg.el (pgg-gpg-encrypt-region): Ditto.
+
+       * mml2015.el (mml2015-pgg-encrypt): Ditto.
+
+       * pgg.el, pgg-def.el, pgg-parse.el, pgg-gpg.el, pgg-pgp5.el,
+       pgg-pgp6.el: Moved from ../pgg/.  Modifications compared to EMIKO
+       branch where PGG was taken from in the ChangeLog entries below.
+
+2002-10-01  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-pgp.el: Don't require mel.  Don't use luna.
+       (pgg-scheme-pgp-instance, pgg-make-scheme-pgp): Remove.
+       (pgg-pgp-process-region): Use expand-file-name instead of concat.
+       (pgg-pgp-process-region): Don't use binary-funcall.
+
+       * pgg-pgp5.el (pgg-pgp5-process-region): Don't use binary-funcall.
+
+       * pgg-gpg.el (pgg-gpg-process-region): Use expand-file-name
+       instead of concat.
+
+       * pgg-pgp5.el (pgg-pgp5-process-region): Ditto.
+
+2002-09-29  Simon Josefsson  <jas@extundo.com>
+
+       * pgg-parse.el (pgg-char-int, pgg-string-as-unibyte): Prevent byte
+       compile warnings.
+
+       * pgg.el (pgg-decrypt-region): Don't parse packet.
+
+       * pgg.el, pgg-gpg.el, pgg-pgp5.el: Don't depend on luna.el.
+
+2002-09-29  Daiki Ueno <ueno@unixuser.org>
+
+       * pgg.el: Remove dependency on calist.el.
+
+2002-09-28  Simon Josefsson  <jas@extundo.com>
+
+       * pgg.el (pgg-temporary-file-directory): New variable.
+       (pgg-verify-region): Don't assume set-buffer-multibyte exists.
+
+       * pgg-pgp5.el (pgg-pgp5-process-region, pgg-scheme-verify-region)
+       (pgg-scheme-snarf-keys-region): Use pgg-temporary-file-directory.
+
+       * pgg-parse.el (pgg-char-int): Defalias.
+       (pgg-format-key-identifier, pgg-byte-after, pgg-read-byte)
+       (pgg-read-bytes, pgg-read-body): Use it.
+       (pgg-decode-packets): Don't use MEL, use base64-*.
+       (pgg-parse-armor): Don't assume set-buffer-multibyte exists.
+       (pgg-string-as-unibyte): Defalias.
+       (pgg-parse-armor-region): Use it.
+
+       * pgg-gpg.el (pgg-gpg-process-region): Use
+       pgg-temporary-file-directory.
+
+       * luna.el: Don't def-edebug.
+
+       * pgg-pgp5.el (pgg-scheme-verify-region): Inline
+       binary-write-decoded-region from MEL.
+
+       * pgg-pgp5.el, pgg-gpg.el: Don't require mel.
+
+       * alist.el, calist.el: Don't require product/APEL.
+
+       * pgg-parse.el (top-level): Remove dependency on static.el,
+       pccl.el, mel.el.
+       (pgg-parse-crc24, pgg-parse-crc24-string): Only define if
+       `define-ccl-program' is boundp, instead of using broken.
+
+2002-10-01  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-required-mail-headers): Remove Lines:.
+
+2002-10-03  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Jesper Harder.
+
+       * 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-group-fetch-control to summary key map and menu.
+
+2002-10-03  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir--group-maxnum-art): fix maximum article
+       number when there are no articles.
+
+2002-10-03  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-agent.el (gnus-agent-summary-fetch-group): Optional prefix
+       arg ALL means to fetch all articles, not only downloadable ones.
+       (gnus-agent-fetch-selected-article): New function for
+       gnus-select-article-hook or gnus-mark-article-hook.
+
+2002-10-02  Katsumi Yamaoka  <yamaoka@jpl.org>
+       From Peter von der Ahe <nospam2159@daimi.au.dk>.
+
+       * gnus-ems.el (gnus-x-splash): Set coding-system-for-read to
+       raw-text.
+
+2002-09-30  Ted Zlatanov <tzz@lifelogs.com>
+
+       * spam.el: merged changes from pinard@iro.umontreal.ca (Fran\e,Ag\e(Bois
+       Pinard).
+       Major revamp of the code, documentation is in comments in the file
+       for now.
+
+2002-09-30  Simon Josefsson  <jas@extundo.com>
+
+       * mml2015.el (mml2015-pgg-clear-verify): Verifying in a unibyte
+       buffer seem to be needed?
+
+2002-09-29  Simon Josefsson  <jas@extundo.com>
+
+       * mml1991.el (pgg-output-buffer, pgg-errors-buffer): Prevent byte
+       compile warnings.
+
+       * mml1991.el (mml1991-function-alist): Add pgg.
+       (mml1991-pgg-sign, mml1991-pgg-encrypt): New functions.
+       (mml1991-pgg-encrypt): Fix recipients querying.
+
+2002-09-28  Simon Josefsson  <jas@extundo.com>
+
+       * mml2015.el (autoload): Autoload correct files.  Trivial patch
+       from dme@dme.org.
+       (mml2015-pgg-decrypt, mml2015-pgg-verify): Make sure either nil or
+       handle is returned.
+
+2002-09-27  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-start.el (gnus-fixup-nnimap-unread-after-getting-new-news):
+       Protect against non-existent of `nnimap-mailbox-info'.
+
+2002-09-27  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-start.el (gnus-fixup-nnimap-unread-after-getting-new-news): New.
+       (gnus-setup-news-hook): Use it.
+       (gnus-after-getting-new-news-hook): Ditto.
+
+       * nnimap.el (nnimap-fixup-unread-after-getting-new-news): Remove.
+
+2002-09-27  Katsumi Yamaoka  <yamaoka@jpl.org>
+       From Mats Lidell <matsl@contactor.se>.
+
+       * gnus-art.el (gnus-article-mode-syntax-table): Replace "-" to " ".
+
+2002-09-27  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * gnus-sum.el (gnus-nov-parse-line): When an error is signaled in
+       the part to decode encoded words, use raw words instead of decoded
+       words.
+
+2002-09-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnimap.el (nnimap-update-unseen): Use gnus-gethash-safe.
+
+       * mm-view.el (mm-w3m-mode-ignored-keys): New variable.
+       (mm-setup-w3m): Use it.
+
+2002-09-27  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-article-mode-syntax-table): Make M-. work in
+       article buffers.
+
+       * nnimap.el (nnimap-fixup-unread-after-getting-new-news): Autoload
+       it just in case.
+       (nnimap-update-unseen): New function; update unseen count in
+       `n-m-info'.
+       (nnimap-close-group): Call it.
+
+       * gnus-start.el (gnus-setup-news-hook): Add n-f-u-a-g-n-n.
+       (gnus-after-getting-new-news-hook): Ditto.
+
+       * nnimap.el (nnimap-retrieve-groups): Move the quick mail check
+       message into verboselevel 9.  Change slow mail check message.
+       (nnimap-retrieve-groups): Use prefixed names in n-mailbox-info.
+       (nnimap-fixup-unread-after-getting-new-news): New function, to be
+       used as a hook after getting new mail.
+
+2002-09-26  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-parse-resp-text-code): The UNSEEN value in
+       SELECT/EXAMINE is first unseen article, not number of unseen
+       articles.  Make them distinct by renaming the former to
+       `first-unseen' instead of `unseen'.
+
+       * nnimap.el (nnimap-retrieve-groups): Get uidvalidity and unseen
+       too.
+       (nnimap-retrieve-groups): Don't used cached data if uidvalidity
+       changed.
+       (nnimap-retrieve-groups): Store uidvalidity and unseen data too.
+
+       * gnus-int.el (gnus-server-unopen-status): Defcustom.
+
+       * mml-sec.el (mml-signencrypt-style): Docstring to font-lock
+       better.
+
+       * mml2015.el (mml2015-pgg-decrypt): Only add security information
+       if dissecting resulting buffer actually had any information.
+
+2002-09-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-group.el (gnus-group-sort-by-method): Remove `symbol-name'
+       because the function `string<' allows symbols.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Ditto.
+
+2002-09-25  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-forward-make-body): Revert an early change
+       because 8-bit utf-8 emails.
+
+2002-09-25  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.umu.se>
+
+       * gnus-agent.el (gnus-category-line-format): Doc fixes (mostly added
+       links to Info)
+       * gnus-art.el (gnus-treat-highlight-signature):
+       * gnus-art.el (gnus-treat-buttonize):
+       * gnus-art.el (gnus-treat-buttonize-head):
+       * gnus-art.el (gnus-treat-emphasize):
+       * gnus-art.el (gnus-treat-strip-cr):
+       * gnus-art.el (gnus-treat-unsplit-urls):
+       * gnus-art.el (gnus-treat-leading-whitespace):
+       * gnus-art.el (gnus-treat-hide-headers):
+       * gnus-art.el (gnus-treat-hide-boring-headers):
+       * gnus-art.el (gnus-treat-hide-signature):
+       * gnus-art.el (gnus-treat-fill-article):
+       * gnus-art.el (gnus-treat-hide-citation):
+       * gnus-art.el (gnus-treat-hide-citation-maybe):
+       * gnus-art.el (gnus-treat-strip-list-identifiers):
+       * gnus-art.el (gnus-treat-strip-pgp):
+       * gnus-art.el (gnus-treat-strip-pem):
+       * gnus-art.el (gnus-treat-strip-banner):
+       * gnus-art.el (gnus-treat-highlight-headers):
+       * gnus-art.el (gnus-treat-highlight-citation):
+       * gnus-art.el (gnus-treat-date-ut):
+       * gnus-art.el (gnus-treat-date-local):
+       * gnus-art.el (gnus-treat-date-english):
+       * gnus-art.el (gnus-treat-date-lapsed):
+       * gnus-art.el (gnus-treat-date-original):
+       * gnus-art.el (gnus-treat-date-iso8601):
+       * gnus-art.el (gnus-treat-date-user-defined):
+       * gnus-art.el (gnus-treat-strip-headers-in-body):
+       * gnus-art.el (gnus-treat-strip-trailing-blank-lines):
+       * gnus-art.el (gnus-treat-strip-leading-blank-lines):
+       * gnus-art.el (gnus-treat-strip-multiple-blank-lines):
+       * gnus-art.el (gnus-treat-unfold-headers):
+       * gnus-art.el (gnus-treat-fold-headers):
+       * gnus-art.el (gnus-treat-fold-newsgroups):
+       * gnus-art.el (gnus-treat-overstrike):
+       * gnus-art.el (gnus-treat-display-xface):
+       * gnus-art.el (gnus-treat-display-smileys):
+       * gnus-art.el (gnus-treat-from-picon):
+       * gnus-art.el (gnus-treat-mail-picon):
+       * gnus-art.el (gnus-treat-newsgroups-picon):
+       * gnus-art.el (gnus-treat-body-boundary):
+       * gnus-art.el (gnus-treat-capitalize-sentences):
+       * gnus-art.el (gnus-treat-fill-long-lines):
+       * gnus-art.el (gnus-treat-play-sounds):
+       * gnus-art.el (gnus-treat-translate):
+       * gnus-art.el (gnus-treat-x-pgp-sig):
+       * gnus-art.el (gnus-mime-button-line-format):
+       * gnus-art.el (gnus-button-man-level):
+       * gnus-art.el (gnus-button-emacs-level):
+       * gnus-cus.el (gnus-group-parameters):
+       * gnus-gl.el (bbb-build-mid-scores-alist):
+       * gnus-group.el (gnus-group-line-format):
+       * gnus-mlspl.el (gnus-group-split-setup):
+       * gnus-mlspl.el (gnus-group-split):
+       * gnus-msg.el (gnus-mailing-list-groups):
+       * gnus-msg.el (gnus-posting-styles):
+       * gnus-nocem.el (gnus-nocem-issuers):
+       * gnus-score.el (gnus-score-regexp-bad-p):
+       * gnus-srvr.el (gnus-server-line-format):
+       * gnus-topic.el (gnus-topic-line-format):
+       * gnus.el (gnus-summary-line-format):
+       * mail-source.el (mail-sources):
+       * message.el (message-subscribed-address-file):
+       * nnmail.el (nnmail-split-fancy):
+
+2002-09-24  Evgeny Roubinchtein  <zhenya@freeshell.org>
+
+       * mail-source.el(mail-source-run-script): use `functionp' to test
+       whether the argument `script' is in fact a function.
+       (mail-sources): adjust the defcustom to allow users to specify a
+       function or a string as the value of the `:prescript' and
+       `:postscript' arguments of the `file' and `pop3' mail sources.
+
+2002-09-25  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir--grp-add-art): fix minimum article
+       number when article 1 does not exist.
+
+2002-09-25  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * 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.
+       (gnus-button-handle-describe-function)
+       (gnus-button-handle-describe-variable): Doc fix.  From Reiner Steib.
+       (gnus-button-handle-describe-key, gnus-button-handle-apropos)
+       (gnus-button-handle-apropos-command): Doc fix.  From Reiner Steib.
+
+2002-09-25  Mark A. Hershberger  <mah@everybody.org>
+       Trivial patch.
+
+       * nnrss.el (nnrss-save-server-data): Save nnrss-group-alist in
+       the file.
+
+2002-09-24  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-1): Create nndraft:queue, nndraft:drafts.
+
+2002-09-24  Simon Josefsson  <jas@extundo.com>
+
+       * mml2015.el (top-level): Require mm-util for mm-make-temp-file.
+       (mml2015-use): Prefer PGG if installed.
+       (mml2015-function-alist): Add PGG wrappers.
+       (mml2015-gpg-extract-signature-details): Check mml2015-use too.
+       (mml2015-gpg-extract-signature-details): PGG strips "gpg: "
+       prefix, make regexp optionally skip it.
+       (mml2015-pgg-decrypt, mml2015-pgg-clear-decrypt)
+       (mml2015-pgg-verify, mml2015-pgg-clear-verify, mml2015-pgg-sign)
+       (mml2015-pgg-encrypt): New functions.
+       (defvar, autoload): Prevent byte-compile warnings.
+
+2002-09-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+       From TSUCHIYA Masatoshi <tsuchiya@namazu.org>.
+
+       * gnus-art.el (article-strip-banner): Check for the existence of
+       from header.
+
+2002-09-23  Kai Gro\e,b_\e(Bjohann  <grossjoh@ls6.informatik.uni-dortmund.de>
+
+       * 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  <prj@po.cwru.edu>
+       From Josh Huber.
+
+       * nnmaildir.el (nnmaildir--update-nov): fix wrong-type error when
+       nnmail-extra-headers is non-nil.
+
+2002-09-23  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el: Store article numbers persistently.  General
+       revision.
+       (nnmaildir-request-expire-articles): handle 'immediate and 'never
+       for nnmail-expiry-wait; delete instead of moving if 'force is
+       given.
+
+2002-09-23  Simon Josefsson  <jas@extundo.com>
+       Trivial fix from beaker@iavmb.pl (Krzysztof J\e,Bj\e(Bdruczyk).
+
+       * smime.el (smime-sign-buffer): Get key and extra certs.
+       (smime-get-key-with-certs-by-email): Utility function.
+
+2002-09-21  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       Trivial patch from Micha Wiedenmann <mw-u1@gmx.de>
+
+       * gnus-soup.el (gnus-soup-add-article): Mark as read only when the
+       article exists.
+
+2002-09-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-next-group): Switch to the summary buffer.
+
+2002-09-20  Kai Gro\e,b_\e(Bjohann  <grossjoh@ls6.informatik.uni-dortmund.de>
+       From Reiner Steib.
+
+       * gnus-art.el (gnus-button-handle-custom,
+       gnus-button-handle-mid-or-mail,
+       gnus-button-handle-describe-{function,variable,key},
+       gnus-button-handle-apropos{,command,variable}): New functions.
+       (gnus-button-prefer-mid-or-mail,gnus-button-guessed-mid-regexp,
+       gnus-button-{man,emacs,mail}-level): New variables.
+       (gnus-button-alist): Use the above to buttonize emacs and mail
+       related links.
+
+2002-09-18  Juanma Barranquero  <lektu@terra.es>
+
+       * gnus-int.el (gnus-status-message): Fix spacing.
+
+       * imap.el (imap-continuation): Fix typos.
+
+2002-09-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-configure-posting-styles): Sort results.
+
+       * gnus-art.el (gnus-article-reply-with-original): Correct
+       with-current-buffer scope.
+
+       * message.el (message-completion-alist): Add Reply-To, From, etc.
+
+2002-09-18  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-request-expire-articles): Make flag setting
+       conditional.  From Nevin Kapur <nevin@jhu.edu>.
+
+2002-09-17  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-expiry-target): Don't search for which
+       articles exists here.
+       (nnimap-request-expire-articles): Do it here instead.  Only expire
+       when articles are found.  Suggested by Nevin Kapur
+       <nevin@jhu.edu>.
+
+2002-09-17  Kai Gro\e,A_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Reiner Steib <reiner.steib@gmx.de>.
+
+       * message.el (message-strip-subject-trailing-was)
+       (message-change-subject, message-add-archive-header)
+       (message-xpost-fup2-header, message-xpost-insert-note)
+       (message-xpost-fup2, message-reduce-to-to-cc): New functions
+       adopted from message-utils.el.  Add functions to the keymap, mode
+       describtion and menu.
+       (message-change-subject,message-xpost-fup2): Signal error if
+       current header is empty.
+       (message-xpost-insert-note): Changed insert position.
+       (message-archive-note): Ensure to insert note in message body (not
+       in head).
+       (message-archive-header, message-archive-note)
+       (message-xpost-default, message-xpost-note, message-fup2-note)
+       (message-xpost-note-function): New variables adopted from
+       message-utils.el.  Changed some doc-strings.
+       (message-mark-insert-{begin,end}): Rename from
+       message-{begin,end}-inserted-text-mark (message-utils.el), changed
+       values.
+       (message-subject-trailing-was-query)
+       (message-subject-trailing-was-ask-regexp)
+       (message-subject-trailing-was-regexp): New variables.
+       (message-to-list-only): Added doc-string and menu entry.
+
+       * message-utils.el: Removed.  Functions are now in message.el.
+
+2002-09-16  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-reply-with-original,
+       gnus-article-followup-with-original): Switch to
+       gnus-summary-buffer before reply/followup.
+
+2002-09-15  John Paul Wallington  <jpw@shootybangbang.com>
+
+       * gnus-sum.el (gnus-summary-toggle-header): The article window may
+       not exist. Toggle it anyway.
+
+2002-09-13  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-copy-article-buffer): Bind mail-header-separator.
+
+       * gnus-art.el (article-fill-long-lines): Fill-paragraph properly.
+       Trivial patch from Urban Engberg <ue@ccieurope.com>.
+
+       * rfc2047.el (message-posting-charset): Defvar it.
+       (rfc2047-charset-encoding-alist): Use B for iso-8859-7 and
+       iso-8859-8. Fix doc.  Suggested by Dave Love <fx@gnu.org>.
+
+       * mail-source.el (mail-source-fetch): Hide password.
+
+       * gnus-sum.el (gnus-summary-next-group): Semi-exit only when needed.
+
+2002-09-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+       From John Paul Wallington <jpw@shootybangbang.com>.
+
+       * gnus.el (gnus-visual, gnus-meta): Fix typo.
+
+2002-09-11  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-article-address-banner-alist): Doc fix.
+
+2002-09-11  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-expiry-target): Only expiry-target existing articles.
+       (nnimap-split-rule): Doc fix.
+       (nnimap-request-expire-articles): Cleanup code.
+
+2002-09-11  Katsumi Yamaoka  <yamaoka@jpl.org>
+       From TSUCHIYA Masatoshi <tsuchiya@namazu.org>.
+
+       * gnus-art.el (gnus-article-address-banner-alist): New option.
+       (article-strip-banner): Refer the above option to split banners of
+       free mail servers, when no group parameter is specified.
+
+2002-09-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nntp.el (nntp-wait-for-string): Check for a process in the
+       current buffer instead of `nntp-server-buffer'.
+
+2002-09-09  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-button-man-handler): New variable.
+       (gnus-button-alist): Use g-b-handle-man.
+       (gnus-button-handle-man): New, call g-b-man-handler.
+
+2002-09-08  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-button-alist): Buttonize man page links.
+
+2002-09-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-dumbquotes-map): Add \230.
+
+2002-09-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-srvr.el (gnus-browse-make-menu-bar): Add "d".
+
+       * gnus-sum.el (gnus-summary-limit-to-unseen): New command and
+       keystroke.
+
+       * gnus-srvr.el (gnus-browse-describe-group): New command and
+       keystroke.
+
+2002-09-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-article-treat-body-boundary): Don't quote a
+       value for gnus-decoration property.
+
+2002-09-06  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnmail.el (nnmail-cache-fetch-group): Don't return "" (empty
+       string) as group name in case we have a CRLF in the file.
+
+2002-09-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * rfc1843.el (rfc1843-decode-loosely): Move to mime customization
+       group.
+       (rfc1843-decode-hzp): do.
+       (rfc1843-newsgroups-regexp): do.
+
+2002-09-04  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-canlock-generate): Make sure sha1 doesn't
+       call external programs.
+
+2002-09-03  Simon Josefsson  <jas@extundo.com>
+
+       * nntp.el (nntp-wait-for-string): Dont infloop if process died.
+
+       * gnus-agent.el (gnus-agent-batch): Add doc.
+
+2002-09-03  Josh Huber  <huber@alum.wpi.edu>
+
+       * gnus-msg.el (gnus-summary-handle-replysign): Change the order we
+       check for signed and encrypted parts.
+       * mml.el (mml-parse-1): Correct small typo which preventing
+       setting recipients in a secure tag.
+
+2002-09-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-util.el (mm-coding-system-priorities): Default to a list of
+       iso-2022-jp and others for the Japanese environment.
+
+2002-09-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-util.el (gnus-frame-or-window-display-name): Exclude
+       invalid display names.
+
+2002-08-30  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-fetch-control): Fix typo in last
+       commit.  From Reiner Steib <4uce.02.r.steib@gmx.net>.
+
+2002-08-26  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.el (gnus-group-charter-alist): New option.
+       (gnus-group-fetch-control-use-browse-url): New option.
+
+       * gnus-group.el (gnus-group-fetch-charter): New function.
+       (gnus-group-fetch-control): New function.
+       Add them to the keymap and menu. Require mm-url.
+
+2002-08-30  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-mlspl.el (gnus-group-split-fancy): Doc fix.
+       From Alex Schroeder <alex@emacswiki.org>.
+
+2002-08-29  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-group.el (gnus-group-make-menu-bar): Add ellipses to menu
+       items expecting user interaction.
+
+       * gnus-topic.el (gnus-topic-make-menu-bar): do.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): do.
+
+       * gnus-srvr.el (gnus-server-make-menu-bar): do.
+
+       * mml.el (mml-menu): do.
+
+2002-08-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mail-source.el (mail-source-touch-pop): New function.
+
+       * message.el (message-smtpmail-send-it): New function.
+       (message-send-mail-function): Add it for a candidate.
+
+2002-08-27  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-msg.el (posting-charset-alist): Use
+       gnus-define-group-parameter instead of defcustom.
+       (gnus-put-message): Handle SPC in GCC.
+       (gnus-inews-insert-gcc): Ditto.
+       (gnus-inews-insert-archive-gcc): Ditto.
+
+2002-08-26  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-agent.el (gnus-agent-auto-agentize-methods): New variable.
+       (gnus-agentize): Auto agentize all nntp and nnimap groups.
+       (gnus-agent-possibly-save-gcc): Autoload.
+       Suggested by (KOSEKI Yoshinori) <kose@meadowy.org>.
+
+2002-08-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.el (gnus-other-frame-function): New user option.
+       (gnus-other-frame): Use it; add a doc-string; make it work with
+       the gnuclient program.
+
+       * gnus-util.el (gnus-frame-or-window-display-name): New function.
+
+       * lpath.el: Fbind `frame-parameter', `make-frame-on-display',
+       `device-connection' and `dfw-device'.
+
+2002-08-22  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-art.el (gnus-emphasis-alist): Strikethru had a lot of false
+       positives, make it stricter.  From Jochen Hein (trivial change).
+
+2002-08-21  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.el (gnus-other-frame): Trivial fix.
+
+2002-08-21  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.el (gnus-other-frame-parameters): New user option.
+       (gnus-other-frame-object): New variable.
+       (gnus-other-frame): Make it search for existing Gnus frame; don't
+       read new news; delete frame on exit.
+
+       * gnus-util.el (gnus-select-frame-set-input-focus): New function.
+
+       * lpath.el: Fbind w32-focus-frame and x-focus-frame.
+
+2002-08-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+       From \e$B>.4X\e(B \e$B5HB'\e(B (KOSEKI Yoshinori) <kose@meadowy.org>.
+
+       * message.el (message-set-auto-save-file-name): Add support for
+       the Cygwin Emacs; the system-type is `cygwin'.
+       * nnheader.el (nnheader-file-name-translation-alist): Ditto.
+
+2002-08-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-button-url-regexp): Use POSIX regexp if possible.
+
+       * nnmh.el (nnmh-request-list-1): Use %.0f instead of %d to
+       avoid arithmetic errors.
+
+2002-08-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el: Don't fbind `gnus-article-replace-with-quoted-text'.
+
+2002-08-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-ignored-supersedes-headers): Add X-Hashcash.
+       (message-ignored-resent-headers): Add envelope From.
+
+2002-08-18  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.el (gnus-summary-line-format): Document %k specifier.
+
+2002-08-17  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-sum.el (gnus-summary-line-message-size): New function.
+       (gnus-summary-line-format-alist): Use it.
+
+2002-08-15  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (article-make-date-line): Refer to the value for
+       `gnus-article-time-format' in the summary buffer.
+
+       * message.el (message-cite-prefix-regexp): Exclude ":" and "\e,A;\e(B".
+
+2002-08-14  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-button-alist): Use ' not ` for default value
+       quoting.
+       (gnus-button-alist): Fix doc.
+       (gnus-header-button-alist): Use ' not ` for default value quoting.
+       (gnus-header-button-alist): Don't inline gnus-button-url-regexp,
+       rationale similar to 2002-05-01 change.
+       (gnus-article-add-buttons-to-head): Evaluate expression.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Add MIME button option.
+
+2002-08-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-font-lock-keywords): Refer to the value for
+       `message-cite-prefix-regexp' dynamically.
+
+2002-08-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-decode-header-methods): Doc fix.
+
+2002-08-12  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-shell-open): Allow non-list `imap-shell-program'.
+       (imap-shell-open): Skip initial junk before IMAP greeting.
+
+2002-08-11  Simon Josefsson  <jas@extundo.com>
+
+       * message-utils.el (message-xpost-default,
+       message-xpost-fup2-header, message-xpost-fup2): Fixed
+       Typos.  Trivial changes from Reiner Steib
+       <4uce.02.r.steib@gmx.net>.
+
+2002-08-09  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-canlock-password): Set
+       canlock-password-for-verify to newly generated canlock-password.
+       When Emacs is restarted, Custom makes sure this is set, but during
+       the same session we must set it manually.
+
+2002-08-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * yenc.el: New file.
+
+       * mm-uu.el (mm-uu-yenc-decode-function): New variable.
+       (mm-uu-type-alist): Add yenc.
+       (mm-uu-yenc-filename): New function.
+       (mm-uu-yenc-extract): New function.
+
+       * mm-bodies.el (mm-decode-content-transfer-encoding): Add yenc.
+
+2002-08-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (merge): Don't use coerce.
+
+2002-05-27  Jesper Harder  <harder@ifa.au.dk>
+
+       * mailcap.el (mailcap-mime-data): Test window-system rather than
+       mm-device-type.
+       (mailcap-mime-data): Call xdvi and gv with "-safer".
+
+       * mm-util.el: Don't define mm-device-type.
+
+2002-08-05  Simon Josefsson  <jas@extundo.com>
+
+       * mm-util.el (mm-coding-system-priorities): coding-system type not
+       supported everywhere.
+
+2002-08-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bumped version number.
+
+2002-08-04 01:48:57 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.07 is released.
+
+2002-08-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-thread-sort-functions): Doc fix.
+       (gnus-article-sort-functions): Doc fix.
+       (t): New keystroke.
+       (gnus-article-sort-by-random): New function.
+       (gnus-thread-sort-by-random): New function.
+
+2002-08-02  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-logic.el (gnus-advanced-integer): Swap arguments in
+       funcall.  From Scott A Crosby <scrosby@cs.rice.edu>.
+
+2002-07-31  Danny Siu  <dsiu@adobe.com>
+
+       * nnimap.el (nnimap-split-articles): do not call nnmail-fetch-field
+       when splitting malformed messages without message-id
+
+2002-07-28  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Niklas Morberg <niklas.morberg@axis.com>.
+
+       * nnweb.el (nnweb-type, nnweb-type-definition)
+       (nnweb-gmane-create-mapping, nnweb-gmane-wash-article)
+       (nnweb-gmane-search, nnweb-gmane-identity): Added gmane
+       functionality.
+       * nnweb.el: Removed old non-functioning search engines.
+
+2002-07-27  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-forward-make-body): Don't use
+       `message-forward-ignored-headers' when doing a "raw" followup (it
+       is important to preserve e.g. CTE).
+
+       * flow-fill.el (fill-flowed): Disable filladapt-mode.
+
+       * gnus-sieve.el (gnus-sieve-guess-rule-for-article): Don't
+       regexp-quote, Cyrus Sieve is fixed.
+
+       * sieve-manage.el (sieve-manage-deletescript): New function.
+
+       * sieve.el (sieve-manage-mode-map): Fix down-mouse-2 and down-mouse-3.
+       (sieve-manage-mode): Fix menubar.
+       (sieve-activate): Change some messages.
+       (sieve-deactivate-all): New function.
+       (sieve-deactivate): New alias.
+       (sieve-remove): New function.
+       (sieve-help): Fix help.
+       All suggested by Ned Ludd.
+
+2002-07-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-decode.el (mm-inline-text-html-with-images): Doc fix.
+       (mm-w3m-safe-url-regexp): New user option.
+
+       * mm-view.el (mm-inline-text-html-render-with-w3m): Use
+       `mm-w3m-safe-url-regexp' to bind `w3m-safe-url-regexp'.
+
+2002-07-23  Karl Kleinpaste  <karl@charcoal.com>
+
+       * gnus-sum.el (gnus-summary-delete-article): Force
+       nnmail-expiry-target to 'delete, so that absolute deletion
+       happens when absolute deletion is requested.
+
+2002-07-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Nevin Kapur <nevin@jhu.edu>.
+
+       * nnmail.el (nnmail-fancy-expiry-target): Treat nonexisting
+       headers as empty headers.
+
+2002-07-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Jochen Hein <jochen@jochen.org>.
+
+       * gnus-art.el (gnus-emphasis-alist): Add strikethrough and
+       correct typo.
+       (gnus-emphasis-strikethru): New face.
+
+2002-07-20  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Jason Merrill <jason@redhat.com>.
+
+       * nnfolder.el (nnfolder-retrieve-headers): Avoid searching the
+       entire file for each of a sequence of missing articles.
+
+       * gnus-salt.el (gnus-binary-display-article): Respect an existing
+       value for gnus-view-pseudos.
+
+       * gnus-sum.el (gnus-summary-insert-new-articles): Count down to
+       avoid nreverse.
+
+2002-07-14  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Ted Zlatanov <teodor.zlatanov@divine.com>.
+
+       * gnus-sum.el (gnus-auto-expirable-marks): Remove `spam'.
+       (gnus-summary-mode-line-format-alist): Add %h for number of
+       spams.
+       (gnus-newsgroup-spam-marked): New variable.
+       (gnus-summary-local-variables): Add gnus-newsgroup-spam-marked.
+       (gnus-article-read-p, gnus-article-mark)
+       (gnus-set-global-variables, gnus-set-global-variables)
+       (gnus-article-marked-p, gnus-summary-mark-article-as-read)
+       (gnus-summary-mark-article-as-unread)
+       (gnus-summary-mark-article-as-unread, gnus-summary-mark-article)
+       (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  <jas@extundo.com>
+
+       * nnimap.el (nnimap-split-to-groups): Allow group string to be a
+       function.  From KANEMATSU Daiji <kdaiji@bea.com>.
+
+2002-07-09  Nevin Kapur  <nevin@jhu.edu>
+
+       * gnus-sum.el (gnus-summary-delete-article): Respect group
+       parameters while expiring.
+
+2002-07-08  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (article-make-date-line): Fix string.  From Henrik
+       Enberg.
+
+2002-07-08  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-art.el (article-unsplit-urls): Only display MIME when this
+       function is called interactively.  From Niklas Morberg.
+
+2002-07-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-topic.el (gnus-topic-indent, gnus-topic-unindent): Change
+       cdaar to cdar and car.
+
+       * nnsoup.el (nnsoup-retrieve-headers, nnsoup-request-type)
+       (nnsoup-read-active-file, nnsoup-article-to-area): Ditto.
+
+2002-07-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-summary-toggle-header): Show headers anyway;
+       don't break a narrowed article.
+
+       * nntp.el (nntp-via-rlogin-command-switches): Doc fix.
+       (nntp-open-via-rlogin-and-telnet): Ditto.
+
+2002-07-02  Didier Verna  <didier@xemacs.org>
+
+       * nnmail.el (nnmail-split-methods): fix custom type.
+
+2002-07-02  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-art.el (article-unsplit-urls): Keep URL buttonized after
+       unsplitting.  From Niklas Morberg <niklas.morberg@axis.com>.
+
+2002-07-01  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-msg.el (gnus-summary-resend-default-address): New user option.
+       (gnus-summary-resend-message): Use it.
+
+2002-06-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * 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\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * 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 <yamaoka@jpl.org>.
+
+2002-06-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nntp.el (nntp-open-via-rlogin-and-telnet): Revert last change.
+
+2002-06-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nntp.el (nntp-open-via-rlogin-and-telnet): Hide commandline args.
+
+2002-06-26  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-font-lock-keywords): Revert 2002-06-22
+       change.
+
+2002-06-24  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-font-lock-keywords): Put colon in header
+       name match.
+
+2002-06-22  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-font-lock-keywords): Don't use header faces
+       in the body.  Thanks to Stefan Monnier for the hint on the
+       implementation.
+
+2002-05-09  Miles Bader  <miles@gnu.org>
+
+       * gnus-cite.el (gnus-cite-blank-line-after-header): New variable.
+       (gnus-article-hide-citation): Respect it.
+
+2002-04-12  Juanma Barranquero  <lektu@terra.es>
+
+       * pop3.el (pop3-open-server): Fix typo.
+
+2002-06-18  Josh Huber  <huber@alum.wpi.edu>
+
+       * gnus.el (gnus-find-subscribed-addresses): Use add-to-list
+       instead of push to ignore duplicate to-(list|address) values.
+       * nnmail.el (nnmail-cache-ignore-groups): New.
+       * nnmail.el (nnmail-cache-insert): Obey nnmail-cache-ignore-groups
+
+2002-06-18  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-delay.el (gnus-delay-send-queue): Delete the delay header
+       before sending.  Suggested by Jan Rychter.
+
+2002-06-18  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (remove): New compiler macro.
+       (last, coerce, subseq): Remove compiler macros for those built-in
+       or unused functions.
+
+2002-06-17  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * 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.
+
+2002-06-16  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * 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\e,Ax\e(Brn Mork <bmork@dod.no>.
+
+2002-06-16  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-cache.el (gnus-cache-remove-article): n is &optional.  From
+       Reiner Steib <4uce.02.r.steib@gmx.net>.
+
+2002-06-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnheader.el (nnheader-file-name-translation-alist): Set the
+       default value for MS Windows systems.
+
+       * gnus-ems.el (nnheader-file-name-translation-alist): Removed.
+
+2002-06-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-beginning-of-line): Keep the region active
+       in XEmacs.  Suggested by TAKAHASHI Kaoru <kaoru@kaisei.org>.
+
+2002-06-13  Josh Huber  <huber@alum.wpi.edu>
+
+       * gnus-msg.el (gnus-summary-followup): Use g-s-handle-replysign.
+       * gnus-msg.el (gnus-summary-reply): Ditto.
+       * gnus-msg.el (gnus-summary-handle-replysign): New.
+
+2002-06-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-send-mail-with-sendmail): Kill errbuf even
+       if sending failed.
+
+2002-06-11  Josh Huber  <huber@alum.wpi.edu>
+
+       * gnus-start.el (gnus-dribble-enter): Don't call set-window-point anymore
+       * mml2015.el (mml2015-mailcrypt-encrypt): Accept optional argument
+       to sign while encrypting.
+
+2002-06-11  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-int.el (gnus-request-move-article): Agent expire article if
+       successfuly moved.
+
+       * nnweb.el (nnweb-google-create-mapping): Honors the value of
+       nnweb-max-hits.  From Niklas Morberg <niklas.morberg@axis.com>.
+
+2002-06-10  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-int.el (gnus-request-expire-articles): Fix last change?
+
+2002-06-09  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-delete-article): Don't agent expire here.
+
+       * gnus-int.el (gnus-request-expire-articles): Do it here instead.
+
+2002-06-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * flow-fill.el (fill-flowed): Ignore errors.
+
+2002-06-06  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-send-mail-with-sendmail): Improve error message.
+
+2002-06-06  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-interactive): Change default from nil to t.
+       Better to be safe than to be fast.
+
+2002-06-05  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-send-mail-with-sendmail): Check return value
+       from call-process-region.
+
+2002-06-04  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-msg.el (gnus-group-mail, gnus-group-news)
+       (gnus-group-post-news, gnus-summary-mail-other-window)
+       (gnus-summary-news-other-window, gnus-summary-post-news): Bind
+       gnus-article-copy to nil, thereby inhibiting the `header' posting
+       style match to use data from last viewed article.
+       Suggested by Hrvoje Niksic.
+
+2002-06-04  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * spam.el (spam-point-at-eol): New alias.
+       (spam-parse-whitelist): Use it.
+
+2002-06-03  Simon Josefsson  <jas@extundo.com>
+
+       * nnmail.el (nnmail-mail-splitting-decodes): New variable.
+       (nnmail-article-group): Use it.
+
+2002-05-30  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-msg.el (gnus-inews-yank-articles): Merge split header lines
+       so that code reading them won't be surprised.  From Jesper Harder
+       <harder@ifa.au.dk>.
+
+2002-05-29  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-delete-article): Agent expire deleted
+       articles.
+
+       * gnus.el (gnus-agent-cache): Doc fix.
+       (gnus-agent): Change default to t.
+
+       * gnus-agent.el (gnus-agent-expire): Make it accept optional
+       ARTICLES, GROUP and FORCE parameters.
+
+2002-05-28  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-line-format): Doc fix.
+
+2002-05-28  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-msg.el (gnus-inews-yank-articles): Unfold headers of
+       original article before yanking.  From Jesper Harder
+       <harder@ifa.au.dk>.
+
+2002-05-26  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-menu-split): New function.
+       (gnus-summary-make-menu-bar): Split charset submenu.
+       (gnus-summary-menu-maxlen): New variable.
+       (gnus-summary-menu-split): Use it.
+
+2002-05-25  Simon Josefsson  <jas@extundo.com>
+
+       * mml.el (mml-preview): Generate some headers.
+
+       * gnus.el (gnus-large-newsgroup): Fix :type.
+
+       * nnimap.el (nnimap-nov-is-evil): Change default to t (because the
+       Agent cache NOV's by default now).
+       (nnimap-nov-is-evil): Make it default to `gnus-agent' instead.
+
+2002-05-18  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-dependencies-add-header): Avoid one unecessary
+       call to gnus-parent-id when we check for References loops.
+       (gnus-summary-prepare-threads): Avoid simplifying every Subject
+       twice by saving the simplified subject string in simp-subject.
+
+2002-05-23  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo.  Trivial
+       change from Benjamin Rutt <rutt+news@cis.ohio-state.edu>.
+
+       * nnweb.el (nnweb-type): Remove dejanewsold.  Trivial change from
+       Niklas Morberg <niklas.morberg@axis.com>.
+
+2002-05-22  Simon Josefsson  <jas@extundo.com>
+
+       * sieve.el (sieve-change-region): Define it before it is used.
+
+       * 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
+       <rutt+news@cis.ohio-state.edu>.
+
+       * nnimap.el (nnimap-nov-is-evil): Improve doc.
+
+2002-05-21  Simon Josefsson  <jas@extundo.com>
+
+       * sieve-mode.el (sieve-manage): Fix autoloads.
+
+       * sieve-manage.el (sieve-manage-cram-md5-auth): Just send the SASL
+       name (makes it work with recent Cyrus timsieved).
+
+2002-05-20  Jason  <jbaker@cs.utah.edu>
+       Trivial patch.
+
+       * gnus-art.el (gnus-request-article-this-buffer): Try
+       reconnecting if you don't get the message.
+
+2002-05-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-enter-digest-group): Only get
+       Reply-To headers from the headers.
+
+2002-05-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-url.el (mm-url-insert): Remove junk message.
+
+2002-05-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-request-list): Parse new html.
+       (nnslashdot-use-front-page): New variable.
+       (nnslashdot-request-list): Use it.
+
+       * mm-url.el (mm-url-timeout): New variable.
+       (mm-url-retries): Ditto.
+       (mm-url-insert): Use it.
+
+2002-05-16  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-simplify-all-whitespace): New function.
+       (gnus-simplify-subject-functions): Mention g-s-a-w.
+
+2002-05-15  Josh Huber  <huber@alum.wpi.edu>
+
+       * nnbabyl.el (nnbabyl-request-accept-article): Pass group to
+       nnmail-cache-insert.
+       * nndiary.el (nndiary-request-accept-article): Ditto.
+       * nnfolder.el (nnfolder-request-accept-article): Ditto.
+       * nnimap.el (nnimap-request-accept-article): Ditto.
+       * nnmail.el (nnmail-process-unix-mail-format): Ditto.
+       * nnmail.el (nnmail-check-duplication): Ditto. (from gnus-art)
+       * nnmbox.el (nnmbox-request-accept-article): Ditto.
+       * nnmh.el (nnmh-request-accept-article): Ditto.
+       * nnmail.el (nnmail-cache-insert): Change group to required,
+       removed code which tried to figure out the group.
+
+2002-05-13  Josh Huber  <huber@alum.wpi.edu>
+
+       * mml.el (mml-generate-mime-1): Fix mml generation for signed only
+       messages. From Hans de Graaff <hans@degraaff.org>.
+       * nnml.el (nnml-request-accept-article): Pass in the group name to
+       nnmail-cache-insert, since it's available.
+
+2002-05-10  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-mime-digest-type-p): Set proper file-end.
+
+2002-05-08  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Florian Weimer <fw@deneb.enyo.de>.
+
+       * gnus.el (subscribed): New group parameter.
+       (gnus-find-subscribed-addresses): Use it.
+
+2002-05-08  Josh Huber  <huber@alum.wpi.edu>
+
+       * mml-sec.el (mml-signencrypt-style-alist): Rename.  Also, changed
+       the default for pgpmime to support pgp v2.
+       * mml-sec.el (mml-signencrypt-style): New accessor function to
+       allow users to get/set the signencrypt style more easily without
+       frobbing the alist directly.
+       * mml.el (mml-generate-mime-1): Use accessor function.
+
+2002-05-08  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-art.el (gnus-article-mode-syntax-table): Specify matching
+       parenthesis for "<" and ">".  Suggested by Andreas Schwab
+       <schwab@suse.de>.
+
+2002-05-07  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnmail.el (nnmail-cache-insert): Prefer group-art over group
+       when intuiting the group the message is written to.  From Josh
+       Huber <huber@alum.wpi.edu>.
+
+2002-05-06  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-topic.el (gnus-group-topic-parameters): Work when group
+       buffer doesn't show group.  From Matt Armstrong <matt@lickey.com>.
+
+2002-05-06  Josh Huber  <huber@alum.wpi.edu>
+
+       * mml2015.el (mml2015-gpg-encrypt): Changed name of optional
+       argument, and fixed compiler warning. (added autoload for
+       gpg-encrypt).
+
+2002-05-04  Simon Josefsson  <jas@extundo.com>
+
+       * mml1991.el (mml1991-function-alist): Doc fix.
+
+       * mml.el (mml-preview): Bind gnus-newsrc-hashtb temporarily if it
+       doesn't exist (for previewing messages without having Gnus
+       started).
+
+       * mm-util.el (mm-coding-system-priorities): Defcustom.
+
+       * mm-encode.el (mm-content-transfer-encoding-defaults): Defcustom.
+
+2002-05-01  Josh Huber  <huber@alum.wpi.edu>
+
+       * gnus-msg.el (gnus-message-replysignencrypted): enabled by
+       default.
+       * mml-sec.el:
+       * mml-sec.el (mml-signencrypt-style): New.
+       * mml-sec.el (mml-pgpmime-encrypt-buffer): Accept optional
+       argument `sign'.
+       * mml-sec.el (mml-secure-message-encrypt-pgp): Changed default to
+       signencrypt.
+       * mml-sec.el (mml-secure-message-encrypt-pgpmime): Ditto.
+       * mml.el (mml-generate-mime-1): Changed logic so a part which is
+       both signed & encryped is processed in one operation. (rather than
+       two separate ops: sign, then encrypt)
+       * mml2015.el (mml2015-gpg-extract-signature-details): Give some
+       indication if a message is signed by an expired key.
+       * mml2015.el (mml2015-gpg-encrypt): Accept optional argument which
+       enables combined sign & encrypt operation. (this was always on
+       before).
+       * mml2015.el (mml2015-encrypt): Accept optional argument `sign'.
+
+2002-05-01  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-retrieve-groups): Use separate data for each
+       server.
+       (nnimap-mailbox-info): defvar instead of defvoo.
+
+2002-05-01 20:09:21 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.06 is released.
+
+2002-05-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * lpath.el: Bind url-package-version.
+
+2002-05-01  Simon Josefsson  <jas@extundo.com>
+
+       * nnfolder.el (nnfolder-request-delete-group): Figure out nov/mrk
+       filename before deleting the group itself, because the presence of
+       a group filename decides if long filenames are used or not.
+
+       * gnus-art.el (gnus-button-alist): Don't inline
+       gnus-button-url-regexp.  This makes it possible to change g-b-u-r
+       without also modifying g-button-alist.
+       (gnus-button-alist): Fix type to allow variable as well as regexp.
+       (gnus-article-add-buttons): Evaluate regexp.  Strings evaluate to
+       themselves, variables to its contents.
+       (gnus-button-entry): Ditto.
+
+2002-05-01  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-parse-resp-text-code, imap-parse-status): Treat
+       UIDNEXT as a string.
+
+       * nnimap.el (nnimap-string-lessp-numerical): New function.
+       (nnimap-retrieve-groups): Compare UIDNEXT as strings instead of
+       integers.
+
+2002-04-29  Simon Josefsson  <jas@extundo.com>
+
+       * nnmail.el (nnmail-cache-insert): Accept optional group
+       parameter.
+
+       * nnimap.el (nnimap-retrieve-groups): Don't send STATUS when
+       n-r-g-a is disabled.
+
+2002-04-29  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-split-fancy): Fix doc.
+       (nnimap-split-fancy): Fix doc.
+
+       * nnimap.el (nnimap-retrieve-groups-asynchronous): New variable.
+       (nnimap-mailbox-info): New internal variable.
+       (nnimap-retrieve-groups): Implement faster new mail check.
+
+       * nnimap.el (nnimap-split-articles): Support
+       nnmail-cache-accepted-message-ids.
+       (nnimap-request-accept-article): Ditto.
+
+       * imap.el (imap-mailbox-status-asynch): New command.
+
+2002-04-29  Nevin Kapur  <nevin@jhu.edu>
+
+       * gnus.el (gnus-find-subscribed-addresses): Return nil when there
+       are no subscribed mail groups.
+       - Strip quoted names when comparing addresses
+
+2002-04-28  Jesper Harder  <harder@ifa.au.dk>
+
+       * mm-decode.el (mm-text-html-renderer): Change customize type to
+       const.
+
+       * gnus-msg.el (gnus-discouraged-post-methods): Fix typo.
+       (gnus-debug-exclude-variables): do.
+
+2002-04-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-article-mail): Use gnus-msg-mail instead.
+       Trivial change from Karl Pfl\e,Ad\e(Bsterer <sigurd@12move.de>.
+
+2002-04-27  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dns.el (dns-make-network-process): New macro.
+       (query-dns): Use it.
+
+2002-04-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-summary-reply): Remove unbound variable
+       article-buffer.
+
+       * mm-url.el (mm-url-package-name): New variable.
+       (mm-url-package-version): New variable.
+       (mm-url-insert-file-contents): Bind url-package-name and
+       url-package-version here.
+       * nnrss.el (nnrss-insert-w3): Move the bindings.
+
+       * nnrss.el (nnrss-insert-w3): Bind url-package-name and
+       url-package-version. Trivial change from Andrew J Cosgriff
+       <ajc@polydistortion.net>
+
+       * mm-decode.el (mm-save-part): Fill in file name when GUI saving
+       attachments. Trivial change from Peter 'Luna' Runestig
+       <peter@runestig.com>.
+
+2002-04-19  Jesper Harder  <harder@ifa.au.dk>
+
+       * nnkiboze.el (nnkiboze-request-scan): Call
+       nnkiboze-possibly-change-group.
+       (nnkiboze-generate-group): Use mm-with-unibyte to avoid encoding
+       problems.
+       (nnkiboze-generate-group): Set newsrc to the *highest* article
+       number kibozed, not the lowest.
+
+2002-04-15  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-art.el (article-unsplit-urls): Allow trailing SPC.
+
+2002-04-24  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Dan Christensen <jdc+news@uwo.ca>.
+
+       * nndoc.el (nndoc-type-alist, nndoc-lanl-gov-announce-type-p)
+       (nndoc-transform-lanl-gov-announce, nndoc-generate-lanl-gov-head):
+       Recognize math postings.  Extract Date (now ignores "(15kb)").
+       Extract email address using gnus-extract-address-components
+       instead of just taking the first word.  Create Date and From
+       headers for message which are missing these headers.  Get rid
+       of spurious \\ lines (purely cosmetic).  Extend body-end and
+       file-end regexps, to exclude more garbage from the message.
+       Make URL rephrasing regexp more flexible, to match current
+       format.
+
+2002-04-23  Simon Josefsson  <jas@extundo.com>
+
+       * netrc.el: New file, functions copied from gnus-util.el by Ted
+       Zlatanov <tzz@lifelogs.com>.
+
+       * gnus-util.el: Require netrc.
+       (gnus-netrc-get, gnus-netrc-machine, gnus-parse-netrc): Aliased to
+       new code in netrc.el.
+
+2002-04-23  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-msg.el (gnus-summary-resend-message-edit): Remove
+       message-ignored-resent-headers, too.  From Matthieu Moy
+       <Matthieu.Moy@imag.fr>.
+
+2002-04-22  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.umu.se>
+
+       * gnus-srvr.el (gnus-server-browse-in-group-buffer): it is a
+       boolean not a string
+       * gnus-group.el (gnus-group-line-format): add description of %C
+       * gnus-group.el (gnus-group-line-format-alist): add gnus-tmp-comment
+         as %C
+       * gnus-group.el (gnus-group-insert-group-line): add gnus-tmp-comment
+
+2002-04-22  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-request-scan): typo: set
+       nnmaildir-get-new-mail, not nnmaildir-new-mail.  Don't call
+       nnmail-get-new-mail for 'find-new-groups.
+
+2002-04-21  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-request-update-info,
+       nnmaildir-request-group, nnmaildir-retrieve-groups): remove
+       unnecessary calls to nnmaildir-request-scan.
+
+2002-04-20  Josh Huber  <huber@alum.wpi.edu>
+
+       * gnus-msg.el:
+       * gnus-msg.el (gnus-message-replysign): New.
+       * gnus-msg.el (gnus-message-replyencrypt): New.
+       * gnus-msg.el (gnus-message-replysignencrypted): New.
+       * gnus-msg.el (gnus-summary-reply): Use the three new variables
+       (above) to automatically encrypt/sign to encrypted/signed
+       messages.
+       * message.el:
+       * message.el (message-mode-map): Add keybinding for
+       `message-to-list-only'
+       * message.el (message-mode): Add description for
+       `message-to-list-only'
+       * message.el (message-to-list-only): New.
+       * message.el (message-make-mft): Changed to use the cl loop macro,
+       and added optional flag to return only the matched list. (for use
+       in new message-to-list-only function)
+
+2002-04-20  Josh Huber  <huber@alum.wpi.edu>
+
+       * gnus-msg.el:
+       * gnus-msg.el (gnus-message-replysign):
+       * gnus-msg.el (gnus-replysign): New.
+       * gnus-msg.el (gnus-replyencrypt): New.
+       * gnus-msg.el (gnus-replysignencrypted): New.
+       * gnus-msg.el (gnus-summary-reply):
+       * message.el:
+       * message.el (message-mode-map):
+       * message.el (message-mode):
+       * message.el (message-to-list-only): New.
+       * message.el (message-make-mft):
+
+2002-04-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-configure-windows-hook): Fix typo.
+
+2002-04-18  Josh Huber  <huber@alum.wpi.edu>
+
+       * 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\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Ted Zlatanov <teodor.zlatanov@divine.com>.
+
+       * spam.el (spam-whitelist, spam-blacklist, spam-enter-whitelist):
+       Improve docstring.
+       (spam-enter-blacklist): New command.
+
+       * gnus-sum.el (gnus-spam-mark): New mark.
+       (gnus-auto-expirable-marks): Add gnus-spam-mark.
+       (gnus-summary-make-tool-bar): Correct conditional.
+       (gnus-summary-limit-to-unread): Add gnus-spam-mark.
+       (gnus-summary-mark-as-spam): New command.
+
+2002-04-13  Josh Huber  <huber@alum.wpi.edu>
+
+       * mml-sec.el (mml-secure-message): changed to support arbritrary
+       modes.
+       * mml-sec.el (mml-secure-message-encrypt-(smime|pgp|pgpmime)):
+       changed to support "signencrypt" mode.
+       * mml.el (mml-parse-1): changed to support different secure modes
+       more easily. (for signencrypt)
+
+2002-04-11  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * gnus-sum.el (gnus-update-summary-mark-positions)
+       (gnus-summary-toggle-header):
+       * gnus-uu.el (gnus-uu-binhex-article, gnus-uu-reginize-string)
+       (gnus-uu-expand-numbers, gnus-uu-post-make-mime)
+       (gnus-uu-post-encoded):
+       * nnfolder.el (nnfolder-possibly-change-group):
+       * nnimap.el (nnimap-retrieve-headers):
+       * nnmbox.el (nnmbox-create-mbox): Don't assume point-min == 1.
+
+2002-04-08  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * nnml.el (nnml-save-nov, nnml-generate-nov-file):
+       * pop3.el (pop3-md5): Don't hardcode point-min == 1.
+
+2002-04-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-srvr.el (gnus-server-set-info): Clear
+       `gnus-server-method-cache' when `gnus-server-alist' is changed.
+       From Daiki Ueno <ueno@unixuser.org>.
+
+2002-04-11  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Force
+       viewing of security buttons.  Thanks to Nicolas Kowalski
+       <Nicolas.Kowalski@imag.fr>.
+
+       * smime.el (smime-CA-directory): Fix doc.  Thanks to Arne
+       J\e,Ax\e(Brgensen <arne+usenet@daimi.au.dk>.
+       (smime-sign-buffer): Work in XEmacs.  Thanks to Nicolas Kowalski
+       <Nicolas.Kowalski@imag.fr>.
+       (smime-decrypt-buffer): Ditto.
+
+2002-04-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-prepare): Place point on the emtpy
+       header line.
+
+2002-04-11  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus.el (gnus-refer-article-method): Change `dejanews' to `google'.
+
+2002-04-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-delete-marked-with): Fix typo.
+
+2002-04-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-inline-text-html-render-with-w3): Don't ignore
+       errors when debug.
+
+2002-04-07  Josh Huber  <huber@alum.wpi.edu>
+
+       * message.el (message-make-mft): Changed MFT code from using
+       message-recipients (which included Bcc) to use only the To and CC
+       headers.
+
+2002-04-05  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-art.el (gnus-treat-from-picon): Add to gnus-picon group and
+       add link.
+       (gnus-treat-mail-picon): Ditto.
+       (gnus-treat-newsgroups-picon): Ditto.
+       (gnus-picon-databases): Fix custom type.
+       (gnus-picon-databases): Add link.
+       (gnus-article-x-face-command): Add to gnus-picon group.
+
+2002-04-01  Jesper Harder  <harder@ifa.au.dk>
+
+       * message.el (message-buffer-naming-style): Remove.
+
+2002-04-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-make-tool-bar): Load tool-bar first.
+
+       * message.el (message-tool-bar-map): Ditto.
+
+       * gnus-sum.el (gnus-summary-make-tool-bar): Ditto.
+
+2002-04-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwarchive.el (nnwarchive-mail-archive-article): Fix typo.
+
+2002-04-01  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el: fixed some buggy invocations of nnmaildir--pgname.
+
+2002-03-31  Andrew Cohen  <cohen@andy.bu.edu>
+       Trivial patch.
+
+       * dns.el: open-network-stream under XEmacs does udp.
+
+2002-03-31  Lars Magne Ingebrigtsen  <larsi@quimbies.gnus.org>
+
+       * spam.el (spam-enter-whitelist): New function.
+       (spam-parse-whitelist): Ditto.
+       (spam-refresh-list-cache): Ditto.
+       (spam-address-whitelisted-p): New function.
+
+       * dns.el (query-dns): Use TCP when make-network-process isn't
+       available.
+       (dns-servers): New variable.
+       (dns-parse-resolv-conf): New function.
+       (query-dns): Use it.
+
+       * spam.el: New file.
+
+       * dns.el (query-dns): Test.
+
+2002-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * lpath.el (featurep): Bind make-network-process.
+
+2002-03-31  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el: Use defstruct.  Use a single copy of
+       nnmail-extra-headers to save memory.  Store server's group name
+       prefix instead of each group's prefixed name.
+       * nnnil.el (nnnil-retrieve-headers, nnnil-request-list): Erase
+       nntp-server-buffer.
+
+2002-03-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * dns.el: New file.
+
+2002-03-28  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-dummy-line-format):
+       * gnus.el (gnus-summary-line-format): Fixing links to Info.
+       Trivial change from Bj\e,Av\e(Brn Torkelsson <torkel@pdc.kth.se>.
+
+2002-03-29  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-sum.el (gnus-summary-move-article)
+       (gnus-summary-copy-article): Mention `gnus-move-split-methods' in
+       the doc string.
+
+2002-03-28  Simon Josefsson  <jas@extundo.com>
+
+       * mml-sec.el (mml-secure-message): Search after
+       mail-header-separator from top of message.
+
+2002-03-28  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el: Cosmetic changes.
+       (nnmaildir--with-nntp-buffer, nnmaildir--with-work-buffer,
+       nnmaildir--with-nov-buffer, nnmaildir--with-move-buffer,
+       nnmaildir--group-ls): New macros/functions.  Use them.
+       (nnmaildir--unlink): Evalutate argument only once.
+
+2002-03-27  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-sum.el (gnus-summary-highlight): Use `eq' when comparing
+       symbols.
+       (gnus-summary-highlight-line): Use `gnus-point-at-bol' and
+       `gnus-point-at-eol'.
+
+2002-03-27  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir--subdir, nnmaildir--nov-dir,
+       nnmaildir--marks-dir): New macros.  Use them.
+       Use inhibit-quit for atomicity instead of in-memory journaling.
+       (nnmaildir--edit-prep): New function.
+       (Local Variables): Use it.
+
+2002-03-26  Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk)
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Fix typo.
+
+2002-03-25  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-mode): Fix doc.
+
+2002-03-25  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-subject-re-regexp): Skip Re[42]: junk.  From
+       Matthieu Moy <Matthieu.Moy@imag.fr>.
+
+2002-03-24  Jesper Harder  <harder@ifa.au.dk>
+
+       * mml-sec.el (mml-unsecure-message): Add docstring.
+
+2002-03-23  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-large-newsgroup): Fix doc, allow non-numeric
+       value.
+       Trivial change from andre@slamdunknetworks.com
+
+2002-03-22  Josh Huber  <huber@alum.wpi.edu>
+
+       * mml.el (mml-mode-map): Added a keybinding for
+       `mml-unsecure-message'.  Also, added a menu entry for said
+       function in the Attachments menu.
+
+2002-03-22  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * canlock.el (canlock-version): Remove.
+       (canlock-sha1-with-openssl): Don't use `canlock-string-as-unibyte'
+       here; simplify \x insertions.
+       (canlock-sha1): New function, always return a unibyte string.
+       (canlock-make-cancel-key): Use `canlock-sha1'; simplify truncation
+       of a password.
+       (canlock-insert-header): Use `canlock-sha1'.
+       (canlock-verify): Ditto.
+
+2002-03-21  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-fix-before-sending): Add an option that
+       ignores illegible text.
+       Trivial change from Mark Milhollan <mlm@attglobal.net>
+
+       * message.el (message-font-lock-keywords): Support multi-line MML
+       tags.
+
+       * gnus-sum.el (gnus-print-buffer): Remove gnus-decoration.
+       Trivial change from lorentey@elte.hu (L\e,Bu\e(Brentey K\e,Aa\e(Broly)
+
+2002-03-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Use intern'ed function
+       symbols for "View as different encoding" submenu.
+
+2002-03-19  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Add "View as different
+       encoding" submenu.
+
+2002-03-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-process-prefix): Make sure there is a mark.
+
+2002-03-19  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-sum.el (gnus-sum-thread-tree-root)
+       (gnus-sum-thread-tree-single-indent)
+       (gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent)
+       (gnus-sum-thread-tree-leaf-with-other)
+       (gnus-sum-thread-tree-single-leaf): Make customizable.
+
+2002-03-16  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-util.el (gnus-extract-address-components): Don't break on
+       names such as James "Kibo" Parry.  From Francis Litterio
+       <franl@world.std.com>.
+
+2002-03-13  Simon Josefsson  <jas@extundo.com>
+
+       * pop3.el (pop3-open-server): Revert multibyte change.  From
+       Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk).
+
+       * message.el (message-send-mail-with-qmail): Make it work.  From
+       Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk).
+
+2002-03-13  Josh Huber  <huber@alum.wpi.edu>
+
+       * 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  <jas@extundo.com>
+
+       * message.el (message-qmail-inject-args): May be function.
+       (message-send-mail-with-qmail): Call function if m-q-i-a is
+       function.  From fn@hungry.org (Faried Nawaz).
+
+2002-03-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-abbrevs-loaded): Remove.
+       (mailabbrev): Require it.
+
+       * nnslashdot.el (nnslashdot-request-article): Remove IFRAME.
+
+2002-03-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * pop3.el (pop3-open-server): Set process buffer unibyte.
+
+2002-03-10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-subscribe-to-mailing-list): New function.
+
+2002-03-10  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-request-article): Remove javascript
+       too.
+
+2002-03-09  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * 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 andre@slamdunknetworks.com
+
+2002-03-09  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus-start.el (gnus-auto-subscribed-groups): Include nnmaildir.
+
+2002-03-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * 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 <Matthieu.Moy@imag.fr>
+
+       * message.el (message-add-action): Use add-to-list.
+       (message-delete-action): New function.
+
+       * nndoc.el (nndoc-mail-in-mail-type-p): Break a long regexp into
+       pieces.
+
+2002-03-05  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnnil.el: New file.
+       * gnus.el (gnus-valid-select-methods): Include nnnil.
+
+2002-03-05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-syntax-checks): Because canlock is
+       supported, we disable sender syntax check.
+       (message-shoot-gnksa-feet): Add cancel-messages option doc.
+
+       * gnus-draft.el (gnus-draft-send): If interactive, use its default
+       value of message-syntax-checks.
+
+       * qp.el (quoted-printable-decode-region): Doc addition.
+       From: Eli Zaretskii <eliz@is.elta.co.il>
+
+       * mail-source.el (make-source-make-complex-temp-name): Use
+       make-temp-file.
+
+       * mm-util.el (mm-make-temp-file): New function.
+       * nneething.el (nneething-file-name): Use it.
+       * mml-smime.el (mml-smime-encrypt): Ditto.
+       * mm-view.el (mm-inline-wash-with-file): Ditto.
+       * mm-decode.el (mm-display-external, mm-create-image-xemacs): Ditto.
+       * gnus-uu.el (gnus-uu-decode-binhex, gnus-uu-decode-binhex-view)
+       (gnus-uu-digest-mail-forward, gnus-uu-initialize): Ditto.
+       * gnus-start.el (gnus-slave-save-newsrc): Ditto.
+       * gnus-fun.el (gnus-convert-image-to-gray-x-face): Ditto.
+       * gnus-art.el (gnus-mime-print-part): Ditto.
+
+2002-03-04  Paul Jarc  <prj@po.cwru.edu>
+
+       * message.el (nnmaildir-article-number-to-base-name): New
+       function.
+       (nnmaildir-base-name-to-article-number): New function.
+
+2002-03-04  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * smime.el (smime-make-temp-file): Don't quote
+       `temporary-file-directory'.
+
+2002-03-04  Simon Josefsson  <jas@extundo.com>
+
+       * smime.el (smime-sign-region): Rename argument keyfiles to
+       keyfile. You only sign something with one key.
+       (smime-sign-buffer): Better completing-read prompt.
+       (smime-decrypt-buffer): Ditto.
+
+       * smime.el (smime-make-temp-file): Make it work under XEmacs.
+
+       * mm-view.el (mm-view-pkcs7-decrypt): Better prompt for
+       completing-read.
+       (mm-view-pkcs7-decrypt): CRLF->LF.
+
+2002-03-04  Paul Jarc  <prj@po.cwru.edu>
+
+       * message.el (message-hierarchical-addresses): New variable.
+       (message-get-reply-headers): Use it.
+       From Ted Zlatanov <teodor.zlatanov@divine.com>
+
+2002-03-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-mode): If buffer-file-name, don't set auto
+       save file name.
+       Trivial change from Geoff Greene <ggreene@wpi.edu>
+
+2002-03-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-multiple-choice): Use message. XEmacs only
+       takes one argument in read-char.
+
+       * message.el (message-fix-before-sending): Forward a char.
+       Check mmu-multibyte-p, add control-1.
+
+2002-03-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-read-init-file): Ditto.
+
+       * gnus-agent.el (gnus-agent-fetch-session): Ditto.
+
+       * dgnushack.el (dgnushack-make-load): Ditto.
+
+       * mail-source.el (mail-source-fetch): Extract the right error
+       code.
+
+       * message.el (message-fix-before-sending): Check illegible text.
+
+       * gnus-util.el (gnus-multiple-choice): New function.
+
+       * gnus-kill.el (gnus-score-insert-help): Removed, because it is
+       also defined in gnus-score.el.
+
+2002-03-01  Paul Jarc  <prj@po.cwru.edu>
+
+       * message.el (message-get-reply-headers): downcase email addresses
+       for comaparisons for duplicate removal.
+
+2002-03-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-view-pkcs7-verify): New function. A bogus
+       implementation of PKCS#7, which just allows users read the
+       message.
+       (mm-view-pkcs7): Use it.
+
+2002-02-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (large-newsgroup-initial): New parameter.
+
+       * gnus-sum.el (gnus-articles-to-read): Use large-newsgroup-initial.
+       (gnus-summary-insert-old-articles): Ditto.
+
+2002-02-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * 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 <tsuchiya@namazu.org>
+
+       * nnagent.el (nnagent-retrieve-headers): Remove articles with
+       small numbers.
+
+2002-02-24  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * deuglify.el: Fix comments.
+
+2002-02-23  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * html2text.el (html2text-clean-anchor): If there is no HREF,
+       insert nothing.
+
+       * mml.el (mml-generate-mime-1): Add cdr.
+       From: andre@slamdunknetworks.com
+
+       * mm-view.el (mm-text-html-renderer-alist): Add html2text.
+       (mm-text-html-washer-alist): Ditto.
+
+       * mm-decode.el (mm-text-html-renderer): Add html2text.
+
+       * html2text.el: Face lift.
+
+       * html2text.el: New file from Joakim Hove <hove@phys.ntnu.no>.
+
+2002-02-22  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el: Add gnus-article-outlook-deuglify-article.
+
+       * 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 <rscholz@zonix.de>.
+
+       * mm-decode.el (mm-display-external): Use
+       mm-file-name-rewrite-functions.  From <andre@slamdunknetworks.com>
+
+2002-02-22  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-request-list): Report the highest
+       article number, not the total number of articles.
+
+2002-02-21  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el: Move uu key map here.
+       (gnus-summary-make-menu-bar): Add gnus-summary-save-parts.
+
+2002-02-21  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-request-expire-articles): Use
+       nnmail-expiry-wait* if expire-age parameter is not set.
+
+2002-02-21  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-sort-groups-by-real-name): New
+       function.
+       (gnus-group-sort-selected-groups-by-real-name): New function.
+       (gnus-group-make-menu-bar): Add sort by real name.
+
+       * gnus-sum.el (gnus-dependencies-add-header): If replaced, don't
+       rebuild.
+       (gnus-summary-edit-article-done): Gnus-get-newsgroup-headers takes
+       nil as dependencies as well.
+
+2002-02-20  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-dissect-mime-parts-sub): Fix MIME-Version header
+       for mime-parts.
+
+       * gnus-art.el (gnus-article-edit-done): Widen the buffer.
+
+       * gnus-group.el (gnus-group-name-decode): Don't test
+       multibyte-string, because it breaks XEmacs.
+       From: TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * message.el (message-send-mail): Be talkative.
+
+       * mm-decode.el (mm-inlined-types): Add application/x-emacs-lisp.
+       (mm-automatic-display): Ditto.
+
+       * mailcap.el (mailcap-mime-data): Ditto.
+       From: Reiner Steib <4uce.02.r.steib@gmx.net>
+
+2002-02-20  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * many files: Remove trailing whitespaces, replace spc+tab with
+       tab, replace leading whitespaces with tabs.
+
+2002-02-19  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus-sum.el (gnus-summary-toggle-header): Fix handling of
+       articles with no body and no blank line after the header.
+
+2002-02-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-dissect-multipart): Consider the case of empty
+       parts.
+
+       * ietf-drums.el (ietf-drums-syntax-table): Modify syntax of
+       non-ascii chars.
+
+       * rfc2231.el (rfc2231-parse-string): Support non-ascii chars.
+
+       * gnus-art.el (gnus-article-wash-html-with-w3): Remove
+       w3-delay-image-loads.
+       * mm-view.el (mm-inline-text-html-render-with-w3): Ditto.
+       (mm-w3-prepare-buffer): Ditto.
+
+       * mail-source.el (mail-source-fetch-directory): Run scripts.
+
+2002-02-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-respond-to-confirmation): Do the right thing
+       for Majordomo confirmations.
+
+2002-02-18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-respond-to-confirmation): New command.
+
+2002-02-11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-retrieve-headers): Clean up.
+
+2002-02-18  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus-util.el (gnus-parent-id): Ignore trailing whitespace in the
+       References header field.  From Mark Thomas <mthomas@cmu.edu>.
+
+2002-02-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-inline-render-with-file): With unibyte buffer.
+       (mm-inline-render-with-stdin): Ditto.
+       (mm-inline-render-with-function): Ditto.
+       (mm-inline-wash-with-file): Bind coding-system-for-write.
+       (mm-inline-wash-with-stdin): Ditto.
+
+2002-02-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       Suggested by Felix Natter <fnatter@gmx.net>
+
+       * gnus-art.el (gnus-mime-view-part-externally): Rename from
+       gnus-mime-externalize-view.
+       (gnus-mime-view-part-internally): Rename from
+       gnus-mime-internalize-view.
+       (gnus-article-view-part-externally): Rename from
+       gnus-article-externalize-part.
+       (gnus-mime-action-alist): Change correspondingly.
+       (gnus-mime-button-commands): Ditto.
+       (gnus-mime-action-alist): Remove duplication.
+
+       * gnus-sum.el (gnus-summary-mime-map): Change correspondingly.
+
+2002-02-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-dissect-buffer): Add loose-mime parameter.
+
+       * gnus-art.el (gnus-display-mime): Use it.
+
+       * mm-partial.el (mm-partial-find-parts): Use it.
+
+       * gnus-sum.el (gnus-article-loose-mime): Rename from
+       gnus-article-no-strict-mime.
+       (gnus-summary-save-parts): Use it.
+
+2002-02-18  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Remove unused
+       local variable.
+
+       * gnus-art.el (article-display-x-face): Don't sort multiple
+       X-Faces.
+
+2002-02-18  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Improved to speed
+       up.  Suggested by Yuuichi Teranishi <teranisi@gohome.org>.
+
+       * gnus-art.el (article-display-x-face): Sort gray X-Faces.
+
+2002-02-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       Some ideas is inspired by code from Hrvoje Niksic
+       <hniksic@arsdigita.com>
+
+       * gnus-art.el (gnus-article-wash-function): Set the default to
+       nil, so that we use mm-text-html-renderer instead.
+       (article-wash-html): Use mm-text-html-renderer.
+
+       * mm-decode.el (mm-inline-media-tests): Use mm-inline-text-*.
+       (mm-text-html-renderer): New variable.
+       (mm-inline-text-html-renderer): Set the default to nil, so that we
+       use mm-text-html-renderer instead.
+
+       * mm-view.el (mm-inline-text-html): New function.
+       (mm-text-html-renderer-alist): New variable.
+       (mm-inline-text-vcard): New function.
+       (mm-inline-text): Split.
+       (mm-links-remove-leading-blank): New function.
+       (mm-inline-render-with-file): New function.
+       (mm-inline-render-with-stdin): New function.
+       (mm-inline-render-with-function): New function.
+       (mm-text-html-washer-alist): New variable.
+       (mm-inline-wash-with-file): New function.
+       (mm-inline-wash-with-stdin): New function.
+
+2002-02-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message-utils.el: Fix installation doc.
+       From: Reiner Steib <4uce.02.r.steib@gmx.net>
+
+2002-02-16  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-discouraged-post-methods): New variable.
+       (gnus-post-method): Use it.
+       (gnus-summary-cancel-article): Find the correct post-method.
+
+       * gnus-soup.el (gnus-soup-send-packet): Via ... using ...
+       * message.el (message-send-news): Ditto.
+       Suggested by Lloyd Zusman <ljz@asfast.com> and IPmonger
+       <ipmonger@delamancha.org>
+
+       * gnus.el (gnus-select-method): Fix doc.
+       (gnus-server-string): Use 'using nntp'.
+
+       * gnus-agent.el (gnus-slave-unplugged): New command.
+       From: Felix Natter <fnatter@gmx.net>
+
+2002-02-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-edit-done): Kill-all-local-variables.
+       Call edit-done-function first, then change the window
+       configuration.
+       (gnus-article-edit-mode-map): Add message key bindings. Add menu.
+       (gnus-article-edit-mode): mml-mode.
+
+       * gnus-util.el (gnus-byte-compile): Work around a bug in XEmacs
+       21.4. Suggested by Russ Allbery <rra@stanford.edu> .
+
+       * message-utils.el: Adopt the file.
+
+       * message-utils.el: New file.
+       From Holger Schauer <Holger.Schauer@gmx.de>
+
+2002-02-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-move-article): Select-article only
+       when gnus-move-split-methods is non-nil. And we don't render or
+       mark the article.
+
+       * gnus-fun.el (gnus-shell-command-to-string): New function.
+       (gnus-shell-command-on-region): New function.
+       (gnus-random-x-face): Use them.
+       (gnus-x-face-from-file): Ditto.
+       (gnus-convert-image-to-gray-x-face): Ditto.
+       (gnus-convert-gray-x-face-to-xpm): Ditto.
+       (gnus-convert-image-to-x-face-command): Don't use 2>/dev/null.
+
+2002-02-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-treat-display-xface): Don't use
+       `shell-command-to-string' when compiling.
+       (gnus-treat-display-grey-xface): Ditto.
+
+2002-02-13  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir--article-count): If the group is
+       completely empty, report minimum article number as 1 instead of 0.
+
+2002-02-13  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-get-predicate): Use nconc.
+
+       * gnus-sum.el (gnus-summary-display-make-predicate): Use
+       gnus-summary-display-cache as cache.
+
+       * nndoc.el (nndoc-type-alist): Add mail-in-mail type.
+       (nndoc-mail-in-mail-type-p): New function.
+       (nndoc-mail-in-mail-article-begin): New function.
+
+2002-02-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mailcap.el (mailcap-mime-data): Use enriched-decode.
+
+       * gnus-cite.el (gnus-article-fill-cited-article): Bind
+       use-hard-newlines to nil.
+
+       * gnus-xmas.el (gnus-xmas-image-type-available-p): Assume that
+       image is not available if window-system is not available.
+
+       * gnus-sum.el (gnus-summary-display-make-predicate): Add unread.
+
+2002-02-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-article-unpropagated-mark-lists): Don't propagate
+       bookmark, because update-mark doesn't handle it correctly.
+
+2002-02-09  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-soup.el (gnus-soup-send-packet): Send news and mail
+       directly instead of calling message-send-mail.
+
+       * gnus-start.el (gnus-read-descriptions-file): Use
+       gnus-default-charset.
+
+       * mm-util.el (mm-guess-mime-charset): New function.
+
+       * gnus.el (gnus-default-charset): Use it.
+       (gnus-group-charset-alist): Remove .*, Let gnus-default-charset be
+       the default.
+
+2002-02-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-treat-display-grey-xface): New variable.
+       (article-display-x-face): Use it.  Disable grey xface, if
+       uncompface is not found.
+
+       * message.el (message-mode): Don't enable multibyte on an indirect
+       buffer.
+
+       * nnrss.el (nnrss-content-function): New variable.
+       (nnrss-request-article): Use it.
+
+2002-02-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el: Add article-unsplit-urls.
+       * gnus-sum.el: Ditto.
+       * gnus-art.el (gnus-treat-strip-cr): New variable.
+       (gnus-treatment-function-alist): Use it.
+       (article-unsplit-urls): New function.
+       (gnus-article-make-menu-bar): Use it.
+       From: Michael Cook <michael.cook@cisco.com>
+
+2002-02-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-braid-nov): Find the first article to
+       copy.
+
+2002-02-07  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus-util.el (gnus-split-references): Allow (broken) Message-IDs
+       with internal whitespace.
+       (gnus-parent-id): Ditto.
+
+2002-02-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-treat-body-boundary): Add
+       gnus-decoration property.
+       * gnus-msg.el (gnus-copy-article-buffer): Remove gnus-decoration.
+
+       * message.el (message-mode): Set local-abbrev-table.
+       From Matt Armstrong <matt@lickey.com>.
+
+       * gnus-art.el (gnus-article-treat-unfold-headers): Don't remove
+       too many spaces.
+
+       * rfc2047.el (rfc2047-unfold-region): Ditto.
+       (rfc2047-decode-region): Don't unfold. Let
+       gnus-article-treat-unfold-headers do it.
+
+       * gnus-sum.el (gnus-dependencies-add-header): Fix typo.
+       From: Jesper Harder <harder@ifa.au.dk>
+
+2002-02-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-posting-styles): Add x-face-file.
+       (gnus-configure-posting-styles): Use it.
+       (gnus-configure-posting-styles): Remove trailing newspaces.
+
+2002-02-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-articles-to-read): Fetch all if the predicate
+       is non-nil.
+
+       * mm-util.el (mm-use-find-coding-systems-region): Add doc.
+
+       * gnus.el (gnus-server-to-method): Switch position with
+       gnus-server-get-method.
+       (gnus-agent): Add doc.
+
+       * gnus-sum.el (gnus-article-no-strict-mime): New variable.
+       (gnus-summary-save-parts): Use it.
+
+       * gnus-art.el (gnus-display-mime): Use it.
+       * mm-partial.el (mm-partial-find-parts): Use it.
+
+       * 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\e,Av\e(Br <xsteve@riic.at>.
+
+       * nnagent.el (nnagent-request-expire-articles): Don't delete
+       files.
+
+2002-02-05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-gen-unsubscribed-mft): New function.
+       From Sriram Karra <karra@cs.utah.edu>.
+
+       * gnus.el (gnus-article-unpropagated-mark-lists): Backslash the
+       open parenthesis.
+
+       * mm-view.el (mm-w3-prepare-buffer): Bind url-gateway-unplugged.
+       (mm-inline-text-html-render-with-w3): Ditto.
+       * gnus-art.el (gnus-article-wash-html-with-w3): Ditto.
+       Suggested by Dave Love  <d.love@dl.ac.uk>.
+
+       * mm-url.el (mm-url-load-url): Require w3-vars for old versions.
+
+       * nntp.el (nntp-send-command-and-decode): Check PROCESS.
+       * nntp.el (nntp-send-command): Ditto.
+       * nntp.el (nntp-send-command-nodelete): Ditto.
+
+2002-02-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-url.el (mm-url-load-url): New function.
+       (mm-url-insert-file-contents): Use it.
+
+       * gnus-msg.el (gnus-summary-mail-forward): Use gnus-article-charset.
+
+       * message.el (message-forward-make-body): Correctly copy
+       forward-buffer.
+
+       * rfc2047.el (rfc2047-decode-region): Don't decode us-ascii characters.
+
+2002-02-04  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-article-followup-with-original): Mark with
+       force, prevent errors when following up from article buffer.
+       (gnus-article-reply-with-original): Ditto.
+
+       * binhex.el (binhex-decoder-switches): Fix doc.  From
+       Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk).
+
+2002-02-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-treatment-function-alist): Move hide-citation,
+       highlight-citation after emphasize.
+
+2002-02-04  Simon Josefsson  <jas@extundo.com>
+
+       * nnfolder.el (nnfolder-open-marks):
+
+       * nnml.el (nnml-open-marks): Message when done.  From David
+       Edmondson <dme@sun.com>.
+
+2002-02-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * imap.el (imap-anonymous-auth): Fix typo.
+       From: Steinar Bang <sb@dod.no>
+
+       * gnus-cache.el (gnus-cache-braid-nov): Use set-buffer instead of
+       save-excursion.
+       (gnus-cache-braid-heads): Ditto.
+
+       * gnus-agent.el (gnus-agent-copy-nov-line): Move to the correct
+       line, because there are extra articles in the overview buffer.
+
+       * nntp.el (nntp-retrieve-groups): Check whether BUF is live.
+
+       * message.el (message-forward-rmail-make-body): Directly use
+       rmail-msg-restore-non-pruned-header to avoid calling
+       vertical-motion.
+
+2002-02-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-cache.el (gnus-summary-insert-cached-articles):
+       (gnus-summary-limit-include-cached): gnus-newsgroup-cached is sorted.
+
+       * gnus-group.el (gnus-group-mark-article-read): Nreverse
+       gnus-newsgroups-unselected.
+
+       * gnus-agent.el (gnus-summary-set-agent-mark): Use
+       gnus-add-to-sorted-list.
+
+       * gnus-sum.el (gnus-summary-update-info): gnus-newsgroup-unreads
+       gnus-newsgroup-unselected are sorted. Use gnus-sorted-union.
+       (gnus-build-all-threads): Use gnus-add-to-sorted-list.
+       (gnus-update-read-articles): UNREAD is sorted.
+       (gnus-newsgroup-unreads, gnus-newsgroup-unselected)
+       (gnus-newsgroup-marked, gnus-newsgroup-cached)
+       (gnus-newsgroup-expirable, gnus-newsgroup-downloadable)
+       (gnus-newsgroup-dormant): Require sorted.
+
+       * gnus-dired.el (gnus-dired-find-file-mailcap): Correctly handle
+       directories.
+       (gnus-dired-print): New function.
+
+       * gnus-art.el (gnus-mime-print-part): Add argument filename. Call
+       ps-despool.
+
+2002-02-02  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-dired.el (turn-on-gnus-dired-mode): Autoload.  Make defun.
+
+2002-02-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-1): Call gnus-agentize if gnus-agent is
+       t. This makes gnus-agent customizable without putting
+       gnus-agentize into .gnus.
+
+       * gnus.el (gnus-agent): Make it customizable.
+
+       * gnus-dired.el: New file.
+       From Benjamin Rutt <brutt@bloomington.in.us>
+
+       * 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-01  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-int.el (gnus-request-accept-article): Use gnus-get-function.
+
+2002-02-01  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-view.el (mm-w3m-mode-dont-bind-keys): New variable.
+       (mm-setup-w3m): Don't bind keys listed in the above.
+
+2002-02-01  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-view.el (mm-inline-text-html-render-with-w3m): Bind
+       `w3m-safe-url-regexp' with nil if `mm-inline-text-html-with-images'
+       is non-nil; bind `w3m-force-redisplay' with nil.
+
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto.
+
+       * mm-decode.el (mm-inline-text-html-with-images): Supplement docs.
+
+2002-01-31  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-request-replace-article): Unfold. Don't
+       use mail-header-unfold-field.
+
+       * gnus-cache.el (gnus-summary-insert-cached-articles): Use
+       gnus-summary-limit.
+
+       * gnus-range.el (gnus-add-to-sorted-list): New function.
+       * gnus-sum.el (gnus-mark-article-as-read): Use it.
+       (gnus-mark-article-as-unread): Ditto.
+       (gnus-summary-mark-article-as-unread): Ditto.
+       (gnus-build-get-header): Ditto.
+       (gnus-summary-prepare-threads): Ditto.
+       (gnus-summary-insert-pseudos): Ditto.
+       (gnus-articles-to-read): Use gnus-sorted-union and gnus-sorted-nunion.
+       (gnus-summary-insert-new-articles): Use gnus-sorted-nunion.
+       (gnus-summary-insert-old-articles): Ditto.
+
+       * gnus-msg.el (gnus-posting-styles): Add new format of header.
+       (gnus-configure-posting-styles): Support the new format.
+
+       * mail-source.el (mail-source-bind, mail-source-bind-common): Set
+       edebug-form-spec to (sexp body).
+       Suggested by Joe Wells <jbw@izanami.cee.hw.ac.uk>.
+
+       * message.el (message-reply-headers): Add doc.
+
+2002-01-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-delete-group): Nix the entry in
+       gnus-cache-active-hashtb.
+
+       * gnus-agent.el (gnus-agent-mark-unread-afer-downloaded): New variable.
+       (gnus-agent-summary-fetch-group): Use it.
+
+       * gnus-msg.el (gnus-debug-files): New variable.
+       (gnus-debug-exclude-variables): New variable.
+       (gnus-debug): Use them.
+
+       * gnus-range.el (gnus-range-length): Don't use gnus-uncompress-range.
+
+2002-01-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-cite-prefix-regexp): Use text-mode-syntax-table.
+       (message-mode-syntax-table): Move back the previous position.
+
+       * nnagent.el (nnagent-retrieve-headers): Use gnus-sorted-difference.
+
+       * gnus-agent.el (gnus-agent-retrieve-headers): Use
+       gnus-sorted-difference.
+
+       * nnsoup.el (nnsoup-request-expire-articles): Use
+       gnus-sorted-difference.
+
+       * nnheader.el: Autoload gnus-sorted-difference.
+
+       * nnfolder.el (nnfolder-request-expire-articles): Use
+       gnus-sorted-difference.
+
+       * gnus-cache.el (gnus-cache-retrieve-headers): Use
+       gnus-sorted-difference.
+
+       * gnus-range.el: Autoload cookies.
+       (gnus-sorted-difference): New function.
+       (gnus-sorted-ndifference): New function.
+       (gnus-sorted-nintersection): Rename from
+       gnus-set-sorted-intersection.
+       (gnus-sorted-nunion): Rename from gnus-set-sorted-union.
+       (gnus-list-range-difference): Rename from
+       gnus-inverse-list-range-intersection.
+       (gnus-inverse-list-range-intersection): Use defalias.
+
+       * gnus-sum.el (gnus-select-newsgroup): Use gnus-sorted-difference,
+       gnus-sorted-ndifference, and gnus-sorted-nintersection.
+       (gnus-articles-to-read): Use gnus-sorted-difference.
+       (gnus-summary-limit-mark-excluded-as-read): Use
+       gnus-sorted-intersection and gnus-sorted-ndifference.
+       (gnus-list-of-read-articles): Use gnus-list-range-difference.
+       (gnus-summary-insert-articles): Use gnus-sorted-difference.
+
+       * gnus-sum.el (gnus-summary-update-info): Use gnus-sorted-union.
+
+2002-01-30  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Add keymap
+       property to the buffer for using emacs-w3m command keys.
+
+       * mm-decode.el (mm-inline-text-html-with-w3m-keymap): New user
+       option.
+
+       * mm-view.el (mm-w3m-mode-map): New variable.
+       (mm-w3m-mode-command-alist): New variable.
+       (mm-w3m-minor-mode): Removed.
+       (mm-setup-w3m): Setup `mm-w3m-mode-map'; don't add minor mode.
+       (mm-inline-text-html-render-with-w3m): Add keymap property to the
+       buffer for using emacs-w3m command keys.
+
+2002-01-29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-mode-syntax-table): Move forward.
+       (message-cite-prefix-regexp): Auto detect non word constituents.
+       (message-cite-prefix-regexp): Don't use with-syntax-table.
+
+       * gnus-sum.el (gnus-summary-update-info): Use
+       gnus-list-range-intersection.
+
+       * gnus-agent.el (gnus-agent-fetch-headers): Use
+       gnus-list-range-intersection.
+
+       * gnus-range.el (gnus-range-normalize): Use correct predicate.
+       (gnus-list-range-intersection): Use it.
+       (gnus-inverse-list-range-intersection): Ditto.
+       (gnus-sorted-intersection): Add doc.
+       (gnus-set-sorted-intersection): Add doc.
+       (gnus-sorted-union): New function.
+       (gnus-set-sorted-union): New function.
+
+       * gnus-range.el (gnus-list-range-intersection): Correct the logic.
+       (gnus-inverse-list-range-intersection): Ditto.
+
+2002-01-29  Karl Kleinpaste  <karl@charcoal.com>
+
+       * mm-uu.el (mm-uu-type-alist): Add optional leading `0'.
+
+       * gnus-uu.el (gnus-uu-shar-name-marker): Add optional leading `0'
+       and permit `:' and `\' in order to handle full Windows pathnames.
+       (gnus-uu-begin-string): Add optional leading `0'.  Leading `0' is
+       technically not correct per standard, but seems to have common use.
+
+2002-01-29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-uu.el (gnus-uu-expand-numbers): Ignore errors when
+       replacing numbers.
+
+2002-01-28  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-followup-with-original): Use (mark).
+
+       * gnus-score.el (gnus-score-insert-help): Move to (point-min).
+       Don't split when the window is small, e.g. when a small *BBDB*
+       window is the lowest one.
+
+       * gnus-agent.el (gnus-agent-retrieve-headers): Use
+       nnheader-find-nov-line to speed up. Use nreverse, because it is
+       sorted. Use nnheader-insert-nov-file.
+
+2002-01-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-decode.el (mm-inline-text-html-with-images): New user option.
+
+       * mm-view.el (mm-inline-text-html-render-with-w3m): Bind the value
+       of `w3m-display-inline-images' with the value of
+       `mm-inline-text-html-with-images'.
+       From: TSUCHIYA Masatoshi <tsuchiya@namazu.org>.
+
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Ditto.
+
+2002-01-27  Richard M. Stallman  <rms@gnu.org>
+
+       * time-date.el: Add autoload cookies.  Many doc fixes.
+       (time-add): New function.
+       (time-subtract): Renamed from subtract-time.
+       (subtract-time): New alias for time-subtract.
+
+2002-01-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Replace w3m to
+       emacs-w3m in doc-string.
+
+       * lpath.el: Bind `w3m-cid-retrieve-function-alist' and
+       `w3m-current-buffer'.
+
+2002-01-27  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Handle cid: URLs.
+
+       * mm-view.el (mm-setup-w3m): Add `mm-w3m-cid-retrieve' to
+       `w3m-cid-retrieve-function-alist' for `gnus-article-mode'.
+       (mm-w3m-cid-retrieve): New function.
+       (mm-inline-text-html-render-with-w3m): Handle cid: URLs.
+
+2002-01-27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-fetch-articles): Don't save empty articles.
+
+2002-01-27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-util.el (gnus-cache-file-contents): Don't use equalp.
+
+2002-01-26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnheader.el (nnheader-insert-nov-file): Increased cutoff to
+       32K.
+
+       * gnus-sum.el (gnus-summary-expire-articles): Clean up.
+
+       * nnmail.el (nnmail-article-group): Decode headers before running
+       split rules over them.
+       (nnmail-mail-splitting-charset): New variable.
+
+       * smiley.el: Replaced with smiley-ems.el.
+
+2002-01-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-url.el (mm-url-predefined-programs): Add w3m.
+       (mm-url-program): Ditto.
+
+2002-01-26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnml.el (nnml-use-compressed-files): New variable.
+       (nnml-filenames-are-evil): Removed.
+       (nnml-current-group-article-to-file-alist): Don't use.
+       (nnml-update-file-alist): Inhibit.
+       (nnml-article-to-file): Use new var.
+
+2002-01-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-parse-without-error): Add edebug-form-spec.
+
+       * nnagent.el (nnagent-retrieve-headers): loop until eobp.
+
+2002-01-26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-load-alist): Use new caching
+       function.
+
+       * gnus-util.el (gnus-cache-file-contents): New function.
+
+       * gnus-agent.el (gnus-agent-file-loading-cache): New variable.
+       (gnus-agent-load-alist): Use it.
+
+       * nnagent.el (nnagent-retrieve-headers): Use optimized function.
+
+       * nnheader.el (nnheader-insert-nov-file): New function.
+
+       * gnus-util.el (gnus-parse-without-error): Correct the loop.
+
+       * gnus-sum.el (gnus-dependencies-add-header): Use in-reply-to if
+       there are no references.
+       (gnus-extract-message-id-from-in-reply-to): New function.
+       (gnus-nov-parse-line): Use in-reply-to if there are no
+       references.
+
+2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnagent.el (nnagent-retrieve-headers): Use new macro.
+
+       * gnus-util.el (gnus-parse-without-error): New macro.
+
+2002-01-25  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-wash-html-with-w3m): Call w3m-region.
+       (gnus-article-wash-function): use locate-library to decide which
+       to use.
+
+2002-01-25  Simon Josefsson  <jas@extundo.com>
+
+       * pop3.el (pop3-munge-message-separator): Work if no date.
+       Trivial patch from Marius Vollmer <mvo@zagadka.ping.de>.
+
+2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-save-alist): Fix.
+
+       * nnagent.el (nnagent-retrieve-headers): Must have cut too much by
+       mistake.  Reinstated lost code.
+
+2002-01-25  Josh Huber  <huber@alum.wpi.edu>
+
+       * mml2015.el (mml2015-mailcrypt-decrypt): Display a signature if
+       one exists in the case of an encrypted message with an internal
+       signature.
+
+2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-save-alist): Optimized.
+
+2002-01-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el: Commented out the experimental code.
+
+2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-range.el (gnus-inverse-list-range-intersection): Off-by-one
+       error.
+
+       * gnus.el (gnus-server-to-method): Made into subst.
+       (gnus-server-method-cache): New variable.
+       (gnus-server-to-method): Use it.
+       (gnus-group-method-cache): New variable.
+       (gnus-find-method-for-group-1): Renamed.
+       (gnus-find-method-for-group): New function.
+       (gnus-group-method-cache): Removed.
+
+       * gnus-sum.el (gnus-compute-unseen-list): Use new optimized
+       function.
+
+       * gnus-range.el (gnus-members-of-range): New function.
+       (gnus-list-range-intersection): Renamed.
+       (gnus-inverse-list-range-intersection): New function.
+
+       * gnus-sum.el (gnus-compute-unseen-list): Made into own function.
+
+       * nnagent.el (nnagent-retrieve-headers): New implementation.
+
+       * gnus-agent.el (gnus-agent-get-undownloaded-list): New, faster
+       implementation.
+
+2002-01-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el: Fbind `w3m-charset-to-coding-system'; bind
+       `w3m-meta-content-type-charset-regexp'.
+
+       * mm-view.el (mm-inline-text-html-render-with-w3m): Decode
+       charset-encoded html contents.
+
+2002-01-24  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-request-article): Make sure it is not
+       an empty file.
+
+       * nnweb.el (url): Ignore errors when request url.
+
+       * nnrss.el: Clean up the comments.
+
+2002-01-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * lpath.el: Fbind `w3m-region'; bind `w3m-mode-map'.
+
+       * mm-decode.el (mm-inline-text-html-renderer): New user option.
+       (mm-inline-media-tests): Test whether the value of
+       `mm-inline-text-html-renderer' is a function for text/html.
+
+       * mm-view.el (mm-inline-text-html-render-with-w3): New function
+       separated from `mm-inline-text'.
+       (mm-w3m-minor-mode): New variable.
+       (mm-w3m-setup): New variable.
+       (mm-setup-w3m): New function.
+       (mm-inline-text-html-render-with-w3m): New function.
+       (mm-inline-text): Funcall `mm-inline-text-html-renderer' for
+       text/html.
+
+2002-01-23  Paul Jarc  <prj@po.cwru.edu>
+
+       * lpath.el: fbind make-symbolic-link and unix-sync for nnmaildir.
+
+2002-01-23  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-xmas.el (gnus-xmas-redefine): Quote `gnus-completing-read'
+       and `gnus-xmas-completing-read'.
+
+2002-01-19  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * nneething.el (nneething-message-id-number): Abolished.
+       (nneething-encode-file-name): Not encode numerical characters.
+       (nneething-make-head): `nneething-message-id-number' is not
+       used to generate message IDs.
+
+2002-01-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-emphasis-alist): Include !? as sentence-ending
+       characters.
+
+2002-01-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-xmas.el (gnus-xmas-completing-read): New function.
+       (gnus-xmas-redefine): Redefine conditionally.
+
+2002-01-22  Josh Huber  <huber@alum.wpi.edu>
+
+       * mml.el (mml-parse-1): Fixed usage of recipients in the secure
+       tag.
+
+2002-01-22  Josh Huber  <huber@alum.wpi.edu>
+
+       * message.el (message-font-lock-keywords): Added the secure tag.
+       * mml-sec.el: Added functions to generate/modify/remove the secure
+       tag while in message mode.
+       * mml-sec.el (mml-secure-message): New.
+       * mml-sec.el (mml-unsecure-message): New.
+       * mml-sec.el (mml-secure-message-sign-smime): New.
+       * mml-sec.el (mml-secure-message-sign-pgp): New.
+       * mml-sec.el (mml-secure-message-sign-pgpmime): New.
+       * mml-sec.el (mml-secure-message-encrypt-smime): New.
+       * mml-sec.el (mml-secure-message-encrypt-pgp): New.
+       * mml-sec.el (mml-secure-message-encrypt-pgpmime): New.
+       * mml.el (mml-parse-1): Added code to recognise the secure tag and
+       convert it to either a part or multipart depending on if there are
+       other parts in the message.
+       * mml.el (mml-mode-map): Changed default sign/encrypt keybindings
+       to use the secure tag, rather than the part tag.
+       * mml.el (mml-preview): Added a save-excursion to keep cursor
+       position after doing an MML preview.
+
+2002-01-22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnheader.el (nnheader-parse-overview-file): New function.
+       (nnheader-write-overview-file): New function.
+
+2002-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-group-fast-parameter): Check better if expansion
+       in wanted.
+
+       * nnweb.el (nnweb-type-definition): Clean up.
+
+2002-01-21  Alastair Burt  <burt@dfki.de>
+       Trivial patch.
+
+       * gnus-art.el (gnus-mm-display-part): Make sure that the summary
+       buffer exists before jumping to it.
+
+2002-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-wash-html-with-w3): Made into own
+       function.
+       (article-wash-html): Use it.
+       (gnus-article-wash-function): New variable.
+       (gnus-article-wash-html-with-w3m): New function.
+
+2002-01-20  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.umu.se>
+
+       * dgnushack.el (dgnushack-compile): Compile smiley-ems for
+       XEmacs.
+
+2002-01-20  John H. Palmieri  <palmieri@math.washington.edu>
+
+       * gnus-fun.el (gnus-convert-image-to-gray-x-face): More standard
+       command line.
+
+2002-01-21  Simon Josefsson  <jas@extundo.com>
+
+       * canlock.el (base64-encode-string): Autoload it from base64.
+       (canlock-make-cancel-key): Base64 encode unibyte string.
+
+2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnfolder.el (nnfolder-request-accept-article): Unfold
+       x-from-line.
+       (nnfolder-request-replace-article): Ditto.
+
+2002-01-20  Nevin Kapur  <nevin@jhu.edu>
+
+       * gnus-group.el (gnus-group-best-unread-group): Use the right
+       positioning function.
+
+2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * smiley-ems.el (smiley-region): Use new function.
+       (smiley-update-cache): Use general image functions.
+       (smiley-region): Use general functions.
+
+       * gnus-util.el (gnus-graphic-display-p): New function.
+
+       * nnmail.el (nnmail-article-group): Allow outputting traces of
+       non-strings.
+
+       * nndoc.el (nndoc-type-alist): Rules for exim bounces.
+       (nndoc-exim-bounce-type-p): New function.
+
+       * message.el (message-dont-send): Doc fix.
+
+       * gnus-util.el (gnus-completing-read): Remove
+       inherit-input-method.
+
+       * gnus-art.el (gnus-treat-smiley): Doc fix.
+
+       * gnus-agent.el (gnus-agent-fetch-headers): Ignore seen and recent
+       articles.
+
+2002-01-19  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-gssapi-open): Don't wait for logout to complete.
+       (imap-kerberos4-open): Ditto.
+       (imap-open): Set port correctly, don't set auth.
+
+2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-version-number): Bump version number.
+
+2002-01-20 05:33:30 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.05 is released.
+
+2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnkiboze.el (nnkiboze-generate-group): Make sure the directory
+       exists.
+
+       * gnus-spec.el (gnus-string-width-function): New function.
+       (gnus-tilde-cut-form): Use it.
+       (gnus-tilde-max-form): Ditto.
+       (gnus-use-correct-string-widths): Default to (featurep 'xemacs).
+       (gnus-substring-function): Use it.
+       (gnus-tilde-cut-form): Ditto.
+       (gnus-substring-function): New function.
+
+       * message.el (message-check-news-header-syntax): New message.
+
+       * gnus.el (gnus-slave-no-server): Doc fix.
+
+       * gnus-spec.el (gnus-use-correct-string-widths): Default to t.
+
+2002-01-15  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-adjust-marked-articles): Fix the record for
+       `seen' if it looks like (seen NUM1 . NUM2).  It should be
+       (seen (NUM1 . NUM2)).
+
+2002-01-20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-topic.el (gnus-topic-catchup-articles): Update article
+       number in closed topics.
+
+2002-01-19  Daniel Pittman  <daniel@rimspace.net>
+
+       * gnus-sum.el (gnus-summary-first-unseen-or-unread-subject): New
+       functions.
+
+2002-01-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-group-find-parameter): Clean up.
+
+       * gnus-sum.el (gnus-summary-goto-subject): Error on non-numerical
+       articles.
+
+       * gnus-util.el (gnus-completing-read-with-default): Renamed.
+
+       * nnmail.el (nnmail-article-group): Clean up.
+
+2002-01-19  Paul Stodghill  <stodghil@cs.cornell.edu>
+
+       * gnus-agent.el (gnus-category-name): Intern the category name.
+
+2002-01-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-topic.el (gnus-topic-move-group): Use gnus-topic-history.
+
+       * gnus-util.el (gnus-completing-read): New function.
+
+2002-01-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-add-wash-type): Use add-to-list.
+
+       * smiley-ems.el (smiley-region): Register smiley.
+       (smiley-toggle-buffer): Rewrite the function.
+       (smiley-active): Removed.
+
+2002-01-19  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-util.el (gnus-parent-id): Optimize null n case.  From
+       Jesper Harder <harder@ifa.au.dk>.
+
+2002-01-18  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * gnus-art.el (gnus-request-article-this-buffer): Call
+       `nneething-get-file-name' to extract the file name from the
+       message id.
+
+       * nneething.el (nneething-encode-file-name): New function.
+       (nneething-decode-file-name): Ditto.
+       (nneething-get-file-name): Ditto.
+       (nneething-make-head): Encode the file name and encapsulate it
+       into the field of the message id.
+
+2002-01-18  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-request-update-info): Don't erase flags that isn't
+       stored in .marks.
+
+       * nnfolder.el (nnfolder-request-update-info): Ditto.
+
+2002-01-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-url-parse-query-string): Allow new line in value.
+
+2002-01-18  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-starttls-p): Don't check for binary.
+       (imap-gssapi-auth-p): Ditto.
+       (imap-kerberos4-auth-p): Ditto.
+       (imap-open): Change logic.  Iterate through all possible streams,
+       instead of bailing out after first failure.  Move authenticator
+       decision to `imap-authenticate'.
+       (imap-authenticate): Change logic, now finds the authenticator to
+       use, was previously in `imap-open'.
+       (imap-open): Return nil on failure.
+       (imap-open): Setup temp buffer correctly.
+       (imap-open): Return buffer only on success.
+       (imap-interactive-login, imap-interactive-login): Tell the user
+       which stream/authenticator is used for the queried
+       username/password.
+       (imap-open, imap-authenticate): Set variables.
+       (imap-gssapi-auth-p, imap-kerberos4-auth-p): Fix typo.
+       (imap-open): Don't assume how `with-temp-buffer' is implemented.
+
+2002-01-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-grab-cam-x-face): New function.
+
+2002-01-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-emphasis-alist): Allow matching "*this*.)".
+
+2002-01-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-toggle-group-plugged): New function.
+       (gnus-agent-group-mode-map): Bind it to "Jo".
+       (gnus-agent-group-make-menu-bar): Add it into menu bar.
+
+2002-01-17  Karl Kleinpaste  <karl@charcoal.com>
+
+       * gnus-xmas.el (gnus-group-toolbar): Add .newsrc save button.
+       (gnus-summary-mail-toolbar): Add mail article deletion button.
+
+       * smiley.el (smiley-deformed-regexp-alist): Eliminate noseless
+       false positives for lines of "^^^^".
+
+       * gnus-picon.el (gnus-picon-find-face): faces database is all
+       lowercase.
+
+2002-01-17  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-retrieve-headers): Use correct buffer.
+       (gnus-agent-braid-nov): Switch back to nntp-server-buffer. Remove
+       duplications.
+       (gnus-agent-batch): Bind gnus-agent-confirmation-function.
+
+2002-01-16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-initial-limit): Inline
+       gnus-summary-limit-children.
+       (gnus-summary-initial-limit): Don't limit if
+       gnus-newsgroup-display is nil.
+       (gnus-summary-initial-limit): No, don't.
+
+       * gnus-util.el
+       (gnus-put-text-property-excluding-characters-with-faces): Inline
+       gnus-put-text-property.
+
+       * gnus-spec.el (gnus-default-format-specs): New variable.
+
+       * gnus-start.el (gnus-read-newsrc-file): Don't clear
+       gnus-format-specs.
+       (gnus-read-newsrc-el-file): Default to gnus-default-format-specs.
+
+       * gnus-spec.el (gnus-update-format-specifications): Really check
+       the Gnus version of the .newsrc.eld file.
+       (gnus-format-specs): Save the new default summary format.
+
+       * gnus-util.el (gnus-parent-id): Check whether references is empty
+       before splitting.
+
+       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Inline some
+       functions.
+       (gnus-gather-threads-by-references): Inline
+       `gnus-split-references'.
+
+       * gnus-spec.el (gnus-summary-line-format-spec): New, optimized
+       default value of gnus-summary-line-format-spec.
+
+2002-01-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-retrieve-headers-1): A better error
+       message.
+       (nnslashdot-request-list): Ditto.
+       (nnslashdot-sid-strip): Removed.
+
+2002-01-15  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-close-asynchronous): Enable.
+       (nnimap-close-group): Expunge.
+
+2002-01-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-user-date-format-alist): Typo.
+       From: Frank Schmitt <usereplyto@Frank-Schmitt.net>
+
+2002-01-15  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * nneething.el (nneething-request-article): Set
+       `nnmail-file-coding-system' to `binary' locally, in order to read
+       files without any conversion.
+
+2002-01-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-retrieve-headers): Use
+       nnheader-file-coding-system and nnmail-active-file-coding-system.
+       (gnus-agent-regenerate-group): Ditto.
+       (gnus-agent-regenerate): Ditto.
+       (gnus-agent-write-active): Ditto.
+       Suggested by Katsumi Yamaoka <yamaoka@jpl.org>
+
+2002-01-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-button-alist): Don't highlight <URL:.
+       Suggested by Ian Fitchet <ian.fitchet@lunanbay.com>
+
+2002-01-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el: We don't need gnus-article-show-all-headers.
+
+       * gnus-art.el (article-show-all, gnus-article-show-all-header):
+       Ditto.
+
+       * gnus-sum.el (gnus-summary-select-article): Don't call
+       show-all-headers, because hidden headers are not hidden text any
+       more.
+
+2002-01-13  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-newline-and-reformat): Use `newline' instead
+       of inserting \n, so that the newline is marked as hard.
+
+       * gnus-spec.el (gnus-pad-form): Don't evaluate EL multiple times.
+       From Jesper Harder <harder@ifa.au.dk>.
+
+2002-01-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * imap.el (imap-close): Keep going if quit.
+
+       * gnus-agent.el (gnus-agent-retrieve-headers): Erase
+       nntp-server-buffer.
+
+2002-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * mm-view.el (mm-display-inline-fontify): Require font-lock to
+       avoid unbinding shadowed variables.
+
+       * gnus-art.el (gnus-picon-databases): Moved here.
+       (gnus-picons-installed-p): Moved here.
+       (gnus-article-reply-with-original): Use `mark'.
+
+       * gnus.el (gnus-picon): Moved here and renamed.
+
+       * gnus-art.el (gnus-treat-from-picon): Only be on if picons are
+       installed.
+       (gnus-treat-mail-picon): Ditto.
+       (gnus-treat-newsgroups-picon): Ditto.
+
+       * gnus-picon.el (gnus-picons-installed-p): New function.
+
+2002-01-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-go-online): Fix doc.
+
+2002-01-12  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-need-unselect-to-notice-new-mail)
+       (nnimap-before-find-minmax-bugworkaround): Use it.
+       (nnimap-find-minmax-uid): Don't reselect current mailbox.
+       (nnimap-dont-close): New variable.
+       (nnimap-close-group): Use it.
+
+2002-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-reply-with-original): Use
+       `mark-active'.
+
+       * gnus-msg.el (gnus-summary-reply): Don't bug out on regions.
+
+       * gnus-logic.el (gnus-advanced-score-rule): Thinko fix.
+       (gnus-score-advanced): Clean up.
+       (gnus-score-advanced): Accept a multiple of the score.
+
+2002-01-12  Simon Josefsson  <jas@extundo.com>
+
+       * flow-fill.el (fill-flowed-display-column)
+       (fill-flowed-encode-columnq): New variables.  Suggested by
+       Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro\e,b_\e(Bjohann).
+       (fill-flowed-encode, fill-flowed): Use them.
+
+       * message.el (message-send-news, message-send-mail): Use
+       m-b-s-n-p-e-h-n.
+
+       * mml.el (autoload): Autoload fill-flowed-encode.
+       (mml-buffer-substring-no-properties-except-hard-newlines): New
+       function.
+       (mml-read-part): Use it.
+       (mml-generate-mime-1): Encode format=flowed if appropriate.
+       (mml-insert-mime-headers): Insert format=flowed.
+
+       * flow-fill.el (fill-flowed-encode): New function.
+       (fill-flowed): Bind fill-column to window width.
+
+2002-01-12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-buffer-name): Return the dead name if
+       it exists.
+       (gnus-summary-setup-buffer): Wake up dead summary buffers.
+       (gnus-summary-buffer-name): Don't return the dead name after all.
+       (gnus-summary-setup-buffer): Kill the dead buffer.
+
+       * gnus-art.el (gnus-article-followup-with-original): Store the
+       value of the mark before deactivating it.
+
+2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-fun.el (gnus-display-x-face-in-from): Fake it.
+       From: Karl Kleinpaste <karl@charcoal.com>
+
+       * gnus-art.el (article-display-x-face): Ditto.
+       (gnus-article-reply-with-original): Use gnus-region-active-p.
+       (gnus-article-followup-with-original): Ditto.
+
+       * gnus-sum.el (gnus-summary-read-group-1): Don't select
+       downloadable article either.
+
+2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-display-x-face): Insert From:.
+
+       * gnus-sum.el (gnus-summary-move-article): Don't draw the
+       article. Bind gnus-display-mime-function and
+       gnus-article-prepare-hook.
+
+       * gnus-agent.el (gnus-agent-retrieve-headers): Load agentview.
+       (gnus-agent-toggle-plugged): Use gnus-agent-go-online. Move
+       gnus-agent-possibly-synchronize-flags to the last.
+       (gnus-agent-go-online): New function. New variable.
+
+2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-regenerate-group): Add clean option.
+       (gnus-agent-regenerate): Ditto.
+
+2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-ignored-news-headers)
+       (message-ignored-mail-headers): Add X-Gnus-Agent-Meta-Information:.
+       Suggested by ARISAWA Akihiro <ari@atesoft.advantest.co.jp>
+
+       * gnus.el (gnus-gethash-safe): New macro.
+
+       * gnus-agent.el (gnus-agent-regenerate-history): New function.
+       (gnus-agent-regenerate): Show messages.
+
+2002-01-11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-regenerate-group): New function.
+       (gnus-agent-regenerate): New function.
+       (gnus-agent-save-alist): Sort.
+       (gnus-agent-copy-nov-line): Test eobp.
+       (gnus-agent-retrieve-headers): Erase buffer.
+
+2002-01-10  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-to-coding-system): Change charset to cs.
+       From: Torsten Hilbrich <email@myrkr.in-berlin.de>
+
+       * gnus.el (gnus-agent-covered-methods): Move here.
+       (gnus-online): New function.
+       (gnus-agent-method-p): Move here.
+
+       * nnagent.el (nnagent-retrieve-headers): Check whether arts is
+       nil. Remove articles-alist.
+
+       * gnus-start.el (gnus-get-unread-articles): Check online.
+       (gnus-groups-to-gnus-format): Ditto.
+       (gnus-active-to-gnus-format): Ditto.
+
+       * gnus-agent.el (gnus-agent-get-function): Use it.
+       (gnus-agent-get-undownloaded-list): Ditto.
+       (gnus-agent-fetch-session): Only fetch online methods.
+
+       * gnus-srvr.el (gnus-server-make-menu-bar): Add offline.
+       (gnus-server-mode-map): Ditto.
+       (gnus-server-offline-face): New face.
+       (gnus-server-offline-face): New variable.
+       (gnus-server-font-lock-keywords): Add offline.
+       (gnus-server-insert-server-line): Ditto.
+       (gnus-server-offline-server): New function.
+
+       * gnus-int.el (gnus-open-server): Turn to offline.
+       (gnus-server-unopen-status): New variable.
+
+2002-01-10  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnkiboze.el (nnkiboze-request-article): Use
+       gnus-agent-request-article.
+
+       * nnagent.el (nnagent-retrieve-headers): Don't use nnml
+       function. Insert undownloaded NOV.
+
+       * gnus-agent.el (gnus-agent-retrieve-headers): New function.
+       (gnus-agent-request-article): New function.
+
+       * gnus.el (gnus-agent-cache): New variable.
+
+       * gnus-int.el (gnus-retrieve-headers): Use
+       gnus-agent-retrieve-headers.
+       (gnus-request-head): Use gnus-agent-request-article.
+       (gnus-request-body): Ditto.
+
+       * gnus-art.el (gnus-request-article-this-buffer): Use
+       gnus-agent-request-article.
+
+       * gnus-sum.el (gnus-summary-read-group-1): Don't show the first
+       article if it is undownloaded.
+
+2002-01-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-spec.el (gnus-spec-tab): Deal with wide characters.
+
+2002-01-09  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * canlock.el (canlock-string-as-unibyte): New macro.
+       (canlock-sha1-with-openssl): Return a unibyte string.
+       (canlock-make-cancel-key): Treat Message-ID as a unibyte string.
+
+2002-01-09  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-expand-group-parameters): Match \N or \& only.
+
+2002-01-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-encode.el (mm-content-transfer-encoding-defaults): Add
+       application/x-emacs-lisp.
+
+       * gnus-msg.el (gnus-bug): Use application/emacs-lisp.
+
+       * nntp.el (nntp-request-article): Add group parameter.
+       (nntp-request-head): Ditto.
+       (nntp-find-group-and-number): Add parameter group. Figure out
+       number if the status line doesn't give (e.g. quimby.gnus.org).
+
+2002-01-08  Simon Josefsson  <jas@extundo.com>
+
+       * mml.el (mml-generate-mime-1): Set recipient correctly.
+
+2002-01-08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-read-from-minibuffer): Add parameter
+       initial-contents.
+       * gnus-msg.el (gnus-summary-resend-message): Use it.
+
+       * gnus-group.el (gnus-group-read-ephemeral-group): Restore the old
+       behavior of quit-config.
+
+       * message.el (message-make-from): Don't quote fullname.
+       From: Bj\e,Ax\e(Brn Mork <bmork@dod.no>
+
+       * gnus-group.el (gnus-group-suspend): Don't kill message buffers.
+       From: <andre@slamdunknetworks.com>
+
+2002-01-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-mark-article-read): Typo. Increase n.
+
+       * gnus-art.el (gnus-header-button-alist): Handle mailto.
+
+       * mml.el (mml-preview): Bind gnus-original-article-buffer because
+       article-decode-group-name uses it.  Bind gnus-article-prepare-hook
+       because bbdb may use it.
+
+2002-01-07  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+
+       * nneething.el (nneething-request-article): When a non-text file
+       is converted to an article, its data is encoded in base64.  Call
+       `nneething-make-head' with options to specify MIME types.
+       (nneething-make-head): Add optional arguments to specify MIME
+       types.
+
+2002-01-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-fun.el (gnus-display-x-face-in-from): Fake a "From: "
+       header if there is not.
+
+       * gnus-xmas.el (gnus-xmas-put-image): Insert " " if bobp.
+
+       * gnus-msg.el (gnus-gcc-mark-as-read): New variable.
+       (gnus-inews-mark-gcc-as-read): Obsolete variable.
+       (gnus-inews-do-gcc): Use them.
+
+       * gnus-group.el (gnus-group-mark-article-read): Put holes into
+       gnus-newsgroup-unselected.
+
+2002-01-06  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-ssl-open, imap-ssl-open, imap-parse-fetch): Use
+       condition-case, not ignore-errors.
+
+2002-01-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-insert-old-articles): Bind
+       gnus-fetch-old-headers.
+
+       * gnus-art.el (article-display-x-face): Use the current buffer
+       unless `W f'. Otherwise, X-Face may be shown in the header of a
+       forwarded part.
+       (gnus-treatment-function-alist): Treat xface before hiding
+       headers.
+
+2002-01-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-read-ephemeral-group): Fix
+       parameters.
+
+2002-01-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-multibyte-p): Define conditionally when load.
+       (mm-guess-charset): New function.
+       (mm-charset-after): Use it.
+       (mm-detect-coding-region): New function.
+       (mm-detect-mime-charset-region): New function.
+
+       * gnus-sum.el (gnus-summary-show-article): Use
+       mm-detect-coding-region.
+
+2002-01-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-make-fqdn): Be less violent.
+
+       * gnus.el (gnus-logo-color-style): Compute custom form
+       automatically.
+
+       * gnus-sum.el (gnus-summary-enter-digest-group): Feed the adaptive
+       score file of the parent to the document group.
+
+       * gnus-group.el (gnus-group-read-ephemeral-group): Add an optional
+       parameters parameter.
+
+       * gnus-score.el (gnus-score-load-file): Clean up.
+
+2002-01-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-thread-sort-by-most-recent-number): Fix typo.
+       From: Damien Wyart <damien.wyart@free.fr>
+
+       * gnus-util.el (gnus-local-map-property): In Emacs 21, use keymap.
+
+2002-01-05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-select-group-hook): Typo.
+
+       * rfc2047.el (rfc2047-decode-string): Return immediately if there
+       is no quoted-printable-encoded STRING.
+       From: Jesper Harder <harder@ifa.au.dk>
+
+       (rfc2047-decode-string): Decode it.
+
+2002-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-logo-color-alist): Added more colors from Luis.
+
+2002-01-05  Keiichi Suzuki  <keiichi@nanap.org>
+       Trivial patch.
+
+       * nntp.el (nntp-possibly-change-group): Erase contents of nntp
+       buffer to get rid of junk line.
+
+2002-01-05  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-mode-map): Bind message-goto-from to C-c C-f
+       C-o.
+       (message-mode-map): Bind message-insert-or-toggle-importance to
+       C-c C-u.
+       (message-mode-map): Bind message-disposition-notification-to to
+       C-c M-n.
+       (message-mode-menu): Add m-d-n-t.
+       (message-mode-field-menu): Add m-goto-from.
+       (message-mode): Doc fix.
+       (message-goto-from): New function.
+       (message-insert-disposition-notification-to): New function.
+       (message-tool-bar-map): Add receipt button.
+
+2002-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-thread-latest-date): New function.
+       (gnus-thread-sort-by-most-recent-number): Renamed.
+       (gnus-thread-sort-functions): Doc fix.
+       (gnus-select-group-hook): Don't use setq on a hook.
+       (gnus-thread-latest-date): Use date, not number
+
+       * gnus-agent.el (gnus-agent-expire-days): Doc fix.
+       (gnus-agent-expire): Allow regexp of expire-days.
+
+       * gnus-art.el (gnus-article-reply-with-original): Deactivate
+       region.
+       (gnus-article-followup-with-original): Ditto.
+
+       * gnus-sum.el (gnus-thread-highest-number): Doc fix.
+
+       * gnus-art.el (gnus-mime-display-alternative): Use
+       gnus-local-map-property.
+       (gnus-mime-display-alternative): Ditto.
+       (gnus-insert-mime-security-button): Ditto.
+       (gnus-insert-next-page-button): Ditto.
+       (gnus-button-prev-page): Take optional args.
+       (gnus-insert-prev-page-button): widget-convert.
+
+       * gnus-util.el (gnus-local-map-property): New function.
+
+       * gnus-art.el (gnus-prev-page-map): Use parent map.
+       (gnus-next-page-map): Ditto.
+
+       * gnus-spec.el (gnus-parse-format): Clean up.
+       (gnus-parse-format): Do complex formatting for %=.
+
+       * gnus-fun.el (gnus-display-x-face-in-from): Add the string
+       "X-Face: " to the data in the built-in scenario.
+
+       * gnus-spec.el (gnus-parse-simple-format): Use gnus-pad-form.
+       (gnus-correct-pad-form): Renamed.
+       (gnus-tilde-max-form): Clean up.
+       (gnus-pad-form): Use gnus-use-correct-string-widths.
+
+       * gnus-fun.el (gnus-display-x-face-in-from): Use native xface
+       support if that is available.
+
+       * gnus-sum.el (gnus-thread-highest-number): New function.
+       (gnus-thread-sort-by-most-recent-thread): New function.
+       (gnus-thread-sort-functions): Doc fix.
+
+2002-01-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-select-article): Disable multibyte in
+       all cases.
+       (gnus-summary-mode): Enable it in all cases.
+       (gnus-summary-display-article): Ditto.
+       (gnus-summary-edit-article): Ditto.
+
+       * gnus-ems.el (gnus-put-image): Really return glyph.
+
+       * gnus-art.el (gnus-article-x-face-command): Fix :type.
+       (gnus-treat-smiley): Don't take "P" in the interactive form.
+
+2002-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * compface.el (uncompface): XEmacs and Emacs have differing
+       capabilities.
+
+       * gnus-fun.el (gnus-display-x-face-in-from): Use face.
+
+       * gnus-ems.el (gnus-article-xface-ring-internal): Removed.
+       (gnus-article-xface-ring-size): Removed.
+       (gnus-article-display-xface): Removed.
+       (gnus-remove-image): Cleaned up.
+
+       * gnus-xmas.el (gnus-xmas-create-image): Convert pbm to xbm.
+       (gnus-xmas-create-image): Take pbm files.
+       (gnus-x-face): Removed.
+       (gnus-xmas-article-display-xface): Removed.
+
+       * gnus-fun.el (gnus-display-x-face-in-from): Bind
+       default-enable-multibyte-characters.
+
+       * compface.el (uncompface): Doc fix.
+
+       * gnus-art.el (gnus-article-x-face-command): Use
+       gnus-display-x-face-in-from.
+
+       * gnus-xmas.el (gnus-xmas-put-image): Return the image.
+
+       * gnus-ems.el (gnus-put-image): Return the image.
+
+       * gnus-fun.el (gnus-display-x-face-in-from): New function.
+       (gnus-x-face): Moved here.
+
+2002-01-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-xmas.el (gnus-xmas-put-image): Don't insert SPC or make
+       invisible if string is nil.
+       (gnus-xmas-article-display-xface): Use it.
+
+       * gnus-ems.el (gnus-put-image): Explicitly use SPC, and add text
+       property when string is nil.
+       (gnus-article-display-xface): Use it.
+
+2002-01-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (article-display-x-face): Check whether valid grey
+       face was returned.
+       (article-display-x-face): Place image in the right spot.
+
+       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Get rid of
+       stderr.
+       (gnus-convert-gray-x-face-to-xpm): Check whether output is valid.
+
+2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-xmas.el (gnus-xmas-create-image): Take optional
+       parameters.
+       (gnus-xmas-put-image): Allow non-strings to be passed.
+
+       * gnus-art.el (article-display-x-face): Use optional parameters.
+
+       * gnus-ems.el (gnus-create-image): Take optional parameters.
+
+       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Use uncompface.
+
+       * compface.el (compface-xbm-p): Removed.
+
+       * gnus-ems.el (gnus-article-compface-xbm): Removed.
+       (gnus-article-display-xface): Use compface.
+
+       * compface.el: New file.
+
+       * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Remove quotes.
+       (gnus-convert-image-to-x-face-command): Ditto.
+       (gnus-random-x-face): Quote argument.
+       (gnus-x-face-from-file): Ditto.
+
+2002-01-03  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-request-expire-articles): evaluate
+       the expire-group parameter once per article rather than once
+       per group; bind `nnmaildir-article-file-name' and `article'
+       for convenience.  Leave article alone when expire-group
+       specifies the current group.
+       (nnmaildir--update-nov): be more concurrency-friendly with
+       temp file names.
+
+2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el (gnus-read-init-file): Cleaned up.
+
+2002-01-03  Dave Love  <d.love@dl.ac.uk>
+
+       * gnus-start.el (gnus-startup-file-coding-system): Removed.
+       (gnus-read-init-file): Don't use it.
+
+2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-fetch-session): Run hook.
+
+2002-01-03  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-start.el (gnus-read-init-file): Don't force coding system
+       for ~/.gnus.  From Dave Love <fx@gnu.org>.
+
+2002-01-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-send-buffer): Use mm-with-unibyte-current-buffer.
+       * nnspool.el (nnspool-request-post): Ditto.
+
+       * mm-util.el (mm-use-find-coding-systems-region): New variable.
+       (mm-find-mime-charset-region): Use it.
+
+2002-01-03  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus.el (gnus-summary-line-format): Added :link.
+       * gnus-topic.el (gnus-topic-line-format): Ditto.
+       * gnus-sum.el (gnus-summary-dummy-line-format): Ditto.
+       * gnus-srvr.el (gnus-server-line-format): Ditto.
+       * gnus-group.el (gnus-group-line-format): Ditto.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Use correct syntax for
+       :keys, it works on both Emacsen.
+
+2002-01-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-to-coding-system): Don't setq charset.
+
+2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-summary-send-map): Fix binding for very-wide.
+
+2002-01-03  Reiner Steib  <reiner.steib@gmx.de>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Menu bar entries for
+       very wide reply.
+
+2002-01-03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-picon.el (gnus-picon-transform-address): Cache stuff.
+       (gnus-picon-cache): New variable.
+       (gnus-picon-transform-newsgroups): Cache stuff.
+
+       * gnus-art.el (gnus-article-reply-with-original): New command.
+       (gnus-article-followup-with-original): New command.
+
+       * gnus-msg.el (gnus-copy-article-buffer): Take optional BEG and
+       END parameters.
+       (gnus-summary-followup): Take a list of list of articles.
+       (gnus-inews-yank-articles): Allow lists of article/regions.
+
+       * gnus-art.el (gnus-article-read-summary-keys): `R' and `F' are no
+       longer the usual commands.
+
+       * gnus-fun.el (gnus-convert-image-to-gray-x-face): Use pnmnoraw.
+       (gnus-convert-gray-x-face-to-xpm): Don't use six parameters to
+       shell-command-on-region.
+
+2002-01-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-picon.el (gnus-picon-transform-newsgroups): Fix for the case
+         "Newsgroups: rec.music.beatles.moderated, rec.music.beatles".
+
+2002-01-03  Steve Youngs  <youngs@xemacs.org>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): XEmacs doesn't
+       understand ':keys', wrap it in an featurep 'xemacs.
+
+2002-01-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ems.el (gnus-article-display-xface): Show xface in the
+       order of headers (Actually, it is called in a reversed order). Add
+       'gnus-image-text-deletable property.
+       (gnus-remove-image): Remove text with such a property.
+
+       * gnus-xmas.el (gnus-xmas-article-display-xface): Don't use
+       gnus-put-image.
+
+       * gnus-art.el (gnus-article-treat-fold-newsgroups): Replace ", *"
+       with ", "
+
+2002-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el (gnus-convert-gray-x-face-to-xpm): Renamed.
+
+       * gnus-art.el (gnus-ignored-headers): Hide all X-Faces.
+       (article-display-x-face): Display grey X-Faces.
+
+       * gnus-fun.el (gnus-convert-gray-x-face-region): New function.
+       (gnus-convert-gray-x-face-to-ppm): Ditto.
+       (gnus-convert-image-to-gray-x-face): Ditto.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Add a :keys to
+       gnus-summary-show-raw-article.
+
+2002-01-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       Display picons in XEmacs without showing text.
+
+       * gnus-xmas.el (gnus-xmas-create-image): Don't use
+       mm-create-image-xemacs to create xbm glyph, because it deletes
+       temporary files.
+       (gnus-xmas-put-image): Use end-glyph. Make text invisible.
+       (gnus-xmas-remove-image): Make text visible, remove glyph.
+
+       * gnus-picon.el (gnus-picon-transform-newsgroups)
+       (gnus-picon-transform-address): Insert spec backward, due to the
+       incompatibility of gnus-xmas-put-image.
+
+2002-01-02  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
+
+       * gnus-fun.el (gnus-convert-pbm-to-x-face-command): Doc fix.
+
+2002-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el: Doc fix.
+
+       * gnus-art.el: Doc fix.
+
+       * gnus-agent.el: Doc fix.
+
+2002-01-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-diary.el, gnus-delay.el: Fix copyright lines.
+
+2002-01-01  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir--update-nov): automatically parse
+       NOV data out of the message again if nnmail-extra-headers has
+       changed.
+
+2002-01-02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-fun.el: New file.
+       (gnus-convert-image-to-x-face-command): New variable.
+       (gnus-insert-x-face): New function.
+       (gnus-random-x-face): Renamed.
+       (gnus-x-face-from-file): Renamed.
+
+       * gnus-art.el (gnus-body-boundary-delimiter): Changed default to
+       "_".
+       (gnus-body-boundary-delimiter): Typo fix.
+
+2002-01-02  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-article-treat-body-boundary): Handle nil.
+       (gnus-body-boundary-delimiter): Fix type.
+
+2002-01-01  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-treat-buttonize, gnus-treat-buttonize-head)
+       (gnus-treat-emphasize, gnus-treat-strip-cr)
+       (gnus-treat-leading-whitespace, gnus-treat-hide-headers)
+       (gnus-treat-hide-boring-headers, gnus-treat-hide-signature)
+       (gnus-treat-fill-article, gnus-treat-hide-citation)
+       (gnus-treat-hide-citation-maybe)
+       (gnus-treat-strip-list-identifiers, gnus-treat-strip-pgp)
+       (gnus-treat-strip-pem, gnus-treat-strip-banner)
+       (gnus-treat-highlight-headers, gnus-treat-highlight-citation)
+       (gnus-treat-date-ut, gnus-treat-date-local)
+       (gnus-treat-date-english, gnus-treat-date-lapsed)
+       (gnus-treat-date-original, gnus-treat-date-iso8601)
+       (gnus-treat-date-user-defined, gnus-treat-strip-headers-in-body)
+       (gnus-treat-strip-trailing-blank-lines)
+       (gnus-treat-strip-leading-blank-lines)
+       (gnus-treat-strip-multiple-blank-lines)
+       (gnus-treat-unfold-headers, gnus-treat-fold-headers)
+       (gnus-treat-fold-newsgroups, gnus-treat-overstrike)
+       (gnus-treat-display-xface, gnus-treat-display-smileys)
+       (gnus-treat-from-picon, gnus-treat-mail-picon)
+       (gnus-treat-newsgroups-picon, gnus-treat-body-boundary)
+       (gnus-treat-capitalize-sentences, gnus-treat-fill-long-lines)
+       (gnus-treat-play-sounds, gnus-treat-translate)
+       (gnus-treat-x-pgp-sig): Doc fix, add link to manual.
+
+       * gnus-art.el (gnus-body-boundary-delimiter): New variable.
+       (gnus-article-treat-body-boundary): Use it.
+
+       * message.el (message-mode): Fix doc.
+       (message-mode-menu): Fix names.
+
+2002-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-first-subject): Really go to unseen
+       articles.
+
+       * gnus-picon.el (gnus-picon-find-face): Search MISC for all types.
+       (gnus-picon-transform-address): Search for unknown faces as well.
+       (gnus-picon-find-face): Don't search "news" for MISC.
+       (gnus-picon-user-directories): Changed default back to exclude
+       "unknown".
+
+       * gnus-sum.el (gnus-summary-hide-all-threads): Reversed logic.
+
+       * gnus-picon.el (gnus-picon-find-face): Search through all
+       databases.
+       (gnus-picon-find-face): New implementation.
+
+       * gnus-topic.el (gnus-topic-goto-previous-topic): New command and
+       keystroke.
+       (gnus-topic-goto-next-topic): Ditto.
+
+       * gnus.el (gnus-summary-line-format): Changed default.
+
+       * nnmail.el (nnmail-extra-headers): Change default.
+
+       * gnus-sum.el (gnus-extra-headers): Change default.
+
+       * message.el (message-news-other-window): Changed "news" to
+       "posting".
+       (message-news-other-frame): Ditto.
+       (message-do-send-housekeeping): Ditto.
+
+       * gnus-sum.el (gnus-summary-maybe-hide-threads): Use predicate
+       function.
+       (gnus-article-unread-p): New function.
+       (gnus-article-unseen-p): New function.
+       (gnus-dead-summary-mode-map): Typo.
+
+       * gnus-util.el (gnus-make-predicate): New function.
+       (gnus-make-predicate-1): New function.
+
+       * gnus-sum.el: New function.
+       (gnus-map-articles): New function.
+
+       * gnus-art.el (gnus-treat-fold-headers): New variable.
+       (gnus-article-treat-fold-headers): New command and keystroke.
+
+       * gnus-sum.el (gnus-dead-summary-mode-map): Clean up.
+       (gnus-dead-summary-mode-map): Bind q to bury-buffer.
+
+2002-01-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-fcc-externalize-attachments): New variable.
+       (message-do-fcc): Use it.
+
+       * gnus-msg.el (gnus-gcc-externalize-attachments): New variable.
+       (gnus-inews-do-gcc): Use it.
+
+       * mml.el (mml-tweak-sexp-alist): New variable.
+       (mml-externalize-attachments): New variable.
+       (mml-tweak-part): Use mml-tweak-sexp-alist.
+       (mml-tweak-externalize-attachments): New function.
+
+2002-01-01  Steve Youngs  <youngs@xemacs.org>
+
+       * gnus-xmas.el (gnus-xmas-article-display-xface): Uncomment
+       'set-glyph-face' so x-face back/foreground can be set.
+
+2001-12-31  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-fix-before-sending): Fix a typo.
+
+2002-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-treat-smiley): Renamed command.
+       (gnus-article-remove-images): New command and keystroke.
+
+       * gnus-sum.el (gnus-summary-toggle-smiley): Removed.
+
+       * smiley-ems.el (gnus-smiley-display): Removed.
+
+       * gnus.el (gnus-version-number): Update version.
+
+       * message.el (message-text-with-property): Renamed and moved
+       here.
+       (message-fix-before-sending): Highlight invisible text and place
+       point there.
+
+2002-01-01 02:32:53 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.04 is released.
+
+2002-01-01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-delay.el (gnus-delay-send-queue): Renamed.
+
+       * gnus-art.el (gnus-ignored-headers): More headers,
+
+       * ietf-drums.el (ietf-drums-parse-addresses): Use `error' instead
+       of `scan-error', since XEmacs doesn't seem to support that.
+
+2001-12-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-best-unread-article): Take a prefix
+       arg.
+       (gnus-summary-best-unread-subject): Ditto.
+       (gnus-summary-best-unread-subject): No, don't.
+       (gnus-summary-better-unread-subject): New command.
+
+       * gnus-xmas.el (gnus-xmas-put-image): Insert the string itself.
+
+       * lpath.el ((featurep 'xemacs)): fbind url function.
+
+       * gnus-xmas.el (gnus-xmas-article-display-xface): Use data, not
+       buffer.
+       (gnus-xmas-remove-image): Implementation that does something.
+       (gnus-xmas-article-display-xface): Mark images properly.
+
+       * gnus-art.el (gnus-mime-print-part): Use mm-temp-directory.
+
+2001-12-31  Florian Weimer  <fw@deneb.enyo.de>
+
+       * gnus.el (gnus): Warn if trying to run Gnus un-byte-compiled.
+
+2001-12-31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-line-format): Added %O to the default
+       value.
+
+       * gnus-util.el (gnus-text-with-property): The smallest point is
+       point-min.
+
+       * smiley-ems.el (smiley-region): Return images.
+       (gnus-smiley-display): Allow toggling.
+       (smiley-region): Use text properties, not overlays.
+
+       * gnus-xmas.el (gnus-xmas-remove-image): New function, not
+       implemented yet.
+
+       * smiley-ems.el (smiley-update-cache): Check for valid types.
+
+       * gnus-art.el (gnus-with-article-buffer): New macro.
+
+       * gnus-picon.el (gnus-picon-transform-newsgroups): Keep the
+       strings as well as the glyphs.
+       (gnus-picon-transform-address): Ditto.
+       (gnus-picon-insert-glyph): Ditto.
+       (gnus-picon-transform-newsgroups): Toggle.
+       (gnus-picon-transform-address): Toggle.
+
+       * gnus-ems.el (gnus-remove-image): New function.
+       (gnus-put-image): Take an optional string.
+
+       * gnus-util.el (gnus-text-with-property): New function.
+
+       * gnus-art.el (gnus-delete-images): New function.
+
+       * gnus-ems.el (gnus-article-display-xface): Mark and store image.
+
+       * gnus-art.el (gnus-article-wash-status-entry): Renamed.
+       (gnus-article-wash-status): Use it.
+       (gnus-signature-toggle): Clean up.
+       (gnus-add-wash-status): New function.
+       (gnus-delete-wash-status): New function.
+       (gnus-article-hide-text-type): Use them throughout.
+       (gnus-add-image): New function.
+
+       * gnus-ems.el (gnus-article-display-xface): Use new interface.
+
+       * gnus-xmas.el (gnus-xmas-article-display-xface): Use new
+       interface.
+
+       * gnus-art.el (article-display-x-face): Cleaned up.
+
+       * rfc2047.el (rfc2047-field-value): New function.
+
+       * mail-parse.el (mail-header-field-value): New alias.
+
+       * gnus-art.el (gnus-mime-print-part): Fix typos.
+
+       * smiley-ems.el (gnus-smiley-file-types): New variable.
+       (smiley-update-cache): Use it.
+       (smiley-regexp-alist): Suffix-less smiley names.
+       (smiley-regexp-alist): Added more smileys.
+
+       * gnus-sum.el (gnus-print-buffer): Made into own function.
+       (gnus-summary-print-article): Use it.
+
+       * mailcap.el (mailcap-mime-info): Actually return the bit that we
+       looked for when REQUEST is a string.
+
+       * gnus-art.el (gnus-mime-button-commands): Add printing
+       keystroke.
+       (gnus-mime-copy-part): Doc fix.
+       (gnus-mime-print-part): New command.
+
+2001-12-31  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-parse-fetch): Notice empty flags responses.  From
+       Nic Ferrier <nferrier@tf1.tapsellferrier.co.uk>.
+
+2001-12-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-picon.el (gnus-treat-from-picon): Autoload.
+       (picon): Fix doc.
+
+       * gnus-win.el (gnus-window-to-buffer): gnus-picon-buffer-name no
+       longer exists. Remove those codes.
+       * gnus.el (gnus-use-picons): Ditto.
+
+2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-treat-fold-newsgroups): Don't
+       infloop.
+
+       * gnus-sum.el (t): New `W D' map.
+
+       * gnus-art.el (gnus-treat-fold-newsgroups): New variable.
+       (gnus-article-treat-body-boundary): Clean up.
+       (gnus-body-boundary-face): Removed.
+       (gnus-article-goto-header): Moved here.
+       (gnus-article-goto-header): Allow better regexps.
+       (gnus-article-treat-fold-newsgroups): New command.
+
+       * gnus-sum.el (gnus-summary-move-article): We have to select an
+       article to give `gnus-read-move-group-name' an opportunity to
+       suggest an appropriate default.
+
+       * rfc2047.el (rfc2047-fold-line): New function.
+       (rfc2047-unfold-line): Ditto.
+       (rfc2047-fold-region): Don't fold just after the header name.
+
+       * mail-parse.el (mail-header-fold-line): New alias.
+       (mail-header-unfold-line): Ditto.
+
+       * gnus-art.el (gnus-body-boundary-face): Renamed.
+       (gnus-article-treat-body-boundary): Use it.
+       (gnus-article-treat-body-boundary): Use an invisible header and a
+       line of underline characters.
+
+2001-12-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * ietf-drums.el (ietf-drums-parse-addresses): Recover from errors.
+
+       * gnus-picon.el (gnus-picon-transform-address): Skip bad addresses.
+       (gnus-picon-split-address): New function.
+       (gnus-picon-find-face): Use it.
+       (gnus-picon-transform-address): Use it. Set first to t for each
+       address.
+
+       * gnus-art.el (gnus-with-article-headers): Move to here. Define
+       the macro then use it.
+       (gnus-treatment-function-alist): Treat picons earlier.
+
+2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-body-separator-face): New variable.
+       (gnus-article-treat-body-boundary): Use a blank, colored line.
+
+       * gnus-picon.el (gnus-picon-find-face): Look into misc/MISC as
+       well.
+
+       * gnus-art.el (gnus-treat-body-boundary): New variable.
+       (gnus-article-treat-unfold-headers): Use helper macro.
+       (gnus-article-treat-body-boundary): New command.
+
+       * gnus.el (gnus-logo-color-style): Change the default color.
+       (gnus-splash-face): Gray, gray.
+
+       * gnus-xmas.el (gnus-xmas-group-startup-message): Use general
+       colors.
+
+       * gnus.el (gnus-logo-color-alist): Moved here and renamed.
+       (gnus-logo-color-style): Ditto.
+       (gnus-logo-colors): Ditto.
+
+       * gnus-picon.el (gnus-picon-create-glyph): Cache glyphs.
+
+       * gnus-art.el (gnus-treat-newsgroups-picon): New variable.
+
+       * gnus-picon.el (gnus-treat-newsgroups-picon): New function.
+       (gnus-picon-transform-newsgroups): New function.
+
+       * ietf-drums.el (ietf-drums-parse-addresses): Accept a nil
+       string.
+
+       * gnus-picon.el (gnus-treat-mail-picon): Renamed.
+
+       * gnus-art.el (gnus-treat-cc-picon): New variable.
+       (gnus-treat-mail-picon): Renamed.
+
+       * gnus-picon.el: New implementation.
+       (gnus-picon-find-face): Renamed.
+       (gnus-treat-from-picon): Use it.
+       (gnus-picon-transform-address): Renamed.
+       (gnus-treat-from-picon): Use it.
+       (gnus-picon-create-glyph): Renamed.
+       (gnus-picon-transform-address): Use it.
+       (gnus-treat-cc-picon): New command.
+
+       * mm-decode.el (mm-create-image-xemacs): Separated out into
+       function.
+       (mm-get-image): Use it.
+
+       * gnus-art.el (gnus-treat-display-picons): Simplify.
+       (gnus-treat-from-picon): Renamed.
+
+       * gnus-ems.el (gnus-create-image): New function.
+       (gnus-put-image): New function.
+
+       * gnus-art.el (gnus-article-treat-unfold-headers): Doc fix.
+       (gnus-with-article-headers): New macro.
+       (gnus-article-goto-header): New function.
+
+       * gnus-xmas.el (gnus-image-type-available-p): New function.
+
+       * gnus-ems.el (gnus-image-type-available-p): New function.
+
+2001-12-30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-check-group): Find the correct tag, because
+       xml.el is changed.
+
+2001-12-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-article-treat-unfold-headers): Only fold when
+       lines are shorter than the window width.
+       (gnus-ignored-headers): More headers.
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-treat-unfold-lines): New variable.
+       (gnus-treat-unfold-headers): Renamed.
+       (gnus-article-treat-unfold-headers): New command and keystroke.
+
+       * rfc2047.el (rfc2047-encode-message-header): Clean up.
+
+       * gnus-int.el (gnus-open-server): Mark quit-ed server as denied.
+
+2001-12-29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * sha1-el.el (sha1-use-external): New variable.
+       (sha1-region): Use it.
+       (sha1-string): Ditto.
+
+       * dgnushack.el (dgnushack-compile): Compile gnus-picon for Emacs.
+       * gnus-picon.el: Less warnings when compile.
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-picon.el (gnus-picons-news-directories): Removed obsolete
+       alias.
+       (gnus-picons-database): Default to list.
+       (gnus-picons-lookup-internal): Use it.
+
+       * nnmail.el (nnmail-article-group): Default nnmail-split-methods
+       to "bogus".
+
+       * gnus-win.el (gnus-configure-windows-hook): New hook.
+
+2001-12-29  Sascha L\e,A|\e(Bdecke  <sascha@meta-x.de>
+
+       * gnus-win.el (gnus-configure-windows): Minimize tree buffer.
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-update-marks): Don't uncompress the seen
+       lists.
+       (gnus-select-newsgroup): Don't append; push.
+       (gnus-adjust-marked-articles): Remove obsolete ranges from
+       `seen'.
+       (gnus-update-marks): Clean up.
+       (gnus-select-newsgroup): Don't stomp gnus-newsgroup-seen.
+
+2001-12-29  Frank Schmitt  <usereplyto@Frank-Schmitt.net>
+
+       * gnus-sum.el (gnus-summary-limit-to-age): Allow negative days.
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-auto-select-subject): New variable.
+       (gnus-summary-best-unread-subject): New function.
+       (gnus-summary-best-unread-article): Use it.
+       (gnus-summary-first-unseen-subject): New function and command.
+
+       * gnus-art.el (gnus-treatment-function-alist): Emphasize after
+       other treatments.
+
+       * gnus-util.el (gnus-put-overlay-excluding-newlines): New
+       function.
+
+       * gnus-art.el (gnus-article-show-hidden-text): Remove the type
+       from the list of hidden types.
+
+       * mm-view.el (mm-inline-text): Ditto.
+       (mm-inline-text): Ditto.
+       (mm-w3-prepare-buffer): Ditto.
+
+       * gnus-art.el (article-wash-html): Inhibit more remote fetching.
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-ignored-headers): Added more headers.
+
+2001-12-29  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Compute the prefix
+       once.
+
+2001-12-29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-srvr.el (gnus-server-browse-in-group-buffer): Doc fix.
+
+2001-12-28  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Fix typo.  From
+       Jesper Harder <harder@ifa.au.dk>.
+
+2001-12-27  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-select-newsgroup): Make
+       `gnus-newsgroup-unseen' sorted.  Make `gnus-newsgroup-unseen'
+       contain all articles (instead of none) when no seen marks have
+       been set for the group.
+       (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  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-iso-8859-x-to-15-region): Use
+       insert-before-markers.
+       From Jesper Harder <harder@ifa.au.dk>
+
+2001-12-26  Paul Jarc  <prj@po.cwru.edu>
+
+       * nnmaildir.el (nnmaildir-save-mail): create the destination
+       groups if they do not exist.
+
+2001-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * canlock.el (canlock-sha1-with-openssl): Remove unused variable.
+
+2001-12-22 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-read-ephemeral-group): Call
+       gnus-group-real-name.
+
+       * gnus-sum.el (gnus-decode-encoded-word-methods): Backslash paren.
+       (gnus-newsgroup-variables): Ditto.
+
+       * gnus.el (gnus-group-prefixed-name): If group name is prefixed,
+       return it.
+
+2001-12-21  Paul Jarc  <prj@po.cwru.edu>
+
+       * gnus.el (gnus-valid-select-methods): Include nnmaildir.
+       * nnmaildir.el (top-level): Add commentary.
+       (nnmaildir-version): Indicate that nnmaildir is now a standard
+       part of Gnus, not separately released.
+
+2001-12-21 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * 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\e,Am\e(Bk  <Pavel@Janik.cz>
+
+2001-12-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmaildir.el: Copyright changes. Require cl only at compile time.
+
+2001-12-20  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (top-level): Don't require cl.  Suggested by ShengHuo
+       ZHU <zsh@cs.rochester.edu>.
+       (nnimap-close-group): Don't quote KEYLIST items.  Suggested by
+       Brian P Templeton <bpt@tunes.org>.
+
+2001-12-19 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmaildir.el: New file.
+       From Paul Jarc <prj@po.cwru.edu>.
+
+2001-12-19 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-type-alist): Move forward to the end.
+
+2001-12-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.el (gnus-find-subscribed-addresses): Replace `mapc' with
+       `dolist'.
+
+2001-12-19 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-frames-on-display-list): New function.
+       (gnus-get-buffer-window): Use it.
+
+2001-12-19 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwarchive.el (nnwarchive-mail-archive-xover): Fix the regexp.
+
+2001-12-18 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-get-buffer-window): Use gnus-delete-if.
+
+2001-12-18 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+          From Harald Meland <Harald.Meland@usit.uio.no>
+
+       * gnus-win.el (gnus-get-buffer-window): New function.
+       (gnus-all-windows-visible-p): Use it.
+
+       * gnus-util.el (gnus-horizontal-recenter)
+       (gnus-horizontal-recenter, gnus-horizontal-recenter)
+       (gnus-horizontal-recenter, gnus-set-window-start): Use it.
+
+       * gnus-score.el (gnus-score-insert-help): Use it.
+
+       * gnus-salt.el (gnus-tree-recenter, gnus-generate-tree)
+       (gnus-generate-tree, gnus-highlight-selected-tree)
+       (gnus-highlight-selected-tree, gnus-tree-highlight-article): Use
+       it.
+
+       * gnus-art.el (gnus-article-set-window-start)
+       (gnus-mm-display-part, gnus-request-article-this-buffer)
+       (gnus-button-next-page, gnus-button-prev-page)
+       (gnus-article-button-next-page, gnus-article-button-prev-page):
+       Use it.
+
+2001-12-18  Josh Huber  <huber@alum.wpi.edu>
+
+       * ChangeLog, ChangeLog.1, nnwfm.el, smiley.el:
+       * gnus-cite.el, gnus-delay.el, gnus-spec.el, message.el:
+       * mml1991.el, nnultimate.el: Removed buffer-file-coding-system tag.
+
+2001-12-18 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * ChangeLog,  ChangeLog.1, nnwfm.el,  gnus-smiley.el:
+       * gnus-cite.el, gnus-delay.el, gnus-spec.el, message.el:
+       * mml1991.el, nnultimate.el: Add `coding'.
+
+2001-12-17  Josh Huber  <huber@alum.wpi.edu>
+
+       * ChangeLog: changed coding to buffer-file-coding-system
+       * ChangeLog.1: same
+       * nnwfm.el: same
+       * gnus-smiley.el: same
+       * gnus-cite.el: moved -*- magic cookie -*- to Local Variables
+       * gnus-delay.el: same
+       * gnus-spec.el: same
+       * message.el: same
+       * mml1991.el: same
+       * nnultimate.el: same
+
+2001-12-16  Simon Josefsson  <jas@extundo.com>
+       Inspired by code by Dirk Meyer <dischi@tzi.de>.
+
+       * gnus-sum.el (gnus-summary-muttprint-program): New variable.
+       (gnus-summary-save-map): Add muttprint.
+       (gnus-summary-make-menu-bar): Ditto.
+       (gnus-summary-muttprint): New function.
+
+       * gnus-art.el (gnus-summary-pipe-to-muttprint): New function.
+
+2001-12-14 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * uudecode.el (uudecode-decode-region-internal): Speedup by using
+       temporary list instead of buffer.
+
+       * mm-url.el (executable-find): autoload.
+
+2001-12-12  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
+
+       * gnus-mlspl.el (gnus-group-split-fancy): Doc fix (add reference
+       to variable, follow doc-string conventions).
+
+2001-12-13  Josh Huber  <huber@alum.wpi.edu>
+
+       * gnus-cus.el (gnus-extra-topic-parameters): added topic parameter
+       subscribe-level
+       * gnus-topic.el (gnus-subscribe-topics): use it.
+
+2001-12-13 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-summary-mail-forward): Forward all marked
+       messages. (A small patch with indentation)
+       From Sean Neakums <sneakums@zork.net>.
+
+       * gnus-uu.el (gnus-uu-grab-articles): Set gnus-current-article to
+       nil after shooting down the gnus-original-article-buffer.
+
+2001-12-13 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * uudecode.el (uudecode-use-external): New variable.
+       (uudecode-decode-region): Automatically detect external program.
+
+       * binhex.el (binhex-use-external): New variable.
+       (binhex-decode-region-internal): New function.
+       (binhex-decode-region): Automatically detect external program.
+
+       * mm-uu.el (mm-uu-decode-function,mm-uu-binhex-decode-function):
+       Use them.
+
+2001-12-12  Simon Josefsson  <jas@extundo.com>
+
+       * nnvirtual.el (nnvirtual-always-rescan)
+       (nnvirtual-component-regexp): Fix doc.
+
+       * nnoo.el (defvoo): Add doc to defvoo variables.
+
+       * nnml.el (nnml-directory, nnml-active-file)
+       (nnml-newsgroups-file, nnml-get-new-mail, nnml-nov-is-evil)
+       (nnml-marks-is-evil, nnml-filenames-are-evil)
+       (nnml-prepare-save-mail-hook, nnml-inhibit-expiry): Fix doc.
+
+       * nnmh.el (nnmh-directory, nnmh-get-new-mail)
+       (nnmh-prepare-save-mail-hook, nnmh-be-safe): Fix doc.
+       (nnmh-possibly-change-directory): Use `nnheader-report' instead of
+       `error'.
+
+       * nnmbox.el (nnmbox-mbox-file, nnmbox-active-file)
+       (nnmbox-get-new-mail, nnmbox-prepare-save-mail-hook):
+
+       * nnfolder.el (nnfolder-directory, nnfolder-active-file)
+       (nnfolder-newsgroups-file, nnfolder-get-new-mail)
+       (nnfolder-save-buffer-hook, nnfolder-inhibit-expiry)
+       (nnfolder-nov-is-evil, nnfolder-marks-is-evil): Fix doc.
+
+       * nnbabyl.el (nnbabyl-mbox-file, nnbabyl-active-file)
+       (nnbabyl-get-new-mail, nnbabyl-prepare-save-mail-hook): Fix doc.
+
+       * imap.el, nnimap.el: Fix indentation.
+
+       * gnus-sieve.el (gnus-sieve-article-add-rule): Autoload it.
+
+2001-12-12  Didier Verna  <didier@xemacs.org>
+
+       * gnus-msg.el (gnus-group-news): New function.
+       * gnus-group.el (gnus-group-mode-map): bind it to `i'.
+       * gnus-group.el (gnus-group-make-menu-bar): add a menu item for it.
+       * gnus-salt.el (gnus-carpal-group-buffer-buttons): add a button
+       for it.
+       * gnus-msg.el (gnus-summary-news-other-window): New function.
+       * gnus-msg.el ((gnus-summary-send-map "S" gnus-summary-mode-map)):
+       bind it to `i'.
+       * gnus-sum.el (gnus-summary-mode-map): bind it to `i'.
+       * gnus-sum.el (gnus-summary-make-menu-bar): add a menu item for it.
+       * gnus-salt.el (gnus-carpal-summary-buffer-buttons): add a button
+       for it (called with a prefix).
+       * gnus-msg.el (gnus-configure-posting-styles): add an optional
+       group-name argument.
+       * gnus-msg.el (gnus-setup-message): use it.
+
+2001-12-12 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-show-article): Fix doc.
+
+2001-12-10 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mime-to-mml): Remove Content-Disposition too.
+
+2001-12-09 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-buffer-name): Decode group name.
+       * gnus-group.el (gnus-group-name-decode): Decode unibyte
+       strings only.
+       From TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+2001-12-08  Nevin Kapur  <nevin@jhu.edu>
+
+       * nnmail.el (nnmail-fancy-expiry-targets): New variable.
+       (nnmail-fancy-expiry-target): Use it.
+       Suggestions from Simon Josefsson <jas@extundo.com>.
+
+2001-12-07 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-show-article): Recount lines if not exist.
+
+2001-12-07 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnwfm.el (nnwfm-create-mapping): Use gnus-url-unhex-string.
+
+       * gnus-util.el (gnus-url-unhex-string): Move here.
+
+2001-12-07 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-decode-entities-unibyte-string): Use
+       mm-url-decode-entities-nbsp.
+
+       * nnlistserv.el, nnultimate.el, nnwarchive.el, nnweb.el:
+       * webmail.el, nnwfm.el: Use mm-url.
+
+       * mm-url.el (mm-url-fetch-form): Move from nnweb.
+       (mm-url-remove-markup): Move from nnweb.
+       (mm-url-fetch-simple): Move from webmail.
+
+       * nnslashdot.el (nnslashdot-request-post): Use mm-url-fetch-form.
+
+2001-12-07 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-print-truncate-and-quote): New function.
+       (gnus-summary-print-article): Use it.
+
+       * gnus-util.el (gnus-replace-in-string): Typo.
+
+2001-12-06 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-replace-in-string): Removed.
+
+       * gnus-util.el (gnus-replace-in-string): New function.
+       (gnus-mode-string-quote): Use it.
+
+       * nnrss.el (nnrss-format-string): Use gnus-replace-in-string.
+       * nnwfm.el (nnwfm-create-mapping): Ditto.
+
+2001-12-06 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (dgnushack-compile): nnrss.el and
+       nnslashdot.el don't depend on nnweb, url, w3.
+
+       * nnrss.el: Use mm-url.
+
+2001-12-06 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-url.el (mm-url-insert-file-contents): Support file:.
+
+2001-12-05 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el: Lower case for the description line. Sync from the
+       Emacs CVS.
+
+2001-12-05 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-find-new-groups): Fix doc.
+       From:  Stefan Monnier  <monnier@cs.yale.edu>
+
+2001-12-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * mm-view.wl (mm-inline-text): Decode a charset-encoded rich text.
+
+2001-12-04 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-url.el: Require executable.
+       Suggested by Katsumi Yamaoka <yamaoka@jpl.org>.
+
+2001-12-03 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * pop3.el (pop3-munge-message-separator): Only use valid date.
+       Trivial patch from Michael Welsh Duggan <md5i@cs.cmu.edu>.
+
+       * Makefile.in: gnus-load.elc may not be generated.
+
+2001-12-03 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-url.el: New file.
+       * nnslashdot.el: Use it.
+       * mm-extern.el (mm-extern-url): Use it.
+
+2001-12-01 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-save-article): Nix
+       gnus-display-mime-function and gnus-article-prepare-hook.
+
+       * gnus-spec.el (gnus-parse-complex-format): Properly handle %C at
+       the beginning of lines.
+       (gnus-complex-form-to-spec): Ditto.
+
+2001-12-01 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-make-mft): Fix the m-s-a-file regexp.
+       From Paul Jarc <prj@po.cwru.edu>.
+
+2001-11-30 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el: New variable message-subscribed-address-file;
+       use it in message-make-mft.  From Paul Jarc <prj@po.cwru.edu>.
+
+2001-11-30 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-tab-body-function): Set to nil.
+       (message-tab): Use text-mode-map or global-map.
+       Suggested by Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>.
+
+2001-11-30  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-agent.el (gnus-agent-fetch-headers): Use gnus-range-add
+       instead of gnus-union, for speed.  Suggested by Christoph Conrad
+       <christoph.conrad@gmx.de>.
+       (gnus-agent-fetch-group-1): Add verbose message.
+
+2001-11-29 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-write-active): Make sure sym is a cons
+       of integers.
+
+2001-11-29  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-newgroups-header-regexp)
+       (message-completion-alist, message-tab-body-function): Use
+       defcustom rather than defvar.
+       (message-tab): Mention `message-tab-body-function' in doc.
+       Suggested by Karl Eichwalder.
+
+2001-11-28 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-uu.el (gnus-uu-save-article): Use #part instead of #mml.
+
+2001-11-28 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnheader.el (nnheader-find-nov-line): Don't use macro
+       gnus-delete-line.
+
+       * gnus-group.el (gnus-group-name-decode): Defun instead of defsubst.
+       (gnus-group-name-charset): Ditto.
+
+       * gnus-util.el (gnus-buffer-live-p): Ditto.
+
+2001-11-28 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * sieve-manage.el (sieve-manage-stream-alist): Backslash before
+       open parenthesis in doc.
+       (sieve-manage-authenticator-alist): Typo in doc.
+       * imap.el (imap-authenticator-alist): Typo in doc.
+       (imap-stream-alist): Backslash.
+
+       * gnus-sum.el (gnus-summary-limit-to-author): Missing arguments.
+         Thanks to david.goldberg6@verizon.net (David S. Goldberg)
+
+2001-11-27 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-topic.el (gnus-topic-mode): Add LOCAL for add-hook.
+
+       * message.el (message-mode): make-local-hook is harmless in Emacs 21.
+
+       * gnus-msg.el (gnus-configure-posting-styles): use
+       make-local-hook. Add LOCAL for add-hook.
+
+2001-11-27  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-mode): Use `make-local-hook' unless
+       obsolete.
+       Patch by Katsumi Yamaoka <yamaoka@jpl.org>.
+
+2001-11-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * canlock.el: Remove sha1.el and base64.el stuff.
+
+2001-11-26  Didier Verna  <didier@xemacs.org>
+
+       * nnmbox.el (nnmbox-create-mbox): create the mbox file directory
+       if needed.
+
+2001-11-21  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-tamago-not-in-use-p): New function.
+       (message-strip-forbidden-properties): Use it.
+
+2001-11-26  Didier Verna  <didier@xemacs.org>
+
+       * gnus-start.el (gnus-check-first-time-used): only check for
+       existence of .el[d] files.
+
+2001-11-25 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-coding-system-priorities): Add backslash in the doc.
+
+       * message.el (message-setup-1): Clean up mc-*.
+
+2001-11-25 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-directory-sep-char-regexp): New variable.
+       * gnus-score.el (gnus-score-find-bnews): Use it.
+
+       * gnus-sum.el (gnus-summary-limit-to-subject): An exclusion version.
+       (gnus-summary-limit-to-author): Ditto.
+       (gnus-summary-limit-to-extra): Ditto.
+       (gnus-summary-find-matching): Support not-matching argument.
+
+2001-11-25  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-wash-subject): Use `insert' rather than
+       `insert-string', which is deprecated.
+
+2001-11-24  Simon Josefsson  <jas@extundo.com>
+
+       * mm-encode.el (mm-encode-content-transfer-encoding): Fix error
+       message. (Gnus does not "default" to using 8bit for the message,
+       it default to use 8bit encoding and the user-supplied CTE
+       value. Calling this behaviour "treating it as 8bit" is perhaps
+       better.)
+
+       * mm-bodies.el (mm-body-encoding): Intern encoding if needed
+       (compare mm-charset-to-coding-system).
+
+2001-11-23 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * canlock.el (canlock-sha1-with-openssl): Use unibyte
+       buffer. Correctly decode hex.
+
+2001-11-21 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-category-insert-line): Convert category
+       names to strings.
+
+2001-11-20 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (sha1): eval-and-compile.
+
+2001-11-20  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-allow-no-recipients): New variable.
+       (message-send): Use it, customize the prompting when posting to
+       Gcc/Fcc alone.  From prj@po.cwru.edu (Paul Jarc).
+
+2001-11-20 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-coding-system-priorities): New variable.
+       (mm-sort-coding-systems-predicate): New function.
+       (mm-find-mime-charset-region): Resort coding systems if needed.
+       Suggested by Katsumi Yamaoka <yamaoka@jpl.org>.
+
+2001-11-20  Didier Verna  <didier@xemacs.org>
+
+       * gnus-group.el (gnus-group-make-help-group): new optional
+       argument to control the error behavior.
+       * gnus-start.el (gnus-check-first-time-used): use it to avoid
+       erroring.
+
+2001-11-19  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-mode-map): Use C-c C-f C-i for Importance:
+       instead of C-c C-u.  Suggested by Per Abrahamsen
+       <abraham@dina.kvl.dk>.
+
+2001-11-18 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-read-folder): Use group instead of
+       nnfolder-current-group.
+       Suggested by Lorentey Karoly <lorentey@elte.hu>.
+
+2001-11-17  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-send): Ask user if Fcc/Gcc should be
+       performed when no other sender was specified.
+       Suggested by prj@po.cwru.edu (Paul Jarc).
+
+2001-11-17  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-mode, message-mode-map): Use C-c C-u for
+       Importance: instead of C-c C-p (used by SC).
+
+2001-11-16  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-insert-importance-high)
+       (message-insert-importance-low): Save point.
+
+       * mail-source.el (mail-source-fetch-imap): Fix BODY.PEEK return
+       value.
+
+2001-11-16  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-strip-special-text-properties): New option.
+       (message-strip-forbidden-properties): Obey it.
+
+2001-11-14  Sam Steingold  <sds@gnu.org>
+
+       * gnus-score.el: Fixed some doc strings to properly quote symbols.
+
+2001-11-15  Simon Josefsson  <jas@extundo.com>
+
+       Support "Importance:" header in Message.
+
+       * message.el (message-mode-map): Bind C-c C-p to
+       `message-insert-or-toggle-importance'
+       (message-mode-menu): Add message-insert-importance-{high,low}.
+       (message-insert-importance-high, message-insert-importance-low)
+       (message-insert-or-toggle-importance): New functions.
+       (message-tool-bar-map): Add {un,}important.
+       (message-mode): Doc fix.
+
+2001-11-15  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-tool-bar-map): Fix attach toolbar tooltip.
+
+       * mml.el (mml-menu): Fix toolbar tooltip.
+
+2001-11-15 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-save-marks): gnus-prin1 takes one argument.
+       * nnml.el (nnml-save-marks): Ditto.
+
+       * gnus-sum.el (gnus-newsgroup-variables): Fix doc.
+
+2001-11-15  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-save-marks):
+       * nnfolder.el (nnfolder-save-marks): Use `gnus-prin1'.
+       Suggested by Istvan Marko <mi-gnus@imarko.dhs.org>.
+
+2001-11-15  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-art.el (gnus-article-wash-status-strings): Use
+       `copy-sequence', not `copy-seq'.
+
+2001-11-15  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-art.el (gnus-article-wash-status-strings): New constant.
+       (gnus-gnus-article-wash-status-entry): New function.
+       (gnus-article-wash-status): Use it.
+
+2001-11-13 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml1991.el: Add coding header.
+
+2001-11-12  Simon Josefsson  <jas@extundo.com>
+
+       * mml1991.el (mml1991-use, mml1991-function-alist): New variables.
+       (mml1991-gpg-sign, mml1991-gpg-encrypt): Renamed, from
+       `mml1991-sign' and `mml1991-encrypt'.
+       (mml1991-encrypt, mml1991-sign): New glue functions.
+       (mml1991-mailcrypt-sign, mml1991-mailcrypt-encrypt): New functions.
+
+       * mml.el (mml-mode-map): `C-c RET o' map for PGP.
+       (mml-menu): Add PGP to menu.
+
+       * mml-sec.el (top-level): Require mml1991.  Don't require smime.
+       (mml-sign-alist, mml-encrypt-alist): Add "pgp".
+       (mml-pgp-sign-buffer, mml-pgp-encrypt-buffer)
+       (mml-secure-sign-pgp, mml-secure-encrypt-pgp): New glue functions.
+
+       * mml2015.el: Mention RFC 3156.
+
+       * mml1991.el: New file.  From Sascha L\e,A|\e(Bdecke <sascha@meta-x.de>.
+
+2001-11-12 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-auto-subscribed-groups): Use ^nnml.
+
+       * gnus-sum.el (gnus-summary-move-article): Use number-to-string.
+         From <Michael.Cook@cisco.com>
+
+2001-11-11  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (top-level): Autoload sha1.
+       (message-canlock-generate): Use sha1 instead of md5 (sha1 used by
+       canlock, no need to require two different hash algs).  Suggested
+       by Ferenc Wagner <wferi@bolyai1.elte.hu>.
+
+2001-11-09  Simon Josefsson  <jas@extundo.com>
+
+       * gnus.el (gnus-local-domain): Fix doc.  From Pavel Jan\e,Am\e(Bk
+       <Pavel@Janik.cz>.
+
+2001-11-09  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-point-in-header-p): New function.
+       (message-do-auto-fill): Use it.
+       (message-beginning-of-line): New function.  Goes to beginning of
+       header value (i.e., end of header name), or to beginning of line
+       if already at beginning of value.  Behaves like
+       `beginning-of-line' when in message body.
+       (message-mode-map): Bind it.
+
+2001-11-08  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-msg.el (gnus-posting-styles): Add doc.
+
+2001-11-07  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sieve.el (gnus-sieve-generate): Don't invoke sieve-mode.
+
+       * sieve-mode.el (sieve-control-commands-face)
+       (sieve-control-commands-face, sieve-action-commands-face)
+       (sieve-test-commands-face, sieve-tagged-arguments-face): New
+       faces.
+       (sieve-font-lock-keywords): Use them.
+       (sieve-mode): Only set font-lock-defaults in emacs.
+
+       * gnus-art.el (gnus-default-article-saver): Add
+       gnus-summary-save-body-in-file.
+       (gnus-summary-write-to-file): Fix doc.
+
+2001-11-07  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-art.el (gnus-treat-highlight-signature): Add cross
+       reference to the correct chapter in the manual.
+
+       * mml.el (mml-mode): Add cross reference to Emacs MIME manual.
+       Suggested by "Golubev I. N." <gin@mo.msk.ru>.
+
+2001-11-07 06:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-preview): Bind mail-header-separator.
+
+2001-11-07  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el: Always require canlock.
+       (message-ignored-supersedes-headers): Include Cancel-Lock and
+       Cancel-Key.
+       (message-insert-canlock): Don't require canlock.
+       (message-cancel-news): Don't check whether canlock is available.
+       (message-supersede): Support cancel-locks.
+
+       * gnus-art.el: Don't autoload canlock.
+
+2001-11-06 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-fetch-imap): ASYNC param.
+       From: <andre@slamdunknetworks.com>
+
+2001-11-06 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * many files: Fix copyright lines.
+
+2001-11-05 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-generate-mime-1): Use mm-with-unibyte-current-buffer.
+       Suggested by Dave Love  <fx@gnu.org>.
+
+2001-11-04 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-kill-buffer): Remove auto-save file after
+       confirm.
+
+       * message.el (message-send-mail): Call message-generate-headers
+       once.  Suggested by Matt Armstrong <matt@lickey.com>.
+
+       * gnus-topic.el (gnus-topic-rename): Initial-input.
+       Suggested by Katsuhiro Hermit Endo <hermit@koka-in.org>.
+
+2001-11-03  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-forbidden-properties): New constant.
+       (message-strip-forbidden-properties): New function.
+       (message-mode): Activate it.
+
+2001-11-02 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-iso-8859-15-compatible): Fix doc.
+       (mm-hack-charsets): Fix doc.
+
+2001-11-02  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-int.el (gnus-check-server): Message "...done" when done.
+
+       * imap.el (imap-close): Don't message (imap-send-command-wait
+       returns if the connection is dropped).
+       (imap-wait-for-tag): Nix out message only when necessary.
+
+       * gnus-sieve.el (gnus-sieve-script): Use "stop" instead of "elsif"
+       for non-crossposting.
+       (gnus-sieve-crosspost): Default to t to be consistent with other
+       parts of Gnus.
+
+2001-11-01 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-iso-8859-15-compatible): Add inconvertible chars.
+       (mm-iso-8859-x-to-15-table): Ditto.
+       (mm-iso-8859-x-to-15-region): Ditto.
+       (mm-find-mime-charset-region): Ditto.
+
+2001-11-01  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-close-asynchronous): New variable.
+       (nnimap-close-group): Use it.
+       (nnimap-expunge): Don't use it.
+
+       * imap.el (imap-callbacks): New variable.
+       (imap-remassoc): Copied from `gnus-remassoc'.
+       (imap-add-callback): New function.
+       (imap-mailbox-expunge, imap-mailbox-close): Support asynchronous
+       behaviour.
+       (imap-parse-response): Call the callback.
+
+       * message.el (message-insert-canlock): New variable.
+       (message-canlock-generate, message-canlock-password)
+       (message-insert-canlock): New functions.
+       (message-send-news): Call `message-insert-canlock'.
+       (top-level): Require canlock when compiling.
+       (message-insert-canlock): Require canlock before we need it.
+
+2001-11-01 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-copy-article-buffer): Copy sequence.
+
+2001-11-01 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (dgnushack-make-load): A workaround for
+       custom-add-loads bug in some versions of XEmacs.
+
+2001-11-01 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-synonym-alist): Revert (some).
+
+2001-11-01 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-iso-8859-x-to-15-region): New function.
+       (mm-hack-charsets): New variable.
+       (mm-iso-8859-15-compatible): New variable.
+       (mm-iso-8859-x-to-15-table): New variable.
+       (mm-find-mime-charset-region): Add parameter hack-charsets.
+
+       * mm-bodies.el (mm-encode-body): Use it.
+       * mml.el (mml-parse-1): Ditto.
+
+2001-11-01  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-make-menu-bar): Add Sieve.
+
+2001-11-01 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-to-coding-system): Return nil, if charset
+       is nil.
+
+2001-11-01 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * smiley-ems.el (smiley-update-cache): Auto detect file type.
+
+       * message.el (message-forward-rmail-make-body): Use
+       save-window-excursion.
+       (message-encode-message-body): Search with noerror.
+       (message-setup-1): Convert compose-mail send-actions to
+       message-send-actions.
+
+2001-11-01  Simon Josefsson  <jas@extundo.com>
+
+       * sieve.el: Don't require easy-mmode. Suggested by Katsumi Yamaoka
+       <yamaoka@jpl.org>.
+
+2001-10-31 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * sieve-manage.el (sieve-string-bytes): No complain.
+
+2001-11-01  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-mode-map): Bind "D u" to
+       `gnus-sieve-update' and "D g" to `gnus-sieve-generate'. (Functions
+       has autoload cookies, so no `require' should be necessary.)
+
+       * sieve.el, sieve-mode.el, sieve-manage.el, gnus-sieve.el: New
+       files.
+
+2001-10-31  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-cus.el (gnus-group-parameters): Support integer `display'
+       parameter.
+
+       * gnus-sum.el (gnus-select-newsgroup): If group parameter
+       `display' is a number (and C-u wasn't used to enter group), only
+       fetch that number of articles.
+
+2001-10-31  Matt Armstrong  <matt@lickey.com>
+
+       * gnus.el (gnus-find-subscribed-addresses): Doc fix:
+       not-subscribed -> subscribed.
+
+2001-10-31 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From: Josh Huber <huber@alum.wpi.edu>
+
+       * message.el (message-subscribed-address-functions): New variable.
+       (message-subscribed-addresses): New variable.
+       (message-subscribed-regexps): New variable.
+       (message-goto-mail-followup-to): New function.
+       (message-send-mail): Add Mail-Followup-To.
+       (message-make-mft): New function.
+
+       * gnus.el (gnus-find-subscribed-addresses): New function.
+
+2001-10-31 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-fetch): If debug, don't regain signals.
+       (mail-source-fetch-pop): Ditto.
+       (mail-source-check-pop): Ditto.
+
+       * gnus-start.el (gnus-read-init-file): Ditto.
+       (gnus-activate-group): Ditto.
+       (gnus-read-newsrc-el-file): Ditto.
+
+2001-10-30 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-get-reply-headers): Make sure there is ", ".
+
+       * mm-util.el (mm-mime-mule-charset-alist): Move down and call
+       mm-coding-system-p. Don't correct it only in XEmacs.
+       (mm-charset-to-coding-system): Use mm-coding-system-p and
+       mm-get-coding-system-list.
+       (mm-emacs-mule, mm-mule4-p): New variables.
+       (mm-enable-multibyte, mm-disable-multibyte,
+       mm-enable-multibyte-mule4, mm-disable-multibyte-mule4,
+       mm-with-unibyte-current-buffer,
+       mm-with-unibyte-current-buffer-mule4): Use them.
+       (mm-find-mime-charset-region): Treat iso-2022-jp.
+
+       From  Dave Love  <fx@gnu.org>:
+
+       * mm-util.el (mm-mime-mule-charset-alist): Make it correct by
+       construction.
+       (mm-charset-synonym-alist): Remove windows-125[02].  Make other
+       entries conditional on not having a coding system defined for
+       them.
+       (mm-mule-charset-to-mime-charset): Use
+       find-coding-systems-for-charsets if defined.
+       (mm-charset-to-coding-system): Don't use
+       mm-get-coding-system-list.  Look in mm-charset-synonym-alist
+       later.  Add last resort search of coding systems.
+       (mm-enable-multibyte-mule4, mm-disable-multibyte-mule4)
+       (mm-with-unibyte-current-buffer-mule4): Just treat Mule 5 like
+       Mule 4.
+       (mm-find-mime-charset-region): Re-write.
+       (mm-with-unibyte-current-buffer): Restore buffer as well as
+       multibyteness.
+
+2001-10-30 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * canlock.el, sha1-el.el, hex-util.el: Move from contrib
+       directory. Thanks to Katsumi Yamaoka <yamaoka@jpl.org> and Shuhei
+       KOBAYASHI <shuhei@aqua.ocn.ne.jp>.
+
+2001-10-30 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-display-x-face): Nix buffer-read-only
+       again.
+
+       * mml2015.el (mml2015-gpg-verify): Convert <LF> to <CR><LF>.
+
+2001-10-30 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-spec.el (gnus-parse-simple-format): Use
+         buffer-substring-no-properties.
+
+2001-10-30  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (article-verify-cancel-lock): New function.
+
+       * nnheader.el (nntp-process-response): New variable.
+       (nnheader-init-server-buffer): Make `nntp-process-response'
+       buffer-local in `nntp-server-buffer'.
+
+       * nntp.el (nntp-prepare-post-hook): New hook.
+       (nntp-wait-for): Save a server's ID in `nntp-process-response'.
+       (nntp-async-trigger): Ditto.
+       (nntp-request-post): Insert a server's ID if there's no Message-ID
+       header; run `nntp-prepare-post-hook'.
+
+2001-10-30 04:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-decode-group-name): Use nnmail-fetch-field
+       instead.
+
+       * message.el (message-forward-subject-author-subject): Don't use
+       message-news-p, which widens the buffer.
+       (message-forward-make-body): New function.
+       (message-forward): Use it.
+       (message-insinuate-rmail): New function.
+       (message-forward-rmail-make-body): New function.
+
+2001-10-30 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-extern.el (mm-extern): Provide it.
+
+       * mm-partial.el (mm-partial): Provide it.
+
+2001-10-28 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-setup-message): Call post-command-hook.
+
+2001-10-29  Simon Josefsson  <jas@extundo.com>
+
+       * mml.el (mml-preview): Bind message-this-is-news if it is
+       news. From Jesper Harder <harder@myrealbox.com>.
+
+2001-10-28  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-group-make-articles-read): Inline group.
+
+2001-10-29  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * smiley-ems.el (smiley-regexp-alist): Add support for sad and
+       ironic smilies.
+
+2001-10-27  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-indent-citation): Don't add trailing
+       whitespace when citing text.
+
+       * gnus.el (gnus-group-faq-directory): Fix.  From Jesper Harder
+       <harder@ifa.au.dk>.
+
+2001-10-26 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-possibly-change-server): Create nnweb-hashtb if
+       not available.
+       (nnweb-request-scan): Nix nnweb-hashtb if ephemeral.
+       (nnweb-type-definition): Add google as alias of dejanews.
+       (nnweb-google-parse-1): Forward 1 line.
+
+2001-10-26  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-msg.el (gnus-summary-mail-forward): Doc fix: add pointer to
+       variable `message-forward-ignored-headers'.
+
+2001-10-24  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus.el (gnus-expand-group-parameter): New function.
+       (gnus-expand-group-parameters): Call it.
+       (gnus-group-fast-parameter): New function.
+       (gnus-group-find-parameter): Call it.
+
+2001-10-23  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus.el (gnus-news-group-p): Rewrote.  Now accepts a header
+       vector (it didn't before because of a bug).
+       * gnus-msg.el (gnus-post-news): Use header vector directly, if
+       available.  Before it converted it to an article number.
+
+       This makes followup to news articles with negative numbers in
+       nnvirtual groups use news instead of mail.
+
+2001-10-23  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus.el (post-method): Use `native' instead of `nil'.
+
+       * gnus-msg.el (gnus-post-method): Ditto.
+
+2001-10-23  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus.el (gnus-define-group-parameter): Grammar fix.
+
+2001-10-22  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-msg.el (gnus-extended-version): Include
+       system-configuration.
+       Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Gro\e,b_\e(Bjohann).
+
+2001-10-22  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus.el (post-method): Customization fix: `native' is not a
+       valid value.
+       * gnus-msg.el (gnus-post-method): Doc and customization fix:
+       `native' is not a valid value.
+
+2001-10-21  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap): Defgroup
+       (nnimap-strict-function, nnimap-strict-function-match): New
+       widget, from Per Abrahamsen  <abraham@dina.kvl.dk>.
+       (nnimap-split-crosspost, nnimap-split-inbox)
+       (nnimap-split-rule, nnimap-split-predicate)
+       (nnimap-split-predicate): Defcustom.
+       (nnimap-split-inbox, nnimap-expunge-search-string)
+       (nnimap-importantize-dormant): Remove "*" from doc.
+
+2001-10-20  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-sum.el (gnus-summary-limit-to-score): Prompt for score if
+       not supplied via prefix arg.  From Lisp, make arg mandatory.
+       Suggested by Frank Schmitt.
+
+2001-10-20  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-do-auto-fill): Avoid calling
+       'rfc822-goto-eoh'.
+
+2001-10-20  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Paul Jarc <prj@po.cwru.edu>.
+
+       * message.el (message-get-reply-headers): Restructure the logic
+       and add comments.  From Paul Jarc <prj@po.cwru.edu>.
+
+2001-10-20  Simon Josefsson  <jas@extundo.com>
+
+       * 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 <dmaze@MIT.EDU>.
+
+       * nnfolder.el (nnfolder-marks-changed-p): Ditto.
+
+2001-10-19  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * mm-decode.el (mm-default-directory): Fix customize type.
+
+       * message.el (message-setup-fill-variables): Kludge to use
+       normal-auto-fill-function even if auto fill is already activated.
+
+2001-10-19  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-do-auto-fill): New version that does not
+       rely on text properties, by Simon Josefsson <jas@extundo.com>.
+       (message-setup-1): Removed the `message-field' property.
+
+       * gnus-draft.el (gnus-draft-edit-message): Removed the
+       `message-field' property.
+
+2001-10-19  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-draft.el (gnus-draft-edit-message): Change `field' to
+       `message-field'.  The `field' property has a special significance in
+       Emacs 21.
+
+       * message.el (message-send, message-setup-1): Ditto.
+
+2001-10-18  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-group-make-articles-read): Call g-r-set-mark
+       when undoing.
+
+2001-10-18  Simon Josefsson  <jas@extundo.com>
+       From Frank Schmitt <usereplyto@Frank-Schmitt.net>
+
+       * gnus-sum.el (gnus-summary-limit-to-display-predicate): Fix typo.
+       (gnus-summary-make-menu-bar): Ditto.
+
+2001-10-17  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-expiry-target): Make sure it is back to the
+       server. Suggested by ShengHuo ZHU <zsh@cs.rochester.edu>.
+
+2001-10-17 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-line-format-alist): user-date entry.
+       * gnus-util.el (gnus-user-date): New function.
+       From Frank Schmitt <usenet@Frank-Schmitt.net>.
+
+2001-10-17  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-check-news-header-syntax): Special case
+       nnvirtual groups.
+
+       * gnus-sum.el (gnus-summary-respool-default-method): Changed
+       customize type to `symbol'.
+
+2001-10-17 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-spec.el (gnus-parse-simple-format): Support extended spec
+       %&foo;.
+       (gnus-parse-simple-format): Support user extended spec too.
+       %u&foo; invokes gnus-user-format-function-foo.
+
+2001-10-17 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnml.el (nnml-request-expire-articles): Make sure it is back to
+       the server.
+       * nnmbox.el (nnmbox-request-expire-articles): Ditto.
+       * nnfolder.el (nnfolder-request-expire-articles): Ditto.
+       * nnbabyl.el (nnbabyl-request-expire-articles): Ditto.
+       * nndiary.el (nndiary-request-expire-articles): Ditto.
+       (nndiary-schedule): Defsubst it before use it.
+       (nndiary-error): eval-and-compile.
+
+2001-10-17  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-msg.el (gnus-post-method): Changed two instances of
+       `active' to `current' and one `null' to `not'.
+
+2001-10-16  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Katsumi Yamaoka <yamaoka@jpl.org>.
+
+       * message.el (message-setup-fill-variables): Use
+       `normal-auto-fill-function' instead of `auto-fill-function'.
+
+2001-10-16  Simon Josefsson  <jas@extundo.com>
+
+       * mml2015.el (mml2015-fix-micalg): Fix for Mutt-bug.
+       (mml2015-gpg-decrypt-1): Decanonicalize decrypted MIME
+       body. (Mailcrypt seem to do this, but gpg.el doesn't.)
+
+2001-10-16  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       Patch by Oliver Scholz <oscholz@my.gnus.org>.
+
+       * gnus-draft.el (gnus-draft-edit-message): Add text property
+       `field' with value `header' to message headers.
+       * message.el (message-setup-1): Really add text property to all of
+       the header, not just part of it.
+
+2001-09-04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-sort-by-server): Use it.
+
+       * gnus.el (gnus-method-to-full-server-name): New, bogus function.
+
+       * gnus-topic.el (gnus-topic-sort-groups-by-server): New command
+       and keystroke.
+
+2001-10-14  Simon Josefsson  <jas@extundo.com>
+
+       * dig.el: Doc fix.
+
+       * smime.el: Doc fix.
+
+       * gnus-msg.el (gnus-inews-do-gcc): Port header encoded-word
+       charset magic from message.el.
+
+2001-10-12  Simon Josefsson  <jas@extundo.com>
+       Suggested by david.goldberg6@verizon.net (David S. Goldberg)
+
+       * gnus-cite.el (gnus-article-toggle-cited-text): Don't remove
+       'cite from g-a-wash-types.
+       (gnus-cite-toggle): Ditto.  Add 'cite.  Set modeline.
+       (gnus-article-hide-citation): Fix.
+
+       * gnus-cite.el (gnus-article-hide-citation): Add `c' mode line
+       character.
+       (gnus-article-toggle-cited-text): Toggle `c' mode line character.
+
+       * gnus-art.el (gnus-treat-hide-citation-maybe): Remove duplicate
+       definition.
+       (gnus-signature-toggle): Toggle `s' mode line character.
+
+       * gnus-art.el (article-emphasize): Set `g-a-wash-types' after
+       doing stuff that clears it.
+
+2001-10-12  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-cache.el (gnus-summary-limit-include-cached): Rewrite.
+       From Eric Marsden <emarsden@laas.fr>.
+
+2001-10-12 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-do-auto-fill): Use gnus-point-at-bol.
+       (autoload): Add some autoloads.
+
+2001-10-12  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       Suggested by Oliver Scholz <epameinondas@gmx.de>.
+
+       * message.el (message-do-auto-fill): New function.  Like
+       `do-auto-fill' but don't fill when in the message header.
+       (message-setup-1): Put a text property on the message header.
+       (message-setup-fill-variables): Use `message-do-auto-fill'.
+
+2001-10-10 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-send-mail-partially): Insert an empty line
+       first, because of the change of message-make-lines.
+
+2001-10-10  Florian Weimer  <fw@deneb.enyo.de>
+
+       * mm-util.el (mm-charset-synonym-alist): If Emacs doesn't support
+       iso-8859-15, make it an alias for iso-8859-1.
+
+2001-10-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-send-news): Don't modify the value of
+       `message-syntax-checks' if it is not a list (possibly it is
+       `dont-check-for-anything-just-trust-me').
+
+2001-10-10  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-group.el (gnus-group-name-charset-group-alist): Use
+       `find-coding-system' for XEmacs to check whether the coding-system
+       `utf-8' is available.
+
+2001-10-09 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (dgnushack-compile): Detect mh-e and xml.
+
+2001-10-09  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-send-news): Oops, missed case with no
+       "Followup-To" header...
+
+2001-10-09  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-send-news): Allow
+       `gnus-group-name-charset-group-alist' to affect encoding of the
+       "Newsgroups" and "Followup-To" headers.
+
+2001-10-07 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * Makefile.in (install-el): Depend on gnus-load.el.
+
+2001-10-07 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * Makefile.in (install-el): Use -f.
+       From: Amos Gouaux <amos+lists.ding@utdallas.edu>
+
+2001-10-07  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-send-news): Don't encode Followups-To when
+       `gnus-group-name-charset-group-alist is' ".*".  [Yuck]
+
+       * gnus-util.el (gnus-decode-newsgroups): No space in newsgroup
+       header.
+
+       * gnus-art.el (article-decode-group-name): Also decode
+       "Followup-To".
+
+       * rfc2047.el (rfc2047-encode-message-header): Encode without
+       asking for null methods.
+
+       * gnus-group.el (gnus-group-name-charset-group-alist): Make utf-8
+       default charset for newsgroup names in accordance with USEFOR.
+
+       * gnus-group.el (gnus-group-name-charset-method-alist,
+       gnus-group-name-charset-group-alist): Removed "*" from doc
+       strings, "*" should not be used for complex variables.
+
+2001-10-06  Simon Josefsson  <jas@extundo.com>
+
+       Support UTF-8 group names better.
+
+       * message.el (message-check-news-header-syntax): Encode group
+       names before comparison.
+
+       * gnus-msg.el (gnus-copy-article-buffer): Run all
+       `gnus-article-decode-hook's except `article-decode-charset'
+       instead of hardcoding call to one of them.
+
+       * gnus-art.el (gnus-article-decode-hook): Add
+       `article-decode-group-name'.
+       (article-decode-group-name): New function, use `g-d-n'.
+
+       * gnus-group.el (gnus-group-insert-group-line): Decode
+       gnus-tmp-group using `g-d-n'.
+
+       * gnus-util.el (gnus-decode-newsgroups): New function.
+
+2001-10-06  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Fixed bug non-nil
+       `gnus-group-name-charset-group-alist'.
+
+2001-10-06 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * Makefile.in: Install el in install. Add uninstall.
+
+2001-10-05  Simon Josefsson  <jas@extundo.com>
+
+       * nnheader.el (gnus-verbose-backends, gnus-nov-is-evil): Custom.
+
+       * gnus-sum.el (gnus-summary-move-article): Also activate new groups.
+
+       * nnfolder.el (nnfolder-normalize-buffer): Don't insert \n\n in
+       empty folders.
+
+       * gnus-sum.el (gnus-select-newsgroup): Don't enable `display'
+       limiting if read-all (C-u RET) was used.
+
+2001-10-04  Simon Josefsson  <jas@extundo.com>
+
+       * mail-source.el (mail-source-movemail-program): New variable.
+       (mail-source-movemail): Use it.  Suggested by Taylor Hutt
+       <thutt@thutt.vmware.com>.
+
+2001-10-03  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): New param.
+       (gnus-summary-line-format-alist): Fix param.
+
+2001-10-02  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-request-move-article): Use imap.el directly,
+       don't go through `nnimap-request-expire-articles' to delete the
+       article.  Thanks to prj@po.cwru.edu (Paul Jarc).
+
+2001-10-02 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-write-active): The min in the
+       agent/active may be larger than that in the server/active.
+
+2001-10-01  Simon Josefsson  <jas@extundo.com>
+
+       * mail-source.el (mail-source-fetch-imap): Use BODY.PEEK if server
+       is IMAP4rev1.
+
+       * nnml.el (gnus-article-unpropagatable-p): Autoload gnus-sum.
+
+       * nnfolder.el: Ditto.
+
+2001-09-30  Dan Christensen  <jdc@uwo.ca>
+
+       * gnus-sum.el (gnus-summary-extract-address-component): New function.
+       (gnus-summary-from-or-to-or-newsgroups): Optimize.
+
+2001-09-29  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-mode-map): Keybinding for `gnus-delay-article'.
+       (message-mode-menu): Menu item for same.
+
+       * gnus-group.el (gnus-group-make-menu-bar): Menu item for sending
+       delayed articles.
+
+       * gnus-delay.el (gnus-delay-send-drafts): Do nothing if
+       nndraft:delayed does not exist.
+       (gnus-delay-initialize): Don't set up keymap, that's done from
+       message.el now.
+       (gnus-delay, gnus-delay-group, gnus-delay-header)
+       (gnus-delay-default-delay, gnus-delay-default-hour): Customize.
+
+2001-09-29  Simon Josefsson  <jas@extundo.com>
+
+       * mm-util.el (mm-mime-mule-charset-alist): Encode mule-utf-8 as
+       utf-8, not eight-bit-control.
+
+       * imap.el (imap-shell-host, imap-default-user, imap-use-utf7)
+       (imap-log, imap-debug): Custom.
+       (imap-log-buffer, imap-debug-buffer): New constants.
+       (imap-kerberos4-open, imap-gssapi-open, imap-ssl-open)
+       (imap-network-open, imap-shell-open, imap-starttls-open)
+       (imap-send-command-1, imap-send-command, imap-arrival-filter)
+       (imap-debug): Use imap-*-buffer.
+
+       * nndoc.el (nndoc-article-type): Add mailman.
+       (nndoc-type-alist): Ditto.
+       (nndoc-mailman-type-p): New function.
+
+2001-09-28 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-xmas.el (gnus-article-x-face-command): Merge it into
+       gnus-art.el.
+
+2001-09-27  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-topic.el (gnus-topic-mode-map): Add catchup.
+       (gnus-topic-catchup-articles): New function. Suggested by Robin
+       S. Socha <robin-dated-1001857693.185e29@socha.net>.
+
+2001-09-27 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Gerd M\e,Av\e(Bllmann <gerd@gnu.org>.
+
+       * gnus-ems.el (gnus-article-display-xface): Insert xface after
+       previous ones.
+
+2001-09-27 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Daiki Ueno  <ueno@unixuser.org>
+
+       * gnus-sum.el (gnus-summary-show-article): The arglist of
+       detect-coding-region is incompatible.
+
+2001-09-26 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Katsuhiro Hermit Endo <hermit@koka-in.org>
+
+       * gnus-group.el (gnus-group-delete-group): Typo.
+
+2001-09-26  Simon Josefsson  <jas@extundo.com>
+
+       * nnmail.el (nnmail-expiry-target-group): Add doc warning.
+
+       * nnimap.el (nnimap-expiry-target): Use temp buffer.
+
+2001-09-26 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-cus.el (gnus-group-parameters): Display as sexp.
+
+2001-09-22  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-open-marks): Remove unpropagatable marks.
+
+       * nnfolder.el (nnfolder-open-marks): Ditto.
+
+       * gnus-sum.el (gnus-article-unpropagatable-p): New function.
+       (gnus-update-marks): Use it.
+       (gnus-update-marks): Use `gnus-article-mark-to-type' instead of
+       hardcoded list.
+
+       * gnus.el (gnus-article-special-mark-lists): Add killed.
+       (gnus-article-unpropagated-mark-lists): New constant.
+
+2001-09-22  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-mode-hook): Add gnus-pick-mode as
+       custom option.
+
+2001-09-23  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-draft.el (gnus-draft-setup): Add mark in backend as well.
+
+2001-09-23 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-button-mailto): Hack save-selected-window-window.
+
+2001-09-22  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-group.el (gnus-group-sort-function): Fix customize type to
+       accept lists of functions.
+
+2001-09-20  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-catchup): Update expire marks in
+       backend.  Also, if ALL also set expire marks on tick/dormant.
+
+2001-09-20  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-tab-body-function): New variable.
+       * message.el (message-tab): Use it.
+
+2001-09-19  Sam Steingold  <sds@gnu.org>
+
+       * gnus-win.el (gnus-buffer-configuration): Respect
+       `gnus-bug-create-help-buffer'.
+
+2001-09-18  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-spec.el (gnus-correct-pad-form): Re-revert.
+       (gnus-parse-simple-format): Re-revert.
+
+2001-09-16  Katsuhiro Hermit Endo  <hermit@koka-in.org>
+       Trivial patch.
+
+       * gnus-spec.el (gnus-parse-complex-format): Don't fold search
+       case.  (Thanks to Daiki Ueno <ueno@unixuser.org>.)
+
+2001-09-18  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-spec.el (gnus-correct-pad-form): Remove until papers are
+       signed.
+       (gnus-parse-simple-format): Don't use it.
+
+2001-09-17  Miles Bader  <miles@gnu.org>
+
+       * 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  <zsh@cs.rochester.edu>
+
+       * gnus-srvr.el (gnus-server-mode): Fix bogus fontification.
+       From Gerd M\e,Av\e(Bllmann <gerd@gnu.org>.
+
+2001-09-17  Didier Verna  <didier@xemacs.org>
+
+       * nndiary.el: version 0.2-b14.
+       * gnus-diary.el (gnus-diary-check-message): fix `read-string'
+       compatibility problem with XEmacs 21.1.
+
+2001-09-15  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-line-format): Document %c.
+
+       * nnml.el (nnml-parse-head): Handle CRLF files.
+       (nnml-generate-nov-file): Ditto.
+       (nnml-retrieve-headers): Ditto.
+
+2001-09-15  Michael Welsh Duggan  <md5i@cs.cmu.edu>
+
+       * gnus-spec.el (gnus-parse-format): Don't treat %c as %C.
+
+2001-09-13  Martin Kretzschmar  <Martin.Kretzschmar@inf.tu-dresden.de>
+
+       * gnus-spec.el (gnus-correct-substring): Still stopped one
+       character before we wanted (never included last character).
+       (gnus-tilde-max-form, gnus-tilde-cut-form) Made readable again,
+       add missing "," (once per function)
+
+2001-09-14  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-start.el (gnus-group-mode-hook): Moved from gnus-group
+       (otherwise e.g. gnus-agentize in .gnus overrides the customized
+       default before gnus-group is loaded and the variable set.)
+
+       * nnimap.el (nnimap-request-set-mark): Do not store bookmark,
+       killed or unsent marks.
+
+       * gnus-draft.el (gnus-draft-setup): Don't set mark when there
+       isn't an article to set it on (e.g. when you `a' in a group).
+
+2001-09-12  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
+
+       * mm-util.el (mm-charset-synonym-alist): add windows-1250 so we
+       can read e-mails from Microsoft Outlook users not using ISO
+       8859-2 character set.
+
+2001-09-12 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-diary.el: Minor modifications to avoid warnings.
+       (gnus-summary-misc-menu): defvar.
+       (gnus-diary-check-message): Use gnus-point-at-eol.
+       (gnus-diary-kill-entire-line): eval-and-compile.
+
+2001-09-12  Didier Verna  <didier@xemacs.org>
+
+       * nndiary.el: new version (0.2-b13).
+       * nndiary.el (nndiary-mail-sources): doc update.
+       * nndiary.el (nndiary-split-methods): ditto.
+       * nndiary.el (nndiary-request-accept-article-hooks): New.
+       * nndiary.el (nndiary-request-accept-article): use it, check
+       message validity.
+       * nndiary.el (nndiary-get-new-mail): changed default to nil.
+       * nndiary.el (nndiary-schedule): fix bug (misplaced
+       condition-case): it didn't return nil on error.
+       * gnus-diary.el: new version.
+       * gnus-diary.el (gnus-diary-summary-line-format): removed %I.
+       * gnus-diary.el (gnus-diary-header-value-history): New.
+       * gnus-diary.el (gnus-diary-narrow-to-headers): New.
+       * gnus-diary.el (gnus-diary-add-header): New.
+       * gnus-diary.el (gnus-diary-check-message): New.
+       * 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  <tsuchiya@namazu.org>
+
+       * gnus-sum.el (gnus-select-newsgroup): Make
+       `gnus-current-select-method' buffer-local.
+
+       * gnus-art.el (gnus-request-article-this-buffer): Refer
+       `gnus-current-select-method' in the current summary buffer.
+
+2001-09-10  Simon Josefsson  <jas@extundo.com>
+       From Daniel Pittman <daniel@rimspace.net>
+
+       * gnus-spec.el (gnus-correct-pad-form): Fix.
+
+2001-09-09  Simon Josefsson  <jas@extundo.com>
+
+       * mm-decode.el (mm-inline-media-tests): Add
+       application/x-emacs-lisp.
+       (mm-attachment-override-types): Add
+       application/{x-,}pkcs7-signature.
+
+       * gnus-srvr.el (gnus-server-mode-hook, gnus-server-exit-hook)
+       (gnus-server-line-format, gnus-server-mode-line-format)
+       (gnus-server-browse-in-group-buffer): Customize.
+
+2001-09-08 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnml.el (nnml-marks-changed-p): Typo.
+       (nnml-save-marks, nnml-open-marks): Use gnus-sethash.
+       (nnml-marks-changed-p): Use gnus-gethash.
+       (nnml-marks-modtime): Use gnus-make-hashtable.
+
+       * nnfolder.el (nnfolder-marks-changed-p): Typo.
+       (nnfolder-request-expire-articles, nnfolder-save-marks)
+       (nnfolder-open-marks): Typo.
+       (nnfolder-save-marks, nnfolder-open-marks): Use gnus-sethash.
+       (nnfolder-marks-changed-p): Use gnus-gethash.
+       (nnfolder-marks-modtime): Use gnus-make-hashtable.
+
+2001-09-08  Simon Josefsson  <jas@extundo.com>
+
+       * nnfolder.el (nnfolder-marks-modtime): New variable.
+       (nnfolder-marks-changed-p): New function.
+       (nnfolder-save-marks, nnfolder-open-marks): Save modtime.
+       (nnfolder-request-update-info): Don't update if marks didn't change.
+
+       * nnml.el (nnml-marks-modtime): New variable.
+       (nnml-marks-changed-p): New function.
+       (nnml-save-marks, nnml-open-marks): Save modtime.
+       (nnml-request-update-info): Don't update if marks didn't change.
+
+       * gnus-agent.el (gnus-agent-any-covered-gcc)
+       (gnus-agent-add-server, gnus-agent-remove-server): Use
+       gnus-agent-method-p.
+
+       * gnus-art.el (gnus-buttonized-mime-types): New variable.
+       (gnus-unbuttonized-mime-type-p): Use it.
+
+       * gnus-agent.el (gnus-agent-fetch-group): If online, actually
+       fetch group.
+
+2001-09-08  Simon Josefsson  <jas@extundo.com>
+       From Daniel Pittman <daniel@rimspace.net>
+
+       * gnus-spec.el (gnus-correct-pad-form): New function.
+       (gnus-parse-simple-format): Use it.
+
+2001-09-07  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-group-sort-groups): Unmark all groups.
+       (gnus-group-sort-selected-groups): Ditto.  Suggested by Harry
+       Putnam <reader@newsguy.com>.
+       (gnus-group-sort-selected-groups): Touch dribble file.
+
+2001-09-07 Raja R Harinath  <harinath@cs.umn.edu>
+
+       * nnml.el (nnml-filenames-are-evil): New variable.
+       (nnml-article-to-file-alist): Rename to ...
+       (nnml-current-group-article-to-file-alist): ... this.
+       Respect `nnml-filenames-are-evil'.
+       (nnml-active-number): Update.
+       (nnml-update-file-alist): Update.
+       (nnml-request-article): Use nnheader-article-to-file-alist.
+       (nnml-request-rename-group): Likewise.
+
+2001-09-06  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-summary-insert-line): Fix.
+
+2001-09-06  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.umu.se>
+
+       * gnus-sum.el: Bind g-s-t-s to "W g".
+       * gnus-sum.el (gnus-summary-make-menu-bar): Add g-s-t-s.
+       * gnus-sum.el (gnus-summary-toggle-smiley): New function. Toggles
+       display of graphical smilies.
+
+2001-09-07 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-setup-news): A typo.
+       From Bill White <billw@wolfram.com>.
+
+2001-09-06  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-insert-line): Insert forwarded, recent
+       and unseen marks.
+
+2001-09-05  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnmail.el (nnmail-split-fancy): Document `junk'.
+
+2001-09-04  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-search): Don't error if server is broken.
+
+2001-09-02  Benjamin Rutt  <brutt@bloomington.in.us>
+
+       * nnmbox.el (nnmbox-find-article): Fix infinite loop when
+       searching for an article that isn't in the mbox.
+
+2001-09-02 23:12:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-retrieve-headers-1): Get references
+       right, and get all the comments.
+
+2001-09-02  Simon Josefsson  <jas@extundo.com>
+       Suggested by Dan Christensen <jdc+news@uwo.ca>
+
+       * nnfolder.el (nnfolder-request-update-info): Fix message.
+
+       * nnml.el (nnml-request-update-info): Ditto.
+
+2001-09-01  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-request-expire-articles): Also bind
+       `nnml-current-group' and `nnml-article-file-alist' when using
+       expiry-target. (Otherwise nnml will be in a inconsistent internal
+       state causing all kind of problems.)
+       (nnml-request-expire-articles): If `nnml-article-to-file' or
+       `file-attributes' failes, return article as un-expirable instead
+       of treating it as expired.
+
+2001-08-31  Sam Steingold  <sds@gnu.org>
+
+       * imap.el (imap-mailbox-examine, imap-mailbox-examine-1): Fix a
+       typo: `exmine' --> `examine'.
+
+2001-08-30 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-forward-type-p): It is not a digest.
+
+2001-08-30 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnml.el (nnml-check-directory-twice): Remove.
+       (nnml-retrieve-headers): Ditto.
+       (nnml-article-to-file): Use nnheader-directory-files-is-safe.
+
+2001-08-30  Andrew Innes  <andrewi@gnu.org>
+
+       * nnheader.el (nnheader-directory-files-is-safe): No need to read
+       directory twice on Windows, or on GNU Emacs-21.
+
+2001-08-30  Andrew Innes  <andrewi@gnu.org>
+
+       * nnml.el (nnml-request-article): Use nnml-article-to-file-alist.
+       (nnml-request-rename-group): Ditto.
+       (nnml-active-number): Ditto.
+       (nnml-request-create-group): Use nnml-directory-articles.
+       (nnml-request-expire-articles): Use nnml-directory-articles, which
+       gets list from nov database if available.
+       (nnml-get-nov-buffer): New function.
+       (nnml-open-nov): Use it.
+       (nnml-update-file-alist): Use nnml-article-to-file-alist, which
+       gets alist from nov database if available.
+       (nnml-directory-articles): New function.
+       (nnml-article-to-file-alist): New function.
+
+2001-08-30  Andrew Innes  <andrewi@gnu.org>
+
+       * mm-decode.el (mm-display-external): Use `name' as filename, if
+       `filename' attribute is not present.
+
+2001-08-30  Andrew Innes  <andrewi@gnu.org>
+
+       * mail-source.el (mail-source-flash): New defcustom.
+       (mail-source-new-mail-p): Ring visible bell if appropriate.
+       (mail-source-start-idle-timer): Use unwind-protect to ensure idle
+       timer is cleared even if mail check signals an error.
+
+2001-08-29 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-move-article): Only update marks of
+       type 'list.
+
+2001-08-29 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * flow-fill.el (fill-flowed): eol might be point-max.
+
+2001-08-27  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-request-update-info): Fix message.
+       (nnml-open-marks): Ditto.
+
+       * nnfolder.el (nnfolder-request-update-info):
+       (nnfolder-open-marks): Fix message.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+
+       * nnfolder.el (nnfolder-save-marks): Don't create directory named
+       after group in ~/.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+       From Andreas Jaeger  <aj@suse.de>
+
+       * nnfolder.el (nnfolder-open-marks): Fix typo.
+       * nnml.el (nnml-open-marks): Likewise.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+
+       Make nnfolder groups self-contained as far as marks are concerned.
+
+       * nnfolder.el (nnfolder-marks-directory, nnfolder-marks-is-evil)
+       (nnfolder-marks, nnfolder-marks-file-suffix): New variables.
+       (nnfolder-open-server): Make marks directory.
+       (nnfolder-request-delete-group): Delete marks file.
+       (nnfolder-request-delete-group): Check of nov/marks file exist
+       before deleting.
+       (nnfolder-request-rename-group): Rename marks file.
+       (nnfolder-request-rename-group): Only rename nov/mark if they exists.
+       (nnfolder-request-set-mark, nnfolder-request-update-info)
+       (nnfolder-group-marks-pathname, nnfolder-save-marks)
+       (nnfolder-open-marks): New functions.
+       (top-level): Require gnus.
+
+2001-08-25 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-type-definition): Use google raw file.
+       (nnweb-google-parse-1): Ditto.
+       (nnweb-google-identity): Ditto.
+       (nnweb-reference-wash-article): Move nnweb-decode-entities here.
+       (nnweb-altavista-wash-article): Ditto.
+       (nnweb-request-article): Remove nnweb-decode-entities.
+
+       * nnml.el: Require 'gnus.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-marks-is-evil): Add doc.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-save-marks): Wrap saving marks in a
+       condition-case, to allow user to start Gnus if saving marks failed
+       for some reason.
+
+2001-08-24 16:05:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-spec.el (gnus-compile): Don't compile gnus-version.
+
+       * gnus-group.el (gnus-update-group-mark-positions): Bind
+       gnus-group-update-hook to nil.
+
+2001-08-24 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-generate-mime-1): Force as multibyte string.
+
+2001-08-24 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-insert-line)
+       (gnus-summary-prepare-threads): gnus-tmp-lines should be a string.
+       From Martin Kretzschmar <Martin.Kretzschmar@inf.tu-dresden.de>
+
+       * gnus-spec.el (gnus-correct-substring): Take optional END.
+
+       * nnrss.el (nnrss-request-article): Remove \n.
+       (nnrss-retrieve-headers): Lines number is -1.
+
+2001-08-24  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-group.el (gnus-info-clear-data): Call
+       nnfoo-request-set-mark to propagate marks.  Fix bug:
+       `gnus-group-update-line' doesn't update read range unless we call
+       `gnus-get-unread-articles-in-group' first.
+
+       * nnimap.el (nnimap-request-set-mark): Don't propagate seen flags
+       to server.
+
+2001-08-23 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-create-info-command): Return an interactive
+       function.
+
+2001-08-23 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * gnus-spec.el (gnus-parse-complex-format): Use equal.
+
+2001-08-23 18:43:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-select-newsgroup): Use it.
+
+       * gnus-util.el (gnus-not-ignore): New function.
+
+       * lpath.el (featurep): Don't fbind char-int.
+
+       * gnus-util.el (gnus-create-info-command): New function.
+
+       * gnus-group.el (gnus-group-edit-group): Make C-c C-i go to the
+       right node.
+
+       * gnus-sum.el (gnus-select-newsgroup): Clean up.
+       (gnus-summary-limit-children): Use 'identity instead of `all'.
+       (gnus-summary-limit-to-display-predicate): New command and
+       keystroke.
+
+2001-08-23 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-group-alist): Use fm-releases.rdf.
+
+       * gnus-spec.el (gnus-format-specs): Miss a right parenthesis.
+
+2001-08-23 18:43:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-spec.el: Add the Gnus version.
+       (gnus-update-format-specifications): If the Gnus version changes,
+       nix out the format spec cache.
+
+       * gnus.el (gnus-continuum-version): Made into a command and
+       optionalize the VERSION.
+
+       * gnus-spec.el (gnus-parse-complex-format): Remove %C specs from
+       the start of the lines.
+
+2001-08-22 00:06:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-visual-p): Define function before use of
+       function.
+
+2001-08-21 23:28:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-adjust-marked-articles): Use new variable.
+       (gnus-article-mark-to-type): New function.
+       (gnus-update-missing-marks): Only update marks of type 'list.
+
+       * gnus.el (gnus-article-special-mark-lists): New variable.
+
+2001-08-21 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-limit-children): Check 'all.
+       (gnus-select-newsgroup): Still use 'all.
+       (gnus-summary-initial-limit): Comparing with 'all.
+
+2001-08-20 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-activate-group): If dont-check, don't update
+       active.
+
+2001-08-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-retrieve-headers-1): Replace
+       nnslashdot-*-retrieve-headers.
+       (nnslashdot-request-article): Fix for slashcode 2.2.
+       (nnslashdot-make-tuple): New function.
+       (nnslashdot-read-groups): Use it.
+
+2001-08-20 01:34:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-expand-group-parameters): Don't alter the variable
+       list.
+
+       * gnus-sum.el (gnus-summary-move-article): Don't select article.
+
+2001-08-20  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-msg.el (gnus-inews-do-gcc): If archive server can't be
+       opened, error instead of continuing (and exploding later).
+
+2001-08-20 01:34:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.el (gnus-expand-group-parameters): Return the parameter
+       list.
+
+       * gnus-sum.el (gnus-summary-show-article): Doc fix.
+       (gnus-summary-show-article): Guess at charset if required.
+
+       * gnus-spec.el (gnus-correct-substring): Stopped one character
+       before we wanted.
+
+2001-08-19  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
+
+       * earcon.el (earcon-auto-play): Remove unused option.
+
+2001-08-19 16:14:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-score.el (gnus-score-headers): Move the "Scoring..."
+       message down in levels, since it happens very fast.
+
+       * smiley-ems.el (smiley-update-cache): Respect the symbol version
+       of smiley-regexp-alist.
+
+       * mm-view.el (mm-inline-text): Ignore vcard errors.
+
+       * gnus-art.el (gnus-ignored-headers): Added more junk headers.
+
+       * gnus-score.el (gnus-all-score-files): Use append instead of
+       nconc.
+
+       * gnus.el (gnus-splash-face): Doc fix.
+
+       * mm-decode.el (mm-mailcap-command): Use
+       mm-path-name-rewrite-functions.
+       (mm-path-name-rewrite-functions): New variable.
+
+       * gnus-spec.el (gnus-parse-complex-format): React to ?=.
+       (gnus-complex-form-to-spec): Insert tab.
+       (gnus-spec-tab): New function.
+
+       * gnus-sum.el (gnus-select-newsgroup): Set the marks before
+       entering the group.
+
+       * gnus-spec.el (gnus-complex-form-to-spec): Insert Lisp to match
+       the positional spec.
+       (gnus-parse-complex-format): React to %C.
+
+       * gnus-ems.el (gnus-char-width): Moved here.
+
+       * gnus-sum.el (gnus-select-newsgroup): Set
+       gnus-newsgroup-articles.
+       (gnus-unseen-mark): New variable.
+       (gnus-newsgroup-unseen): Ditto.
+       (gnus-newsgroup-seen): Ditto.
+       (gnus-adjust-marked-articles): Use them.
+       (gnus-update-marks): Use them.
+       (gnus-summary-update-secondary-mark): Display.
+       (gnus-summary-prepare-threads): Display.
+
+       * gnus-msg.el (gnus-inews-group-method): Use and return the
+       method, not the server.
+
+2001-08-19  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-srvr.el (gnus-server-agent-face): New.
+       (gnus-server-agent-face): New.
+       (gnus-server-mode): Turn on font-lock-mode.
+
+       * gnus.el (gnus-server-visual): Add defgroup.
+
+2001-08-19  Simon Josefsson  <jas@extundo.com>
+       From Joe Casadonte <jcasadonte@northbound-train.com>
+
+       * gnus-srvr.el (gnus-server-opened-face, gnus-server-closed-face,
+       gnus-server-denied-face): New.
+       (gnus-server-opened-face, gnus-server-closed-face,
+       gnus-server-denied-face): New.
+       (gnus-server-font-lock-keywords): Add.
+
+2001-08-19  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-request-set-mark): Return nil.
+       (nnml-save-marks): Use nnml-possibly-create-directory.
+       (nnml-open-marks): Only work in temp buffer when inserting/reading
+       .marks file.
+
+2001-08-18 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-expand-group-parameters): Fix.
+
+       * gnus-spec.el (gnus-char-width): New function.
+       (gnus-correct-substring, gnus-correct-length): Use it.
+
+       * message.el (message-required-mail-headers): Fix doc.
+
+2001-08-18 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-group-make-articles-read): gnus-request-set-mark.
+
+       * mm-decode.el (mm-save-part-to-file): Insert the handle.
+
+2001-08-18 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-threaded-retrieve-headers):
+       slashdot 2.2 (not fully fixed yet).
+       (nnslashdot-request-article): Ditto.
+
+2001-08-18  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-util.el (gnus-remassoc, gnus-update-alist-soft): Moved from
+       nnimap.
+
+       * nnimap.el (nnimap-remassoc, nnimap-update-alist-soft): Moved to
+       gnus-util.
+       (nnimap-request-update-info-internal): Use new functions.
+
+       * nnml.el (nnml-request-set-mark, nnml-request-update-info): Use
+       new functions.
+
+2001-08-18  Simon Josefsson  <jas@extundo.com>
+
+       Make nnml groups self-contained as far as marks are concerned.
+
+       * nnml.el (nnml-request-delete-group): Delete marks file.
+       (nnml-request-rename-group): Move marks file.
+       (nnml-marks-file-name, nnml-marks-is-evil, nnml-marks): New server
+       variables.
+       (nnml-request-set-mark, nnml-request-update-info): New server
+       functions.
+       (nnml-save-marks, nnml-open-marks): New functions.
+
+2001-08-18  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-sum.el (gnus-summary-move-article): Use `add' instead of
+       `set' when setting marks.
+
+2001-08-17 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-info-find-node): Take an argument.
+
+       * gnus-art.el (gnus-button-handle-info): New function.
+       (gnus-url-unhex-string): Replace "+" with " ".
+
+2001-08-17 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-check-news-header-syntax): Check bad From.
+
+2001-08-18 00:14:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-spec.el (gnus-correct-length): New function.
+       (gnus-correct-substring): New function.
+       (gnus-tilde-max-form): Use it.
+
+2001-08-17  Nevin Kapur  <nevin@jhu.edu>
+
+       * nnmh.el: Docstring changes as below.
+
+       * nnml.el: Docstring changes as below.
+
+       * nnbabyl.el: Docstring changes as below.
+
+       * nnmbox.el: Docstring changes as below.
+
+       * nnfolder.el: Added docstrings identifying each virtual server
+       parameter.
+
+2001-08-18  Simon Josefsson  <jas@extundo.com>
+
+       * mml.el (mml-menu): Collapse Attach, Insert and Security submenu.
+
+2001-08-17  Bj\e,Av\e(Brn Torkelsson  <torkel@acc.kth.se>
+
+       * message.el: rename "Abort Message" to "Postpone Message".
+       Remove "Attach file as MIME" from Message menu, it's already in
+       the MIME menu.
+
+2001-08-17 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * smime.el (smime-point-at-eol): eval-and-compile.
+       (smime-make-temp-file): New function.
+       (smime-sign-region, smime-encrypt-region, smime-decrypt-region):
+       Use it.
+
+2001-08-17 10:41:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-fetch-group): Go online if offline.
+       (gnus-agent-summary-fetch-group): New command and keystroke.
+
+       * gnus-art.el (gnus-insert-mime-button): Tiny clean-up.
+       (gnus-mime-display-security): Make it respect
+       gnus-unbuttonized-mime-type-p.
+
+       * gnus-sum.el (gnus-articles-to-read): Comments.
+       (gnus-article-marked-p): New function.
+       (gnus-summary-display-make-predicate): New function.
+       (gnus-select-newsgroup): Use them.
+
+       * mm-decode.el (mm-save-part-to-file): Made it not error.
+
+2001-08-17  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-wait-for-tag): If process-status isn't open or
+       run, return nil instead of sit-for looping.
+
+2001-08-17 10:41:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * lpath.el (featurep): fbind xml-parse-region.
+
+       * gnus.el (gnus-message-archive-method): Default to "archive".
+       (gnus-message-archive-method): Doc fix.
+       (gnus-parameters-get-parameter): Cleaned up.
+       (gnus-expand-group-parameter): New function.
+
+       * gnus-start.el (gnus-setup-news): Push the archive server only
+       the server list.
+
+       * mml.el (mml-menu): Changed name to "Attachments".
+
+       * mm-decode.el (mm-destroy-postponed-undisplay-list): Only message
+       when there is something to detroy.
+
+2001-05-21 17:11:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-srvr.el (gnus-server-browse-in-group-buffer): Default to
+       nil.
+
+2001-08-15  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-delay.el (gnus-delay-article): Allow "01:23" time spec,
+       which specifies a time today or tomorrow.
+
+2001-08-15  Simon Josefsson  <jas@extundo.com>
+       From Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk)
+
+       * gnus-agent.el (gnus-agent-make-mode-line-string)
+       (gnus-agent-toggle-plugged): Use new API.
+
+2001-08-14  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-delay.el (gnus-delay-send-drafts): Fix check whether
+       deadline has expired.
+
+2001-08-12  Simon Josefsson  <jas@extundo.com>
+       Suggested by Kai.Grossjohann@CS.Uni-Dortmund.DE
+
+       Support `recent' mark indicating newly arrived messages (to
+       separate from old but unread messages).
+
+       * nnimap.el (nnimap-retrieve-groups): Push dummy article into
+       `nnmail-split-history' if recent is > 0.
+       (nnimap-request-update-info-internal): Update `recent' marks.
+       (nnimap-request-set-mark): Never set `recent' marks.
+       (nnimap-mark-to-predicate-alist, nnimap-mark-to-flag-alist): Add
+       recent.
+
+       * gnus-sum.el (gnus-recent-mark): New mark.
+       (gnus-newsgroup-recent): New variable.
+       (gnus-summary-local-variables): Add gnus-newsgroup-recent.
+       (gnus-summary-prepare-threads): Mark recent articles.
+       (gnus-summary-add-mark): Support recent.
+       (gnus-summary-update-secondary-mark): Support recent.
+
+       * gnus.el (gnus-article-mark-lists): Add recent.
+
+2001-08-12  Simon Josefsson  <jas@extundo.com>
+
+       * mm-bodies.el (mm-decode-content-transfer-encoding): Returns
+       whether successful decoding took place.  Add doc.
+
+2001-08-12  Simon Josefsson  <jas@extundo.com>
+       Suggested by Per Abrahamsen <abraham@dina.kvl.dk>
+
+       * gnus.el (gnus-summary-line-format, gnus-parameters):
+       * gnus-gl.el (gnus-summary-grouplens-line-format):
+       * gnus-salt.el (gnus-summary-pick-line-format):
+       * gnus-spec.el (gnus-format-specs): %n is 23 chars.
+
+2001-08-11 09:40:00  Karl Kleinpaste  <karl@charcoal.com>
+       Committed by Kai Gro\e,b_\e(Bjohann.
+
+       * gnus-score.el (gnus-score-string): Fix `match' regexp
+       for `extra' header case.
+
+2001-08-10 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmbox.el (nnmbox-read-mbox): No warning.
+
+2001-08-10 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndoc.el (nndoc-article-type): Fix doc.
+       (nndoc-generate-article-function): New variable.
+       (nndoc-dissection-function): New variable.
+       (nndoc-type-alist): Add oe-dbx.
+       (nndoc-oe-dbx-type-p): New function.
+       (nndoc-oe-dbx-dissection): New function.
+       (nndoc-oe-dbx-generate-article): New function.
+
+2001-08-11  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-delay.el (gnus-delay-send-drafts): Cleaner way to check
+       whether deadline has been reached.  Patch from Dan Nicolaescu
+       <dann@godzilla.ics.uci.edu>.
+
+2001-08-10 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el (turn-on-gnus-mailing-list-mode): Use
+       gnus-group-find-parameter. Suggested by Janne Rinta-Manty
+       <rintaman@cs.Helsinki.FI>.
+
+       * mail-source.el (mail-source-movemail): The error buffer is
+       modified, but nothing in it.
+
+2001-08-10 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-bogus-system-names): New variable.
+       (message-make-fqdn): Use it.
+
+2001-08-09 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndraft.el (nndraft-request-group): Use
+       nndraft-auto-save-file-name.
+
+2001-08-09  Simon Josefsson  <jas@extundo.com>
+
+       * mm-view.el (mm-view-pkcs7-decrypt): Operate in current buffer.
+       Don't ask whether to decrypt.  Just leave result in buffer (don't
+       call mm).
+
+       * mm-decode.el (mm-dissect-buffer): Possibly verify/decrypt single
+       parts as well.
+       (mm-inline-media-tests): Ignore application/{x-,}pkcs7-mime.
+       (mm-possibly-verify-or-decrypt): Support application/{x-,}pkcs7-mime.
+
+2001-08-09  Simon Josefsson  <jas@extundo.com>
+
+       * mm-decode.el (mm-insert-part): Return decoding success status.
+       (mm-save-part-to-file): Error if decoding failed.
+
+2001-08-09 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-tab): Use indent-relative.
+       (message-mode): Don't bind indent-line-function to indent-relative.
+
+2001-08-09  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-get-reply-headers): Fix string. Suggested by
+       Christoph Conrad <cc@cli.de>.
+
+2001-08-08 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-tab): Use the current value of
+       indent-line-function.
+       (message-mode): Bind indent-line-function to indent-relative.
+
+2001-08-08  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-gssapi-auth-p, imap-kerberos4-auth-p): Also check
+       whether `imtest' is installed.
+
+2001-08-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       Trivial patch from Nuutti Kotivuori  <nuutti.kotivuori@smarttrust.com>
+
+       * 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  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * 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\e,Av\e(Bllmann
+       <gerd@gnu.org>.
+
+       * gnus-art.el (gnus-output-to-file): Bind file-name-coding-system.
+
+       * gnus-util.el (gnus-output-to-rmail): Ditto.
+       (gnus-output-to-mail): Ditto.
+
+       * nnmail.el (nnmail-pathname-coding-system): Set default to nil.
+
+2001-08-06  Florian Weimer  <fw@deneb.enyo.de>
+
+       * message.el (message-indent-citation): Use
+       `message-yank-cited-prefix' for empty lines.
+
+2001-08-05  Florian Weimer  <fw@deneb.enyo.de>
+
+       * message.el (message-indent-citation): Quote only lines starting
+       with ">" using `message-yank-cited-prefix'.
+
+2001-08-05  Nuutti Kotivuori  <nuutti.kotivuori@smarttrust.com>
+       Trivial patch.
+
+       * gnus-cache.el (gnus-cache-possibly-enter-article): Use
+       gnus-cache-fully-p.
+
+2001-08-04  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-cache.el (gnus-cache-possibly-update-active): Create active
+       file if it doesn't exist (by calling gnus-cache-read-active).
+
+2001-08-04  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-cache.el (gnus-cache-possibly-enter-article): Revert.
+       (gnus-cache-passively-or-fully-p): Removed.
+       (gnus-cache-fully-p): Fix it.
+
+       * mm-view.el (mm-pkcs7-signed-magic): Support more ASN.1 lengths.
+
+2001-08-04  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-cache.el (gnus-cache-fully-p)
+       (gnus-cache-passively-or-fully-p): New functions.
+       (gnus-cache-possibly-enter-article): Cosmetic change, use
+       `g-c-p-o-f-p'.
+       (gnus-cache-possibly-enter-article): Use `g-c-p-u-a'; last change
+       was bogus (`g-c-p-a-a' does not change active info, just change
+       the functions parameters).
+       (gnus-cache-possibly-remove-articles-1): Make sure articles are
+       not removed in groups that match `gnus-uncacheable-groups'.
+
+       Reported and modifications based on discussions with Nuutti
+       Kotivuori <nuutti.kotivuori@smarttrust.com>.
+
+2001-08-04  Simon Josefsson  <jas@extundo.com>
+       Trivial patch from Nuutti Kotivuori  <nuutti.kotivuori@smarttrust.com>
+
+       * gnus-cache.el (gnus-cache-possibly-update-active): New function;
+       calls `gnus-cache-update-active' if bounds has been extended.
+
+2001-08-04 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-security-verify-or-decrypt): Insert
+       before remove.
+       (gnus-mime-security-show-details): Ditto.
+
+2001-08-04  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnmail.el (nnmail-split-fancy-with-parent): Correct `mapconcat'
+       syntax.  Protect string-match against nil string and regexp.
+
+2001-08-03 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-find-charset-region): Remove control-1.
+
+2001-08-03 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-readable-p): Emacs 20 takes one argument.
+
+2001-08-04  Simon Josefsson  <jas@extundo.com>
+
+       * smime.el (smime-sign-region, smime-encrypt-region): Fix details
+       buffer.  Delete MIME-Version header.
+
+2001-08-03  Simon Josefsson  <jas@extundo.com>
+
+       * gnus-cache.el (gnus-cache-possibly-enter-article): The article
+       that is entered does not necessarily have the highest article
+       number in the group, so use `gnus-cache-possibly-alter-active'
+       instead of `gnus-cache-update-active'.
+
+2001-08-03 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-gpg-extract-signature-details): Don't barf.
+
+2001-08-03  Simon Josefsson  <jas@extundo.com>
+
+       * mml.el (mml-menu): Rename from MML to Mime. Collapse Security
+       menu.
+
+2001-08-02  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.el (post-method): New group parameter.  It also provides
+       the user option `gnus-post-method-alist' and the internal function
+       `gnus-parameter-post-method'.
+
+       * gnus-msg.el (gnus-post-method): Bind the value of
+       `gnus-post-method' to the group parameter if it is defined.
+
+2001-08-02  Simon Josefsson  <jas@extundo.com>
+
+       * smime.el (smime-extra-arguments): Removed.
+       (smime-call-openssl-region): Don't use it.
+
+2001-08-02  Simon Josefsson  <jas@extundo.com>
+
+       * smime.el (smime-sign-region): Handle stderr.
+       (smime-encrypt-region): Ditto.
+
+       * mm-view.el (mm-pkcs7-signed-magic): Make it a regexp.  Don't
+       match the ASN.1 length bytes.
+       (mm-pkcs7-enveloped-magic): Ditto.
+       (mm-view-pkcs7-get-type): Don't regexp quote.
+
+2001-08-01 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Andreas Fuchs <asf@void.at>
+
+       * mml2015.el (mml2015-trust-boundaries-alist): Typo.
+
+2001-08-01 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-header-button-alist): References regexp.
+
+2001-08-01  Gerd Moellmann  <gerd@gnu.org>
+
+       * mm-view.el (autoload): Don't autoload `diff-mode' if it's
+       already fboundp.  Add INTERACTIVE arg to autoload form.
+
+2001-08-01 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-init): Add as gnus buffer.
+
+       * nnmail.el (nnmail-cache-open): Ditto.
+
+2001-07-31 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-button-fetch-group): Fix the regexp.
+
+2001-07-31  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-msg.el (gnus-post-method): Refer to `gnus-parameters'.
+
+2001-07-31 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       Originally from Pavel Jan\e,Am\e(Bk <Pavel@Janik.cz>
+
+       * gnus-agent.el (gnus-agent-make-mode-line-string): New function.
+       (gnus-agent-toggle-plugged): Use it.
+
+2001-07-31  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-startup-file-coding-system): Revert to binary.
+       (gnus-ding-file-coding-system): New variable.
+       (gnus-read-newsrc-el-file, gnus-save-newsrc-file)
+       (gnus-slave-save-newsrc): Use it.
+
+2001-07-31  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-delay.el (gnus-delay-initialize): Use standard define-key
+       syntax.
+
+2001-07-30 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       Originally from Andreas Fuchs <asf@void.at>
+
+       * mml2015.el (mml2015-trust-boundaries-alist): New variable.
+       (mml2015-gpg-pretty-print-fpr): New function.
+       (mml2015-gpg-extract-signature-details): More details, rename from
+       `m-g-e-from'.
+       (mml2015-gpg-verify): Use them.
+       (mml2015-gpg-clear-verify): Use them.
+
+2001-07-31  Simon Josefsson  <jas@extundo.com>
+
+       * mml-smime.el (mml-smime-sign, mml-smime-encrypt): Goto end of
+       buffer when done.
+
+2001-07-30  Simon Josefsson  <jas@extundo.com>
+
+       * smime.el (smime-call-openssl-region): Revert previous change,
+       just pass on buf to `call-process-region'.
+       (smime-verify-region): Doc fix.  Don't message stuff.  Use
+       `smime-new-details-buffer'.  Inserts error messages into buffer.
+       (smime-noverify-region): Ditto.
+       (smime-decrypt-region): Ditto.  Handles stderr separately.
+       (smime-verify-buffer, smime-noverify-buffer)
+       (smime-decrypt-buffer): Doc fix.
+       (smime-new-details-buffer): New function.
+       (smime-pkcs7-region, smime-pkcs7-certificates-region)
+       (smime-pkcs7-email-region): Use `smime-new-details-buffer'.
+       (smime-sign-region, smime-encrypt-region): Don't use
+       `insert-buffer'.
+
+       * mml-smime.el (mml-smime-verify): Fix security button strings.
+
+2001-07-30 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-save-part-and-strip): Save
+       gnus-article-mime-handles.
+
+2001-07-29  Simon Josefsson  <jas@extundo.com>
+
+       * mail-source.el (top-level): Require message for message-directory.
+       (mail-source-directory): Change default to message-directory.
+
+       * smime.el (smime-keys, smime-CA-directory, smime-CA-file)
+       (smime-certificate-directory, smime-openssl-program)
+       (smime-encrypt-cipher, smime-dns-server): Fix doc (leading "*").
+       (smime-extra-arguments): New variable.
+       (smime-dns-server): Fix customize group.
+       (smime-call-openssl-region): Use `smime-extra-arguments'.
+
+2001-07-29  Simon Josefsson  <jas@extundo.com>
+       From Vladimir Volovich <vvv@vsu.ru>
+
+       * smime.el (smime-call-openssl-region): Ignore stderr.
+
+2001-07-29  Simon Josefsson  <jas@extundo.com>
+       From Christoph Conrad <christoph.conrad@gmx.de>
+
+       * gnus-agent.el (gnus-agent-save-group-info): Don't destroy active
+       file.
+
+2001-07-29  Simon Josefsson  <jas@extundo.com>
+
+       * mm-view.el (mm-view-pkcs7-decrypt): Adhere to `mm-decrypt-option'.
+
+       Support S/MIME decryption.
+
+       * mm-decode.el (mm-inline-media-tests):
+       (mm-inlined-types):
+       (mm-automatic-display):
+       (mm-attachment-override-types): Add application/{x-,}pkcs7-mime.
+
+       * mm-view.el (mm-pkcs7-signed-magic):
+       (mm-pkcs7-enveloped-magic): New variables.
+       (mm-view-pkcs7-get-type): New function; identify PKCS#7 type.
+       (mm-view-pkcs7): New function; mm viewer for PKCS#7 blobs.
+       (mm-view-pkcs7-decrypt): New function; mm viewer for encrypted
+       PKCS#7 blobs.
+
+       * smime.el (smime-decrypt-region): Expand keyfile.
+
+2001-07-29  Simon Josefsson  <jas@extundo.com>
+
+       * nntp.el (nntp-open-ssl-stream): Don't mess with internal
+       `ssl.el' variables.
+
+       * gnus-agent.el (gnus-agent-save-group-info): Delete everything
+       but line instead of narrowing to it, because `nnmail-parse-active'
+       calls widen.  Thanks to Christoph Conrad
+       <christoph.conrad@gmx.de>.
+
+2001-07-29  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.el (gnus-summary-line-format): Mention `gnus-sum-thread-*'
+       for %B spec.
+
+       * gnus-sum.el (gnus-summary-prepare-threads): If
+       gnus-sum-thread-tree-root is nil, use subject instead.
+       (gnus-sum-thread-tree-root, gnus-sum-thread-tree-single-indent)
+       (gnus-sum-thread-tree-vertical, gnus-sum-thread-tree-indent)
+       (gnus-sum-thread-tree-leaf-with-other)
+       (gnus-sum-thread-tree-single-leaf): Documentation.
+       (gnus-sum-thread-tree-single-indent): Allow nil.
+
+2001-07-28 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-fill-paragraph): Do nothing if the user
+       wants filladapt-mode.
+
+2001-07-27 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-image-type-from-buffer): New function.
+       (mm-get-image): Use it.
+
+2001-07-27 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-large-newsgroup): Add doc, "If it is nil, ..."
+
+       * gnus-art.el (gnus-mime-view-all-parts): buffer-read-only covers
+       mm-display-parts too.
+
+2001-07-27 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-request-accept-article): Bind
+       nntp-server-buffer.
+
+       * nnmail.el (nnmail-parse-active): Read from buffer instead of
+       nntp-server-buffer.
+
+2001-07-27 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-check-news-header-syntax): Use
+       message-post-method.
+       (message-send-news): Bind message-post-method.
+
+2001-07-27 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-tweak-type-alist): New variable.
+       (mml-tweak-function-alist): New variable.
+       (mml-tweak-part): New function.
+       (mml-generate-mime-1): Use it.
+
+2001-07-26 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-request-accept-article): Replace
+       nnfolder-request-list.
+
+2001-07-27  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-open-server): Set nnimap-server-buffer if
+       nnoo-change-server failed to do it.
+
+2001-07-26 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-parameters): Make it customizable.
+
+2001-07-26 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mm-display-part): Narrow to point if eobp.
+
+       * message.el (message-set-auto-save-file-name): More
+       poor-system-types.
+
+       * mailcap.el (mailcap-parse-mimetypes): poor-system-types.
+
+       * gnus-ems.el (nnheader-file-name-translation-alist): M$Windows-NT
+       supports +.
+
+2001-07-26 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-readable-p): New function.
+       (mm-inline-media-tests): Fix the default testers.
+
+2001-07-26  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-version): Bump version number.
+
+2001-07-26 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Steven E. Harris <seh@speakeasy.org>
+
+       * nnheader.el (nnheader-translate-file-chars): cygwin32 is running
+       in M$Windows too.
+
+2001-07-26  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-delay.el (gnus-delay-send-drafts): Don't `error'.
+
+2001-07-25 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-bcklg.el (gnus-backlog-shutdown): Make interactive.
+
+       * mm-decode.el (mm-get-image): Guess then use the type.
+
+       * gnus-art.el (gnus-mime-view-part-as-type): Don't copy cache.
+
+2001-07-25 12:54:00  Danny Siu  <dsiu@adobe.com>
+
+       * 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  <zsh@cs.rochester.edu>
+       From Henrik Enberg <henrik@enberg.org>
+
+       * gnus-msg.el: Customization patch.
+
+2001-07-25 22:22:22  Raymond Scholz  <rscholz@zonix.de>
+
+       * nnmail.el (nnmail-split-fancy-with-parent-ignore-groups): New
+       variable.
+       (nnmail-split-fancy-with-parent): Ignore certain groups.
+
+2001-07-25 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-byte-compile): New function.
+       (gnus-use-byte-compile): New variable.
+       (gnus-make-sort-function): Use it.
+
+       * nnmail.el (nnmail-get-new-mail): Use it.
+
+       * gnus-agent.el (gnus-category-make-function): Simple function or
+       compiled function.
+       (gnus-agent-fetch-group-1): Don't use (caaddr predicate).
+
+       * gnus-gl.el (bbb-build-rate-command): Remove quote before lambda.
+       * gnus-topic.el (gnus-topic-sort-topics-1): Ditto.
+       (gnus-topic-sort-topics-1): Use gnus-byte-compile.
+
+       * message.el (message-check-news-header-syntax): Remove quote.
+
+2001-07-24 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-use-mail-followup-to): `t' is not a
+       documented value.
+
+2001-07-24 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-display-arrow): Test fboundp.
+
+2001-07-24 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-encode.el (mm-encode-buffer): Don't use 7bit encoding if
+       there are long lines.
+
+2001-07-24  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (copy-list): New compiler macro.
+
+2001-07-24 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-bounce): If no Return-Path, the whole
+       content is considered as the original message.
+
+       * nnml.el (nnml-check-directory-twice): New variable.
+       (nnml-article-to-file): Use it.
+       (nnml-retrieve-headers): Hack it.
+
+2001-07-24 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-buffer-configuration): New configure.
+
+       * gnus-art.el (gnus-mm-display-part): Don't select-window if it is
+       not alive.
+
+       * mm-decode.el (mm-remove-part): Don't murder the current window (nil).
+       (mm-display-external): Use display-term configure.
+
+2001-07-24  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * 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  <zsh@cs.rochester.edu>
+       From Karl Kleinpaste <karl@charcoal.com>
+
+       * gnus-sum.el (gnus-summary-line-format-alist): Add %B.
+       (gnus-summary-prepare-threads): Ditto.
+
+       * gnus.el (gnus-summary-line-format): Add %B.
+
+2001-07-23 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-articles-to-read): Use gnus-group-decoded-name.
+
+       * mm-util.el (mm-string-as-multibyte): New function.
+
+       * nnmh.el (nnmh-request-list-1): Encode, not decode!
+
+2001-07-23 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-universal-coding-system): New variable.
+
+       * gnus-start.el (gnus-startup-file-coding-system): Use it.
+
+       * score-mode.el (score-mode-coding-system): Use it.
+
+2001-07-23  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-start.el (gnus-setup-news): Call
+       `gnus-check-bogus-newsgroups' just after the native server is
+       opened.
+
+2001-07-23  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnmail.el (nnmail-do-request-post): Util function to be used by
+       `nnchoke-request-post' for all nnmail-derived backends.
+
+       * nnml.el (nnml-request-post): Use it.
+
+       * gnus.el (gnus-valid-select-methods): nnml is a post-mail
+       backend, for it groks nnml-request-post.
+
+       * gnus-group.el (gnus-group-highlight, gnus-group-highlight-line):
+       Treat `mail-post' backends like `mail' backends, not like `news'
+       backends.
+
+2001-07-22 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-setup-message): make-local-hook.
+
+2001-07-22  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-delay.el (gnus-delay-article): Fix `read-string' for
+       XEmacs.  Allow more units.  Submitted by Karl Kleinpaste
+       <karl@charcoal.com>, slightly changed by Kai.
+
+       * message.el (message-check-news-header-syntax): When checking
+       whether the groups exist, check the right server based on
+       `gnus-post-method'.
+
+2001-07-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-delay.el: New file.
+
+2001-07-21 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-read-coding-system): Take two arguments.
+
+       * gnus-sum.el (gnus-summary-show-article): Use
+       mm-read-coding-system.
+
+       * gnus-art.el (article-de-quoted-unreadable):
+       (article-de-base64-unreadable, article-wash-html):
+       (gnus-mime-inline-part, gnus-mime-view-part-as-charset): Ditto.
+
+2001-07-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnml.el (nnml-request-post): New function.  Can be used for
+       annotations in nnml groups.
+
+2001-07-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * nntp.el (nntp-request-newgroups): Use UTC date for NEWGROUPS
+       command.
+
+       * gnus-start.el (gnus-find-new-newsgroups): Use
+       `message-make-date' instead of `current-time-string'.
+       (gnus-ask-server-for-new-groups): Ditto.
+       (gnus-check-first-time-used): Ditto.
+
+2001-07-20 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-score.el (gnus-home-score-file): nnheader-translate-file-chars.
+
+2001-07-18  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-shorten-references): Change `maxcount' and
+       `cut' to obey USEFOR draft 5.
+
+2001-07-12  Colin Walters  <walters@cis.ohio-state.edu>
+
+       * gnus-sum.el (gnus-summary-display-arrow): New variable.
+       (gnus-summary-set-article-display-arrow): New function.
+       (gnus-summary-goto-subject): Use it.
+
+2001-07-18 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-import-article): Insert date if
+       doesn't exist.
+
+2001-07-18 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-content-type-parameters): New variable.
+       (mml-content-disposition-parameters): New variable.
+       (mml-insert-mime-headers): Use them.
+       (mml-parse-1): Accept charset.
+
+2001-07-17 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-select-group): Doc fix.
+
+       * gnus-eform.el (gnus-edit-form-done): Return nil if end-of-file.
+
+2001-07-17  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * dgnushack.el (dgnushack-make-auto-load): Advise `make-autoload'
+       to handle `define-derived-mode'.
+
+2001-07-16 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From:  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * message.el (message-mode): Use define-derived-mode.
+       (message-tab): message-completion-alist.
+
+       * imap.el (imap-interactive-login): Use make-local-variable.
+       (imap-open): Ditto.
+       (imap-authenticate): Ditto.
+
+       * gnus-msg.el (gnus-setup-message): Change-major-mode-hook.
+
+       * gnus-art.el (gnus-article-edit-mode): Use define-derived-mode.
+
+2001-07-16  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-citation-line-function): Refer to
+       gnus-cite-attribution-suffix.
+
+2001-07-15  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
+
+       * gnus-art.el,...: Error convention changes.
+
+2001-07-13 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-rebuild-thread): Count hidden lines too.
+
+2001-07-13 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-read-group-data): Nuke emacs-lisp-mode-hook.
+       (nnrss-read-server-data): Ditto.
+
+2001-07-13 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-setup.el (gnus-use-installed-gnus): Typo.
+       * Cleanup files.
+       From Pavel@Janik.cz (Pavel Jan\e,Am\e(Bk).
+
+2001-07-13 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-summary-line-format): Add %o.
+
+       * gnus-sum.el (gnus-summary-pipe-output): Don't configure as pipe
+       unless shell outputs something.
+
+2001-07-13 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-boring-article-headers): Better doc.
+       (article-hide-headers): Better regexp.
+       Suggested by Matt Swift <swift@alum.mit.edu>.
+
+       * nnheader.el (nnheader-max-head-length): Better doc.
+       (nnheader-header-value): Skip spaces.
+       (nnheader-parse-head): Remove space.
+       Suggested by Matt Swift <swift@alum.mit.edu>.
+
+       * gnus-sum.el (gnus-summary-show-raw-article): New function.
+       (gnus-get-newsgroup-headers): Remove space.
+
+2001-07-12 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-msg-treat-broken-reply-to): Add force.
+       (gnus-summary-reply): Use it.
+       (gnus-summary-reply-broken-reply-to): New function.
+       (gnus-msg-force-broken-reply-to): New function.
+
+       * mm-view.el (mm-inline-text): Showing as text/plain when error.
+
+2001-07-12 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-draft.el (gnus-draft-setup): Restore gnus-newsgroup-name.
+
+2001-07-12 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-external-terminal-program): New variable.
+       (mm-display-external): Use it. Use term to display when no
+       window-system.
+
+2001-07-12  Bj\e,Av\e(Brn Torkelsson  <torkel@hpc2n.umu.se>
+
+       * gnus-srvr.el (gnus-browse-make-menu-bar): Changed one of the
+       Browse->Next entries to Browse->Prev
+
+2001-07-11 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-inews-do-gcc): Don't test gnus-alive-p.
+
+2001-07-11 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-encode.el (mm-content-transfer-encoding-defaults): Use base64
+       for the default encoding.
+
+       * nnrss.el (nnrss-url-field): New field.
+       (nnrss-request-article): Add newsgroups.
+
+       * nnfolder.el (nnfolder-read-folder): Force to use a multibyte buffer.
+
+2001-07-11 04:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndraft.el (nndraft-request-restore-buffer): Don't remove Date.
+
+       * gnus-draft.el (gnus-draft-edit-message): Remove Date here.
+       (gnus-draft-setup): Remove backlog.
+
+2001-07-10  Pavel Jan\e,Am\e(Bk  <Pavel@Janik.cz>
+
+       * gnus-logic.el, gnus-srvr.el, gnus-vm.el, nnheaderxm.el, nnoo.el:
+       Cleanup.
+
+2001-07-09 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-bug): Erase buffer.
+
+       * nnfolder.el (nnfolder-possibly-change-group): Don't create group.
+
+2001-07-09 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-attachment-override-p): Fix typo.
+
+2001-03-19 05:28:00  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-kill.el (gnus-execute): Work with the extra headers.
+       * gnus-sum.el (gnus-summary-execute-command): Ditto.
+
+2001-07-09 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-inline-text): w3-coding-system-for-mime-charset
+       may not defined. From: Raja R Harinath <harinath@cs.umn.edu>.
+
+       * message.el (message-send-mail-real-function): New variable.
+       (message-send-mail-partially, message-send-mail):
+
+       * nngateway.el (nngateway-request-post): Use it.
+
+       * gnus-agent.el (gnus-agentize): Use it.
+
+       * nnsoup.el (nnsoup-old-functions, nnsoup-set-variables)
+       (nnsoup-revert-variables): Use it.
+
+2001-07-09  Colin Walters  <walters@cis.ohio-state.edu>
+
+       * mm-decode.el (mm-inline-media-tests): Default to displaying as
+       text/plain if the type doesn't match any other media types.
+       (mm-inlined-types): Doc fix.
+       (mm-display-inline): Revert previous change (now handled by a
+       default type in `mm-inline-media-tests'.
+       (mm-inlinable-p): Revive.
+       (mm-display-part): Call `mm-inlinable-p'.
+       (mm-attachment-override-p): Ditto.
+       (mm-inlined-p): Doc fix.
+
+       * gnus-art.el (gnus-mime-display-single): Call `mm-inlinable-p' as
+       well as `mm-inlined-p'.
+
+2001-07-09 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * 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  <zsh@cs.rochester.edu>
+       From  Paul Jarc <prj@po.cwru.edu>
+
+       * message.el (message-use-mail-followup-to): New variable.
+       (message-get-reply-headers): Use it.
+
+2001-07-04  Gerd Moellmann  <gerd@gnu.org>
+
+       * nnheader.el (nnheader-init-server-buffer): Make sure the
+       *nntpd* buffer is made multibyte instead of a random buffer.
+
+2001-07-09 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-get-newsgroup-headers-xover): Get headers only
+       when it returns headers.
+
+2001-07-07  Simon Josefsson  <jas@extundo.com>
+
+       * rfc2047.el (rfc2047-encode-message-header): Skip header when
+       trying to fold. Thanks to Colin Walters
+       <walters@cis.ohio-state.edu>
+
+2001-07-06  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-parse-address-list, imap-parse-flag-list)
+       (imap-parse-body-extension, imap-parse-body-ext, imap-parse-body):
+       Add information in `assert's.
+
+       * nnimap.el (nnimap-possibly-change-group): Ignore uidvalidity
+       changes. (From nnimaps' point of view, `nnimap-verify-uidvalidity'
+       and `nnimap-group-overview-filename', should handle all
+       change-of-uidvalidity related issues.  But there may be other
+       problems.)
+
+2001-07-05  Colin Walters  <walters@cis.ohio-state.edu>
+
+       * rfc2047.el (rfc2047-encode-message-header): Don't include the
+       header name when folding.
+
+2001-07-05  Colin Walters  <walters@cis.ohio-state.edu>
+
+       * mm-decode.el (mm-inlined-types): Document relationship with
+       `mm-inline-media-tests'.
+       (mm-display-inline): Default to displaying as plain text if no
+       inlining handler is available.
+       (mm-inlinable-p): Remove.
+       (mm-inlined-p): Don't call `mm-inlinable-p'.
+       (mm-automatic-display-p): Ditto.
+       (mm-attachment-override-p): Ditto.
+
+2001-07-04  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-importantize-dormant): New variable.
+       (nnimap-request-update-info-internal): Use it.
+       (nnimap-request-set-mark): Ditto.
+
+2001-07-04  Didier Verna  <didier@lrde.epita.fr>
+
+       * nntp.el (nntp-send-command): don't pass a buffer argument to
+       `point'. Only XEmacs accepts this.
+       * nntp.el (nntp-send-command-nodelete): ditto.
+       * nntp.el (nntp-send-command-and-decode): ditto.
+
+2001-07-04  Didier Verna  <didier@lrde.epita.fr>
+
+       * nntp.el (nntp-open-connection-function): doc update.
+       * nntp.el (nntp-pre-command): New.
+       * nntp.el (nntp-via-rlogin-command): New.
+       * nntp.el (nntp-via-telnet-command): New.
+       * nntp.el (nntp-via-telnet-switches): New.
+       * nntp.el (nntp-via-user-name): New.
+       * nntp.el (nntp-via-user-password): New.
+       * nntp.el (nntp-via-address): New.
+       * nntp.el (nntp-via-envuser): New.
+       * nntp.el (nntp-via-shell-prompt): New.
+       * nntp.el (nntp-open-telnet-stream): New.
+       * nntp.el (nntp-open-via-rlogin-and-telnet): New.
+       * nntp.el (nntp-open-via-telnet-and-telnet): New.
+       * nntp.el (nntp-wait-for): check for possibly echo'ed commands.
+       * nntp.el (nntp-send-command): ditto.
+       * nntp.el (nntp-send-command-nodelete): ditto.
+       * nntp.el (nntp-send-command-and-decode): ditto.
+
+2001-06-30  YAGI Tatsuya  <yagi@is.titech.ac.jp>
+       Trivial patch.
+
+       * gnus-start.el (gnus-check-first-time-used): Use `if' instead of
+       `when'.
+
+2001-07-03  Simon Josefsson  <jas@extundo.com>
+       From Nuutti Kotivuori <nuutti.kotivuori@smarttrust.com>
+
+       * flow-fill.el (fill-flowed): Use (1+ (point-at-eol)) instead.
+
+2001-07-03  Simon Josefsson  <jas@extundo.com>
+
+       * flow-fill.el (fill-flowed): If `fill-region' inserts empty line,
+       remove it (workaround XEmacs `fill-region' bug).
+
+2001-07-01  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-date-days-ago): Defeat locale.
+
+2001-06-28 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-format-error): New function.
+       (mml2015-mailcrypt-decrypt, mml2015-mailcrypt-clear-decrypt)
+       (mml2015-mailcrypt-verify, mml2015-gpg-clear-verify)
+       (mml2015-mailcrypt-clear-verify, mml2015-gpg-verify): Use it.
+
+2001-06-26 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-retrieve-headers): The description may not exist.
+       Suggested by Christoph Conrad <C.Conrad@cli.de>.
+
+       * gnus-sum.el (gnus-summary-set-local-parameters): Don't override
+       group variables.
+
+2001-06-25 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-write-groups): Use gnus-prin1.
+
+       * nnrss.el (nnrss-save-server-data): Bind print-level and print-length.
+       (nnrss-save-group-data): Ditto.
+
+       * gnus-agent.el (gnus-agent-save-alist): Ditto.
+
+2001-06-25  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-do-send-housekeeping): Narrow to headers.
+
+2001-06-24  Simon Josefsson  <jas@extundo.com>
+
+       * rfc2047.el (rfc2047-fold-region): The check to skip WSP
+       insertion when breaking lines looked for " \t" instead of "[ \t]".
+       (rfc2047-encode-message-header): Fold lines even if
+       no QP encoding is done.
+
+2001-06-23  Simon Josefsson  <jas@extundo.com>
+       From Samuel Tardieu <sam@inf.enst.fr>
+
+       * smime.el (smime-keys): Support additional certificates.
+       (smime-make-certfiles): New function.
+       (smime-sign-region): Use previous variables.
+       (smime-get-certfiles): New function.
+       (smime-sign-buffer): Use it.
+       (smime-verify-region): Support both CAfile and CApath.
+
+2001-06-23  Simon Josefsson  <jas@extundo.com>
+
+       * smime.el (smime-decrypt-region): Perhaps work.
+
+2001-06-22 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-copy-article-buffer): Typo.
+
+2001-04-06  Ralph Schleicher  <rs@nunatak.allgaeu.org>
+
+       * mm-decode.el (mm-save-part): Rewrite file name.
+       (mm-file-name-rewrite-functions): New variable.
+       (mm-file-name-delete-whitespace): New function.
+       (mm-file-name-trim-whitespace): New function.
+       (mm-file-name-collapse-whitespace): New function.
+       (mm-file-name-replace-whitespace): New variable and function.
+
+2001-06-22  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-make-date): Workaround locale for weekdays.
+
+2001-06-21 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-goto-body): Return nil if not found. (revert!)
+
+2001-06-21 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Fremlin <chief@bandits.org>
+
+       * message.el (message-goto-body): Some messages have no header.
+
+       * gnus-msg.el (gnus-copy-article-buffer): Use it.
+
+2001-06-21  Ralph Schleicher  <rs@nunatak.allgaeu.org>
+
+       * nnultimate.el (nnultimate-retrieve-headers): Date fix.
+
+2001-06-21 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-make-date): Add week day.
+       Suggested by Jason R. Mastaler <jason@mastaler.com>.
+
+2001-06-19  Simon Josefsson  <jas@extundo.com>
+
+       * message.el (message-yank-prefix): Doc fix.
+       (message-yank-cited-prefix): Ditto.
+       (message-delete-not-region): Keep citation prefix on first line,
+       if possible and appropriate.
+
+2001-06-19  Simon Josefsson  <jas@extundo.com>
+
+       * imap.el (imap-process-connection-type): New variable.
+       (imap-kerberos4-open, imap-gssapi-open): Use it.  This makes
+       recent `imtest's work completely (no line length issues), while
+       making making old `imtest's unusable.  Thanks to NAGY Andras
+       <nagya@inf.elte.hu> for his work.
+
+2000-12-30  NAGY Andras  <nagya@inf.elte.hu>
+
+       * imap.el (imap-ssl-program): Add -quiet to shut up
+       OpenSSL/SSLeay's internal debug talk.
+
+2001-06-19  Matt Armstrong  <matt@lickey.com>
+
+       * imap.el (imap-parse-flag-list): Workaround bug in Courier IMAP
+       server.
+
+2001-06-19 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-article-buffer): New variable.
+       (nnmail-split-incoming): Use it.
+
+2001-06-15  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * qp.el (quoted-printable-decode-region): If called interactively,
+       use coding-system-for-read.
+
+2001-06-16 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-check-news-header-syntax): Check Reply-To.
+
+2001-06-16 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-parse-1): Use message options.
+
+       * message.el (message-do-fcc): Don't do anything if there is no
+       FCC.
+
+2001-06-16  Simon Josefsson  <jas@extundo.com>
+
+       * nnimap.el (nnimap-split-articles): Support 'junk to-groups.
+       (nnimap-expunge-search-string): New variable.
+       (nnimap-request-expire-articles): Use it.
+
+2001-06-15 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-send-mail-with-qmail): wrong exit status is
+       100 not 1. Reported by Paul Jarc <prj@po.cwru.edu>.
+
+2001-06-15 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-strip-multiple-blank-lines): Use
+       delete-region instead of replace-match.
+
+2001-06-14 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-google-parse-1): Fix Google content regexp.
+       (nnweb-google-wash-article): Ditto.
+
+2001-06-14 Ferenc Wagner  <wferi@bolyai1.elte.hu>
+
+       * nnweb.el (nnweb-google-parse-1): Fix Google url regexp.
+
+2001-06-13  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.el (gnus-define-group-parameter): Don't quote the defcustom
+       specs.
+
+2001-06-13 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-email-address): Move it here.
+
+       * gnus-art.el (article-de-quoted-unreadable): Read charset if
+       requested.
+       (article-de-base64-unreadable): Ditto.
+       (article-wash-html): Ditto.
+
+2001-06-12 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-options-set-recipient): Don't add ", "
+       unless necessary. Suggested by Josh Huber <huber@alum.wpi.edu>.
+
+2001-06-12 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-group-alist): Use |fr| instead of [fr].
+
+2001-06-12 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-plain-save-name): Use file-relative-name.
+       From Marc Lefranc <Marc.Lefranc@univ-lille1.fr>.
+
+       * nnrss.el (nnrss-node-text): Node might be nil.
+
+2001-06-11 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-uu.el (gnus-uu-save-article): Use mml tag instead of
+       part. From Katsumi Yamaoka <yamaoka@jpl.org>.
+
+       * nnrss.el (nnrss-group-alist): More items.
+
+2001-06-09 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-node-text): Use cddr instead xml-node-children.
+
+2001-06-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       Trivial patch from Dale Hagglund  <rdh@best.com>
+
+       * gnus-mlspl.el (gnus-group-split-fancy): Fix generation of split
+       restrict clauses.
+
+2001-06-07 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       From Benjamin Rutt <brutt+news@bloomington.in.us>
+
+       * message.el (message-wide-reply-confirm-recipients): New variable.
+
+2001-06-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       Trivial patch from Mark Thomas  <mthomas@edrc.cmu.edu>
+
+       * nnmail.el (nnmail-fix-eudora-headers): Change the In-Reply-To
+       fix so it works with XEmacs.
+
+2001-06-07 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-retrieve-headers): Support description as extra
+       headers.
+
+2001-06-07 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el: Fix a few bugs.
+
+2001-06-05  Simon Josefsson  <jas@extundo.com>
+
+       * mm-decode.el (mm-handle-set-external-undisplayer): Don't
+       generate compiler warnings.  From Alex Schroeder <alex@gnu.org>.
+
+2001-06-04  Hrvoje Niksic  <hniksic@arsdigita.com>
+
+       * mm-decode.el (mm-pipe-part): Bind coding-system-for-write to
+       binary so that we don't transmit ISO 2022 garbage to the process.
+       This is needed under XEmacs.
+
+2001-06-03  Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-ssl-open): Require ssl. (Otherwise ssl.el is
+       autoloaded incorrectly below because ssl-program-* is bound.)
+       Thanks to Amos Gouaux for report.
+
+2001-06-02  Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-kerberos4-open):
+       (imap-gssapi-open):
+       (imap-ssl-open):
+       (imap-network-open):
+       (imap-shell-open):
+       (imap-starttls-open): Set buffer to workaround spurious
+       `accept-process-output' buffer changes.  Thanks to Mats Lidell
+       <Mats.Lidell@contactor.se> for report and partial patch and Jake
+       Colman <colman@ppllc.com> for report.
+
+2001-05-31 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-catchup): New argument.
+       (gnus-summary-catchup-from-here): New function.
+
+2001-05-30  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * mm-view.el (mm-inline-image-xemacs): Insert newline, then move
+       back, then insert glyph.  (Before, the glyph was inserted first,
+       then the newline.)  This works around a behavior in XEmacs where
+       it is not possible to insert a character after a glyph which is at
+       the end of a buffer.  Patch by Lloyd Zusman <ljz@asfast.com>.
+
+2001-05-28  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       From Jaap-Henk Hoepman (jhh@xs4all.nl).
+
+       * 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\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-salt.el (gnus-tree-highlight-node): Bind `default-high' and
+       `default-low' when evaluating `gnus-summary-highlight'.
+       From Raja R Harinath <harinath@cs.umn.edu>.
+
+2001-05-27  Simon Josefsson  <simon@josefsson.org>
+
+       * message.el (message-yank-cited-prefix): New variable.
+       (message-indent-citation): Use it.
+
+       * mml2015.el (mml2015-mailcrypt-verify): Store gpg stderr output
+       as details.
+       (mml2015-mailcrypt-clear-verify): Ditto.
+
+2001-05-24  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+       From Nevin Kapur <nevin@jhu.edu>.
+
+       * gnus-sum.el (gnus-summary-default-high-score,
+       gnus-summary-default-low-score): New variables.
+       (gnus-summary-highlight): Use them.
+
+2001-05-16  Didier Verna  <didier@lrde.epita.fr>
+
+       * message.el (message-mail): pass the 'send-actions argument to
+       `message-setup'.
+
+2001-05-16  Simon Josefsson  <simon@josefsson.org>
+       From Raymond Scholz <ray-2001@zonix.de>
+
+       * gnus-art.el (gnus-mime-view-part-as-charset):
+       (gnus-mime-internalize-part): Doc fixes.
+
+2001-05-11  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-start.el (gnus-ignored-newsgroups): Also ignore NNTP type
+       status lines without any text ("^215$").
+
+2001-05-06 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-check-group): Reverse.
+
+2001-05-07  Simon Josefsson  <simon@josefsson.org>
+
+       * message.el (message-get-reply-headers):
+       (message-followup): Fix typo, suggested by David Green
+       <dgreen@uab.edu>
+
+2001-05-05 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-request-expire-articles): Fix.
+
+       * nnrss.el (nnrss-open-server): Read server data when it is called.
+       (nnrss-request-expire-articles): Fix.
+
+2001-05-05 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-do-send-housekeeping): mail-abbrevs may
+       rename buffer behind Gnus.
+
+2001-05-04 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-check-group): Use nnheader-translate-file-chars.
+       (nnrss-group-alist): Add more resources.
+       (nnrss-check-group): Ignore errors.
+
+2001-05-04 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-request-expire-articles): Correct the return value.
+
+       * nnslashdot.el (nnslashdot-request-list): Add time.
+       (nnslashdot-request-expire-articles): New function.
+
+       * gnus-start.el (gnus-check-bogus-newsgroups): Remove bogus
+       secondary methods too.
+
+2001-05-03 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-use-followup-to): Set default value to t.
+
+2001-05-03  Florian Weimer  <fw@deneb.enyo.de>
+
+       * message.el (message-dont-reply-to-names): Fix documentation.
+       (message-get-reply-headers): Use Mail-Followup-To only for wide
+       replies.
+
+2001-05-03 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-request-expire-articles): Calculate # of days
+       correctly.
+       (nnrss-check-group): Use time.
+
+2001-05-01 19:21:19 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.03 is released.
+
+2001-05-01 19:06:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-topic-article-to-article): Use the
+       group.
+
+2001-04-24 19:50:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-srvr.el (gnus-server-insert-server-line): Add a space.
+
+2001-04-15 14:55:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-retrieve-headers): Return all
+       available headers.
+
+       * gnus-sum.el (gnus-read-all-available-headers): New variable.
+       (gnus-get-newsgroup-headers-xover): Use it.
+
+2001-04-14 15:47:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-retrieve-headers): Clean up.
+
+2001-04-30 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-retrieve-groups): Use throw instead of error.
+
+2001-04-29 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el (nnrss-insert-w3): Use cache before I figure out how to
+       disable it.
+
+       * gnus.el (gnus-info-nodes): Remove a few The's.
+
+2001-04-29 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-movemail): Call-process may return a
+       signal description string.
+
+       * gnus-start.el (gnus-read-newsrc-el-file):
+       gnus-newsrc-file-version may be nil.
+
+       * nnmail.el (nnmail-get-new-mail): Use the exact file only.
+       Suggested by Michael Sperber [Mr. Preprocessor]
+       <sperber@informatik.uni-tuebingen.de>.
+
+2001-04-25  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * mm-uu.el (mm-uu-configure-list): Fixed customize type.
+
+2001-04-24  Hrvoje Niksic  <hniksic@arsdigita.com>
+
+       * mm-view.el (mm-display-inline-fontify): Allow XEmacs to fully
+       fontify HANDLE.
+
+2001-04-18  Simon Josefsson  <simon@josefsson.org>
+
+       * smime.el (smime-ask-passphrase): Rework to return value.
+       (smime-sign-region): Rework to bind value and use it.
+       (smime-decrypt-region): Ditto.
+
+2001-04-18  Simon Josefsson  <simon@josefsson.org>
+       Trivial patch from Mathias Herberts  <Mathias.Herberts@iroise.net>
+
+       * smime.el (smime-ask-passphrase): New function.
+       (smime-sign-region): Use it.
+       (smime-encrypt-cipher): New variable.
+       (smime-decrypt-region): Ditto.
+
+2001-04-12  Jason Merrill  <jason_merrill@redhat.com>
+       Committed by Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-shell-open): Erase the buffer *after* copying it into
+       the log.
+
+2001-04-14 01:14:42 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+
+       * gnus.el: Oort Gnus v0.02 is released.
+
+2001-04-14 00:48:42  Lars Magne Ingebrigtsen  <larsi@quimby.gnus.org>
+
+       * gnus.el: Oort Gnus v0.01 is released.
+
+2001-04-13 22:01:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-highlight): Highlight read
+       undownloaded articles as read articles.
+
+       * gnus-agent.el (gnus-agent-get-undownloaded-list): Clean up.
+       (gnus-agent-get-undownloaded-list): Mark all undownloaded
+       articles, even read ones, as such.
+
+       * gnus-sum.el (gnus-summary-find-matching): Clean up.
+       (gnus-find-matching-articles): New function.
+       (gnus-summary-limit-include-matching-articles): New command.
+       (gnus-summary-limit-include-thread): Include articles that have
+       matching subjects.
+       (gnus-offer-save-summaries): Clean up.
+
+2001-04-13  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * nnmail.el (nnmail-split-fancy-with-parent): Add docstring.
+
+2001-04-12 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Jason Merrill <jason_merrill@redhat.com>
+
+       * gnus-sum.el (gnus-summary-insert-new-articles): Reverse the articles.
+
+2001-04-10 08:01:15  Katsumi Yamaoka  <yamaoka@jpl.org>
+       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-post-news): Fill the Newsgroups header by the
+       newsgroup names when the original article is a news message.
+
+2001-04-12 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-cite-prefix-regexp): Use POSIX regexp if
+       supported. Suggest by Jim Meyering <jim@meyering.net>.
+
+2001-04-02  Nevin Kapur  <nevin@jhu.edu>
+       Committed by Kai Gro\e,b_\e(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>.
+
+       * nnmail.el (nnmail-split-it): Added check for .* at the end of
+       regexp in nnmail-split-fancy.
+
+2001-04-10  Simon Josefsson  <simon@josefsson.org>
+
+       * message.el (message-options-set-recipient): Look at Cc and Bcc too.
+
+2001-04-10  Colin Marquardt  <colin@marquardt-home.de>
+
+       * message.el (message-send-mail): Improve the interaction with the
+       user.
+
+2001-04-10  Simon Josefsson  <simon@josefsson.org>
+
+       * imap.el (imap-message-copy): Work around buggy servers that
+       doesn't send TRYCREATE tags.
+
+2001-04-09 01:15:54  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-start.el (gnus-read-newsrc-el-file): Work with Semi-gnusae.
+
+2001-04-05 21:43:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-update-summary-mark-positions): Use a valid
+       date.
+
+2001-04-04 16:13:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-group.el (gnus-group-quit): Check that the dribble buffer
+       lives.
+
+2001-04-02 00:40:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-parse-news-url): New function.
+       (gnus-button-handle-news): New function.
+       (gnus-button-alist): Point to new functions.
+
+       * gnus-group.el (gnus-group-quit): Only mark buffer in non-empty.
+
+       * gnus-start.el (gnus-read-newsrc-el-file): Nix out
+       gnus-format-specs.
+
+       * message.el (message-check-news-header-syntax): Question even
+       when Gnus doesn't know the group names.
+       (message-send-news): Clean up.
+
+       * gnus-start.el (gnus-dribble-read-file): Say whether Gnus was
+       exited on purpose without saving.
+
+       * gnus-group.el (gnus-group-quit): Mark the dribble file as `Q'.
+
+2001-04-01 00:37:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-score.el (gnus-score-orphans): Clean up.
+
+       * gnus-win.el (gnus-remove-some-windows): Leave one Gnus window.
+
+       * gnus-sum.el (gnus-summary-exit): Kill the summary buffer a bit
+       later.
+
+       * gnus-start.el (gnus-close-all-servers): Find the right items to
+       close.
+
+       * qp.el (quoted-printable-decode-region): Just message
+       malformation; don't quit.
+
+2001-03-31 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Gerd Moellmann <gerd@gnu.org>.
+
+       * gnus.el (gnus-interactive): A typo.
+
+2001-03-26  Juanma Barranquero  <lektu@uol.com.br>
+       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-delete-alist): Declare it as an alias of
+       `assq-delete-all', if that function exists; otherwise use the old
+       definition. Documentation changed to match the one in
+       `assq-delete-all'.
+
+2001-04-01 00:37:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-start.el (gnus-close-all-servers): New function.
+
+       * gnus-srvr.el (gnus-server-close-all-servers): Clean up.
+       (gnus-server-remove-denials): Clean up.
+
+       * gnus-sum.el (gnus-summary-sort-by-original): New command and
+       keystroke.
+
+2001-03-31 02:56:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-send-news): Message where we are sending.
+       (message-send-mail): Ditto.
+
+       * gnus.el (gnus-server-string): New function.
+
+       * gnus-sum.el (gnus-summary-up-thread): Doc fix.
+
+       * mm-decode.el (mm-default-directory): Customized.
+       (mm-tmp-directory): Ditto.
+
+       * gnus-sum.el (gnus-summary-catchup-and-exit): Doc fix.
+       (gnus-get-newsgroup-headers): Return -1 for articles without Lines
+       or Chars.
+       (gnus-summary-line-format-alist): ?l is now a string.
+       (gnus-summary-prepare-threads): Output ? for unknown lines.
+       (gnus-summary-insert-line): Ditto.
+       (gnus-summary-print-article): Unbalanced parentheses.
+
+       * gnus-msg.el (gnus-inews-do-gcc): Check group to allow it to find
+       out whether new stuff has arrived.
+
+2001-03-31 02:14:38  Alan Shutko  <ats@acm.org>
+
+       * gnus-sum.el: Let printing work on ttys on Emacs.
+
+2001-03-31 01:11:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-post-news): Add an empty Newsgroups header
+       when forcing news.
+
+       * gnus-sum.el (gnus-summary-mark-article-as-replied): Make into a
+       command.
+
+2001-03-31 01:04:54  Francis Litterio  <franl@world.std.com>
+
+       * message.el (message-set-auto-save-file-name): Don't use
+       asterisks under nt.
+
+2001-03-31 00:03:42  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-inews-insert-draft-meta-information): Allow
+       lists of articles.
+
+       * gnus-uu.el (gnus-uu-digest-mail-forward): Mark as forwarded.
+
+       * gnus-msg.el (gnus-put-message): Clean up.
+       (gnus-summary-reply): Mark all replied-to articles as replied to.
+       (gnus-inews-add-send-actions): Also mark as forwarded.
+       (gnus-summary-mail-forward): Mark as forwarded.
+
+       * gnus-sum.el (gnus-summary-mark-article-as-replied): Take a list
+       of articles.
+       (gnus-summary-mark-article-as-forwarded): Ditto.
+
+       * gnus-msg.el (gnus-summary-resend-message): Mark article as
+       forwarded.
+       (gnus-summary-mail-forward): Clean up.
+
+       * gnus.el (gnus-article-mark-lists): Added forward.
+
+       * gnus-sum.el (gnus-forwarded-mark): New variable.
+       (gnus-summary-prepare-threads): Use it.
+       (gnus-summary-update-secondary-mark): Ditto.
+       (gnus-newsgroup-forwarded): New variable.
+
+2001-03-30 23:13:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-msg.el (gnus-summary-reply): Allow very wide replies.
+       (gnus-summary-very-wide-reply): New command and keystroke.
+       (gnus-summary-very-wide-reply-with-original): Ditto.
+
+       * gnus-score.el (gnus-adaptive-word-length-limit): New variable.
+       (gnus-score-adaptive): Use it.
+
+       * gnus-start.el (gnus-get-unread-articles): Clean up.
+
+2001-03-21 20:00:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-retrieve-headers): Work for other
+       boards.
+
+2001-03-21  Didier Verna  <didier@lrde.epita.fr>
+
+       * gnus-start.el (gnus-subscribe-newsgroup-hooks): New.
+       * gnus-start.el (gnus-subscribe-newsgroup): use it.
+
+2001-03-15 09:47:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-retrieve-headers): Understand
+       long-form month names.
+
+2001-03-18 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-show-all-headers):
+       gnus-article-show-all-headers is broken. Use
+       gnus-summary-toggle-header instead.
+
+       * mml2015.el (mml2015-gpg-extract-from): No error.
+
+2001-03-18 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Bj\e,Ax\e(Brn Mork <bmork@dod.no>.
+
+       * mml2015.el (mml2015-gpg-extract-from): New function.
+       (mml2015-gpg-verify): Use it.
+       (mml2015-gpg-clear-verify): Use it.
+
+2001-03-17 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-setup-fill-variables): Use
+       fill-paragraph-function.
+       (message-fill-paragraph): Take an argument.
+       (message-newline-and-reformat): Take another argument.
+
+2001-03-16 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (rmail-output): It is in rmailout.el not rmail.el.
+
+2001-03-16 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-forward): local-variable-p takes an extra
+       argument in XEmacs.
+
+2001-03-16  Simon Josefsson  <simon@josefsson.org>
+
+       * nnimap.el (nnimap-dont-use-nov-p): Renamed from
+       `nnimap-use-nov-p' (it really tested the negative).
+       (nnimap-retrieve-headers): Use it.
+
+2001-03-11  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-generate-headers-first): Update doc.
+
+2001-03-10  Matthias Wiehl  <mwiehl@gmx.de>
+       Trivial patch.
+
+       * gnus.el (gnus-summary-line-format): Typo.
+
+2001-03-11  Simon Josefsson  <simon@josefsson.org>
+
+       * mailcap.el (mailcap-mime-data): Add application/sieve.
+       (mailcap-mime-extensions): Add .siv, .xls.
+
+2001-03-14 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Christoph Conrad <christoph.conrad@gmx.de>
+
+       * gnus-score.el (gnus-summary-lower-thread): Typo.
+
+2001-03-14 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-forward-decoded-p): New variable.
+       (message-forward-subject-author-subject): Use it.
+       (message-make-forward-subject): Use it.
+       (message-forward): Use it.
+
+       * gnus-uu.el (gnus-uu-digest-mail-forward): Use it.
+
+       * mm-util.el, message.el, rfc2047.el, gnus-sum.el, gnus-score.el:
+       Sync with Emacs 21 (tag EMACS_PRETEST_21_0_100).
+
+;;Has been fixed -- zsh.
+;;2001-03-05  Dave Love  <fx@gnu.org>
+;;
+;;     * mm-util.el (mm-mime-mule-charset-alist): Fix utf-8 case.
+;;     Move it after definition of mm-coding-system-p.
+;;
+2001-03-01  Dave Love  <fx@gnu.org>
+
+       * mm-util.el (mm-inhibit-file-name-handlers): Add
+       image-file-handler.
+
+2001-02-11  Dave Love  <fx@gnu.org>
+
+       * message.el (message-signature-file): Fix doc, :type.
+
+2001-02-08  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (rfc2047-fold-region): Don't forward-char at EOB.
+       (message-posting-charset): Defvar when compiling again.
+       (rfc2047-encodable-p): Require message.
+
+       * gnus-sum.el (gnus-alter-articles-to-read-function):
+       * gnus-score.el (gnus-score-after-write-file-function): Fix :type.
+
+2001-03-08 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnrss.el: New file.
+
+2001-03-08 02:41:36  Katsumi Yamaoka  <yamaoka@jpl.org>
+       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-unfold-region): Fix arg of
+       `skip-chars-forward'.
+
+2001-03-07 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndraft.el (nndraft-request-group): Restore auto save files if
+       the original files do not exist.
+
+2001-03-07 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-score.el (gnus-score-find-bnews): Print messages on illegal
+       SCORE paths.
+
+       * mm-decode.el (mm-dissect-buffer): Call
+       mail-extract-address-components only if necessary.
+
+2001-03-06 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-score.el (gnus-score-find-bnews): Maybe there is no
+       directory part.
+       (gnus-score-search-global-directories): Use file-directory-p.
+
+       * gnus-score.el (gnus-score-score-files-1): Use
+       gnus-kill-files-directory.
+       From Adrian Aichner <adrian@xemacs.org>.
+
+2001-03-05 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (charset): Move here from gnus-sum.el.
+
+2001-03-04 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-preview): Disable local map.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Make
+       gnus-article-post-menu here.
+
+       * gnus-art.el (gnus-article-make-menu-bar): Make summary-menu bar
+       if it has not been made.
+
+2001-03-02 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-describe-key): Map key to event.
+       (gnus-article-describe-key-briefly): Ditto
+
+2001-03-01 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-limit-include-expunged): Fix.
+
+2001-03-01 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Katsumi Yamaoka <yamaoka@jpl.org>.
+
+       * dgnushack.el (coerce, merge, subseq): defmacro.
+
+2001-03-01 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * lpath.el (nndraft-request-group): Move it here from nndraft.el.
+       A fake defalias in nndraft.el results a not-activated bug in
+       uncompiled versions.
+
+2001-02-26 11:27:27  Paul Jarc  <prj@po.cwru.edu>
+       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-split-references): Handle malformed References:.
+
+2001-02-26 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-mime-part-status): 1 part.
+
+2001-02-25 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From NAGY Andras <nagya@inf.elte.hu>.
+
+       * gnus.el (gnus-parameters): Typo.
+
+2001-02-24 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-read-method): Remove redundancy.
+
+2001-02-23 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnslashdot.el (nnslashdot-backslash-url): New variable.
+       (nnslashdot-request-list): Use it.
+
+2001-02-23 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnml.el (nnml-generate-active-info): Fix the case when there is
+       no file.
+
+       * gnus-sum.el (gnus-summary-import-article): Display it. Enable edit.
+       (gnus-summary-create-article): New function.
+
+       * gnus-group.el (gnus-group-mark-article-read): New function.
+
+       * gnus-msg.el (gnus-inews-do-gcc): Use it.
+
+       * gnus-art.el (gnus-article-edit-article): Set modified-p nil.
+
+2001-02-23 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-edit-done): Don't use
+       gnus-article-edit-exit.
+       (gnus-article-edit-exit): Confirm and insert original-article-buffer.
+
+       * gnus.el (gnus-parameters): New variable.
+       Suggested by NAGY Andras <nagya@inf.elte.hu>.
+       (gnus-parameters-get-parameter): New function.
+       (gnus-group-find-parameter): Use it.
+
+2001-02-23  Simon Josefsson  <simon@josefsson.org>
+
+       * gnus-msg.el (gnus-post-method): Fix documentation to reflect
+       change of default value to `current'.
+
+2001-02-23 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nneething.el (nneething-get-head): Insert unreadable file too.
+
+2001-02-22 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-insert-articles): Remove fetched headers.
+
+       * webmail.el (webmail-type-definition): Deja is bought by google.
+
+2001-02-22 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-fetch-headers): New function.
+       (gnus-select-newsgroup): Use it.
+       (gnus-summary-insert-articles): New function.
+       (gnus-summary-insert-old-articles): New function.
+       (gnus-summary-insert-new-articles): New function.
+
+       * gnus-group.el (gnus-group-prepare-flat-list-dead): Use decoded-name.
+       (gnus-group-list-active): Ditto.
+       * gnus-sum.el (gnus-set-mode-line): Ditto.
+       (gnus-summary-read-group-1): Ditto.
+
+2001-02-21 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-topic.el (gnus-topic-get-new-news-this-topic): Redraw the
+       current topic.
+
+2001-02-21 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * smiley.el (gnus-smiley-display): Don't do widening.
+
+       * smiley-ems.el (gnus-smiley-display): Don't do widening. Smiley
+       within body.
+
+       * gnus-msg.el (gnus-inews-do-gcc): Activate group anyway.
+
+       * gnus-art.el (gnus-mime-display-multipart-alternative-as-mixed):
+       New variable.
+       (gnus-mime-display-multipart-related-as-mixed): New variable.
+       (gnus-mime-display-part): Use them.
+
+2001-02-20 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-setup-news): Allow gnus-group-line-format to be
+       something special.
+
+2001-02-20 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-request-group): Set nnweb-group anyway.
+       (nnweb-request-article): Call reference if exists.
+       (nnweb-type-definition): Dejanews is bought by google.com.
+       Beta!
+
+2001-02-19 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-draft.el (gnus-draft-reminder): "Confirm to exit?"
+
+2001-02-19  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-sum.el (gnus-thread-sort-functions): Doc fix.  Refer to
+       gnus-article-sort-functions.
+       (gnus-article-sort-functions): Doc fix.  Refer to
+       gnus-thread-sort-functions.
+
+2001-02-18 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       From Paul Jarc <prj@po.cwru.edu>.
+
+       * message.el (message-get-reply-headers): More fixes.
+
+2001-02-17  Paul Jarc  <prj@po.cwru.edu>
+       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-get-reply-headers): Fix bug with
+       Mail-Followup-To/to-address interaction.
+
+2001-02-17 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-configure-posting-styles): Match header in
+       gnus-article-copy.
+
+2001-02-16 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-do-send-housekeeping): Rename to a better
+       name.
+
+2001-02-16 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-cancel-news): Check article first, then ask
+       yes or no.
+
+2001-02-16 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-uu.el (mm-uu-type-alist): Add emacs-sources.
+
+2001-02-16 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-range.el (gnus-range-normalize): New function.
+
+2001-02-15  NAGY Andras  <nagya@inf.elte.hu>
+
+       * imap.el (imap-gssapi-open): Set imap-c-l-s-first.
+
+2001-02-14 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-srvr.el (gnus-server-regenerate-server): Use gnus-get-function.
+
+       * nnagent.el (nnagent-request-regenerate): New function.
+
+       * nnfolder.el (nnfolder-request-regenerate): New deffoo.
+
+       * nnml.el (nnml-generate-nov-databases): Accept argument
+       server. Don't open server if it is opened.
+       (nnml-request-regenerate): Use it. Change to deffoo.
+
+2001-02-14  Katsumi Yamaoka  <yamaoka@jpl.org>
+       Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-define-group-parameter): Fix.
+
+2001-02-14 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-define-group-parameter): Improved.
+
+       * gnus-sum.el (charset): Define parameter.
+       (ignored-charsets): Ditto.
+       (gnus-summary-setup-default-charset): Use them.
+
+       * gnus-start.el (gnus-read-descriptions-file): Use them.
+
+       * gnus-cus.el (gnus-group-parameters): Remove them.
+
+2001-02-14 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-print-article): Redo highlight.
+
+2001-02-13 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-read-group-1): Remove
+       gnus-summary-set-local-parameters.
+       (gnus-summary-setup-buffer): Put it here.
+
+2001-02-13 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (to-address): Define parameter.
+       (to-list): Ditto.
+       * gnus-art.el (article-hide-boring-headers): Use them.
+       * gnus-msg.el (gnus-post-news): Ditto.
+       * gnus-cus.el (gnus-group-parameters): Remove them.
+
+2001-02-13 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-draft.el (gnus-draft-reminder): New function.
+
+       * gnus-art.el (gnus-sender-save-name): New function.
+
+2001-02-13 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-mime-charset): Error message.
+
+2001-02-13 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-check-news-body-syntax): Don't check mml lines.
+
+2001-02-12 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-topic.el (gnus-subscribe-topics): Return nil if not
+       subscribe.
+
+       * gnus-start.el (gnus-call-subscribe-functions): New function.
+       (gnus-find-new-newsgroups): Use it.
+       (gnus-ask-server-for-new-groups): Use it.
+       (gnus-check-first-time-used): Use it.
+       (gnus-subscribe-newsgroup-method): Grok a list of functions.
+       (gnus-subscribe-options-newsgroup-method): Ditto.
+       (gnus-subscribe-hierarchically): Return gnus-subscribe-newsgroup's
+       return .
+
+2001-02-12  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-cus.el (gnus-score-customize): Doc fix.
+
+2001-02-11  Jesper Harder  <harder@ifa.au.dk>
+
+       * dgnushack.el (my-getenv): Typo.
+
+2001-02-11 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (dgnushack-make-load): Don't autoload smiley functions.
+
+2001-02-11 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-suspend): Offer save summaries.
+
+       * gnus-art.el (gnus-treat-leading-whitespace): New variable.
+       (gnus-treatment-function-alist): Use it.
+       (article-remove-leading-whitespace): New function.
+       (gnus-article-make-menu-bar): Use it.
+
+       * gnus-sum.el (gnus-summary-wash-empty-map): Add
+       remove-leading-whitespace.
+       (gnus-summary-wash-map): Bind strip-headers-in-body to `W a',
+       because of conflict.
+
+2001-02-09 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * Makefile.in: Hack generating gnus-load.el.
+       * dgnushack.el: Ditto.
+       * gnus-load.el: Remove it.
+
+2001-02-09 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el : Add URLDIR.
+
+       * Makefile.in (EMACS_COMP): Ditto.
+
+2001-02-09 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-cus.el (gnus-score-customize): Error on no score file.
+
+2001-02-09 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-merge-handles): New function.
+
+       * mm-view.el (mm-inline-message): Use it.
+       (mm-view-message): Ditto.
+
+       * mm-partial.el (mm-inline-partial): Ditto.
+
+       * mm-extern.el (mm-inline-external-body): Ditto.
+
+       * gnus-art.el (gnus-mime-view-part): Ditto.
+       (gnus-mime-view-part-as-type): Ditto.
+       (gnus-mime-save-part-and-strip): Prevent users to strip in some
+       cases.
+
+2001-02-08 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-cancel-news): Allow to shoot foot.
+       (message-supersede): Ditto.
+
+2001-02-08  Tommi Vainikainen  <thv@iki.fi>
+       Trivial patch.
+
+       * gnus-sum.el (gnus-simplify-subject-re): Use
+       message-subject-re-regexp.
+
+2001-02-08 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-expiry-target-group): Bind
+       nnmail-cache-accepted-message-ids to nil.
+
+       * gnus-xmas.el (gnus-xmas-article-display-xface): Use binary
+       coding system.
+
+2001-02-07 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * qp.el (quoted-printable-encode-region): Make sure characters are
+       between 00 and FF.  Don't check charset.
+
+       * mm-encode.el (mm-encode-content-transfer-encoding): Use unibyte
+       in Emacs 20.
+       * rfc2047.el (rfc2047-q-encode-region): Ditto.
+
+2001-02-07 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-make-forward-subject): Argument decoded.
+       (message-forward): Use it when digest.
+
+       * gnus-uu.el (gnus-uu-grab-articles): Shoot down original article
+       buffer.
+
+2001-02-07  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * message.el (message-generate-headers-first): Doc fix.
+
+2001-02-07 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-make-date-line): Error proof.
+
+2001-02-06 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-listing-limit): New variable.
+       (gnus-group-prepare-flat-list-dead): Use old trick to speed up.
+
+       * gnus-topic.el (gnus-group-prepare-topics): Use gnus-killed-hashtb.
+
+2001-02-06 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-newline-and-reformat): Special case for
+       breaking at BOL.
+
+2001-02-06  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-uu.el (gnus-uu-save-article): Make the topics summary a
+       message/rfc822.
+
+2001-02-06 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-encode-message-body): Don't insert
+       Content-Type if it is inside a mail.
+
+2001-02-06 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-xmas.el (gnus-xmas-article-menu-add): Add
+       gnus-article-commands-menu.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Don't share menu bar
+       in Emacs.
+
+       * gnus-start.el (gnus-read-descriptions-file): Use
+       gnus-group-name-charset and gnus-group-charset-alist.
+
+2001-02-04 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-mark-as-processable): Understand
+       active region.
+
+       * gnus-start.el (gnus-group-change-level): Remove from both
+       gnus-zombie-list and gnus-killed-list.
+
+2001-02-04 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-subscribe-options-newsgroup-method): Add
+       gnus-subscribe-topics.
+
+       * gnus-cus.el (gnus-extra-topic-parameters): Fix doc.
+
+2001-02-04 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-make-menu-bar): Make
+       gnus-article-post-menu.
+
+       * gnus-xmas.el (gnus-xmas-article-menu-add): Add post menu.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Use t if XEmacs.
+
+       * gnus-group.el (gnus-group-make-menu-bar): Ditto.
+
+       * message.el (message-mode-menu): Ditto.
+
+       * gnus-art.el (defvar): eval-when-compile.
+
+2001-02-02 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agentize): Fix doc.
+
+2001-02-02  Karl Kleinpaste  <karl@charcoal.com>
+
+       * mml.el (mml-preview): Bind `q'.
+
+2001-02-02 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-mime-mule-charset-alist): non-Mule case.
+
+2001-01-31  Dave Love  <fx@gnu.org>
+
+       * mm-util.el (mm-mime-mule-charset-alist)
+       (mm-find-mime-charset-region): Consider mule-utf-8.
+
+2001-01-31  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el (gnus-article-x-face-command)
+       (gnus-treat-display-xface, gnus-treat-display-smileys): Add
+       :version.
+
+2001-01-26  Dave Love  <fx@gnu.org>
+
+       * mm-util.el (mm-multibyte-string-p): New.
+
+;;     * qp.el: Remove un-logged bogus changes from 2000-12-20.
+;;     (quoted-printable-encode-region): Doc fix.  Don't call
+;;     string-as-multibyte on class.  Clarify line-folding.
+       (quoted-printable-encode-string): Make temp buffer inherit
+       string's multibyteness.
+
+2001-01-23  Gerd Moellmann  <gerd@gnu.org>
+
+       * nnheader.el (toplevel): Don't require `gnus-util' at
+       compile-time; this creates a circular dependency, and prevents
+       a bootstrap.
+
+2001-01-22  Andreas Schwab  <schwab@suse.de>
+
+       * nnheader.el (gnus-delete-line): Autoload it as a macro.
+
+2001-01-31 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-remove-list-identifiers): Use consp.
+
+       * gnus-art.el (article-hide-list-identifiers): Ditto.
+
+       * gnus-sum.el (gnus-summary-remove-list-identifiers): Ditto.
+
+2001-01-31 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-remove-list-identifiers): Similar.
+
+       * gnus-art.el (article-hide-list-identifiers): Similar.
+
+2001-01-31  Karl Kleinpaste  <karl@charcoal.com>
+
+       * nnmail.el (nnmail-remove-list-identifiers): Improved.
+
+2001-01-31 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-score.el (gnus-summary-score-entry): match may be an integer.
+
+2001-01-30 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-string-equal): New function.
+
+       * gnus-art.el (article-hide-boring-headers): Use it.
+
+2001-01-27  Karl Kleinpaste  <karl@charcoal.com>
+
+       * gnus-art.el (gnus-article-banner-alist): eGroups new banner.
+
+2001-01-27 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-msg-mail): Support switch-action.
+
+2001-01-26 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-summary-save-in-pipe): Prompt for saving
+       command if there is not last-saver.
+
+2001-01-24 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-open-connection): 201 is possible.
+
+2001-01-24 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode): MIME charset is not coding system.
+       (rfc2047-charset-encoding-alist): Add big5.
+
+2001-01-24 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-add-server): Redraw the line.
+       (gnus-agent-remove-server): Ditto.
+       (autoload): gnus-server-update-server.
+
+       * gnus-srvr.el (gnus-server-line-format): Add %a.
+       (gnus-server-line-format-alist): Add gnus-tmp-agent.
+       (gnus-server-insert-server-line): Use it.
+
+2001-01-24 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-mime-mule-charset-alist): Preferred MIME names
+       GB2312 and Big5.
+
+2001-01-24  Simon Josefsson  <sj@extundo.com>
+
+       * mail-source.el (mail-sources): Add :program specifier to IMAP
+       mail source.
+       (mail-source-fetch-imap): Map :program to `imap-shell-program'.
+
+2001-01-24 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-score.el (gnus-score-lower-thread): Fix a doc typo.
+
+2001-01-24 12:22:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nntp.el (nntp-wait-for): Return the success code.
+       (nntp-open-connection): Use it.
+
+2001-01-11 11:49:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-int.el (gnus-check-server): Allow breaking the opening.
+
+2001-01-23 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-print-article): Remove process mark.
+
+2001-01-22 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-print-article): Take one prefix
+       argument. Allow to print several articles in one file.
+
+2001-01-21 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * webmail.el (webmail-type-definition): netaddress changes.
+
+2001-01-21 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el: Fix copyright. Remove trailing spaces.
+
+       * message.el (message-forward): Use mule4.
+
+2001-01-20 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-string-as-unibyte): New function.
+
+       * message.el (message-forward): Use it.
+
+2001-01-19 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-cite-original-without-signature): Don't peel
+       off the blank line.
+       (message-get-reply-headers): Add Cc if it is not in follow-to.
+
+2001-01-20  Simon Josefsson  <sj@extundo.com>
+
+       * mm-decode.el (mm-handle-multipart-from): Add.
+       (mm-dissect-buffer): Save From: header value.
+       (mm-security-from): Remove.
+       (mm-possibly-verify-or-decrypt): Don't set mm-security-from.
+
+       * mml-smime.el (mml-smime-verify): Use `mm-handle-multipart-from'
+       instead of `mml-security-from'.  Protect null from value.
+
+2001-01-20  Simon Josefsson  <sj@extundo.com>
+
+       * mailcap.el (mailcap-mime-data): Run `gnumeric' on
+       application/vnd.ms-excel attachments.
+
+2001-01-19  Simon Josefsson  <sj@extundo.com>
+
+       * gnus-art.el (gnus-button-alist): Add `?=' to mailto URL regexp.
+
+2001-01-19 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-ignored-mail-headers): Ditto.
+
+2001-01-19  Simon Josefsson  <sj@extundo.com>
+
+       * message.el (message-ignored-news-headers): Only search beginning
+       of line.
+
+2001-01-19  ShengHuo Zhu  <zsh@cs.rochester.edu>
+       Trivial patch from Alberto Lusiani  <a.lusiani@noemail.org>
+
+       * message.el (message-send-mail): Content-Type may not be there.
+
+2001-01-18 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ems.el (gnus-article-display-xface): Add BUFFER.
+       * gnus-xmas.el (gnus-xmas-article-display-xface): Ditto.
+
+       * gnus-art.el (article-display-x-face): Insert X-Face if there is
+       not.
+
+2001-01-18 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-read-group-1): Don't test dead
+       non-native groups.
+
+2001-01-18 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-yank-original): Understand
+       universal-argument.
+
+2001-01-18 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-boring-article-headers): Add to-address.
+       (article-hide-boring-headers): Ditto.
+
+       * mm-view.el (mm-inline-message): Insert a newline unless bolp.
+
+2001-01-18 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-fold-region): Don't insert LWSP if there is
+       one.
+
+2001-01-16  Simon Josefsson  <simon@josefsson.org>
+
+       * message.el (message-make-in-reply-to): Add comment to message-id
+       (old syntax, see 2000-08-02 change).
+
+2001-01-16 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-url-mailto): Use gnus-msg-mail.
+       (gnus-button-mailto): Setup message. Moved to gnus-msg.el.
+       (gnus-button-reply): Ditto.
+
+2001-01-16  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (article-display-x-face): Fix.
+
+2001-01-15 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-display-x-face): Use
+       gnus-original-article-buffer.
+
+2001-01-15  Jack Twilley  <jmt@tbe.net>
+
+       * message.el (message-add-header): Move to point-max.
+
+2001-01-15  Simon Josefsson  <simon@josefsson.org>
+
+       * smime.el (smime-CA-directory, smime-CA-file): Change default to
+       nil, improve documentation.
+       (smime-certificate-directory): Comment out false hints (until it
+       is implemented).
+
+       * mml-smime.el (mml-smime-sign): Place user in customize buffer if
+       there aren't any keys.
+       (mml-smime-verify): If smime-CA-{file,directory} set, also try to
+       verify certificate.  Default is changed to only check integrity.
+       Improved security status texts.  If a certificate doesn't contain
+       a email address, don't fail.
+
+       * smime.el (smime-noverify-region):
+       (smime-noverify-buffer): New functions.  Verifies integrity only.
+
+2001-01-12 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-sort-by-score): Reverse order.
+
+2001-01-12 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-configure-windows): switch-to-buffer in XEmacs.
+       (gnus-remove-some-windows): Ditto.
+
+2001-01-12 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-make-date-line): 11th.
+
+2001-01-11 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-gpg-encrypt): Remove CR.
+       (mml2015-gpg-sign): Ditto.
+
+2001-01-10 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el: Sync with EMACS_PRETEST_21_0_95.
+       * gnus.el (gnus-default-posting-charset): Bogus. Removed.
+
+2001-01-08  Dave Love  <fx@gnu.org>
+
+       * mm-encode.el (mm-qp-or-base64): Don't base64 for the sake of a
+       single character.
+
+       * mm-util.el (mm-mime-mule-charset-alist): Add Latin-{8,9}.
+
+       * message.el: Doc and message fixes.
+       (message-send-rename-function)
+       (message-make-forward-subject-function)
+       (message-send-mail-function, message-reply-to-function)
+       (message-wide-reply-to-function, message-followup-to-function)
+       (message-distribution-function, message-auto-save-directory): Fix
+       :type.
+
+       * gnus/mml.el (mml-parse-1): Frob mml-confirmation-set when
+       proceeding after warnings.  Amend multipart warning message.
+
+2001-01-04  Dave Love  <fx@gnu.org>
+
+       * gnus-util.el (nnmail-pathname-coding-system): Defvar when
+       compiling.
+       (gnus-make-directory): Require nnmail.
+
+       * mm-decode.el (mm-inline-media-tests): Add
+       image/x-portable-bitmap.
+       (mm-get-image): Grok pbm.
+
+2001-01-10  Paul Stevenson  <p.stevenson@surrey.ac.uk>
+
+       * nnvirtual.el (nnvirtual-request-expire-articles): delq nil.
+
+2001-01-09  Didier Verna  <didier@xemacs.org>
+
+       * dgnushack.el (dgnushack-compile): give a dummy value to
+       `gnus-xmas-glyph-directory' for the time of compilation.
+       * gnus-agent.el: moved some XEmacs specific hook add-ons from
+       `gnus-xmas-[re]define' to avoid loosing user custom settings.
+       * gnus-art.el: ditto.
+       * gnus-group.el: ditto.
+       * gnus-salt.el: ditto.
+       * gnus-sum.el: ditto.
+       * gnus-topic.el: ditto.
+       * gnus-xmas.el (gnus-xmas-define): see above.
+       * gnus-xmas.el (gnus-xmas-redefine): see above.
+       * gnus-xmas.el (gnus-xmas-glyph-directory): generate a
+       non-continuable error when the directory can't be found.
+
+2001-01-09 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-interactively-view-part): Don't copy-sequence
+       handle.
+       * gnus-art.el (gnus-mime-view-part): Copy it.
+       (gnus-mime-view-part-as-type): Add into gnus-article-mime-handles.
+
+2001-01-09  Michael Downes  <mjd@ams.org>
+
+       * gnus-sum.el (gnus-summary-read-group-1): More useful message.
+
+2001-01-08 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-get-new-mail): Find group only if file is not
+       orig-file. Use ',source.
+
+2001-01-08 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-xmas.el (gnus-xmas-modeline-glyph):
+       (gnus-xmas-group-startup-message):
+       Detect gnus-xmas-glyph-directory when it is nil.
+
+2001-01-08 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * pop3.el (pop3-get-message-count): Andrew Innes
+       <andrewi@gnu.org>'s patch of 1999-12-01 was not fully committed.
+
+2001-01-05 06:49:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-fetch-session): Say what we quit.
+
+       * time-date.el (time-to-number-of-days): New function.
+
+2001-01-04 11:06:14  Gregory Chernov  <greg@visiontech-dml.com>
+       Trivial patch.
+
+       * nnslashdot.el (nnslashdot-request-list): Always get the right
+       sid.
+
+2001-01-05 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-minibuffer-local-map): New keymap.
+       (message-read-from-minibuffer): Use it.
+       * gnus-msg.el (gnus-summary-resend-message): Use it
+
+2001-01-04 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-display-time-event-handler): New function.
+       (gnus-after-getting-new-news-hook): Use it.
+
+2001-01-03 07:26:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * message.el (message-ignored-mail-headers): Add draft header.
+
+2001-01-02 06:28:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-expire-articles): Don't save
+       excursion.
+
+       * nnslashdot.el (nnslashdot-request-list): Get the right year.
+
+2001-01-01 00:52:44  Ed L. Cashin  <ecashin@coe.uga.edu>
+       A revoked patch.
+
+       * gnus-sum.el (gnus-summary-expire-articles): Save excursion.
+
+2000-12-31 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * qp.el (quoted-printable-decode-region): Don't backward-char.
+
+2000-12-31 03:57:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-draft.el: Mark articles as replied.
+
+       * gnus-sum.el (gnus-summary-add-mark): New function.
+
+       * gnus-group.el (gnus-add-mark): New function.
+
+       * gnus-sum.el (gnus-summary-buffer-name): New function.
+       (gnus-summary-setup-buffer): Use it.
+
+       * gnus-draft.el: Set things up with the right post method and
+       stuff.
+
+       * message.el (message-ignored-news-headers): Remove X-Draft-From.
+
+       * gnus-msg.el (gnus-inews-insert-draft-meta-information): New function.
+
+       * gnus.el (gnus-draft-meta-information-header): New variable.
+
+2000-12-30 00:17:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-treatment-function-alist): Move the date
+       functions before the header sorting functions.
+
+       * mm-uu.el (mm-uu-pgp-signed-extract-1): Unquote "- " quotes.
+
+       * dgnushack.el (dgnushack-compile): Message whether there is w3.
+       Don't (push "/usr/share/emacs/site-lisp" load-path).
+
+       * gnus-cite.el (gnus-article-fill-cited-article): Don't add space
+       to empty fill prefixes.
+
+2000-12-30 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-open-connection): Kill pbuffer if process is nil.
+       Suggested by Christoph Conrad <christoph.conrad@gmx.de>.
+
+2000-12-30 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnheader.el (autoload): Autoload gnus-sorted-intersection.
+
+       * nnml.el (autoload): Move to nnheader.el.
+
+       * nnfolder.el (nnfolder-existing-articles): Reversed, i.e. sorted.
+       (nnfolder-request-expire-articles): Use gnus-sorted-intersection.
+       (nnfolder-retrieve-headers): Use intersection. Suggested by Jonas
+       Kvarnstr\e,Av\e(Bm <jonkv@ida.liu.se>.
+
+2000-12-30 00:17:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (article-make-date-line): Get the hours right.
+       (gnus-ignored-headers): More hiding.
+
+       * nnmail.el (nnmail-expiry-wait): Not an integer.
+
+       * message.el (message-goto-body): Only expand abbrev when called
+       interactively.
+       (message-make-lines): Use it.
+
+2000-12-29 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-inews-yank-articles): Reparse headers.
+
+2000-12-30 00:17:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-sum.el (gnus-summary-limit-include-expunged): Really
+       include the expunged articles.
+
+       * gnus-group.el (gnus-group-sort-by-server): New function.
+
+       * gnus.el (gnus-method-to-server-name): New function.
+       (gnus-group-prefixed-name): Use it.
+
+       * gnus-group.el (gnus-group-sort-function): Doc fix.
+       (gnus-group-sort-groups-by-server): New command.
+
+2000-12-29 13:25:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-treat-date-english): New variable.
+       (article-date-english): New command.
+       (gnus-english-month-names): New variable.
+       (article-make-date-line): Do 'english.
+
+       * gnus-cite.el (gnus-article-fill-cited-article): Add a space
+       after the fill prefix.
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Removed "Enter
+       score...".
+
+       * gnus-art.el (gnus-ignored-headers): Hide more headers.
+
+       * message.el (message-mode-map): Bind comment-region.
+
+       * gnus-art.el (gnus-mime-display-part): Let w3 display
+       multipart/related.
+
+       * mm-bodies.el (mm-long-lines-p): New function.
+       (mm-body-encoding): Use it.
+       (mm-body-encoding): Encode articles with lines longer than 1000
+       characters.
+
+2000-12-29 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-enable-multibyte): Use
+       default-enable-multibyte-characters.
+       (mm-enable-multibyte-mule4): Ditto.
+       (mm-disable-multibyte): Test XEmacs.
+       (mm-disable-multibyte-mule4): Ditto.
+       (mm-with-unibyte-current-buffer): Simplified.
+       (mm-with-unibyte-current-buffer-mule4): Ditto.
+
+2000-12-28 19:44:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnheaderxm.el (nnheader-string-as-multibyte): New alias.
+
+       * nnheader.el (nnheader-string-as-multibyte): New alias.
+
+       * mm-view.el (mm-inline-text): Warn when bugging out in w3.
+
+       * gnus-uu.el (gnus-message-process-mark): New function.
+       (gnus-uu-mark-by-regexp): Use it.
+       (gnus-new-processable): New function.
+
+2000-12-28 19:21:57  Inge Frick  <inge@nada.kth.se>
+        Trivial patch.
+
+       * gnus-sum.el (gnus-no-mark): New variable.
+
+2000-11-01 01:12:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnwfm.el (nnwfm-create-mapping): Remove quote marks and
+       backslashes.
+
+2000-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (gnus-article-banner-alist): Remove duplicate
+       definition.
+
+2000-12-25 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * dgnushack.el (dgnushack-compile): elc is in the current directory.
+
+       * qp.el (quoted-printable-encode-region): Don't check multibyte in
+       XEmacs.
+
+2000-12-25  Lloyd Zusman  <ljz@asfast.com>
+       Trivial patch.
+
+       * mml.el (mml-read-tag): Save tag location.
+
+2000-12-25  Simon Josefsson  <simon@josefsson.org>
+
+       * starttls.el: Sync with Emacs 21.
+
+2000-12-24 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-mail): Support yank-action.
+
+       * message.el (message-setup): Revoke the last change.
+
+2000-12-24 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-setup): Use cons. Suggested by Johan Vromans
+       <jvromans@squirrel.nl>.
+
+2000-12-24  Simon Josefsson  <sj@extundo.com>
+
+       * mm-bodies.el (mm-decode-content-transfer-encoding): Preserve
+       mailing list junk at end of part.
+
+2000-12-23  Simon Josefsson  <sj@extundo.com>
+
+       * nnimap.el (nnimap-expiry-target): New function.
+       (nnimap-request-expire-articles): Use it.
+
+2000-12-22 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-group-parameters-more): New variable.
+       * gnus-cus.el (gnus-group-customize): Use it.
+
+       * gnus.el (gnus-define-group-parameter): New macro.
+       (auto-expire): Use it
+       (total-expire): Use it.
+       * gnus-art.el (banner): Use it.
+
+       * mml.el (mml-parse): save-excursion. Suggested by Lloyd Zusman
+       <ljz@asfast.com>.
+
+2000-12-22 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-topic.el (gnus-topic-create-topic): Use list.
+
+       * gnus-vm.el (gnus-summary-save-article-vm): Require gnus-art
+       before binding gnus-default-article-saver.
+
+       * gnus-sum.el (gnus-summary-save-article):
+       (gnus-summary-pipe-output):
+       (gnus-summary-save-article-mail):
+       (gnus-summary-save-article-rmail):
+       (gnus-summary-save-article-file):
+       (gnus-summary-write-article-file):
+       (gnus-summary-save-article-body-file): Ditto.
+
+       * gnus-mh.el (gnus-summary-save-article-folder): Ditto.
+
+2000-12-22 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-security-button-map):
+       (gnus-mime-button-map): Add parent.
+
+2000-12-22 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * messagexmas.el (message-xmas-redefine): New function.
+
+       * message.el: Use it.
+
+       * gnus-art.el (gnus-article-check-hidden-text): Return t.
+
+       * gnus-util.el (gnus-remove-text-properties-when): Return t.
+
+2000-12-22 03:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-dissect-multipart): Avoid errors owing to
+       malformatted messages.
+
+2000-12-22 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-image-load-path): New function.
+
+       * gnus-group.el (gnus-group-make-tool-bar): Use it.
+
+       * gnus-sum.el (gnus-summary-make-tool-bar): Use it.
+
+       * message.el (message-tool-bar-map): Use it.
+
+       * Makefile.in (install-el): New rule.
+
+2000-12-21  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-art.el (article-treat-dumbquotes): Quote \.
+
+2000-12-21 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-treat-emphasize): Don't treat emphasis if
+       Emacs 20 runs on a terminal.
+
+2000-12-21 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-bug): Revert to save-excursion.
+
+       * mml.el (gnus-add-minor-mode): Autoload.
+
+       * message.el (message-forward): Save-restriction.
+
+2000-12-21  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-art.el (article-treat-dumbquotes): More doc, provided by
+       Paul Stevenson <p.stevenson@surrey.ac.uk>
+
+2000-12-21 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el (gnus-mailing-list-mode-map): Use C-c C-n prefix.
+
+       * mml.el (gnus-ems): Don't require.
+
+       * gnus.el (gnus-decode-rfc1522): Removed.
+       (gnus-set-text-properties): Define.
+
+2000-12-21 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-*): handle may be nil.
+
+       * gnus-sum.el (gnus-summary-mode): Turn on gnus-mailing-list-mode.
+
+       * gnus.el (gnus-group-remove-excess-properties): Not defined
+       in gnus-xmas.
+
+2000-12-20 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-mail-user-agent): Add :version.
+
+2000-12-21  Miles Bader  <miles@gnu.org>
+
+       * message.el (message-mode): Set `comment-start' to the  yank prefix.
+
+2000-12-20 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-mail-user-agent): New variable.
+       (message-setup): Renamed to message-setup-1. Support
+       mail-user-agent.
+       (message-mail-user-agent): New function.
+       (message-mail): Use it.
+       (message-reply): Use it.
+       (message-resend): Use it.
+       (message-mail-other-window): Use it.
+       (message-mail-other-frame): Use it.
+
+       * gnus-msg.el (gnus-bug): Support mail-user-agent.
+
+2000-12-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-tool-bar-map): Simplify.
+       (message-narrow-to-head-1): New function.
+       (message-narrow-to-head): Use it.
+       (message-reply): Ditto.
+       (message-cancel-news): Ditto.
+       (message-supersede): Ditto.
+       (message-make-forward-subject): Ditto.
+       (message-bounce): Ditto.
+
+2000-12-20 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * uudecode.el (uudecode-decode-region-external): make-temp-file
+       may not be defined.
+
+       * binhex.el (defalias): eval-and-compile.
+
+       * message.el (message-tool-bar-map): New function.
+       (message-mode): Use it.
+
+2000-12-20 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-find-connection): Remove the entry.
+       (nntp-retrieve-groups): (gnus-buffer-live-p buf).
+
+2000-12-20 05:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-summary-mail-forward): Use original buffer.
+
+       * message.el (message-forward): Copy buffer in unibyte mode.
+
+2000-12-20 04:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-make-forward-subject): Don't widen. Decode.
+       (message-forward): Don't decode subject.
+
+2000-12-20  Christoph Conrad  <C.Conrad@cli.de>
+
+       * qp.el (quoted-printable-encode-region): Upcase QP.
+
+2000-12-20 03:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-possibly-verify-or-decrypt): Use
+       mail-extract-a-c instead. Don't depend on Gnus.
+
+       * mml.el (gnus-ems): Require it.
+
+       * gnus-msg.el (gnus-summary-mail-forward):
+
+       * message.el (message-forward):  Move mime-to-mml here.
+
+2000-12-20 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el, gnus-sum.el, message.el: Add :help unless Emacs.
+       * gnus-art.el (gnus-insert-mime-button): Simplify.
+       (gnus-mime-display-alternative): Ditto.
+       (gnus-insert-mime-security-button): Ditto.
+
+2000-12-20 01:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-add-text-properties-when): In XEmacs,
+       text-property-not-all doesn't return nil when start=mark(end).
+       (gnus-remove-text-properties-when): Ditto.
+
+2000-12-20 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-group-change-level): Remove group from
+       gnus-active-hashtb if real killed.
+
+2000-12-19 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-insert-mime-button): Emacs20 needs local-map.
+       (gnus-mime-display-alternative): Ditto.
+       (gnus-insert-mime-security-button): Ditto.
+
+2000-12-19 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-start.el (gnus-group-change-level): Don't add it into
+       killed-list if it was killed.
+
+2000-12-19 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmbox.el (nnmbox-file-coding-system): Use binary.
+       (nnmbox-active-file-coding-system): Ditto.
+
+       * gnus-cus.el (gnus-group-parameters): Add posting-style.
+
+2000-12-19 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-version):
+       (gnus-version-number): Set to Oort Gnus 0.01.
+
+       * gnus-art.el (gnus-mime-security-button-map):
+       (gnus-insert-mime-security-button): Fix for Emacs21.
+
+2000-12-19 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el, gnus-sum.el, message.el: Comment out :help in
+       easymenu, because XEmacs doesn't understand :help.
+
+       * mm-uu.el: Require binhex.
+
+2000-12-19 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el: Merged. Emacs21 CVS tag is zsh-merge-ognus-1.
+
+2000-12-19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-synonym-alist): Fix a typo.
+
+2000-12-18  Gerd Moellmann  <gerd@gnu.org>
+
+       * *.xpm, *.pbm: Convert icons icons to size 24x24.
+
+2000-12-18  Dave Love  <fx@gnu.org>
+
+       * gnus-msg.el (news-setup, news-reply-mode): Don't autoload
+       (unused).
+
+2000-12-13  Miles Bader  <miles@gnu.org>
+
+       * smiley-ems.el (smiley-region): Bind `inhibit-point-motion-hooks'
+       to t, so that we don't get stuck while trying to smilefy
+       intangible text.
+
+2000-12-12  Gerd Moellmann  <gerd@gnu.org>
+
+       * smiley-ems.el (smiley-regexp-alist): Make regexps match
+       at the end of the buffer.
+       (smiley-region): In the loop, move to the end of the submatch
+       matching the smiley instead of using the end of the match
+       of the whole regexp.
+
+2000-12-12  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * message.el (message-mode): Doc fix.
+
+2000-12-12  Gerd Moellmann  <gerd@gnu.org>
+
+       * smiley-ems.el (smiley-region): Doc fix.
+
+2000-12-11  Miles Bader  <miles@gnu.org>
+
+       * gnus-sum.el (gnus-summary-recenter): When trying to keep the
+       bottom line visible, check to see if it's partially obscured, and
+       if so, either scroll one more line to make it fully visible, or
+       revert to showing the second line from the top.
+
+2000-12-07  Dave Love  <fx@gnu.org>
+
+       * mailcap.el (mailcap-download-directory)
+       * gnus-audio.el (gnus-audio-directory)
+       * smiley-ems.el (smiley-data-directory): Fix :type.
+
+2000-11-30  Dave Love  <fx@gnu.org>
+
+       * message.el (message-auto-save-directory): Use
+       file-name-as-directory.
+       (message-set-auto-save-file-name): Create
+       message-auto-save-directory if necessary.
+       (message-replace-chars-in-string): Removed -- unused.
+       (message-mail-alias-type): Customize.
+       (message-headers): Remove duplicate defgroup.
+
+2000-11-29  Dave Love  <fx@gnu.org>
+
+       * qp.el (quoted-printable-decode-region): Use error, not message
+       to report malformed text (like base64).  Amend message.
+
+2000-11-29  Miles Bader  <miles@gnu.org>
+
+       * message.el (message-header-lines): Fontify tag.
+
+2000-11-27  Dave Love  <fx@gnu.org>
+
+       * nnlistserv.el: Ignore errors when requiring nnweb and avoid a
+       compiler warning.
+
+;2000-11-26  Dave Love  <fx@gnu.org>
+;
+;      * mm-uu.el (mm-uu-configure-list): Fix typo in :type.
+;
+2000-11-23  Dave Love  <fx@gnu.org>
+
+       * uu-post.pbm, uu-decode.pbm: new files from XPMs.
+
+       * mm-uu.el (uudecode): Require.
+       (uudecode-decode-region, uudecode-decode-region-external): Don't
+       autoload.
+       (mm-uu-copy-to-buffer): Doc fix.
+       (mm-uu-decode-function, mm-uu-binhex-decode-function): Doc, custom
+       type fix.
+
+       * mailcap.el: Doc fixes.
+       (mailcap-mime-data): Various adjustments.
+       (mailcap): New group.
+       (mailcap-download-directory): Customize.
+       (mailcap-generate-unique-filename, mailcap-binary-suffixes)
+       (mailcap-temporary-directory): Deleted (unused).
+       (mailcap-unescape-mime-test): Simplify slightly.
+       (mailcap-viewer-passes-test): Use functionp.
+       (mailcap-command-p): Aliased to executable-find.
+
+       * rfc2047.el (rfc2047-encode-message-header): Don't encode if
+       default-enable-multibyte-characters is nil.
+
+2000-11-22  Gerd Moellmann  <gerd@gnu.org>
+
+       * gnus-group.el (gnus-group-make-tool-bar): Fix a paren typo.
+
+2000-11-21  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el (gnus-mime-button-map): Don't inherit from
+       gnus-article-mode-map.
+;      (gnus-mime-button-menu): Use mouse-set-point.
+       (gnus-insert-mime-button, gnus-mime-display-alternative)
+       (gnus-mime-display-alternative): Don't use local-map property.
+
+2000-11-17  Dave Love  <fx@gnu.org>
+
+       * uudecode.el (uudecode-insert-char): Fix bogus feature test.
+       (uudecode-decode-region-external): Doc fix.  Use with-temp-buffer
+       and make-temp-file.
+       (uudecode-decode-region): Doc fix.
+
+2000-11-14  Dave Love  <fx@gnu.org>
+
+       * cu-exit.pbm, exit-summ.pbm, followup.pbm, fuwo.pbm:
+       * mail-reply.pbm, next-ur.pbm, post.pbm, prev-ur.pbm:
+       * reply-wo.pbm, reply.pbm, rot13.pbm, save-aif.pbm, save-art.pbm:
+       New files, derived from the XPMs.
+
+2000-11-10  Dave Love  <fx@gnu.org>
+
+       * gnus-agent.el (gnus-agent-confirmation-function): Add :version.
+       (gnus-agent-lib-file, gnus-agent-load-alist)
+       (gnus-agent-save-alist, gnus-agent-article-name): Use
+       expand-file-name.
+
+       * gnus-group.el (gnus-group-name-charset-method-alist): Add
+       :version.
+       (nnkiboze-score-file): Defvar when compiling.
+
+       * gnus-start.el (gnus-read-newsrc-file): Add :version.
+
+       * gnus-art.el (gnus-article-banner-alist)
+       (gnus-emphasize-whitespace-regexp, gnus-ignored-mime-types)
+       (gnus-article-date-lapsed-new-header)
+       (gnus-article-mime-match-handle-function, gnus-mime-action-alist)
+       (gnus-treat-strip-list-identifiers, gnus-treat-date-iso8601)
+       (gnus-treat-strip-headers-in-body)
+       (gnus-treat-capitalize-sentences, gnus-treat-play-sounds)
+       (gnus-treat-translate): Add :version.
+       (gnus-article-mime-part-function): Fix defcustom.
+
+       * nnmail.el (nnmail-expiry-target)
+       (nnmail-scan-directory-mail-source-once, nnmail-extra-headers)
+       (nnmail-split-header-length-limit): Add :version.
+
+       * gnus-sum.el (gnus-auto-expirable-marks)
+       (gnus-inhibit-user-auto-expire, gnus-list-identifiers)
+       (gnus-extra-headers, gnus-ignored-from-addresses)
+       (gnus-newsgroup-ignored-charsets)
+       (gnus-group-highlight-words-alist)
+       (gnus-summary-show-article-charset-alist): Add :version.
+
+       * catchup.pbm, describe-group.pbm, exit-gnus.pbm, get-news.pbm:
+       gnntg.pbm, kill-group.pbm, subscribe.pbm, unsubscribe.pbm: New
+       files, converted from the XPMs.
+
+       * gnus-cache.el (gnus-cache-active-file): Don't use
+       file-name-as-directory on directory.
+       (gnus-cache-file-name): Use expand-file-name, not concat.  Don't
+       use file-name-as-directory on directory.
+
+       * time-date.el (timezone-make-date-arpa-standard): Autoload.
+       (date-to-time): Use it.
+
+;      * message.el (message-mode) <adaptive-fill-regexp>:
+;      <adaptive-fill-first-line-regexp>: Use [:alnum:] in regexp range.
+;      (message-newline-and-reformat): Likewise.
+       (message-forward-as-mime, message-forward-ignored-headers)
+       (message-buffer-naming-style, message-default-charset)
+       (message-dont-reply-to-names, message-send-mail-partially-limit):
+       Add :version.
+
+       * mm-util.el: Doc fixes.
+       (mm-mime-charset): Don't use the raw result of
+       mm-preferred-coding-system.
+       (mm-with-unibyte-buffer, mm-with-unibyte-current-buffer)
+       (mm-with-unibyte): Simplify.
+
+       * gnus-int.el (gnus-start-news-server): Use expand-file-name, not
+       concat.
+
+       * pop3.el (pop3-version): Deleted.
+       (pop3-make-date): New function, avoiding message-make-date.
+       (pop3-munge-message-separator): Use it.
+
+2000-11-09  Dave Love  <fx@gnu.org>
+
+       * gnus-group.el (gnus-group-make-directory-group)
+       (gnus-group-fetch-faq): Use expand-file-name.
+       (gnus-group-fetch-faq): Simplify completing-read form.
+
+       * mm-bodies.el (mm-encode-body): Use mm-multibyte-p, don't just
+       test for Mule.
+
+       * message.el (tool-bar-map): Defvar when compiling.
+
+       * gnus-setup.el (running-xemacs, gnus-use-installed-tm)
+       (gnus-tm-lisp-directory): Deleted.
+       (gnus-use-installed-mailcrypt, gnus-emacs-lisp-directory): Use
+       (featurep 'xemacs).
+       (gnus-gnus-lisp-directory, gnus-mailcrypt-lisp-directory)
+       (gnus-mailcrypt-lisp-directory, gnus-bbdb-lisp-directory): Remove
+       version numbers from file names.
+
+2000-11-08  Dave Love  <fx@gnu.org>
+
+       * mm-view.el: Use featurep for XEmacs test.
+       (mm-inline-message): Test for `remove-specifier'; don't use
+       condition-case.
+
+       * mm-bodies.el (mm-encode-body): Use mm-multibyte-p.
+
+       * gnus-score.el (gnus-score-load-file): Use expand-file-name.
+       (gnus-score-find-bnews): Don't concat "".
+
+       * cu-exit.xpm, prev-ur.xpm, next-ur.xpm, post.xpm, fuwo.xpm:
+       * followup.xpm, uu-post.xpm, uu-decode.xpm, mail-reply.xpm:
+       * reply.xpm, reply-wo.xpm, rot13.xpm, save-aif.xpm, save-art.xpm:
+       * exit-summ.xpm: New files, renamed from icons by Luis Fernandes.
+
+       * gnus-sum.el: Put some defvars in eval-when-compile.
+       (gnus-summary-mode-hook): Add :options.
+       (gnus-summary-make-menu-bar): Add some :help, used by tool bar.
+       (gnus-summary-tool-bar-map): New variable.
+       (gnus-summary-make-tool-bar): New function.
+       (gnus-summary-mode): Put kill-all-local-variables first.
+
+       * gnus-group.el (gnus-group-toolbar-map): New variable.
+       (gnus-group-make-tool-bar): Rewritten.
+       (gnus-group-mode): Put kill-all-local-variables first.
+
+       * rfc2047.el: Require gnus-util.
+
+       * nnml.el (gnus-sorted-intersection): Autoload.
+
+       * nnheader.el: Wrap subst-char-in-string def in eval-and-compile.
+       Put some defvars in eval-when-compile.
+       (gnus-intersection, gnus-sorted-complement):  Autoload.
+
+       * imap.el (imap-point-at-eol): New, replacing gnus-point-at-eol.
+
+       * mm-encode.el (mm-body-7-or-8): Autoload.
+
+       * mm-decode.el (mm-insert-inline): Autoload.
+
+       * mml.el:
+       * message.el: Put some defvars in eval-when-compile.
+
+       * gnus-msg.el: Put some defvars in eval-when-compile.
+       (gnus-msg-mail): Move after gnus-setup-message.
+
+       * smiley-ems.el (smiley-data-directory, smiley-regexp-alist): Doc fix.
+
+2000-11-07  Dave Love  <fx@gnu.org>
+
+       * gnus-util.el (nnheader): Don't require message (recursive
+       autoload).
+
+       * uudecode.el: Avoid compiler warnings.
+
+       * rfc2047.el: (rfc2047-fold-region): Use gnus-point-at-bol.
+       (rfc2047-charset-encoding-alist): Add iso-8859-1[45].
+
+2000-11-06  Dave Love  <fx@gnu.org>
+
+       * gnus-salt.el (gnus-binary-mode): Fix call to gnus-add-minor-mode.
+
+       * uudecode.el: Use (featurep 'xemacs).  Require cl when compiling.
+       (uudecode-char-int): New alias, replacing char-int.
+       (uudecode-decode-region): Don't call buffer-disable-undo.
+
+;      * mm-uu.el (mm-uu-configure): Unquote lambda.
+;      (mm-uu-configure-list): Doc fix.
+;
+;      * earcon.el (running-xemacs): Don't define.
+;
+;2000-11-03  Stefan Monnier  <monnier@cs.yale.edu>
+;
+;      * message.el (message-font-lock-keywords): Match a final newline
+;      to help font-lock's multiline support.
+;
+2000-11-03  Dave Love  <fx@gnu.org>
+
+       * gnus-nocem.el (gnus-nocem-check-article-limit): Default to 500.
+
+       * mm-partial.el (mm-inline-partial): Space-prefix temp buffer
+       name.
+
+       * gnus-cus.el (gnus-group-parameters) <gcc-self>: Fix custom type.
+       <banner>: Fix custom type, doc.
+
+       * mm-decode.el (mm-display-external): Space-prefix temp buffer
+       name.  Don't disable undo explicitly.
+
+;2000-11-02  Dave Love  <fx@gnu.org>
+;
+;      * message.el (message-font-lock-keywords): Use [:alpha:] for
+;      cite-prefix.
+
+2000-11-01  Dave Love  <fx@gnu.org>
+
+       * rfc2047.el (base64): Require unconditionally.
+       (message-posting-charset): Defvar when compiling.
+       (rfc2047-encode-message-header, rfc2047-encodable-p): Require
+       message.
+
+       * gnus-sum.el (nnoo): Require.
+       (mm-uu-dissect): Autoload.
+
+       * mml.el (mml-parse-1): Clarify message.
+       (mml-minibuffer-read-type): Use mailcap-mime-types.
+
+2000-11-01  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * mml.el: Fix a typo in the requiring of CL.
+
+2000-11-01  Dave Love  <fx@gnu.org>
+
+       * utf7.el: Require cl when compiling.
+
+       * binhex.el: Use (featurep 'xemacs).
+       (binhex-char-int): New alias, replacing char-int.  Change callers.
+       (binhex-decode-region): Simplify work buffer code.
+       (binhex-decode-region-external): Use expand-file-name, not concat.
+
+2000-10-30  Dave Love  <fx@gnu.org>
+
+       * gnus-art.el: Fix 2000-10-27 change properly.
+
+2000-10-28  Miles Bader  <miles@gnu.org>
+
+       * gnus-art.el (gnus-read-save-file-name): Remove extraneous paren.
+
+2000-10-27  Dave Love  <fx@gnu.org>
+
+       * gnus-group.el (gnus-group-make-menu-bar): Add some :help
+       strings.
+       (gnus-group-make-tool-bar): New function.
+       (gnus-group-mode): Use it.
+
+       * message.el (message-mode-menu): Add some :help strings.
+       (message-mode) [message-tool-bar-map]: Define tool-bar-map.
+       (featurep): Use (featurep 'xemacs).  Install tool bar for Emacs.
+
+       * catchup.xpm, exit-gnus.xpm, gnntg.xpm, subscribe.xpm:
+       * describe-group.xpm, get-news.xpm, kill-group.xpm:
+       * unsubscribe.xpm: New files.  Renamed icons from Luis Fernandes.
+
+       * mm-decode.el (mm-valid-and-fit-image-p): Don't test
+       display-graphic-p here.
+
+2000-10-27  Miles Bader  <miles@lsi.nec.co.jp>
+
+       * gnus-ems.el (gnus-ems-redefine): Use (featurep 'xemacs) instead
+       of the `gnus-xemacs' variable, as the latter has been removed.
+       * gnus-start.el (gnus-1, gnus-read-descriptions-file): Likewise.
+       * gnus-art.el (gnus-treat-display-xface)
+       (gnus-treat-display-smileys, gnus-treat-display-picons)
+       (gnus-article-read-summary-keys): Likewise.
+
+2000-10-26  Dave Love  <fx@gnu.org>
+
+       (defvar): Use rmail-spool-directory unconditionally.
+
+2000-10-18  Dave Love  <fx@gnu.org>
+
+       * mm-bodies.el (mm-uu-decode-function)
+       (mm-uu-binhex-decode-function): Defvar when compiling.
+
+       * gnus-nocem.el (gnus-nocem-issuers): Update.
+       (gnus-nocem-check-from): New option.
+       (gnus-nocem-scan-groups): Use it.
+       (gnus-nocem-check-article): Bind gnus-newsgroup-name.
+       (gnus-nocem-check-article-limit): Add :version.
+
+2000-10-16  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * ietf-drums.el (mm-util): Require CL when compiling.
+
+2000-10-15  Dave Love  <fx@gnu.org>
+
+       * qp.el: Require mm-util.
+
+2000-10-13  Dave Love  <fx@gnu.org>
+
+       * qp.el (quoted-printable-decode-region): Avoid invalid
+       coding-systems.
+
+2000-10-12  Gerd Moellmann  <gerd@gnu.org>
+
+       * mm-bodies.el: Don't require `mm-uu' at compile-time; it leads
+       to a recursive load.
+
+2000-10-12  Dave Love  <fx@gnu.org>
+
+       * mm-util.el (mm-charset-synonym-alist): Add windows-1252.
+
+       * gnus.el (gnus-group-startup-message): Check for PBM image.
+
+2000-10-09  Dave Love  <fx@gnu.org>
+
+       * mail-source.el (mail-source-fetch-imap): Bind
+       default-enable-multibyte-characters rather than using
+       mm-disable-multibyte.
+
+2000-10-05  Dave Love  <fx@gnu.org>
+
+       * qp.el (mm-decode-coding-region, mm-encode-coding-region):
+       Autoload.
+       (quoted-printable-decode-region):  Rename arg which confused
+       charset with coding-system.  Don't use nonascii-insert-offset.
+       Coding-system encode the region initially.  Don't recognize `=='
+       as valid QP.  Coding-system decode the region finally.
+       (quoted-printable-decode-string): Rename arg which confused
+       charset with coding-system.
+
+       * mm-bodies.el: Require mm-uu, Don't require qp, uudecode.
+       (mm-encode-body): Apply mm-charset-to-coding-system to arg of
+       mm-encode-coding-region.
+       (mm-decode-body, mm-decode-string): Rename variables which
+       confused charset with coding-system.
+       (binhex-decode-region): Don't autoload.
+       (mm-body-encoding): Require message.
+       (mm-decode-content-transfer-encoding): Require mm-uu in relevant
+       cond branches.
+
+       * gnus-art.el (article-de-quoted-unreadable)
+       (article-de-base64-unreadable): Fold search case
+       rather than downcasing string.  Apply mm-charset-to-coding-system
+       to arg of quoted-printable-decode-region.
+
+2000-10-04  Dave Love  <fx@gnu.org>
+
+       * gnus-ems.el: Don't turn off compiler warnings in local vars.
+       Require ring when compiling.
+       (gnus-article-compface-xbm): New variable.
+
+2000-10-04  Dave Love  <fx@gnu.org>
+
+       * smiley-ems.el (smiley-regexp-alist, smiley-update-cache): Use
+       pbm images.
+
+       * frown.pbm, smile.pbm, wry.pbm: New files.
+
+       * frown.xbm, smile.xbm, wry.xbm: Deleted.
+
+2000-10-03  Dave Love  <fx@gnu.org>
+
+       * mail-source.el (mail-sources): Revert to nil.
+
+       * nnmail.el (nnmail-spool-file): Revert to `((file))'.
+
+       * qp.el: Don't require mm-util.
+       (quoted-printable-decode-region): Rewritten.
+       (quoted-printable-decode-string, quoted-printable-encode-region):
+       Doc fix.
+       (quoted-printable-encode-region): Barf on multibyte characters.
+       Maybe make the class multibyte.  Upcase chars, not formatted
+       strings.  Allow mm-use-ultra-safe-encoding to be unbound.
+       (quoted-printable-encode-string): Don't use
+       mm-with-unibyte-buffer.
+
+2000-09-29  Gerd Moellmann  <gerd@gnu.org>
+
+       * smiley-ems.el (smiley-update-cache):  Use `:ascent center'.
+
+2000-09-21  Dave Love  <fx@gnu.org>
+
+       * smiley-ems.el (smiley-region): Test if display-graphic-p bound
+       (for Emacs 20).  Tidy somewhat.
+
+2000-09-21  Dave Love  <fx@gnu.org>
+
+       * gnus-ems.el (gnus-article-display-xface): Use unibyte for the
+       image processing.  Rationalize logic somewhat.
+
+2000-09-20  Dave Love  <fx@gnu.org>
+
+       * gnus-start.el (gnus-1) <gnus-simple-splash>: Don't test for X
+       specifically.
+
+       * gnus.el (gnus-version-number): Avoid some redundant
+       autoloads.
+
+2000-09-20  Gerd Moellmann  <gerd@gnu.org>
+
+       * gnus-ems.el (gnus-article-display-xface): Don't convert PBM
+       to XBM; we always have PBM support.
+
+2000-09-14  Dave Love  <fx@gnu.org>
+
+       * gnus.el (gnus-charset):
+       * mm-decode.el (mime-display):
+       * imap.el (imap) <defgroup>: Add :version.
+
+2000-09-13  Gerd Moellmann  <gerd@gnu.org>
+
+       * parse-time.el: Fix author's mail address.
+
+       * earcon.el, flow-fill.el, gnus-cite.el, gnus-gl.el, gnus-ml.el:
+       * gnus-mlspl.el, gnus-nocem.el, gnus-range.el, gnus-salt.el:
+       * gnus-setup.el, gnus-soup.el, gnus-undo.el, gnus-vm.el:
+       * messcompat.el, nnbabyl.el, nndir.el, nneething.el:
+       * nngateway.el, nnheaderxm.el, nnkiboze.el, nnlistserv.el:
+       * nnmbox.el, nnmh.el, nnoo.el, nnsoup.el, nnspool.el, rfc2045.el:
+       * rfc2231.el, uudecode.el: Fix copyright notice.
+
+       * nnweb.el (toplevel): To make the file bootstrap in Emacs,
+       require `w3' at load-time only if not running in batch mode.
+
+2000-12-19 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el: Before merge with Emacs21.
+
+2000-12-19  Raymond Scholz  <ray-2000@zonix.de>
+
+       * gnus-art.el (gnus-article-dumbquotes-map): Add EUR symbol.
+
+2000-12-19  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * mml.el (mml-mode-map): Change mml prefix from `M-m' to `C-c C-m'
+       to avoid conflict with the standard `back-to-indentation'
+       binding.
+
+2000-12-17 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-extern.el (mm-inline-external-body): g-a-m-h may be a handle.
+
+       * mm-util.el (mm-enable-multibyte-mule4): Test charsetp.
+       (mm-disable-multibyte-mule4): Ditto.
+       (mm-with-unibyte-current-buffer-mule4): Ditto.
+
+2000-12-15 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * pop3.el (pop3-movemail): Use binary.
+       (pop3-movemail-file-coding-system): Removed.
+
+2000-12-14 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-charset-synonym-alist): Add cn-gb.
+
+2000-12-13 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnspool.el (nnspool-lib-dir): Check whether /usr/lib/news/active
+       exists.
+
+2000-12-13 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-post-method): Use backend name when the
+       address is "".
+
+2000-12-08 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-verify-x-pgp-sig): Don't test
+       mm-verify-option.
+       (gnus-treat-x-pgp-sig): Default value.
+       (gnus-ignored-headers): Redundant.
+
+2000-12-04 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-configure-frame): Save selected window.
+
+2000-02-15  Andrew Innes  <andrewi@gnu.org>
+
+       * nnmbox.el: Require gnus-range.
+       (nnmbox-group-building-active-articles): New variable.
+       (nnmbox-group-active-articles): New variable; this is a cache of
+       all active articles by group and number.
+       (nnmbox-in-header-p): New function.
+       (nnmbox-find-article): New function.
+       (nnmbox-record-active-article): New function.
+       (nnmbox-record-deleted-article): New function.
+       (nnmbox-is-article-active-p): New function.
+       (nnmbox-retrieve-headers): Use nnmbox-find-article.
+       (nnmbox-request-article): Ditto.  Also supply extra arg to
+       nnmbox-article-group-number.
+       (nnmbox-request-expire-articles): Ditto.
+       (nnmbox-request-move-article): Ditto.
+       (nnmbox-request-replace-article): Ditto.
+       (nnmbox-request-rename-group): Rename group entry in active
+       article cache.
+       (nnmbox-delete-mail): Update active article cache, unless article
+       is being replaced.
+       (nnmbox-possibly-change-newsgroup): Call nnmbox-read-mbox, rather
+       than partially duplicating it.
+       (nnmbox-article-group-number): Add extra `this-line' arg, to
+       handle articles belonging to multiple groups.
+       (nnmbox-save-mail): Update active article cache.
+       (nnmbox-read-mbox): Build active article cache when loading mbox.
+       Also do some repair work, if we find articles that are missing the
+       appropriate X-Gnus-Newsgroup lines in the header.  We can usually
+       reconstruct these from Xref info.
+
+2000-12-04 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mail-source.el (mail-source-report-new-mail): Use
+       nnheader-run-at-time.
+
+2000-02-15  Andrew Innes  <andrewi@gnu.org>
+
+       * mail-source.el (mail-source-fetch-pop): Clear pop password when
+       an error is thrown, and then rethrow the error.
+       (mail-source-check-pop): Ditto.
+       (mail-source-start-idle-timer): Prevent multiple pop checks
+       running if the check takes a long time.
+
+2000-12-04 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-msg-mail): COMPOSEFUNC should return t if
+       succeed.
+
+2000-12-04 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-win.el (gnus-configure-windows): Make sure
+       nntp-server-buffer is live.
+       (gnus-remove-some-windows): switch-to-buffer -> set-buffer.
+
+2000-11-21  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * gnus-win.el (gnus-configure-windows): switch-to-buffer -> set-buffer.
+
+2000-12-04  Andreas Jaeger  <aj@suse.de>
+
+       * gnus-msg.el (gnus-summary-mail-forward): Fix typos in description.
+
+2000-12-03 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-fix-micalg): Alg might be nil.
+
+2000-12-01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+       Trivial patch from Christopher Splinter  <chris@splinter.inka.de>
+
+       * gnus-sum.el (gnus-summary-limit-to-age): Fix typo.
+
+2000-12-01  Simon Josefsson  <sj@extundo.com>
+
+       * mml-smime.el (mml-smime-verify): Fix address parsing.
+
+2000-12-01  Simon Josefsson  <sj@extundo.com>
+
+       * mml-smime.el (mml-smime-verify): Don't modify MM buffer.  Handle
+       more than one certificate inside PKCS#7 blob.  Better security
+       information (clamed / actual sender, openssl output, certificates
+       inside message).
+
+       * smime.el (smime-verify-region): Output to /dev/null.
+       (smime-buffer-as-string-region): Don't parse empty lines.
+
+2000-11-30 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-security-button-line-format-alist): Add
+       ?d and ?D.
+       (gnus-mime-security-show-details-inline): New variable.
+       (gnus-mime-security-show-details): Use them.
+       (gnus-insert-mime-security-button): Ditto.
+
+       * mml2015.el (mml2015-gpg-verify): Set details when succeed.
+       Suggest by Michael Duggan (md5i@cs.cmu.edu).
+       (mml2015-gpg-clear-verify): Ditto.
+       (mml2015-gpg-decrypt-1): Ditto.
+       (mml2015-use): Prefer 'gpg.
+
+2000-11-30 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-add-text-properties-when): New function.
+       (gnus-remove-text-properties-when): Ditto.
+
+       * gnus-cite.el (gnus-article-hide-citation): Use them.
+       (gnus-article-toggle-cited-text): Use them.
+
+       * gnus-art.el (gnus-signature-toggle): Use them.
+       (gnus-article-show-hidden-text): Ditto.
+       (gnus-article-hide-text): Ditto.
+
+2000-11-30 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-find-charset-region): Remove eight-bit-*.
+
+2000-11-30  Simon Josefsson  <sj@extundo.com>
+
+       * smime.el (smime-point-at-eol): New alias.
+       (smime-buffer-as-string-region): Use it.
+
+2000-11-29 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nndraft.el (nndraft-request-restore-buffer): Remove Date field.
+
+2000-11-29 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-request-expire-articles): expiry-target.
+
+       * nnbabyl.el (nnbabyl-request-expire-articles): Ditto.
+
+       * nnmbox.el (nnmbox-request-expire-articles): Ditto.
+
+2000-11-22  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * nnmh.el (nnmh-request-expire-articles): Implemented
+       expiry-target for nnmh backend.
+
+2000-11-30  Simon Josefsson  <sj@extundo.com>
+
+       * mm-decode.el (mm-security-from): New variable.
+       (mm-possibly-verify-or-decrypt): Use it rather than `from'.
+
+       * mml-smime.el (mml-smime-verify): Use `mm-security-from' rather
+       than `from'.
+
+2000-11-30  Simon Josefsson  <sj@extundo.com>
+
+       * mml-smime.el (mml-smime-verify): Verify that certificate mail
+       address match sender address.
+
+       * mm-decode.el (mm-possibly-verify-or-decrypt): Bind sender address.
+
+       * smime.el (smime-verify-region): Don't copy buffer.
+       (smime-decrypt-buffer): Use expand-file-name on keyfile.
+       (smime-pkcs7-region): New function.
+       (smime-pkcs7-certificates-region): Ditto.
+       (smime-pkcs7-email-region): Ditto.
+       (smime-buffer-as-string-region): Ditto.
+
+       * gnus-art.el (gnus-mime-security-show-details): Goto beginning of
+       buffer.
+
+2000-11-23  Jens Krinke  <j.krinke@gmx.de>
+
+       * smime.el (smime-decrypt-region): Fix keyfile argument.
+
+2000-11-29 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnmail.el (nnmail-cache-accepted-message-ids): Add doc.
+
+2000-11-28 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-shoot-gnksa-feet): New variable.
+       (message-gnksa-enable-p): New function.
+       (message-send): Use it.
+       (message-check-news-body-syntax): Ditto.
+
+2000-11-28  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * message.el (message-make-message-id): Remove the redundancy.
+
+2000-11-22 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-setup): Discourage using mc-install-*-mode.
+
+       * gnus-setup.el (gnus-use-mailcrypt): Don't hook mail-crypt.
+
+2000-11-22 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-cite.el (gnus-cite-parse): Guess citation length.
+
+2000-11-22 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el (gnus-mailing-list-insinuate): New function.
+
+2000-11-22 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el (gnus-mailing-list-archive): Find the real url.
+
+2000-11-22 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-xmas.el (gnus-xmas-article-display-xface): Use
+       insert-buffer-substring.
+
+       * message.el (message-send-mail): Use buffer-substring-no-properties.
+       (message-send-news): Ditto.
+
+2000-11-22  David Edmondson  <dme@dme.org>
+
+       * imap.el (imap-wait-for-tag): Message read info.
+
+2000-11-21 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-mailcrypt-encrypt): Ensure the part is encrypted.
+       (mml2015-mailcrypt-encrypt): Use unibyte-buffer.
+       (mml2015-gpg-encrypt): Ditto.
+
+2000-11-21 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-verify-option): Default value.
+
+       * mml-sec.el (mml-secure-part): Error message.
+
+2000-11-20 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-ml.el (gnus-mailing-list-archive): Use browse-url.
+
+2000-11-20 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-make-menu-bar): Use easy-menu-add.
+
+2000-11-20 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-describe-key): Use prompt.
+       (gnus-article-describe-key-briefly): Ditto.
+
+2000-11-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-expire): Ignore corrupted history.
+
+2000-11-20 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-describe-key): New function.
+       (gnus-article-describe-key-briefly): New function.
+
+2000-11-19 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-decrypt-option): Doc typo.
+
+       * gnus-art.el (gnus-article-read-summary-keys): lookup-key may
+       return a number.
+
+2000-11-19 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-newline-and-reformat): Typo.
+
+2000-11-19 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (article-verify-x-pgp-sig): Check whether
+       original-article-buffer exists.
+
+       * rfc2047.el (rfc2047-q-encoding-alist): Match Resent-.
+       (rfc2047-header-encoding-alist): Addresses are different from text.
+       (rfc2047-encode-message-header): Ditto.
+       (rfc2047-dissect-region): Extra parameter.
+       (rfc2047-encode-region): Ditto.
+       (rfc2047-encode-string): Ditto.
+
+2000-11-19 00:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-uu.el (mm-uu-pgp-encrypted-extract-1): New function.
+       (mm-uu-pgp-encrypted-extract): Use it.
+       (mm-uu-pgp-signed-extract-1): New function.
+       (mm-uu-pgp-signed-extract): Use it.
+
+       * gnus-art.el (gnus-mime-display-security): New function.
+       (gnus-mime-display-part): Use it.
+       (gnus-mime-security-verify-or-decrypt): New function.
+       (gnus-mime-security-press-button): New function.
+       (gnus-insert-mime-security-button): Use it.
+
+       * mm-decode.el (mm-possibly-verify-or-decrypt): Use mm-h-m-c-p.
+       (mm-find-raw-part-by-type): Ditto.
+       (mm-verify-function-alist): Add x-gnus-pgp-signature handle.
+       (mm-decrypt-function-alist): Add x-gnus-pgp-encrypted handle.
+       (mm-destroy-parts): Kill nested multibyte buffer.
+
+       * mml2015.el (mml2015-mailcrypt-verify): Use mm-h-m-c-p.
+       (mml2015-gpg-verify): Ditto.
+
+2000-11-18  Simon Josefsson  <sj@extundo.com>
+
+       * mml2015.el (mml2015-mailcrypt-clear-verify): New function.
+       (mml2015-function-alist): Use it.
+
+       * mml-sec.el (mml-sign-alist): Update names.
+       (mml-encrypt-alist): Ditto.
+       (mml-secure-part-smime-sign): Moved to mml-smime.el
+       as `mml-smime-sign-query'.
+       (mml-secure-part-smime-encrypt-by-file): Moved to mml-smime.el as
+       `mml-smime-get-file-cert'.
+       (mml-secure-part-smime-encrypt-by-dns): Moved to mml-smime.el as
+       `mml-smime-get-dns-cert'.
+       (mml-secure-part-smime-encrypt): Moved to mml-smime.el as
+       `mml-smime-encrypt-query'.
+       (mml-smime-sign-buffer): Use mml-smime-sign.
+       (mml-smime-encrypt-buffer): Use mml-smime-encrypt.
+
+       * mml-smime.el (mml-smime-sign): New function.
+       (mml-smime-encrypt):
+       (mml-smime-sign-query):
+       (mml-smime-get-file-cert):
+       (mml-smime-get-dns-cert):
+       (mml-smime-encrypt-query): Moved from mml-sec.el.
+
+2000-11-16  Simon Josefsson  <sj@extundo.com>
+
+       * mml2015.el (mml2015-gpg-clear-verify): New function.
+       (mml2015-function-alist): Add it.
+
+2000-11-17 14:21  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-setup-fill-variables): Use
+       message-cite-prefix-regexp.
+       (message-newline-and-reformat): Check the end of citation, leading
+       WSP, break in the cite prefix.
+       (message-fill-paragraph): New function.
+
+2000-11-17 13:44  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * lpath.el: Shut up.
+
+2000-11-17  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-msg.el (gnus-group-posting-charset-alist): No longer allow
+       raw 8-bit in headers in dk.* newsgroups.
+
+2000-11-17 08:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-newline-and-reformat): Match extra WSPs.
+
+2000-11-16 23:31  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-generate-mime-1): Ignore ascii.
+
+2000-11-16 Justin Sheehy  <justin@iago.org>
+
+       * gnus-sum.el (gnus-summary-make-menu-bar): Fix menu items.
+
+2000-11-16 17:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-cite-prefix-regexp): Prefix should not end
+       at space.
+
+2000-11-15 18:09  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-mode-syntax-table): Add - as a word
+       constituent as in articles.
+       (message-setup-fill-variables): Add -_. as supercite-style prefix.
+       * gnus-art.el (gnus-article-mode-syntax-table): Remove ?-.
+       * gnus-cite.el (gnus-cite-parse): Match from the beginning of line.
+
+2000-11-15 13:21  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-inews-do-gcc): Expire the article.
+
+2000-11-12  David Edmondson  <dme@dme.org>
+
+       * message.el (message-font-lock-keywords): use
+       message-cite-prefix-regexp.
+
+2000-11-15  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-group.el (gnus-group-jump-to-group-prompt): New variable by
+       Stein Arild Str\e,Ax\e(Bmme.
+       (gnus-group-jump-to-group): Use it.
+       (gnus-group-jump-to-group-prompt): Customize.
+
+2000-11-14 10:32:42  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mailcap.el (mailcap-possible-viewers): Match the entire string.
+
+2000-11-14 10:20:56  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-mailcrypt-verify): replace-match is
+       incompatible.
+       (mml2015-mailcrypt-sign): Ditto.
+
+2000-11-14 10:12:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-inews-do-gcc): Update summary data when the
+       group is open.
+
+2000-11-14 00:48:52  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-bcklg.el (gnus-backlog-enter-article): Don't enter
+       nnvirtual articles.
+       (gnus-backlog-request-article): Don't request nnvirtual articles.
+
+2000-11-13 22:08:09  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-mailcrypt-sign): Remove "-" escape.
+       * mml.el (mml-generate-mime-1): Save cont. skip multipart attributes.
+
+2000-11-13 20:43:37  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-get-part): Don't call mm-insert-part.
+       * mml.el (mml-generate-mime-1): Use charset attribute.
+       * mm-bodies.el (mm-encode-body): Add parameter charset.
+       * mm-util.el (mm-mime-charset): Show error when find 8-bit characters.
+
+2000-11-13 16:09:09  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-mailcrypt-decrypt): Handle quit.
+       (mml2015-mailcrypt-clear-decrypt): Ditto.
+       (mml2015-mailcrypt-verify): Ditto.
+       (mml2015-mailcrypt-clear-verify): Ditto.
+       (mml2015-gpg-verify): Ditto.
+
+2000-11-13 15:29:58  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * smime.el (smime-openssl-program): Test the existence of openssl.
+       * mml-smime.el: Require mm-decode.
+       (mml-smime-verify-test): New function.
+       * mm-decode.el (mm-verify-function-alist): Use it.
+
+2000-11-13 09:50:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-repair-multipart): Fix Mime-Version
+       anyway.
+
+2000-11-13  Simon Josefsson  <sj@extundo.com>
+
+       * mm-uu.el (mm-uu-pgp-signed-extract): Explain why clear
+       verification doesn't work.
+
+2000-11-12 23:36:45  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-inews-mark-gcc-as-read): New variable.
+       (gnus-inews-do-gcc): Use it.
+
+2000-11-12 21:35:04  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2231.el (rfc2231-encode-string): Insert semi-colon and
+       leading space.
+       * mm-extern.el (mm-inline-external-body): Report error when no
+       access-type.
+
+2000-11-12 19:48:30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-select-newsgroup): Change the error message.
+
+2000-11-12 11:53:18  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-button-menu): Use select-window.
+
+2000-11-12 09:47:54  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-display-part): Display multipart/related
+       as multipart/mixed.
+
+2000-11-12  David Edmondson  <dme@dme.org>
+
+       * message.el (message-cite-prefix-regexp): moved from gnus-cite.el
+       and replace `.' with `\w' to allow for different syntax tables
+       (from Vladimir Volovich).
+       * message.el (message-newline-and-reformat): use
+       `message-cite-prefix-regexp'.
+       * gnus-cite.el (gnus-supercite-regexp): use
+       `message-cite-prefix-regexp'.
+       * gnus-cite.el (gnus-cite-parse): use
+       `message-cite-prefix-regexp'.
+
+2000-11-12 08:52:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-mailcrypt-verify): Replace armors with
+       PGP SIGNATURE.  Escape leading "-"'s.
+       (mml2015-mailcrypt-sign): Replace armors with PGP MESSAGE.
+
+2000-11-11 15:55:35  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-uu.el (mm-uu-type-alist): Stricter shar regexp.
+
+2000-11-11  Simon Josefsson  <sj@extundo.com>
+
+       * mml2015.el (mml2015-gpg-verify): Set "OK" security status.
+
+       * smime.el (smime-details-buffer): New variable.
+       (smime-sign-region):
+       (smime-encrypt-region):
+       (smime-verify-region):
+       (smime-decrypt-region): Copy OpenSSL output to the buffer.
+
+       * mml-smime.el (mml-smime-verify): Support security info.
+
+2000-11-10 17:11:22  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-verify-option): Set default to nil.
+       (mm-decrypt-option): Ditto.
+       * gnus-art.el (article-verify-x-pgp-sig): New function.
+
+2000-11-10 09:01:25  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-display-alternative): Show button if no
+       preferred part.
+
+2000-11-07  Kai Gro\e,b_\e(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus-sum.el (gnus-move-split-methods): Say that
+       `gnus-split-methods' uses file names, whereas this uses group
+       names.  (Report from Nevin Kapur)
+
+2000-11-10 01:23:20  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-partial.el (mm-inline-partial): Insert MIME-Version.
+
+2000-11-09 17:02:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnheader.el (nnheader-directory-files-is-safe): New variable.
+       (nnheader-directory-articles): Use it.
+       (nnheader-article-to-file-alist): Ditto.
+
+2000-11-09 16:20:37  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-pad-base64): New function.
+       (rfc2047-decode): Use it.
+
+2000-11-09 08:53:04  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Bind the original
+       select method.
+
+2000-11-08 19:58:58  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-gpg-decrypt-1):
+       (mml2015-gpg-verify): buffer-string has no argument in Emacs.
+
+2000-11-08 16:37:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-cache.el (gnus-cache-generate-nov-databases): Reopen cache.
+
+2000-11-08 08:38:30  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * pop3.el (pop3-munge-message-separator): A message may have an
+       empty body.
+
+2000-11-07 18:02:26  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-uu.el (mm-uu-type-alist): Don't test pgp stuff.
+       (mm-uu-pgp-encrypted-extract): Clean mml2015 buffer.
+       (mm-uu-pgp-signed-extract): Use coding-system.
+
+2000-11-07 14:33:19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-display-part): Show MIME security button.
+       (gnus-insert-mime-security-button): New function.
+       * mm-decode.el (mm-possibly-verify-or-decrypt): Add security info.
+       * mml2015.el:  Add security info when verify or decrypt.
+       * mm-uu.el (mm-uu-pgp-signed-extract): Use multipart.
+       (mm-uu-pgp-encrypted-extract): Ditto.
+
+2000-11-07 08:49:36  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-display-parts): New function.
+       * gnus-art.el (gnus-mime-view-all-parts): Use it. Remove parts first.
+
+2000-02-02  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+
+       * gnus-mlspl.el: Documentation tweaks.
+
+2000-11-06 22:06:44  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-possibly-verify-or-decrypt): Fix.
+       * gnus-art.el (gnus-article-encrypt-body): Rename and support prefix
+       argument.
+
+2000-11-06 19:10:14  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2231.el (rfc2231-encode-string): Use us-ascii if charset is nil.
+
+2000-11-06 18:17:53  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-article-encrypt): New function.
+       (gnus-article-encrypt-protocol-alist): New variable.
+       (gnus-article-encrypt-protocol): New variable.
+       * mml2015.el (mml2015-self-encrypt): New function.
+       (mml2015-mailcrypt-encrypt): Set mc-pgp-always-sign.
+
+2000-11-06 16:02:52  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-uu.el (mm-uu-gpg-key-skip-to-last): New function.
+       (mm-uu-pgp-key-extract): Use application/pgp-keys, don't snarf,
+       let mailcap do it.
+       * mml2015.el: Remove snarf code.
+       * mm-decode.el: Remove snarf code.
+
+2000-11-06 14:03:10  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-insert-mml-markup): Ignore internal stuff.
+       (mml-insert-mime): Understand gnus-decoded.
+       (mime-to-mml): New parameter handles.
+       * gnus-art.el (gnus-mime-save-part-and-strip): Use it.
+       * gnus-sum.el (gnus-summary-edit-article): Add argument `3'.
+
+2000-11-06 13:51:37  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mime-security): New group.
+       (mm-verify-function-alist): Add test function.
+       (mm-decrypt-function-alist): Ditto.
+       (mm-snarf-option): Set default value as nil.
+       (mm-find-part-by-type): Recursive parameter.
+       (mm-possibly-verify-or-decrypt): Support draft-ietf-openpgp-multsig.
+       * mml2015.el: Support draft-ietf-openpgp-multsig.
+
+2000-11-06 13:01:27  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-view-part-as-charset): New function.
+       (gnus-article-view-part-as-charset): New function.
+
+2000-11-05 22:34:07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-verify-option): Default value.
+       (mm-possibly-verify-or-decrypt): Dealing with broken messages.
+
+2000-11-05 15:06:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnvirtual.el (nnvirtual-request-expire-articles): Uncompress range.
+
+2000-11-05  Simon Josefsson  <sj@extundo.com>
+
+       * mml-smime.el (mml-smime-verify): Work in original multipart
+       buffert.
+
+       * mm-decode.el (mm-handle-multipart-original-buffer): New macro.
+       (mm-handle-multipart-ctl-parameter): Ditto.
+       (mm-alist-to-plist): New function.
+       (mm-dissect-buffer): Store CTL parameters and copy original buffer
+       for multiparts.
+       (mm-destroy-parts): Destroy multipart buffert.
+       (mm-remove-part): Ditto.
+
+       * mml-smime.el (mml-smime-sign): Not used.
+       (mml-smime-encrypt): Ditto.
+
+       * mm-decode.el (mml-smime-verify): Autoload mml-smime.
+
+       Verify S/MIME signature support.
+
+       * mm-decode.el (mm-inline-media-tests): Add
+       application/{x-,}pkcs7-signature.
+       (mm-inlined-types): Ditto.
+       (mm-automatic-display): Ditto.
+       (mm-verify-function-alist): Ditto.  Add name of method.
+       (mm-decrypt-function-alist): Add name of method.
+       (mm-find-part-by-type): Add documentation.
+       (mm-possibly-verify-or-decrypt): Use new format of
+       mm-{verify,decrypt}-function-alist.  Use method names.
+
+       * mml-smime.el (mml-smime-verify): New function.
+
+2000-11-04 20:38:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-view.el (mm-inline-text): Move point to the end of inserted text.
+
+2000-11-04 19:07:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-function-alist): Clear verify and decrypt.
+       * mm-uu.el: Reorganized.  Add gnatsweb, pgp-signed, pgp-encrypted.
+       * mm-decode.el (mm-snarf-option): New variable.
+
+2000-11-04 13:08:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-util.el (mm-subst-char-in-string): New function.
+       (mm-replace-chars-in-string): Use it.
+       * message.el (message-replace-chars-in-string): Use it.
+       * nnheader.el (nnheader-replace-chars-in-string): Use it.
+       * gnus-mh.el (mh-lib-progs): Shut up.
+
+2000-11-04  ShengHuo Zhu  <zsh@cs.rochester.edu>
+
+       * base64.el, md5.el: Moved to contrib directory.
+
+2000-11-04 11:13:56  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-search-article-forward): Don't move
+       the last article when search.
+
+2000-11-04 10:34:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnheader.el (nnheader-pathname-coding-system): Default iso-8859-1.
+       * nnmail.el (nnmail-pathname-coding-system): Ditto.
+
+2000-09-29  David Edmondson  <dme@thus.net>
+
+       * message.el (message-newline-and-reformat): Typo.
+
+2000-11-04 10:11:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2231.el (rfc2231-decode-encoded-string): Test mm-multibyte-p.
+
+2000-11-04 09:53:42  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nntp.el (nntp-decode-text): Delete bogus status lines.
+
+2000-11-03  Stefan Monnier  <monnier@cs.yale.edu>
+
+       * message.el (message-font-lock-keywords): Match a final newline
+       to help font-lock's multiline support.
+
+2000-11-04 09:11:44  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnoo.el (nnoo-set): New function.
+
+2000-11-04  ShengHuo Zhu  <zsh@cs.rochester.edu>
+
+       * gpg.el, gpg-ring.el: Moved to contrib directory.
+
+2000-11-04  Simon Josefsson  <sj@extundo.com>
+
+       * nnimap.el (nnimap-split-inbox): Typo.
+
+2000-11-03 10:46:44  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-msg-mail): Move it backwards.
+
+2000-11-03  Simon Josefsson  <sj@extundo.com>
+
+       * rfc2231.el (rfc2231-parse-qp-string): New function.
+       (require): rfc2047.
+
+       * mail-parse.el (mail-header-parse-content-type):
+       (mail-header-parse-content-disposition): Support invalid QP
+       encoded strings, by using `rfc2231-parse-qp-string'.
+
+2000-11-03 08:58:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2231.el (rfc2231-parse-string): Decode when there is no number.
+       (rfc2231-decode-encoded-string): Typo "> X 1".
+       (rfc2231-encode-string): Insert the name of charset.
+       * mail-parse.el (mail-header-encode-parameter): Use RFC2231.
+
+2000-11-02 23:35:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-save-part): Return the filename.
+       * gnus-sum.el (gnus-summary-edit-article): Remove a hack.
+       * gnus-art.el (gnus-mime-save-part-and-strip): New function.
+       (gnus-mime-action-alist): Use it.
+       (gnus-mime-button-commands): Use it.
+       * mm-extern.el (mm-extern-local-file): Error when the file is gone.
+       (mm-inline-external-body): unwind-protect.
+
+2000-11-02 21:08:49  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-insert-mime-button): Show url.
+
+2000-11-02 19:51:19  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-generate-mime-1): Support external url.
+       * nnwarchive.el (nnwarchive-mail-archive-article): Use external url.
+
+2000-11-02 16:53:32  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-partial.el (mm-inline-partial): Buffer name with a leading space.
+       * mm-decode.el (mm-display-external): Ditto.
+       * mm-extern.el: New file.
+       * mm-decode.el (mm-inline-media-tests): Hook it up.
+       (mm-inlined-types): Inline message/external-body.
+
+2000-11-02  Simon Josefsson  <sj@extundo.com>
+
+       * gnus-art.el (gnus-visible-headers): Add Mail-Followup-To.
+
+       * message.el (message-get-reply-headers): Better handling when
+       Mail-Followup-To is very large.
+
+2000-11-02 13:27:56  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-uu.el (gnus-uu-post-news): Comment out the redundancy.
+       * gnus-art.el (gnus-article-edit-done):
+       * gnus-sum.el (gnus-summary-edit-article-done): Move line
+       counting code here.
+       * gnus-msg.el (gnus-setup-message): Remove a hack.
+
+2000-11-02 09:33:01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-newsgroup-variables): New variable.
+       (gnus-summary-mode): Make them local variables.
+       (gnus-set-global-variables): Globalize them.
+       (gnus-summary-exit): Kill them.
+
+2000-11-02  Hrvoje Niksic  <hniksic@arsdigita.com>
+
+       * rfc2047.el (rfc2047-encoded-word-regexp): Allow empty encoded
+       word.
+
+2000-11-01 10:07:13  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-display-part): Add to signed or encrypted.
+       gnus-article-wash-types.
+       * gnus-art.el (gnus-article-wash-status): Use them.
+
+2000-11-01 08:54:11  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-read-tag): Remove spaces and LF.
+
+2000-11-01 08:01:03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-mailcrypt-encrypt): Use from and sign parameters.
+       * mml.el (mml-generate-mime-1): Add sender and recipients attributes.
+
+2000-11-01 07:39:24  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-force-verify-and-decrypt): New function.
+
+2000-10-31 22:06:13  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-article-charset): New variable.
+       (gnus-summary-display-article): Set it.
+       * gnus-msg.el (gnus-copy-article-buffer): Use it.
+       * gnus-art.el (gnus-article-mode): Make it local variable.
+
+2000-11-01 01:12:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-create-mapping): Use nreverse.
+
+2000-10-31 23:45:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnwfm.el: New file.
+
+       * nnweb.el (nnweb-replace-in-string): New function.
+
+2000-10-31 17:32:02  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el: Wrap gpg.el.
+       * gpg.el (gpg-verify): The last argument of apply is a list.
+       (gpg-encrypt): Add passphrase as a parameter.
+
+2000-10-31 17:28:45  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gpg.el: New file.
+       * gpg-ring.el: New file.
+
+2000-10-31 11:44:29  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-show-article): Fix the summary line.
+
+2000-10-31  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus-sum.el (gnus-summary-insert-line): Work with quoted
+       double-quote characters.
+       (gnus-summary-prepare-threads): Ditto.
+
+2000-10-31 08:36:03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-art.el (gnus-mime-display-single): Forward line -1.
+       * mml.el (mml-read-tag): Don't skip the leading space.
+       * lpath.el (font-lock-set-defaults): Shut up.
+
+2000-10-31 00:04:35  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el: Fix doc. Remove bogus mml2015-setup.
+
+2000-10-30 23:37:07  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * qp.el (quoted-printable-encode-region): Replace leading - when
+       ultra safe.
+       * mml.el (mml-generate-mime-postprocess-function): Removed.
+       (mml-postprocess-alist): Removed.
+       (mml-generate-mime-1): Use ultra-safe when sign.
+       * mml2015.el (mml2015-fix-micalg): Uppercase.
+       (mml2015-verify): Insert LF.
+       (mml2015-mailcrypt-sign): Downcase; search backward.
+
+2000-10-16 11:36:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnultimate.el (nnultimate-forum-table-p): Be a bit more
+       restrictive.
+       (nnultimate-table-regexp): New variable.
+       (nnultimate-forum-table-p): Use it.
+
+2000-10-30  Ed L Cashin  <ecashin@coe.uga.edu>
+       Trivial patch.
+
+       * gnus-sum.el (gnus-summary-expire-articles): Save point.
+
+2000-10-30 08:52:50  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml-sec.el (mml-pgpmime-sign-buffer): Use mml2015-sign.
+       (mml-pgpmime-encrypt-buffer): Use mml2015-encrypt.
+
+2000-10-30 08:38:12  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el: Shut up.
+
+2000-10-30 08:17:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus.el (gnus-server-browse-hashtb): Removed.
+       * gnus-group.el (gnus-group-prepare-flat-list-dead): Use gnus-active.
+       (gnus-group-insert-group-line-info): Use simplified method.
+       * gnus-srvr.el (gnus-browse-foreign-server): Use gnus-set-active.
+
+2000-10-30 01:52:40  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-util.el (gnus-union): Renamed from gnus-agent-union, and
+       moved here.
+       * gnus-agent.el (gnus-agent-fetch-headers): Use it.
+       * gnus-group.el (gnus-group-prepare-flat): Use it.
+       * gnus-topic.el (gnus-group-prepare-topics): Use it.
+
+2000-10-30 01:23:49  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-mode): Show menu in XEmacs.
+
+2000-10-30 00:49:33  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-srvr.el (gnus-server-browse-in-group-buffer): New variable.
+       (gnus-server-read-server-in-server-buffer): New function.
+       (gnus-browse-foreign-server): Browse in group buffer.
+       * gnus-group.el (gnus-group-prepare-flat): List group not in list.
+       (gnus-group-prepare-flat-list-dead): Use gnus-group-insert-group-line.
+       * gnus-topic.el (gnus-group-prepare-topics): Ditto.
+       * gnus.el (gnus-server-browse-hashtb): New variable.
+
+2000-10-29 22:31:40  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-open-nov): Use group.
+
+2000-10-29 17:23:15  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el: Add NOV. Set version to 2.0.
+       (nnfolder-nov-is-evil): If non-nil, nnfolder acts like 1.0.
+
+2000-10-29 10:35:08  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el (mml2015-mailcrypt-sign): Use mc-sign-generic.
+
+2000-10-29 09:42:05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-srvr.el (gnus-browse-foreign-server): Show level mark.
+       (gnus-browse-unsubscribe-group): Unsubscribed is not killed.
+
+2000-10-29 08:28:58  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnfolder.el (nnfolder-read-folder): Don't goto point-min.
+
+2000-10-28 19:11:01  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-verify-function-alist): New variable.
+       (mm-verify-option): New variable.
+       (mm-decrypt-function-alist): Ditto.
+       (mm-decrypt-option): Ditto.
+       (mm-find-raw-part-by-type): New function.
+       (mm-possibly-verify-or-decrypt): New function.
+       (mm-dissect-multipart): Use it.
+       * mml2015.el (mml2015-fix-micalg): New function.
+       (mml2015-decrypt): Use new interface.
+       (mml2015-verify):  Use new interface.
+       (mml2015-setup): Make it bogus.
+
+2000-10-28 16:54:45  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-generate-mime-postprocess-function): Set to
+       mml-postprocess.
+       (autoload): Autoload mml2015 and mml-smime.
+       (mml-postprocess-alist): Use mml2015-sign and mml2015-encrypt.
+       * mml2015.el (mml2015-encrypt): New function.
+       (mml2015-sign): New function.
+       (mml2015-encrypt-function): New variable.
+       (mml2015-sign-function): New variable.
+       (mml2015-mailcrypt-encrypt): Use message-recipients.
+       (mml2015-setup): Don't set mml-generate-mime-postprocess-function.
+       * mml-smime.el (mml-smime-setup): Ditto.
+
+2000-10-28  Simon Josefsson  <sj@extundo.com>
+
+       * imap.el (imap-parse-resp-text-code): Workaround bug in Stalker
+       Communigate Pro 3.3.1 server.
+
+       * mml-sec.el (mml-smime-encrypt-buffer): Support certfiles stored
+       in buffers.
+       (mml-secure-dns-server): Removed.
+       (mml-secure-part-smime-encrypt-by-dns): Use DIG interface.  Don't
+       write certificates to files.
+
+       * smime.el (smime-dns-server): New variable.
+       (smime-mail-to-domain):
+       (smime-cert-by-dns): New functions.
+
+       * dig.el: New file.
+
+2000-10-28 10:09:41  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * message.el (message-options): New variable.
+       (message-options-set-recipient): New function.
+       (message-send): Use them.
+       * gnus-int.el (gnus-request-replace-article): Use them.
+       (gnus-request-accept-article): Ditto.
+       * mml.el (mml-preview): Use them.
+       * gnus-sum.el (gnus-summary-edit-article): Use them.
+
+       * message.el (message-options-get): New function.
+       (message-options-get): New function.
+       * rfc2047.el (rfc2047-encode-message-header): Use them.
+       * mm-bodies.el (mm-encode-body): Use them.
+
+2000-10-28  Simon Josefsson  <sj@extundo.com>
+
+       * nnimap.el (nnimap-retrieve-which-headers):
+       (nnimap-request-article-part): Quote message-id.
+
+       * smime.el (smime-CA-directory): Rename from `smime-CAs'.
+       (smime-CA-file): New variable.
+       (smime-call-openssl-region): Don't error.
+       (smime-sign-region): Return result value.
+       (smime-encrypt-region): Ditto.
+       (smime-verify-region): New function.
+       (smime-decrypt-region): Ditto.
+       (smime-verify-buffer): Ditto.
+       (smime-decrypt-buffer): Ditto.
+
+       * mml.el: Require mml-sec.
+       (mml-generate-mime-1): Support "sign" and "encrypt" MML tags.
+       (mml-mode-map): Add "sign" and "encrypt" maps.
+       (mml-menu): Add security menu.
+       (mml-preview): Use generate-new-buffer.
+
+       * mml-sec.el: New file.
+
+2000-10-28 03:43:03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mm-decode.el (mm-find-part-by-type): Move it here.
+       * mml.el (mml-postprocess): Move it here.
+       (mml-postprocess-alist): Move it here. Merge them.
+
+2000-10-28 03:38:39  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * rfc2047.el (rfc2047-encode-message-header): Make sure no
+       unencoded stuff in the header.
+
+2000-10-28 02:40:46  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-listed-groups): New variable.
+       (gnus-group-list-option): New variable.
+       (gnus-group-list-limit-map): New keymap.
+       (gnus-group-list-flush-map): New keymap.
+       (gnus-group-list-plus-map): New keymap.
+       (gnus-group-prepare-logic): New function.
+       (gnus-group-prepare-flat): Merge with
+       gnus-group-prepare-flat-predicate. Use gnus-group-listed-groups.
+       (gnus-group-prepare-flat-list-dead): Ditto.
+       (gnus-group-list-matching): Use gnus-group-prepare-function.
+       (gnus-group-list-dormant): Ditto.
+       (gnus-group-list-cached): Ditto.
+       (gnus-group-listed-groups): New function.
+       (gnus-group-list-limit): New function.
+       (gnus-group-list-flush): New function.
+       (gnus-group-list-plus): New function.
+       * gnus-topic.el (gnus-group-prepare-topics): Accept predicate.
+       (gnus-topic-prepare-topic): Ditto.
+
+2000-10-27  Paul Jarc  <prj@po.cwru.edu>
+
+       * message.el (message-insert-to, message-get-reply-headers):
+       (message-reply, message-followup): Mail-{Followup,Reply}-To.
+
+2000-10-27 19:45:58  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml2015.el: New file.
+       * smime.el: New file.
+       * mml-smime.el: New file.
+
+2000-10-27 19:42:12  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * ChangeLog: Moved to ChangeLog.1.
+
 2000-10-27  Jason Rumney  <jasonr@gnu.org>
 
        * gnus-art.el (gnus-signature-face): Use italic on any frame that
index 07bc075..5141a74 100644 (file)
@@ -1,5 +1,6 @@
 ;;; binhex.el --- elisp native binhex decode
-;; Copyright (c) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (c) 1998, 1999, 2000, 2001, 2002, 2004
+;;        Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: binhex news
@@ -25,8 +26,6 @@
 
 ;;; Code:
 
-(autoload 'executable-find "executable")
-
 (eval-when-compile (require 'cl))
 
 (eval-and-compile
@@ -243,14 +242,13 @@ If HEADER-ONLY is non-nil only decode header and return filename."
                    (setq file-name-length (char-after (point-min))
                          data-fork-start (+ (point-min)
                                             file-name-length 22))))
-             (if (and (null header)
-                      (with-current-buffer work-buffer
-                        (>= (buffer-size) data-fork-start)))
-                 (progn
-                   (binhex-verify-crc work-buffer
-                                      (point-min) data-fork-start)
-                   (setq header (binhex-header work-buffer))
-                   (if header-only (setq tmp nil counter 0))))
+             (when (and (null header)
+                        (with-current-buffer work-buffer
+                          (>= (buffer-size) data-fork-start)))
+               (binhex-verify-crc work-buffer
+                                  (point-min) data-fork-start)
+               (setq header (binhex-header work-buffer))
+               (when header-only (setq tmp nil counter 0)))
              (setq tmp (and tmp (not (eq inputpos end)))))
            (cond
             ((= counter 3)
index 55b2e59..00de92f 100644 (file)
@@ -1,6 +1,7 @@
 ;;; canlock.el --- functions for Cancel-Lock feature
 
-;; Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004
+;;        Free Software Foundation, Inc.
 
 ;; Author: Katsumi Yamaoka <yamaoka@jpl.org>
 ;; Keywords: news, cancel-lock, hmac, sha1, rfc2104
 (eval-when-compile
   (require 'cl))
 
-(autoload 'sha1-binary "sha1-el")
-(autoload 'base64-encode-string "base64")
-(autoload 'mail-fetch-field "mail-utils")
+(require 'sha1-el)
+
 (defvar mail-header-separator)
 
 (defgroup canlock nil
   "The Cancel-Lock feature."
   :group 'applications)
 
-(defcustom canlock-sha1-function 'sha1-binary
-  "Function to call to make a SHA-1 message digest."
-  :type '(radio (function-item sha1-binary)
-               (function-item canlock-sha1-with-openssl)
-               (function :tag "Other"))
-  :group 'canlock)
-
-(defcustom canlock-sha1-function-for-verify canlock-sha1-function
-  "Function to call to make a SHA-1 message digest for verifying."
-  :type '(radio (function-item sha1-binary)
-               (function-item canlock-sha1-with-openssl)
-               (function :tag "Other"))
-  :group 'canlock)
-
-(defcustom canlock-openssl-program "openssl"
-  "Name of OpenSSL program."
-  :type 'string
-  :group 'canlock)
-
-(defcustom canlock-openssl-args '("sha1")
-  "Arguments passed to the OpenSSL program."
-  :type 'sexp
-  :group 'canlock)
-
-(defcustom canlock-ignore-errors nil
-  "If non-nil, ignore any error signals."
-  :type 'boolean
-  :group 'canlock)
-
 (defcustom canlock-password nil
   "Password to use when signing a Cancel-Lock or a Cancel-Key header."
   :type '(radio (const :format "Not specified " nil)
@@ -99,25 +70,6 @@ buffer does not look like a news message."
   :type 'boolean
   :group 'canlock)
 
-(defun canlock-sha1-with-openssl (message)
-  "Make a SHA-1 digest of MESSAGE using OpenSSL."
-  (let (default-enable-multibyte-characters)
-    (with-temp-buffer
-      (let ((coding-system-for-read 'binary)
-           (coding-system-for-write 'binary)
-           selective-display
-           (case-fold-search t))
-       (insert message)
-       (apply 'call-process-region (point-min) (point-max)
-              canlock-openssl-program t t nil canlock-openssl-args)
-       (goto-char (point-min))
-       (insert "\"")
-       (while (re-search-forward "\\([0-9a-f][0-9a-f]\\)" nil t)
-         (replace-match "\\\\x\\1"))
-       (insert "\"")
-       (goto-char (point-min))
-       (read (current-buffer))))))
-
 (eval-when-compile
   (defmacro canlock-string-as-unibyte (string)
     "Return a unibyte string with the same individual bytes as STRING."
@@ -127,7 +79,8 @@ buffer does not look like a news message."
 
 (defun canlock-sha1 (message)
   "Make a SHA-1 digest of MESSAGE as a unibyte string of length 20 bytes."
-  (canlock-string-as-unibyte (funcall canlock-sha1-function message)))
+  (let (sha1-maximum-internal-length)
+    (sha1 message nil nil 'binary)))
 
 (defun canlock-make-cancel-key (message-id password)
   "Make a Cancel-Key header."
@@ -206,9 +159,8 @@ message."
          (unless id-for-key
            (setq id-for-key (canlock-fetch-id-for-key)))
          (if (and (setq control (mail-fetch-field "Control"))
-                  (string-match
-                   "^cancel[\t ]+\\(<[^\t\n @<>]+@[^\t\n @<>]+>\\)"
-                   control))
+                  (string-match "^cancel[\t ]+<[^\t\n @<>]+@[^\t\n @<>]+>"
+                                control))
              (setq id-for-lock nil)
            (unless id-for-lock
              (setq id-for-lock (mail-fetch-field "Message-ID"))))
@@ -242,14 +194,10 @@ message."
 (defun canlock-verify (&optional buffer)
   "Verify Cancel-Lock or Cancel-Key in BUFFER.
 If BUFFER is nil, the current buffer is assumed.  Signal an error if
-it fails.  You can modify the behavior of this function to return non-
-nil instead of to signal an error by setting the option
-`canlock-ignore-errors' to non-nil."
+it fails."
   (interactive)
-  (let ((canlock-sha1-function (or canlock-sha1-function-for-verify
-                                  canlock-sha1-function))
-       keys locks errmsg id-for-key id-for-lock password
-       key-for-key key-for-lock match)
+  (let (keys locks errmsg id-for-key id-for-lock password
+            key-for-key key-for-lock match)
     (save-excursion
       (when buffer
        (set-buffer buffer))
@@ -265,21 +213,12 @@ nil instead of to signal an error by setting the option
                id-for-lock (mail-fetch-field "Message-ID"))
          (or id-for-key id-for-lock
              (setq errmsg "There are no Message-ID(s)")))))
-
     (if errmsg
-       (if canlock-ignore-errors
-           errmsg
-         (error "%s" errmsg))
-
+       (error "%s" errmsg)
       (setq password (or canlock-password-for-verify
                         (read-passwd "Password for Canlock: ")))
       (if (or (not (stringp password)) (zerop (length password)))
-         (progn
-           (setq errmsg "Password for Canlock is bad")
-           (if canlock-ignore-errors
-               errmsg
-             (error "%s" errmsg)))
-
+         (error "Password for Canlock is bad")
        (when keys
          (when id-for-key
            (setq key-for-key (canlock-make-cancel-key id-for-key password))
@@ -287,7 +226,6 @@ nil instead of to signal an error by setting the option
              (setq match (string-equal key-for-key (pop keys)))))
          (setq keys (if match "good" "bad")))
        (setq match nil)
-
        (when locks
          (when id-for-lock
            (setq key-for-lock
@@ -297,7 +235,6 @@ nil instead of to signal an error by setting the option
            (when (and locks (not match))
              (setq match (string-equal key-for-lock (pop locks)))))
          (setq locks (if match "good" "bad")))
-
        (prog1
            (when (member "bad" (list keys locks))
              "bad")
index 185f949..3a6f101 100644 (file)
@@ -1,7 +1,8 @@
 ;;; compface.el --- functions for converting X-Face headers
-;; Copyright (C) 2002 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;;     TAKAI Kousuke <tak@kmc.gr.jp>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
 
 ;;; Code:
 
-;;;###
+(defgroup compface nil
+  "X-Face image conversion."
+  :group 'extensions)
+
+(defcustom uncompface-use-external (and (not noninteractive)
+                                       (executable-find "uncompface")
+                                       (executable-find "icontopbm")
+                                       'undecided)
+  "*Specify which of the internal or the external decoder should be used.
+nil means to use the internal ELisp-based uncompface program.  t means
+to use the external decoder.  In the later case, you need to have the
+external `uncompface' and `icontopbm' programs installed.  The default
+value is nil if those external programs aren't available, otherwise
+`undecided' which means to determine it by checking whether the host
+machine is slow.  See also `uncompface-use-external-threshold'.  You
+can skip that check by setting this value as nil or t explicitly."
+  :type '(choice (const :tag "Use the internal decoder" nil)
+                (const :tag "Use the external decoder" t)
+                (const :tag "Autodetection" undecided))
+  :group 'compface)
+
+(defcustom uncompface-use-external-threshold 0.1
+  "*Number of seconds to check whether the host machine is slow.
+If the host takes time larger than this value for decoding an X-Face
+using the internal ELisp-based uncompface program, it will be changed
+to using the external `uncompface' and `icontopbm' programs if they
+are available.  Note that the measurement may never be exact."
+  :type 'number
+  :group 'compface)
+
+(eval-when-compile
+  (defmacro uncompface-float-time (&optional specified-time)
+    (if (fboundp 'float-time)
+       `(float-time ,specified-time)
+      `(let ((time (or ,specified-time (current-time))))
+        (+ (* (car time) 65536.0)
+           (cadr time)
+           (cond ((consp (setq time (cddr time)))
+                  (/ (car time) 1000000.0))
+                 (time
+                  (/ time 1000000.0))
+                 (t
+                  0)))))))
+
 (defun uncompface (face)
   "Convert FACE to pbm.
-Requires the external programs `uncompface', and `icontopbm'.  On a
-GNU/Linux system these might be in packages with names like `compface'
-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))))
+If `uncompface-use-external' is t, it requires the external programs
+`uncompface', and `icontopbm'.  On a GNU/Linux system these might be
+in packages with names like `compface' or `faces-xface' and `netpbm'
+or `libgr-progs', for instance."
+  (cond ((eq uncompface-use-external nil)
+        (uncompface-internal face))
+       ((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))))
+       (t
+        (let* ((gc-cons-threshold (eval '(lsh -1 -1)))
+               (start (current-time)))
+          (prog1
+              (uncompface-internal face)
+            (setq uncompface-use-external
+                  (and (> (- (uncompface-float-time (current-time))
+                             (uncompface-float-time start))
+                          uncompface-use-external-threshold)
+                       (executable-find "uncompface")
+                       (executable-find "icontopbm")
+                       t)))))))
+
+;; The following section is a bug-for-bug compatible version of
+;; `uncompface' program entirely implemented in Emacs-Lisp.
+
+(eval-when-compile
+  ;; The size of 48x48 is actually hard-coded into the code itself,
+  ;; so you cannot simply change those values.  So we hard-code
+  ;; them into the compiled code.
+  (defconst uncompface-width 48
+    "Width of X-Face bitmap image.")
+  (defconst uncompface-height 48
+    "Height of X-Face bitmap image.")
+
+  ;; Again, this is also hard-coded into the compiled code.
+  (defconst uncompface-guesses
+    (mapcar (lambda (x)
+             (mapcar (lambda (x)
+                       (let ((vector (make-vector (length x) nil))
+                             (i 0))
+                         (while x
+                           (or (zerop (car x))
+                               (aset vector i t))
+                           (setq x (cdr x)
+                                 i (1+ i)))
+                         vector))
+                     x))
+           '((;; g_00
+              (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1
+               0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 1
+               0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1
+               0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+               0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1
+               0 1 0 0 0 1 0 1 0 0 1 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
+               0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1
+               1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1
+               1 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1
+               0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 1 1 0 1 1 0 0 0 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 0 0 1 1 1 1 0 1 0 1 0 1 0 0
+               0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1
+               0 1 0 1 0 1 1 1 0 1 0 0 0 1 1 1
+               1 1 0 1 0 1 1 1 0 0 1 1 1 1 0 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 0 1 1 1 1 1 0 0 0 1 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
+               0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1
+               0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1
+               1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 0 1 1 1 1 1 0 0 0 1 1 1 0 1
+               0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1
+               0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1
+               0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1
+               0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1
+               1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1
+               1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1
+               1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1
+               0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1
+               0 1 0 1 0 1 1 0 0 0 1 0 0 1 0 1
+               0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1
+               1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
+               0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1
+               0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0
+               0 0 0 0 1 0 0 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1
+               0 0 0 1 1 0 0 0 1 1 0 1 0 1 1 1
+               1 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
+               0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 1
+               0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1
+               0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
+               0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1
+               1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1
+               0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 1
+               0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1
+               0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               1 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1
+               0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1
+               0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+               0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0
+               0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1
+               0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               1 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1
+               0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0
+               0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
+               1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1
+               1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1
+               1 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1
+               0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1
+               1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1
+               0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
+               0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 0 0 1 1 0 1 0 0 0 0 1 1 1 1
+               0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1
+               0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0
+               0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1
+               0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0
+               0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
+               0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1
+               0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+               0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+               1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0
+               0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1
+               0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 1
+               1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+               0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+               0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0
+               0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+               1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 1 1 1 1 0 0 0 1 0 1 0 1
+               1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
+               0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
+               0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1
+               1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1
+               0 1 0 0 1 1 1 1 0 0 1 1 1 1 1 0
+               0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1
+               1 0 0 1 0 1 0 1 0 1 0 0 1 1 1 1
+               0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1
+               0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1
+               1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1
+               0 0 1 0 0 1 0 1 0 0 0 0 1 1 1 0
+               0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 1
+               0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1
+               1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+               0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0
+               0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1
+               0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
+               0 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1
+               0 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1
+               1 1 0 1 1 0 0 0 0 1 0 1 1 1 1 1
+               0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1
+               1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1
+               0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1
+               1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1
+               0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
+               0 1 0 0 0 1 1 0 0 1 0 1 0 1 1 1
+               0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1
+               0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0
+               0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1
+               0 1 0 0 0 1 1 1 0 1 1 0 1 1 0 0
+               0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 1 0 1 1 0 1 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+               0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0
+               1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1
+               0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1
+               0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0
+               0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 1
+               0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1
+               1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 0
+               1 1 0 0 1 1 1 1 0 0 0 0 0 1 0 1
+               1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1
+               1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 1
+               0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
+               1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0
+               1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0
+               1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1
+               0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 0 1 1 1 0 0 1 1 0
+               1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 1 1 1 0 1 1 0 0
+               1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1
+               1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0
+               1 0 0 1 1 1 0 1 0 0 0 0 1 1 1 1
+               0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
+              ;; g_10
+              (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+               1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1
+               1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+               0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1
+               0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1
+               0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+               0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+               0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 1
+               0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1
+               0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 1
+               0 0 0 1 0 1 1 1 0 0 1 1 0 0 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+               0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0
+               0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0
+               0 0 0 1 0 0 0 1 0 1 0 1 0 1 1 1
+               0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 1
+               0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1
+               0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 1
+               1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 1 1 1 0 1 1 0 1 1 1 1
+               0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0
+               0 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0
+               1 1 1 1 1 0 1 0 1 1 1 0 1 0 0 0
+               0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1
+               0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1
+               0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
+              ;; g_20
+              (0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+               0 1 0 0 0 0 1 1 0 0 1 0 1 1 1 0
+               1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1)
+              ;; g_40
+              (0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0
+               1 1 1 0 0 1 0 0 0 0 0 0 1 1 0 1
+               0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
+               0 1 0 0 0 1 0 0 0 1 0 0 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0
+               0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+               1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 1
+               0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1
+               1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1
+               0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+               0 0 0 1 1 1 0 0 1 1 0 1 1 1 0 1
+               0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1
+               0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+               0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
+               0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 1
+               0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1
+               1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1
+               0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+               0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1
+               0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1
+               0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
+               0 1 0 0 0 0 0 1 0 1 0 1 0 1 1 1
+               0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1
+               0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1
+               0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1
+               0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+               0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1
+               0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
+               0 0 0 0 0 1 0 1 0 1 1 1 1 1 0 1
+               0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1
+               0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0
+               0 0 0 0 1 1 0 1 1 1 1 1 1 1 0 1
+               0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 1
+               0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1
+               0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1
+               0 0 0 0 1 1 0 1 0 1 1 1 1 1 1 1
+               0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
+               0 1 0 0 1 1 0 1 0 1 1 1 1 1 0 1
+               0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1))
+             (;; g_01
+              (0 0 1 1 0 1 1 1 0 1 1 1 0 0 1 1
+               0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1
+               0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1
+               1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 1
+               0 1 1 1 0 0 0 0 0 0 1 1 0 0 1 1
+               1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 1
+               0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+               1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
+              ;; g_11
+              (0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1
+               0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1)
+              ;; g_21
+              (0 0 0 1 0 1 1 1)
+              ;; g_41
+              (0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+               0 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1
+               0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1
+               0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1))
+             (;; g_02
+              (0 1 0 1)
+              ;; g_12
+              (0 1)
+              ;; g_22
+              (0)
+              ;; g_42
+              (0 0 0 1))))
+    "Static prediction table for X-Face image compression algorithm.")
+
+  ;; Macros for inlining critical values. 
+  (defmacro uncompface-width () (list 'quote uncompface-width))
+  (defmacro uncompface-height () (list 'quote uncompface-height))
+  (defmacro uncompface-guesses () (list 'quote uncompface-guesses))
+
+  (defmacro uncompface-loop (&rest body)
+    "Eval BODY and repeat if last expression of BODY yields non-nil."
+    (list 'while (cons 'progn body))))
+
+;; (defun uncompface-print-bignum (bignum &optional prefix)
+;;   (princ (format (concat prefix "<%s>\n")
+;;              (mapconcat (lambda (x) (format "%02x" x))
+;;                         (reverse bignum) " "))))
+
+;; Shut up the byte-compiler.
+;; These variables are once bound in `uncompface' and all subfunctions
+;; accesses them directly rather than creating their own bindings.
+(eval-when-compile
+  (defvar bignum)
+  (defvar face))
+
+;; Big-number facilities.
+;; These functions were used to be implemented with `lsh' and `logand',
+;; but rewritten to use `/' and `%'.  The last two are mapped into
+;; byte-code directly, but the formers are normal functions even in
+;; compiled code which involve expensive `funcall' operations.
+(eval-when-compile
+  (defsubst uncompface-big-mul-add (multiplier adder)
+    "Multiply BIGNUM by MULTIPLIER and add ADDER and put result in `bignum'."
+    (setq bignum (if (= multiplier 0)
+                    (cons 0 bignum)
+                  (prog1 bignum
+                    (while (progn
+                             (setcar bignum (% (setq adder (+ (* (car bignum)
+                                                                 multiplier)
+                                                              adder))
+                                               256))
+                             (setq adder (/ adder 256))
+                             (cdr bignum))
+                      (setq bignum (cdr bignum)))
+                    (or (= adder 0)
+                        (setcdr bignum (list adder))))))))
+
+;; This trick is for XEmacs 21.4 which doesn't allow inlining a function
+;; using `defsubst' into another function also defined with `defsubst'.
+(eval-when-compile
+  (when (featurep 'xemacs)
+    (defvar uncompface-big-mul-add (symbol-function 'uncompface-big-mul-add))
+    (defmacro uncompface-big-mul-add (multiplier adder)
+      `(,uncompface-big-mul-add ,multiplier ,adder))))
+
+;; Separate `eval-when-compile' for the byte compiler
+;; to properly define `uncompface-big-mul-add' before `uncompface-big-pop'.
+(eval-when-compile
+  (defsubst uncompface-big-pop (prob)
+    (let ((n (car bignum)) (i 0))
+      (if (cdr bignum)
+         (setq bignum (cdr bignum))
+       (setcar bignum 0))
+      (while (or (< n (cdr (car prob)))
+                (>= n (+ (cdr (car prob)) (car (car prob)))))
+       (setq prob (cdr prob)
+             i (1+ i)))
+      (uncompface-big-mul-add (car (car prob)) (- n (cdr (car prob))))
+      i)))
+
+;; This function cannot be inlined due to recursive calls.
+(defun uncompface-pop-grays (offset size)
+  (if (<= size 3)
+      (let ((bits (uncompface-big-pop
+                  ;; This is freqs[16] in compface_private.h.
+                  '(( 0 .   0) (38 .   0) (38 .  38) (13 . 152)
+                    (38 .  76) (13 . 165) (13 . 178) ( 6 . 230)
+                    (38 . 114) (13 . 191) (13 . 204) ( 6 . 236)
+                    (13 . 217) ( 6 . 242) ( 5 . 248) ( 3 . 253)))))
+;;     (if (/= (logand bits 1) 0)
+;;         (aset face offset t))
+;;     (if (/= (logand bits 2) 0)
+;;         (aset face (1+ offset) t))
+;;     (if (/= (logand bits 4) 0)
+;;         (aset face (+ offset (uncompface-width)) t))
+;;     (if (/= (logand bits 8) 0)
+;;         (aset face (+ offset (uncompface-width) 1) t))
+       (when (>= bits 8)
+         (aset face (+ offset (uncompface-width) 1) t)
+         (setq bits (- bits 8)))
+       (when (>= bits 4)
+         (aset face (+ offset (uncompface-width)) t)
+         (setq bits (- bits 4)))
+       (or (eq (if (< bits 2)
+                   bits
+                 (aset face (1+ offset) t)
+                 (- bits 2))
+               0)
+           (aset face offset t))
+       )
+    (setq size (/ size 2))
+    (uncompface-pop-grays offset size)
+    (uncompface-pop-grays (+ offset size) size)
+    (uncompface-pop-grays (+ offset (* (uncompface-width) size)) size)
+    (uncompface-pop-grays (+ offset (* (uncompface-width) size) size) size)))
+
+;; Again, this function call itself recursively.
+(defun uncompface-uncompress (offset size level)
+  ;; This used to be (funcall (aref [(lambda ...) ...] (u-big-pop ...)))
+  ;; but this was slow due to function call.
+  (let ((i (uncompface-big-pop (car level))))
+    (cond ((eq i 0)                    ; black
+          (uncompface-pop-grays offset size))
+         ((eq i 1)                     ; gray
+          (setq size (/ size 2)
+                level (cdr level))
+          (uncompface-uncompress offset size level)
+          (uncompface-uncompress (+ offset size) size level)
+          (uncompface-uncompress (+ offset (* size (uncompface-width)))
+                                 size level)
+          (uncompface-uncompress (+ offset (* size (uncompface-width)) size)
+                                 size level))
+         ;; ((eq i 2) nil)
+         ;; (t (error "Cannot happen"))
+         )))
+
+(eval-when-compile
+  (defmacro uncompface-shift-in (k dy dx)
+    `(+ k k (if (aref face (+ i (* ,dy (uncompface-width)) ,dx)) 1 0))))
+
+(defun uncompface-internal (string &optional raw)
+  "Decode X-Face data STRING and return an image in the pbm format.
+If the optional RAW is non-nil, return a raw bitmap as a vector."
+  (let (;; `bignum' and `face' are semi-global variables.
+       ;; Do not use '(0) below, because BIGNUM is modified in-place.
+       (bignum (list 0))
+       (face (make-vector (* (uncompface-width) (uncompface-height)) nil))
+       ;;(uncompface-big-shift -16)
+       ;;(uncompface-big-mask 65535)
+       (y 0) x)
+    (mapc (lambda (c)
+           (and (>= c ?!) (<= c ?~)
+                (uncompface-big-mul-add (1+ (- ?~ ?!)) (- c ?!))))
+         string)
+    ;;(uncompface-print-bignum bignum)
+    ;;(setq y 0)
+    (uncompface-loop
+      (setq x 0)
+      (uncompface-loop
+       (uncompface-uncompress (+ (* (uncompface-width) y) x) 16
+                              ;; This is levels[4][3] in compface_private.h.
+                              '(;; Top of tree almost always grey
+                                ((  1 . 255) (251 .   0) (  4 . 251))
+                                ((  1 . 255) (200 .   0) ( 55 . 200))
+                                (( 33 . 223) (159 .   0) ( 64 . 159))
+                                ;; Grey disallowed at bottom
+                                ((131 .   0) (  0 .   0) (125 . 131))))
+       (< (setq x (+ x 16)) (uncompface-width)))
+      (< (setq y (+ y 16)) (uncompface-height)))
+    (setq y 0)
+    (let ((i 0) guesses k)
+      (uncompface-loop
+       (setq guesses (cond ((= y 1) (nth 2 (uncompface-guesses)))
+                           ((= y 2) (nth 1 (uncompface-guesses)))
+                           (t       (nth 0 (uncompface-guesses))))
+             x 0)
+       (uncompface-loop
+         (setq k 0)
+         (when (>= x 1)
+           (when (>= x 2)
+             (when (>= x 3)
+               (when (>= y 1)
+                 (when (>= y 2)
+                   (when (>= y 3)
+                     (setq k (uncompface-shift-in k -2 -2)))
+                   (setq k (uncompface-shift-in k -1 -2)))
+                 (setq k (uncompface-shift-in k 0 -2))))
+             (when (>= y 1)
+               (when (>= y 2)
+                 (when (>= y 3)
+                   (setq k (uncompface-shift-in k -2 -1)))
+                 (setq k (uncompface-shift-in k -1 -1)))
+               (setq k (uncompface-shift-in k 0 -1))))
+           (when (>= y 2)
+             (when (>= y 3)
+               (setq k (uncompface-shift-in k -2 0)))
+             (setq k (uncompface-shift-in k -1 0)))
+           (when (>= y 2)
+             (when (>= y 3)
+               (setq k (uncompface-shift-in k -2 1)))
+             (setq k (uncompface-shift-in k -1 1)))
+           (when (<= x (- (uncompface-width) 2))
+             (when (>= y 2)
+               (when (>= y 3)
+                 (setq k (uncompface-shift-in k -2 2)))
+               (setq k (uncompface-shift-in k -1 2)))))
+         (if (aref (car (cond ((= x 1)
+                               (cdr (cdr guesses)))
+                              ((= x 2)
+                               (cdr guesses))
+                              ((= x (1- (uncompface-width)))
+                               (cdr (cdr (cdr guesses))))
+                              (t
+                               guesses))) k)
+             (aset face i (not (aref face i))))
+         (setq i (1+ i))
+         (< (setq x (1+ x)) (uncompface-width)))
+       (< (setq y (1+ y)) (uncompface-height))))
+    (if raw
+       face
+      (concat (eval-when-compile
+               (format "P1\n%d %d\n" uncompface-width uncompface-height))
+             (mapconcat (lambda (bit) (if bit "1" "0")) face " ")
+             "\n"))))
 
 (provide 'compface)
 
+;; Local variables:
+;; eval: (put 'uncompface-loop 'lisp-indent-hook 0)
+;; End:
+
 ;;; compface.el ends here
index 383841e..989a438 100644 (file)
@@ -307,71 +307,66 @@ You can control what lines will be unwrapped by frobbing
 indicating the minimum and maximum length of an unwrapped citation line.  If
 NODISPLAY is non-nil, don't redisplay the article buffer."
   (interactive "P")
-  (save-excursion
-    (let ((case-fold-search nil)
-         (inhibit-read-only t)
-         (cite-marks gnus-outlook-deuglify-cite-marks)
-         (no-wrap gnus-outlook-deuglify-no-wrap-chars)
-         (stop-chars gnus-outlook-deuglify-unwrap-stop-chars))
-      (gnus-with-article-buffer
-       (article-goto-body)
-       (while (re-search-forward
-               (concat
-                "^\\([ \t" cite-marks "]*\\)"
-                "\\([" cite-marks "].*[^\n " stop-chars "]\\)[ \t]?\n"
-                "\\1\\([^\n " cite-marks no-wrap "]+.*\\)$")
+  (let ((case-fold-search nil)
+       (inhibit-read-only t)
+       (cite-marks gnus-outlook-deuglify-cite-marks)
+       (no-wrap gnus-outlook-deuglify-no-wrap-chars)
+       (stop-chars gnus-outlook-deuglify-unwrap-stop-chars))
+    (gnus-with-article-buffer
+      (article-goto-body)
+      (while (re-search-forward
+             (concat
+              "^\\([ \t" cite-marks "]*\\)"
+              "\\([" cite-marks "].*[^\n " stop-chars "]\\)[ \t]?\n"
+              "\\1\\([^\n " cite-marks no-wrap "]+.*\\)$")
               nil t)
-         (let ((len12 (- (match-end 2) (match-beginning 1)))
+       (let ((len12 (- (match-end 2) (match-beginning 1)))
              (len3 (- (match-end 3) (match-beginning 3))))
-           (if (and (> len12 gnus-outlook-deuglify-unwrap-min)
+         (when (and (> len12 gnus-outlook-deuglify-unwrap-min)
                     (< (+ len12 len3) gnus-outlook-deuglify-unwrap-max))
-               (progn
-                 (replace-match "\\1\\2 \\3")
-                 (goto-char (match-beginning 0)))))))))
+           (replace-match "\\1\\2 \\3")
+           (goto-char (match-beginning 0)))))))
   (unless nodisplay (gnus-outlook-display-article-buffer)))
 
 (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."
-  (save-excursion
-    (let ((inhibit-read-only t)
-         (cite-marks gnus-outlook-deuglify-cite-marks))
-      (gnus-with-article-buffer
-       (article-goto-body)
-       ;; article does not start with attribution
-       (unless (= (point) attr-start)
-         (gnus-kill-all-overlays)
-         (let ((cur (point))
-               ;; before signature or end of buffer
-               (to (if (gnus-article-search-signature)
-                       (point)
-                     (point-max))))
-           ;; handle the case where the full quote is below the
-           ;; signature
-           (if (< to attr-start)
-               (setq to (point-max)))
-           (transpose-regions cur attr-start attr-start to)))))))
+  (let ((inhibit-read-only t)
+       (cite-marks gnus-outlook-deuglify-cite-marks))
+    (gnus-with-article-buffer
+      (article-goto-body)
+      ;; article does not start with attribution
+      (unless (= (point) attr-start)
+       (gnus-kill-all-overlays)
+       (let ((cur (point))
+             ;; before signature or end of buffer
+             (to (if (gnus-article-search-signature)
+                     (point)
+                   (point-max))))
+         ;; handle the case where the full quote is below the
+         ;; signature
+         (if (< to attr-start)
+             (setq to (point-max)))
+         (transpose-regions cur attr-start attr-start to))))))
 
 ;; John Doe <john.doe@some.domain> wrote in message
 ;; news:a87usw8$dklsssa$2@some.news.server...
 
 (defun gnus-outlook-repair-attribution-outlook ()
   "Repair a broken attribution line (Outlook)."
-  (save-excursion
-    (let ((case-fold-search nil)
-         (inhibit-read-only t)
-         (cite-marks gnus-outlook-deuglify-cite-marks))
-      (gnus-with-article-buffer
-       (article-goto-body)
-       (if (re-search-forward
+  (let ((case-fold-search nil)
+       (inhibit-read-only t)
+       (cite-marks gnus-outlook-deuglify-cite-marks))
+    (gnus-with-article-buffer
+      (article-goto-body)
+      (when (re-search-forward
             (concat "^\\([^" cite-marks "].+\\)"
                     "\\(" gnus-outlook-deuglify-attrib-verb-regexp "\\)"
                     "\\(.*\n?[^\n" cite-marks "].*\\)?"
                     "\\(" gnus-outlook-deuglify-attrib-end-regexp "\\)$")
             nil t)
-           (progn
-             (gnus-kill-all-overlays)
-             (replace-match "\\1\\2\\4")
-             (match-beginning 0)))))))
+       (gnus-kill-all-overlays)
+       (replace-match "\\1\\2\\4")
+       (match-beginning 0)))))
 
 
 ;; ----- Original Message -----
@@ -382,42 +377,38 @@ NODISPLAY is non-nil, don't redisplay the article buffer."
 
 (defun gnus-outlook-repair-attribution-block ()
   "Repair a big broken attribution block."
-  (save-excursion
-    (let ((case-fold-search nil)
-         (inhibit-read-only t)
-         (cite-marks gnus-outlook-deuglify-cite-marks))
-      (gnus-with-article-buffer
-       (article-goto-body)
-       (if (re-search-forward
-            (concat "^[" cite-marks " \t]*--* ?[^-]+ [^-]+ ?--*\\s *\n"
+  (let ((case-fold-search nil)
+       (inhibit-read-only t)
+       (cite-marks gnus-outlook-deuglify-cite-marks))
+    (gnus-with-article-buffer
+      (article-goto-body)
+      (when (re-search-forward
+            (concat "^[" cite-marks " \t]*--* ?[^-]+ [^-]+ ?--*\\s *\n"
                     "[^\n:]+:[ \t]*\\([^\n]+\\)\n"
                     "\\([^\n:]+:[ \t]*[^\n]+\n\\)+")
             nil t)
-           (progn
-             (gnus-kill-all-overlays)
-             (replace-match "\\1 wrote:\n")
-             (match-beginning 0)))))))
+       (gnus-kill-all-overlays)
+       (replace-match "\\1 wrote:\n")
+       (match-beginning 0)))))
 
 ;; On Wed, 16 Jan 2002 23:23:30 +0100, John Doe <john.doe@some.domain> wrote:
 
 (defun gnus-outlook-repair-attribution-other ()
   "Repair a broken attribution line (other user agents than Outlook)."
-  (save-excursion
-    (let ((case-fold-search nil)
-         (inhibit-read-only t)
-         (cite-marks gnus-outlook-deuglify-cite-marks))
-      (gnus-with-article-buffer
-       (article-goto-body)
-       (if (re-search-forward
+  (let ((case-fold-search nil)
+       (inhibit-read-only t)
+       (cite-marks gnus-outlook-deuglify-cite-marks))
+    (gnus-with-article-buffer
+      (article-goto-body)
+      (when (re-search-forward
             (concat "^\\("gnus-outlook-deuglify-attrib-cut-regexp"\\)?"
                     "\\([^" cite-marks "].+\\)\n\\([^\n" cite-marks "].*\\)?"
                     "\\(" gnus-outlook-deuglify-attrib-verb-regexp "\\).*"
                     "\\(" gnus-outlook-deuglify-attrib-end-regexp "\\)$")
             nil t)
-           (progn
-             (gnus-kill-all-overlays)
-             (replace-match "\\4 \\5\\6\\7")
-             (match-beginning 0)))))))
+       (gnus-kill-all-overlays)
+       (replace-match "\\4 \\5\\6\\7")
+       (match-beginning 0)))))
 
 ;;;###autoload
 (defun gnus-article-outlook-repair-attribution (&optional nodisplay)
index 4d4b30b..fb64339 100644 (file)
@@ -32,6 +32,7 @@
 (require 'cl)
 
 (defvar srcdir (or (getenv "srcdir") "."))
+(defvar loaddir (and load-file-name (file-name-directory load-file-name)))
 
 (defun my-getenv (str)
   (let ((val (getenv str)))
 (if (my-getenv "lispdir")
     (push (my-getenv "lispdir") load-path))
 
-(push (or (my-getenv "URLDIR") (expand-file-name "../../url/lisp/" srcdir))
+(push (or (my-getenv "URLDIR") (expand-file-name "../../url/lisp/" loaddir))
       load-path)
 
-(push (or (my-getenv "W3DIR") (expand-file-name "../../w3/lisp/" srcdir))
+(push (or (my-getenv "W3DIR") (expand-file-name "../../w3/lisp/" loaddir))
       load-path)
 
 ;(push "/usr/share/emacs/site-lisp" load-path)
 
-;; Define compiler macros for the functions provided by cl in old Emacsen.
-(unless (featurep 'xemacs)
-  (define-compiler-macro butlast (&whole form x &optional n)
-    (if (>= emacs-major-version 21)
-       form
-      (if n
-         `(let ((x ,x)
-                (n ,n))
-            (if (and n (<= n 0))
-                x
-              (let ((m (length x)))
-                (or n (setq n 1))
-                (and (< n m)
-                     (progn
-                       (if (> n 0)
-                           (progn
-                             (setq x (copy-sequence x))
-                             (setcdr (nthcdr (- (1- m) n) x) nil)))
-                       x)))))
-       `(let* ((x ,x)
-               (m (length x)))
-          (and (< 1 m)
-               (progn
-                 (setq x (copy-sequence x))
-                 (setcdr (nthcdr (- m 2) x) nil)
-                 x))))))
-
-  (define-compiler-macro remove (&whole form item seq)
-    (if (>= emacs-major-version 21)
-       form
-      `(delete ,item (copy-sequence ,seq))))
-
-  (define-compiler-macro mapc (&whole form fn seq &rest rest)
-    (if (>= emacs-major-version 21)
-       form
-      (if rest
-         `(let* ((fn ,fn)
-                 (seq ,seq)
-                 (args (list seq ,@rest))
-                 (m (apply (function min) (mapcar (function length) args)))
-                 (n 0))
-            (while (< n m)
-              (apply fn (mapcar (function (lambda (arg) (nth n arg))) args))
-              (setq n (1+ n)))
-            seq)
-       `(let ((seq ,seq))
-          (mapcar ,fn seq)
-          seq)))))
-
 ;; If we are building w3 in a different directory than the source
 ;; directory, we must read *.el from source directory and write *.elc
 ;; into the building directory.  For that, we define this function
@@ -162,8 +114,53 @@ than subr.el."
              (put 'car 'side-effect-free tmp)))
        ad-do-it))))
 
+(when (and (not (featurep 'xemacs))
+          (byte-optimize-form '(and (> 0 1) foo) 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."
+    (if (and for-effect (memq (car-safe form) '(and or)))
+       (let ((fn (car form))
+             (backwards (reverse (cdr form))))
+         (while (and backwards
+                     (null (setcar backwards
+                                   (byte-optimize-form (car backwards) t))))
+           (setq backwards (cdr backwards)))
+         (if (and (cdr form) (null backwards))
+             (byte-compile-log
+              "  all subforms of %s called for effect; deleted" form))
+         (when backwards
+           (setcdr backwards
+                   (mapcar 'byte-optimize-form (cdr backwards))))
+         (setq ad-return-value (cons fn (nreverse backwards))))
+      ad-do-it)))
+
+(when (and (featurep 'xemacs)
+          (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
+            (modify-syntax-entry ?= " " table)
+            (with-temp-buffer
+              (with-syntax-table table
+                (insert "foo=bar")
+                (goto-char (point-min))
+                (forward-sexp 1)
+                (eolp)))))
+  ;; The original `with-syntax-table' uses `copy-syntax-table' which
+  ;; doesn't seem to copy modified syntax entries in XEmacs 21.5.
+  (defmacro with-syntax-table (syntab &rest body)
+    "Evaluate BODY with the SYNTAB as the current syntax table."
+    `(let ((stab (syntax-table)))
+       (unwind-protect
+          (progn
+            ;;(set-syntax-table (copy-syntax-table ,syntab))
+            (set-syntax-table ,syntab)
+            ,@body)
+        (set-syntax-table stab)))))
+
 (push srcdir load-path)
-(load (expand-file-name "lpath.el" srcdir) nil t)
+(push loaddir load-path)
+(load (expand-file-name "lpath.el" loaddir) nil t)
 
 (defalias 'device-sound-enabled-p 'ignore)
 (defalias 'play-sound-file 'ignore)
@@ -181,11 +178,6 @@ than subr.el."
 
 (eval-and-compile
   (when (featurep 'xemacs)
-    ;; XEmacs 21.1 needs some extra hand holding
-    (when (eq emacs-minor-version 1)
-      (autoload 'custom-declare-face "cus-face" nil t)
-      (autoload 'cl-compile-time-init "cl-macs" nil t)
-      (autoload 'defadvice "advice" nil nil 'macro))
     (unless (fboundp 'defadvice)
       (autoload 'defadvice "advice" nil nil 'macro))
     (autoload 'Info-directory "info" nil t)
@@ -195,12 +187,15 @@ than subr.el."
     (autoload 'apropos-command "apropos" nil t)
     (autoload 'bbdb-complete-name "bbdb-com" nil t)
     (autoload 'browse-url "browse-url" nil t)
+    (autoload 'c-mode "cc-mode" nil t)
     (autoload 'customize-apropos "cus-edit" nil t)
     (autoload 'customize-save-variable "cus-edit" nil t)
     (autoload 'customize-variable "cus-edit" nil t)
     (autoload 'delete-annotation "annotations")
     (autoload 'dolist "cl-macs" nil nil 'macro)
     (autoload 'enriched-decode "enriched")
+    (autoload 'executable-find "executable")
+    (autoload 'font-lock-fontify-buffer "font-lock" nil t)
     (autoload 'info "info" nil t)
     (autoload 'make-annotation "annotations")
     (autoload 'make-display-table "disp-table")
@@ -214,6 +209,7 @@ than subr.el."
     (if (emacs-version>= 21 5)
        (autoload 'setenv "process" nil t)
       (autoload 'setenv "env" nil t))
+    (autoload 'sgml-mode "psgml" nil t)
     (autoload 'smtpmail-send-it "smtpmail")
     (autoload 'sort-numeric-fields "sort" nil t)
     (autoload 'sort-subr "sort")
@@ -244,20 +240,9 @@ dgnushack-compile."
 
 (defun dgnushack-compile (&optional warn)
   ;;(setq byte-compile-dynamic t)
-  (when (and (not (featurep 'xemacs))
-            (< emacs-major-version 21))
-    (setq max-specpdl-size 1200))
   (unless warn
     (setq byte-compile-warnings
          '(free-vars unresolved callargs redefine)))
-  (unless (locate-library "cus-edit")
-    (error "You do not seem to have Custom installed.
-Fetch it from <URL:http://www.dina.kvl.dk/~abraham/custom/>.
-You also then need to add the following to the lisp/dgnushack.el file:
-
-     (push \"~/lisp/custom\" load-path)
-
-Modify to suit your needs."))
   (let ((files (directory-files srcdir nil "^[^=].*\\.el$"))
        ;;(byte-compile-generate-call-tree t)
        file elc)
@@ -288,7 +273,8 @@ Modify to suit your needs."))
     (dolist (file
             (if (featurep 'xemacs)
                 '("md5.el")
-              '("gnus-xmas.el" "messagexmas.el" "nnheaderxm.el")))
+              '("gnus-xmas.el" "messagexmas.el" "nnheaderxm.el"
+                "run-at-time.el")))
       (setq files (delete file files)))
 
     (dolist (file files)
index 5d572fa..d573d89 100644 (file)
@@ -50,11 +50,12 @@ If nil, /etc/resolv.conf will be consulted.")
     (MR 9)
     (NULL 10)
     (WKS 11)
-    (PRT 12)
+    (PTR 12)
     (HINFO 13)
     (MINFO 14)
     (MX 15)
     (TXT 16)
+    (AAAA 28) ; RFC3596
     (AXFR 252)
     (MAILB 253)
     (MAILA 254)
@@ -251,6 +252,12 @@ If TCP-P, the first two bytes of the package with be the length field."
        (push (list slot qs) spec)))
     (nreverse spec))))
 
+(defun dns-read-int32 ()
+  ;; Full 32 bit Integers can't be handled by Emacs.  If we use
+  ;; floats, it works.
+  (format "%.0f" (+ (* (dns-read-bytes 1) 16777216.0)
+                   (dns-read-bytes 3))))
+
 (defun dns-read-type (string type)
   (let ((buffer (current-buffer))
        (point (point)))
@@ -264,9 +271,22 @@ If TCP-P, the first two bytes of the package with be the length field."
              (dotimes (i 4)
                (push (dns-read-bytes 1) bytes))
              (mapconcat 'number-to-string (nreverse bytes) ".")))
-          ((eq type 'NS)
-           (dns-read-string-name string buffer))
-          ((eq type 'CNAME)
+          ((eq type 'AAAA)
+           (let (hextets)
+             (dotimes (i 8)
+               (push (dns-read-bytes 2) hextets))
+             (mapconcat (lambda (n) (format "%x" n)) (nreverse hextets) ":")))
+          ((eq type 'SOA)
+           (list (list 'mname (dns-read-name buffer))
+                 (list 'rname (dns-read-name buffer))
+                 (list 'serial (dns-read-int32))
+                 (list 'refresh (dns-read-int32))
+                 (list 'retry (dns-read-int32))
+                 (list 'expire (dns-read-int32))
+                 (list 'minimum (dns-read-int32))))
+          ((eq type 'MX)
+           (cons (dns-read-bytes 2) (dns-read-name buffer)))
+          ((or (eq type 'CNAME) (eq type 'NS) (eq type 'PTR))
            (dns-read-string-name string buffer))
           (t string)))
       (goto-char point))))
@@ -281,16 +301,12 @@ If TCP-P, the first two bytes of the package with be the length field."
       (setq dns-servers (nreverse dns-servers)))))
 
 ;;; Interface functions.
-(eval-when-compile
-  (when (featurep 'xemacs)
-    (require 'gnus-xmas)))
-
 (defmacro dns-make-network-process (server)
   (if (featurep 'xemacs)
       `(let ((coding-system-for-read 'binary)
             (coding-system-for-write 'binary))
-        (gnus-xmas-open-network-stream "dns" (current-buffer)
-                                       ,server "domain" 'udp))
+        (open-network-stream "dns" (current-buffer)
+                             ,server "domain" 'udp))
     `(let ((server ,server)
           (coding-system-for-read 'binary)
           (coding-system-for-write 'binary))
index cec7739..c800699 100644 (file)
@@ -1,4 +1,4 @@
-;;; flow-fill.el --- interprete RFC2646 "flowed" text
+;;; flow-fill.el --- interpret RFC2646 "flowed" text
 
 ;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
@@ -70,17 +70,6 @@ RFC 2646 suggests 66 characters for readability."
                 (sexp)
                 (integer)))
 
-(eval-and-compile
-  (defalias 'fill-flowed-point-at-bol
-       (if (fboundp 'point-at-bol)
-           'point-at-bol
-         'line-beginning-position))
-
-   (defalias 'fill-flowed-point-at-eol
-       (if (fboundp 'point-at-eol)
-           'point-at-eol
-         'line-end-position)))
-
 ;;;###autoload
 (defun fill-flowed-encode (&optional buffer)
   (with-current-buffer (or buffer (current-buffer))
@@ -142,8 +131,8 @@ RFC 2646 suggests 66 characters for readability."
                (let ((fill-prefix (when quote (concat quote " ")))
                      (fill-column (eval fill-flowed-display-column))
                      filladapt-mode)
-                 (fill-region (fill-flowed-point-at-bol)
-                              (min (1+ (fill-flowed-point-at-eol))
+                 (fill-region (point-at-bol)
+                              (min (1+ (point-at-eol))
                                    (point-max))
                               'left 'nosqueeze))
              (error
index 38440a3..66bc357 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-agent.el --- unplugged support for Gnus
-;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -144,9 +144,9 @@ If this is `ask' the hook will query the user."
   :group 'gnus-agent)
 
 (defcustom gnus-agent-consider-all-articles nil
-  "When non-`nil', the agent will let the agent predicate decide
+  "When non-nil, the agent will let the agent predicate decide
 whether articles need to be downloaded or not, for all articles.  When
-`nil', the default, the agent will only let the predicate decide
+nil, the default, the agent will only let the predicate decide
 whether unread articles are downloaded or not.  If you enable this,
 groups with large active ranges may open slower and you may also want
 to look into the agent expiry settings to block the expiration of
@@ -188,6 +188,21 @@ See Info node `(gnus)Server Buffer'."
   :type '(repeat symbol)
   :group 'gnus-agent)
 
+(defcustom gnus-agent-queue-mail t
+  "Whether and when outgoing mail should be queued by the agent.
+When `always', always queue outgoing mail.  When nil, never
+queue.  Otherwise, queue if and only if unplugged."
+  :group 'gnus-agent
+  :type '(radio (const :format "Always" always)
+               (const :format "Never" nil)
+               (const :format "When plugged" t)))
+
+(defcustom gnus-agent-prompt-send-queue nil
+  "If non-nil, `gnus-group-send-queue' will prompt if called when
+unplugged."
+  :group 'gnus-agent
+  :type 'boolean)
+
 ;;; Internal variables
 
 (defvar gnus-agent-history-buffers nil)
@@ -214,7 +229,9 @@ NOTES:
 (defvar gnus-agent-send-mail-function nil)
 (defvar gnus-agent-file-coding-system 'raw-text)
 (defvar gnus-agent-file-loading-cache nil)
-(defvar gnus-agent-file-header-cache nil)
+(defvar gnus-agent-total-fetched-hashtb nil)
+(defvar gnus-agent-inhibit-update-total-fetched-for nil)
+(defvar gnus-agent-need-update-total-fetched-for nil)
 
 ;; Dynamic variables
 (defvar gnus-headers)
@@ -254,6 +271,17 @@ NOTES:
 ;;; Utility functions
 ;;;
 
+(defmacro gnus-agent-with-refreshed-group (group &rest body)
+  "Performs the body then updates the group's line in the group
+buffer.  Automatically blocks multiple updates due to recursion."
+`(prog1 (let ((gnus-agent-inhibit-update-total-fetched-for t)) ,@body)
+     (when (and gnus-agent-need-update-total-fetched-for
+               (not gnus-agent-inhibit-update-total-fetched-for))
+       (save-excursion
+         (set-buffer gnus-group-buffer)
+         (setq gnus-agent-need-update-total-fetched-for nil)
+         (gnus-group-update-group ,group t)))))
+
 (defun gnus-agent-read-file (file)
   "Load FILE and do a `read' there."
   (with-temp-buffer
@@ -343,11 +371,9 @@ manipulated as follows:
 (gnus-agent-cat-defaccessor
  gnus-agent-cat-score-file                 agent-score-file)
 (gnus-agent-cat-defaccessor
- gnus-agent-cat-disable-undownloaded-faces agent-disable-undownloaded-faces)
-(gnus-agent-cat-defaccessor
  gnus-agent-cat-enable-undownloaded-faces agent-enable-undownloaded-faces)
 
-(eval-when-compile
+(eval-and-compile
   (defsetf gnus-agent-cat-groups (category) (groups)
     (list 'gnus-agent-set-cat-groups category groups)))
 
@@ -609,7 +635,7 @@ minor mode in all Gnus buffers."
   (unless gnus-agent-send-mail-function
     (setq gnus-agent-send-mail-function
          (or message-send-mail-real-function
-             message-send-mail-function)
+             (function (lambda () (funcall message-send-mail-function))))
          message-send-mail-real-function 'gnus-agent-send-mail))
 
   ;; If the servers file doesn't exist, auto-agentize some servers and
@@ -642,7 +668,8 @@ Optional arg GROUP-NAME allows to specify another group."
      'gnus-dummy '((gnus-draft-mode)))))
 
 (defun gnus-agent-send-mail ()
-  (if gnus-plugged
+  (if (or (not gnus-agent-queue-mail)
+         (and gnus-plugged (not (eq gnus-agent-queue-mail 'always))))
       (funcall gnus-agent-send-mail-function)
     (goto-char (point-min))
     (re-search-forward
@@ -803,6 +830,56 @@ be a select method."
                                        (cadr method)))))
     (gnus-agent-synchronize-flags-server method)))
 
+;;;###autoload
+(defun gnus-agent-rename-group (old-group new-group)
+  "Rename fully-qualified OLD-GROUP as NEW-GROUP.  Always updates the agent, even when
+disabled, as the old agent files would corrupt gnus when the agent was
+next enabled. Depends upon the caller to determine whether group renaming is supported."
+  (let* ((old-command-method (gnus-find-method-for-group old-group))
+        (old-path           (directory-file-name
+                             (let (gnus-command-method old-command-method)
+                               (gnus-agent-group-pathname old-group))))
+        (new-command-method (gnus-find-method-for-group new-group))
+        (new-path           (directory-file-name
+                             (let (gnus-command-method new-command-method)
+                               (gnus-agent-group-pathname new-group)))))
+    (gnus-rename-file old-path new-path t)
+
+    (let* ((old-real-group (gnus-group-real-name old-group))
+          (new-real-group (gnus-group-real-name new-group))
+          (old-active (gnus-agent-get-group-info old-command-method old-real-group)))
+      (gnus-agent-save-group-info old-command-method old-real-group nil)
+      (gnus-agent-save-group-info new-command-method new-real-group old-active)
+
+      (let ((old-local (gnus-agent-get-local old-group 
+                                            old-real-group old-command-method)))
+       (gnus-agent-set-local old-group
+                             nil nil
+                             old-real-group old-command-method)
+       (gnus-agent-set-local new-group
+                             (car old-local) (cdr old-local)
+                             new-real-group new-command-method)))))
+
+;;;###autoload
+(defun gnus-agent-delete-group (group)
+  "Delete fully-qualified GROUP.  Always updates the agent, even when
+disabled, as the old agent files would corrupt gnus when the agent was
+next enabled. Depends upon the caller to determine whether group deletion is supported."
+  (let* ((command-method (gnus-find-method-for-group group))
+        (path           (directory-file-name
+                         (let (gnus-command-method command-method)
+                           (gnus-agent-group-pathname group)))))
+    (gnus-delete-file path)
+
+    (let* ((real-group (gnus-group-real-name group)))
+      (gnus-agent-save-group-info command-method real-group nil)
+
+      (let ((local (gnus-agent-get-local group 
+                                        real-group command-method)))
+       (gnus-agent-set-local group
+                             nil nil
+                             real-group command-method)))))
+
 ;;;
 ;;; Server mode commands
 ;;;
@@ -947,11 +1024,9 @@ article's mark is toggled."
              (setq gnus-newsgroup-downloadable
                    (delq article gnus-newsgroup-downloadable))
              (gnus-article-mark article))
-         (progn
-           (setq gnus-newsgroup-downloadable
-                 (gnus-add-to-sorted-list gnus-newsgroup-downloadable article))
-           gnus-downloadable-mark)
-         )
+        (setq gnus-newsgroup-downloadable
+              (gnus-add-to-sorted-list gnus-newsgroup-downloadable article))
+        gnus-downloadable-mark)
        'unread))))
 
 (defun gnus-agent-get-undownloaded-list ()
@@ -1074,10 +1149,6 @@ Optional arg ALL, if non-nil, means to fetch all articles."
                    (setq gnus-newsgroup-downloadable
                          (delq article gnus-newsgroup-downloadable))
 
-                   ;; The downloadable mark is implemented as a
-                   ;; type of read mark.  Therefore, marking the
-                   ;; article as unread is sufficient to clear
-                   ;; its downloadable flag.  
                    (gnus-summary-mark-article article gnus-unread-mark))
                   (was-marked-downloadable
                    (gnus-summary-set-agent-mark article t)))
@@ -1102,91 +1173,77 @@ This can be added to `gnus-select-article-hook' or
 ;;; Internal functions
 ;;;
 
-;;; NOTES:
-;;; The agent's active range is defined as follows:
-;;;  If the agent has no record of the group, use the actual active
-;;;    range.
-;;;  If the agent has a record, set the agent's active range to
-;;;    include the max limit of the actual active range.
-;;;  When expiring, update the min limit to match the smallest of the
-;;;    min article not expired or the min actual active range.
-
 (defun gnus-agent-save-active (method)
-  (gnus-agent-save-active-1 method 'gnus-active-to-gnus-format))
-
-(defun gnus-agent-save-active-1 (method function)
   (when (gnus-agent-method-p method)
     (let* ((gnus-command-method method)
           (new (gnus-make-hashtable (count-lines (point-min) (point-max))))
           (file (gnus-agent-lib-file "active")))
-      (funcall function nil new)
+      (gnus-active-to-gnus-format nil new)
       (gnus-agent-write-active file new)
       (erase-buffer)
       (nnheader-insert-file-contents file))))
 
-(defun gnus-agent-write-active (file new &optional literal-replacement)
-  (let ((old new))
-    (when (and (not literal-replacement)
-               (file-exists-p file))
-      (setq old (gnus-make-hashtable (count-lines (point-min) (point-max))))
-      (with-temp-buffer
-        (nnheader-insert-file-contents file)
-        (gnus-active-to-gnus-format nil old))
-      ;; Iterate over the current active groups, the current active
-      ;; range may expand, but NOT CONTRACT, the agent's active range.
-      (mapatoms
-       (lambda (nsym)
-         (let ((new-active (and nsym (boundp nsym) (symbol-value nsym))))
-           (when new-active
-             (let* ((osym       (intern (symbol-name nsym) old))
-                    (old-active (and (boundp osym) (symbol-value osym))))
-               (if old-active
-                   (let ((new-min (car new-active))
-                         (old-min (car old-active))
-                         (new-max (cdr new-active))
-                         (old-max (cdr old-active)))
-                     (if (and (integerp new-min)
-                              (< new-min old-min))
-                         (setcar old-active new-min))
-                     (if (and (integerp new-max)
-                              (> new-max old-max))
-                         (setcdr old-active new-max)))
-                 (set osym new-active))))))
-       new))
+(defun gnus-agent-write-active (file new)
     (gnus-make-directory (file-name-directory file))
     (let ((nnmail-active-file-coding-system gnus-agent-file-coding-system))
       ;; The hashtable contains real names of groups.  However, do NOT
       ;; add the foreign server prefix as gnus-active-to-gnus-format
       ;; will add it while reading the file.
-      (gnus-write-active-file file old nil))))
+      (gnus-write-active-file file new nil)))
 
-(defun gnus-agent-possibly-alter-active (group active)
+(defun gnus-agent-possibly-alter-active (group active &optional info)
   "Possibly expand a group's active range to include articles
 downloaded into the agent."
-
-;; I can't use the agent's active file here as there is no practical
-;; mechanism to update the active ranges in that file as the oldest
-;; articles are removed from the agent.
   (let* ((gnus-command-method (or gnus-command-method
-                                  (gnus-find-method-for-group group)))
-         (alist (gnus-agent-load-alist group)))
-
-    (let ((new-min (or (caar gnus-agent-article-alist)
-                       (car active)))
-          (new-max (or (caar (last gnus-agent-article-alist))
-                       (cdr active))))
-
-        (when (< new-min (car active))
-          (setcar active new-min))
-        (when (> new-max (cdr active))
-          (setcdr active new-max)))))
-
-(defun gnus-agent-save-groups (method)
-  (gnus-agent-save-active-1 method 'gnus-groups-to-gnus-format))
+                                  (gnus-find-method-for-group group))))
+    (when (gnus-agent-method-p gnus-command-method)
+      (let* ((local (gnus-agent-get-local group))
+             (active-min (or (car active) 0))
+             (active-max (or (cdr active) 0))
+             (agent-min (or (car local) active-min))
+             (agent-max (or (cdr local) active-max)))
+
+        (when (< agent-min active-min)
+          (setcar active agent-min))
+
+        (when (> agent-max active-max)
+          (setcdr active agent-max))
+
+        (when (and info (< agent-max (- active-min 100)))
+          ;; I'm expanding the active range by such a large amount
+          ;; that there is a gap of more than 100 articles between the
+          ;; last article known to the agent and the first article
+          ;; currently available on the server.  This gap contains
+          ;; articles that have been lost, mark them as read so that
+          ;; gnus doesn't waste resources trying to fetch them.
+
+          ;; NOTE: I don't do this for smaller gaps (< 100) as I don't
+          ;; want to modify the local file everytime someone restarts
+          ;; gnus.  The small gap will cause a tiny performance hit
+          ;; when gnus tries, and fails, to retrieve the articles.
+          ;; Still that should be smaller than opening a buffer,
+          ;; printing this list to the buffer, and then writing it to a
+          ;; file.
+
+          (let ((read (gnus-info-read info)))
+            (gnus-info-set-read 
+             info 
+             (gnus-range-add 
+              read 
+              (list (cons (1+ agent-max) 
+                          (1- active-min))))))
+
+          ;; Lie about the agent's local range for this group to
+          ;; disable the set read each time this server is opened.
+          ;; NOTE: Opening this group will restore the valid local
+          ;; range but it will also expand the local range to
+          ;; incompass the new active range.
+          (gnus-agent-set-local group agent-min (1- active-min)))))))
 
 (defun gnus-agent-save-group-info (method group active)
+  "Update a single group's active range in the agent's copy of the server's active file."
   (when (gnus-agent-method-p method)
-    (let* ((gnus-command-method method)
+    (let* ((gnus-command-method (or method gnus-command-method))
           (coding-system-for-write nnheader-file-coding-system)
           (file-name-coding-system nnmail-pathname-coding-system)
           (file (gnus-agent-lib-file "active"))
@@ -1202,15 +1259,39 @@ downloaded into the agent."
           (when (re-search-forward
                  (concat "^" (regexp-quote group) " ") nil t)
             (save-excursion
-              (setq oactive-max (read (current-buffer)) ;; max
+              (setq oactive-max (read (current-buffer))        ;; max
                     oactive-min (read (current-buffer)))) ;; min
             (gnus-delete-line)))
-       (insert (format "%S %d %d y\n" (intern group)
-                       (max (or oactive-max (cdr active)) (cdr active))
-                        (min (or oactive-min (car active)) (car active))))
-       (goto-char (point-max))
-       (while (search-backward "\\." nil t)
-         (delete-char 1))))))
+       (when active
+         (insert (format "%S %d %d y\n" (intern group)
+                         (max (or oactive-max (cdr active)) (cdr active))
+                         (min (or oactive-min (car active)) (car active))))
+         (goto-char (point-max))
+         (while (search-backward "\\." nil t)
+           (delete-char 1)))))))
+
+(defun gnus-agent-get-group-info (method group)
+  "Get a single group's active range in the agent's copy of the server's active file."
+  (when (gnus-agent-method-p method)
+    (let* ((gnus-command-method (or method gnus-command-method))
+          (coding-system-for-write nnheader-file-coding-system)
+          (file-name-coding-system nnmail-pathname-coding-system)
+          (file (gnus-agent-lib-file "active"))
+          oactive-min oactive-max)
+      (gnus-make-directory (file-name-directory file))
+      (with-temp-buffer
+       ;; Emacs got problem to match non-ASCII group in multibyte buffer.
+       (mm-disable-multibyte)
+       (when (file-exists-p file)
+         (nnheader-insert-file-contents file)
+
+          (goto-char (point-min))
+          (when (re-search-forward
+                 (concat "^" (regexp-quote group) " ") nil t)
+            (save-excursion
+              (setq oactive-max (read (current-buffer))        ;; max
+                    oactive-min (read (current-buffer))) ;; min
+             (cons oactive-min oactive-max))))))))
 
 (defun gnus-agent-group-path (group)
   "Translate GROUP into a file name."
@@ -1413,6 +1494,8 @@ downloaded into the agent."
                     (setq pos (cdr pos)))))
 
             (gnus-agent-save-alist group (cdr fetched-articles) date)
+           (gnus-agent-update-files-total-fetched-for group (cdr fetched-articles))
+
             (gnus-message 7 ""))
           (cdr fetched-articles))))))
 
@@ -1484,7 +1567,7 @@ and that there are no duplicates."
              (gnus-message 1
                            "Overview buffer contains garbage '%s'."
                            (buffer-substring
-                            p (gnus-point-at-eol))))
+                            p (point-at-eol))))
             ((= cur prev-num)
              (or backed-up
                   (setq backed-up (gnus-agent-backup-overview-buffer)))
@@ -1626,12 +1709,13 @@ article numbers will be returned."
               ;; of FILE.
               (copy-to-buffer
               gnus-agent-overview-buffer (point-min) (point-max))
-              (when (file-exists-p file)
-                (gnus-agent-braid-nov group articles file))
+             (when (file-exists-p file)
+               (gnus-agent-braid-nov group articles file))
               (let ((coding-system-for-write
                      gnus-agent-file-coding-system))
                 (gnus-agent-check-overview-buffer)
                 (write-region (point-min) (point-max) file nil 'silent))
+             (gnus-agent-update-view-total-fetched-for group t)
               (gnus-agent-save-alist group articles nil)
               articles)
           (ignore-errors
@@ -1738,51 +1822,56 @@ FILE and places the combined headers into `nntp-server-buffer'."
 (defun gnus-agent-read-agentview (file)
   "Load FILE and do a `read' there."
   (with-temp-buffer
-    (ignore-errors
-      (nnheader-insert-file-contents file)
-      (goto-char (point-min))
-      (let ((alist (read (current-buffer)))
-            (version (condition-case nil (read (current-buffer))
-                       (end-of-file 0)))
-            changed-version)
-
-        (cond
-        ((= version 0)
-         (let ((inhibit-quit t)
-               entry)
-           (gnus-agent-open-history)
-           (set-buffer (gnus-agent-history-buffer))
-           (goto-char (point-min))
-           (while (not (eobp))
-             (if (and (looking-at
-                       "[^\t\n]+\t\\([0-9]+\\)\t\\([^ \n]+\\) \\([0-9]+\\)")
-                      (string= (match-string 2)
-                               gnus-agent-read-agentview)
-                      (setq entry (assoc (string-to-number (match-string 3)) alist)))
-                 (setcdr entry (string-to-number (match-string 1))))
-             (forward-line 1))
-           (gnus-agent-close-history)
-           (setq changed-version t)))
-        ((= version 1)
-         (setq changed-version (not (= 1 gnus-agent-article-alist-save-format))))
-        ((= version 2)
-         (let (uncomp)
-           (mapcar
-            (lambda (comp-list)
-              (let ((state (car comp-list))
-                    (sequence (gnus-uncompress-sequence
-                               (cdr comp-list))))
-                (mapcar (lambda (article-id)
-                          (setq uncomp (cons (cons article-id state) uncomp)))
-                        sequence)))
-            alist)
-           (setq alist (sort uncomp 'car-less-than-car)))))
-        (when changed-version
-          (let ((gnus-agent-article-alist alist))
-            (gnus-agent-save-alist gnus-agent-read-agentview)))
-        alist))))
-
-(defun gnus-agent-save-alist (group &optional articles state dir)
+    (condition-case nil
+      (progn
+        (nnheader-insert-file-contents file)
+        (goto-char (point-min))
+        (let ((alist (read (current-buffer)))
+              (version (condition-case nil (read (current-buffer))
+                         (end-of-file 0)))
+              changed-version)
+
+          (cond
+           ((< version 2)
+            (error "gnus-agent-read-agentview no longer supports version %d.  Stop gnus, manually evaluate gnus-agent-convert-to-compressed-agentview, then restart gnus." version))
+           ((= version 0)
+            (let ((inhibit-quit t)
+                  entry)
+              (gnus-agent-open-history)
+              (set-buffer (gnus-agent-history-buffer))
+              (goto-char (point-min))
+              (while (not (eobp))
+                (if (and (looking-at
+                          "[^\t\n]+\t\\([0-9]+\\)\t\\([^ \n]+\\) \\([0-9]+\\)")
+                         (string= (match-string 2)
+                                  gnus-agent-read-agentview)
+                         (setq entry (assoc (string-to-number (match-string 3)) alist)))
+                    (setcdr entry (string-to-number (match-string 1))))
+                (forward-line 1))
+              (gnus-agent-close-history)
+              (setq changed-version t)))
+           ((= version 1)
+            (setq changed-version (not (= 1 gnus-agent-article-alist-save-format))))
+           ((= version 2)
+            (let (uncomp)
+              (mapcar
+               (lambda (comp-list)
+                 (let ((state (car comp-list))
+                       (sequence (inline
+                                  (gnus-uncompress-range
+                                   (cdr comp-list)))))
+                   (mapcar (lambda (article-id)
+                             (setq uncomp (cons (cons article-id state) uncomp)))
+                           sequence)))
+               alist)
+              (setq alist (sort uncomp 'car-less-than-car)))))
+          (when changed-version
+            (let ((gnus-agent-article-alist alist))
+              (gnus-agent-save-alist gnus-agent-read-agentview)))
+          alist))
+      (file-error nil))))
+
+(defun gnus-agent-save-alist (group &optional articles state)
   "Save the article-state alist for GROUP."
   (let* ((file-name-coding-system nnmail-pathname-coding-system)
         (prev (cons nil gnus-agent-article-alist))
@@ -1801,12 +1890,13 @@ FILE and places the combined headers into `nntp-server-buffer'."
        (setcdr (cadr prev) state)))
       (setq prev (cdr prev)))
     (setq gnus-agent-article-alist (cdr all))
-    (if dir
-       (gnus-make-directory dir)
-      (gnus-make-directory (gnus-agent-article-name "" group)))
-    (with-temp-file (if dir
-                       (expand-file-name ".agentview" dir)
-                     (gnus-agent-article-name ".agentview" group))
+
+    (gnus-agent-set-local group 
+                          (caar gnus-agent-article-alist) 
+                          (caar (last gnus-agent-article-alist)))
+
+    (gnus-make-directory (gnus-agent-article-name "" group))
+    (with-temp-file (gnus-agent-article-name ".agentview" group)
       (cond ((eq gnus-agent-article-alist-save-format 1)
              (princ gnus-agent-article-alist (current-buffer)))
             ((eq gnus-agent-article-alist-save-format 2)
@@ -1830,7 +1920,147 @@ FILE and places the combined headers into `nntp-server-buffer'."
                (princ compressed (current-buffer)))))
       (insert "\n")
       (princ gnus-agent-article-alist-save-format (current-buffer))
-      (insert "\n"))))
+      (insert "\n"))
+
+    (gnus-agent-update-view-total-fetched-for group nil)))
+
+(defvar gnus-agent-article-local nil)
+(defvar gnus-agent-file-loading-local nil)
+
+(defun gnus-agent-load-local (&optional method)
+  "Load the METHOD'S local file.  The local file contains min/max
+article counts for each of the method's subscribed groups."
+  (let ((gnus-command-method (or method gnus-command-method)))
+    (setq gnus-agent-article-local
+          (gnus-cache-file-contents
+           (gnus-agent-lib-file "local")
+           'gnus-agent-file-loading-local
+           'gnus-agent-read-and-cache-local))))
+
+(defun gnus-agent-read-and-cache-local (file)
+  "Load and read FILE then bind its contents to
+gnus-agent-article-local.  If that variable had `dirty' (also known as
+modified) original contents, they are first saved to their own file."
+
+  (if (and gnus-agent-article-local
+           (symbol-value (intern "+dirty" gnus-agent-article-local)))
+      (gnus-agent-save-local))
+  (gnus-agent-read-local file))
+
+(defun gnus-agent-read-local (file)
+  "Load FILE and do a `read' there."
+  (let ((my-obarray (gnus-make-hashtable (count-lines (point-min) 
+                                                      (point-max))))
+        (line 1))
+    (with-temp-buffer
+      (condition-case nil
+         (let ((nnheader-file-coding-system gnus-agent-file-coding-system))
+           (nnheader-insert-file-contents file))
+        (file-error))
+
+      (goto-char (point-min))
+      ;; Skip any comments at the beginning of the file (the only place where they may appear)
+      (while (= (following-char) ?\;)
+        (forward-line 1)
+        (setq line (1+ line)))
+
+      (while (not (eobp))
+        (condition-case err
+            (let (group 
+                  min
+                  max
+                  (cur (current-buffer)))
+              (setq group (read cur)
+                    min (read cur)
+                    max (read cur))
+
+              (when (stringp group)
+                (setq group (intern group my-obarray)))
+
+              ;; NOTE: The '+ 0' ensure that min and max are both numerics.
+              (set group (cons (+ 0 min) (+ 0 max))))
+          (error
+           (gnus-message 3 "Warning - invalid agent local: %s on line %d: "
+                         file line (error-message-string err))))
+        (forward-line 1)
+        (setq line (1+ line))))
+      
+    (set (intern "+dirty" my-obarray) nil)
+    (set (intern "+method" my-obarray) gnus-command-method)
+    my-obarray))
+
+(defun gnus-agent-save-local (&optional force)
+  "Save gnus-agent-article-local under it method's agent.lib directory."
+  (let ((my-obarray gnus-agent-article-local))
+    (when (and my-obarray
+               (or force (symbol-value (intern "+dirty" my-obarray))))
+      (let* ((gnus-command-method (symbol-value (intern "+method" my-obarray)))
+             ;; NOTE: gnus-command-method is used within gnus-agent-lib-file.
+             (dest (gnus-agent-lib-file "local")))
+        (gnus-make-directory (gnus-agent-lib-file ""))
+
+       (let ((buffer-file-coding-system gnus-agent-file-coding-system))
+         (with-temp-file dest
+           (let ((gnus-command-method (symbol-value (intern "+method" my-obarray)))
+                 (file-name-coding-system nnmail-pathname-coding-system)
+                 print-level print-length item article
+                 (standard-output (current-buffer)))
+             (mapatoms (lambda (symbol)
+                         (cond ((not (boundp symbol))
+                                nil)
+                               ((member (symbol-name symbol) '("+dirty" "+method"))
+                                nil)
+                               (t
+                                (prin1 symbol)
+                                (let ((range (symbol-value symbol)))
+                                  (princ " ")
+                                  (princ (car range))
+                                  (princ " ")
+                                  (princ (cdr range))
+                                  (princ "\n"))))) 
+                       my-obarray))))))))
+
+(defun gnus-agent-get-local (group &optional gmane method)
+  (let* ((gmane (or gmane (gnus-group-real-name group)))
+         (gnus-command-method (or method (gnus-find-method-for-group group)))
+         (local (gnus-agent-load-local))
+         (symb (intern gmane local))
+         (minmax (and (boundp symb) (symbol-value symb))))
+    (unless minmax
+      ;; Bind these so that gnus-agent-load-alist doesn't change the
+      ;; current alist (i.e. gnus-agent-article-alist)
+      (let* ((gnus-agent-article-alist gnus-agent-article-alist)
+             (gnus-agent-file-loading-cache gnus-agent-file-loading-cache)
+             (alist (gnus-agent-load-alist group)))
+        (when alist
+          (setq minmax
+                (cons (caar alist)
+                      (caar (last alist))))
+          (gnus-agent-set-local group (car minmax) (cdr minmax) 
+                                gmane gnus-command-method local))))
+    minmax))
+
+(defun gnus-agent-set-local (group min max &optional gmane method local)
+  (let* ((gmane (or gmane (gnus-group-real-name group)))
+         (gnus-command-method (or method (gnus-find-method-for-group group)))
+         (local (or local (gnus-agent-load-local)))
+         (symb (intern gmane local))
+         (minmax (and (boundp symb) (symbol-value symb))))
+    
+    (if (cond ((and minmax
+                    (or (not (eq min (car minmax)))
+                        (not (eq max (cdr minmax)))))
+               (setcar minmax min)
+               (setcdr minmax max)
+               t)
+              (minmax
+               nil)
+              ((and min max)
+               (set symb (cons min max))
+               t)
+             (t
+              (unintern symb local)))
+        (set (intern "+dirty" local) t))))
 
 (defun gnus-agent-article-name (article group)
   (expand-file-name article
@@ -1879,13 +2109,14 @@ FILE and places the combined headers into `nntp-server-buffer'."
                       group gnus-command-method)
                    (error
                     (unless (funcall gnus-agent-confirmation-function
-                                     (format "Error %s.  Continue? "
+                                     (format "Error %s while fetching session.  Should gnus continue? "
                                              (error-message-string err)))
                       (error "Cannot fetch articles into the Gnus agent")))
                    (quit
+                    (gnus-agent-regenerate-group group)
                     (unless (funcall gnus-agent-confirmation-function
                                      (format
-                                      "Quit fetching session %s.  Continue? "
+                                      "%s while fetching session.  Should gnus continue? "
                                       (error-message-string err)))
                       (signal 'quit
                               "Cannot fetch articles into the Gnus agent")))))))))
@@ -2234,7 +2465,7 @@ The following commands are available:
     (gnus-category-position-point)))
 
 (defun gnus-category-name ()
-  (or (intern (get-text-property (gnus-point-at-bol) 'gnus-category))
+  (or (intern (get-text-property (point-at-bol) 'gnus-category))
       (error "No category on the current line")))
 
 (defun gnus-category-read ()
@@ -2570,7 +2801,7 @@ FORCE is equivalent to setting the expiration predicates to true."
   (if (not group)
       (gnus-agent-expire articles group force)
     (let ( ;; Bind gnus-agent-expire-stats to enable tracking of
-          ;; expiration statistics of this single group
+         ;; expiration statistics of this single group
           (gnus-agent-expire-stats (list 0 0 0.0)))
       (if (or (not (eq articles t))
               (yes-or-no-p
@@ -2591,8 +2822,7 @@ FORCE is equivalent to setting the expiration predicates to true."
                     (save-excursion
                       (gnus-agent-expire-group-1
                        group overview (gnus-gethash-safe group orig)
-                       articles force))
-                    (gnus-agent-write-active active-file orig t)))
+                       articles force))))
               (kill-buffer overview))))
       (gnus-message 4 (gnus-agent-expire-done-message)))))
 
@@ -2602,335 +2832,342 @@ FORCE is equivalent to setting the expiration predicates to true."
   ;; provided a non-nil active
 
   (let ((dir (gnus-agent-group-pathname group)))
-    (when (boundp 'gnus-agent-expire-current-dirs)
-      (set 'gnus-agent-expire-current-dirs 
-           (cons dir 
-                 (symbol-value 'gnus-agent-expire-current-dirs))))
-
-    (if (and (not force)
-             (eq 'DISABLE (gnus-agent-find-parameter group 
-                                                     'agent-enable-expiration)))
-        (gnus-message 5 "Expiry skipping over %s" group)
-      (gnus-message 5 "Expiring articles in %s" group)
-      (gnus-agent-load-alist group)
-      (let* ((stats (if (boundp 'gnus-agent-expire-stats)
-                        ;; Use the list provided by my caller
-                        (symbol-value 'gnus-agent-expire-stats)
-                      ;; otherwise use my own temporary list
-                      (list 0 0 0.0)))
-             (info (gnus-get-info group))
-             (alist gnus-agent-article-alist)
-             (day (- (time-to-days (current-time))
-                     (gnus-agent-find-parameter group 'agent-days-until-old)))
-             (specials (if (and alist
-                                (not force))
-                           ;; This could be a bit of a problem.  I need to
-                           ;; keep the last article to avoid refetching
-                           ;; headers when using nntp in the backend.  At
-                           ;; the same time, if someone uses a backend
-                           ;; that supports article moving then I may have
-                           ;; to remove the last article to complete the
-                           ;; move.  Right now, I'm going to assume that
-                           ;; FORCE overrides specials.
-                           (list (caar (last alist)))))
-             (unreads ;; Articles that are excluded from the
-              ;; expiration process
-              (cond (gnus-agent-expire-all
-                     ;; All articles are marked read by global decree
-                     nil)
-                    ((eq articles t)
-                     ;; All articles are marked read by function
-                     ;; parameter
-                     nil)
-                    ((not articles)
-                     ;; Unread articles are marked protected from
-                     ;; expiration Don't call
-                     ;; gnus-list-of-unread-articles as it returns
-                     ;; articles that have not been fetched into the
-                     ;; agent.
-                     (ignore-errors
-                       (gnus-agent-unread-articles group)))
-                    (t
-                     ;; All articles EXCEPT those named by the caller
-                     ;; are protected from expiration
-                     (gnus-sorted-difference
-                      (gnus-uncompress-range
-                       (cons (caar alist)
-                             (caar (last alist))))
-                      (sort articles '<)))))
-             (marked ;; More articles that are excluded from the
-              ;; expiration process
-              (cond (gnus-agent-expire-all
-                     ;; All articles are unmarked by global decree
-                     nil)
-                    ((eq articles t)
-                     ;; All articles are unmarked by function
-                     ;; parameter
-                     nil)
-                    (articles
-                     ;; All articles may as well be unmarked as the
-                     ;; unreads list already names the articles we are
-                     ;; going to keep
-                     nil)
-                    (t
-                     ;; Ticked and/or dormant articles are excluded
-                     ;; from expiration
-                     (nconc
-                      (gnus-uncompress-range
-                       (cdr (assq 'tick (gnus-info-marks info))))
-                      (gnus-uncompress-range
-                       (cdr (assq 'dormant
-                                  (gnus-info-marks info))))))))
-             (nov-file (concat dir ".overview"))
-             (cnt 0)
-             (completed -1)
-             dlist
-             type)
-
-        ;; The normal article alist contains elements that look like
-        ;; (article# .  fetch_date) I need to combine other
-        ;; information with this list.  For example, a flag indicating
-        ;; that a particular article MUST BE KEPT.  To do this, I'm
-        ;; going to transform the elements to look like (article#
-        ;; fetch_date keep_flag NOV_entry_marker) Later, I'll reverse
-        ;; the process to generate the expired article alist.
-
-        ;; Convert the alist elements to (article# fetch_date nil
-        ;; nil).
-        (setq dlist (mapcar (lambda (e)
-                              (list (car e) (cdr e) nil nil)) alist))
-
-        ;; Convert the keep lists to elements that look like (article#
-        ;; nil keep_flag nil) then append it to the expanded dlist
-        ;; These statements are sorted by ascending precidence of the
-        ;; keep_flag.
-        (setq dlist (nconc dlist
-                           (mapcar (lambda (e)
-                                     (list e nil 'unread  nil))
-                                   unreads)))
-        (setq dlist (nconc dlist
-                           (mapcar (lambda (e)
-                                     (list e nil 'marked  nil))
-                                   marked)))
-        (setq dlist (nconc dlist
-                           (mapcar (lambda (e)
-                                     (list e nil 'special nil))
-                                   specials)))
-
-        (set-buffer overview)
-        (erase-buffer)
-        (buffer-disable-undo)
-        (when (file-exists-p nov-file)
-          (gnus-message 7 "gnus-agent-expire: Loading overview...")
-          (nnheader-insert-file-contents nov-file)
-          (goto-char (point-min))
-
-          (let (p)
-            (while (< (setq p (point)) (point-max))
-              (condition-case nil
-                  ;; If I successfully read an integer (the plus zero
-                  ;; ensures a numeric type), prepend a marker entry
-                  ;; to the list
-                  (push (list (+ 0 (read (current-buffer))) nil nil
-                              (set-marker (make-marker) p))
-                        dlist)
-                (error
-                 (gnus-message 1 "gnus-agent-expire: read error \
+    (gnus-agent-with-refreshed-group 
+     group
+     (when (boundp 'gnus-agent-expire-current-dirs)
+       (set 'gnus-agent-expire-current-dirs 
+           (cons dir 
+                 (symbol-value 'gnus-agent-expire-current-dirs))))
+
+     (if (and (not force)
+             (eq 'DISABLE (gnus-agent-find-parameter group 
+                                                     'agent-enable-expiration)))
+        (gnus-message 5 "Expiry skipping over %s" group)
+       (gnus-message 5 "Expiring articles in %s" group)
+       (gnus-agent-load-alist group)
+       (let* ((bytes-freed 0)
+             (size-files-deleted 0.0)
+             (files-deleted 0)
+             (nov-entries-deleted 0)
+             (info (gnus-get-info group))
+             (alist gnus-agent-article-alist)
+             (day (- (time-to-days (current-time))
+                     (gnus-agent-find-parameter group 'agent-days-until-old)))
+             (specials (if (and alist
+                                (not force))
+                           ;; This could be a bit of a problem.  I need to
+                           ;; keep the last article to avoid refetching
+                           ;; headers when using nntp in the backend.  At
+                           ;; the same time, if someone uses a backend
+                           ;; that supports article moving then I may have
+                           ;; to remove the last article to complete the
+                           ;; move.  Right now, I'm going to assume that
+                           ;; FORCE overrides specials.
+                           (list (caar (last alist)))))
+             (unreads ;; Articles that are excluded from the
+              ;; expiration process
+              (cond (gnus-agent-expire-all
+                     ;; All articles are marked read by global decree
+                     nil)
+                    ((eq articles t)
+                     ;; All articles are marked read by function
+                     ;; parameter
+                     nil)
+                    ((not articles)
+                     ;; Unread articles are marked protected from
+                     ;; expiration Don't call
+                     ;; gnus-list-of-unread-articles as it returns
+                     ;; articles that have not been fetched into the
+                     ;; agent.
+                     (ignore-errors
+                       (gnus-agent-unread-articles group)))
+                    (t
+                     ;; All articles EXCEPT those named by the caller
+                     ;; are protected from expiration
+                     (gnus-sorted-difference
+                      (gnus-uncompress-range
+                       (cons (caar alist)
+                             (caar (last alist))))
+                      (sort articles '<)))))
+             (marked ;; More articles that are excluded from the
+              ;; expiration process
+              (cond (gnus-agent-expire-all
+                     ;; All articles are unmarked by global decree
+                     nil)
+                    ((eq articles t)
+                     ;; All articles are unmarked by function
+                     ;; parameter
+                     nil)
+                    (articles
+                     ;; All articles may as well be unmarked as the
+                     ;; unreads list already names the articles we are
+                     ;; going to keep
+                     nil)
+                    (t
+                     ;; Ticked and/or dormant articles are excluded
+                     ;; from expiration
+                     (nconc
+                      (gnus-uncompress-range
+                       (cdr (assq 'tick (gnus-info-marks info))))
+                      (gnus-uncompress-range
+                       (cdr (assq 'dormant
+                                  (gnus-info-marks info))))))))
+             (nov-file (concat dir ".overview"))
+             (cnt 0)
+             (completed -1)
+             dlist
+             type)
+
+        ;; The normal article alist contains elements that look like
+        ;; (article# .  fetch_date) I need to combine other
+        ;; information with this list.  For example, a flag indicating
+        ;; that a particular article MUST BE KEPT.  To do this, I'm
+        ;; going to transform the elements to look like (article#
+        ;; fetch_date keep_flag NOV_entry_marker) Later, I'll reverse
+        ;; the process to generate the expired article alist.
+
+        ;; Convert the alist elements to (article# fetch_date nil
+        ;; nil).
+        (setq dlist (mapcar (lambda (e)
+                              (list (car e) (cdr e) nil nil)) alist))
+
+        ;; Convert the keep lists to elements that look like (article#
+        ;; nil keep_flag nil) then append it to the expanded dlist
+        ;; These statements are sorted by ascending precidence of the
+        ;; keep_flag.
+        (setq dlist (nconc dlist
+                           (mapcar (lambda (e)
+                                     (list e nil 'unread  nil))
+                                   unreads)))
+        (setq dlist (nconc dlist
+                           (mapcar (lambda (e)
+                                     (list e nil 'marked  nil))
+                                   marked)))
+        (setq dlist (nconc dlist
+                           (mapcar (lambda (e)
+                                     (list e nil 'special nil))
+                                   specials)))
+
+        (set-buffer overview)
+        (erase-buffer)
+        (buffer-disable-undo)
+        (when (file-exists-p nov-file)
+          (gnus-message 7 "gnus-agent-expire: Loading overview...")
+          (nnheader-insert-file-contents nov-file)
+          (goto-char (point-min))
+
+          (let (p)
+            (while (< (setq p (point)) (point-max))
+              (condition-case nil
+                  ;; If I successfully read an integer (the plus zero
+                  ;; ensures a numeric type), prepend a marker entry
+                  ;; to the list
+                  (push (list (+ 0 (read (current-buffer))) nil nil
+                              (set-marker (make-marker) p))
+                        dlist)
+                (error
+                 (gnus-message 1 "gnus-agent-expire: read error \
 occurred when reading expression at %s in %s.  Skipping to next \
 line." (point) nov-file)))
-              ;; Whether I succeeded, or failed, it doesn't matter.
-              ;; Move to the next line then try again.
-              (forward-line 1)))
-
-          (gnus-message
-           7 "gnus-agent-expire: Loading overview... Done"))
-        (set-buffer-modified-p nil)
-
-        ;; At this point, all of the information is in dlist.  The
-        ;; only problem is that much of it is spread across multiple
-        ;; entries.  Sort then MERGE!!
-        (gnus-message 7 "gnus-agent-expire: Sorting entries... ")
-        ;; If two entries have the same article-number then sort by
-        ;; ascending keep_flag.
-        (let ((special 0)
-              (marked 1)
-              (unread 2))
-          (setq dlist
-                (sort dlist
-                      (lambda (a b)
-                        (cond ((< (nth 0 a) (nth 0 b))
-                               t)
-                              ((> (nth 0 a) (nth 0 b))
-                               nil)
-                              (t
-                               (let ((a (or (symbol-value (nth 2 a))
-                                            3))
-                                     (b (or (symbol-value (nth 2 b))
-                                            3)))
-                                 (<= a b))))))))
-        (gnus-message 7 "gnus-agent-expire: Sorting entries... Done")
-        (gnus-message 7 "gnus-agent-expire: Merging entries... ")
-        (let ((dlist dlist))
-          (while (cdr dlist)            ; I'm not at the end-of-list
-            (if (eq (caar dlist) (caadr dlist))
-                (let ((first (cdr (car dlist)))
-                      (secnd (cdr (cadr dlist))))
-                  (setcar first (or (car first)
-                                    (car secnd))) ; fetch_date
-                  (setq first (cdr first)
-                        secnd (cdr secnd))
-                  (setcar first (or (car first)
-                                    (car secnd))) ; Keep_flag
-                  (setq first (cdr first)
-                        secnd (cdr secnd))
-                  (setcar first (or (car first)
-                                    (car secnd))) ; NOV_entry_marker
-
-                  (setcdr dlist (cddr dlist)))
-              (setq dlist (cdr dlist)))))
-        (gnus-message 7 "gnus-agent-expire: Merging entries... Done")
-
-        (let* ((len (float (length dlist)))
-               (alist (list nil))
-               (tail-alist alist))
-          (while dlist
-            (let ((new-completed (truncate (* 100.0
-                                              (/ (setq cnt (1+ cnt))
-                                                 len))))
-                 message-log-max)
-              (when (> new-completed completed)
-                (setq completed new-completed)
-                (gnus-message 7 "%3d%% completed..."  completed)))
-            (let* ((entry          (car dlist))
-                   (article-number (nth 0 entry))
-                   (fetch-date     (nth 1 entry))
-                   (keep           (nth 2 entry))
-                   (marker         (nth 3 entry)))
-
-              (cond
-               ;; Kept articles are unread, marked, or special.
-               (keep
-                (gnus-agent-message 10
-                                    "gnus-agent-expire: %s:%d: Kept %s article%s."
-                                    group article-number keep (if fetch-date " and file" ""))
-                (when fetch-date
-                  (unless (file-exists-p
-                           (concat dir (number-to-string
-                                        article-number)))
-                    (setf (nth 1 entry) nil)
-                    (gnus-agent-message 3 "gnus-agent-expire cleared \
+              ;; Whether I succeeded, or failed, it doesn't matter.
+              ;; Move to the next line then try again.
+              (forward-line 1)))
+
+          (gnus-message
+           7 "gnus-agent-expire: Loading overview... Done"))
+        (set-buffer-modified-p nil)
+
+        ;; At this point, all of the information is in dlist.  The
+        ;; only problem is that much of it is spread across multiple
+        ;; entries.  Sort then MERGE!!
+        (gnus-message 7 "gnus-agent-expire: Sorting entries... ")
+        ;; If two entries have the same article-number then sort by
+        ;; ascending keep_flag.
+        (let ((special 0)
+              (marked 1)
+              (unread 2))
+          (setq dlist
+                (sort dlist
+                      (lambda (a b)
+                        (cond ((< (nth 0 a) (nth 0 b))
+                               t)
+                              ((> (nth 0 a) (nth 0 b))
+                               nil)
+                              (t
+                               (let ((a (or (symbol-value (nth 2 a))
+                                            3))
+                                     (b (or (symbol-value (nth 2 b))
+                                            3)))
+                                 (<= a b))))))))
+        (gnus-message 7 "gnus-agent-expire: Sorting entries... Done")
+        (gnus-message 7 "gnus-agent-expire: Merging entries... ")
+        (let ((dlist dlist))
+          (while (cdr dlist)           ; I'm not at the end-of-list
+            (if (eq (caar dlist) (caadr dlist))
+                (let ((first (cdr (car dlist)))
+                      (secnd (cdr (cadr dlist))))
+                  (setcar first (or (car first)
+                                    (car secnd))) ; fetch_date
+                  (setq first (cdr first)
+                        secnd (cdr secnd))
+                  (setcar first (or (car first)
+                                    (car secnd))) ; Keep_flag
+                  (setq first (cdr first)
+                        secnd (cdr secnd))
+                  (setcar first (or (car first)
+                                    (car secnd))) ; NOV_entry_marker
+
+                  (setcdr dlist (cddr dlist)))
+              (setq dlist (cdr dlist)))))
+        (gnus-message 7 "gnus-agent-expire: Merging entries... Done")
+
+        (let* ((len (float (length dlist)))
+               (alist (list nil))
+               (tail-alist alist))
+          (while dlist
+            (let ((new-completed (truncate (* 100.0
+                                              (/ (setq cnt (1+ cnt))
+                                                 len))))
+                  message-log-max)
+              (when (> new-completed completed)
+                (setq completed new-completed)
+                (gnus-message 7 "%3d%% completed..."  completed)))
+            (let* ((entry          (car dlist))
+                   (article-number (nth 0 entry))
+                   (fetch-date     (nth 1 entry))
+                   (keep           (nth 2 entry))
+                   (marker         (nth 3 entry)))
+
+              (cond
+               ;; Kept articles are unread, marked, or special.
+               (keep
+                (gnus-agent-message 10
+                                    "gnus-agent-expire: %s:%d: Kept %s article%s."
+                                    group article-number keep (if fetch-date " and file" ""))
+                (when fetch-date
+                  (unless (file-exists-p
+                           (concat dir (number-to-string
+                                        article-number)))
+                    (setf (nth 1 entry) nil)
+                    (gnus-agent-message 3 "gnus-agent-expire cleared \
 download flag on %s:%d as the cached article file is missing."
-                                        group (caar dlist)))
-                  (unless marker
-                    (gnus-message 1 "gnus-agent-expire detected a \
+                                        group (caar dlist)))
+                  (unless marker
+                    (gnus-message 1 "gnus-agent-expire detected a \
 missing NOV entry.  Run gnus-agent-regenerate-group to restore it.")))
-                (gnus-agent-append-to-list
-                 tail-alist
-                 (cons article-number fetch-date)))
-
-               ;; The following articles are READ, UNMARKED, and
-               ;; ORDINARY.  See if they can be EXPIRED!!!
-               ((setq type
-                      (cond
-                       ((not (integerp fetch-date))
-                        'read) ;; never fetched article (may expire
-                       ;; right now)
-                       ((not (file-exists-p
-                              (concat dir (number-to-string
-                                           article-number))))
-                        (setf (nth 1 entry) nil)
-                        'externally-expired) ;; Can't find the cached
-                       ;; article.  Handle case
-                       ;; as though this article
-                       ;; was never fetched.
-
-                       ;; We now have the arrival day, so we see
-                       ;; whether it's old enough to be expired.
-                       ((< fetch-date day)
-                        'expired)
-                       (force
-                        'forced)))
-
-                ;; I found some reason to expire this entry.
-
-                (let ((actions nil))
-                  (when (memq type '(forced expired))
-                    (ignore-errors      ; Just being paranoid.
-                      (let ((file-name (concat dir (number-to-string
-                                                article-number))))
-                        (incf (nth 2 stats) (nth 7 (file-attributes file-name)))
-                        (incf (nth 1 stats))
-                        (delete-file file-name))
-                      (push "expired cached article" actions))
-                    (setf (nth 1 entry) nil)
-                    )
-
-                  (when marker
-                    (push "NOV entry removed" actions)
-                    (goto-char marker)
-
-                    (incf (nth 0 stats))
-
-                    (let ((from (gnus-point-at-bol))
-                          (to (progn (forward-line 1) (point))))
-                      (incf (nth 2 stats) (- to from))
-                      (delete-region from to)))
-
-                  ;; If considering all articles is set, I can only
-                  ;; expire article IDs that are no longer in the
-                  ;; active range (That is, articles that preceed the
-                  ;; first article in the new alist).
-                  (if (and gnus-agent-consider-all-articles
-                           (>= article-number (car active)))
-                      ;; I have to keep this ID in the alist
-                      (gnus-agent-append-to-list
-                       tail-alist (cons article-number fetch-date))
-                    (push (format "Removed %s article number from \
+                (gnus-agent-append-to-list
+                 tail-alist
+                 (cons article-number fetch-date)))
+
+               ;; The following articles are READ, UNMARKED, and
+               ;; ORDINARY.  See if they can be EXPIRED!!!
+               ((setq type
+                      (cond
+                       ((not (integerp fetch-date))
+                        'read) ;; never fetched article (may expire
+                       ;; right now)
+                       ((not (file-exists-p
+                              (concat dir (number-to-string
+                                           article-number))))
+                        (setf (nth 1 entry) nil)
+                        'externally-expired) ;; Can't find the cached
+                       ;; article.  Handle case
+                       ;; as though this article
+                       ;; was never fetched.
+
+                       ;; We now have the arrival day, so we see
+                       ;; whether it's old enough to be expired.
+                       ((< fetch-date day)
+                        'expired)
+                       (force
+                        'forced)))
+
+                ;; I found some reason to expire this entry.
+
+                (let ((actions nil))
+                  (when (memq type '(forced expired))
+                    (ignore-errors     ; Just being paranoid.
+                      (let* ((file-name (nnheader-concat dir (number-to-string
+                                                              article-number)))
+                             (size (float (nth 7 (file-attributes file-name)))))
+                        (incf bytes-freed size)
+                        (incf size-files-deleted size)
+                        (incf files-deleted)
+                        (delete-file file-name))
+                      (push "expired cached article" actions))
+                    (setf (nth 1 entry) nil)
+                    )
+
+                  (when marker
+                    (push "NOV entry removed" actions)
+                    (goto-char marker)
+
+                    (incf nov-entries-deleted)
+
+                    (let ((from (point-at-bol))
+                          (to (progn (forward-line 1) (point))))
+                      (incf bytes-freed (- to from))
+                      (delete-region from to)))
+
+                  ;; If considering all articles is set, I can only
+                  ;; expire article IDs that are no longer in the
+                  ;; active range (That is, articles that preceed the
+                  ;; first article in the new alist).
+                  (if (and gnus-agent-consider-all-articles
+                           (>= article-number (car active)))
+                      ;; I have to keep this ID in the alist
+                      (gnus-agent-append-to-list
+                       tail-alist (cons article-number fetch-date))
+                    (push (format "Removed %s article number from \
 article alist" type) actions))
 
-                 (when actions
-                   (gnus-agent-message 8 "gnus-agent-expire: %s:%d: %s"
-                                       group article-number
-                                       (mapconcat 'identity actions ", ")))))
-               (t
-                (gnus-agent-message
-                 10 "gnus-agent-expire: %s:%d: Article kept as \
+                  (when actions
+                    (gnus-agent-message 8 "gnus-agent-expire: %s:%d: %s"
+                                        group article-number
+                                        (mapconcat 'identity actions ", ")))))
+               (t
+                (gnus-agent-message
+                 10 "gnus-agent-expire: %s:%d: Article kept as \
 expiration tests failed." group article-number)
-                (gnus-agent-append-to-list
-                 tail-alist (cons article-number fetch-date)))
-               )
-
-              ;; Clean up markers as I want to recycle this buffer
-              ;; over several groups.
-              (when marker
-                (set-marker marker nil))
-
-              (setq dlist (cdr dlist))))
-
-          (setq alist (cdr alist))
-
-          (let ((inhibit-quit t))
-            (unless (equal alist gnus-agent-article-alist)
-              (setq gnus-agent-article-alist alist)
-              (gnus-agent-save-alist group)
-
-              ;; The active list changed, set the agent's active range
-              ;; to match the beginning of the list.
-              (if alist
-                  (setcar active (caar alist))))
-
-            (when (buffer-modified-p)
-              (let ((coding-system-for-write
-                     gnus-agent-file-coding-system))
-                (gnus-make-directory dir)
-                (write-region (point-min) (point-max) nov-file nil
-                              'silent)
-                ;; clear the modified flag as that I'm not confused by
-                ;; its status on the next pass through this routine.
-                (set-buffer-modified-p nil)))
-
-            (when (eq articles t)
-              (gnus-summary-update-info))))))))
+                (gnus-agent-append-to-list
+                 tail-alist (cons article-number fetch-date)))
+               )
+
+              ;; Clean up markers as I want to recycle this buffer
+              ;; over several groups.
+              (when marker
+                (set-marker marker nil))
+
+              (setq dlist (cdr dlist))))
+
+          (setq alist (cdr alist))
+
+          (let ((inhibit-quit t))
+            (unless (equal alist gnus-agent-article-alist)
+              (setq gnus-agent-article-alist alist)
+              (gnus-agent-save-alist group))
+
+            (when (buffer-modified-p)
+              (let ((coding-system-for-write
+                     gnus-agent-file-coding-system))
+                (gnus-make-directory dir)
+                (write-region (point-min) (point-max) nov-file nil
+                              'silent)
+                ;; clear the modified flag as that I'm not confused by
+                ;; its status on the next pass through this routine.
+                (set-buffer-modified-p nil)
+                (gnus-agent-update-view-total-fetched-for group t)))
+
+            (when (eq articles t)
+              (gnus-summary-update-info))))
+
+        (when (boundp 'gnus-agent-expire-stats)
+          (let ((stats (symbol-value 'gnus-agent-expire-stats)))
+            (incf (nth 2 stats) bytes-freed)
+            (incf (nth 1 stats) files-deleted)
+            (incf (nth 0 stats) nov-entries-deleted)))
+
+        (gnus-agent-update-files-total-fetched-for group (- size-files-deleted)))))))
 
 (defun gnus-agent-expire (&optional articles group force)
   "Expire all old articles.
@@ -2977,8 +3214,7 @@ articles in every agentized group."))
                         (when active
                           (save-excursion
                             (gnus-agent-expire-group-1
-                             expiring-group overview active articles force)))))
-                    (gnus-agent-write-active active-file orig t))))
+                             expiring-group overview active articles force))))))))
             (kill-buffer overview))
           (gnus-agent-expire-unagentized-dirs)
           (gnus-message 4 (gnus-agent-expire-done-message))))))
@@ -3254,18 +3490,20 @@ has been fetched."
            (set-buffer nntp-server-buffer)
            (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
 
-            ;; Merge the temp buffer with the known headers (found on
-            ;; disk in FILE) into the nntp-server-buffer
+           ;; Merge the temp buffer with the known headers (found on
+           ;; disk in FILE) into the nntp-server-buffer
            (when (and uncached-articles (file-exists-p file))
              (gnus-agent-braid-nov group uncached-articles file))
 
-            ;; Save the new set of known headers to FILE
+           ;; Save the new set of known headers to FILE
            (set-buffer nntp-server-buffer)
            (let ((coding-system-for-write
                   gnus-agent-file-coding-system))
              (gnus-agent-check-overview-buffer)
              (write-region (point-min) (point-max) file nil 'silent))
 
+           (gnus-agent-update-view-total-fetched-for group t)
+
             ;; Update the group's article alist to include the newly
             ;; fetched articles.
            (gnus-agent-load-alist group)
@@ -3308,6 +3546,9 @@ has been fetched."
 (defun gnus-agent-regenerate-group (group &optional reread)
   "Regenerate GROUP.
 If REREAD is t, all articles in the .overview are marked as unread.
+If REREAD is a list, the specified articles will be marked as unread.
+In addition, their NOV entries in .overview will be refreshed using
+the articles' current headers.
 If REREAD is not nil, downloaded articles are marked as unread."
   (interactive
    (list (let ((def (or (gnus-group-group-name)
@@ -3321,212 +3562,210 @@ If REREAD is not nil, downloaded articles are marked as unread."
                  def
                select)))
          (catch 'mark
-           (while (let ((c (read-char-exclusive 
-                            "Mark as unread: (n)one / (a)ll / all (d)ownloaded articles? (n)"
-                            )))
+           (while (let (c
+                        (cursor-in-echo-area t)
+                        (echo-keystrokes 0))
+                    (message "Mark as unread: (n)one / (a)ll / all (d)ownloaded articles? (n) ")
+                    (setq c (read-char-exclusive))
+
                     (cond ((or (eq c ?\r) (eq c ?n) (eq c ?N))
                            (throw 'mark nil))
                           ((or (eq c ?a) (eq c ?A))
                            (throw 'mark t))
                           ((or (eq c ?d) (eq c ?D))
                            (throw 'mark 'some)))
-                    (message "Ignoring unexpected input")
+                    (gnus-message 3 "Ignoring unexpected input")
                     (sit-for 1)
                     t)))))
-
   (when group
-      (gnus-message 5 "Regenerating in %s" group)
-      (let* ((gnus-command-method (or gnus-command-method
-                                      (gnus-find-method-for-group group)))
-             (file (gnus-agent-article-name ".overview" group))
-             (dir (file-name-directory file))
-             point
-             (downloaded (if (file-exists-p dir)
-                             (sort (mapcar (lambda (name) (string-to-int name))
-                                           (directory-files dir nil "^[0-9]+$" t))
-                                   '>)
-                           (progn (gnus-make-directory dir) nil)))
-             dl nov-arts
-             alist header
-             regenerated)
-
-        (mm-with-unibyte-buffer
-          (if (file-exists-p file)
-              (let ((nnheader-file-coding-system
-                     gnus-agent-file-coding-system))
-                (nnheader-insert-file-contents file)))
-          (set-buffer-modified-p nil)
-
-          ;; Load the article IDs found in the overview file.  As a
-          ;; side-effect, validate the file contents.
-          (let ((load t))
-            (while load
-              (setq load nil)
-              (goto-char (point-min))
-              (while (< (point) (point-max))
-                (cond ((and (looking-at "[0-9]+\t")
-                            (<= (- (match-end 0) (match-beginning 0)) 9))
-                       (push (read (current-buffer)) nov-arts)
-                       (forward-line 1)
-                       (let ((l1 (car nov-arts))
-                             (l2 (cadr nov-arts)))
-                         (cond ((not l2)
-                                nil)
-                               ((< l1 l2)
-                                (gnus-message 3 "gnus-agent-regenerate-group: NOV\
+    (gnus-message 5 "Regenerating in %s" group)
+    (let* ((gnus-command-method (or gnus-command-method
+                                   (gnus-find-method-for-group group)))
+          (file (gnus-agent-article-name ".overview" group))
+          (dir (file-name-directory file))
+          point
+          (downloaded (if (file-exists-p dir)
+                          (sort (mapcar (lambda (name) (string-to-int name))
+                                        (directory-files dir nil "^[0-9]+$" t))
+                                '>)
+                        (progn (gnus-make-directory dir) nil)))
+          dl nov-arts
+          alist header
+          regenerated)
+
+      (mm-with-unibyte-buffer
+       (if (file-exists-p file)
+           (let ((nnheader-file-coding-system
+                  gnus-agent-file-coding-system))
+             (nnheader-insert-file-contents file)))
+       (set-buffer-modified-p nil)
+
+       ;; Load the article IDs found in the overview file.  As a
+       ;; side-effect, validate the file contents.
+       (let ((load t))
+         (while load
+           (setq load nil)
+           (goto-char (point-min))
+           (while (< (point) (point-max))
+             (cond ((and (looking-at "[0-9]+\t")
+                         (<= (- (match-end 0) (match-beginning 0)) 9))
+                    (push (read (current-buffer)) nov-arts)
+                    (forward-line 1)
+                    (let ((l1 (car nov-arts))
+                          (l2 (cadr nov-arts)))
+                      (cond ((and (listp reread) (memq l1 reread))
+                             (gnus-delete-line)
+                             (setq nov-arts (cdr nov-arts))
+                             (gnus-message 4 "gnus-agent-regenerate-group: NOV\
+entry of article %s deleted." l1))
+                            ((not l2)
+                             nil)
+                            ((< l1 l2)
+                             (gnus-message 3 "gnus-agent-regenerate-group: NOV\
  entries are NOT in ascending order.")
-                                ;; Don't sort now as I haven't verified
-                                ;; that every line begins with a number
-                                (setq load t))
-                               ((= l1 l2)
-                                (forward-line -1)
-                                (gnus-message 4 "gnus-agent-regenerate-group: NOV\
+                             ;; Don't sort now as I haven't verified
+                             ;; that every line begins with a number
+                             (setq load t))
+                            ((= l1 l2)
+                             (forward-line -1)
+                             (gnus-message 4 "gnus-agent-regenerate-group: NOV\
  entries contained duplicate of article %s.     Duplicate deleted." l1)
-                                (gnus-delete-line)
-                                (setq nov-arts (cdr nov-arts))))))
-                      (t
-                       (gnus-message 1 "gnus-agent-regenerate-group: NOV\
+                             (gnus-delete-line)
+                             (setq nov-arts (cdr nov-arts))))))
+                   (t
+                    (gnus-message 1 "gnus-agent-regenerate-group: NOV\
  entries contained line that did not begin with an article number.  Deleted\
  line.")
-                       (gnus-delete-line))))
-              (if load
-                  (progn
-                    (gnus-message 5 "gnus-agent-regenerate-group: Sorting NOV\
+                    (gnus-delete-line))))
+           (when load
+             (gnus-message 5 "gnus-agent-regenerate-group: Sorting NOV\
  entries into ascending order.")
-                    (sort-numeric-fields 1 (point-min) (point-max))
-                    (setq nov-arts nil)))))
-          (gnus-agent-check-overview-buffer)
-
-          ;; Construct a new article alist whose nodes match every header
-          ;; in the .overview file.  As a side-effect, missing headers are
-          ;; reconstructed from the downloaded article file.
-          (while (or downloaded nov-arts)
-            (cond ((and downloaded
-                        (or (not nov-arts)
-                            (> (car downloaded) (car nov-arts))))
-                   ;; This entry is missing from the overview file
-                   (gnus-message 3 "Regenerating NOV %s %d..." group
-                                 (car downloaded))
-                   (let ((file (concat dir (number-to-string (car downloaded)))))
-                     (mm-with-unibyte-buffer
-                       (nnheader-insert-file-contents file)
-                       (nnheader-remove-body)
-                       (setq header (nnheader-parse-naked-head)))
-                     (mail-header-set-number header (car downloaded))
-                     (if nov-arts
-                         (let ((key (concat "^" (int-to-string (car nov-arts))
-                                            "\t")))
-                           (or (re-search-backward key nil t)
-                               (re-search-forward key))
-                           (forward-line 1))
-                       (goto-char (point-min)))
-                     (nnheader-insert-nov header))
-                   (setq nov-arts (cons (car downloaded) nov-arts)))
-                  ((eq (car downloaded) (car nov-arts))
-                   ;; This entry in the overview has been downloaded
-                   (push (cons (car downloaded)
-                               (time-to-days
-                                (nth 5 (file-attributes
-                                        (concat dir (number-to-string
-                                                     (car downloaded))))))) alist)
-                   (setq downloaded (cdr downloaded))
-                   (setq nov-arts (cdr nov-arts)))
-                  (t
-                   ;; This entry in the overview has not been downloaded
-                   (push (cons (car nov-arts) nil) alist)
-                   (setq nov-arts (cdr nov-arts)))))
-
-          ;; When gnus-agent-consider-all-articles is set,
-          ;; gnus-agent-regenerate-group should NOT remove article IDs from
-          ;; the alist.  Those IDs serve as markers to indicate that an
-          ;; attempt has been made to fetch that article's header.
-
-          ;; When gnus-agent-consider-all-articles is NOT set,
-          ;; gnus-agent-regenerate-group can remove the article ID of every
-          ;; article (with the exception of the last ID in the list - it's
-          ;; special) that no longer appears in the overview.  In this
-          ;; situtation, the last article ID in the list implies that it,
-          ;; and every article ID preceeding it, have been fetched from the
-          ;; server.
-
-          (if gnus-agent-consider-all-articles
-              ;; Restore all article IDs that were not found in the overview file.
-              (let* ((n (cons nil alist))
-                     (merged n)
-                     (o (gnus-agent-load-alist group)))
-                (while o
-                  (let ((nID (caadr n))
-                        (oID (caar o)))
-                    (cond ((not nID)
-                           (setq n (setcdr n (list (list oID))))
-                           (setq o (cdr o)))
-                          ((< oID nID)
-                           (setcdr n (cons (list oID) (cdr n)))
-                           (setq o (cdr o)))
-                          ((= oID nID)
-                           (setq o (cdr o))
-                           (setq n (cdr n)))
-                          (t
-                           (setq n (cdr n))))))
-                (setq alist (cdr merged)))
-            ;; Restore the last article ID if it is not already in the new alist
-            (let ((n (last alist))
-                  (o (last (gnus-agent-load-alist group))))
-              (cond ((not o)
-                     nil)
-                    ((not n)
-                     (push (cons (caar o) nil) alist))
-                    ((< (caar n) (caar o))
-                     (setcdr n (list (car o)))))))
-
-          (let ((inhibit-quit t))
-            (if (setq regenerated (buffer-modified-p))
-                (let ((coding-system-for-write gnus-agent-file-coding-system))
-                  (write-region (point-min) (point-max) file nil 'silent)))
-
-            (setq regenerated (or regenerated
-                                  (and reread gnus-agent-article-alist)
-                                  (not (equal alist gnus-agent-article-alist))))
-
-            (setq gnus-agent-article-alist alist)
-
-            (when regenerated
-              (gnus-agent-save-alist group)
+             (sort-numeric-fields 1 (point-min) (point-max))
+             (setq nov-arts nil))))
+       (gnus-agent-check-overview-buffer)
+
+       ;; Construct a new article alist whose nodes match every header
+       ;; in the .overview file.  As a side-effect, missing headers are
+       ;; reconstructed from the downloaded article file.
+       (while (or downloaded nov-arts)
+         (cond ((and downloaded
+                     (or (not nov-arts)
+                         (> (car downloaded) (car nov-arts))))
+                ;; This entry is missing from the overview file
+                (gnus-message 3 "Regenerating NOV %s %d..." group
+                              (car downloaded))
+                (let ((file (concat dir (number-to-string (car downloaded)))))
+                  (mm-with-unibyte-buffer
+                    (nnheader-insert-file-contents file)
+                    (nnheader-remove-body)
+                    (setq header (nnheader-parse-naked-head)))
+                  (mail-header-set-number header (car downloaded))
+                  (if nov-arts
+                      (let ((key (concat "^" (int-to-string (car nov-arts))
+                                         "\t")))
+                        (or (re-search-backward key nil t)
+                            (re-search-forward key))
+                        (forward-line 1))
+                    (goto-char (point-min)))
+                  (nnheader-insert-nov header))
+                (setq nov-arts (cons (car downloaded) nov-arts)))
+               ((eq (car downloaded) (car nov-arts))
+                ;; This entry in the overview has been downloaded
+                (push (cons (car downloaded)
+                            (time-to-days
+                             (nth 5 (file-attributes
+                                     (concat dir (number-to-string
+                                                  (car downloaded))))))) alist)
+                (setq downloaded (cdr downloaded))
+                (setq nov-arts (cdr nov-arts)))
+               (t
+                ;; This entry in the overview has not been downloaded
+                (push (cons (car nov-arts) nil) alist)
+                (setq nov-arts (cdr nov-arts)))))
+
+       ;; When gnus-agent-consider-all-articles is set,
+       ;; gnus-agent-regenerate-group should NOT remove article IDs from
+       ;; the alist.  Those IDs serve as markers to indicate that an
+       ;; attempt has been made to fetch that article's header.
+
+       ;; When gnus-agent-consider-all-articles is NOT set,
+       ;; gnus-agent-regenerate-group can remove the article ID of every
+       ;; article (with the exception of the last ID in the list - it's
+       ;; special) that no longer appears in the overview.  In this
+       ;; situtation, the last article ID in the list implies that it,
+       ;; and every article ID preceeding it, have been fetched from the
+       ;; server.
+
+       (if gnus-agent-consider-all-articles
+           ;; Restore all article IDs that were not found in the overview file.
+           (let* ((n (cons nil alist))
+                  (merged n)
+                  (o (gnus-agent-load-alist group)))
+             (while o
+               (let ((nID (caadr n))
+                     (oID (caar o)))
+                 (cond ((not nID)
+                        (setq n (setcdr n (list (list oID))))
+                        (setq o (cdr o)))
+                       ((< oID nID)
+                        (setcdr n (cons (list oID) (cdr n)))
+                        (setq o (cdr o)))
+                       ((= oID nID)
+                        (setq o (cdr o))
+                        (setq n (cdr n)))
+                       (t
+                        (setq n (cdr n))))))
+             (setq alist (cdr merged)))
+         ;; Restore the last article ID if it is not already in the new alist
+         (let ((n (last alist))
+               (o (last (gnus-agent-load-alist group))))
+           (cond ((not o)
+                  nil)
+                 ((not n)
+                  (push (cons (caar o) nil) alist))
+                 ((< (caar n) (caar o))
+                  (setcdr n (list (car o)))))))
+
+       (let ((inhibit-quit t))
+         (if (setq regenerated (buffer-modified-p))
+             (let ((coding-system-for-write gnus-agent-file-coding-system))
+               (write-region (point-min) (point-max) file nil 'silent)))
+
+         (setq regenerated (or regenerated
+                               (and reread gnus-agent-article-alist)
+                               (not (equal alist gnus-agent-article-alist))))
+
+         (setq gnus-agent-article-alist alist)
+
+         (when regenerated
+           (gnus-agent-save-alist group)
        
-              ;; I have to alter the group's active range NOW as
-              ;; gnus-make-ascending-articles-unread will use it to
-              ;; recalculate the number of unread articles in the group
-
-              (let ((group (gnus-group-real-name group))
-                    (group-active (gnus-active group)))
-                (when group-active
-                  (let ((new-min (or (caar gnus-agent-article-alist)
-                                     (car group-active)))
-                        (new-max (or (caar (last gnus-agent-article-alist))
-                                     (cdr group-active))))
-
-                    (when (< new-min (car group-active))
-                      (setcar group-active new-min))
-             
-                    (when (> new-max (cdr group-active))
-                      (setcdr group-active new-max))))))))
-
-        (when (and reread gnus-agent-article-alist)
-          (gnus-make-ascending-articles-unread
-           group
-           (delq nil (mapcar (function (lambda (c)
-                                         (cond ((eq reread t)
-                                                (car c))
-                                               ((cdr c)
-                                                (car c)))))
-                             gnus-agent-article-alist)))
-
-          (when (gnus-buffer-live-p gnus-group-buffer)
-            (gnus-group-update-group group t)
-            (sit-for 0)))
-
-        (gnus-message 5 nil)
-        regenerated)))
+           ;; I have to alter the group's active range NOW as
+           ;; gnus-make-ascending-articles-unread will use it to
+           ;; recalculate the number of unread articles in the group
+
+           (let ((group (gnus-group-real-name group))
+                 (group-active (or (gnus-active group)
+                                   (gnus-activate-group group))))
+             (gnus-agent-possibly-alter-active group group-active)))))
+
+      (when (and reread gnus-agent-article-alist)
+       (gnus-make-ascending-articles-unread
+        group
+        (if (listp reread)
+            reread
+          (delq nil (mapcar (function (lambda (c)
+                                        (cond ((eq reread t)
+                                               (car c))
+                                              ((cdr c)
+                                               (car c)))))
+                            gnus-agent-article-alist))))
+
+       (when regenerated
+           (gnus-agent-update-files-total-fetched-for group nil)))
+
+      (gnus-message 5 nil)
+      regenerated)))
 
 ;;;###autoload
 (defun gnus-agent-regenerate (&optional clean reread)
@@ -3571,48 +3810,76 @@ If CLEAN, obsolete (ignore)."
 (defun gnus-agent-group-covered-p (group)
   (gnus-agent-method-p (gnus-group-method group)))
 
-(add-hook 'gnus-group-prepare-hook
-          (lambda ()
-            'gnus-agent-do-once
-
-            (when (listp gnus-agent-expire-days)
-              (beep)
-              (beep)
-              (gnus-message 1 "WARNING: gnus-agent-expire-days no longer\
- supports being set to a list.")(sleep-for 3)
-              (gnus-message 1 "Change your configuration to set it to an\
- integer.")(sleep-for 3)
-              (gnus-message 1 "I am now setting group parameters on each\
- group to match the configuration that the list offered.")
-
-              (save-excursion
-                (let ((groups (gnus-group-listed-groups)))
-                  (while groups
-                    (let* ((group (pop groups))
-                           (days gnus-agent-expire-days)
-                           (day (catch 'found
-                                  (while days
-                                    (when (eq 0 (string-match
-                                                 (caar days)
-                                                 group))
-                                      (throw 'found (cadar days)))
-                                    (setq days (cdr days)))
-                                  nil)))
-                      (when day
-                        (gnus-group-set-parameter group 'agent-days-until-old
-                                                  day))))))
-
-              (let ((h gnus-group-prepare-hook))
-                (while h
-                  (let ((func (pop h)))
-                    (when (and (listp func)
-                               (eq (cadr (caddr func)) 'gnus-agent-do-once))
-                      (remove-hook 'gnus-group-prepare-hook func)
-                      (setq h nil)))))
-
-              (gnus-message 1 "I have finished setting group parameters on\
- each group. You may now customize your groups and/or topics to control the\
- agent."))))
+(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
+agent has fetched."
+  (when gnus-agent-total-fetched-hashtb
+    (gnus-agent-with-refreshed-group
+     group
+     ;; if null, gnus-agent-group-pathname will calc method.
+     (let* ((gnus-command-method method) 
+           (path (or path (gnus-agent-group-pathname group)))
+           (entry (or (gnus-gethash path gnus-agent-total-fetched-hashtb)
+                      (gnus-sethash path (make-list 3 0) 
+                                    gnus-agent-total-fetched-hashtb))))
+       (when (listp delta)
+        (unless delta
+          (setq delta (directory-files path nil "^-?[0-9]+$" t)))
+
+        (let ((sum 0.0)
+              file)
+          (while (setq file (pop delta))
+            (incf sum (float (or (nth 7 (file-attributes 
+                                         (nnheader-concat 
+                                          path 
+                                          (if (numberp file)
+                                              (number-to-string file)
+                                            file)))) 0))))
+          (setq delta sum)))
+
+       (setq gnus-agent-need-update-total-fetched-for t)
+       (incf (nth 2 entry) delta)))))
+
+(defun gnus-agent-update-view-total-fetched-for 
+  (group agent-over &optional method path)
+  "Update, or set, the total disk space used by the .agentview and
+.overview files.  These files are calculated separately as they can be
+modified."
+  (when gnus-agent-total-fetched-hashtb
+    (gnus-agent-with-refreshed-group
+     group
+     ;; if null, gnus-agent-group-pathname will calc method.
+     (let* ((gnus-command-method method) 
+           (path (or path (gnus-agent-group-pathname group)))
+           (entry (or (gnus-gethash path gnus-agent-total-fetched-hashtb)
+                      (gnus-sethash path (make-list 3 0) 
+                                    gnus-agent-total-fetched-hashtb)))
+           (size (or (nth 7 (file-attributes 
+                             (nnheader-concat
+                              path (if agent-over 
+                                       ".overview"
+                                     ".agentview"))))
+                     0)))
+       (setq gnus-agent-need-update-total-fetched-for t)
+       (setf (nth (if agent-over 1 0) entry) size)))))
+
+(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)))
+
+  ;; 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 f1e647f..f776b0d 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-art.el --- article mode commands for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 (autoload 'gnus-msg-mail "gnus-msg" nil t)
 (autoload 'gnus-button-mailto "gnus-msg")
 (autoload 'gnus-button-reply "gnus-msg" nil t)
+(autoload 'ansi-color-apply-on-region "ansi-color")
 
 (defgroup gnus-article nil
   "Article display."
-  :link '(custom-manual "(gnus)The Article Buffer")
+  :link '(custom-manual "(gnus)Article Buffer")
   :group 'gnus)
 
 (defgroup gnus-article-treat nil
@@ -754,6 +755,7 @@ When nil (the default value), then some MIME parts do not get buttons,
 as described by the variables `gnus-buttonized-mime-types' and
 `gnus-unbuttonized-mime-types'."
   :version "21.3"
+  :group 'gnus-article-mime
   :type 'boolean)
 
 (defcustom gnus-body-boundary-delimiter "_"
@@ -793,7 +795,7 @@ on parts -- for instance, adding Vcard info to a database."
   "An alist of MIME types to functions to display them."
   :version "21.1"
   :group 'gnus-article-mime
-  :type 'alist)
+  :type '(repeat (cons :format "%v" (string :tag "MIME type") function)))
 
 (defcustom gnus-article-date-lapsed-new-header nil
   "Whether the X-Sent and Date headers can coexist.
@@ -893,8 +895,7 @@ See Info node `(gnus)Customizing Articles' for details."
 
 (defcustom gnus-treat-emphasize
   (and (or window-system
-          (featurep 'xemacs)
-          (>= (string-to-number emacs-version) 21))
+          (featurep 'xemacs))
        50000)
   "Emphasize text.
 Valid values are nil, t, `head', `last', an integer or a predicate.
@@ -1147,6 +1148,14 @@ See Info node `(gnus)Customizing Articles' for details."
   :type gnus-article-treat-custom)
 (put 'gnus-treat-overstrike 'highlight t)
 
+(defcustom gnus-treat-ansi-sequences (if (locate-library "ansi-color") t)
+  "Treat ANSI SGR control sequences.
+Valid values are nil, t, `head', `last', an integer or a predicate.
+See Info node `(gnus)Customizing Articles' for details."
+  :group 'gnus-article-treat
+  :link '(custom-manual "(gnus)Customizing Articles")
+  :type gnus-article-treat-custom)
+
 (make-obsolete-variable 'gnus-treat-display-xface
                        'gnus-treat-display-x-face)
 
@@ -1366,6 +1375,13 @@ This requires GNU Libidn, and by default only enabled if it is found."
   '("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)
@@ -1409,6 +1425,7 @@ This requires GNU Libidn, and by default only enabled if it is found."
     (gnus-treat-strip-multiple-blank-lines
      gnus-article-strip-multiple-blank-lines)
     (gnus-treat-overstrike gnus-article-treat-overstrike)
+    (gnus-treat-ansi-sequences gnus-article-treat-ansi-sequences)
     (gnus-treat-unfold-headers gnus-article-treat-unfold-headers)
     (gnus-treat-fold-headers gnus-article-treat-fold-headers)
     (gnus-treat-fold-newsgroups gnus-article-treat-fold-newsgroups)
@@ -1451,6 +1468,8 @@ Initialized from `text-mode-syntax-table.")
 
 (defvar gnus-inhibit-hiding nil)
 
+(defvar gnus-article-edit-mode nil)
+
 ;;; Macros for dealing with the article buffer.
 
 (defmacro gnus-with-article-headers (&rest forms)
@@ -1629,7 +1648,7 @@ always hide."
              (while (re-search-forward "^[^: \t]+:[ \t]*\n[^ \t]" nil t)
                (forward-line -1)
                (gnus-article-hide-text-type
-                (gnus-point-at-bol)
+                (point-at-bol)
                 (progn
                   (end-of-line)
                   (if (re-search-forward "^[^ \t]" nil t)
@@ -1755,7 +1774,7 @@ always hide."
     (goto-char (point-min))
     (when (re-search-forward (concat "^" header ":") nil t)
       (gnus-article-hide-text-type
-       (gnus-point-at-bol)
+       (point-at-bol)
        (progn
         (end-of-line)
         (if (re-search-forward "^[^ \t]" nil t)
@@ -1776,7 +1795,7 @@ always hide."
        (article-narrow-to-head)
        (while (not (eobp))
          (cond
-          ((< (setq column (- (gnus-point-at-eol) (point)))
+          ((< (setq column (- (point-at-eol) (point)))
               gnus-article-normalized-header-length)
            (end-of-line)
            (insert (make-string
@@ -1787,7 +1806,7 @@ always hide."
             (progn
               (forward-char gnus-article-normalized-header-length)
               (point))
-            (gnus-point-at-eol)
+            (point-at-eol)
             'invisible t))
           (t
            ;; Do nothing.
@@ -1862,6 +1881,14 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
              (put-text-property
               (point) (1+ (point)) 'face 'underline)))))))))
 
+(defun article-treat-ansi-sequences ()
+  "Translate ANSI SGR control sequences into overlays or extents."
+  (interactive)
+  (save-excursion
+    (when (article-goto-body)
+      (let ((buffer-read-only nil))
+       (ansi-color-apply-on-region (point) (point-max))))))
+
 (defun gnus-article-treat-unfold-headers ()
   "Unfold folded message headers.
 Only the headers that fit into the current window width will be
@@ -1958,7 +1985,7 @@ unfolded."
            (end-of-line)
            (when (>= (current-column) (min fill-column width))
              (narrow-to-region (min (1+ (point)) (point-max))
-                               (gnus-point-at-bol))
+                               (point-at-bol))
               (let ((goback (point-marker)))
                 (fill-paragraph nil)
                 (goto-char (marker-position goback)))
@@ -2000,11 +2027,14 @@ unfolded."
         (while (and (not (bobp))
                     (looking-at "^[ \t]*$")
                     (not (gnus-annotation-in-region-p
-                          (point) (gnus-point-at-eol))))
+                          (point) (point-at-eol))))
           (forward-line -1))
         (forward-line 1)
         (point))))))
 
+(eval-when-compile
+  (defvar gnus-face-properties-alist))
+
 (defun article-display-face ()
   "Display any Face headers in the header."
   (interactive)
@@ -2028,12 +2058,14 @@ unfolded."
            (save-restriction
              (mail-narrow-to-head)
              (while (gnus-article-goto-header "Face")
-               (push (mail-header-field-value) faces))))
+               (setq faces (nconc faces (list (mail-header-field-value)))))))
          (while (setq face (pop faces))
            (let ((png (gnus-convert-face-to-png face))
                  image)
              (when png
-               (setq image (gnus-create-image png 'png t))
+               (setq image
+                     (apply 'gnus-create-image png 'png t
+                            (cdr (assq 'png gnus-face-properties-alist))))
                (gnus-article-goto-header "from")
                (when (bobp)
                  (insert "From: [no `from' set]\n")
@@ -2110,14 +2142,12 @@ unfolded."
 (defun article-decode-mime-words ()
   "Decode all MIME-encoded words in the article."
   (interactive)
-  (save-excursion
-    (set-buffer gnus-article-buffer)
+  (gnus-with-article-buffer
     (let ((inhibit-point-motion-hooks t)
-         buffer-read-only
          (mail-parse-charset gnus-newsgroup-charset)
          (mail-parse-ignored-charsets
-          (save-excursion (set-buffer gnus-summary-buffer)
-                          gnus-newsgroup-ignored-charsets)))
+          (with-current-buffer gnus-summary-buffer
+            gnus-newsgroup-ignored-charsets)))
       (mail-decode-encoded-word-region (point-min) (point-max)))))
 
 (defun article-decode-charset (&optional prompt)
@@ -2382,16 +2412,17 @@ If READ-CHARSET, ask for a coding system."
   (mm-setup-w3m)
   (save-restriction
     (narrow-to-region (point) (point-max))
-    (let ((w3m-safe-url-regexp (if mm-inline-text-html-with-images
-                                  nil
-                                "\\`cid:"))
+    (let ((w3m-safe-url-regexp mm-w3m-safe-url-regexp)
          w3m-force-redisplay)
       (w3m-region (point-min) (point-max)))
-    (when mm-inline-text-html-with-w3m-keymap
+    (when (and mm-inline-text-html-with-w3m-keymap
+              (boundp 'w3m-minor-mode-map)
+              w3m-minor-mode-map)
       (add-text-properties
        (point-min) (point-max)
-       (nconc (mm-w3m-local-map-property)
-             '(mm-inline-text-html-with-w3m t))))))
+       (list 'keymap w3m-minor-mode-map
+            ;; Put the mark meaning this part was rendered by emacs-w3m.
+            'mm-inline-text-html-with-w3m t)))))
 
 (defun article-hide-list-identifiers ()
   "Remove list identifies from the Subject header.
@@ -2493,11 +2524,9 @@ always hide."
   "Translate article using an online translation service."
   (interactive)
   (require 'babel)
-  (save-excursion
-    (set-buffer gnus-article-buffer)
+  (gnus-with-article-buffer
     (when (article-goto-body)
-      (let* ((buffer-read-only nil)
-            (start (point))
+      (let* ((start (point))
             (end (point-max))
             (orig (buffer-substring start end))
             (trans (babel-as-string orig)))
@@ -2761,11 +2790,11 @@ should replace the \"Date:\" one, or should be added below it."
       (save-restriction
        (article-narrow-to-head)
        (when (re-search-forward tdate-regexp nil t)
-         (setq bface (get-text-property (gnus-point-at-bol) 'face)
-               date (or (get-text-property (gnus-point-at-bol)
+         (setq bface (get-text-property (point-at-bol) 'face)
+               date (or (get-text-property (point-at-bol)
                                            'original-date)
                         date)
-               eface (get-text-property (1- (gnus-point-at-eol)) 'face))
+               eface (get-text-property (1- (point-at-eol)) 'face))
          (forward-line 1))
        (when (and date (not (string= date "")))
          (goto-char (point-min))
@@ -2773,19 +2802,18 @@ should replace the \"Date:\" one, or should be added below it."
            ;; Delete any old Date headers.
            (while (re-search-forward date-regexp nil t)
              (if pos
-                 (delete-region (progn (beginning-of-line) (point))
+                 (delete-region (point-at-bol)
                                 (progn (gnus-article-forward-header)
                                        (point)))
-               (delete-region (progn (beginning-of-line) (point))
-                                (progn (gnus-article-forward-header)
-                                       (forward-char -1)
-                                       (point)))
+               (delete-region (point-at-bol)
+                              (progn (gnus-article-forward-header)
+                                     (forward-char -1)
+                                     (point)))
                (setq pos (point))))
            (when (and (not pos)
                       (re-search-forward tdate-regexp nil t))
              (forward-line 1))
-           (when pos
-             (goto-char pos))
+           (gnus-goto-char pos)
            (insert (article-make-date-line date (or type 'ut)))
            (unless pos
              (insert "\n")
@@ -2964,7 +2992,7 @@ is to run."
     (setq n 1))
   (gnus-stop-date-timer)
   (setq article-lapsed-timer
-       (nnheader-run-at-time 1 n 'article-update-date-lapsed)))
+       (run-at-time 1 n 'article-update-date-lapsed)))
 
 (defun gnus-stop-date-timer ()
   "Stop the X-Sent timer."
@@ -3285,17 +3313,9 @@ The directory to save in defaults to `gnus-article-save-directory'."
       (shell-command-on-region (point-min) (point-max) command nil)))
   (setq gnus-last-shell-command command))
 
-(defmacro gnus-read-string (prompt &optional initial-contents history
-                           default-value)
-  "Like `read-string' but allow for older XEmacsen that don't have the 5th arg."
-  (if (and (featurep 'xemacs)
-          (< emacs-minor-version 2))
-      `(read-string ,prompt ,initial-contents ,history)
-    `(read-string ,prompt ,initial-contents ,history ,default-value)))
-
 (defun gnus-summary-pipe-to-muttprint (&optional command)
   "Pipe this article to muttprint."
-  (setq command (gnus-read-string
+  (setq command (read-string
                 "Print using command: " gnus-summary-muttprint-program
                 nil gnus-summary-muttprint-program))
   (gnus-summary-save-in-pipe command))
@@ -3418,8 +3438,8 @@ If variable `gnus-use-long-file-name' is non-nil, it is
                (message-narrow-to-head)
                (goto-char (point-max))
                (forward-line -1)
-               (setq bface (get-text-property (gnus-point-at-bol) 'face)
-                     eface (get-text-property (1- (gnus-point-at-eol)) 'face))
+               (setq bface (get-text-property (point-at-bol) 'face)
+                     eface (get-text-property (1- (point-at-eol)) 'face))
                (message-remove-header "X-Gnus-PGP-Verify")
                (if (re-search-forward "^X-PGP-Sig:" nil t)
                    (forward-line)
@@ -3470,6 +3490,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
      article-verify-cancel-lock
      article-hide-boring-headers
      article-treat-overstrike
+     article-treat-ansi-sequences
      article-fill-long-lines
      article-capitalize-sentences
      article-remove-cr
@@ -3570,6 +3591,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
        ["Hide signature" gnus-article-hide-signature t]
        ["Hide citation" gnus-article-hide-citation t]
        ["Treat overstrike" gnus-article-treat-overstrike t]
+       ["Treat ANSI sequences" gnus-article-treat-ansi-sequences t]
        ["Remove carriage return" gnus-article-remove-cr t]
        ["Remove leading whitespace" gnus-article-remove-leading-whitespace t]
        ["Remove quoted-unreadable" gnus-article-de-quoted-unreadable t]
@@ -3877,9 +3899,6 @@ General format specifiers can also be used.  See Info node
 
 (defvar gnus-mime-button-map
   (let ((map (make-sparse-keymap)))
-    (unless (>= (string-to-number emacs-version) 21)
-      ;; XEmacs doesn't care.
-      (set-keymap-parent map gnus-article-mode-map))
     (define-key map gnus-mouse-2 'gnus-article-push-button)
     (define-key map gnus-down-mouse-3 'gnus-mime-button-menu)
     (dolist (c gnus-mime-button-commands)
@@ -3893,22 +3912,6 @@ General format specifiers can also be used.  See Info node
                (vector (caddr c) (car c) :enable t))
              gnus-mime-button-commands)))
 
-(eval-when-compile
-  (define-compiler-macro popup-menu (&whole form
-                                           menu &optional position prefix)
-    (if (and (fboundp 'popup-menu)
-            (not (memq 'popup-menu (assoc "lmenu" load-history))))
-       form
-      ;; Gnus is probably running under Emacs 20.
-      `(let* ((menu (cdr ,menu))
-             (response (x-popup-menu
-                        t (list (car menu)
-                                (cons "" (mapcar (lambda (c)
-                                                   (cons (caddr c) (car c)))
-                                                 (cdr menu)))))))
-        (if response
-            (call-interactively (nth 3 (assq response menu))))))))
-
 (defun gnus-mime-button-menu (event prefix)
  "Construct a context-sensitive menu of MIME commands."
  (interactive "e\nP")
@@ -3922,8 +3925,7 @@ General format specifiers can also be used.  See Info node
 (defun gnus-mime-view-all-parts (&optional handles)
   "View all the MIME parts."
   (interactive)
-  (save-current-buffer
-    (set-buffer gnus-article-buffer)
+  (with-current-buffer gnus-article-buffer
     (let ((handles (or handles gnus-article-mime-handles))
          (mail-parse-charset gnus-newsgroup-charset)
          (mail-parse-ignored-charsets
@@ -3937,76 +3939,95 @@ General format specifiers can also be used.  See Info node
          (delete-region (point) (point-max))
          (mm-display-parts handles))))))
 
+(eval-when-compile
+  (defsubst gnus-article-edit-part (handles)
+    "Edit an article in order to delete a mime part.
+This function is exclusively used by `gnus-mime-save-part-and-strip'
+and `gnus-mime-delete-part', and not provided at run-time normally."
+    (gnus-article-edit-article
+     `(lambda ()
+       (erase-buffer)
+       (let ((mail-parse-charset (or gnus-article-charset
+                                     ',gnus-newsgroup-charset))
+             (mail-parse-ignored-charsets
+              (or gnus-article-ignored-charsets
+                  ',gnus-newsgroup-ignored-charsets))
+             (mbl mml-buffer-list))
+         (setq mml-buffer-list nil)
+         (insert-buffer gnus-original-article-buffer)
+         (mime-to-mml ',handles)
+         (setq gnus-article-mime-handles nil)
+         (let ((mbl1 mml-buffer-list))
+           (setq mml-buffer-list mbl)
+           (set (make-local-variable 'mml-buffer-list) mbl1))
+         (gnus-make-local-hook 'kill-buffer-hook)
+         (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)))
+     `(lambda (no-highlight)
+       (let ((mail-parse-charset (or gnus-article-charset
+                                     ',gnus-newsgroup-charset))
+             (message-options message-options)
+             (message-options-set-recipient)
+             (mail-parse-ignored-charsets
+              (or gnus-article-ignored-charsets
+                  ',gnus-newsgroup-ignored-charsets)))
+         (mml-to-mime)
+         (mml-destroy-buffers)
+         (remove-hook 'kill-buffer-hook
+                      'mml-destroy-buffers t)
+         (kill-local-variable 'mml-buffer-list))
+       (gnus-summary-edit-article-done
+        ,(or (mail-header-references gnus-current-headers) "")
+        ,(gnus-group-read-only-p)
+        ,gnus-summary-buffer no-highlight)))
+    (gnus-article-edit-done)
+    (gnus-summary-expand-window)
+    (gnus-summary-show-article)))
+
 (defun gnus-mime-save-part-and-strip ()
   "Save the MIME part under point then replace it with an external body."
   (interactive)
   (gnus-article-check-buffer)
-  (let* ((data (get-text-property (point) 'gnus-data))
-        file param
-        (handles gnus-article-mime-handles))
-    (if (mm-multiple-handles gnus-article-mime-handles)
-       (error "This function is not implemented"))
-    (setq file (and data (mm-save-part data)))
-    (when file
-      (with-current-buffer (mm-handle-buffer data)
-       (erase-buffer)
-       (insert "Content-Type: " (mm-handle-media-type data))
-       (mml-insert-parameter-string (cdr (mm-handle-type data))
-                                    '(charset))
-       (insert "\n")
-       (insert "Content-ID: " (message-make-message-id) "\n")
-       (insert "Content-Transfer-Encoding: binary\n")
-       (insert "\n"))
-      (setcdr data
-             (cdr (mm-make-handle nil
-                                  `("message/external-body"
-                                    (access-type . "LOCAL-FILE")
-                                    (name . ,file)))))
-      (set-buffer gnus-summary-buffer)
-      (gnus-article-edit-article
-       `(lambda ()
-          (erase-buffer)
-          (let ((mail-parse-charset (or gnus-article-charset
-                                        ',gnus-newsgroup-charset))
-                (mail-parse-ignored-charsets
-                 (or gnus-article-ignored-charsets
-                     ',gnus-newsgroup-ignored-charsets))
-                (mbl mml-buffer-list))
-            (setq mml-buffer-list nil)
-            (insert-buffer gnus-original-article-buffer)
-            (mime-to-mml ',handles)
-            (setq gnus-article-mime-handles nil)
-            (let ((mbl1 mml-buffer-list))
-              (setq mml-buffer-list mbl)
-              (set (make-local-variable 'mml-buffer-list) mbl1))
-            (gnus-make-local-hook 'kill-buffer-hook)
-            (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)))
-       `(lambda (no-highlight)
-         (let ((mail-parse-charset (or gnus-article-charset
-                                       ',gnus-newsgroup-charset))
-               (message-options message-options)
-               (message-options-set-recipient)
-               (mail-parse-ignored-charsets
-                (or gnus-article-ignored-charsets
-                    ',gnus-newsgroup-ignored-charsets)))
-          (mml-to-mime)
-          (mml-destroy-buffers)
-          (remove-hook 'kill-buffer-hook
-                       'mml-destroy-buffers t)
-          (kill-local-variable 'mml-buffer-list))
-         (gnus-summary-edit-article-done
-          ,(or (mail-header-references gnus-current-headers) "")
-          ,(gnus-group-read-only-p)
-          ,gnus-summary-buffer no-highlight))))))
+  (when (gnus-group-read-only-p)
+    (error "The current group does not support deleting of parts"))
+  (when (mm-complicated-handles gnus-article-mime-handles)
+    (error "\
+The current article has a complicated MIME structure, giving up..."))
+  (when (gnus-yes-or-no-p "\
+Deleting parts may malfunction or destroy the article; continue? ")
+    (let* ((data (get-text-property (point) 'gnus-data))
+          file param
+          (handles gnus-article-mime-handles))
+      (setq file (and data (mm-save-part data)))
+      (when file
+       (with-current-buffer (mm-handle-buffer data)
+         (erase-buffer)
+         (insert "Content-Type: " (mm-handle-media-type data))
+         (mml-insert-parameter-string (cdr (mm-handle-type data))
+                                      '(charset))
+         (insert "\n")
+         (insert "Content-ID: " (message-make-message-id) "\n")
+         (insert "Content-Transfer-Encoding: binary\n")
+         (insert "\n"))
+       (setcdr data
+               (cdr (mm-make-handle nil
+                                    `("message/external-body"
+                                      (access-type . "LOCAL-FILE")
+                                      (name . ,file)))))
+       (set-buffer gnus-summary-buffer)
+       (gnus-article-edit-part handles)))))
 
 (defun gnus-mime-delete-part ()
   "Delete the MIME part under point.
 Replace it with some information about the removed part."
   (interactive)
   (gnus-article-check-buffer)
-  (unless (and gnus-novice-user
-              (not (gnus-yes-or-no-p
-                    "Really delete attachment forever? ")))
+  (when (gnus-group-read-only-p)
+    (error "The current group does not support deleting of parts"))
+  (when (mm-complicated-handles gnus-article-mime-handles)
+    (error "\
+The current article has a complicated MIME structure, giving up..."))
+  (when (gnus-yes-or-no-p "\
+Deleting parts may malfunction or destroy the article; continue? ")
     (let* ((data (get-text-property (point) 'gnus-data))
           (handles gnus-article-mime-handles)
           (none "(none)")
@@ -4018,8 +4039,6 @@ Replace it with some information about the removed part."
            (or (mail-content-type-get (mm-handle-disposition data) 'filename)
                none))
           (type (mm-handle-media-type data)))
-      (if (mm-multiple-handles gnus-article-mime-handles)
-         (error "This function is not implemented"))
       (with-current-buffer (mm-handle-buffer data)
        (let ((bsize (format "%s" (buffer-size))))
          (erase-buffer)
@@ -4039,47 +4058,7 @@ Replace it with some information about the removed part."
                        (list "attachment")
                        (format "Deleted attachment (%s bytes)" bsize))))))
       (set-buffer gnus-summary-buffer)
-      ;; FIXME: maybe some of the following code (borrowed from
-      ;; `gnus-mime-save-part-and-strip') isn't necessary?
-      (gnus-article-edit-article
-       `(lambda ()
-         (erase-buffer)
-         (let ((mail-parse-charset (or gnus-article-charset
-                                       ',gnus-newsgroup-charset))
-               (mail-parse-ignored-charsets
-                (or gnus-article-ignored-charsets
-                    ',gnus-newsgroup-ignored-charsets))
-               (mbl mml-buffer-list))
-           (setq mml-buffer-list nil)
-           (insert-buffer gnus-original-article-buffer)
-           (mime-to-mml ',handles)
-           (setq gnus-article-mime-handles nil)
-           (let ((mbl1 mml-buffer-list))
-             (setq mml-buffer-list mbl)
-             (set (make-local-variable 'mml-buffer-list) mbl1))
-           (gnus-make-local-hook 'kill-buffer-hook)
-           (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)))
-       `(lambda (no-highlight)
-         (let ((mail-parse-charset (or gnus-article-charset
-                                       ',gnus-newsgroup-charset))
-               (message-options message-options)
-               (message-options-set-recipient)
-               (mail-parse-ignored-charsets
-                (or gnus-article-ignored-charsets
-                    ',gnus-newsgroup-ignored-charsets)))
-           (mml-to-mime)
-           (mml-destroy-buffers)
-           (remove-hook 'kill-buffer-hook
-                        'mml-destroy-buffers t)
-           (kill-local-variable 'mml-buffer-list))
-         (gnus-summary-edit-article-done
-          ,(or (mail-header-references gnus-current-headers) "")
-          ,(gnus-group-read-only-p)
-          ,gnus-summary-buffer no-highlight)))))
-  ;; Not in `gnus-mime-save-part-and-strip':
-  (gnus-article-edit-done)
-  (gnus-summary-expand-window)
-  (gnus-summary-show-article))
+      (gnus-article-edit-part handles))))
 
 (defun gnus-mime-save-part ()
   "Save the MIME part under point."
@@ -4286,8 +4265,8 @@ specified charset."
         (mm-inlined-types nil)
         (mail-parse-charset gnus-newsgroup-charset)
         (mail-parse-ignored-charsets
-         (save-excursion (set-buffer gnus-summary-buffer)
-                         gnus-newsgroup-ignored-charsets)))
+         (with-current-buffer gnus-summary-buffer
+           gnus-newsgroup-ignored-charsets)))
     (when handle
       (if (mm-handle-undisplayer handle)
          (mm-remove-part handle)
@@ -4303,8 +4282,8 @@ If no internal viewer is available, use an external viewer."
         (mm-inline-large-images t)
         (mail-parse-charset gnus-newsgroup-charset)
         (mail-parse-ignored-charsets
-         (save-excursion (set-buffer gnus-summary-buffer)
-                         gnus-newsgroup-ignored-charsets))
+         (with-current-buffer gnus-summary-buffer
+           gnus-newsgroup-ignored-charsets))
         buffer-read-only)
     (when handle
       (if (mm-handle-undisplayer handle)
@@ -4321,8 +4300,7 @@ If no internal viewer is available, use an external viewer."
        (funcall (cdr action-pair)))))
 
 (defun gnus-article-part-wrapper (n function)
-  (save-current-buffer
-    (set-buffer gnus-article-buffer)
+  (with-current-buffer gnus-article-buffer
     (when (> n (length gnus-article-mime-handle-alist))
       (error "No such part"))
     (gnus-article-goto-part n)
@@ -4388,8 +4366,7 @@ N is the numerical prefix."
 (defun gnus-article-view-part (&optional n)
   "View MIME part N, which is the numerical prefix."
   (interactive "P")
-  (save-current-buffer
-    (set-buffer gnus-article-buffer)
+  (with-current-buffer gnus-article-buffer
     (or (numberp n) (setq n (gnus-article-mime-match-handle-first
                             gnus-article-mime-match-handle-function)))
     (when (> n (length gnus-article-mime-handle-alist))
@@ -4417,8 +4394,7 @@ N is the numerical prefix."
              (mail-parse-charset gnus-newsgroup-charset)
              (mail-parse-ignored-charsets
               (if (gnus-buffer-live-p gnus-summary-buffer)
-                  (save-excursion
-                    (set-buffer gnus-summary-buffer)
+                  (with-current-buffer gnus-summary-buffer
                     gnus-newsgroup-ignored-charsets)
                 nil)))
          (save-excursion
@@ -4486,11 +4462,11 @@ N is the numerical prefix."
     (setq b (point))
     (gnus-eval-format
      gnus-mime-button-line-format gnus-mime-button-line-format-alist
-     `(,@(gnus-local-map-property gnus-mime-button-map)
-        gnus-callback gnus-mm-display-part
-        gnus-part ,gnus-tmp-id
-        article-type annotation
-        gnus-data ,handle))
+     `(keymap ,gnus-mime-button-map
+             gnus-callback gnus-mm-display-part
+             gnus-part ,gnus-tmp-id
+             article-type annotation
+             gnus-data ,handle))
     (setq e (if (bolp)
                ;; Exclude a newline.
                (1- (point))
@@ -4676,11 +4652,9 @@ If displaying \"text/html\" is discouraged \(see
          (push (cons id handle) gnus-article-mime-handle-alist)
          (when (or (not display)
                    (not (gnus-unbuttonized-mime-type-p type)))
-           ;(gnus-article-insert-newline)
            (gnus-insert-mime-button
             handle id (list (or display (and not-attachment text))))
            (gnus-article-insert-newline)
-           ;(gnus-article-insert-newline)
            ;; Remember modify the number of forward lines.
            (setq move t))
          (setq beg (point))
@@ -4768,7 +4742,7 @@ If displaying \"text/html\" is discouraged \(see
                       ',gnus-article-mime-handle-alist))
               (gnus-mime-display-alternative
                ',ihandles ',not-pref ',begend ,id))
-            ,@(gnus-local-map-property gnus-mime-button-map)
+            keymap ,gnus-mime-button-map
             ,gnus-mouse-face-prop ,gnus-article-mouse-face
             face ,gnus-article-button-face
             gnus-part ,id
@@ -4792,7 +4766,7 @@ If displaying \"text/html\" is discouraged \(see
                         ',gnus-article-mime-handle-alist))
                 (gnus-mime-display-alternative
                  ',ihandles ',handle ',begend ,id))
-              ,@(gnus-local-map-property gnus-mime-button-map)
+              keymap ,gnus-mime-button-map
               ,gnus-mouse-face-prop ,gnus-article-mouse-face
               face ,gnus-article-button-face
               gnus-part ,id
@@ -4807,8 +4781,8 @@ If displaying \"text/html\" is discouraged \(see
              (gnus-display-mime preferred)
            (let ((mail-parse-charset gnus-newsgroup-charset)
                  (mail-parse-ignored-charsets
-                  (save-excursion (set-buffer gnus-summary-buffer)
-                                  gnus-newsgroup-ignored-charsets)))
+                  (with-current-buffer gnus-summary-buffer
+                    gnus-newsgroup-ignored-charsets)))
              (mm-display-part preferred)
              ;; Do highlighting.
              (save-excursion
@@ -4858,8 +4832,7 @@ is the string to use when it is inactive.")
 
 (defun gnus-article-wash-status ()
   "Return a string which display status of article washing."
-  (save-excursion
-    (set-buffer gnus-article-buffer)
+  (with-current-buffer gnus-article-buffer
     (let ((cite (memq 'cite gnus-article-wash-types))
          (headers (memq 'headers gnus-article-wash-types))
          (boring (memq 'boring-headers gnus-article-wash-types))
@@ -4908,8 +4881,8 @@ is the string to use when it is inactive.")
   "Hide unwanted headers if `gnus-have-all-headers' is nil.
 Provided for backwards compatibility."
   (when (and (or (not (gnus-buffer-live-p gnus-summary-buffer))
-                (not (save-excursion (set-buffer gnus-summary-buffer)
-                                     gnus-have-all-headers)))
+                (not (with-current-buffer gnus-summary-buffer
+                       gnus-have-all-headers)))
             (not gnus-inhibit-hiding))
     (gnus-article-hide-headers)))
 
@@ -5076,9 +5049,9 @@ not have a face in `gnus-article-boring-faces'."
   "Read article specified by message-id around point."
   (interactive)
   (save-excursion
-    (re-search-backward "[ \t]\\|^" (gnus-point-at-bol) t)
-    (re-search-forward "<?news:<?\\|<" (gnus-point-at-eol) t)
-    (if (re-search-forward "[^@ ]+@[^ \t>]+" (gnus-point-at-eol) t)
+    (re-search-backward "[ \t]\\|^" (point-at-bol) t)
+    (re-search-forward "<?news:<?\\|<" (point-at-eol) t)
+    (if (re-search-forward "[^@ ]+@[^ \t>]+" (point-at-eol) t)
        (let ((msg-id (concat "<" (match-string 0) ">")))
          (set-buffer gnus-summary-buffer)
          (gnus-summary-refer-article msg-id))
@@ -5172,11 +5145,13 @@ not have a face in `gnus-article-boring-faces'."
       (let ((obuf (current-buffer))
            (owin (current-window-configuration))
            (opoint (point))
-           (summary gnus-article-current-summary)
-           func in-buffer selected)
-       (if not-restore-window
-           (pop-to-buffer summary 'norecord)
-         (switch-to-buffer summary 'norecord))
+           win func in-buffer selected new-sum-start new-sum-hscroll)
+       (cond (not-restore-window
+              (pop-to-buffer gnus-article-current-summary 'norecord))
+             ((setq win (get-buffer-window gnus-article-current-summary))
+              (select-window win))
+             (t
+              (switch-to-buffer gnus-article-current-summary 'norecord)))
        (setq in-buffer (current-buffer))
        ;; We disable the pick minor mode commands.
        (if (and (setq func (let (gnus-pick-mode)
@@ -5184,7 +5159,10 @@ not have a face in `gnus-article-boring-faces'."
                 (functionp func))
            (progn
              (call-interactively func)
-             (setq new-sum-point (point))
+             (when (eq win (selected-window))
+               (setq new-sum-point (point)
+                     new-sum-start (window-start win)
+                     new-sum-hscroll (window-hscroll win))
              (when (eq in-buffer (current-buffer))
                (setq selected (gnus-summary-select-article))
                (set-buffer obuf)
@@ -5196,10 +5174,12 @@ not have a face in `gnus-article-boring-faces'."
                                    1)
                  (set-window-point (get-buffer-window (current-buffer))
                                    (point)))
-               (let ((win (get-buffer-window gnus-article-current-summary)))
-                 (when win
-                   (set-window-point win new-sum-point))))    )
-         (switch-to-buffer gnus-article-buffer)
+               (when (and (not not-restore-window)
+                          new-sum-point)
+                 (set-window-point win new-sum-point)
+                 (set-window-start win new-sum-start)
+                 (set-window-hscroll win new-sum-hscroll)))))
+         (set-window-configuration owin)
          (ding))))))
 
 (defun gnus-article-describe-key (key)
@@ -5370,16 +5350,14 @@ If given a prefix, show the hidden text instead."
                 gnus-summary-buffer
                 (get-buffer gnus-summary-buffer)
                 (gnus-buffer-exists-p gnus-summary-buffer)
-                (eq (cdr (save-excursion
-                           (set-buffer gnus-summary-buffer)
+                (eq (cdr (with-current-buffer gnus-summary-buffer
                            (assq article gnus-newsgroup-reads)))
                     gnus-canceled-mark))
            nil)
           ;; We first check `gnus-original-article-buffer'.
           ((and (get-buffer gnus-original-article-buffer)
                 (numberp article)
-                (save-excursion
-                  (set-buffer gnus-original-article-buffer)
+                (with-current-buffer gnus-original-article-buffer
                   (and (equal (car gnus-original-article) group)
                        (eq (cdr gnus-original-article) article))))
            (insert-buffer-substring gnus-original-article-buffer)
@@ -5497,7 +5475,6 @@ If given a prefix, show the hidden text instead."
 (defvar gnus-article-edit-done-function nil)
 
 (defvar gnus-article-edit-mode-map nil)
-(defvar gnus-article-edit-mode nil)
 
 ;; Should we be using derived.el for this?
 (unless gnus-article-edit-mode-map
@@ -5634,7 +5611,7 @@ groups."
        (car gnus-article-current) (cdr gnus-article-current)))
     ;; We remove all text props from the article buffer.
     (kill-all-local-variables)
-    (gnus-set-text-properties (point-min) (point-max) nil)
+    (set-text-properties (point-min) (point-max) nil)
     (gnus-article-mode)
     (set-window-configuration winconf)
     (set-buffer buf)
@@ -5731,7 +5708,7 @@ The function must take one argument, the string naming the URL."
 
 (defcustom gnus-button-ctan-directory-regexp
   (concat
-   "\\("; Cannot use `\(?: ... \)' (compatibility with Emacs 20).
+   "\\(?:"
    "biblio\\|digests\\|dviware\\|fonts\\|graphics\\|help\\|"
    "indexing\\|info\\|language\\|macros\\|support\\|systems\\|"
    "tds\\|tools\\|usergrps\\|web\\|nonfree\\|obsolete"
@@ -6064,7 +6041,7 @@ positives are possible."
     ("\\(<URL: *\\)mailto: *\\([^> \n\t]+\\)>"
      0 (>= gnus-button-message-level 0) gnus-url-mailto 2)
     ;; RFC 2368 (The mailto URL scheme)
-    ("mailto:\\([-a-z.@_+0-9%=?&]+\\)"
+    ("\\bmailto:\\([-a-z.@_+0-9%=?&/]+\\)"
      0 (>= gnus-button-message-level 0) gnus-url-mailto 1)
     ("\\bmailto:\\([^ \n\t]+\\)"
      0 (>= gnus-button-message-level 0) gnus-url-mailto 1)
@@ -6199,7 +6176,7 @@ variable it the real callback function."
      0 (>= gnus-button-browse-level 0) browse-url 0)
     ("^[^:]+:" gnus-button-url-regexp
      0 (>= gnus-button-browse-level 0) browse-url 0)
-    ("^[^:]+:" "\\bmailto:\\([-a-z.@_+0-9%=?&]+\\)"
+    ("^[^:]+:" "\\bmailto:\\([-a-z.@_+0-9%=?&/]+\\)"
      0 (>= gnus-button-message-level 0) gnus-url-mailto 1)
     ("^[^:]+:" "\\(<\\(url: \\)?\\(nntp\\|news\\):\\([^>\n ]*\\)>\\)"
      1 (>= gnus-button-message-level 0) gnus-button-message-id 4))
@@ -6223,13 +6200,6 @@ HEADER is a regexp to match a header.  For a fuller explanation, see
                               :inline t
                               (integer :tag "Regexp group")))))
 
-(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.
-
 ;;; Commands:
 
 (defun gnus-article-push-button (event)
@@ -6281,51 +6251,43 @@ do the highlighting.  See the documentation for those functions."
 (defun gnus-article-highlight-headers ()
   "Highlight article headers as specified by `gnus-header-face-alist'."
   (interactive)
-  (save-excursion
-    (set-buffer gnus-article-buffer)
-    (save-restriction
-      (let ((alist gnus-header-face-alist)
-           (buffer-read-only nil)
-           (case-fold-search t)
-           (inhibit-point-motion-hooks t)
-           entry regexp header-face field-face from hpoints fpoints)
-       (article-narrow-to-head)
-       (while (setq entry (pop alist))
-         (goto-char (point-min))
-         (setq regexp (concat "^\\("
-                              (if (string-equal "" (nth 0 entry))
-                                  "[^\t ]"
-                                (nth 0 entry))
-                              "\\)")
-               header-face (nth 1 entry)
-               field-face (nth 2 entry))
-         (while (and (re-search-forward regexp nil t)
-                     (not (eobp)))
-           (beginning-of-line)
-           (setq from (point))
-           (unless (search-forward ":" nil t)
-             (forward-char 1))
-           (when (and header-face
-                      (not (memq (point) hpoints)))
-             (push (point) hpoints)
-             (gnus-put-text-property from (point) 'face header-face))
-           (when (and field-face
-                      (not (memq (setq from (point)) fpoints)))
-             (push from fpoints)
-             (if (re-search-forward "^[^ \t]" nil t)
-                 (forward-char -2)
-               (goto-char (point-max)))
-             (gnus-put-text-property from (point) 'face field-face))))))))
+  (gnus-with-article-headers
+    (let ((alist gnus-header-face-alist)
+         entry regexp header-face field-face from hpoints fpoints)
+      (while (setq entry (pop alist))
+       (goto-char (point-min))
+       (setq regexp (concat "^\\("
+                            (if (string-equal "" (nth 0 entry))
+                                "[^\t ]"
+                              (nth 0 entry))
+                            "\\)")
+             header-face (nth 1 entry)
+             field-face (nth 2 entry))
+       (while (and (re-search-forward regexp nil t)
+                   (not (eobp)))
+         (beginning-of-line)
+         (setq from (point))
+         (unless (search-forward ":" nil t)
+           (forward-char 1))
+         (when (and header-face
+                    (not (memq (point) hpoints)))
+           (push (point) hpoints)
+           (gnus-put-text-property from (point) 'face header-face))
+         (when (and field-face
+                    (not (memq (setq from (point)) fpoints)))
+           (push from fpoints)
+           (if (re-search-forward "^[^ \t]" nil t)
+               (forward-char -2)
+             (goto-char (point-max)))
+           (gnus-put-text-property from (point) 'face field-face)))))))
 
 (defun gnus-article-highlight-signature ()
   "Highlight the signature in an article.
 It does this by highlighting everything after
 `gnus-signature-separator' using `gnus-signature-face'."
   (interactive)
-  (save-excursion
-    (set-buffer gnus-article-buffer)
-    (let ((buffer-read-only nil)
-         (inhibit-point-motion-hooks t))
+  (gnus-with-article-buffer
+    (let ((inhibit-point-motion-hooks t))
       (save-restriction
        (when (and gnus-signature-face
                   (gnus-article-narrow-to-signature))
@@ -6347,10 +6309,8 @@ It does this by highlighting everything after
 \"External references\" are things like Message-IDs and URLs, as
 specified by `gnus-button-alist'."
   (interactive (list 'force))
-  (save-excursion
-    (set-buffer gnus-article-buffer)
-    (let ((buffer-read-only nil)
-         (inhibit-point-motion-hooks t)
+  (gnus-with-article-buffer
+    (let ((inhibit-point-motion-hooks t)
          (case-fold-search t)
          (alist gnus-button-alist)
          beg entry regexp)
@@ -6391,40 +6351,33 @@ specified by `gnus-button-alist'."
 (defun gnus-article-add-buttons-to-head ()
   "Add buttons to the head of the article."
   (interactive)
-  (save-excursion
-    (set-buffer gnus-article-buffer)
-    (save-restriction
-      (let ((buffer-read-only nil)
-           (inhibit-point-motion-hooks t)
-           (case-fold-search t)
-           (alist gnus-header-button-alist)
-           entry beg end)
-       (article-narrow-to-head)
-       (while alist
-         ;; Each alist entry.
-         (setq entry (car alist)
-               alist (cdr alist))
-         (goto-char (point-min))
-         (while (re-search-forward (car entry) nil t)
-           ;; Each header matching the entry.
-           (setq beg (match-beginning 0))
-           (setq end (or (and (re-search-forward "^[^ \t]" nil t)
-                              (match-beginning 0))
-                         (point-max)))
-           (goto-char beg)
-           (while (re-search-forward (eval (nth 1 entry)) end t)
-             ;; Each match within a header.
-             (let* ((entry (cdr entry))
-                    (start (match-beginning (nth 1 entry)))
-                    (end (match-end (nth 1 entry)))
-                    (form (nth 2 entry)))
-               (goto-char (match-end 0))
-               (when (eval form)
-                 (gnus-article-add-button
-                  start end (nth 3 entry)
-                  (buffer-substring (match-beginning (nth 4 entry))
-                                    (match-end (nth 4 entry)))))))
-           (goto-char end)))))))
+  (gnus-with-article-headers
+    (let ((alist gnus-header-button-alist)
+         entry beg end)
+      (while alist
+       ;; Each alist entry.
+       (setq entry (pop alist))
+       (goto-char (point-min))
+       (while (re-search-forward (car entry) nil t)
+         ;; Each header matching the entry.
+         (setq beg (match-beginning 0))
+         (setq end (or (and (re-search-forward "^[^ \t]" nil t)
+                            (match-beginning 0))
+                       (point-max)))
+         (goto-char beg)
+         (while (re-search-forward (eval (nth 1 entry)) end t)
+           ;; Each match within a header.
+           (let* ((entry (cdr entry))
+                  (start (match-beginning (nth 1 entry)))
+                  (end (match-end (nth 1 entry)))
+                  (form (nth 2 entry)))
+             (goto-char (match-end 0))
+             (when (eval form)
+               (gnus-article-add-button
+                start end (nth 3 entry)
+                (buffer-substring (match-beginning (nth 4 entry))
+                                  (match-end (nth 4 entry)))))))
+         (goto-char end))))))
 
 ;;; External functions:
 
@@ -6445,15 +6398,12 @@ specified by `gnus-button-alist'."
 ;;; Internal functions:
 
 (defun gnus-article-set-globals ()
-  (save-excursion
-    (set-buffer gnus-summary-buffer)
+  (with-current-buffer gnus-summary-buffer
     (gnus-set-global-variables)))
 
 (defun gnus-signature-toggle (end)
-  (save-excursion
-    (set-buffer gnus-article-buffer)
-    (let ((buffer-read-only nil)
-         (inhibit-point-motion-hooks t))
+  (gnus-with-article-buffer
+    (let ((inhibit-point-motion-hooks t))
       (if (text-property-any end (point-max) 'article-type 'signature)
          (progn
            (gnus-delete-wash-type 'signature)
@@ -6489,7 +6439,7 @@ specified by `gnus-button-alist'."
           (fun (nth 3 entry))
           (args (mapcar (lambda (group)
                           (let ((string (match-string group)))
-                            (gnus-set-text-properties
+                            (set-text-properties
                              0 (length string) nil string)
                             string))
                         (nthcdr 4 entry))))
@@ -6589,8 +6539,7 @@ specified by `gnus-button-alist'."
 
 (defun gnus-button-message-id (message-id)
   "Fetch MESSAGE-ID."
-  (save-excursion
-    (set-buffer gnus-summary-buffer)
+  (with-current-buffer gnus-summary-buffer
     (gnus-summary-refer-article message-id)))
 
 (defun gnus-button-fetch-group (address)
@@ -6670,19 +6619,22 @@ specified by `gnus-button-alist'."
 
 (defvar gnus-prev-page-map
   (let ((map (make-sparse-keymap)))
-    (unless (>= emacs-major-version 21)
-      ;; XEmacs doesn't care.
-      (set-keymap-parent map gnus-article-mode-map))
     (define-key map gnus-mouse-2 'gnus-button-prev-page)
     (define-key map "\r" 'gnus-button-prev-page)
     map))
 
+(defvar gnus-next-page-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map gnus-mouse-2 'gnus-button-next-page)
+    (define-key map "\r" 'gnus-button-next-page)
+    map))
+
 (defun gnus-insert-prev-page-button ()
   (let ((b (point))
        (buffer-read-only nil))
     (gnus-eval-format
      gnus-prev-page-line-format nil
-     `(,@(gnus-local-map-property gnus-prev-page-map)
+     `(keymap ,gnus-prev-page-map
         gnus-prev t
         gnus-callback gnus-article-button-prev-page
         article-type annotation))
@@ -6694,24 +6646,6 @@ specified by `gnus-button-alist'."
      :action 'gnus-button-prev-page
      :button-keymap gnus-prev-page-map)))
 
-(defvar gnus-prev-page-map
-  (let ((map (make-sparse-keymap)))
-    (unless (>= emacs-major-version 21)
-      ;; XEmacs doesn't care.
-      (set-keymap-parent map gnus-article-mode-map))
-    (define-key map gnus-mouse-2 'gnus-button-prev-page)
-    (define-key map "\r" 'gnus-button-prev-page)
-    map))
-
-(defvar gnus-next-page-map
-  (let ((map (make-sparse-keymap)))
-    (unless (>= emacs-major-version 21)
-      ;; XEmacs doesn't care.
-      (set-keymap-parent map gnus-article-mode-map))
-    (define-key map gnus-mouse-2 'gnus-button-next-page)
-    (define-key map "\r" 'gnus-button-next-page)
-    map))
-
 (defun gnus-button-next-page (&optional args more-args)
   "Go to the next page."
   (interactive)
@@ -6732,7 +6666,7 @@ specified by `gnus-button-alist'."
   (let ((b (point))
        (buffer-read-only nil))
     (gnus-eval-format gnus-next-page-line-format nil
-                     `(,@(gnus-local-map-property gnus-next-page-map)
+                     `(keymap ,gnus-next-page-map
                          gnus-next t
                          gnus-callback gnus-article-button-next-page
                          article-type annotation))
@@ -6968,8 +6902,6 @@ For example:
 
 (defvar gnus-mime-security-button-map
   (let ((map (make-sparse-keymap)))
-    (unless (>= (string-to-number emacs-version) 21)
-      (set-keymap-parent map gnus-article-mode-map))
     (define-key map gnus-mouse-2 'gnus-article-push-button)
     (define-key map "\r" 'gnus-article-press-button)
     map))
@@ -7076,7 +7008,7 @@ For example:
     (gnus-eval-format
      gnus-mime-security-button-line-format
      gnus-mime-security-button-line-format-alist
-     `(,@(gnus-local-map-property gnus-mime-security-button-map)
+     `(keymap ,gnus-mime-security-button-map
         gnus-callback gnus-mime-security-press-button
         gnus-line-format ,gnus-mime-security-button-line-format
         gnus-mime-details ,gnus-mime-security-button-pressed
index d8bdd35..d3e417d 100644 (file)
 (eval-when-compile (require 'cl))
 
 (require 'gnus)
-(require 'gnus-int)
-(require 'gnus-range)
-(require 'gnus-start)
 (eval-when-compile
-  (if (not (fboundp 'gnus-agent-load-alist))
+  (unless (fboundp 'gnus-agent-load-alist)
       (defun gnus-agent-load-alist (group)))
   (require 'gnus-sum))
 
@@ -91,6 +88,7 @@ it's not cached."
 (defvar gnus-cache-buffer nil)
 (defvar gnus-cache-active-hashtb nil)
 (defvar gnus-cache-active-altered nil)
+(defvar gnus-cache-total-fetched-hashtb nil)
 
 (eval-and-compile
   (autoload 'nnml-generate-nov-databases-1 "nnml")
@@ -125,9 +123,8 @@ it's not cached."
          (overview-file (gnus-cache-file-name
                          (car gnus-cache-buffer) ".overview")))
       ;; write the overview only if it was modified
-      (when (buffer-modified-p buffer)
-       (save-excursion
-         (set-buffer buffer)
+      (when (and (buffer-live-p buffer) (buffer-modified-p buffer))
+       (with-current-buffer buffer
          (if (> (buffer-size) 0)
              ;; Non-empty overview, write it to a file.
              (let ((coding-system-for-write
@@ -142,7 +139,10 @@ it's not cached."
                ;; of any inconsistencies (articles w/o nov entries?).
                ;; for now, just be conservative...delete only if safe -- sj
                (delete-directory (file-name-directory overview-file))
-             (error nil)))))
+             (error)))
+
+         (gnus-cache-update-overview-total-fetched-for (car gnus-cache-buffer) 
+                                                       overview-file)))
       ;; Kill the buffer -- it's either unmodified or saved.
       (gnus-kill-buffer buffer)
       (setq gnus-cache-buffer nil))))
@@ -180,7 +180,8 @@ it's not cached."
              (gnus-request-article-this-buffer number group))
            (when (> (buffer-size) 0)
              (let ((coding-system-for-write gnus-cache-coding-system))
-               (gnus-write-buffer file))
+               (gnus-write-buffer file)
+               (gnus-cache-update-file-total-fetched-for group file))
              (nnheader-remove-body)
              (setq headers (nnheader-parse-naked-head))
              (mail-header-set-number headers number)
@@ -467,13 +468,15 @@ Returns the list of articles removed."
                   (gnus-cache-member-of-class
                    gnus-cache-remove-articles ticked dormant unread)))
       (save-excursion
+       (gnus-cache-update-file-total-fetched-for group file t)
        (delete-file file)
+
        (set-buffer (cdr gnus-cache-buffer))
        (goto-char (point-min))
        (when (or (looking-at (concat (int-to-string number) "\t"))
                  (search-forward (concat "\n" (int-to-string number) "\t")
                                  (point-max) t))
-         (gnus-delete-line)))
+           (gnus-delete-line)))
       (unless (setq gnus-newsgroup-cached
                    (delq article gnus-newsgroup-cached))
        (gnus-sethash gnus-newsgroup-name nil gnus-cache-active-hashtb)
@@ -524,7 +527,7 @@ Returns the list of articles removed."
       (set-buffer cache-buf)
       (if (search-forward (concat "\n" (int-to-string (car cached)) "\t")
                          nil t)
-         (setq beg (gnus-point-at-bol)
+         (setq beg (point-at-bol)
                end (progn (end-of-line) (point)))
        (setq beg nil))
       (set-buffer nntp-server-buffer)
@@ -707,6 +710,9 @@ If LOW, update the lower bound instead."
   (gnus-cache-close)
   (let ((nnml-generate-active-function 'identity))
     (nnml-generate-nov-databases-1 dir))
+
+  (setq gnus-cache-total-fetched-hashtb nil)
+
   (gnus-cache-open))
 
 (defun gnus-cache-move-cache (dir)
@@ -727,6 +733,126 @@ If GROUP is non-nil, also cater to `gnus-cacheable-groups' and
              (or (not gnus-uncacheable-groups)
                  (not (string-match gnus-uncacheable-groups group)))))))
 
+;;;###autoload
+(defun gnus-cache-rename-group (old-group new-group)
+  "Rename OLD-GROUP as NEW-GROUP.  Always updates the cache, even when
+disabled, as the old cache files would corrupt gnus when the cache was
+next enabled. Depends upon the caller to determine whether group renaming is supported."
+  (let ((old-dir (gnus-cache-file-name old-group ""))
+       (new-dir (gnus-cache-file-name new-group "")))
+    (gnus-rename-file old-dir new-dir t))
+
+  (gnus-cache-rename-group-total-fetched-for old-group new-group)
+
+  (let ((no-save gnus-cache-active-hashtb))
+    (unless gnus-cache-active-hashtb
+      (gnus-cache-read-active))
+    (let* ((old-group-hash-value (gnus-gethash old-group gnus-cache-active-hashtb))
+          (new-group-hash-value (gnus-gethash new-group gnus-cache-active-hashtb))
+          (delta                (or old-group-hash-value new-group-hash-value)))
+      (gnus-sethash new-group old-group-hash-value gnus-cache-active-hashtb)
+      (gnus-sethash old-group nil gnus-cache-active-hashtb)
+
+      (if no-save
+         (setq gnus-cache-active-altered delta)
+       (gnus-cache-write-active delta)))))
+
+;;;###autoload
+(defun gnus-cache-delete-group (group)
+  "Delete GROUP.  Always updates the cache, even when
+disabled, as the old cache files would corrupt gnus when the cache was
+next enabled. Depends upon the caller to determine whether group deletion is supported."
+  (let ((dir (gnus-cache-file-name group "")))
+    (gnus-delete-file dir))
+
+  (gnus-cache-delete-group-total-fetched-for group)
+
+  (let ((no-save gnus-cache-active-hashtb))
+    (unless gnus-cache-active-hashtb
+      (gnus-cache-read-active))
+    (let* ((group-hash-value (gnus-gethash group gnus-cache-active-hashtb)))
+      (gnus-sethash group nil gnus-cache-active-hashtb)
+
+      (if no-save
+         (setq gnus-cache-active-altered group-hash-value)
+       (gnus-cache-write-active group-hash-value)))))
+
+(defvar gnus-cache-inhibit-update-total-fetched-for nil)
+(defvar gnus-cache-need-update-total-fetched-for nil)
+
+(defmacro gnus-cache-with-refreshed-group (group &rest body)
+  `(prog1 (let ((gnus-cache-inhibit-update-total-fetched-for t))
+           ,@body)
+     (when (and gnus-cache-need-update-total-fetched-for
+               (not gnus-cache-inhibit-update-total-fetched-for))
+       (save-excursion
+         (set-buffer gnus-group-buffer)
+         (setq gnus-cache-need-update-total-fetched-for nil)
+         (gnus-group-update-group ,group t)))))
+
+(defun gnus-cache-update-file-total-fetched-for (group file &optional subtract)
+  (when gnus-cache-total-fetched-hashtb
+    (gnus-cache-with-refreshed-group
+     group
+     (let* ((entry (or (gnus-gethash group gnus-cache-total-fetched-hashtb)
+                      (gnus-sethash group (make-vector 2 0)
+                                    gnus-cache-total-fetched-hashtb)))
+           size)
+
+       (if file
+          (setq size (or (nth 7 (file-attributes file)) 0))
+        (let ((files (directory-files (gnus-cache-file-name group "") 
+                                      t nil t))
+              file attrs)
+          (setq size 0.0)
+          (while (setq file (pop files))
+            (setq attrs (file-attributes file))
+            (unless (nth 0 attrs)
+              (incf size (float (nth 7 attrs)))))))         
+
+       (setq gnus-cache-need-update-total-fetched-for t)
+
+       (incf (nth 1 entry) (if subtract (- size) size))))))
+
+(defun gnus-cache-update-overview-total-fetched-for (group file)
+  (when gnus-cache-total-fetched-hashtb
+    (gnus-cache-with-refreshed-group
+     group
+     (let* ((entry (or (gnus-gethash group gnus-cache-total-fetched-hashtb)
+                      (gnus-sethash group (make-list 2 0) 
+                                    gnus-cache-total-fetched-hashtb)))
+           (size (or (nth 7 (file-attributes 
+                             (or file
+                                 (gnus-cache-file-name group ".overview"))))
+                     0)))
+       (setq gnus-cache-need-update-total-fetched-for t)
+       (setf (nth 0 entry) size)))))
+
+(defun gnus-cache-rename-group-total-fetched-for (old-group new-group)
+  "Record of disk space used by OLD-GROUP now associated with NEW-GROUP."
+  (when gnus-cache-total-fetched-hashtb
+    (let ((entry (gnus-gethash old-group gnus-cache-total-fetched-hashtb)))
+      (gnus-sethash new-group entry gnus-cache-total-fetched-hashtb)
+      (gnus-sethash old-group nil gnus-cache-total-fetched-hashtb))))
+
+(defun gnus-cache-delete-group-total-fetched-for (group)
+  "Delete record of disk space used by GROUP being deleted."
+  (when gnus-cache-total-fetched-hashtb
+      (gnus-sethash group nil gnus-cache-total-fetched-hashtb)))
+
+(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))))))
+
 (provide 'gnus-cache)
 
 ;;; gnus-cache.el ends here
index ce1b242..56aa1a8 100644 (file)
@@ -373,7 +373,7 @@ Lines matching `gnus-cite-attribution-suffix' and perhaps
        (goto-char (point-min))
        (forward-line (1- number))
        (when (re-search-forward gnus-cite-attribution-suffix
-                                (gnus-point-at-eol)
+                                (point-at-eol)
                                 t)
          (gnus-article-add-button (match-beginning 1) (match-end 1)
                                   'gnus-cite-toggle prefix))
@@ -727,7 +727,7 @@ See also the documentation for `gnus-article-highlight-citation'."
       ;; Each line.
       (setq begin (point)
            guess-limit (progn (skip-chars-forward "^> \t\r\n") (point))
-           end (gnus-point-at-bol 2)
+           end (point-at-bol 2)
            start end)
       (goto-char begin)
       ;; Ignore standard Supercite attribution prefix.
@@ -743,7 +743,7 @@ See also the documentation for `gnus-article-highlight-citation'."
        ;; Each prefix.
        (setq end (match-end 0)
              prefix (buffer-substring begin end))
-       (gnus-set-text-properties 0 (length prefix) nil prefix)
+       (set-text-properties 0 (length prefix) nil prefix)
        (setq entry (assoc prefix alist))
        (if entry
            (setcdr entry (cons line (cdr entry)))
@@ -825,11 +825,10 @@ See also the documentation for `gnus-article-highlight-citation'."
        (let ((al (buffer-substring (save-excursion (beginning-of-line 0)
                                                    (1+ (point)))
                                    end)))
-         (if (not (assoc al al-alist))
-             (progn
-               (push (list wrote in prefix tag)
-                     gnus-cite-loose-attribution-alist)
-               (push (cons al t) al-alist))))))))
+         (when (not (assoc al al-alist))
+           (push (list wrote in prefix tag)
+                 gnus-cite-loose-attribution-alist)
+           (push (cons al t) al-alist)))))))
 
 (defun gnus-cite-connect-attributions ()
   ;; Connect attributions to citations
index e713f79..21086de 100644 (file)
@@ -312,15 +312,15 @@ has been stored locally for at least this many days."
               (const :format "Disable " DISABLE))
        "\nEnable, or disable, agent expiration in this group or topic."
        gnus-agent-cat-enable-expiration)
-      (agent-disable-undownloaded-faces
-       (boolean :tag "Disable Agent Faces")
-       "Have the summary buffer ignore the agent's undownloaded faces.
-These faces, when used, act as a warning that an article has not been
-fetched into either the agent nor the cache.  This is of most use to
-users who use the agent as a cache (i.e. they only operate on articles
-that have been downloaded).  Disable to display normal article faces
-even when the article hasn't been downloaded."
-       gnus-agent-cat-disable-undownloaded-faces))
+      (agent-enable-undownloaded-faces
+       (boolean :tag "Enable Agent Faces")
+       "Have the summary buffer use the agent's undownloaded faces.
+These faces, when enabled, act as a warning that an article has not
+been fetched into either the agent nor the cache.  This is of most use
+to users who use the agent as a cache (i.e. they only operate on
+articles that have been downloaded).  Leave disabled to display normal
+article faces even when the article hasn't been downloaded."
+gnus-agent-cat-enable-undownloaded-faces))
     "Alist of group parameters that are not also topic parameters.
 
 Each entry has the form (NAME TYPE DOC ACCESSOR), where NAME is the
@@ -897,7 +897,7 @@ articles in the thread.
   (defvar gnus-agent-cat-days-until-old)
   (defvar gnus-agent-cat-predicate)
   (defvar gnus-agent-cat-groups)
-  (defvar gnus-agent-cat-disable-undownloaded-faces)
+  (defvar gnus-agent-cat-enable-undownloaded-faces)
 )
 
 (defun gnus-trim-whitespace (s)
@@ -929,11 +929,11 @@ articles in the thread.
 
        (if deflt
            (let ((tag (cdr (memq :tag type))))
-             (if (string-match "\n" deflt)
-                 (progn (while (progn (setq deflt (replace-match "\n " t t
-                                                                 deflt))
-                                      (string-match "\n" deflt (match-end 0))))
-                        (setq deflt (concat "\n" deflt))))
+             (when (string-match "\n" deflt)
+              (while (progn (setq deflt (replace-match "\n " t t
+                                                       deflt))
+                            (string-match "\n" deflt (match-end 0))))
+              (setq deflt (concat "\n" deflt)))
 
              (setcar tag (concat (car tag) deflt))))
 
@@ -984,7 +984,7 @@ articles in the thread.
                    (widgets category-fields))
               (while widgets
                 (let* ((widget (pop widgets))
-                       (value (ignore-errors (widget-value widget))))
+                       (value (condition-case nil (widget-value widget) (error))))
                   (eval `(setf (,(widget-get widget :accessor) ',info)
                                ',value)))))
             (gnus-category-write)
@@ -1047,7 +1047,7 @@ articles in the thread.
 
       (widget-insert "\nVisual Settings ")
 
-      (gnus-agent-cat-prepare-category-field agent-disable-undownloaded-faces)
+      (gnus-agent-cat-prepare-category-field agent-enable-undownloaded-faces)
 
       (use-local-map widget-keymap)
       (widget-setup)
index cc212fa..67f74ce 100644 (file)
@@ -150,7 +150,7 @@ DELAY is a string, giving the length of the time.  Possible values are:
           (message-send-hook (copy-sequence message-send-hook))
           articles
           article deadline)
-      (when (gnus-gethash group gnus-newsrc-hashtb)
+      (when (gnus-group-entry group)
        (gnus-activate-group group)
        (add-hook 'message-send-hook
                  '(lambda ()
index 3d943b6..a8515b8 100644 (file)
@@ -107,7 +107,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
   (when gnus-demon-handlers
     ;; Set up the timer.
     (setq gnus-demon-timer
-         (nnheader-run-at-time
+         (run-at-time
           gnus-demon-timestep gnus-demon-timestep 'gnus-demon))
     ;; Reset control variables.
     (setq gnus-demon-handler-state
index faf12a6..5a0d1c0 100644 (file)
@@ -204,7 +204,7 @@ There are currently two built-in format functions:
      (let ((head (cdr (assoc (intern (format "X-Diary-%s" (car elt)))
                             headers))))
        (when head
-        (nndiary-parse-schedule-value head (cadr elt) (caddr elt)))))
+        (nndiary-parse-schedule-value head (cadr elt) (car (cddr elt))))))
    nndiary-headers))
 
 ;; #### NOTE: Gnus sometimes gives me a HEADER not corresponding to any
@@ -397,7 +397,7 @@ If ARG (or prefix) is non-nil, force prompting for all fields."
           (when (re-search-forward (concat "^" header ":") nil t)
             (unless (eq (char-after) ? )
               (insert " "))
-            (setq value (buffer-substring (point) (gnus-point-at-eol)))
+            (setq value (buffer-substring (point) (point-at-eol)))
             (and (string-match "[ \t]*\\([^ \t]+\\)[ \t]*" value)
                  (setq value (match-string 1 value)))
             (condition-case ()
index 1fa657f..3937874 100644 (file)
@@ -72,7 +72,7 @@
         (if (null arg) (not gnus-dired-mode)
           (> (prefix-numeric-value arg) 0)))
     (when gnus-dired-mode
-      (gnus-add-minor-mode 'gnus-dired-mode "" gnus-dired-mode-map)
+      (add-minor-mode 'gnus-dired-mode "" gnus-dired-mode-map)
       (gnus-run-hooks 'gnus-dired-mode-hook))))
 
 ;;;###autoload
index f8286b4..12fa9c2 100644 (file)
@@ -74,7 +74,7 @@
       ;; Set up the menu.
       (when (gnus-visual-p 'draft-menu 'menu)
        (gnus-draft-make-menu-bar))
-      (gnus-add-minor-mode 'gnus-draft-mode " Draft" gnus-draft-mode-map)
+      (add-minor-mode 'gnus-draft-mode " Draft" gnus-draft-mode-map)
       (mml-mode)
       (gnus-run-hooks 'gnus-draft-mode-hook))))
 
 
 (defun gnus-draft-send (article &optional group interactive)
   "Send message ARTICLE."
-  (let ((message-syntax-checks (if interactive message-syntax-checks
-                                'dont-check-for-anything-just-trust-me))
-       (message-hidden-headers nil)
-       (message-inhibit-body-encoding (or (not group)
-                                          (equal group "nndraft:queue")
-                                          message-inhibit-body-encoding))
-       (message-send-hook (and group (not (equal group "nndraft:queue"))
-                               message-send-hook))
-       (message-setup-hook (and group (not (equal group "nndraft:queue"))
-                                message-setup-hook))
-       type method move-to)
+  (let* ((is-queue (or (not group)
+                       (equal group "nndraft:queue")))
+         (message-syntax-checks (if interactive message-syntax-checks
+                                  'dont-check-for-anything-just-trust-me))
+         (message-hidden-headers nil)
+         (message-inhibit-body-encoding (or is-queue
+                                            message-inhibit-body-encoding))
+         (message-send-hook (and (not is-queue)
+                                 message-send-hook))
+         (message-setup-hook (and (not is-queue)
+                                  message-setup-hook))
+         (gnus-agent-queue-mail (and (not is-queue)
+                                     gnus-agent-queue-mail))
+         type method move-to)
     (gnus-draft-setup article (or group "nndraft:queue"))
     ;; We read the meta-information that says how and where
     ;; this message is to be sent.
             (concat "^" (regexp-quote gnus-agent-target-move-group-header)
                     ":") nil t)
        (skip-syntax-forward "-")
-       (setq move-to (buffer-substring (point) (gnus-point-at-eol)))
+       (setq move-to (buffer-substring (point) (point-at-eol)))
        (message-remove-header gnus-agent-target-move-group-header))
       (goto-char (point-min))
       (when (re-search-forward
 (defun gnus-group-send-queue ()
   "Send all sendable articles from the queue group."
   (interactive)
-  (gnus-activate-group "nndraft:queue")
-  (save-excursion
-    (let* ((articles (nndraft-articles))
-          (unsendable (gnus-uncompress-range
-                       (cdr (assq 'unsend
-                                  (gnus-info-marks
-                                   (gnus-get-info "nndraft:queue"))))))
-          (gnus-posting-styles nil)
-          (total (length articles))
-          article)
-      (while (setq article (pop articles))
-       (unless (memq article unsendable)
-         (let ((message-sending-message
-                (format "Sending message %d of %d..."
-                        (- total (length articles)) total)))
-           (gnus-draft-send article)))))))
+  (when (or gnus-plugged
+           (not gnus-agent-prompt-send-queue)
+           (gnus-y-or-n-p "Gnus is unplugged; really send queue? "))
+    (gnus-activate-group "nndraft:queue")
+    (save-excursion
+      (let* ((articles (nndraft-articles))
+            (unsendable (gnus-uncompress-range
+                         (cdr (assq 'unsend
+                                    (gnus-info-marks
+                                     (gnus-get-info "nndraft:queue"))))))
+            (gnus-posting-styles nil)
+            (total (length articles))
+            article)
+       (while (setq article (pop articles))
+         (unless (memq article unsendable)
+           (let ((message-sending-message
+                  (format "Sending message %d of %d..."
+                          (- total (length articles)) total)))
+             (gnus-draft-send article))))))))
 
 ;;;###autoload
 (defun gnus-draft-reminder ()
index 153a02b..6d0a617 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -37,8 +37,7 @@
 (defvar gnus-down-mouse-2 [down-mouse-2])
 (defvar gnus-widget-button-keymap nil)
 (defvar gnus-mode-line-modified
-  (if (or (featurep 'xemacs)
-         (< emacs-major-version 20))
+  (if (featurep 'xemacs)
       '("--**-" . "-----")
     '("**" "--")))
 
        valstr)))
 
 (eval-and-compile
-  (defalias 'gnus-char-width
-    (if (fboundp 'char-width)
-       'char-width
-      (lambda (ch) 1)))) ;; A simple hack.
-
-(eval-and-compile
   (if (featurep 'xemacs)
       (gnus-xmas-define)
     (defvar gnus-mouse-face-prop 'mouse-face
   "Non-nil means the mark and region are currently active in this buffer."
   mark-active) ; aliased to region-exists-p in XEmacs.
 
-(if (fboundp 'add-minor-mode)
-    (defalias 'gnus-add-minor-mode 'add-minor-mode)
-  (defun gnus-add-minor-mode (mode name map &rest rest)
-    (set (make-local-variable mode) t)
-    (unless (assq mode minor-mode-alist)
-      (push `(,mode ,name) minor-mode-alist))
-    (unless (assq mode minor-mode-map-alist)
-      (push (cons mode map)
-           minor-mode-map-alist))))
-
 (defun gnus-x-splash ()
   "Show a splash screen using a pixmap in the current buffer."
   (let ((dir (nnheader-find-etc-directory "gnus"))
index b293d4e..1892e6a 100644 (file)
 ;;; Code:
 
 (eval-when-compile
-  (require 'cl)
-  (require 'mm-util))
+  (require 'cl))
+
+(require 'mm-util)
+(require 'gnus-ems)
+(require 'gnus-util)
 
 (defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory)
   "*Directory where X-Face PBM files are stored."
@@ -53,6 +56,30 @@ on stdout."
   :group 'gnus-fun
   :type 'string)
 
+(defcustom gnus-face-properties-alist (if (featurep 'xemacs)
+                                         '((xface . (:face gnus-x-face)))
+                                       '((pbm . (:face gnus-x-face))
+                                         (png . nil)))
+  "Alist of image types and properties applied to Face and X-Face images.
+Here are examples:
+
+;; Specify the altitude of Face images in the From header.
+\(setq gnus-face-properties-alist
+      '((pbm . (:face gnus-x-face :ascent 80))
+       (png . (:ascent 80))))
+
+;; Show Face images as pressed buttons.
+\(setq gnus-face-properties-alist
+      '((pbm . (:face gnus-x-face :relief -2))
+       (png . (:relief -2))))
+
+See the manual for the valid properties for various image types.
+Currently, `pbm' is used for X-Face images and `png' is used for Face
+images in Emacs.  Only the `:face' property is effective on the `xface'
+image type in XEmacs if it is built with the libcompface library."
+  :group 'gnus-fun
+  :type '(repeat (cons :format "%v" (symbol :tag "Image type") plist)))
+
 (defun gnus-shell-command-to-string (command)
   "Like `shell-command-to-string' except not mingling ERROR."
   (with-output-to-string
@@ -188,11 +215,11 @@ colors of the displayed X-Faces."
           'xface
           (gnus-put-image
            (if (gnus-image-type-available-p 'xface)
-               (gnus-create-image
-                (concat "X-Face: " data)
-                'xface t :face 'gnus-x-face)
-             (gnus-create-image
-              pbm 'pbm t :face 'gnus-x-face)) nil 'xface))
+               (apply 'gnus-create-image (concat "X-Face: " data) 'xface t
+                      (cdr (assq 'xface gnus-face-properties-alist)))
+             (apply 'gnus-create-image pbm 'pbm t
+                    (cdr (assq 'pbm gnus-face-properties-alist))))
+           nil 'xface))
          (gnus-add-wash-type 'xface))))))
 
 (defun gnus-grab-cam-x-face ()
index 5aa619c..1a2140e 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-group.el --- group mode commands for Gnus
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 (require 'time-date)
 (require 'gnus-ems)
 
-(eval-when-compile (require 'mm-url))
+(eval-when-compile 
+  (require 'mm-url)
+  (let ((features (cons 'gnus-group features)))
+    (require 'gnus-sum))
+  (unless (boundp 'gnus-cache-active-hashtb)
+    (defvar gnus-cache-active-hashtb nil)))
+
+(autoload 'gnus-agent-total-fetched-for "gnus-agent")
+(autoload 'gnus-cache-total-fetched-for "gnus-cache")
 
 (defcustom gnus-group-archive-directory
-  "*ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/"
+  "/ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/"
   "*The address of the (ding) archives."
   :group 'gnus-group-foreign
   :type 'directory)
 
 (defcustom gnus-group-recent-archive-directory
-  "*ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list-recent/"
+  "/ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list-recent/"
   "*The address of the most recent (ding) articles."
   :group 'gnus-group-foreign
   :type 'directory)
 
-(defcustom gnus-no-groups-message "No gnus is bad news"
+(defcustom gnus-no-groups-message "No Gnus is good news"
   "*Message displayed by Gnus when no groups are available."
   :group 'gnus-start
   :type 'string)
@@ -145,7 +153,7 @@ list."
                         (function-item gnus-group-sort-by-rank)
                         (function :tag "other" nil))))
 
-(defcustom gnus-group-line-format "%M\%S\%p\%P\%5y:%B%(%g%)%l %O\n"
+(defcustom gnus-group-line-format "%M\%S\%p\%P\%5y:%B%(%g%)%O\n"
   "*Format of group lines.
 It works along the same lines as a normal formatting string,
 with some simple extensions.
@@ -173,11 +181,11 @@ with some simple extensions.
 %O    Moderated group (string, \"(m)\" or \"\")
 %P    Topic indentation (string)
 %m    Whether there is new(ish) mail in the group (char, \"%\")
-%l    Whether there are GroupLens predictions for this group (string)
 %n    Select from where (string)
 %z    A string that look like `<%s:%n>' if a foreign select method is used
 %d    The date the group was last entered.
 %E    Icon as defined by `gnus-group-icon-list'.
+%F    The disk space used by the articles fetched by both the cache and agent.
 %u    User defined specifier.  The next character in the format string should
       be a letter.  Gnus will call the function gnus-user-format-function-X,
       where X is the letter following %u.  The function will be passed a
@@ -192,10 +200,10 @@ output may end up looking strange when listing both alive and killed
 groups.
 
 If you use %o or %O, reading the active file will be slower and quite
-a bit of extra memory will be used.  %D will also worsen performance.
-Also note that if you change the format specification to include any
-of these specs, you must probably re-start Gnus to see them go into
-effect.
+a bit of extra memory will be used.  %D and %F will also worsen
+performance.  Also note that if you change the format specification to
+include any of these specs, you must probably re-start Gnus to see
+them go into effect.
 
 General format specifiers can also be used.
 See Info node `(gnus)Formatting Variables'."
@@ -494,11 +502,12 @@ simple manner.")
     (?P gnus-group-indentation ?s)
     (?E gnus-tmp-group-icon ?s)
     (?B gnus-tmp-summary-live ?c)
-    (?l gnus-tmp-grouplens ?s)
     (?z gnus-tmp-news-method-string ?s)
     (?m (gnus-group-new-mail gnus-tmp-group) ?c)
     (?d (gnus-group-timestamp-string gnus-tmp-group) ?s)
-    (?u gnus-tmp-user-defined ?s)))
+    (?u gnus-tmp-user-defined ?s)
+    (?F (gnus-total-fetched-for gnus-tmp-group) ?s)
+    ))
 
 (defvar gnus-group-mode-line-format-alist
   `((?S gnus-tmp-news-server ?s)
@@ -711,7 +720,8 @@ simple manner.")
   "?"  gnus-group-list-plus)
 
 (gnus-define-keys (gnus-group-score-map "W" gnus-group-mode-map)
-  "f" gnus-score-flush-cache)
+  "f" gnus-score-flush-cache
+  "e" gnus-score-edit-all-score)
 
 (gnus-define-keys (gnus-group-help-map "H" gnus-group-mode-map)
   "c" gnus-group-fetch-charter
@@ -1123,7 +1133,7 @@ Also see the `gnus-group-use-permanent-levels' variable."
   (gnus-group-setup-buffer)
   (gnus-update-format-specifications nil 'group 'group-mode)
   (let ((case-fold-search nil)
-       (props (text-properties-at (gnus-point-at-bol)))
+       (props (text-properties-at (point-at-bol)))
        (empty (= (point-min) (point-max)))
        (group (gnus-group-group-name))
        number)
@@ -1155,7 +1165,7 @@ Also see the `gnus-group-use-permanent-levels' variable."
                     (point-min) (point-max)
                     'gnus-group (gnus-intern-safe
                                  group gnus-active-hashtb))))
-         (let ((newsrc (cdddr (gnus-gethash group gnus-newsrc-hashtb))))
+         (let ((newsrc (cdddr (gnus-group-entry group))))
            (while (and newsrc
                        (not (gnus-goto-char
                              (text-property-any
@@ -1210,7 +1220,7 @@ if it is a string, only list groups matching REGEXP."
              group (gnus-info-group info)
              params (gnus-info-params info)
              newsrc (cdr newsrc)
-             unread (car (gnus-gethash group gnus-newsrc-hashtb)))
+             unread (gnus-group-unread group))
        (when not-in-list
          (setq not-in-list (delete group not-in-list)))
        (when (gnus-group-prepare-logic
@@ -1310,7 +1320,7 @@ if it is a string, only list groups matching REGEXP."
   "Update the current line in the group buffer."
   (let* ((buffer-read-only nil)
         (group (gnus-group-group-name))
-        (entry (and group (gnus-gethash group gnus-newsrc-hashtb)))
+        (entry (and group (gnus-group-entry group)))
         gnus-group-indentation)
     (when group
       (and entry
@@ -1327,7 +1337,7 @@ if it is a string, only list groups matching REGEXP."
 
 (defun gnus-group-insert-group-line-info (group)
   "Insert GROUP on the current line."
-  (let ((entry (gnus-gethash group gnus-newsrc-hashtb))
+  (let ((entry (gnus-group-entry group))
        (gnus-group-indentation (gnus-group-group-indentation))
        active info)
     (if entry
@@ -1424,10 +1434,6 @@ if it is a string, only list groups matching REGEXP."
         (gnus-tmp-process-marked
          (if (member gnus-tmp-group gnus-group-marked)
              gnus-process-mark ? ))
-        (gnus-tmp-grouplens
-         (or (and gnus-use-grouplens
-                  (bbb-grouplens-group-p gnus-tmp-group))
-             ""))
         (buffer-read-only nil)
         header gnus-tmp-header)        ; passed as parameter to user-funcs.
     (beginning-of-line)
@@ -1456,7 +1462,7 @@ if it is a string, only list groups matching REGEXP."
   "Highlight the current line according to `gnus-group-highlight'."
   (let* ((list gnus-group-highlight)
         (p (point))
-        (end (gnus-point-at-eol))
+        (end (point-at-eol))
         ;; now find out where the line starts and leave point there.
         (beg (progn (beginning-of-line) (point)))
         (group (gnus-group-group-name))
@@ -1507,7 +1513,7 @@ already."
            (loc (point-min))
            found buffer-read-only)
        ;; Enter the current status into the dribble buffer.
-       (let ((entry (gnus-gethash group gnus-newsrc-hashtb)))
+       (let ((entry (gnus-group-entry group)))
          (when (and entry
                     (not (gnus-ephemeral-group-p group)))
            (gnus-dribble-enter
@@ -1532,7 +1538,7 @@ already."
          ;; go, and insert it there (or at the end of the buffer).
          (if gnus-goto-missing-group-function
              (funcall gnus-goto-missing-group-function group)
-           (let ((entry (cddr (gnus-gethash group gnus-newsrc-hashtb))))
+           (let ((entry (cddr (gnus-group-entry group))))
              (while (and entry (car entry)
                          (not
                           (gnus-goto-char
@@ -1592,24 +1598,24 @@ already."
 
 (defun gnus-group-group-name ()
   "Get the name of the newsgroup on the current line."
-  (let ((group (get-text-property (gnus-point-at-bol) 'gnus-group)))
+  (let ((group (get-text-property (point-at-bol) 'gnus-group)))
     (when group
       (symbol-name group))))
 
 (defun gnus-group-group-level ()
   "Get the level of the newsgroup on the current line."
-  (get-text-property (gnus-point-at-bol) 'gnus-level))
+  (get-text-property (point-at-bol) 'gnus-level))
 
 (defun gnus-group-group-indentation ()
   "Get the indentation of the newsgroup on the current line."
-  (or (get-text-property (gnus-point-at-bol) 'gnus-indentation)
+  (or (get-text-property (point-at-bol) 'gnus-indentation)
       (and gnus-group-indentation-function
           (funcall gnus-group-indentation-function))
       ""))
 
 (defun gnus-group-group-unread ()
   "Get the number of unread articles of the newsgroup on the current line."
-  (get-text-property (gnus-point-at-bol) 'gnus-unread))
+  (get-text-property (point-at-bol) 'gnus-unread))
 
 (defun gnus-group-new-mail (group)
   (if (nnmail-new-mail-p (gnus-group-real-name group))
@@ -1667,6 +1673,18 @@ If FIRST-TOO, the current line is also eligible as a target."
       (goto-char (or pos beg))
       (and pos t))))
 
+(defun gnus-total-fetched-for (group)
+  (let* ((size-in-cache (or (gnus-cache-total-fetched-for group) 0))
+        (size-in-agent (or (gnus-agent-total-fetched-for group) 0))
+        (size (+ size-in-cache size-in-agent))
+        (suffix '("B" "K" "M" "G"))
+        (scale 1024.0)
+        (cutoff (* 10 scale)))
+    (while (> size cutoff)
+      (setq size (/ size scale)
+           suffix (cdr suffix)))
+    (format "%5.1f%s" size (car suffix))))
+
 ;;; Gnus group mode commands
 
 ;; Group marking.
@@ -1688,15 +1706,14 @@ If FIRST-TOO, the current line is also eligible as a target."
        ;; Go to the mark position.
        (beginning-of-line)
        (forward-char (or (cdr (assq 'process gnus-group-mark-positions)) 2))
-       (subst-char-in-region
-        (point) (1+ (point)) (char-after)
-        (if unmark
-            (progn
-              (setq gnus-group-marked (delete group gnus-group-marked))
-              ? )
+       (delete-char 1)
+       (if unmark
+           (progn
+             (setq gnus-group-marked (delete group gnus-group-marked))
+             (insert-char ? 1 t))
           (setq gnus-group-marked
                 (cons group (delete group gnus-group-marked)))
-          gnus-process-mark)))
+          (insert-char gnus-process-mark 1 t)))
       (unless no-advance
        (gnus-group-next-group 1))
       (decf n))
@@ -1861,8 +1878,7 @@ group."
     (unless group
       (error "No group on current line"))
     (setq marked (gnus-info-marks
-                 (nth 2 (setq entry (gnus-gethash
-                                     group gnus-newsrc-hashtb)))))
+                 (nth 2 (setq entry (gnus-group-entry group)))))
     ;; This group might be a dead group.  In that case we have to get
     ;; the number of unread articles from `gnus-active-hashtb'.
     (setq number
@@ -2233,15 +2249,14 @@ ADDRESS."
                    method))))
         (nname (if method (gnus-group-prefixed-name name meth) name))
         backend info)
-    (when (gnus-gethash nname gnus-newsrc-hashtb)
+    (when (gnus-group-entry nname)
       (error "Group %s already exists" nname))
     ;; Subscribe to the new group.
     (gnus-group-change-level
      (setq info (list t nname gnus-level-default-subscribed nil nil meth))
      gnus-level-default-subscribed gnus-level-killed
      (and (gnus-group-group-name)
-         (gnus-gethash (gnus-group-group-name)
-                       gnus-newsrc-hashtb))
+         (gnus-group-entry (gnus-group-group-name)))
      t)
     ;; Make it active.
     (gnus-set-active nname (cons 1 0))
@@ -2279,8 +2294,6 @@ ADDRESS."
        (lambda (group)
          (gnus-group-delete-group group nil t))))))
 
-(defvar gnus-cache-active-altered)
-
 (defun gnus-group-delete-group (group &optional force no-prompt)
   "Delete the current group.  Only meaningful with editable groups.
 If FORCE (the prefix) is non-nil, all the articles in the group will
@@ -2309,11 +2322,7 @@ be removed from the server, even when it's empty."
          (gnus-message 6 "Deleting group %s...done" group)
          (gnus-group-goto-group group)
          (gnus-group-kill-group 1 t)
-         (gnus-sethash group nil gnus-active-hashtb)
-         (if (boundp 'gnus-cache-active-hashtb)
-             (when gnus-cache-active-hashtb
-               (gnus-sethash group nil gnus-cache-active-hashtb)
-               (setq gnus-cache-active-altered t)))
+         (gnus-set-active group nil)
          t))
     (gnus-group-position-point)))
 
@@ -2480,7 +2489,7 @@ group already exists:
   (interactive)
   (let ((name (gnus-group-prefixed-name "gnus-help" '(nndoc "gnus-help")))
        (file (nnheader-find-etc-directory "gnus-tut.txt" t)))
-    (if (gnus-gethash name gnus-newsrc-hashtb)
+    (if (gnus-group-entry name)
        (cond ((eq noerror nil)
               (error "Documentation group already exists"))
              ((eq noerror t)
@@ -2638,7 +2647,7 @@ Given a prefix, create a full group."
   (interactive "P")
   (let ((group (gnus-group-prefixed-name
                (if all "ding.archives" "ding.recent") '(nndir ""))))
-    (when (gnus-gethash group gnus-newsrc-hashtb)
+    (when (gnus-group-entry group)
       (error "Archive group already exists"))
     (gnus-group-make-group
      (gnus-group-real-name group)
@@ -2662,7 +2671,7 @@ mail messages or news articles in files that have numeric names."
   (let ((ext "")
        (i 0)
        group)
-    (while (or (not group) (gnus-gethash group gnus-newsrc-hashtb))
+    (while (or (not group) (gnus-group-entry group))
       (setq group
            (gnus-group-prefixed-name
             (expand-file-name ext dir)
@@ -2681,7 +2690,7 @@ score file entries for articles to include in the group."
    (list
     (read-string "nnkiboze group name: ")
     (read-string "Source groups (regexp): ")
-    (let ((headers (mapcar (lambda (group) (list group))
+    (let ((headers (mapcar 'list
                           '("subject" "from" "number" "date" "message-id"
                             "references" "chars" "lines" "xref"
                             "followup" "all" "body" "head")))
@@ -2732,7 +2741,7 @@ score file entries for articles to include in the group."
   (let* ((method (list 'nnvirtual "^$"))
         (pgroup (gnus-group-prefixed-name group method)))
     ;; Check whether it exists already.
-    (when (gnus-gethash pgroup gnus-newsrc-hashtb)
+    (when (gnus-group-entry pgroup)
       (error "Group %s already exists" pgroup))
     ;; Subscribe the new group after the group on the current line.
     (gnus-subscribe-group pgroup (gnus-group-group-name) method)
@@ -2904,7 +2913,7 @@ If REVERSE, sort in reverse order."
   (let (entries infos)
     ;; First find all the group entries for these groups.
     (while groups
-      (push (nthcdr 2 (gnus-gethash (pop groups) gnus-newsrc-hashtb))
+      (push (nthcdr 2 (gnus-group-entry (pop groups)))
            entries))
     ;; Then sort the infos.
     (setq infos
@@ -2985,8 +2994,8 @@ sort in reverse order."
 
 (defun gnus-group-sort-by-unread (info1 info2)
   "Sort by number of unread articles."
-  (let ((n1 (car (gnus-gethash (gnus-info-group info1) gnus-newsrc-hashtb)))
-       (n2 (car (gnus-gethash (gnus-info-group info2) gnus-newsrc-hashtb))))
+  (let ((n1 (gnus-group-unread (gnus-info-group info1)))
+       (n2 (gnus-group-unread (gnus-info-group info1))))
     (< (or (and (numberp n1) n1) 0)
        (or (and (numberp n2) n2) 0))))
 
@@ -3126,10 +3135,10 @@ Cross references (Xref: header) of articles are ignored."
 If ALL is non-nil, all articles are marked as read.
 The return value is the number of articles that were marked as read,
 or nil if no action could be taken."
-  (let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
+  (let* ((entry (gnus-group-entry group))
         (num (car entry))
-        (marks (nth 3 (nth 2 entry)))
-        (unread (gnus-list-of-unread-articles group)))
+        (marks (gnus-info-marks (nth 2 entry)))
+        (unread (gnus-sequence-of-unread-articles group)))
     ;; Remove entries for this group.
     (nnmail-purge-split-history (gnus-group-real-name group))
     ;; Do the updating only if the newsgroup isn't killed.
@@ -3142,16 +3151,17 @@ or nil if no action could be taken."
                                                 'del '(tick))
                                           (list (cdr (assq 'dormant marks))
                                                 'del '(dormant))))
-       (setq unread (gnus-uncompress-range
-                     (gnus-range-add (gnus-range-add
-                                      unread (cdr (assq 'dormant marks)))
-                                     (cdr (assq 'tick marks)))))
+       (setq unread (gnus-range-add (gnus-range-add
+                                      unread (cdr (assq 'dormant marks)))
+                                     (cdr (assq 'tick marks))))
        (gnus-add-marked-articles group 'tick nil nil 'force)
        (gnus-add-marked-articles group 'dormant nil nil 'force))
       ;; Do auto-expirable marks if that's required.
       (when (gnus-group-auto-expirable-p group)
-       (gnus-add-marked-articles group 'expire unread)
-       (gnus-request-set-mark group (list (list unread 'add '(expire)))))
+        (gnus-range-map (lambda (article)
+                          (gnus-add-marked-articles group 'expire (list article))
+                          (gnus-request-set-mark group (list (list (list article) 'add '(expire)))))
+                        unread))
       (let ((gnus-newsgroup-name group))
        (gnus-run-hooks 'gnus-group-catchup-group-hook))
       num)))
@@ -3284,7 +3294,7 @@ group line."
          (gnus-read-active-file-p)
          nil
          'gnus-group-history)))
-  (let ((newsrc (gnus-gethash group gnus-newsrc-hashtb)))
+  (let ((newsrc (gnus-group-entry group)))
     (cond
      ((string-match "^[ \t]*$" group)
       (error "Empty group name"))
@@ -3308,7 +3318,7 @@ group line."
                gnus-level-zombie)
           gnus-level-killed)
        (when (gnus-group-group-name)
-        (gnus-gethash (gnus-group-group-name) gnus-newsrc-hashtb)))
+        (gnus-group-entry (gnus-group-group-name))))
       (unless silent
        (gnus-group-update-group group)))
      (t (error "No such newsgroup: %s" group)))
@@ -3347,12 +3357,10 @@ The killed newsgroups can be yanked by using \\[gnus-group-yank-group]."
           (count-lines
            (progn
              (goto-char begin)
-             (beginning-of-line)
-             (point))
+             (point-at-bol))
            (progn
              (goto-char end)
-             (beginning-of-line)
-             (point))))))
+             (point-at-bol))))))
     (goto-char begin)
     (beginning-of-line)                        ;Important when LINES < 1
     (gnus-group-kill-group lines)))
@@ -3376,7 +3384,7 @@ of groups killed."
          (setq level (gnus-group-group-level))
          (gnus-delete-line)
          (when (and (not discard)
-                    (setq entry (gnus-gethash group gnus-newsrc-hashtb)))
+                    (setq entry (gnus-group-entry group)))
            (gnus-undo-register
              `(progn
                 (gnus-group-goto-group ,(gnus-group-group-name))
@@ -3399,7 +3407,7 @@ of groups killed."
          (funcall gnus-group-change-level-function
                   group gnus-level-killed 3))
        (cond
-        ((setq entry (gnus-gethash group gnus-newsrc-hashtb))
+        ((setq entry (gnus-group-entry group))
          (push (cons (car entry) (nth 2 entry))
                gnus-list-of-killed-groups)
          (setcdr (cdr entry) (cdddr entry)))
@@ -3432,7 +3440,7 @@ yanked) a list of yanked groups is returned."
       (setq prev (gnus-group-group-name))
       (gnus-group-change-level
        info (gnus-info-level (cdr info)) gnus-level-killed
-       (and prev (gnus-gethash prev gnus-newsrc-hashtb))
+       (and prev (gnus-group-entry prev))
        t)
       (gnus-group-insert-group-line-info group)
       (gnus-undo-register
@@ -3513,7 +3521,7 @@ entail asking the server for the groups."
   ;; First we make sure that we have really read the active file.
   (unless (gnus-read-active-file-p)
     (let ((gnus-read-active-file t)
-         (gnus-agent nil))             ; Trick the agent into ignoring the active file.
+         (gnus-agent gnus-plugged)); If we're actually plugged, store the active file in the agent.
       (gnus-read-active-file)))
   ;; Find all groups and sort them.
   (let ((groups
@@ -3921,10 +3929,8 @@ The hook `gnus-suspend-gnus-hook' is called before actually suspending."
   (let ((group-buf (get-buffer gnus-group-buffer)))
     (mapcar (lambda (buf)
              (unless (or (member buf (list group-buf gnus-dribble-buffer))
-                         (progn
-                           (save-excursion
-                             (set-buffer buf)
-                             (eq major-mode 'message-mode))))
+                         (with-current-buffer buf
+                           (eq major-mode 'message-mode)))
                (gnus-kill-buffer buf)))
            (gnus-buffers))
     (setq gnus-backlog-articles nil)
@@ -4010,17 +4016,15 @@ and the second element is the address."
                     ;; Suggested by mapjph@bath.ac.uk.
                     (completing-read
                      "Address: "
-                     (mapcar (lambda (server) (list server))
-                             gnus-secondary-servers)))
+                     (mapcar 'list gnus-secondary-servers)))
             ;; We got a server name.
             how))))
   (gnus-browse-foreign-server method))
 
 (defun gnus-group-set-info (info &optional method-only-group part)
   (when (or info part)
-    (let* ((entry (gnus-gethash
-                  (or method-only-group (gnus-info-group info))
-                  gnus-newsrc-hashtb))
+    (let* ((entry (gnus-group-entry
+                  (or method-only-group (gnus-info-group info))))
           (part-info info)
           (info (if method-only-group (nth 2 entry) info))
           method)
@@ -4058,10 +4062,9 @@ and the second element is the address."
              (gnus-group-make-group (gnus-info-group info))))
          (gnus-message 6 "Note: New group created")
          (setq entry
-               (gnus-gethash (gnus-group-prefixed-name
-                              (gnus-group-real-name (gnus-info-group info))
-                              (or (gnus-info-method info) gnus-select-method))
-                             gnus-newsrc-hashtb))))
+               (gnus-group-entry (gnus-group-prefixed-name
+                                  (gnus-group-real-name (gnus-info-group info))
+                                  (or (gnus-info-method info) gnus-select-method))))))
       ;; Whether it was a new group or not, we now have the entry, so we
       ;; can do the update.
       (if entry
index 0acdf81..41344cc 100644 (file)
@@ -33,6 +33,7 @@
 (require 'gnus-range)
 
 (autoload 'gnus-agent-expire "gnus-agent")
+(autoload 'gnus-agent-regenerate-group "gnus-agent")
 (autoload 'gnus-agent-read-servers-validate-native "gnus-agent")
 
 (defcustom gnus-open-server-hook nil
@@ -72,7 +73,7 @@ If CONFIRM is non-nil, the user will be asked for an NNTP server."
        ;; Read server name with completion.
        (setq gnus-nntp-server
              (completing-read "NNTP server: "
-                              (mapcar (lambda (server) (list server))
+                              (mapcar 'list
                                       (cons (list gnus-nntp-server)
                                             gnus-secondary-servers))
                               nil nil gnus-nntp-server)))
@@ -175,7 +176,7 @@ If it is down, start it up (again)."
     (setq method (gnus-server-to-method method)))
   ;; Check cache of constructed names.
   (let* ((method-sym (if gnus-agent
-                        (gnus-agent-get-function method)
+                        (inline (gnus-agent-get-function method))
                       (car method)))
         (method-fns (get method-sym 'gnus-method-functions))
         (func (let ((method-fnlist-elt (assq function method-fns)))
@@ -337,7 +338,7 @@ name.  The method this group uses will be queried."
     (when (stringp gnus-command-method)
       (setq gnus-command-method
            (inline (gnus-server-to-method gnus-command-method))))
-    (funcall (inline (gnus-get-function gnus-command-method 'request-group))
+        (funcall (inline (gnus-get-function gnus-command-method 'request-group))
             (gnus-group-real-name group) (nth 1 gnus-command-method)
             dont-check)))
 
@@ -516,12 +517,11 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
         (if group (gnus-find-method-for-group group) gnus-command-method))
        (gnus-inhibit-demon t)
        (mail-source-plugged gnus-plugged))
-    (if (or gnus-plugged (not (gnus-agent-method-p gnus-command-method)))
-       (progn
-         (setq gnus-internal-registry-spool-current-method gnus-command-method)
-         (funcall (gnus-get-function gnus-command-method 'request-scan)
-                  (and group (gnus-group-real-name group))
-                  (nth 1 gnus-command-method))))))
+    (when (or gnus-plugged (not (gnus-agent-method-p gnus-command-method)))
+      (setq gnus-internal-registry-spool-current-method gnus-command-method)
+      (funcall (gnus-get-function gnus-command-method 'request-scan)
+              (and group (gnus-group-real-name group))
+              (nth 1 gnus-command-method)))))
 
 (defsubst gnus-request-update-info (info gnus-command-method)
   "Request that GNUS-COMMAND-METHOD update INFO."
@@ -579,7 +579,8 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
     (setq gnus-command-method (gnus-server-to-method gnus-command-method)))
   (when (and (not gnus-command-method)
             (stringp group))
-    (setq gnus-command-method (gnus-group-name-to-method group)))
+    (setq gnus-command-method (or (gnus-find-method-for-group group)
+                                  (gnus-group-name-to-method group))))
   (goto-char (point-max))
   (unless (bolp)
     (insert "\n"))
@@ -592,11 +593,16 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
          (mail-encode-encoded-word-buffer)))
       (message-encode-message-body)))
   (let ((gnus-command-method (or gnus-command-method
-                                (gnus-find-method-for-group group))))
-    (funcall (gnus-get-function gnus-command-method 'request-accept-article)
-            (if (stringp group) (gnus-group-real-name group) group)
-            (cadr gnus-command-method)
-            last)))
+                                (gnus-find-method-for-group group)))
+       (result 
+        (funcall 
+         (gnus-get-function gnus-command-method 'request-accept-article)
+         (if (stringp group) (gnus-group-real-name group) group)
+         (cadr gnus-command-method)
+         last)))
+    (when (and gnus-agent (gnus-agent-method-p gnus-command-method))
+      (gnus-agent-regenerate-group group (list (cdr result))))
+    result))
 
 (defun gnus-request-replace-article (article group buffer &optional no-encode)
   (unless no-encode
@@ -607,9 +613,12 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
        (let ((mail-parse-charset message-default-charset))
          (mail-encode-encoded-word-buffer)))
       (message-encode-message-body)))
-  (let ((func (car (gnus-group-name-to-method group))))
-    (funcall (intern (format "%s-request-replace-article" func))
-            article (gnus-group-real-name group) buffer)))
+  (let* ((func (car (gnus-group-name-to-method group)))
+         (result (funcall (intern (format "%s-request-replace-article" func))
+                         article (gnus-group-real-name group) buffer)))
+    (when (and gnus-agent (gnus-agent-method-p gnus-command-method))
+      (gnus-agent-regenerate-group group (list article)))
+    result))
 
 (defun gnus-request-associate-buffer (group)
   (let ((gnus-command-method (gnus-find-method-for-group group)))
@@ -632,15 +641,25 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
             (gnus-group-real-name group) (nth 1 gnus-command-method) args)))
 
 (defun gnus-request-delete-group (group &optional force)
-  (let ((gnus-command-method (gnus-find-method-for-group group)))
-    (funcall (gnus-get-function gnus-command-method 'request-delete-group)
-            (gnus-group-real-name group) force (nth 1 gnus-command-method))))
+  (let* ((gnus-command-method (gnus-find-method-for-group group))
+        (result
+         (funcall (gnus-get-function gnus-command-method 'request-delete-group)
+                  (gnus-group-real-name group) force (nth 1 gnus-command-method))))
+    (when result
+      (gnus-cache-delete-group group)
+      (gnus-agent-delete-group group))
+    result))
 
 (defun gnus-request-rename-group (group new-name)
-  (let ((gnus-command-method (gnus-find-method-for-group group)))
-    (funcall (gnus-get-function gnus-command-method 'request-rename-group)
-            (gnus-group-real-name group)
-            (gnus-group-real-name new-name) (nth 1 gnus-command-method))))
+  (let* ((gnus-command-method (gnus-find-method-for-group group))
+        (result
+         (funcall (gnus-get-function gnus-command-method 'request-rename-group)
+                  (gnus-group-real-name group)
+                  (gnus-group-real-name new-name) (nth 1 gnus-command-method))))
+    (when result
+      (gnus-cache-rename-group group new-name)
+      (gnus-agent-rename-group group new-name))
+    result))
 
 (defun gnus-close-backends ()
   ;; Send a close request to all backends that support such a request.
index cf95f9f..d634dfe 100644 (file)
@@ -496,7 +496,7 @@ Optional 1st argument COMMAND is default to
        (gnus-summary-mark-as-read nil \"X\").
 If optional 2nd argument ALL is non-nil, articles marked are also applied to.
 If FIELD is an empty string (or nil), entire article body is searched for.
-COMMAND must be a lisp expression or a string representing a key sequence."
+COMMAND must be a Lisp expression or a string representing a key sequence."
   ;; We don't want to change current point nor window configuration.
   (let ((old-buffer (current-buffer)))
     (save-excursion
@@ -624,7 +624,7 @@ COMMAND must be a lisp expression or a string representing a key sequence."
       did-kill)))
 
 (defun gnus-execute (field regexp form &optional backward unread)
-  "If FIELD of article header matches REGEXP, execute lisp FORM (or a string).
+  "If FIELD of article header matches REGEXP, execute Lisp FORM (or a string).
 If FIELD is an empty string (or nil), entire article body is searched for.
 If optional 1st argument BACKWARD is non-nil, do backward instead.
 If optional 2nd argument UNREAD is non-nil, articles which are
@@ -690,7 +690,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score"
         (mail-sources nil)
         (gnus-use-dribble-file nil)
         (gnus-batch-mode t)
-        info group newsrc entry
+        info group newsrc unread
         ;; Disable verbose message.
         gnus-novice-user gnus-large-newsgroup
         gnus-options-subscribe gnus-auto-subscribed-groups
@@ -702,11 +702,11 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score"
     (setq newsrc (cdr gnus-newsrc-alist))
     (while (setq info (pop newsrc))
       (setq group (gnus-info-group info)
-           entry (gnus-gethash group gnus-newsrc-hashtb))
+           unread (gnus-group-unread group))
       (when (and (<= (gnus-info-level info) gnus-level-subscribed)
-                (and (car entry)
-                     (or (eq (car entry) t)
-                         (not (zerop (car entry))))))
+                (and unread
+                     (or (eq unread t)
+                         (not (zerop unread)))))
        (ignore-errors
          (gnus-summary-read-group group nil t nil t))
        (when (eq (current-buffer) (get-buffer gnus-summary-buffer))
index 978b2e3..f102fb2 100644 (file)
@@ -3,7 +3,7 @@
 ;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
 
 ;; Author: Julien Gilles  <jgilles@free.fr>
-;; Keywords: news
+;; Keywords: news, mail
 
 ;; This file is part of GNU Emacs.
 
@@ -102,7 +102,7 @@ If FORCE is non-nil, replace the old ones."
       ;; Set up the menu.
       (when (gnus-visual-p 'mailing-list-menu 'menu)
        (gnus-mailing-list-make-menu-bar))
-      (gnus-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
@@ -117,7 +117,7 @@ If FORCE is non-nil, replace the old ones."
          (t (gnus-message 1 "no list-help in this group")))))
 
 (defun gnus-mailing-list-subscribe ()
-  "Subscribe"
+  "Subscribe."
   (interactive)
   (let ((list-subscribe
         (with-current-buffer gnus-original-article-buffer
@@ -126,7 +126,7 @@ If FORCE is non-nil, replace the old ones."
          (t (gnus-message 1 "no list-subscribe in this group")))))
 
 (defun gnus-mailing-list-unsubscribe ()
-  "Unsubscribe"
+  "Unsubscribe."
   (interactive)
   (let ((list-unsubscribe
         (with-current-buffer gnus-original-article-buffer
@@ -144,7 +144,7 @@ If FORCE is non-nil, replace the old ones."
          (t (gnus-message 1 "no list-post in this group")))))
 
 (defun gnus-mailing-list-owner ()
-  "Mail to the owner"
+  "Mail to the owner."
   (interactive)
   (let ((list-owner
         (with-current-buffer gnus-original-article-buffer
@@ -153,7 +153,7 @@ If FORCE is non-nil, replace the old ones."
          (t (gnus-message 1 "no list-owner in this group")))))
 
 (defun gnus-mailing-list-archive ()
-  "Browse archive"
+  "Browse archive."
   (interactive)
   (require 'browse-url)
   (let ((list-archive
index 2379a17..f1f939e 100644 (file)
 (require 'nnmail)
 
 (defvar gnus-group-split-updated-hook nil
-  "Hook called just after nnmail-split-fancy is updated by
-gnus-group-split-update.")
+  "Hook called just after `nnmail-split-fancy' is updated by
+`gnus-group-split-update'.")
 
 (defvar gnus-group-split-default-catch-all-group "mail.misc"
   "Group name (or arbitrary fancy split) with default splitting rules.
-Used by gnus-group-split and gnus-group-split-update as a fallback
+Used by `gnus-group-split' and `gnus-group-split-update' as a fallback
 split, in case none of the group-based splits matches.")
 
 ;;;###autoload
 (defun gnus-group-split-setup (&optional auto-update catch-all)
-  "Set up the split for nnmail-split-fancy.
+  "Set up the split for `nnmail-split-fancy'.
 Sets things up so that nnmail-split-fancy is used for mail
 splitting, and defines the variable nnmail-split-fancy according with
 group parameters.
 
 If AUTO-UPDATE is non-nil (prefix argument accepted, if called
 interactively), it makes sure nnmail-split-fancy is re-computed before
-getting new mail, by adding gnus-group-split-update to
-nnmail-pre-get-new-mail-hook.
+getting new mail, by adding `gnus-group-split-update' to
+`nnmail-pre-get-new-mail-hook'.
 
 A non-nil CATCH-ALL replaces the current value of
-gnus-group-split-default-catch-all-group.  This variable is only used
+`gnus-group-split-default-catch-all-group'.  This variable is only used
 by gnus-group-split-update, and only when its CATCH-ALL argument is
 nil.  This argument may contain any fancy split, that will be added as
-the last split in a `|' split produced by gnus-group-split-fancy,
+the last split in a `|' split produced by `gnus-group-split-fancy',
 unless overridden by any group marked as a catch-all group.  Typical
 uses are as simple as the name of a default mail group, but more
 elaborate fancy splits may also be useful to split mail that doesn't
@@ -74,11 +74,11 @@ match any of the group-specified splitting rules.  See
 
 ;;;###autoload
 (defun gnus-group-split-update (&optional catch-all)
-  "Computes nnmail-split-fancy from group params and CATCH-ALL, by
+  "Computes `nnmail-split-fancy' from group params and CATCH-ALL, by
 calling (gnus-group-split-fancy nil nil CATCH-ALL).
 
-If CATCH-ALL is nil, gnus-group-split-default-catch-all-group is used
-instead.  This variable is set by gnus-group-split-setup."
+If CATCH-ALL is nil, `gnus-group-split-default-catch-all-group' is used
+instead.  This variable is set by `gnus-group-split-setup'."
   (interactive)
   (setq nnmail-split-fancy
        (gnus-group-split-fancy
@@ -88,10 +88,10 @@ instead.  This variable is set by gnus-group-split-setup."
 
 ;;;###autoload
 (defun gnus-group-split ()
-  "Uses information from group parameters in order to split mail.
+  "Use information from group parameters in order to split mail.
 See `gnus-group-split-fancy' for more information.
 
-gnus-group-split is a valid value for nnmail-split-methods."
+`gnus-group-split' is a valid value for `nnmail-split-methods'."
   (let (nnmail-split-fancy)
     (gnus-group-split-update)
     (nnmail-split-fancy)))
index 36839c8..3e06945 100644 (file)
@@ -176,8 +176,7 @@ Update the .newsrc.eld file to reflect the change of nntp server."
           (new-name (gnus-group-prefixed-name
                      (gnus-group-real-name group) to-server)))
       (gnus-info-set-group info new-name)
-      (gnus-sethash new-name (gnus-gethash group gnus-newsrc-hashtb)
-                   gnus-newsrc-hashtb)
+      (gnus-sethash new-name (gnus-group-entry group) gnus-newsrc-hashtb)
       (gnus-sethash group nil gnus-newsrc-hashtb))))
 
 (provide 'gnus-move)
index 3539b58..a098d06 100644 (file)
@@ -318,11 +318,7 @@ Thank you for your help in stamping out bugs.
 ")
 
 (eval-and-compile
-  (autoload 'gnus-uu-post-news "gnus-uu" nil t)
-  (autoload 'news-setup "rnewspost")
-  (autoload 'news-reply-mode "rnewspost")
-  (autoload 'rmail-dont-reply-to "mail-utils")
-  (autoload 'rmail-output "rmailout"))
+  (autoload 'gnus-uu-post-news "gnus-uu" nil t))
 
 \f
 ;;;
@@ -395,8 +391,13 @@ Thank you for your help in stamping out bugs.
        ;; added an optional argument to `gnus-configure-posting-styles' to
        ;; make sure that the correct value for the group name is used. -- drv
        (add-hook 'message-mode-hook
-                (lambda ()
-                  (gnus-configure-posting-styles ,group)))
+                (if (memq ,config '(reply-yank reply))
+                    (lambda ()
+                      (gnus-configure-posting-styles ,group))
+                  (lambda ()
+                    ;; There may be an old " *gnus article copy*" buffer.
+                    (let (gnus-article-copy)
+                      (gnus-configure-posting-styles ,group)))))
        (gnus-pull ',(intern gnus-draft-meta-information-header)
                  message-required-headers)
        (when (and ,group
@@ -673,9 +674,9 @@ network.  The corresponding back end must have a 'request-post method."
            (progn
              (message-news (gnus-group-real-name gnus-newsgroup-name))
              (set (make-local-variable 'gnus-discouraged-post-methods)
-                  (delq
+                  (remove
                    (car (gnus-find-method-for-group gnus-newsgroup-name))
-                   (copy-sequence gnus-discouraged-post-methods))))))
+                   gnus-discouraged-post-methods)))))
       (save-excursion
        (set-buffer buffer)
        (setq gnus-newsgroup-name group)))))
@@ -906,7 +907,9 @@ header line with the old Message-ID."
                     (not to-address)))
            ;; This is news.
            (if post
-               (message-news (or to-group group))
+               (message-news
+                (or to-group
+                    (and (not (gnus-virtual-group-p pgroup)) group)))
              (set-buffer gnus-article-copy)
              (gnus-msg-treat-broken-reply-to)
              (message-followup (if (or newsgroup-p force-news)
@@ -1259,6 +1262,7 @@ composing a new message."
        ;; Get a normal message buffer.
        (message-pop-to-buffer (message-buffer-name "Resend" to))
        (insert-buffer-substring cur)
+       (mime-to-mml)
        (message-narrow-to-head-1)
        ;; Gnus will generate a new one when sending.
        (message-remove-header "Message-ID")
@@ -1377,7 +1381,7 @@ The current group name will be inserted at \"%s\".")
                 (not (gnus-group-read-only-p group)))
       (setq group (read-string "Put in group: " nil (gnus-writable-groups))))
 
-    (when (gnus-gethash group gnus-newsrc-hashtb)
+    (when (gnus-group-entry group)
       (error "No such group: %s" group))
     (save-excursion
       (save-restriction
index e36c25d..bbaf550 100644 (file)
@@ -190,7 +190,7 @@ valid issuer, which is much faster if you are selective about the issuers."
                       (and gnus-nocem-check-from
                            (let ((case-fold-search t))
                              (catch 'ok
-                               (mapcar
+                               (mapc
                                 (lambda (author)
                                   (if (consp author)
                                       (setq author (car author)))
index 9303dc1..1412aff 100644 (file)
@@ -40,8 +40,9 @@
 ;;
 ;;; Code:
 
+(eval-when-compile (require 'cl))
+
 (require 'gnus)
-(require 'custom)
 (require 'gnus-art)
 
 ;;; User variables:
index 2e0a988..eea1737 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus-range.el --- range and sequence functions for Gnus
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -184,6 +184,58 @@ LIST1 and LIST2 have to be sorted over <."
     (nreverse out)))
 
 ;;;###autoload
+(defun gnus-sorted-range-intersection (range1 range2)
+  "Return intersection of RANGE1 and RANGE2.
+RANGE1 and RANGE2 have to be sorted over <."
+  (let* (out
+         (min1 (car range1))
+         (max1 (if (numberp min1) 
+                   (if (numberp (cdr range1))
+                       (prog1 (cdr range1)
+                         (setq range1 nil)) min1)
+                 (prog1 (cdr min1)
+                   (setq min1 (car min1)))))
+         (min2 (car range2))
+         (max2 (if (numberp min2)
+                   (if (numberp (cdr range2))
+                       (prog1 (cdr range2) 
+                         (setq range2 nil)) min2) 
+                 (prog1 (cdr min2)
+                   (setq min2 (car min2))))))
+    (setq range1 (cdr range1)
+          range2 (cdr range2))
+    (while (and min1 min2)
+      (cond ((< max1 min2)              ; range1 preceeds range2
+             (setq range1 (cdr range1)
+                   min1 nil))
+            ((< max2 min1)              ; range2 preceeds range1
+             (setq range2 (cdr range2)
+                   min2 nil))
+            (t                     ; some sort of overlap is occurring
+             (let ((min (max min1 min2))
+                   (max (min max1 max2)))
+               (setq out (if (= min max)
+                             (cons min out)
+                           (cons (cons min max) out))))
+             (if (< max1 max2)          ; range1 ends before range2
+                 (setq min1 nil)        ; incr range1
+               (setq min2 nil))))       ; incr range2
+      (unless min1
+        (setq min1 (car range1)
+              max1 (if (numberp min1) min1 (prog1 (cdr min1) (setq min1 (car min1))))
+              range1 (cdr range1)))
+      (unless min2
+        (setq min2 (car range2)
+              max2 (if (numberp min2) min2 (prog1 (cdr min2) (setq min2 (car min2))))
+              range2 (cdr range2))))
+    (cond ((cdr out)
+        (nreverse out))
+          ((numberp (car out))
+           out)
+          (t
+           (car out)))))
+
+;;;###autoload
 (defalias 'gnus-set-sorted-intersection 'gnus-sorted-nintersection)
 
 ;;;###autoload
@@ -255,7 +307,7 @@ LIST1 and LIST2 have to be sorted over <."
     (cdr top)))
 
 (defun gnus-compress-sequence (numbers &optional always-list)
-  "Convert list of numbers to a list of ranges or a single range.
+  "Convert sorted list of numbers to a list of ranges or a single range.
 If ALWAYS-LIST is non-nil, this function will always release a list of
 ranges."
   (let* ((first (car numbers))
@@ -589,6 +641,19 @@ LIST is a sorted list."
       (setcdr prev (cons num list)))
     (cdr top)))
 
+(defun gnus-range-map (func range)
+  "Apply FUNC to each value contained by RANGE."
+  (setq range (gnus-range-normalize range))
+  (while range
+    (let ((span (pop range)))
+      (if (numberp span)
+          (funcall func span)
+        (let ((first (car span))
+              (last (cdr span)))
+          (while (<= first last)
+            (funcall func first)
+            (setq first (1+ first))))))))
+
 (provide 'gnus-range)
 
 ;;; gnus-range.el ends here
index 900eeab..a84ea83 100644 (file)
 
 ;;; Commentary:
 
-;; This is the gnus-registry.el package, works with other backends
-;; besides nnmail.  The major issue is that it doesn't go across
-;; backends, so for instance if an article is in nnml:sys and you see
-;; a reference to it in nnimap splitting, the article will end up in
-;; nnimap:sys
+;; This is the gnus-registry.el package, which works with all
+;; backends, not just nnmail (e.g. NNTP).  The major issue is that it
+;; doesn't go across backends, so for instance if an article is in
+;; nnml:sys and you see a reference to it in nnimap splitting, the
+;; article will end up in nnimap:sys
 
 ;; gnus-registry.el intercepts article respooling, moving, deleting,
 ;; and copying for all backends.  If it doesn't work correctly for
@@ -84,7 +84,8 @@ The group names are matched, they don't have to be fully qualified."
 
 (defcustom gnus-registry-clean-empty t
   "Whether the empty registry entries should be deleted.
-Registry entries are considered empty when they have no groups."
+Registry entries are considered empty when they have no groups
+and no extra data."
   :group 'gnus-registry
   :type 'boolean)
 
@@ -118,7 +119,10 @@ way."
   :group 'gnus-registry
   :type 'boolean)
 
-(defcustom gnus-registry-cache-file "~/.gnus.registry.eld"
+(defcustom gnus-registry-cache-file 
+  (nnheader-concat 
+   (or gnus-dribble-directory gnus-home-directory "~/") 
+   ".gnus.registry.eld")
   "File where the Gnus registry will be stored."
   :group 'gnus-registry
   :type 'file)
@@ -129,13 +133,6 @@ way."
   :type '(radio (const :format "Unlimited " nil)
                (integer :format "Maximum number: %v\n" :size 0)))
 
-;; Function(s) missing in Emacs 20
-(when (memq nil (mapcar 'fboundp '(puthash)))
-  (require 'cl)
-  (unless (fboundp 'puthash)
-    ;; alias puthash is missing from Emacs 20 cl-extra.el
-    (defalias 'puthash 'cl-puthash)))
-
 (defun gnus-registry-track-subject-p ()
   (memq 'subject gnus-registry-track-extra))
 
@@ -216,7 +213,7 @@ way."
 ;; Idea from Dan Christensen <jdc@chow.mat.jhu.edu>
 ;; Save the gnus-registry file with extra line breaks.
 (defun gnus-registry-cache-whitespace (filename)
-  (gnus-message 5 "Adding whitespace to %s" filename)
+  (gnus-message 7 "Adding whitespace to %s" filename)
   (save-excursion
     (goto-char (point-min))
     (while (re-search-forward "^(\\|(\\\"" nil t)
@@ -252,7 +249,11 @@ way."
   (let ((count 0))
     (maphash
      (lambda (key value)
-       (unless (gnus-registry-fetch-group key)
+       (unless (or
+               (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)) 
         (incf count)
         (remhash key gnus-registry-hashtb)))
      gnus-registry-hashtb)
@@ -315,7 +316,7 @@ way."
         (to (if to (gnus-group-guess-full-name-from-command-method to) nil))
         (to-name (if to to "the Bit Bucket"))
         (old-entry (gethash id gnus-registry-hashtb)))
-    (gnus-message 5 "Registry: article %s %s from %s to %s"
+    (gnus-message 7 "Registry: article %s %s from %s to %s"
                  id
                  (if method "respooling" "going")
                  from
@@ -333,7 +334,7 @@ way."
   (let ((group (gnus-group-guess-full-name-from-command-method group)))
     (when (and (stringp id) (string-match "\r$" id))
       (setq id (substring id 0 -1)))
-    (gnus-message 5 "Registry: article %s spooled to %s"
+    (gnus-message 7 "Registry: article %s spooled to %s"
                  id
                  group)
     (gnus-registry-add-group id group subject sender)))
@@ -346,6 +347,10 @@ is obtained from the registry.  This function can be used as an entry
 in `nnmail-split-fancy' or `nnimap-split-fancy', for example like
 this: (: gnus-registry-split-fancy-with-parent) 
 
+This function tracks ALL backends, unlike
+`nnmail-split-fancy-with-parent' which tracks only nnmail
+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.
@@ -391,13 +396,14 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
                 (unless (equal res (gnus-registry-fetch-group key))
                   (setq single-match nil))
                 (setq res (gnus-registry-fetch-group key))
-                (gnus-message
-                 ;; raise level of messaging if gnus-registry-track-extra
-                 (if gnus-registry-track-extra 5 9)
-                 "%s (extra tracking) traced sender %s to group %s"
-                 "gnus-registry-split-fancy-with-parent"
-                 sender
-                 (if res res "nil")))))
+                (when (and sender res)
+                  (gnus-message
+                   ;; raise level of messaging if gnus-registry-track-extra
+                   (if gnus-registry-track-extra 7 9)
+                   "%s (extra tracking) traced sender %s to group %s"
+                   "gnus-registry-split-fancy-with-parent"
+                   sender
+                   res)))))
           gnus-registry-hashtb))
        (when (and single-match
                   (gnus-registry-track-subject-p)
@@ -414,24 +420,26 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
                 (unless (equal res (gnus-registry-fetch-group key))
                   (setq single-match nil))
                 (setq res (gnus-registry-fetch-group key))
-                (gnus-message
-                 ;; raise level of messaging if gnus-registry-track-extra
-                 (if gnus-registry-track-extra 5 9)
-                 "%s (extra tracking) traced subject %s to group %s"
-                 "gnus-registry-split-fancy-with-parent"
-                 subject
-                 (if res res "nil")))))
+                (when (and subject res)
+                  (gnus-message
+                   ;; raise level of messaging if gnus-registry-track-extra
+                   (if gnus-registry-track-extra 7 9)
+                   "%s (extra tracking) traced subject %s to group %s"
+                   "gnus-registry-split-fancy-with-parent"
+                   subject
+                   res)))))
           gnus-registry-hashtb))
        (unless single-match
          (gnus-message
-          5
+          3
           "gnus-registry-split-fancy-with-parent: too many extra matches for %s"
           refstr)
          (setq res nil))))
-    (gnus-message
-     5 
-     "gnus-registry-split-fancy-with-parent traced %s to group %s"
-     refstr (if res res "nil"))
+    (when (and refstr res)
+      (gnus-message
+       5
+       "gnus-registry-split-fancy-with-parent traced %s to group %s"
+       refstr res))
 
     (when (and res gnus-registry-use-long-group-names)
       (let ((m1 (gnus-find-method-for-group res))
@@ -448,7 +456,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
            (setq res short-res))
        ;; else...
        (gnus-message
-        5 
+        7
         "gnus-registry-split-fancy-with-parent ignored foreign group %s"
         res)
        (setq res nil))))
index 1e2bf0f..f64c563 100644 (file)
@@ -128,7 +128,7 @@ It accepts the same format specs that `gnus-summary-line-format' does."
       ;; Set up the menu.
       (when (gnus-visual-p 'pick-menu 'menu)
        (gnus-pick-make-menu-bar))
-      (gnus-add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map
+      (add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map
                           nil 'gnus-pick-mode)
       (gnus-run-hooks 'gnus-pick-mode-hook))))
 
@@ -361,7 +361,7 @@ This must be bound to a button-down mouse event."
       ;; Set up the menu.
       (when (gnus-visual-p 'binary-menu 'menu)
        (gnus-binary-make-menu-bar))
-      (gnus-add-minor-mode 'gnus-binary-mode " Binary"
+      (add-minor-mode 'gnus-binary-mode " Binary"
                           gnus-binary-mode-map nil 'gnus-binary-mode)
       (gnus-run-hooks 'gnus-binary-mode-hook))))
 
@@ -725,7 +725,7 @@ Two predefined functions are available:
        (unless (zerop level)
          (gnus-tree-indent level)
          (insert (cadr gnus-tree-parent-child-edges))
-         (setq col (- (setq beg (point)) (gnus-point-at-bol) 1))
+         (setq col (- (setq beg (point)) (point-at-bol) 1))
          ;; Draw "|" lines upwards.
          (while (progn
                   (forward-line -1)
@@ -749,7 +749,7 @@ Two predefined functions are available:
 
 (defsubst gnus-tree-indent-vertical ()
   (let ((len (- (* (1+ gnus-tree-node-length) gnus-tmp-indent)
-               (- (point) (gnus-point-at-bol)))))
+               (- (point) (point-at-bol)))))
     (when (> len 0)
       (insert (make-string len ? )))))
 
@@ -1027,11 +1027,11 @@ The following commands are available:
            (setq button (car buttons)
                  buttons (cdr buttons))
            (if (stringp button)
-               (gnus-set-text-properties
+               (set-text-properties
                 (point)
                 (prog2 (insert button) (point) (insert " "))
                 (list 'face gnus-carpal-header-face))
-             (gnus-set-text-properties
+             (set-text-properties
               (point)
               (prog2 (insert (car button)) (point) (insert " "))
               (list 'gnus-callback (cdr button)
index f307539..8a1306c 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-score.el --- scoring code for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <amanda@iesd.auc.dk>
@@ -36,8 +36,6 @@
 (require 'message)
 (require 'score-mode)
 
-(autoload 'ffap-string-at-point "ffap")
-
 (defcustom gnus-global-score-files nil
   "List of global score files and directories.
 Set this variable if you want to use people's score files.  One entry
@@ -627,7 +625,7 @@ file for the command instead of the current score file."
              (gnus-score-insert-help "Match permanence" char-to-perm 2)))
 
          (gnus-score-kill-help-buffer)
-         (if mimic (message "%c %c %c" prefix hchar tchar pchar)
+         (if mimic (message "%c %c %c %c" prefix hchar tchar pchar)
            (message ""))
          (unless (setq temporary (cadr (assq pchar char-to-perm)))
            ;; Deal with der(r)ided superannuated paradigms.
@@ -1088,6 +1086,12 @@ EXTRA is the possible non-standard header."
      4 (substitute-command-keys
        "\\<gnus-score-mode-map>\\[gnus-score-edit-exit] to save edits"))))
 
+(defun gnus-score-edit-all-score ()
+  "Edit the all.SCORE file."
+  (interactive)
+  (find-file (gnus-score-file-name "all"))
+  (gnus-score-mode))
+
 (defun gnus-score-edit-file (file)
   "Edit a score file."
   (interactive
@@ -1117,9 +1121,9 @@ If FORMAT, also format the current score file."
         (reg " -> +")
         (file (save-excursion
                 (end-of-line)
-                (if (and (re-search-backward reg (gnus-point-at-bol) t)
-                         (re-search-forward  reg (gnus-point-at-eol) t))
-                    (buffer-substring (point) (gnus-point-at-eol))
+                (if (and (re-search-backward reg (point-at-bol) t)
+                         (re-search-forward  reg (point-at-eol) t))
+                    (buffer-substring (point) (point-at-eol))
                   nil))))
     (if (or (not file)
            (string-match "\\<\\(non-file rule\\|A file\\)\\>" file)
@@ -1208,8 +1212,7 @@ If FORMAT, also format the current score file."
       ;; files.
       (when (and files (not global))
        (setq lists (apply 'append lists
-                          (mapcar (lambda (file)
-                                    (gnus-score-load-file file))
+                          (mapcar 'gnus-score-load-file
                                   (if adapt-file (cons adapt-file files)
                                     files)))))
       (when (and eval (not global))
@@ -1849,7 +1852,7 @@ score in `gnus-newsgroup-scored' by SCORE."
            (goto-char (point-min))
            (if (= dmt ?e)
                (while (funcall search-func match nil t)
-                 (and (= (gnus-point-at-bol)
+                 (and (= (point-at-bol)
                          (match-beginning 0))
                       (= (progn (end-of-line) (point))
                          (match-end 0))
@@ -2019,7 +2022,7 @@ score in `gnus-newsgroup-scored' by SCORE."
                        (funcall search-func match nil t))
              ;; Is it really exact?
              (and (eolp)
-                  (= (gnus-point-at-bol) (match-beginning 0))
+                  (= (point-at-bol) (match-beginning 0))
                   ;; Yup.
                   (progn
                     (setq found (setq arts (get-text-property
@@ -2109,7 +2112,7 @@ score in `gnus-newsgroup-scored' by SCORE."
          (goto-char (point-min))
          (while (and (not (eobp))
                      (search-forward match nil t))
-           (when (and (= (gnus-point-at-bol) (match-beginning 0))
+           (when (and (= (point-at-bol) (match-beginning 0))
                       (eolp))
              (setq found (setq arts (get-text-property (point) 'articles)))
              (if trace
@@ -2183,23 +2186,19 @@ score in `gnus-newsgroup-scored' by SCORE."
 (defun gnus-enter-score-words-into-hashtb (hashtb)
   ;; Find all the words in the buffer and enter them into
   ;; the hashtable.
-  (let ((syntab (syntax-table))
-       word val)
+  (let (word val)
     (goto-char (point-min))
-    (unwind-protect
-       (progn
-         (set-syntax-table gnus-adaptive-word-syntax-table)
-         (while (re-search-forward "\\b\\w+\\b" nil t)
-           (setq val
-                 (gnus-gethash
-                  (setq word (downcase (buffer-substring
-                                        (match-beginning 0) (match-end 0))))
-                  hashtb))
-           (gnus-sethash
-            word
-            (append (get-text-property (gnus-point-at-eol) 'articles) val)
-            hashtb)))
-      (set-syntax-table syntab))
+    (with-syntax-table gnus-adaptive-word-syntax-table
+      (while (re-search-forward "\\b\\w+\\b" nil t)
+       (setq val
+             (gnus-gethash
+              (setq word (downcase (buffer-substring
+                                    (match-beginning 0) (match-end 0))))
+              hashtb))
+       (gnus-sethash
+        word
+        (append (get-text-property (point-at-eol) 'articles) val)
+        hashtb)))
     ;; Make all the ignorable words ignored.
     (let ((ignored (append gnus-ignored-adaptive-words
                           (if gnus-adaptive-word-no-group-words
@@ -2302,39 +2301,35 @@ score in `gnus-newsgroup-scored' by SCORE."
        (let* ((hashtb (gnus-make-hashtable 1000))
               (date (date-to-day (current-time-string)))
               (data gnus-newsgroup-data)
-              (syntab (syntax-table))
               word d score val)
-         (unwind-protect
-             (progn
-               (set-syntax-table gnus-adaptive-word-syntax-table)
-               ;; Go through all articles.
-               (while (setq d (pop data))
-                 (when (and
-                        (not (gnus-data-pseudo-p d))
-                        (setq score
-                              (cdr (assq
-                                    (gnus-data-mark d)
-                                    gnus-adaptive-word-score-alist))))
-                   ;; This article has a mark that should lead to
-                   ;; adaptive word rules, so we insert the subject
-                   ;; and find all words in that string.
-                   (insert (mail-header-subject (gnus-data-header d)))
-                   (downcase-region (point-min) (point-max))
-                   (goto-char (point-min))
-                   (while (re-search-forward "\\b\\w+\\b" nil t)
-                     ;; Put the word and score into the hashtb.
-                     (setq val (gnus-gethash (setq word (match-string 0))
-                                             hashtb))
-                     (when (or (not gnus-adaptive-word-length-limit)
-                               (> (length word)
-                                  gnus-adaptive-word-length-limit))
-                       (setq val (+ score (or val 0)))
-                       (if (and gnus-adaptive-word-minimum
-                                (< val gnus-adaptive-word-minimum))
-                           (setq val gnus-adaptive-word-minimum))
-                       (gnus-sethash word val hashtb)))
-                   (erase-buffer))))
-           (set-syntax-table syntab))
+         (with-syntax-table gnus-adaptive-word-syntax-table
+           ;; Go through all articles.
+           (while (setq d (pop data))
+             (when (and
+                    (not (gnus-data-pseudo-p d))
+                    (setq score
+                          (cdr (assq
+                                (gnus-data-mark d)
+                                gnus-adaptive-word-score-alist))))
+               ;; This article has a mark that should lead to
+               ;; adaptive word rules, so we insert the subject
+               ;; and find all words in that string.
+               (insert (mail-header-subject (gnus-data-header d)))
+               (downcase-region (point-min) (point-max))
+               (goto-char (point-min))
+               (while (re-search-forward "\\b\\w+\\b" nil t)
+                 ;; Put the word and score into the hashtb.
+                 (setq val (gnus-gethash (setq word (match-string 0))
+                                         hashtb))
+                 (when (or (not gnus-adaptive-word-length-limit)
+                           (> (length word)
+                              gnus-adaptive-word-length-limit))
+                   (setq val (+ score (or val 0)))
+                   (if (and gnus-adaptive-word-minimum
+                            (< val gnus-adaptive-word-minimum))
+                       (setq val gnus-adaptive-word-minimum))
+                   (gnus-sethash word val hashtb)))
+               (erase-buffer))))
          ;; Make all the ignorable words ignored.
          (let ((ignored (append gnus-ignored-adaptive-words
                                 (if gnus-adaptive-word-no-group-words
@@ -2390,6 +2385,11 @@ score in `gnus-newsgroup-scored' by SCORE."
                         (interactive)
                         (bury-buffer nil)
                         (gnus-summary-expand-window)))
+       (local-set-key "k"
+                      (lambda ()
+                        (interactive)
+                        (kill-buffer (current-buffer))
+                        (gnus-summary-expand-window)))
        (local-set-key "e" (lambda ()
                             "Run `gnus-score-edit-file-at-point'."
                             (interactive)
@@ -2418,7 +2418,7 @@ score in `gnus-newsgroup-scored' by SCORE."
 Type `e' to edit score file corresponding to the score rule on current line,
 `f' to format (pretty print) the score file and edit it,
 `t' toggle to truncate long lines in this buffer,
-`q' to quit.
+`q' to quit, `k' to kill score trace buffer.
 
 The first sexp on each line is the score rule, followed by the file name of
 the score file and its full name, including the directory.")
@@ -2764,9 +2764,7 @@ Destroys the current buffer."
            (lambda (file)
              (cons (inline (gnus-score-file-rank file)) file))
            files)))
-      (mapcar
-       (lambda (f) (cdr f))
-       (sort alist 'car-less-than-car)))))
+      (mapcar 'cdr (sort alist 'car-less-than-car)))))
 
 (defun gnus-score-find-alist (group)
   "Return list of score files for GROUP.
index 7ad8883..25dfda0 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus-setup.el --- Initialization & Setup for Gnus 5
 
-;; Copyright (C) 1995, 1996, 2000, 2001
+;; Copyright (C) 1995, 1996, 2000, 2001, 2004
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Steven L. Baur <steve@miranova.com>
 
 (when gnus-use-sc
   (add-hook 'mail-citation-hook 'sc-cite-original)
-  (setq message-cite-function 'sc-cite-original)
-  (autoload 'sc-cite-original "supercite"))
+  (setq message-cite-function 'sc-cite-original))
 \f
 ;;;### (autoloads (gnus gnus-slave gnus-no-server) "gnus" "lisp/gnus.el" (12473 2137))
 ;;; Generated autoloads from lisp/gnus.el
index b7c1a23..62722b1 100644 (file)
@@ -278,7 +278,7 @@ Note -- this function hasn't been implemented yet."
 If NOT-ALL, don't pack ticked articles."
   (let ((gnus-expert-user t)
        (gnus-large-newsgroup nil)
-       (entry (gnus-gethash group gnus-newsrc-hashtb)))
+       (entry (gnus-group-entry group)))
     (when (or (null entry)
              (eq (car entry) t)
              (and (car entry)
index 393c8a1..97a705e 100644 (file)
@@ -136,7 +136,7 @@ text properties. This is only needed on XEmacs, as FSF Emacs does this anyway."
 (defvar gnus-format-specs
   `((version . ,emacs-version)
     (gnus-version . ,(gnus-continuum-version))
-    (group "%M\%S\%p\%P\%5y: %(%g%)%l\n" ,gnus-group-line-format-spec)
+    (group "%M\%S\%p\%P\%5y: %(%g%)\n" ,gnus-group-line-format-spec)
     (summary-dummy "*  %(:                          :%) %S\n"
                   ,gnus-summary-dummy-line-format-spec)
     (summary "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n"
@@ -193,6 +193,12 @@ text properties. This is only needed on XEmacs, as FSF Emacs does this anyway."
            (not (equal emacs-version
                        (cdr (assq 'version gnus-format-specs)))))
     (setq gnus-format-specs nil))
+  ;; Flush the group format spec cache if there's the grouplens stuff.
+  (let ((spec (assq 'group gnus-format-specs)))
+    (when (and (memq 'group types)
+              (string-match " gnus-tmp-grouplens[ )]"
+                            (gnus-prin1-to-string (cdr spec))))
+      (setq gnus-format-specs (delq spec gnus-format-specs))))
 
   ;; Go through all the formats and see whether they need updating.
   (let (new-format entry type val)
@@ -290,7 +296,7 @@ text properties. This is only needed on XEmacs, as FSF Emacs does this anyway."
 (defun gnus-correct-length (string)
   "Return the correct width of STRING."
   (let ((length 0))
-    (mapcar (lambda (char) (incf length (gnus-char-width char))) string)
+    (mapcar (lambda (char) (incf length (char-width char))) string)
     length))
 
 (defun gnus-correct-substring (string start &optional end)
@@ -303,14 +309,14 @@ text properties. This is only needed on XEmacs, as FSF Emacs does this anyway."
     ;; Find the start position.
     (while (and (< seek length)
                (< wseek start))
-      (incf wseek (gnus-char-width (aref string seek)))
+      (incf wseek (char-width (aref string seek)))
       (incf seek))
     (setq wstart seek)
     ;; Find the end position.
     (while (and (<= seek length)
                (or (not end)
                    (<= wseek end)))
-      (incf wseek (gnus-char-width (aref string seek)))
+      (incf wseek (char-width (aref string seek)))
       (incf seek))
     (setq wend seek)
     (substring string wstart (1- wend))))
@@ -615,6 +621,9 @@ are supported for %s."
                   ?s)))
           ;; Find the specification from `spec-alist'.
           ((setq elem (cdr (assq (or extended-spec spec) spec-alist))))
+          ;; We used to use "%l" for displaying the grouplens score.
+          ((eq spec ?l)
+           (setq elem '("" ?s)))
           (t
            (setq elem '("*" ?s))))
          (setq elem-type (cadr elem))
@@ -665,7 +674,7 @@ are supported for %s."
        (list (car flist)))
       ;; A single number.
       ((string= fstring "%d")
-       (setq dontinsert)
+       (setq dontinsert t)
        (if insert
           (list `(princ ,(car flist)))
         (list `(int-to-string ,(car flist)))))
index 6c57939..a690659 100644 (file)
@@ -51,7 +51,7 @@ with some simple extensions.
 
 The following specs are understood:
 
-%h backend
+%h back end
 %n name
 %w address
 %s status
@@ -342,13 +342,13 @@ The following commands are available:
   (gnus-server-position-point))
 
 (defun gnus-server-server-name ()
-  (let ((server (get-text-property (gnus-point-at-bol) 'gnus-server)))
+  (let ((server (get-text-property (point-at-bol) 'gnus-server)))
     (and server (symbol-name server))))
 
 (defun gnus-server-named-server ()
-  "Returns a server name that matches one of the names returned by
-gnus-method-to-server."
-  (let ((server (get-text-property (gnus-point-at-bol) 'gnus-named-server)))
+  "Return a server name that matches one of the names returned by
+`gnus-method-to-server'."
+  (let ((server (get-text-property (point-at-bol) 'gnus-named-server)))
     (and server (symbol-name server))))
 
 (defalias 'gnus-server-position-point 'gnus-goto-colon)
@@ -730,10 +730,10 @@ gnus-method-to-server."
          (if (eq (car method) 'nntp)
              (while (not (eobp))
                (ignore-errors
-                 (push (cons 
-                        (buffer-substring 
+                 (push (cons
+                        (buffer-substring
                          (point)
-                         (progn 
+                         (progn
                            (skip-chars-forward "^ \t")
                            (point)))
                         (let ((last (read cur)))
@@ -797,18 +797,26 @@ gnus-method-to-server."
             (prog1 (1+ (point))
               (insert
                (format "%c%7d: %s\n"
-                       (let ((level (gnus-group-level
-                                     (concat prefix (setq name (car group))))))
-                             (cond
-                              ((<= level gnus-level-subscribed) ? )
-                              ((<= level gnus-level-unsubscribed) ?U)
-                              ((= level gnus-level-zombie) ?Z)
-                              (t ?K)))
+                       (let ((level
+                              (if (string= prefix "")
+                                  (gnus-group-level (setq name (car group)))
+                                (gnus-group-level
+                                 (concat prefix (setq name (car group)))))))
+                         (cond
+                          ((<= level gnus-level-subscribed) ? )
+                          ((<= level gnus-level-unsubscribed) ?U)
+                          ((= level gnus-level-zombie) ?Z)
+                          (t ?K)))
                        (max 0 (- (1+ (cddr group)) (cadr group)))
-                       (mm-decode-coding-string
-                        name
-                        (inline (gnus-group-name-charset method name))))))
-            (list 'gnus-group name))))
+                       ;; Don't decode if name is ASCII
+                       (if (and (fboundp 'detect-coding-string)
+                                (eq (detect-coding-string name t) 'undecided))
+                           name
+                         (mm-decode-coding-string
+                          name
+                          (inline (gnus-group-name-charset method name)))))))
+            (list 'gnus-group name)
+            )))
        (switch-to-buffer (current-buffer)))
       (goto-char (point-min))
       (gnus-group-position-point)
@@ -896,8 +904,8 @@ buffer.
   (save-excursion
     (beginning-of-line)
     (let ((name (get-text-property (point) 'gnus-group)))
-      (when (re-search-forward ": \\(.*\\)$" (gnus-point-at-eol) t)
-       (concat (gnus-method-to-server-name gnus-browse-current-method) ":" 
+      (when (re-search-forward ": \\(.*\\)$" (point-at-eol) t)
+       (concat (gnus-method-to-server-name gnus-browse-current-method) ":"
                (or name
                    (match-string-no-properties 1)))))))
 
@@ -933,8 +941,7 @@ buffer.
                              gnus-browse-current-method)))
             gnus-level-default-subscribed (gnus-group-level group)
             (and (car (nth 1 gnus-newsrc-alist))
-                 (gnus-gethash (car (nth 1 gnus-newsrc-alist))
-                               gnus-newsrc-hashtb))
+                 (gnus-group-entry (car (nth 1 gnus-newsrc-alist))))
             t)
            (delete-char 1)
            (insert ? ))
@@ -973,7 +980,7 @@ buffer.
        (gnus-get-function (gnus-server-to-method server)
                           'request-regenerate)
       (error
-       (error "This backend doesn't support regeneration")))
+       (error "This back end doesn't support regeneration")))
     (gnus-message 5 "Requesting regeneration of %s..." server)
     (unless (gnus-open-server server)
       (error "Couldn't open server"))
index cec0656..c77e00c 100644 (file)
 (require 'gnus-util)
 (autoload 'message-make-date "message")
 (autoload 'gnus-agent-read-servers-validate "gnus-agent")
+(autoload 'gnus-agent-save-local "gnus-agent")
 (autoload 'gnus-agent-possibly-alter-active "gnus-agent")
-(eval-when-compile (require 'cl))
+
+(eval-when-compile 
+  (require 'cl)
+
+  (defvar gnus-agent-covered-methods nil)
+  (defvar gnus-agent-file-loading-local nil)
+  (defvar gnus-agent-file-loading-cache nil))
 
 (defcustom gnus-startup-file (nnheader-concat gnus-home-directory ".newsrc")
   "Your `.newsrc' file.
@@ -615,8 +622,7 @@ the first newsgroup."
     ;; We subscribe the group by changing its level to `subscribed'.
     (gnus-group-change-level
      newsgroup gnus-level-default-subscribed
-     gnus-level-killed (gnus-gethash (or next "dummy.group")
-                                    gnus-newsrc-hashtb))
+     gnus-level-killed (gnus-group-entry (or next "dummy.group")))
     (gnus-message 5 "Subscribe newsgroup: %s" newsgroup)
     (run-hook-with-args 'gnus-subscribe-newsgroup-hooks newsgroup)
     t))
@@ -661,6 +667,8 @@ the first newsgroup."
   (setq gnus-list-of-killed-groups nil
        gnus-have-read-active-file nil
         gnus-agent-covered-methods nil
+        gnus-agent-file-loading-local nil
+        gnus-agent-file-loading-cache nil
         gnus-server-method-cache nil
        gnus-newsrc-alist nil
        gnus-newsrc-hashtb nil
@@ -768,11 +776,6 @@ prompt the user for the name of an NNTP server to use."
          (when (or gnus-slave gnus-use-dribble-file)
            (gnus-dribble-read-file))
 
-         ;; Allow using GroupLens predictions.
-         (when gnus-use-grouplens
-           (bbb-login)
-           (add-hook 'gnus-summary-mode-hook 'gnus-grouplens-mode))
-
          ;; Do the actual startup.
          (if gnus-agent
              (gnus-request-create-group "queue" '(nndraft "")))
@@ -790,7 +793,7 @@ prompt the user for the name of an NNTP server to use."
 (defun gnus-start-draft-setup ()
   "Make sure the draft group exists."
   (gnus-request-create-group "drafts" '(nndraft ""))
-  (unless (gnus-gethash "nndraft:drafts" gnus-newsrc-hashtb)
+  (unless (gnus-group-entry "nndraft:drafts")
     (let ((gnus-level-default-subscribed 1))
       (gnus-subscribe-group "nndraft:drafts" nil '(nndraft "")))
     (gnus-group-set-parameter
@@ -1295,16 +1298,16 @@ for new groups, and subscribe the new groups as zombies."
     (when (and (stringp entry)
               oldlevel
               (< oldlevel gnus-level-zombie))
-      (setq entry (gnus-gethash entry gnus-newsrc-hashtb)))
+      (setq entry (gnus-group-entry entry)))
     (if (and (not oldlevel)
             (consp entry))
        (setq oldlevel (gnus-info-level (nth 2 entry)))
       (setq oldlevel (or oldlevel gnus-level-killed)))
     (when (stringp previous)
-      (setq previous (gnus-gethash previous gnus-newsrc-hashtb)))
+      (setq previous (gnus-group-entry previous)))
 
     (if (and (>= oldlevel gnus-level-zombie)
-            (gnus-gethash group gnus-newsrc-hashtb))
+            (gnus-group-entry group))
        ;; We are trying to subscribe a group that is already
        ;; subscribed.
        ()                              ; Do nothing.
@@ -1328,8 +1331,7 @@ for new groups, and subscribe the new groups as zombies."
                   entry)
          (gnus-sethash (car (nth 2 entry)) nil gnus-newsrc-hashtb)
          (when (nth 3 entry)
-           (setcdr (gnus-gethash (car (nth 3 entry))
-                                 gnus-newsrc-hashtb)
+           (setcdr (gnus-group-entry (car (nth 3 entry)))
                    (cdr entry)))
          (setcdr (cdr entry) (cdddr entry)))))
 
@@ -1389,7 +1391,7 @@ for new groups, and subscribe the new groups as zombies."
            (gnus-sethash group (cons num previous)
                          gnus-newsrc-hashtb))
          (when (cdr entry)
-           (setcdr (gnus-gethash (caadr entry) gnus-newsrc-hashtb) entry))
+           (setcdr (gnus-group-entry (caadr entry)) entry))
          (gnus-dribble-enter
           (format
            "(gnus-group-set-info '%S)" info)))))
@@ -1400,7 +1402,7 @@ for new groups, and subscribe the new groups as zombies."
 (defun gnus-kill-newsgroup (newsgroup)
   "Obsolete function.  Kills a newsgroup."
   (gnus-group-change-level
-   (gnus-gethash newsgroup gnus-newsrc-hashtb) gnus-level-killed))
+   (gnus-group-entry newsgroup) gnus-level-killed))
 
 (defun gnus-check-bogus-newsgroups (&optional confirm)
   "Remove bogus newsgroups.
@@ -1428,14 +1430,14 @@ newsgroup."
           (lambda (group)
             ;; Remove all bogus subscribed groups by first killing them, and
             ;; then removing them from the list of killed groups.
-            (when (setq entry (gnus-gethash group gnus-newsrc-hashtb))
+            (when (setq entry (gnus-group-entry group))
               (gnus-group-change-level entry gnus-level-killed)
               (setq gnus-killed-list (delete group gnus-killed-list))))
           bogus '("group" "groups" "remove"))
        (while (setq group (pop bogus))
          ;; Remove all bogus subscribed groups by first killing them, and
          ;; then removing them from the list of killed groups.
-         (when (setq entry (gnus-gethash group gnus-newsrc-hashtb))
+         (when (setq entry (gnus-group-entry group))
            (gnus-group-change-level entry gnus-level-killed)
            (setq gnus-killed-list (delete group gnus-killed-list)))))
       ;; Then we remove all bogus groups from the list of killed and
@@ -1509,6 +1511,15 @@ newsgroup."
                    (gnus-active group))
               (gnus-active group)
 
+             ;; If a cache is present, we may have to alter the active info.
+             (when gnus-use-cache
+               (inline (gnus-cache-possibly-alter-active
+                        group active)))
+
+             ;; If the agent is enabled, we may have to alter the active info.
+             (when gnus-agent
+               (gnus-agent-possibly-alter-active group active))
+
             (gnus-set-active group active)
             ;; Return the new active info.
             active)))))
@@ -1524,6 +1535,10 @@ newsgroup."
 
     (let* ((range (gnus-info-read info))
           (num 0))
+
+      ;; These checks are present in gnus-activate-group but skipped
+      ;; due to setting dont-check in the preceeding call.
+
       ;; If a cache is present, we may have to alter the active info.
       (when (and gnus-use-cache info)
        (inline (gnus-cache-possibly-alter-active
@@ -1531,8 +1546,7 @@ newsgroup."
 
       ;; If the agent is enabled, we may have to alter the active info.
       (when (and gnus-agent info)
-       (gnus-agent-possibly-alter-active
-        (gnus-info-group info) active))
+       (gnus-agent-possibly-alter-active (gnus-info-group info) active info))
 
       ;; Modify the list of read articles according to what articles
       ;; are available; then tally the unread articles and add the
@@ -1601,8 +1615,8 @@ newsgroup."
        (setq num (max 0 (- (cdr active) num)))))
       ;; Set the number of unread articles.
       (when (and info
-                (gnus-gethash (gnus-info-group info) gnus-newsrc-hashtb))
-       (setcar (gnus-gethash (gnus-info-group info) gnus-newsrc-hashtb) num))
+                (gnus-group-entry (gnus-info-group info)))
+       (setcar (gnus-group-entry (gnus-info-group info)) num))
       num)))
 
 ;; Go though `gnus-newsrc-alist' and compare with `gnus-active-hashtb'
@@ -1628,7 +1642,7 @@ newsgroup."
 
     (while newsrc
       (setq active (gnus-active (setq group (gnus-info-group
-                                            (setq info (pop newsrc))))))
+                                                 (setq info (pop newsrc))))))
 
       ;; Check newsgroups.  If the user doesn't want to check them, or
       ;; they can't be checked (for instance, if the news server can't
@@ -1651,61 +1665,60 @@ newsgroup."
       (when (and method
                 (not (setq method-type (cdr (assoc method type-cache)))))
        (setq method-type
-             (cond
-              ((gnus-secondary-method-p method)
-               'secondary)
-              ((inline (gnus-server-equal gnus-select-method method))
-               'primary)
-              (t
-               'foreign)))
+                  (cond
+                   ((gnus-secondary-method-p method)
+                    'secondary)
+                   ((inline (gnus-server-equal gnus-select-method method))
+                    'primary)
+                   (t
+                    'foreign)))
        (push (cons method method-type) type-cache))
-      (if (and method
-              (eq method-type 'foreign))
-         ;; These groups are foreign.  Check the level.
-         (when (and (<= (gnus-info-level info) foreign-level)
-                    (setq active (gnus-activate-group group 'scan)))
-           ;; Let the Gnus agent save the active file.
-           (when (and gnus-agent active (gnus-online method))
-             (gnus-agent-save-group-info
-              method (gnus-group-real-name group) active))
-           (unless (inline (gnus-virtual-group-p group))
-             (inline (gnus-close-group group)))
-           (when (fboundp (intern (concat (symbol-name (car method))
-                                          "-request-update-info")))
-             (inline (gnus-request-update-info info method))))
-       ;; These groups are native or secondary.
-       (cond
-        ;; We don't want these groups.
-        ((> (gnus-info-level info) level)
-         (setq active 'ignore))
-        ;; Activate groups.
-        ((not gnus-read-active-file)
-         (if (gnus-check-backend-function 'retrieve-groups group)
-             ;; if server support gnus-retrieve-groups we push
-             ;; the group onto retrievegroups for later checking
-             (if (assoc method retrieve-groups)
-                 (setcdr (assoc method retrieve-groups)
-                         (cons group (cdr (assoc method retrieve-groups))))
-               (push (list method group) retrieve-groups))
-           ;; hack: `nnmail-get-new-mail' changes the mail-source depending
-           ;; on the group, so we must perform a scan for every group
-           ;; if the users has any directory mail sources.
-           ;; hack: if `nnmail-scan-directory-mail-source-once' is non-nil,
-           ;; for it scan all spool files even when the groups are
-           ;; not required.
-           (if (and
-                (or nnmail-scan-directory-mail-source-once
-                    (null (assq 'directory
-                                (or mail-sources
-                                    (if (listp nnmail-spool-file)
-                                        nnmail-spool-file
-                                      (list nnmail-spool-file))))))
-                (member method scanned-methods))
-               (setq active (gnus-activate-group group))
-             (setq active (gnus-activate-group group 'scan))
-             (push method scanned-methods))
-           (when active
-             (gnus-close-group group))))))
+
+      (cond ((and method (eq method-type 'foreign))
+            ;; These groups are foreign.  Check the level.
+            (when (and (<= (gnus-info-level info) foreign-level)
+                       (setq active (gnus-activate-group group 'scan)))
+              ;; Let the Gnus agent save the active file.
+              (when (and gnus-agent active (gnus-online method))
+                (gnus-agent-save-group-info
+                 method (gnus-group-real-name group) active))
+              (unless (inline (gnus-virtual-group-p group))
+                (inline (gnus-close-group group)))
+              (when (fboundp (intern (concat (symbol-name (car method))
+                                             "-request-update-info")))
+                (inline (gnus-request-update-info info method)))))
+           ;; These groups are native or secondary.
+           ((> (gnus-info-level info) level)
+            ;; We don't want these groups.
+            (setq active 'ignore))
+           ;; Activate groups.
+           ((not gnus-read-active-file)
+            (if (gnus-check-backend-function 'retrieve-groups group)
+                ;; if server support gnus-retrieve-groups we push
+                ;; the group onto retrievegroups for later checking
+                (if (assoc method retrieve-groups)
+                    (setcdr (assoc method retrieve-groups)
+                            (cons group (cdr (assoc method retrieve-groups))))
+                  (push (list method group) retrieve-groups))
+              ;; hack: `nnmail-get-new-mail' changes the mail-source depending
+              ;; on the group, so we must perform a scan for every group
+              ;; if the users has any directory mail sources.
+              ;; hack: if `nnmail-scan-directory-mail-source-once' is non-nil,
+              ;; for it scan all spool files even when the groups are
+              ;; not required.
+              (if (and
+                   (or nnmail-scan-directory-mail-source-once
+                       (null (assq 'directory
+                                   (or mail-sources
+                                       (if (listp nnmail-spool-file)
+                                           nnmail-spool-file
+                                         (list nnmail-spool-file))))))
+                   (member method scanned-methods))
+                  (setq active (gnus-activate-group group))
+                (setq active (gnus-activate-group group 'scan))
+                (push method scanned-methods))
+              (when active
+                (gnus-close-group group)))))
 
       ;; Get the number of unread articles in the group.
       (cond
@@ -1718,7 +1731,7 @@ newsgroup."
        ;; The group couldn't be reached, so we nix out the number of
        ;; unread articles and stuff.
        (gnus-set-active group nil)
-       (let ((tmp (gnus-gethash group gnus-newsrc-hashtb)))
+       (let ((tmp (gnus-group-entry group)))
          (when tmp
            (setcar tmp t))))))
 
@@ -1732,8 +1745,8 @@ newsgroup."
          (when (gnus-check-backend-function 'request-scan (car method))
            (gnus-request-scan nil method))
          (gnus-read-active-file-2
-          (mapcar (lambda (group) (gnus-group-real-name group)) groups)
-          method)
+               (mapcar (lambda (group) (gnus-group-real-name group)) groups)
+               method)
          (dolist (group groups)
            (cond
             ((setq active (gnus-active (gnus-info-group
@@ -1743,7 +1756,7 @@ newsgroup."
              ;; The group couldn't be reached, so we nix out the number of
              ;; unread articles and stuff.
              (gnus-set-active group nil)
-             (setcar (gnus-gethash group gnus-newsrc-hashtb) t)))))))
+             (setcar (gnus-group-entry group) t)))))))
 
     (gnus-message 6 "Checking new news...done")))
 
@@ -1795,9 +1808,9 @@ newsgroup."
 
 (defun gnus-make-articles-unread (group articles)
   "Mark ARTICLES in GROUP as unread."
-  (let* ((info (nth 2 (or (gnus-gethash group gnus-newsrc-hashtb)
-                         (gnus-gethash (gnus-group-real-name group)
-                                       gnus-newsrc-hashtb))))
+  (let* ((info (nth 2 (or (gnus-group-entry group)
+                         (gnus-group-entry
+                          (gnus-group-real-name group)))))
         (ranges (gnus-info-read info))
         news article)
     (while articles
@@ -1817,9 +1830,8 @@ newsgroup."
 
 (defun gnus-make-ascending-articles-unread (group articles)
   "Mark ascending ARTICLES in GROUP as unread."
-  (let* ((entry (or (gnus-gethash group gnus-newsrc-hashtb)
-                    (gnus-gethash (gnus-group-real-name group)
-                                  gnus-newsrc-hashtb)))
+  (let* ((entry (or (gnus-group-entry group)
+                    (gnus-group-entry (gnus-group-real-name group))))
          (info (nth 2 entry))
         (ranges (gnus-info-read info))
          (r ranges)
@@ -1978,10 +1990,10 @@ newsgroup."
          (while (setq info (pop newsrc))
            (when (inline
                    (gnus-server-equal
-                    (inline
-                      (gnus-find-method-for-group
-                       (gnus-info-group info) info))
-                    gmethod))
+                         (inline
+                           (gnus-find-method-for-group
+                                 (gnus-info-group info) info))
+                         gmethod))
              (push (gnus-group-real-name (gnus-info-group info))
                    groups)))
          (gnus-read-active-file-2 groups method)))
@@ -2068,7 +2080,7 @@ newsgroup."
       (while (not (eobp))
        (condition-case ()
            (progn
-             (narrow-to-region (point) (gnus-point-at-eol))
+             (narrow-to-region (point) (point-at-eol))
              ;; group gets set to a symbol interned in the hash table
              ;; (what a hack!!) - jwz
              (setq group (let ((obarray hashtb)) (read cur)))
@@ -2100,7 +2112,7 @@ newsgroup."
           (unless ignore-errors
             (gnus-message 3 "Warning - invalid active: %s"
                           (buffer-substring
-                           (gnus-point-at-bol) (gnus-point-at-eol))))))
+                           (point-at-bol) (point-at-eol))))))
        (widen)
        (forward-line 1)))))
 
@@ -2125,7 +2137,7 @@ newsgroup."
             (gnus-online method)
             (gnus-agent-method-p method))
        (progn
-         (gnus-agent-save-groups method)
+         (gnus-agent-save-active method)
          (gnus-active-to-gnus-format method hashtb nil real-active))
 
       (goto-char (point-min))
@@ -2201,17 +2213,91 @@ If FORCE is non-nil, the .newsrc file is read."
       (gnus-convert-old-newsrc))))
 
 (defun gnus-convert-old-newsrc ()
-  "Convert old newsrc into the new format, if needed."
+  "Convert old newsrc formats into the current format, if needed."
   (let ((fcv (and gnus-newsrc-file-version
                  (gnus-continuum-version gnus-newsrc-file-version))))
-    (cond
-     ;; No .newsrc.eld file was loaded.
-     ((null fcv) nil)
-     ;; Gnus 5 .newsrc.eld was loaded.
-     ((< fcv (gnus-continuum-version "September Gnus v0.1"))
-      (gnus-convert-old-ticks)))))
-
-(defun gnus-convert-old-ticks ()
+    (when fcv
+      ;; A .newsrc.eld file was loaded.
+      (let (prompt-displayed
+            (converters
+             (sort
+              (mapcar (lambda (date-func)
+                        (cons (gnus-continuum-version (car date-func))
+                              date-func))
+                      ;; This is a list of converters that must be run
+                      ;; to bring the newsrc file up to the current
+                      ;; version.  If you create an incompatibility
+                      ;; with older versions, you should create an
+                      ;; entry here.  The entry should consist of the
+                      ;; current gnus version (hardcoded so that it
+                      ;; doesn't change with each release) and the
+                      ;; function that must be applied to convert the
+                      ;; previous version into the current version.
+                      '(("September Gnus v0.1" nil 
+                         gnus-convert-old-ticks)
+                        ("Oort Gnus v0.08"     "legacy-gnus-agent"
+                         gnus-agent-convert-to-compressed-agentview)
+                        ("No Gnus v0.2"        "legacy-gnus-agent"
+                         gnus-agent-unlist-expire-days)
+                        ("No Gnus v0.2"        "legacy-gnus-agent" 
+                         gnus-agent-unhook-expire-days)))
+              #'car-less-than-car)))
+        ;; Skip converters older than the file version
+        (while (and converters (>= fcv (caar converters)))
+          (pop converters))
+
+        ;; Perform converters to bring older version up to date.
+       (when (and converters (< fcv (caar converters)))
+         (while (and converters (< fcv (caar converters)))
+            (let* ((converter-spec  (pop converters))
+                   (convert-to      (nth 1 converter-spec))
+                   (load-from       (nth 2 converter-spec))
+                   (func            (nth 3 converter-spec)))
+              (when (and load-from
+                         (not (fboundp func)))
+                (load load-from t))
+              
+              (or prompt-displayed
+                  (not (gnus-convert-converter-needs-prompt func))
+                  (while (let (c
+                               (cursor-in-echo-area t)
+                               (echo-keystrokes 0))
+                           (message "Convert newsrc from version '%s' to '%s'? (n/y/?)"
+                                    gnus-newsrc-file-version gnus-version)
+                           (setq c (read-char-exclusive))
+
+                           (cond ((or (eq c ?n) (eq c ?N))
+                                  (error "Can not start gnus using old (unconverted) newsrc"))
+                                 ((or (eq c ?y) (eq c ?Y))
+                                  (setq prompt-displayed t)
+                                  nil)
+                                 ((eq c ?\?)
+                                  (message "This conversion is irreversible. \
+ You should backup your files before proceeding.")
+                                  (sit-for 5)
+                                  t)
+                                 (t
+                                  (gnus-message 3 "Ignoring unexpected input")
+                                  (sit-for 3)
+                                  t)))))
+
+              (funcall func convert-to)))
+          (gnus-dribble-enter 
+           (format ";Converted newsrc from version '%s' to '%s'? (n/y/?)"
+                   gnus-newsrc-file-version gnus-version)))))))
+
+(defun gnus-convert-mark-converter-prompt (converter no-prompt)
+  (setplist converter
+            (let* ((symbol 'gnus-convert-no-prompt)
+                   (value (delq symbol (symbol-plist converter))))
+            (if no-prompt
+                (cons symbol value)
+              value))))
+
+(defun gnus-convert-converter-needs-prompt (converter)
+  (not (memq 'gnus-convert-no-prompt (symbol-plist converter))))
+
+(defun gnus-convert-old-ticks (converting-to)
   (let ((newsrc (cdr gnus-newsrc-alist))
        marks info dormant ticked)
     (while (setq info (pop newsrc))
@@ -2375,10 +2461,10 @@ If FORCE is non-nil, the .newsrc file is read."
              ;; don't give a damn, frankly, my dear.
              (concat gnus-newsrc-options
                      (buffer-substring
-                      (gnus-point-at-bol)
+                      (point-at-bol)
                       ;; Options may continue on the next line.
                       (or (and (re-search-forward "^[^ \t]" nil 'move)
-                               (progn (beginning-of-line) (point)))
+                               (point-at-bol))
                           (point)))))
        (forward-line -1))
        (symbol
@@ -2446,8 +2532,8 @@ If FORCE is non-nil, the .newsrc file is read."
                ;; The line was buggy.
                (setq group nil)
                (gnus-error 3.1 "Mangled line: %s"
-                           (buffer-substring (gnus-point-at-bol)
-                                             (gnus-point-at-eol))))
+                           (buffer-substring (point-at-bol)
+                                             (point-at-eol))))
              nil))
          ;; Skip past ", ".  Spaces are invalid in these ranges, but
          ;; we allow them, because it's a common mistake to put a
@@ -2556,9 +2642,9 @@ If FORCE is non-nil, the .newsrc file is read."
       (while (re-search-forward "[ \t]-n" nil t)
        (setq eol
              (or (save-excursion
-                   (and (re-search-forward "[ \t]-n" (gnus-point-at-eol) t)
+                   (and (re-search-forward "[ \t]-n" (point-at-eol) t)
                         (- (point) 2)))
-                 (gnus-point-at-eol)))
+                 (point-at-eol)))
        ;; Search for all "words"...
        (while (re-search-forward "[^ \t,\n]+" eol t)
          (if (eq (char-after (match-beginning 0)) ?!)
@@ -2591,6 +2677,10 @@ If FORCE is non-nil, the .newsrc file is read."
   ;; from the variable gnus-newsrc-alist.
   (when (and (or gnus-newsrc-alist gnus-killed-list)
             gnus-current-startup-file)
+    ;; Save agent range limits for the currently active method.
+    (when gnus-agent
+      (gnus-agent-save-local force))
+
     (save-excursion
       (if (and (or gnus-use-dribble-file gnus-slave)
               (not force)
@@ -2608,6 +2698,7 @@ If FORCE is non-nil, the .newsrc file is read."
            (gnus-message 8 "Saving %s..." gnus-current-startup-file)
            (gnus-gnus-to-newsrc-format)
            (gnus-message 8 "Saving %s...done" gnus-current-startup-file))
+
          ;; Save .newsrc.eld.
          (set-buffer (gnus-get-buffer-create " *Gnus-newsrc*"))
          (make-local-variable 'version-control)
@@ -2793,7 +2884,7 @@ If FORCE is non-nil, the .newsrc file is read."
 
 (defun gnus-slave-mode ()
   "Minor mode for slave Gnusae."
-  (gnus-add-minor-mode 'gnus-slave-mode " Slave" (make-sparse-keymap))
+  (add-minor-mode 'gnus-slave-mode " Slave" (make-sparse-keymap))
   (gnus-run-hooks 'gnus-slave-mode-hook))
 
 (defun gnus-slave-save-newsrc ()
index bed7778..3dcec78 100644 (file)
@@ -44,6 +44,7 @@
 (autoload 'gnus-cache-write-active "gnus-cache")
 (autoload 'gnus-mailing-list-insinuate "gnus-ml" nil t)
 (autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" nil t)
+(autoload 'gnus-pick-line-number "gnus-salt" nil t)
 (autoload 'mm-uu-dissect "mm-uu")
 (autoload 'gnus-article-outlook-deuglify-article "deuglify"
   "Deuglify broken Outlook (Express) articles and redisplay."
@@ -421,6 +422,13 @@ this variable specifies group names."
                         (cons :value ("" "") regexp (repeat string))
                         (sexp :value nil))))
 
+(defcustom gnus-move-group-prefix-function 'gnus-group-real-prefix
+  "Function used to compute default prefix for article move/copy/etc prompts.
+The function should take one argument, a group name, and return a
+string with the suggested prefix."
+  :group 'gnus-summary-mail
+  :type 'function)
+
 (defcustom gnus-unread-mark ?           ;Whitespace
   "*Mark used for unread articles."
   :group 'gnus-summary-marks
@@ -671,6 +679,41 @@ score file."
   :group 'gnus-score-default
   :type 'integer)
 
+(defun gnus-widget-reversible-match (widget value)
+  "Ignoring WIDGET, convert VALUE to internal form.
+VALUE should have the form `FOO' or `(not FOO)', where FOO is an symbol."
+  ;; (debug value)
+  (or (symbolp value)
+      (and (listp value)
+           (eq (length value) 2)
+           (eq (nth 0 value) 'not)
+           (symbolp (nth 1 value)))))
+
+(defun gnus-widget-reversible-to-internal (widget value)
+  "Ignoring WIDGET, convert VALUE to internal form.
+VALUE should have the form `FOO' or `(not FOO)', where FOO is an atom.
+FOO is converted to (FOO nil) and (not FOO) is converted to (FOO t)."
+  ;; (debug value)
+  (if (atom value)
+      (list value nil)
+    (list (nth 1 value) t)))
+
+(defun gnus-widget-reversible-to-external (widget value)
+  "Ignoring WIDGET, convert VALUE to external form.
+VALUE should have the form `(FOO nil)' or `(FOO t)', where FOO is an atom.
+\(FOO  nil) is converted to FOO and (FOO t) is converted to (not FOO)."
+  ;; (debug value)
+  (if (nth 1 value)
+      (list 'not (nth 0 value))
+    (nth 0 value)))
+
+(define-widget 'gnus-widget-reversible 'group
+  "A `group' that convert values."
+  :match 'gnus-widget-reversible-match
+  :value-to-internal 'gnus-widget-reversible-to-internal
+  :value-to-external 'gnus-widget-reversible-to-external)
+                        
+
 (defcustom gnus-article-sort-functions '(gnus-article-sort-by-number)
   "*List of functions used for sorting articles in the summary buffer.
 
@@ -683,6 +726,9 @@ is often much slower than sorting by number, and the sorting order is
 very similar.  (Sorting by date means sorting by the time the message
 was sent, sorting by number means sorting by arrival time.)
 
+Each item can also be a list `(not F)' where F is a function;
+this reverses the sort order.
+
 Ready-made functions include `gnus-article-sort-by-number',
 `gnus-article-sort-by-author', `gnus-article-sort-by-subject',
 `gnus-article-sort-by-date', `gnus-article-sort-by-random'
@@ -691,13 +737,16 @@ and `gnus-article-sort-by-score'.
 When threading is turned on, the variable `gnus-thread-sort-functions'
 controls how articles are sorted."
   :group 'gnus-summary-sort
-  :type '(repeat (choice (function-item gnus-article-sort-by-number)
-                        (function-item gnus-article-sort-by-author)
-                        (function-item gnus-article-sort-by-subject)
-                        (function-item gnus-article-sort-by-date)
-                        (function-item gnus-article-sort-by-score)
-                        (function-item gnus-article-sort-by-random)
-                        (function :tag "other"))))
+  :type '(repeat (gnus-widget-reversible
+                  (choice (function-item gnus-article-sort-by-number)
+                          (function-item gnus-article-sort-by-author)
+                          (function-item gnus-article-sort-by-subject)
+                          (function-item gnus-article-sort-by-date)
+                          (function-item gnus-article-sort-by-score)
+                          (function-item gnus-article-sort-by-random)
+                          (function :tag "other"))
+                  (boolean :tag "Reverse order"))))
+
 
 (defcustom gnus-thread-sort-functions '(gnus-thread-sort-by-number)
   "*List of functions used for sorting threads in the summary buffer.
@@ -712,6 +761,9 @@ is often much slower than sorting by number, and the sorting order is
 very similar.  (Sorting by date means sorting by the time the message
 was sent, sorting by number means sorting by arrival time.)
 
+Each list item can also be a list `(not F)' where F is a
+function; this specifies reversed sort order.
+
 Ready-made functions include `gnus-thread-sort-by-number',
 `gnus-thread-sort-by-author', `gnus-thread-sort-by-subject',
 `gnus-thread-sort-by-date', `gnus-thread-sort-by-score',
@@ -723,14 +775,19 @@ Ready-made functions include `gnus-thread-sort-by-number',
 When threading is turned off, the variable
 `gnus-article-sort-functions' controls how articles are sorted."
   :group 'gnus-summary-sort
-  :type '(repeat (choice (function-item gnus-thread-sort-by-number)
-                        (function-item gnus-thread-sort-by-author)
-                        (function-item gnus-thread-sort-by-subject)
-                        (function-item gnus-thread-sort-by-date)
-                        (function-item gnus-thread-sort-by-score)
-                        (function-item gnus-thread-sort-by-total-score)
-                        (function-item gnus-thread-sort-by-random)
-                        (function :tag "other"))))
+  :type '(repeat 
+          (gnus-widget-reversible
+           (choice (function-item gnus-thread-sort-by-number)
+                   (function-item gnus-thread-sort-by-author)
+                   (function-item gnus-thread-sort-by-subject)
+                   (function-item gnus-thread-sort-by-date)
+                   (function-item gnus-thread-sort-by-score)
+                   (function-item gnus-thread-sort-by-most-recent-number)
+                   (function-item gnus-thread-sort-by-most-recent-date)
+                   (function-item gnus-thread-sort-by-random)
+                   (function-item gnus-thread-sort-by-total-score)
+                   (function :tag "other"))
+           (boolean :tag "Reverse order"))))
 
 (defcustom gnus-thread-score-function '+
   "*Function used for calculating the total score of a thread.
@@ -1166,7 +1223,6 @@ the normal Gnus MIME machinery."
     (?\< (make-string (max 0 (- 20 gnus-tmp-level)) ? ) ?s)
     (?i gnus-tmp-score ?d)
     (?z gnus-tmp-score-char ?c)
-    (?l (bbb-grouplens-score gnus-tmp-header) ?s)
     (?V (gnus-thread-total-score (and (boundp 'thread) (car thread))) ?d)
     (?U gnus-tmp-unread ?c)
     (?f (gnus-summary-from-or-to-or-newsgroups gnus-tmp-header gnus-tmp-from)
@@ -1379,11 +1435,19 @@ This list will always be a subset of gnus-newsgroup-undownloaded.")
 (defvar gnus-newsgroup-variables nil
   "A list of variables that have separate values in different newsgroups.
 A list of newsgroup (summary buffer) local variables, or cons of
-variables and their default values (when the default values are not
-nil), that should be made global while the summary buffer is active.
+variables and their default expressions to be evalled (when the default
+values are not nil), that should be made global while the summary buffer
+is active.
+
+Note: The default expressions will be evaluated (using function `eval')
+before assignment to the local variable rather than just assigned to it.
+If the default expression is the symbol `global', that symbol will not
+be evaluated but the global value of the local variable will be used
+instead.
+
 These variables can be used to set variables in the group parameters
-while still allowing them to affect operations done in other
-buffers. For example:
+while still allowing them to affect operations done in other buffers.
+For example:
 
 \(setq gnus-newsgroup-variables
      '(message-use-followup-to
@@ -1755,7 +1819,8 @@ increase the score of each group you read."
   "c" gnus-summary-limit-exclude-childless-dormant
   "C" gnus-summary-limit-mark-excluded-as-read
   "o" gnus-summary-insert-old-articles
-  "N" gnus-summary-insert-new-articles)
+  "N" gnus-summary-insert-new-articles
+  "r" gnus-summary-limit-to-replied)
 
 (gnus-define-keys (gnus-summary-goto-map "G" gnus-summary-mode-map)
   "n" gnus-summary-next-unread-article
@@ -1845,6 +1910,7 @@ increase the score of each group you read."
   "q" gnus-article-de-quoted-unreadable
   "6" gnus-article-de-base64-unreadable
   "Z" gnus-article-decode-HZ
+  "A" gnus-article-treat-ansi-sequences
   "h" gnus-article-wash-html
   "u" gnus-article-unsplit-urls
   "s" gnus-summary-force-verify-and-decrypt
@@ -2193,6 +2259,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
              ["Unsplit URLs" gnus-article-unsplit-urls t]
              ["Verify X-PGP-Sig" gnus-article-verify-x-pgp-sig t]
              ["Decode HZ" gnus-article-decode-HZ t]
+             ["ANSI sequences" gnus-article-treat-ansi-sequences t]
              ("(Outlook) Deuglify"
               ["Unwrap lines" gnus-article-outlook-unwrap-lines t]
               ["Repair attribution" gnus-article-outlook-repair-attribution t]
@@ -2392,6 +2459,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
         ["Display Predicate" gnus-summary-limit-to-display-predicate t]
         ["Unread" gnus-summary-limit-to-unread t]
         ["Unseen" gnus-summary-limit-to-unseen t]
+        ["Replied" gnus-summary-limit-to-replied t]
         ["Non-dormant" gnus-summary-limit-exclude-dormant t]
         ["Next articles" gnus-summary-limit-to-articles t]
         ["Pop limit" gnus-summary-pop-limit t]
@@ -3138,8 +3206,7 @@ buffer that was in action when the last article was fetched."
            (push (eval (car locals)) vlist))
          (setq locals (cdr locals)))
        (setq vlist (nreverse vlist)))
-      (save-excursion
-       (set-buffer gnus-group-buffer)
+      (with-current-buffer gnus-group-buffer
        (setq gnus-newsgroup-name name
              gnus-newsgroup-marked marked
              gnus-newsgroup-spam-marked spam
@@ -3244,8 +3311,8 @@ buffer that was in action when the last article was fetched."
        ; 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
-        (save-excursion (set-buffer gnus-summary-buffer)
-                        gnus-newsgroup-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)
@@ -3980,13 +4047,12 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
   "Translate STRING into something that doesn't contain weird characters."
   (mm-subst-char-in-string
    ?\r ?\-
-   (mm-subst-char-in-string
-    ?\n ?\- string)))
+   (mm-subst-char-in-string ?\n ?\- string t) t))
 
 ;; This function has to be called with point after the article number
 ;; on the beginning of the line.
 (defsubst gnus-nov-parse-line (number dependencies &optional force-new)
-  (let ((eol (gnus-point-at-eol))
+  (let ((eol (point-at-eol))
        (buffer (current-buffer))
        header references in-reply-to)
 
@@ -4085,8 +4151,7 @@ the id of the parent article (if any)."
            (setq article (read (current-buffer))
                  header (gnus-nov-parse-line article dependencies)))
          (when header
-           (save-excursion
-             (set-buffer gnus-summary-buffer)
+           (with-current-buffer gnus-summary-buffer
              (push header gnus-newsgroup-headers)
              (if (memq (setq article (mail-header-number header))
                        gnus-newsgroup-unselected)
@@ -4183,7 +4248,7 @@ If LINE, insert the rebuilt thread starting on line LINE."
        (setq thread (list (car (gnus-id-to-thread id))))
       ;; Get the thread this article is part of.
       (setq thread (gnus-remove-thread id)))
-    (setq old-pos (gnus-point-at-bol))
+    (setq old-pos (point-at-bol))
     (setq current (save-excursion
                    (and (re-search-backward "[\r\n]" nil t)
                         (gnus-summary-article-number))))
@@ -4365,9 +4430,9 @@ If LINE, insert the rebuilt thread starting on line LINE."
       (gnus-summary-show-thread)
       (gnus-data-remove
        number
-       (- (gnus-point-at-bol)
+       (- (point-at-bol)
          (prog1
-             (1+ (gnus-point-at-eol))
+             (1+ (point-at-eol))
            (gnus-delete-line)))))))
 
 (defun gnus-sort-threads-1 (threads func)
@@ -4958,23 +5023,20 @@ or a straight list of headers."
                  gnus-list-identifiers))
        changed subject)
     (when regexp
+      (setq regexp (concat "^\\(?:R[Ee]: +\\)*\\(" regexp " *\\)"))
       (dolist (header gnus-newsgroup-headers)
        (setq subject (mail-header-subject header)
              changed nil)
-       (while (string-match
-               (concat "^\\(R[Ee]: +\\)*\\(" regexp " *\\)")
-               subject)
+       (while (string-match regexp subject)
          (setq subject
-               (concat (substring subject 0 (match-beginning 2))
+               (concat (substring subject 0 (match-beginning 1))
                        (substring subject (match-end 0)))
                changed t))
-       (when (and changed
-                  (string-match
-                   "^\\(\\(R[Ee]: +\\)+\\)R[Ee]: +" subject))
-         (setq subject
-               (concat (substring subject 0 (match-beginning 1))
-                       (substring subject (match-end 1)))))
        (when changed
+         (when (string-match "^\\(\\(?:R[Ee]: +\\)+\\)R[Ee]: +" subject)
+           (setq subject
+                 (concat (substring subject 0 (match-beginning 1))
+                         (substring subject (match-end 1)))))
          (mail-header-set-subject header subject))))))
 
 (defun gnus-fetch-headers (articles)
@@ -5002,7 +5064,7 @@ or a straight list of headers."
   "Select newsgroup GROUP.
 If READ-ALL is non-nil, all articles in the group are selected.
 If SELECT-ARTICLES, only select those articles from GROUP."
-  (let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
+  (let* ((entry (gnus-group-entry group))
         ;;!!! Dirty hack; should be removed.
         (gnus-summary-ignore-duplicates
          (if (eq (car (gnus-find-method-for-group group)) 'nnvirtual)
@@ -5031,17 +5093,8 @@ If SELECT-ARTICLES, only select those articles from GROUP."
             group (gnus-status-message group)))
 
     (when gnus-agent
-      ;; The agent may be storing articles that are no longer in the
-      ;; server's active range.  If that is the case, the active range
-      ;; needs to be expanded such that the agent's articles can be
-      ;; included in the summary.
-      (let* ((gnus-command-method (gnus-find-method-for-group group))
-             (alist (gnus-agent-load-alist group))
-             (active (gnus-active group)))
-        (if (and (car alist)
-                 (< (caar alist) (car active)))
-            (gnus-set-active group (cons (caar alist) (cdr active)))))
-
+      (gnus-agent-possibly-alter-active group (gnus-active group) info)
+      
       (setq gnus-summary-use-undownloaded-faces
            (gnus-agent-find-parameter
             group
@@ -5370,7 +5423,8 @@ If SELECT-ARTICLES, only select those articles from GROUP."
         (min (car active))
         (max (cdr active))
         (types gnus-article-mark-lists)
-        marks var articles article mark mark-type)
+        marks var articles article mark mark-type
+         bgn end)
 
     (dolist (marks marked-lists)
       (setq mark (car marks)
@@ -5380,13 +5434,30 @@ If SELECT-ARTICLES, only select those articles from GROUP."
       ;; We set the variable according to the type of the marks list,
       ;; and then adjust the marks to a subset of the active articles.
       (cond
-       ;; Adjust "simple" lists.
+       ;; Adjust "simple" lists - compressed yet unsorted
        ((eq mark-type 'list)
-       (set var (setq articles (gnus-uncompress-range (cdr marks))))
-       (when (memq mark '(tick dormant expire reply save))
-         (while articles
-           (when (or (< (setq article (pop articles)) min) (> article max))
-             (set var (delq article (symbol-value var)))))))
+        ;; Simultaneously uncompress and clip to active range
+        ;; See gnus-uncompress-range for a description of possible marks
+        (let (l lh)
+          (if (not (cadr marks))
+              (set var nil)
+            (setq articles (if (numberp (cddr marks))
+                               (list (cdr marks))
+                             (cdr marks))
+                  lh (cons nil nil)
+                  l lh)
+
+            (while (setq article (pop articles))
+              (cond ((consp article)
+                     (setq bgn (max (car article) min)
+                           end (min (cdr article) max))
+                     (while (<= bgn end)
+                       (setq l (setcdr l (cons bgn nil))
+                             bgn (1+ bgn))))
+                    ((and (<= min article)
+                          (>= max article))
+                     (setq l (setcdr l (cons article nil))))))
+            (set var (cdr lh)))))
        ;; Adjust assocs.
        ((eq mark-type 'tuple)
        (set var (setq articles (cdr marks)))
@@ -5596,7 +5667,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
 (defun gnus-mark-xrefs-as-read (from-newsgroup headers unreads)
   "Look through all the headers and mark the Xrefs as read."
   (let ((virtual (gnus-virtual-group-p from-newsgroup))
-       name entry info xref-hashtb idlist method nth4)
+       name info xref-hashtb idlist method nth4)
     (save-excursion
       (set-buffer gnus-group-buffer)
       (when (setq xref-hashtb
@@ -5607,8 +5678,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
             (setq idlist (symbol-value group))
             ;; Dead groups are not updated.
             (and (prog1
-                     (setq entry (gnus-gethash name gnus-newsrc-hashtb)
-                           info (nth 2 entry))
+                     (setq info (gnus-get-info name))
                    (when (stringp (setq nth4 (gnus-info-method info)))
                      (setq nth4 (gnus-server-to-method nth4))))
                  ;; Only do the xrefs if the group has the same
@@ -5630,7 +5700,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
         xref-hashtb)))))
 
 (defun gnus-compute-read-articles (group articles)
-  (let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
+  (let* ((entry (gnus-group-entry group))
         (info (nth 2 entry))
         (active (gnus-active group))
         ninfo)
@@ -5667,14 +5737,13 @@ The resulting hash table is returned, or nil if no Xrefs were found."
 (defun gnus-group-make-articles-read (group articles)
   "Update the info of GROUP to say that ARTICLES are read."
   (let* ((num 0)
-        (entry (gnus-gethash group gnus-newsrc-hashtb))
+        (entry (gnus-group-entry group))
         (info (nth 2 entry))
         (active (gnus-active group))
         range)
     (when entry
       (setq range (gnus-compute-read-articles group articles))
-      (save-excursion
-       (set-buffer gnus-group-buffer)
+      (with-current-buffer gnus-group-buffer
        (gnus-undo-register
          `(progn
             (gnus-info-set-marks ',info ',(gnus-info-marks info) t)
@@ -5713,8 +5782,8 @@ The resulting hash table is returned, or nil if no Xrefs were found."
   (let ((cur nntp-server-buffer)
        (dependencies
         (or dependencies
-            (save-excursion (set-buffer gnus-summary-buffer)
-                            gnus-newsgroup-dependencies)))
+            (with-current-buffer gnus-summary-buffer
+              gnus-newsgroup-dependencies)))
        headers id end ref
        (mail-parse-charset gnus-newsgroup-charset)
        (mail-parse-ignored-charsets
@@ -5931,8 +6000,8 @@ Return a list of headers that match SEQUENCE (see
 (defun gnus-article-get-xrefs ()
   "Fill in the Xref value in `gnus-current-headers', if necessary.
 This is meant to be called in `gnus-article-internal-prepare-hook'."
-  (let ((headers (save-excursion (set-buffer gnus-summary-buffer)
-                                gnus-current-headers)))
+  (let ((headers (with-current-buffer gnus-summary-buffer
+                  gnus-current-headers)))
     (or (not gnus-use-cross-reference)
        (not headers)
        (and (mail-header-xref headers)
@@ -5947,7 +6016,7 @@ This is meant to be called in `gnus-article-internal-prepare-hook'."
                           (looking-at "Xref:"))
                      (search-forward "\nXref:" nil t))
              (goto-char (1+ (match-end 0)))
-             (setq xref (buffer-substring (point) (gnus-point-at-eol)))
+             (setq xref (buffer-substring (point) (point-at-eol)))
              (mail-header-set-xref headers xref)))))))
 
 (defun gnus-summary-insert-subject (id &optional old-header use-old-header)
@@ -5975,9 +6044,9 @@ the subject line on."
          (goto-char (gnus-data-pos d))
          (gnus-data-remove
           number
-          (- (gnus-point-at-bol)
+          (- (point-at-bol)
              (prog1
-                 (1+ (gnus-point-at-eol))
+                 (1+ (point-at-eol))
                (gnus-delete-line))))))
       (when old-header
        (mail-header-set-number header (mail-header-number old-header)))
@@ -6104,8 +6173,7 @@ If optional argument BACKWARD is non-nil, search backward instead."
 (defun gnus-summary-best-group (&optional exclude-group)
   "Find the name of the best unread group.
 If EXCLUDE-GROUP, do not go to this group."
-  (save-excursion
-    (set-buffer gnus-group-buffer)
+  (with-current-buffer gnus-group-buffer
     (save-excursion
       (gnus-group-best-unread-group exclude-group))))
 
@@ -6315,15 +6383,15 @@ displayed, no centering will be performed."
        (while read
          (when first
            (while (< first nlast)
-             (push first unread)
-             (setq first (1+ first))))
+             (setq unread (cons first unread)
+                    first (1+ first))))
          (setq first (1+ (if (atom (car read)) (car read) (cdar read))))
          (setq nlast (if (atom (cadr read)) (cadr read) (caadr read)))
          (setq read (cdr read)))))
     ;; And add the last unread articles.
     (while (<= first last)
-      (push first unread)
-      (setq first (1+ first)))
+      (setq unread (cons first unread)
+            first (1+ first)))
     ;; Return the list of unread articles.
     (delq 0 (nreverse unread))))
 
@@ -6341,6 +6409,44 @@ displayed, no centering will be performed."
           (cdr (assq 'dormant marked)))
          (cdr (assq 'tick marked))))))
 
+;; This function returns a sequence of article numbers based on the
+;; difference between the ranges of read articles in this group and
+;; the range of active articles.
+(defun gnus-sequence-of-unread-articles (group)
+  (let* ((read (gnus-info-read (gnus-get-info group)))
+        (active (or (gnus-active group) (gnus-activate-group group)))
+        (last (cdr active))
+        first nlast unread)
+    ;; If none are read, then all are unread.
+    (if (not read)
+       (setq first (car active))
+      ;; If the range of read articles is a single range, then the
+      ;; first unread article is the article after the last read
+      ;; article.  Sounds logical, doesn't it?
+      (if (and (not (listp (cdr read)))
+              (or (< (car read) (car active))
+                  (progn (setq read (list read))
+                         nil)))
+         (setq first (max (car active) (1+ (cdr read))))
+       ;; `read' is a list of ranges.
+       (when (/= (setq nlast (or (and (numberp (car read)) (car read))
+                                 (caar read)))
+                 1)
+         (setq first (car active)))
+       (while read
+         (when first
+            (push (cons first nlast) unread))
+         (setq first (1+ (if (atom (car read)) (car read) (cdar read))))
+         (setq nlast (if (atom (cadr read)) (cadr read) (caadr read)))
+         (setq read (cdr read)))))
+    ;; And add the last unread articles.
+    (cond ((< first last)
+           (push (cons first last) unread))
+          ((= first last)
+           (push first unread)))
+    ;; Return the sequence of unread articles.
+    (delq 0 (nreverse unread))))
+
 ;; Various summary commands
 
 (defun gnus-summary-select-article-buffer ()
@@ -6439,8 +6545,7 @@ The prefix argument ALL means to select all articles."
          (setq gnus-newsgroup-killed (list gnus-newsgroup-killed)))
        (let ((headers gnus-newsgroup-headers))
          ;; Set the new ranges of read articles.
-         (save-excursion
-           (set-buffer gnus-group-buffer)
+         (with-current-buffer gnus-group-buffer
            (gnus-undo-force-boundary))
          (gnus-update-read-articles
           group (gnus-sorted-union
@@ -6690,7 +6795,7 @@ The state which existed when entering the ephemeral is reset."
          (if (null arg) (not gnus-dead-summary-mode)
            (> (prefix-numeric-value arg) 0)))
     (when gnus-dead-summary-mode
-      (gnus-add-minor-mode
+      (add-minor-mode
        'gnus-dead-summary-mode " Dead" gnus-dead-summary-mode-map))))
 
 (defun gnus-deaden-summary ()
@@ -6698,8 +6803,7 @@ The state which existed when entering the ephemeral is reset."
   ;; Kill any previous dead summary buffer.
   (when (and gnus-dead-summary
             (buffer-name gnus-dead-summary))
-    (save-excursion
-      (set-buffer gnus-dead-summary)
+    (with-current-buffer gnus-dead-summary
       (when gnus-dead-summary-mode
        (kill-buffer (current-buffer)))))
   ;; Make this the current dead summary.
@@ -6718,8 +6822,7 @@ The state which existed when entering the ephemeral is reset."
   (save-excursion
     (when (and (buffer-name buffer)
               (not gnus-single-article-buffer))
-      (save-excursion
-       (set-buffer buffer)
+      (with-current-buffer buffer
        (gnus-kill-buffer gnus-article-buffer)
        (gnus-kill-buffer gnus-original-article-buffer)))
     (cond
@@ -6759,7 +6862,7 @@ in."
     (when current-prefix-arg
       (completing-read
        "FAQ dir: " (and (listp gnus-group-faq-directory)
-                       (mapcar (lambda (file) (list file))
+                       (mapcar 'list
                                gnus-group-faq-directory))))))
   (let (gnus-faq-buffer)
     (when (setq gnus-faq-buffer
@@ -7085,8 +7188,7 @@ If BACKWARD, the previous article is selected instead of the next."
       (gnus-summary-jump-to-group gnus-newsgroup-name))
     (let ((cmd last-command-char)
          (point
-          (save-excursion
-            (set-buffer gnus-group-buffer)
+          (with-current-buffer gnus-group-buffer
             (point)))
          (group
           (if (eq gnus-keep-same-level 'best)
@@ -7138,7 +7240,7 @@ If BACKWARD, the previous article is selected instead of the next."
                      (not (gnus-ephemeral-group-p gnus-newsgroup-name)))
                 (format " (Type %s for %s [%s])"
                         (single-key-description cmd) group
-                        (car (gnus-gethash group gnus-newsrc-hashtb)))
+                        (gnus-group-unread group))
               (format " (Type %s to exit %s)"
                       (single-key-description cmd)
                       gnus-newsgroup-name))))
@@ -7544,10 +7646,9 @@ articles that are younger than AGE days."
        (if (numberp days)
           (progn
             (setq days-got t)
-            (if (< days 0)
-                (progn
-                  (setq younger (not younger))
-                  (setq days (* days -1)))))
+            (when (< days 0)
+              (setq younger (not younger))
+              (setq days (* days -1))))
         (message "Please enter a number.")
         (sleep-for 1)))
      (list days younger)))
@@ -7632,6 +7733,17 @@ If ALL is non-nil, limit strictly to unread articles."
           gnus-duplicate-mark gnus-souped-mark)
      'reverse)))
 
+(defun gnus-summary-limit-to-replied (&optional unreplied)
+  "Limit the summary buffer to replied articles.
+If UNREPLIED (the prefix), limit to unreplied articles."
+  (interactive "P")
+  (if unreplied
+      (gnus-summary-limit
+       (gnus-set-difference gnus-newsgroup-articles
+       gnus-newsgroup-replied))
+    (gnus-summary-limit gnus-newsgroup-replied))
+  (gnus-summary-position-point))
+
 (defalias 'gnus-summary-delete-marked-with 'gnus-summary-limit-exclude-marks)
 (make-obsolete 'gnus-summary-delete-marked-with
               'gnus-summary-limit-exclude-marks)
@@ -7977,13 +8089,12 @@ fetch-old-headers verbiage, and so on."
            (and gnus-newsgroup-display
                 (not (funcall gnus-newsgroup-display)))
            ;; Check NoCeM things.
-           (if (and gnus-use-nocem
-                    (gnus-nocem-unwanted-article-p
-                     (mail-header-id (car thread))))
-               (progn
-                 (setq gnus-newsgroup-unreads
-                       (delq number gnus-newsgroup-unreads))
-                 t))))
+           (when (and gnus-use-nocem
+                      (gnus-nocem-unwanted-article-p
+                       (mail-header-id (car thread))))
+             (setq gnus-newsgroup-unreads
+                   (delq number gnus-newsgroup-unreads))
+             t)))
          ;; Nope, invisible article.
          0
        ;; Ok, this article is to be visible, so we add it to the limit
@@ -8195,8 +8306,7 @@ to guess what the document format is."
     (let* ((name (format "%s-%d"
                         (gnus-group-prefixed-name
                          gnus-newsgroup-name (list 'nndoc ""))
-                        (save-excursion
-                          (set-buffer gnus-summary-buffer)
+                        (with-current-buffer gnus-summary-buffer
                           gnus-current-article)))
           (ogroup gnus-newsgroup-name)
           (params (append (gnus-info-params (gnus-get-info ogroup))
@@ -8269,7 +8379,7 @@ Obeys the standard process/prefix convention."
            ;; the wrong guess.
            (message-narrow-to-head)
            (goto-char (point-min))
-           (delete-matching-lines "^\\(Path\\):\\|^From ")
+           (delete-matching-lines "^Path:\\|^From ")
            (widen)
            (if (setq egroup
                      (gnus-group-read-ephemeral-group
@@ -8819,7 +8929,8 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
   (let ((articles (gnus-summary-work-articles n))
        (prefix (if (gnus-check-backend-function
                     'request-move-article gnus-newsgroup-name)
-                   (gnus-group-real-prefix gnus-newsgroup-name)
+                   (funcall gnus-move-group-prefix-function
+                            gnus-newsgroup-name)
                  ""))
        (names '((move "Move" "Moving")
                 (copy "Copy" "Copying")
@@ -8937,9 +9048,7 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
        (t
        (let* ((pto-group (gnus-group-prefixed-name
                           (car art-group) to-method))
-              (entry
-               (gnus-gethash pto-group gnus-newsrc-hashtb))
-              (info (nth 2 entry))
+              (info (gnus-get-info pto-group))
               (to-group (gnus-info-group info))
               to-marks)
          ;; Update the group that has been moved to.
@@ -9688,8 +9797,7 @@ ARTICLE can also be a list of articles."
   ;; (article-number . line-number-in-body).
   (push
    (cons article
-        (save-excursion
-          (set-buffer gnus-article-buffer)
+        (with-current-buffer gnus-article-buffer
           (count-lines
            (min (point)
                 (save-excursion
@@ -9933,7 +10041,7 @@ If NO-EXPIRE, auto-expiry will be inhibited."
 (defun gnus-summary-update-mark (mark type)
   (let ((forward (cdr (assq type gnus-summary-mark-positions)))
        (buffer-read-only nil))
-    (re-search-backward "[\n\r]" (gnus-point-at-bol) 'move-to-limit)
+    (re-search-backward "[\n\r]" (point-at-bol) 'move-to-limit)
     (when forward
       (when (looking-at "\r")
        (incf forward))
@@ -10457,7 +10565,7 @@ Returns nil if no thread was there to be shown."
   (interactive)
   (let ((buffer-read-only nil)
        (orig (point))
-       (end (gnus-point-at-eol))
+       (end (point-at-eol))
        ;; Leave point at bol
        (beg (progn (beginning-of-line) (point))))
     (prog1
@@ -10944,8 +11052,7 @@ save those articles instead."
           (t
            (gnus-completing-read-with-default
             nil prom
-            (mapcar (lambda (el) (list el))
-                    (nreverse split-name))
+            (mapcar 'list (nreverse split-name))
             nil nil nil
             'gnus-group-history))))
         (to-method (gnus-server-to-method (gnus-group-method to-newsgroup))))
@@ -11053,7 +11160,7 @@ If REVERSE, save parts that do not match TYPE."
                                (lambda (f)
                                  (if (equal f " ")
                                      f
-                                   (mm-quote-arg f)))
+                                   (shell-quote-argument f)))
                                files " ")))))
          (setq ps (cdr ps)))))
     (if (and gnus-view-pseudos (not not-view))
@@ -11148,14 +11255,6 @@ If REVERSE, save parts that do not match TYPE."
             (not (gnus-summary-article-sparse-p (mail-header-number header))))
        ;; We have found the header.
        header
-      ;; If this is a sparse article, we have to nix out its
-      ;; previous entry in the thread hashtb.
-      (when (and header
-                (gnus-summary-article-sparse-p (mail-header-number header)))
-       (let* ((parent (gnus-parent-id (mail-header-references header)))
-              (thread (and parent (gnus-id-to-thread parent))))
-         (when thread
-           (delq (assq header thread) thread))))
       ;; We have to really fetch the header to this article.
       (save-excursion
        (set-buffer nntp-server-buffer)
@@ -11213,8 +11312,8 @@ If REVERSE, save parts that do not match TYPE."
   ;; Added by Per Abrahamsen <amanda@iesd.auc.dk>.
   (when gnus-summary-selected-face
     (save-excursion
-      (let* ((beg (gnus-point-at-bol))
-            (end (gnus-point-at-eol))
+      (let* ((beg (point-at-bol))
+            (end (point-at-eol))
             ;; Fix by Mike Dugan <dugan@bucrf16.bu.edu>.
             (from (if (get-text-property beg gnus-mouse-face-prop)
                       beg
@@ -11263,7 +11362,7 @@ If REVERSE, save parts that do not match TYPE."
 
 (defun gnus-summary-highlight-line ()
   "Highlight current line according to `gnus-summary-highlight'."
-  (let* ((beg (gnus-point-at-bol))
+  (let* ((beg (point-at-bol))
         (article (or (gnus-summary-article-number) gnus-current-article))
         (score (or (cdr (assq article
                               gnus-newsgroup-scored))
@@ -11274,11 +11373,12 @@ If REVERSE, save parts that do not match TYPE."
         (default-high gnus-summary-default-high-score)
         (default-low gnus-summary-default-low-score)
         (uncached (and gnus-summary-use-undownloaded-faces
-                        (memq article gnus-newsgroup-undownloaded))))
+                        (memq article gnus-newsgroup-undownloaded)
+                        (not (memq article gnus-newsgroup-cached)))))
     (let ((face (funcall (gnus-summary-highlight-line-0))))
       (unless (eq face (get-text-property beg 'face))
        (gnus-put-text-property-excluding-characters-with-faces
-        beg (gnus-point-at-eol) 'face
+        beg (point-at-eol) 'face
         (setq face (if (boundp face) (symbol-value face) face)))
        (when gnus-summary-highlight-line-function
          (funcall gnus-summary-highlight-line-function article face))))))
@@ -11286,11 +11386,10 @@ If REVERSE, save parts that do not match TYPE."
 (defun gnus-update-read-articles (group unread &optional compute)
   "Update the list of read articles in GROUP.
 UNREAD is a sorted list."
-  (let* ((active (or gnus-newsgroup-active (gnus-active group)))
-        (entry (gnus-gethash group gnus-newsrc-hashtb))
-        (info (nth 2 entry))
-        (prev 1)
-        read)
+  (let ((active (or gnus-newsgroup-active (gnus-active group)))
+       (info (gnus-get-info group))
+       (prev 1)
+       read)
     (if (or (not info) (not active))
        ;; There is no info on this group if it was, in fact,
        ;; killed.  Gnus stores no information on killed groups, so
@@ -11358,8 +11457,7 @@ UNREAD is a sorted list."
     (dolist (buffer (buffer-list))
       (when (and (setq buffer (buffer-name buffer))
                 (string-match "Summary" buffer)
-                (save-excursion
-                  (set-buffer buffer)
+                (with-current-buffer buffer
                   ;; We check that this is, indeed, a summary buffer.
                   (and (eq major-mode 'gnus-summary-mode)
                        ;; Also make sure this isn't bogus.
@@ -11420,7 +11518,7 @@ treated as multipart/mixed."
     (insert "Mime-Version: 1.0\n")
     (widen)
     (when (search-forward "\n--" nil t)
-      (let ((separator (buffer-substring (point) (gnus-point-at-eol))))
+      (let ((separator (buffer-substring (point) (point-at-eol))))
        (message-narrow-to-head)
        (message-remove-header "Content-Type")
        (goto-char (point-max))
@@ -11640,7 +11738,7 @@ If ALL is a number, fetch this number of articles."
          (push i new)
          (decf i))
        (if (not new)
-           (message "No gnus is bad news.")
+           (message "No gnus is bad news")
          (gnus-summary-insert-articles new)
          (setq gnus-newsgroup-unreads
                (gnus-sorted-nunion gnus-newsgroup-unreads new))
index 05dbadf..f485f5d 100644 (file)
@@ -104,16 +104,16 @@ See Info node `(gnus)Formatting Variables'."
 
 (defun gnus-group-topic-name ()
   "The name of the topic on the current line."
-  (let ((topic (get-text-property (gnus-point-at-bol) 'gnus-topic)))
+  (let ((topic (get-text-property (point-at-bol) 'gnus-topic)))
     (and topic (symbol-name topic))))
 
 (defun gnus-group-topic-level ()
   "The level of the topic on the current line."
-  (get-text-property (gnus-point-at-bol) 'gnus-topic-level))
+  (get-text-property (point-at-bol) 'gnus-topic-level))
 
 (defun gnus-group-topic-unread ()
   "The number of unread articles in topic on the current line."
-  (get-text-property (gnus-point-at-bol) 'gnus-topic-unread))
+  (get-text-property (point-at-bol) 'gnus-topic-unread))
 
 (defun gnus-topic-unread (topic)
   "Return the number of unread articles in TOPIC."
@@ -126,7 +126,7 @@ See Info node `(gnus)Formatting Variables'."
 
 (defun gnus-topic-visible-p ()
   "Return non-nil if the current topic is visible."
-  (get-text-property (gnus-point-at-bol) 'gnus-topic-visible))
+  (get-text-property (point-at-bol) 'gnus-topic-visible))
 
 (defun gnus-topic-articles-in-topic (entries)
   (let ((total 0)
@@ -195,9 +195,7 @@ If TOPIC, start with that topic."
 
 (defun gnus-group-active-topic-p ()
   "Say whether the current topic comes from the active topics."
-  (save-excursion
-    (beginning-of-line)
-    (get-text-property (point) 'gnus-active)))
+  (get-text-property (point-at-bol) 'gnus-active))
 
 (defun gnus-topic-find-groups (topic &optional level all lowest recursive)
   "Return entries for all visible groups in TOPIC.
@@ -209,7 +207,7 @@ If RECURSIVE is t, return groups in its subtopics too."
     ;; We go through the newsrc to look for matches.
     (while groups
       (when (setq group (pop groups))
-       (setq entry (gnus-gethash group gnus-newsrc-hashtb)
+       (setq entry (gnus-group-entry group)
              info (nth 2 entry)
              params (gnus-info-params info)
              active (gnus-active group)
@@ -464,7 +462,7 @@ If LOWEST is non-nil, list all newsgroups of level LOWEST or higher."
          (gnus-make-hashtable-from-killed))
        (gnus-group-prepare-flat-list-dead
         (gnus-remove-if (lambda (group)
-                          (or (gnus-gethash group gnus-newsrc-hashtb)
+                          (or (gnus-group-entry group)
                               (gnus-gethash group gnus-killed-hashtb)))
                         not-in-list)
         gnus-level-killed ?K regexp)))
@@ -842,8 +840,7 @@ articles in the topic and its subtopics."
       (pop topics)))
   ;; Go through all living groups and make sure that
   ;; they belong to some topic.
-  (let* ((tgroups (apply 'append (mapcar (lambda (entry) (cdr entry))
-                                        gnus-topic-alist)))
+  (let* ((tgroups (apply 'append (mapcar 'cdr gnus-topic-alist)))
         (entry (last (assoc (caar gnus-topic-topology) gnus-topic-alist)))
         (newsrc (cdr gnus-newsrc-alist))
         group)
@@ -857,7 +854,7 @@ articles in the topic and its subtopics."
     (while (setq topic (pop alist))
       (while (cdr topic)
        (if (and (cadr topic)
-                (gnus-gethash (cadr topic) gnus-newsrc-hashtb))
+                (gnus-group-entry (cadr topic)))
            (setq topic (cdr topic))
          (setcdr topic (cddr topic)))))))
 
@@ -887,7 +884,7 @@ articles in the topic and its subtopics."
       (let ((topic-name (pop topic))
            group filtered-topic)
        (while (setq group (pop topic))
-         (when (and (or (gnus-gethash group gnus-active-hashtb)
+         (when (and (or (gnus-active group)
                         (gnus-info-method (gnus-get-info group)))
                     (not (gnus-gethash group gnus-killed-hashtb)))
            (push group filtered-topic)))
@@ -1136,7 +1133,7 @@ articles in the topic and its subtopics."
       (when (gnus-visual-p 'topic-menu 'menu)
        (gnus-topic-make-menu-bar))
       (gnus-set-format 'topic t)
-      (gnus-add-minor-mode 'gnus-topic-mode " Topic"
+      (add-minor-mode 'gnus-topic-mode " Topic"
                           gnus-topic-mode-map nil (lambda (&rest junk)
                                                     (interactive)
                                                     (gnus-topic-mode nil t)))
@@ -1315,7 +1312,7 @@ If COPYP, copy the groups instead."
   (let ((use-marked (and (not n) (not (gnus-region-active-p))
                         gnus-group-marked t))
        (groups (gnus-group-process-prefix n)))
-    (mapcar
+    (mapc
      (lambda (group)
        (gnus-group-remove-mark group use-marked)
        (let ((topicl (assoc (gnus-current-topic) gnus-topic-alist))
index f022926..6557f5a 100644 (file)
@@ -50,7 +50,6 @@
 
 (require 'gnus-util)
 (require 'gnus)
-(require 'custom)
 
 (defgroup gnus-undo nil
   "Undoing in Gnus buffers."
     ;; Set up the menu.
     (when (gnus-visual-p 'undo-menu 'menu)
       (gnus-undo-make-menu-bar))
-    (gnus-add-minor-mode 'gnus-undo-mode "" gnus-undo-mode-map)
+    (add-minor-mode 'gnus-undo-mode "" gnus-undo-mode-map)
     (gnus-make-local-hook 'post-command-hook)
     (add-hook 'post-command-hook 'gnus-undo-boundary nil t)
     (gnus-run-hooks 'gnus-undo-mode-hook)))
index b0acb08..16502ad 100644 (file)
 ;; Gnus first.
 
 ;; [Unfortunately, it does depend on other parts of Gnus, e.g. the
-;; autoloads below...]
+;; autoloads and defvars below...]
 
 ;;; Code:
 
-(require 'custom)
 (eval-when-compile
   (require 'cl)
   ;; Fixme: this should be a gnus variable, not nnmail-.
-  (defvar nnmail-pathname-coding-system))
+  (defvar nnmail-pathname-coding-system)
+
+  ;; Inappropriate references to other parts of Gnus.
+  (defvar gnus-emphasize-whitespace-regexp)
+  )
 (require 'time-date)
 (require 'netrc)
 
     (defalias 'gnus-replace-in-string 'replace-in-string))
    ((fboundp 'replace-regexp-in-string)
     (defun gnus-replace-in-string  (string regexp newtext &optional literal)
-      (replace-regexp-in-string regexp newtext string nil literal)))
-   (t
-    (defun gnus-replace-in-string (string regexp newtext &optional literal)
-      (let ((start 0) tail)
-       (while (string-match regexp string start)
-         (setq tail (- (length string) (match-end 0)))
-         (setq string (replace-match newtext nil literal string))
-         (setq start (- (length string) tail))))
-      string))))
+      (replace-regexp-in-string regexp newtext string nil literal)))))
 
 ;;; bring in the netrc functions as aliases
 (defalias 'gnus-netrc-get 'netrc-get)
        (funcall (if (stringp buffer) 'get-buffer 'buffer-name)
                buffer))))
 
-(defalias 'gnus-point-at-bol
-  (if (fboundp 'point-at-bol)
-      'point-at-bol
-    'line-beginning-position))
-
-(defalias 'gnus-point-at-eol
-  (if (fboundp 'point-at-eol)
-      'point-at-eol
-    'line-end-position))
-
 ;; The LOCAL arg to `add-hook' is interpreted differently in Emacs and
 ;; XEmacs.  In Emacs we don't need to call `make-local-hook' first.
 ;; It's harmless, though, so the main purpose of this alias is to shut
 
 ;; Delete the current line (and the next N lines).
 (defmacro gnus-delete-line (&optional n)
-  `(delete-region (gnus-point-at-bol)
+  `(delete-region (point-at-bol)
                  (progn (forward-line ,(or n 1)) (point))))
 
 (defun gnus-byte-code (func)
@@ -207,8 +192,7 @@ is slower."
   "Return the value of the header FIELD of current article."
   (save-excursion
     (save-restriction
-      (let ((case-fold-search t)
-           (inhibit-point-motion-hooks t))
+      (let ((inhibit-point-motion-hooks t))
        (nnheader-narrow-to-headers)
        (message-fetch-field field)))))
 
@@ -220,7 +204,7 @@ is slower."
 
 (defun gnus-goto-colon ()
   (beginning-of-line)
-  (let ((eol (gnus-point-at-eol)))
+  (let ((eol (point-at-eol)))
     (goto-char (or (text-property-any (point) eol 'gnus-position t)
                   (search-forward ":" eol t)
                   (point)))))
@@ -1238,32 +1222,12 @@ SPEC is a predicate specifier that contains stuff like `or', `and',
        `(,(car spec) ,@(mapcar 'gnus-make-predicate-1 (cdr spec)))
       (error "Invalid predicate specifier: %s" spec)))))
 
-(defun gnus-local-map-property (map)
-  "Return a list suitable for a text property list specifying keymap MAP."
-  (cond
-   ((featurep 'xemacs)
-    (list 'keymap map))
-   ((>= emacs-major-version 21)
-    (list 'keymap map))
-   (t
-    (list 'local-map map))))
-
-(defmacro gnus-completing-read-maybe-default (prompt table &optional predicate
-                                             require-match initial-contents
-                                             history default)
-  "Like `completing-read', allowing for non-existent 7th arg in older XEmacsen."
-  `(completing-read ,prompt ,table ,predicate ,require-match
-                    ,initial-contents ,history
-                    ,@(if (and (featurep 'xemacs) (< emacs-minor-version 2))
-                          ()
-                        (list default))))
-
 (defun gnus-completing-read (prompt table &optional predicate require-match
                                    history)
   (when (and history
             (not (boundp history)))
     (set history nil))
-  (gnus-completing-read-maybe-default
+  (completing-read
    (if (symbol-value history)
        (concat prompt " (" (car (symbol-value history)) "): ")
      (concat prompt ": "))
@@ -1487,6 +1451,28 @@ predicate on the elements."
         "")))
      (t emacs-version))))
 
+(defun gnus-rename-file (old-path new-path &optional trim)
+  "Rename OLD-PATH as NEW-PATH.  If TRIM, recursively delete
+empty directories from OLD-PATH."
+  (when (file-exists-p old-path)
+    (let* ((old-dir (file-name-directory old-path))
+          (old-name (file-name-nondirectory old-path))
+          (new-dir (file-name-directory new-path))
+          (new-name (file-name-nondirectory new-path))
+          temp)
+      (gnus-make-directory new-dir)
+      (rename-file old-path new-path t)
+      (when trim
+       (while (progn (setq temp (directory-files old-dir))
+                     (while (member (car temp) '("." ".."))
+                       (setq temp (cdr temp)))
+                     (= (length temp) 0))
+         (delete-directory old-dir)
+         (setq old-dir (file-name-as-directory 
+                        (file-truename 
+                         (concat old-dir "..")))))))))
+
+
 (provide 'gnus-util)
 
 ;;; gnus-util.el ends here
index 7a1ae40..f0f54a5 100644 (file)
@@ -510,11 +510,11 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                    "Various"))))
        (goto-char (point-min))
        (when (re-search-forward "^Subject: ")
-         (delete-region (point) (gnus-point-at-eol))
+         (delete-region (point) (point-at-eol))
          (insert subject))
        (goto-char (point-min))
        (when (re-search-forward "^From:")
-         (delete-region (point) (gnus-point-at-eol))
+         (delete-region (point) (point-at-eol))
          (insert " " from))
        (let ((message-forward-decoded-p t))
          (message-forward post t))))
@@ -849,7 +849,7 @@ When called interactively, prompt for REGEXP."
          (save-restriction
            (set-buffer buffer)
            (let (buffer-read-only)
-             (gnus-set-text-properties (point-min) (point-max) nil)
+             (set-text-properties (point-min) (point-max) nil)
              ;; These two are necessary for XEmacs 19.12 fascism.
              (put-text-property (point-min) (point-max) 'invisible nil)
              (put-text-property (point-min) (point-max) 'intangible nil))
@@ -1150,7 +1150,7 @@ When called interactively, prompt for REGEXP."
 
        ;; Expand numbers, sort, and return the list of article
        ;; numbers.
-       (mapcar (lambda (sub) (cdr sub))
+       (mapcar 'cdr
                (sort (gnus-uu-expand-numbers
                       list-of-subjects
                       (not do-not-translate))
@@ -1403,7 +1403,7 @@ When called interactively, prompt for REGEXP."
          (setq part (match-string 0 subject))
          (setq subject (substring subject (match-end 0)))))
     (or part
-       (while (string-match "\\([0-9]+\\)[^0-9]+\\([0-9]+\\)" subject)
+       (while (string-match "[0-9]+[^0-9]+[0-9]+" subject)
          (setq part (match-string 0 subject))
          (setq subject (substring subject (match-end 0)))))
     (or part "")))
@@ -1705,8 +1705,7 @@ Gnus might fail to display all of it.")
 (defun gnus-uu-check-correct-stripped-uucode (start end)
   (save-excursion
     (let (found beg length)
-      (if (not gnus-uu-correct-stripped-uucode)
-         ()
+      (unless gnus-uu-correct-stripped-uucode
        (goto-char start)
 
        (if (re-search-forward " \\|`" end t)
@@ -1719,19 +1718,15 @@ Gnus might fail to display all of it.")
                  (forward-line 1))))
 
          (while (not (eobp))
-           (if (looking-at (concat gnus-uu-begin-string "\\|"
-                                   gnus-uu-end-string))
-               ()
+           (unless (looking-at (concat gnus-uu-begin-string "\\|"
+                                       gnus-uu-end-string))
              (when (not found)
-               (beginning-of-line)
-               (setq beg (point))
-               (end-of-line)
-               (setq length (- (point) beg)))
+               (setq length (- (point-at-eol) (point-at-bol))))
              (setq found t)
              (beginning-of-line)
              (setq beg (point))
              (end-of-line)
-             (when (not (= length (- (point) beg)))
+             (unless (= length (- (point) beg))
                (insert (make-string (- length (- (point) beg)) ? ))))
            (forward-line 1)))))))
 
@@ -1776,7 +1771,7 @@ Gnus might fail to display all of it.")
 ;; that the filename will be treated as a single argument when the shell
 ;; executes the command.
 (defun gnus-uu-command (action file)
-  (let ((quoted-file (mm-quote-arg file)))
+  (let ((quoted-file (shell-quote-argument file)))
     (if (string-match "%s" action)
        (format action quoted-file)
       (concat action " " quoted-file))))
@@ -2031,8 +2026,7 @@ If no file has been included, the user will be asked for a file."
     (goto-char (point-min))
     (re-search-forward
      (concat "^" (regexp-quote mail-header-separator) "$") nil t)
-    (beginning-of-line)
-    (setq header (buffer-substring (point-min) (point)))
+    (setq header (buffer-substring (point-min) (point-at-bol)))
 
     (goto-char (point-min))
     (when gnus-uu-post-separate-description
@@ -2108,8 +2102,7 @@ If no file has been included, the user will be asked for a file."
 
     (when (not gnus-uu-post-separate-description)
       (set-buffer-modified-p nil)
-      (when (fboundp 'bury-buffer)
-       (bury-buffer)))))
+      (bury-buffer))))
 
 (provide 'gnus-uu)
 
index 54b8e88..a879a30 100644 (file)
@@ -39,6 +39,7 @@
 (defvar menu-bar-mode (featurep 'menubar))
 (require 'messagexmas)
 (require 'wid-edit)
+(require 'run-at-time)
 
 (defgroup gnus-xmas nil
   "XEmacsoid support for Gnus"
@@ -103,27 +104,13 @@ Possibly the `etc' directory has not been installed.")))
 (defvar standard-display-table)
 (defvar gnus-tree-minimize-window)
 
-(defun gnus-xmas-set-text-properties (start end props &optional buffer)
-  "You should NEVER use this function.  It is ideologically blasphemous.
-It is provided only to ease porting of broken FSF Emacs programs."
-  (if (stringp buffer)
-      nil
-    (map-extents (lambda (extent ignored)
-                  (remove-text-properties
-                   start end
-                   (list (extent-property extent 'text-prop) nil)
-                   buffer)
-                  nil)
-                buffer start end nil nil 'text-prop)
-    (gnus-add-text-properties start end props buffer)))
-
 (defun gnus-xmas-highlight-selected-summary ()
   ;; Highlight selected article in summary buffer
   (when gnus-summary-selected-face
     (when gnus-newsgroup-selected-overlay
       (delete-extent gnus-newsgroup-selected-overlay))
     (setq gnus-newsgroup-selected-overlay
-         (make-extent (gnus-point-at-bol) (gnus-point-at-eol)))
+         (make-extent (point-at-bol) (point-at-eol)))
     (set-extent-face gnus-newsgroup-selected-overlay
                     gnus-summary-selected-face)))
 
@@ -344,10 +331,6 @@ call it with the value of the `gnus-data' text property."
   (gnus-xmas-menu-add browse
     gnus-browse-menu))
 
-(defun gnus-xmas-grouplens-menu-add ()
-  (gnus-xmas-menu-add grouplens
-    gnus-grouplens-menu))
-
 (defun gnus-xmas-read-event-char (&optional prompt)
   "Get the next event."
   (when prompt
@@ -400,10 +383,6 @@ call it with the value of the `gnus-data' text property."
   (defalias 'gnus-window-edges 'window-pixel-edges)
   (defalias 'gnus-assq-delete-all 'gnus-xmas-assq-delete-all)
 
-  (if (and (<= emacs-major-version 19)
-          (< emacs-minor-version 14))
-      (defalias 'gnus-set-text-properties 'gnus-xmas-set-text-properties))
-
   (unless (boundp 'standard-display-table)
     (setq standard-display-table nil))
 
@@ -424,7 +403,10 @@ call it with the value of the `gnus-data' text property."
            'x-color-values
          (lambda (color)
            (color-instance-rgb-components
-            (make-color-instance color))))))
+            (make-color-instance color)))))
+
+  (unless (fboundp 'char-width)
+    (defalias 'char-width (lambda (ch) 1))))
 
 (defun gnus-xmas-redefine ()
   "Redefine lots of Gnus functions for XEmacs."
@@ -453,18 +435,12 @@ call it with the value of the `gnus-data' text property."
   (defalias 'gnus-create-image 'gnus-xmas-create-image)
   (defalias 'gnus-remove-image 'gnus-xmas-remove-image)
 
-  (when (or (< emacs-major-version 21)
-           (and (= emacs-major-version 21)
-                (< emacs-minor-version 3)))
-    (defalias 'gnus-completing-read 'gnus-xmas-completing-read))
-
   ;; These ones are not defcutom'ed, sometimes not even defvar'ed. They
   ;; probably should. If that is done, the code below should then be moved
   ;; where each variable is defined, in order not to mess with user settings.
   ;; -- didier
   (add-hook 'gnus-score-mode-hook 'gnus-xmas-score-menu-add)
   (add-hook 'gnus-binary-mode-hook 'gnus-xmas-binary-menu-add)
-  (add-hook 'gnus-grouplens-mode-hook 'gnus-xmas-grouplens-menu-add)
   (add-hook 'gnus-server-mode-hook 'gnus-xmas-server-menu-add)
   (add-hook 'gnus-browse-mode-hook 'gnus-xmas-browse-menu-add)
   (add-hook 'gnus-draft-mode-hook 'gnus-xmas-draft-menu-add)
@@ -737,7 +713,7 @@ XEmacs compatibility workaround."
 (defun gnus-group-add-icon ()
   "Add an icon to the current line according to `gnus-group-icon-list'."
   (let* ((p (point))
-        (end (gnus-point-at-eol))
+        (end (point-at-eol))
         ;; now find out where the line starts and leave point there.
         (beg (progn (beginning-of-line) (point))))
     (save-restriction
@@ -869,31 +845,6 @@ Warning: Don't insert text immediately after the image."
      nil)
    nil nil nil nil nil 'gnus-image category))
 
-(defun gnus-xmas-completing-read (prompt table &optional
-                                        predicate require-match history)
-  (when (and history
-            (not (boundp history)))
-    (set history nil))
-  (completing-read
-   (if (symbol-value history)
-       (concat prompt " (" (car (symbol-value history)) "): ")
-     (concat prompt ": "))
-   table
-   predicate
-   require-match
-   nil
-   history))
-
-;; This macro is because XEmacs versions prior to 21.2 do not have the
-;; PROTOCOL argument to `open-network-stream'.
-(defmacro gnus-xmas-open-network-stream (name buffer host service &optional protocol)
-  "Like `open-network-stream' but take into account older XEmacs versions."
-  (if (and (featurep 'xemacs)
-          (fboundp 'open-network-stream)
-          (emacs-version>= 21 2))
-      `(open-network-stream ,name ,buffer ,host ,service ,protocol)
-    `(open-network-stream ,name ,buffer ,host ,service)))
-
 (defun gnus-xmas-assq-delete-all (key alist)
   (let ((elem nil))
     (while (setq elem (assq key alist))
index 2e72b14..dfcbcfb 100644 (file)
@@ -70,7 +70,7 @@
 ;; These belong to gnus-group.el.
 (defgroup gnus-group nil
   "Group buffers."
-  :link '(custom-manual "(gnus)The Group Buffer")
+  :link '(custom-manual "(gnus)Group Buffer")
   :group 'gnus)
 
 (defgroup gnus-group-foreign nil
 ;; These belong to gnus-sum.el.
 (defgroup gnus-summary nil
   "Summary buffers."
-  :link '(custom-manual "(gnus)The Summary Buffer")
+  :link '(custom-manual "(gnus)Summary Buffer")
   :group 'gnus)
 
 (defgroup gnus-summary-exit nil
 
 (defgroup gnus-summary-sort nil
   "Sorting the summary buffer."
-  :link '(custom-manual "(gnus)Sorting")
+  :link '(custom-manual "(gnus)Summary Sorting")
   :group 'gnus-summary)
 
 (defgroup gnus-summary-visual nil
@@ -282,7 +282,7 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "0.1"
+(defconst gnus-version-number "0.2"
   "Version number for this version of Gnus.")
 
 (defconst gnus-version (format "No Gnus v%s" gnus-version-number)
@@ -303,9 +303,6 @@ be set in `.emacs' instead."
 (unless (fboundp 'gnus-group-remove-excess-properties)
   (defalias 'gnus-group-remove-excess-properties 'ignore))
 
-(unless (fboundp 'gnus-set-text-properties)
-  (defalias 'gnus-set-text-properties 'set-text-properties))
-
 (unless (featurep 'gnus-xmas)
   (defalias 'gnus-make-overlay 'make-overlay)
   (defalias 'gnus-delete-overlay 'delete-overlay)
@@ -851,12 +848,12 @@ be set in `.emacs' instead."
     (storm "#666699" "#99ccff")
     (pdino "#9999cc" "#99ccff")
     (purp "#9999cc" "#666699")
-    (no "#000000" "#ff0000")
+    (no "#ff0000" "#ffff00")
     (neutral "#b4b4b4" "#878787")
     (september "#bf9900" "#ffcc00"))
   "Color alist used for the Gnus logo.")
 
-(defcustom gnus-logo-color-style 'oort
+(defcustom gnus-logo-color-style 'no
   "*Color styles used for the Gnus logo."
   :type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
                           gnus-logo-color-alist))
@@ -940,10 +937,10 @@ be set in `.emacs' instead."
 
 (eval-when (load)
   (let ((command (format "%s" this-command)))
-    (if (and (string-match "gnus" command)
-            (not (string-match "gnus-other-frame" command)))
-       (gnus-splash)
-      (gnus-get-buffer-create gnus-group-buffer))))
+    (when (string-match "gnus" command)
+      (if (string-match "gnus-other-frame" command)
+         (gnus-get-buffer-create gnus-group-buffer)
+       (gnus-splash)))))
 
 ;;; Do the rest.
 
@@ -1103,9 +1100,8 @@ Check the NNTPSERVER environment variable and the
       (and (file-readable-p gnus-nntpserver-file)
           (with-temp-buffer
             (insert-file-contents gnus-nntpserver-file)
-            (let ((name (buffer-string)))
-              (unless (string-match "\\`[ \t\n]*$" name)
-                name))))))
+            (when (re-search-forward "[^ \t\n\r]+" nil t)
+              (match-string 0))))))
 
 (defcustom gnus-select-method
   (condition-case nil
@@ -1414,11 +1410,6 @@ cache to the full extent of the law."
   :group 'gnus-meta
   :type 'boolean)
 
-(defcustom gnus-use-grouplens nil
-  "*If non-nil, use GroupLens ratings."
-  :group 'gnus-meta
-  :type 'boolean)
-
 (defcustom gnus-keep-backlog 20
   "*If non-nil, Gnus will keep read articles for later re-retrieval.
 If it is a number N, then Gnus will only keep the last N articles
@@ -1902,19 +1893,23 @@ Only applicable to non-spam (unclassified and ham) groups.")
            (variable-item gnus-group-ham-exit-processor-BBDB)
            (variable-item gnus-group-ham-exit-processor-spamoracle)
            (variable-item gnus-group-ham-exit-processor-copy)
-           (const :tag "Spam: Gmane Report"  (spam spam-use-gmane))
            (const :tag "Spam: Bogofilter"    (spam spam-use-bogofilter))
            (const :tag "Spam: Blacklist"     (spam spam-use-blacklist))
-           (const :tag "Spam: ifile"         (spam spam-use-ifile))
-           (const :tag "Spam: Spam-stat"     (spam spam-use-stat))
+           (const :tag "Spam: Bsfilter"      (spam spam-use-bsfilter))
+           (const :tag "Spam: Gmane Report"  (spam spam-use-gmane))
+           (const :tag "Spam: ifile"         (spam spam-use-ifile))
            (const :tag "Spam: Spam Oracle"   (spam spam-use-spamoracle))
-           (const :tag "Ham: ifile"          (ham spam-use-ifile))
+           (const :tag "Spam: Spam-stat"     (spam spam-use-stat))
+           (const :tag "Spam: SpamAssassin"  (spam spam-use-spamassassin))
+           (const :tag "Ham: BBDB"           (ham spam-use-BBDB))
            (const :tag "Ham: Bogofilter"     (ham spam-use-bogofilter))
+           (const :tag "Ham: Bsfilter"       (ham spam-use-bsfilter))
+           (const :tag "Ham: Copy"           (ham spam-use-ham-copy))
+           (const :tag "Ham: ifile"          (ham spam-use-ifile))
+           (const :tag "Ham: Spam Oracle"    (ham spam-use-spamoracle))
            (const :tag "Ham: Spam-stat"      (ham spam-use-stat))
-           (const :tag "Ham: Whitelist"      (ham spam-use-whitelist))
-           (const :tag "Ham: BBDB"           (ham spam-use-BBDB))
-           (const :tag "Ham: Copy"           (ham spam-use-ham-copy))
-           (const :tag "Ham: Spam Oracle"    (ham spam-use-spamoracle)))))
+           (const :tag "Ham: SpamAssassin"   (ham spam-use-spamassassin))
+           (const :tag "Ham: Whitelist"      (ham spam-use-whitelist)))))
    :function-document
    "Which spam or ham processors will be applied when the summary is exited."
    :variable gnus-spam-process-newsgroups
@@ -1944,19 +1939,23 @@ spam processing, associated with the appropriate processor."
                   (variable-item gnus-group-ham-exit-processor-BBDB)
                   (variable-item gnus-group-ham-exit-processor-spamoracle)
                   (variable-item gnus-group-ham-exit-processor-copy)
-                  (const :tag "Spam: Gmane Report"  (spam spam-use-gmane))
                   (const :tag "Spam: Bogofilter"    (spam spam-use-bogofilter))
                   (const :tag "Spam: Blacklist"     (spam spam-use-blacklist))
-                  (const :tag "Spam: ifile"         (spam spam-use-ifile))
+                  (const :tag "Spam: Bsfilter"      (spam spam-use-bsfilter))
+                  (const :tag "Spam: ifile"         (spam spam-use-ifile))
+                  (const :tag "Spam: Gmane Report"  (spam spam-use-gmane))
                   (const :tag "Spam: Spam-stat"     (spam spam-use-stat))
                   (const :tag "Spam: Spam Oracle"   (spam spam-use-spamoracle))
-                  (const :tag "Ham: ifile"          (ham spam-use-ifile))
+                  (const :tag "Spam: SpamAssassin"  (spam spam-use-spamassassin))
+                  (const :tag "Ham: BBDB"           (ham spam-use-BBDB))
                   (const :tag "Ham: Bogofilter"     (ham spam-use-bogofilter))
-                  (const :tag "Ham: Spam-stat"      (ham spam-use-stat))
-                  (const :tag "Ham: Whitelist"      (ham spam-use-whitelist))
-                  (const :tag "Ham: BBDB"           (ham spam-use-BBDB))
-                  (const :tag "Ham: Copy"           (ham spam-use-ham-copy))
-                  (const :tag "Ham: Spam Oracle"    (ham spam-use-spamoracle)))))
+                  (const :tag "Ham: Bsfilter"       (ham spam-use-bsfilter))
+                  (const :tag "Ham: Copy"           (ham spam-use-ham-copy))
+                  (const :tag "Ham: ifile"          (ham spam-use-ifile))
+                  (const :tag "Ham: Spam-stat"      (ham spam-use-stat))
+                  (const :tag "Ham: Spam Oracle"    (ham spam-use-spamoracle))
+                  (const :tag "Ham: SpamAssassin"   (ham spam-use-spamassassin))
+                  (const :tag "Ham: Whitelist"      (ham spam-use-whitelist)))))
 
    :parameter-document
    "Which spam or ham processors will be applied when the summary is exited.")
@@ -1995,12 +1994,17 @@ spam-autodetect-recheck-messages is set.")
      (const default)
      (set :tag "Use specific methods"
          (variable-item spam-use-blacklist)
+         (variable-item spam-use-gmane-xref)
          (variable-item spam-use-regex-headers)
          (variable-item spam-use-regex-body)
          (variable-item spam-use-whitelist)
          (variable-item spam-use-BBDB)
          (variable-item spam-use-ifile)
          (variable-item spam-use-spamoracle)
+         (variable-item spam-use-spamassassin)
+         (variable-item spam-use-spamassassin-headers)
+         (variable-item spam-use-bsfilter)
+         (variable-item spam-use-bsfilter-headers)
          (variable-item spam-use-stat)
          (variable-item spam-use-blackholes)
          (variable-item spam-use-hashcash)
@@ -2026,6 +2030,7 @@ set."
        (const default)
        (set :tag "Use specific methods"
        (variable-item spam-use-blacklist)
+       (variable-item spam-use-gmane-xref)
        (variable-item spam-use-regex-headers)
        (variable-item spam-use-regex-body)
        (variable-item spam-use-whitelist)
@@ -2035,6 +2040,10 @@ set."
        (variable-item spam-use-stat)
        (variable-item spam-use-blackholes)
        (variable-item spam-use-hashcash)
+       (variable-item spam-use-spamassassin)
+       (variable-item spam-use-spamassassin-headers)
+       (variable-item spam-use-bsfilter)
+       (variable-item spam-use-bsfilter-headers)
        (variable-item spam-use-bogofilter-headers)
        (variable-item spam-use-bogofilter)))))
      :parameter-document
@@ -2212,8 +2221,7 @@ It is called with three parameters -- GROUP, LEVEL and OLDLEVEL."
                      summary-menu group-menu article-menu
                      tree-highlight menu highlight
                      browse-menu server-menu
-                     page-marker tree-menu binary-menu pick-menu
-                     grouplens-menu)
+                     page-marker tree-menu binary-menu pick-menu)
   "*Enable visual features.
 If `visual' is disabled, there will be no menus and few faces.  Most of
 the visual customization options below will be ignored.  Gnus will use
@@ -2227,8 +2235,7 @@ instance, to switch off all visual things except menus, you can say:
 Valid elements include `summary-highlight', `group-highlight',
 `article-highlight', `mouse-face', `summary-menu', `group-menu',
 `article-menu', `tree-highlight', `menu', `highlight', `browse-menu',
-`server-menu', `page-marker', `tree-menu', `binary-menu', `pick-menu',
-and `grouplens-menu'."
+`server-menu', `page-marker', `tree-menu', `binary-menu', and`pick-menu'."
   :group 'gnus-meta
   :group 'gnus-visual
   :type '(set (const summary-highlight)
@@ -2246,8 +2253,7 @@ and `grouplens-menu'."
              (const page-marker)
              (const tree-menu)
              (const binary-menu)
-             (const pick-menu)
-             (const grouplens-menu)))
+             (const pick-menu)))
 
 ;; Byte-compiler warning.
 (defvar gnus-visual)
@@ -2657,8 +2663,6 @@ gnus-registry.el will populate this if it's loaded.")
       gnus-summary-post-forward gnus-summary-wide-reply-with-original
       gnus-summary-post-forward)
      ("gnus-picon" :interactive t gnus-treat-from-picon)
-     ("gnus-gl" bbb-login bbb-logout bbb-grouplens-group-p
-      gnus-grouplens-mode)
      ("smiley" :interactive t smiley-region)
      ("gnus-win" gnus-configure-windows gnus-add-configuration)
      ("gnus-sum" gnus-summary-insert-line gnus-summary-read-group
@@ -2770,7 +2774,6 @@ with some simple extensions.
 %z   Article zcore (character)
 %t   Number of articles under the current thread (number).
 %e   Whether the thread is empty or not (character).
-%l   GroupLens score (string).
 %V   Total thread score (number).
 %P   The line number (number).
 %O   Download mark (character).
@@ -3219,7 +3222,7 @@ that that variable is buffer-local to the summary buffers."
 (defun gnus-generate-new-group-name (leaf)
   (let ((name leaf)
        (num 0))
-    (while (gnus-gethash name gnus-newsrc-hashtb)
+    (while (gnus-group-entry name)
       (setq name (concat leaf "<" (int-to-string (setq num (1+ num))) ">")))
     name))
 
@@ -3256,6 +3259,38 @@ that that variable is buffer-local to the summary buffers."
                                   (nth 1 method))))
       method)))
 
+(defsubst gnus-method-to-server (method)
+  (catch 'server-name
+    (setq method (or method gnus-select-method))
+
+    ;; 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)
+
+    (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))
+     (let ((alists (list gnus-server-alist
+                         gnus-predefined-server-alist)))
+       (if gnus-select-method
+           (push (list (cons "native" gnus-select-method)) alists))
+       alists))
+
+    (let* ((name (if (member (cadr method) '(nil ""))
+                     (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))
+      name)))
+
 (defsubst gnus-server-to-method (server)
   "Map virtual server names to select methods."
   (or (and server (listp server) server)
@@ -3303,38 +3338,6 @@ that that variable is buffer-local to the summary buffers."
           (push (cons server result) gnus-server-method-cache))
        result)))
 
-(defsubst gnus-method-to-server (method)
-  (catch 'server-name
-    (setq method (or method gnus-select-method))
-
-    ;; 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)
-
-    (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))
-     (let ((alists (list gnus-server-alist
-                         gnus-predefined-server-alist)))
-       (if gnus-select-method
-           (push (list (cons "native" gnus-select-method)) alists))
-       alists))
-
-    (let* ((name (if (member (cadr method) '(nil ""))
-                     (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))
-      name)))
-
 (defsubst gnus-server-get-method (group method)
   ;; Input either a server name, and extended server name, or a
   ;; select method, and return a select method.
@@ -3912,6 +3915,9 @@ If NEWSGROUP is nil, return the global kill file name instead."
       (setq valids (cdr valids)))
     outs))
 
+(eval-when-compile
+  (autoload 'message-y-or-n-p "message" nil nil 'macro))
+
 (defun gnus-read-group (prompt &optional default)
   "Prompt the user for a group name.
 Disallow invalid group names."
diff --git a/lisp/hmac-def.el b/lisp/hmac-def.el
new file mode 100644 (file)
index 0000000..264bdac
--- /dev/null
@@ -0,0 +1,85 @@
+;;; hmac-def.el --- A macro for defining HMAC functions.
+
+;; Copyright (C) 1999, 2001  Free Software Foundation, Inc.
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: HMAC, RFC 2104
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program 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.
+
+;; This program 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 this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This program is implemented from RFC 2104,
+;; "HMAC: Keyed-Hashing for Message Authentication".
+
+;;; Code:
+
+(defmacro define-hmac-function (name H B L &optional bit)
+  "Define a function NAME(TEXT KEY) which computes HMAC with function H.
+
+HMAC function is H(KEY XOR opad, H(KEY XOR ipad, TEXT)):
+
+H is a cryptographic hash function, such as SHA1 and MD5, which takes
+a string and return a digest of it (in binary form).
+B is a byte-length of a block size of H. (B=64 for both SHA1 and MD5.)
+L is a byte-length of hash outputs. (L=16 for MD5, L=20 for SHA1.)
+If BIT is non-nil, truncate output to specified bits."
+  (` (defun (, name) (text key)
+       (, (concat "Compute "
+                 (upcase (symbol-name name))
+                 " over TEXT with KEY."))
+       (let ((key-xor-ipad (make-string (, B) ?\x36))
+            (key-xor-opad (make-string (, B) ?\x5C))
+            (len (length key))
+            (pos 0))
+        (unwind-protect
+            (progn
+              ;; if `key' is longer than the block size, apply hash function
+              ;; to `key' and use the result as a real `key'.
+              (if (> len (, B))
+                  (setq key ((, H) key)
+                        len (, L)))
+              (while (< pos len)
+                (aset key-xor-ipad pos (logxor (aref key pos) ?\x36))
+                (aset key-xor-opad pos (logxor (aref key pos) ?\x5C))
+                (setq pos (1+ pos)))
+              (setq key-xor-ipad (unwind-protect
+                                     (concat key-xor-ipad text)
+                                   (fillarray key-xor-ipad 0))
+                    key-xor-ipad (unwind-protect
+                                     ((, H) key-xor-ipad)
+                                   (fillarray key-xor-ipad 0))
+                    key-xor-opad (unwind-protect
+                                     (concat key-xor-opad key-xor-ipad)
+                                   (fillarray key-xor-opad 0))
+                    key-xor-opad (unwind-protect
+                                     ((, H) key-xor-opad)
+                                   (fillarray key-xor-opad 0)))
+              ;; now `key-xor-opad' contains
+              ;; H(KEY XOR opad, H(KEY XOR ipad, TEXT)).
+              (, (if (and bit (< (/ bit 8) L))
+                     (` (substring key-xor-opad 0 (, (/ bit 8))))
+                   ;; return a copy of `key-xor-opad'.
+                   (` (concat key-xor-opad)))))
+          ;; cleanup.
+          (fillarray key-xor-ipad 0)
+          (fillarray key-xor-opad 0))))))
+
+(provide 'hmac-def)
+
+;;; hmac-def.el ends here
diff --git a/lisp/hmac-md5.el b/lisp/hmac-md5.el
new file mode 100644 (file)
index 0000000..94bdc2e
--- /dev/null
@@ -0,0 +1,84 @@
+;;; hmac-md5.el --- Compute HMAC-MD5.
+
+;; Copyright (C) 1999, 2001  Free Software Foundation, Inc.
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: HMAC, RFC 2104, HMAC-MD5, MD5, KEYED-MD5, CRAM-MD5
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program 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.
+
+;; This program 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 this program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Test cases from RFC 2202, "Test Cases for HMAC-MD5 and HMAC-SHA-1".
+;;
+;; (encode-hex-string (hmac-md5 "Hi There" (make-string 16 ?\x0b)))
+;;  => "9294727a3638bb1c13f48ef8158bfc9d"
+;;
+;; (encode-hex-string (hmac-md5 "what do ya want for nothing?" "Jefe"))
+;;  => "750c783e6ab0b503eaa86e310a5db738"
+;;
+;; (encode-hex-string (hmac-md5 (make-string 50 ?\xdd) (make-string 16 ?\xaa)))
+;;  => "56be34521d144c88dbb8c733f0e8b3f6"
+;;
+;; (encode-hex-string
+;;  (hmac-md5
+;;   (make-string 50 ?\xcd)
+;;   (decode-hex-string "0102030405060708090a0b0c0d0e0f10111213141516171819")))
+;;  => "697eaf0aca3a3aea3a75164746ffaa79"
+;;
+;; (encode-hex-string
+;;  (hmac-md5 "Test With Truncation" (make-string 16 ?\x0c)))
+;;  => "56461ef2342edc00f9bab995690efd4c"
+;;
+;; (encode-hex-string
+;;  (hmac-md5-96 "Test With Truncation" (make-string 16 ?\x0c)))
+;;  => "56461ef2342edc00f9bab995"
+;;
+;; (encode-hex-string
+;;  (hmac-md5
+;;   "Test Using Larger Than Block-Size Key - Hash Key First"
+;;   (make-string 80 ?\xaa)))
+;;  => "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd"
+;;
+;; (encode-hex-string
+;;  (hmac-md5
+;;   "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"
+;;   (make-string 80 ?\xaa)))
+;;  => "6f630fad67cda0ee1fb1f562db3aa53e"
+
+;;; Code:
+
+(eval-when-compile (require 'hmac-def))
+(require 'hex-util)                    ; (decode-hex-string STRING)
+(require 'md5)                         ; expects (md5 STRING)
+
+(defun md5-binary (string)
+  "Return the MD5 of STRING in binary form."
+  (if (condition-case nil
+         ;; `md5' of v21 takes 4th arg CODING (and 5th arg NOERROR).
+         (md5 "" nil nil 'binary)      ; => "d41d8cd98f00b204e9800998ecf8427e"
+       (wrong-number-of-arguments nil))
+      (decode-hex-string (md5 string nil nil 'binary))
+    (decode-hex-string (md5 string))))
+
+(define-hmac-function hmac-md5 md5-binary 64 16) ; => (hmac-md5 TEXT KEY)
+(define-hmac-function hmac-md5-96 md5-binary 64 16 96)
+
+(provide 'hmac-md5)
+
+;;; hmac-md5.el ends here
index 41fea4b..b5c7478 100644 (file)
@@ -1,5 +1,5 @@
 ;;; html2text.el --- a simple html to plain text converter
-;; Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Joakim Hove <hove@phys.ntnu.no>
 
@@ -42,7 +42,8 @@
 (defvar html2text-format-single-element-list '(("hr" . html2text-clean-hr)))
 
 (defvar html2text-replace-list
-  '(("&nbsp;" . " ") ("&gt;" . ">") ("&lt;" . "<") ("&quot;" . "\""))
+  '(("&nbsp;" . " ") ("&gt;" . ">") ("&lt;" . "<") ("&quot;" . "\"")
+    ("&amp;" . "&") ("&apos;" . "'"))
   "The map of entity to text.
 
 This is an alist were each element is a dotted pair consisting of an
@@ -118,9 +119,7 @@ formatting, and then moved afterward.")
 (defun html2text-buffer-head ()
   (if (string= mode-name "Article")
       (beginning-of-buffer)
-    (beginning-of-buffer)
-    )
-  )
+    (beginning-of-buffer)))
 
 (defun html2text-replace-string (from-string to-string p1 p2)
   (goto-char p1)
@@ -128,11 +127,8 @@ formatting, and then moved afterward.")
        (change 0))
     (while (search-forward from-string p2 t)
       (replace-match to-string)
-      (setq change (+ change delta))
-      )
-    change
-    )
-  )
+      (setq change (+ change delta)))
+    change))
 
 ;;
 ;; </Utility functions>
@@ -146,108 +142,26 @@ formatting, and then moved afterward.")
 ;;
 
 (defun html2text-attr-value (attr-list attr)
-  (nth 1 (assoc attr attr-list))
-  )
-
-(defun html2text-get-attr (p1 p2 tag)
-  (goto-char p1)
-  (re-search-forward " +[^ ]" p2 t)
-  (let* ((attr-string (buffer-substring-no-properties (1- (point)) (1- p2)))
-        (tmp-list (split-string attr-string))
-        (attr-list)
-        (counter 0)
-        (prev (car tmp-list))
-        (this (nth 1 tmp-list))
-        (next (nth 2 tmp-list))
-        (index 1))
-
-    (cond
-     ;; size=3
-     ((string-match "[^ ]=[^ ]" prev)
-      (let ((attr  (nth 0 (split-string prev "=")))
-           (value (nth 1 (split-string prev "="))))
-       (setq attr-list (cons (list attr value) attr-list))
-       )
-      )
-     ;; size= 3
-     ((string-match "[^ ]=\\'" prev)
-      (setq attr-list (cons (list (substring prev 0 -1) this) attr-list))
-      )
-     )
-
-    (while (< index (length tmp-list))
-      (cond
-       ;; size=3
-       ((string-match "[^ ]=[^ ]" this)
-       (let ((attr  (nth 0 (split-string this "=")))
-             (value (nth 1 (split-string this "="))))
-         (setq attr-list (cons (list attr value) attr-list))
-         )
-       )
-       ;; size =3
-       ((string-match "\\`=[^ ]" this)
-       (setq attr-list (cons (list prev (substring this 1)) attr-list)))
-
-       ;; size= 3
-       ((string-match "[^ ]=\\'" this)
-       (setq attr-list (cons (list (substring this 0 -1) next) attr-list))
-       )
-
-       ;; size = 3
-       ((string= "=" this)
-       (setq attr-list (cons (list prev next) attr-list))
-       )
-       )
-      (setq index (1+ index))
-      (setq prev this)
-      (setq this next)
-      (setq next (nth (1+ index) tmp-list))
-      )
-
-    ;;
-    ;; Tags with no accompanying "=" i.e. value=nil
-    ;;
-    (setq prev (car tmp-list))
-    (setq this (nth 1 tmp-list))
-    (setq next (nth 2 tmp-list))
-    (setq index 1)
-
-    (if (not (string-match "=" prev))
-       (progn
-         (if (not (string= (substring this 0 1) "="))
-             (setq attr-list (cons (list prev nil) attr-list))
-           )
-         )
-      )
-
-    (while (< index (1- (length tmp-list)))
-      (if (not (string-match "=" this))
-         (if (not (or (string= (substring next 0 1) "=")
-                      (string= (substring prev -1) "=")))
-             (setq attr-list (cons (list this nil) attr-list))
-           )
-       )
-      (setq index (1+ index))
-      (setq prev this)
-      (setq this next)
-      (setq next (nth (1+ index) tmp-list))
-      )
-
-    (if this
-       (progn
-         (if (not (string-match "=" this))
-             (progn
-               (if (not (string= (substring prev -1) "="))
-                   (setq attr-list (cons (list this nil) attr-list))
-                 )
-               )
-           )
-         )
-      )
-    attr-list ;; return - value
-    )
-  )
-
+  (nth 1 (assoc attr attr-list)))
+
+(defun html2text-get-attr (p1 p2)
+  (save-restriction
+    (narrow-to-region p1 p2)
+    (let (result)
+      (goto-char (point-min))
+      (while (not (eobp))
+       (when (re-search-forward "[^= ]+" nil t)
+         (push
+          (list
+           (match-string 0)
+           (when (looking-at " *= *")
+             (goto-char (match-end 0))
+             (buffer-substring 
+              (point)
+              (goto-char (or (ignore-errors (scan-sexps (point) 1))
+                             (point-max))))))
+          result)))
+      result)))
 ;;
 ;; </Functions related to attributes>
 ;;
@@ -271,10 +185,7 @@ formatting, and then moved afterward.")
       (cond
        ((string= list-type "ul") (insert " o "))
        ((string= list-type "ol") (insert (format " %s: " item-nr)))
-       (t (insert " x ")))
-      )
-    )
-  )
+       (t (insert " x "))))))
 
 (defun html2text-clean-dtdd (p1 p2)
   (goto-char p1)
@@ -313,62 +224,50 @@ formatting, and then moved afterward.")
   (html2text-delete-single-tag p1 p2)
   (goto-char p1)
   (newline 1)
-  (insert (make-string fill-column ?-))
-  )
+  (insert (make-string fill-column ?-)))
 
 (defun html2text-clean-ul (p1 p2 p3 p4)
   (html2text-delete-tags p1 p2 p3 p4)
-  (html2text-clean-list-items p1 (- p3 (- p1 p2)) "ul")
-  )
+  (html2text-clean-list-items p1 (- p3 (- p1 p2)) "ul"))
 
 (defun html2text-clean-ol (p1 p2 p3 p4)
   (html2text-delete-tags p1 p2 p3 p4)
-  (html2text-clean-list-items p1 (- p3 (- p1 p2)) "ol")
-  )
+  (html2text-clean-list-items p1 (- p3 (- p1 p2)) "ol"))
 
 (defun html2text-clean-dl (p1 p2 p3 p4)
   (html2text-delete-tags p1 p2 p3 p4)
-  (html2text-clean-dtdd p1 (- p3 (- p1 p2)))
-  )
+  (html2text-clean-dtdd p1 (- p3 (- p1 p2))))
 
 (defun html2text-clean-center (p1 p2 p3 p4)
   (html2text-delete-tags p1 p2 p3 p4)
-  (center-region p1 (- p3 (- p2 p1)))
-  )
+  (center-region p1 (- p3 (- p2 p1))))
 
 (defun html2text-clean-bold (p1 p2 p3 p4)
   (put-text-property p2 p3 'face 'bold)
-  (html2text-delete-tags p1 p2 p3 p4)
-  )
+  (html2text-delete-tags p1 p2 p3 p4))
 
 (defun html2text-clean-title (p1 p2 p3 p4)
   (put-text-property p2 p3 'face 'bold)
-  (html2text-delete-tags p1 p2 p3 p4)
-  )
+  (html2text-delete-tags p1 p2 p3 p4))
 
 (defun html2text-clean-underline (p1 p2 p3 p4)
   (put-text-property p2 p3 'face 'underline)
-  (html2text-delete-tags p1 p2 p3 p4)
-  )
+  (html2text-delete-tags p1 p2 p3 p4))
 
 (defun html2text-clean-italic (p1 p2 p3 p4)
   (put-text-property p2 p3 'face 'italic)
-  (html2text-delete-tags p1 p2 p3 p4)
-  )
+  (html2text-delete-tags p1 p2 p3 p4))
 
 (defun html2text-clean-font (p1 p2 p3 p4)
-  (html2text-delete-tags p1 p2 p3 p4)
-  )
+  (html2text-delete-tags p1 p2 p3 p4))
 
 (defun html2text-clean-blockquote (p1 p2 p3 p4)
-  (html2text-delete-tags p1 p2 p3 p4)
-  )
+  (html2text-delete-tags p1 p2 p3 p4))
 
 (defun html2text-clean-anchor (p1 p2 p3 p4)
   ;; If someone can explain how to make the URL clickable I will
   ;; surely improve upon this.
-  (let* ((attr-list (html2text-get-attr p1 p2 "a"))
-        (href (html2text-attr-value attr-list "href")))
+  (let ((href (html2text-attr-value (html2text-get-attr p1 p2) "href")))
     (delete-region p1 p4)
     (when href
       (goto-char p1)
@@ -391,38 +290,29 @@ formatting, and then moved afterward.")
   (let ((has-br-line)
        (refill-start)
        (refill-stop))
-    (if (re-search-forward "<br>$" p2 t)
-       (setq has-br-line t)
-      )
-    (if has-br-line
-       (progn
-         (goto-char p1)
-         (if (re-search-forward ".+[^<][^b][^r][^>]$" p2 t)
-             (progn
-               (beginning-of-line)
-               (setq refill-start (point))
-               (goto-char p2)
-               (re-search-backward ".+[^<][^b][^r][^>]$" refill-start t)
-               (next-line 1)
-               (end-of-line)
-               ;; refill-stop should ideally be adjusted to
-               ;; accomodate the "<br>" strings which are removed
-               ;; between refill-start and refill-stop.  Can simply
-               ;; be returned from my-replace-string
-               (setq refill-stop (+ (point)
-                                    (html2text-replace-string
-                                     "<br>" ""
-                                     refill-start (point))))
-               ;; (message "Point = %s  refill-stop = %s" (point) refill-stop)
-               ;; (sleep-for 4)
-               (fill-region refill-start refill-stop)
-               )
-           )
-         )
-      )
-    )
-  (html2text-replace-string "<br>" "" p1 p2)
-  )
+    (when (re-search-forward "<br>$" p2 t)
+      (setq has-br-line t))
+    (when has-br-line
+       (goto-char p1)
+       (when (re-search-forward ".+[^<][^b][^r][^>]$" p2 t)
+         (beginning-of-line)
+         (setq refill-start (point))
+         (goto-char p2)
+         (re-search-backward ".+[^<][^b][^r][^>]$" refill-start t)
+         (next-line 1)
+         (end-of-line)
+         ;; refill-stop should ideally be adjusted to
+         ;; accomodate the "<br>" strings which are removed
+         ;; between refill-start and refill-stop.  Can simply
+         ;; be returned from my-replace-string
+         (setq refill-stop (+ (point)
+                              (html2text-replace-string
+                               "<br>" ""
+                               refill-start (point))))
+         ;; (message "Point = %s  refill-stop = %s" (point) refill-stop)
+         ;; (sleep-for 4)
+         (fill-region refill-start refill-stop))))
+  (html2text-replace-string "<br>" "" p1 p2))
 
 ;;
 ;; This one is interactive ...
@@ -462,7 +352,7 @@ See the documentation for that variable."
   (interactive)
   (dolist (tag tag-list)
     (html2text-buffer-head)
-    (while (re-search-forward (format "\\(</?%s[^>]*>\\)" tag) (point-max) t)
+    (while (re-search-forward (format "</?%s[^>]*>" tag) (point-max) t)
       (delete-region (match-beginning 0) (match-end 0)))))
 
 (defun html2text-format-tags ()
@@ -472,12 +362,12 @@ See the documentation for that variable."
     (let ((tag      (car tag-and-function))
          (function (cdr tag-and-function)))
       (html2text-buffer-head)
-      (while (re-search-forward (format "\\(<%s\\( [^>]*\\)?>\\)" tag)
+      (while (re-search-forward (format "<%s\\( [^>]*\\)?>" tag)
                                (point-max) t)
        (let ((p1)
              (p2 (point))
              (p3) (p4)
-             (attr (match-string 1)))
+             (attr (match-string 0)))
          (search-backward "<" (point-min) t)
          (setq p1 (point))
          (re-search-forward (format "</%s>" tag) (point-max) t)
@@ -486,11 +376,7 @@ See the documentation for that variable."
          (setq p3 (point))
          (funcall function p1 p2 p3 p4)
          (goto-char p1)
-         )
-       )
-      )
-    )
-  )
+         )))))
 
 (defun html2text-substitute ()
   "See the variable \"html2text-replace-list\" for documentation"
@@ -499,10 +385,8 @@ See the documentation for that variable."
     (html2text-buffer-head)
     (let ((old-string (car e))
          (new-string (cdr e)))
-      (html2text-replace-string old-string new-string (point-min) (point-max))
-      )
-    )
-  )
+      (html2text-replace-string old-string new-string (point-min) (point-max)))
+    ))
 
 (defun html2text-format-single-elements ()
   ""
@@ -511,18 +395,13 @@ See the documentation for that variable."
     (let ((tag      (car tag-and-function))
          (function (cdr tag-and-function)))
       (html2text-buffer-head)
-      (while (re-search-forward (format "\\(<%s\\( [^>]*\\)?>\\)" tag)
+      (while (re-search-forward (format "<%s\\( [^>]*\\)?>" tag)
                                (point-max) t)
        (let ((p1)
              (p2 (point)))
          (search-backward "<" (point-min) t)
          (setq p1 (point))
-         (funcall function p1 p2)
-         )
-       )
-      )
-    )
-  )
+         (funcall function p1 p2))))))
 
 ;;
 ;; Main function
index c546316..eec283b 100644 (file)
@@ -88,14 +88,14 @@ backslash and doublequote.")
          (push c out)))
        (range
        (while (<= b c)
-         (push (mm-make-char 'ascii b) out)
+         (push (make-char 'ascii b) out)
          (incf b))
        (setq range nil))
        ((= i (length token))
-       (push (mm-make-char 'ascii c) out))
+       (push (make-char 'ascii c) out))
        (t
        (when b
-         (push (mm-make-char 'ascii b) out))
+         (push (make-char 'ascii b) out))
        (setq b c))))
     (nreverse out)))
 
index 3ff0ffb..cca272a 100644 (file)
@@ -1,5 +1,5 @@
 ;;; imap.el --- imap library
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <jas@pdc.kth.se>
 ;; explanatory for someone that know IMAP.  All functions have
 ;; additional documentation on how to invoke them.
 ;;
-;; imap.el support RFC1730/2060 (IMAP4/IMAP4rev1), implemented IMAP
-;; extensions are RFC2195 (CRAM-MD5), RFC2086 (ACL), RFC2342
+;; imap.el support RFC1730/2060/RFC3501 (IMAP4/IMAP4rev1), implemented
+;; IMAP extensions are RFC2195 (CRAM-MD5), RFC2086 (ACL), RFC2342
 ;; (NAMESPACE), RFC2359 (UIDPLUS), the IMAP-part of RFC2595 (STARTTLS,
 ;; 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').  It also take advantage
-;; the UNSELECT extension in Cyrus IMAPD.
+;; 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.
 ;;
 ;; Without the work of John McClary Prevost and Jim Radford this library
 ;; would not have seen the light of day.  Many thanks.
 
 (eval-when-compile (require 'cl))
 (eval-and-compile
-  (autoload 'base64-decode-string "base64")
-  (autoload 'base64-encode-string "base64")
   (autoload 'starttls-open-stream "starttls")
   (autoload 'starttls-negotiate "starttls")
   (autoload 'digest-md5-parse-digest-challenge "digest-md5")
   (autoload 'digest-md5-digest-uri "digest-md5")
   (autoload 'digest-md5-challenge "digest-md5")
   (autoload 'rfc2104-hash "rfc2104")
-  (autoload 'md5 "md5")
   (autoload 'utf7-encode "utf7")
   (autoload 'utf7-decode "utf7")
   (autoload 'format-spec "format-spec")
   (autoload 'format-spec-make "format-spec")
-  (autoload 'open-tls-stream "tls")
-  ;; Avoid use gnus-point-at-eol so we're independent of Gnus.  These
-  ;; days we have point-at-eol anyhow.
-  (if (fboundp 'point-at-eol)
-      (defalias 'imap-point-at-eol 'point-at-eol)
-    (defun imap-point-at-eol ()
-      (save-excursion
-       (end-of-line)
-       (point)))))
+  (autoload 'open-tls-stream "tls"))
 
 ;; User variables.
 
@@ -269,6 +258,11 @@ Shorter values mean quicker response, but is more CPU intensive."
   :type 'number
   :group 'imap)
 
+(defcustom imap-store-password nil
+  "If non-nil, store session password without promting."
+  :group 'imap
+  :type 'boolean)
+
 ;; Various variables.
 
 (defvar imap-fetch-data-hook nil
@@ -339,6 +333,7 @@ for doing the actual authentication.")
                                 imap-current-target-mailbox
                                 imap-message-data
                                 imap-capability
+                                imap-id
                                 imap-namespace
                                 imap-state
                                 imap-reached-tag
@@ -394,6 +389,10 @@ and `examine'.")
 (defvar imap-capability nil
   "Capability for server.")
 
+(defvar imap-id nil
+  "Identity of server.
+See RFC 2971.")
+
 (defvar imap-namespace nil
   "Namespace for current server.")
 
@@ -826,9 +825,10 @@ Returns t if login was successful, nil otherwise."
              (progn
                (setq ret t
                      imap-username user)
-               (if (and (not imap-password)
-                        (y-or-n-p "Store password for this session? "))
-                   (setq imap-password passwd)))
+               (when (and (not imap-password)
+                          (or imap-store-password
+                              (y-or-n-p "Store password for this session? ")))
+                 (setq imap-password passwd)))
            (message "Login failed...")
            (setq passwd nil)
            (setq imap-password nil)
@@ -1108,6 +1108,26 @@ If BUFFER is nil, the current buffer is assumed."
        (memq (intern (upcase (symbol-name identifier))) imap-capability)
       imap-capability)))
 
+(defun imap-id (&optional list-of-values buffer)
+  "Identify client to server in BUFFER, and return server identity.
+LIST-OF-VALUES is nil, or a plist with identifier and value
+strings to send to the server to identify the client.
+
+Return a list of identifiers which server in BUFFER support, or
+nil if it doesn't support ID or returns no information.
+
+If BUFFER is nil, the current buffer is assumed."
+  (with-current-buffer (or buffer (current-buffer))
+    (when (and (imap-capability 'ID)
+              (imap-ok-p (imap-send-command-wait
+                          (if (null list-of-values)
+                              "ID NIL"
+                            (concat "ID (" (mapconcat (lambda (el)
+                                                        (concat "\"" el "\""))
+                                                      list-of-values
+                                                      " ") ")")))))
+      imap-id)))
+
 (defun imap-namespace (&optional buffer)
   "Return a namespace hierarchy at server in BUFFER.
 If BUFFER is nil, the current buffer is assumed."
@@ -2071,6 +2091,8 @@ Return nil if no complete line has arrived."
                               (read (concat "(" (upcase (buffer-substring
                                                          (point) (point-max)))
                                             ")"))))
+          (ID         (setq imap-id (read (buffer-substring (point)
+                                                            (point-max)))))
           (ACL        (imap-parse-acl))
           (t       (case (prog1 (read (current-buffer))
                            (imap-forward))
@@ -2418,16 +2440,16 @@ Return nil if no complete line has arrived."
 
 (defun imap-parse-flag-list ()
   (let (flag-list start)
-    (assert (eq (char-after) ?\() t "In imap-parse-flag-list")
+    (assert (eq (char-after) ?\() nil "In imap-parse-flag-list")
     (while (and (not (eq (char-after) ?\)))
                (setq start (progn
                              (imap-forward)
                              ;; next line for Courier IMAP bug.
                              (skip-chars-forward " ")
                              (point)))
-               (> (skip-chars-forward "^ )" (imap-point-at-eol)) 0))
+               (> (skip-chars-forward "^ )" (point-at-eol)) 0))
       (push (buffer-substring start (point)) flag-list))
-    (assert (eq (char-after) ?\)) t "In imap-parse-flag-list")
+    (assert (eq (char-after) ?\)) nil "In imap-parse-flag-list")
     (imap-forward)
     (nreverse flag-list)))
 
@@ -2512,7 +2534,7 @@ Return nil if no complete line has arrived."
        (while (eq (char-after) ?\ )
          (imap-forward)
          (push (imap-parse-body-extension) b-e))
-       (assert (eq (char-after) ?\)) t "In imap-parse-body-extension")
+       (assert (eq (char-after) ?\)) nil "In imap-parse-body-extension")
        (imap-forward)
        (nreverse b-e))
     (or (imap-parse-number)
@@ -2636,7 +2658,7 @@ Return nil if no complete line has arrived."
                (push (and (imap-parse-nil) nil) body))
              (setq body
                    (append (imap-parse-body-ext) body))) ;; body-ext-...
-           (assert (eq (char-after) ?\)) t "In imap-parse-body")
+           (assert (eq (char-after) ?\)) nil "In imap-parse-body")
            (imap-forward)
            (nreverse body))
 
@@ -2696,7 +2718,7 @@ Return nil if no complete line has arrived."
          (push (imap-parse-nstring) body) ;; body-fld-md5
          (setq body (append (imap-parse-body-ext) body))) ;; body-ext-1part..
 
-       (assert (eq (char-after) ?\)) t "In imap-parse-body 2")
+       (assert (eq (char-after) ?\)) nil "In imap-parse-body 2")
        (imap-forward)
        (nreverse body)))))
 
diff --git a/lisp/legacy-gnus-agent.el b/lisp/legacy-gnus-agent.el
new file mode 100644 (file)
index 0000000..7127dbd
--- /dev/null
@@ -0,0 +1,213 @@
+(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.
+
+(defun gnus-agent-convert-to-compressed-agentview (converting-to)
+  "Iterates over all agentview files to ensure that they have been
+converted to the compressed format."
+
+  (let ((search-in (list gnus-agent-directory))
+        here
+        members
+        member
+        converted-something)
+    (while (setq here (pop search-in))
+      (setq members (directory-files here t))
+      (while (setq member (pop members))
+        (cond ((string-match "/\\.\\.?$" member)
+              nil)
+             ((file-directory-p member)
+              (push member search-in))
+              ((equal (file-name-nondirectory member) ".agentview")
+               (setq converted-something 
+                     (or (gnus-agent-convert-agentview member)
+                         converted-something))))))
+
+    (if converted-something
+        (gnus-message 4 "Successfully converted Gnus %s offline (agent) files to %s" gnus-newsrc-file-version converting-to))))
+
+(defun gnus-agent-convert-agentview (file)
+  "Load FILE and do a `read' there."
+  (with-temp-buffer
+      (nnheader-insert-file-contents file)
+      (goto-char (point-min))
+      (let ((inhibit-quit t)
+            (alist (read (current-buffer)))
+            (version (condition-case nil (read (current-buffer))
+                       (end-of-file 0)))
+            changed-version
+            history-file)
+
+        (cond
+        ((= version 0)
+         (let (entry
+                (gnus-command-method nil))
+            (mm-disable-multibyte) ;; everything is binary
+            (erase-buffer)
+            (insert "\n")
+            (let ((file (concat (file-name-directory file) "/history")))
+              (when (file-exists-p file)
+                (nnheader-insert-file-contents file)
+                (setq history-file file)))
+
+           (goto-char (point-min))
+           (while (not (eobp))
+             (if (and (looking-at
+                       "[^\t\n]+\t\\([0-9]+\\)\t\\([^ \n]+\\) \\([0-9]+\\)")
+                      (string= (gnus-agent-article-name ".agentview" (match-string 2))
+                               file)
+                      (setq entry (assoc (string-to-number (match-string 3)) alist)))
+                 (setcdr entry (string-to-number (match-string 1))))
+             (forward-line 1))
+           (setq changed-version t)))
+        ((= version 1)
+         (setq changed-version t)))
+
+        (when changed-version
+          (erase-buffer)
+          (let ((compressed nil))
+            (mapcar (lambda (pair)
+                      (let* ((article-id (car pair))
+                             (day-of-download (cdr pair))
+                             (comp-list (assq day-of-download compressed)))
+                        (if comp-list
+                            (setcdr comp-list
+                                    (cons article-id (cdr comp-list)))
+                          (setq compressed
+                                (cons (list day-of-download article-id)
+                                      compressed)))
+                        nil)) alist)
+            (mapcar (lambda (comp-list)
+                      (setcdr comp-list
+                              (gnus-compress-sequence
+                               (nreverse (cdr comp-list)))))
+                    compressed)
+            (princ compressed (current-buffer)))
+          (insert "\n2\n")
+          (write-file file)
+          (when history-file
+            (delete-file history-file))
+          t))))
+
+;; End of Oort Gnus v0.08 updates
+
+;; No Gnus v0.3 - This release provides a mechanism for upgrading gnus
+;;                from previous versions.  Therefore, the previous
+;;                hacks to handle a gnus-agent-expire-days that
+;;                specifies a list of values can be removed.
+
+(defun gnus-agent-unlist-expire-days (converting-to)
+  (when (listp gnus-agent-expire-days)
+    (let (buffer)
+      (unwind-protect
+          (save-window-excursion
+            (setq buffer (gnus-get-buffer-create " *Gnus agent upgrade*"))
+            (set-buffer buffer)
+            (erase-buffer)
+            (insert "The definition of gnus-agent-expire-days has been changed.\nYou currently have it set to the list:\n  ")
+            (let (print-level print-length) (pp gnus-agent-expire-days (current-buffer)))
+
+            (insert "\nIn order to use version '" converting-to "' of gnus, you will need to set\n")
+            (insert "gnus-agent-expire-days to an integer. If you still wish to set different\n")
+            (insert "expiration days to individual groups, you must instead set the\n")
+            (insert "'agent-days-until-old group and/or topic parameter.\n")
+            (insert "\n")
+            (insert "If you would like, gnus can iterate over every group comparing its name to the\n")
+            (insert "regular expressions that you currently have in gnus-agent-expire-days.  When\n")
+            (insert "gnus finds a match, it will update that group's 'agent-days-until-old group\n")
+            (insert "parameter to the value associated with the regular expression.\n")
+            (insert "\n")
+            (insert "Whether gnus assigns group parameters, or not, gnus will terminate with an\n")
+            (insert "ERROR as soon as this function completes.  The reason is that you must\n")
+            (insert "manually edit your configuration to either not set gnus-agent-expire-days or\n")
+            (insert "to set it to an integer before gnus can be used.\n")
+            (insert "\n")
+            (insert "Once you have successfully edited gnus-agent-expire-days, gnus will be able to\n")
+            (insert "execute past this function.\n")
+            (insert "\n")
+            (insert "Should gnus use gnus-agent-expire-days to assign\n")
+            (insert "agent-days-until-old parameters to individual groups? (Y/N)")
+
+            (switch-to-buffer buffer)
+            (beep)
+            (beep)
+
+            (let ((echo-keystrokes 0)
+                  c)
+              (while (progn (setq c (read-char-exclusive))
+                            (cond ((or (eq c ?y) (eq c ?Y))
+                                         (save-excursion
+                                           (let ((groups (gnus-group-listed-groups)))
+                                             (while groups
+                                               (let* ((group (pop groups))
+                                                      (days gnus-agent-expire-days)
+                                                      (day (catch 'found
+                                                             (while days
+                                                               (when (eq 0 (string-match
+                                                                            (caar days)
+                                                                            group))
+                                                                 (throw 'found (cadar days)))
+                                                               (setq days (cdr days)))
+                                                             nil)))
+                                                 (when day
+                                                   (gnus-group-set-parameter group 'agent-days-until-old
+                                                                             day))))))
+                                   nil
+                                   )
+                                  ((or (eq c ?n) (eq c ?N))
+                                   nil)
+                                  (t
+                                   t))))))
+        (kill-buffer buffer))
+      (error "Change gnus-agent-expire-days to an integer for gnus to start."))))
+
+;; The gnus-agent-unlist-expire-days has its own conversion prompt.
+;; Therefore, hide the default prompt.
+(gnus-convert-mark-converter-prompt 'gnus-agent-unlist-expire-days t)
+
+(defun gnus-agent-unhook-expire-days (converting-to)
+  "Remove every lambda from gnus-group-prepare-hook that mention the
+symbol gnus-agent-do-once in their definition.  This should NOT be
+necessary as gnus-agent.el no longer adds them.  However, it is
+possible that the hook was persistently saved."
+    (let ((h t)) ; iterate from bgn of hook
+      (while h
+        (let ((func (progn (when (eq h t)
+                             ;; init h to list of functions
+                             (setq h (cond ((listp gnus-group-prepare-hook)
+                                            gnus-group-prepare-hook)
+                                           ((boundp 'gnus-group-prepare-hook)
+                                            (list gnus-group-prepare-hook)))))
+                           (pop h))))
+
+          (when (cond ((eq (type-of func) 'compiled-function)
+                       ;; Search def. of compiled function for gnus-agent-do-once string
+                       (let* (definition 
+                               print-level 
+                               print-length
+                               (standard-output
+                                (lambda (char)
+                                  (setq definition (cons char definition)))))
+                         (princ func) ; populates definition with reversed list of characters
+                         (let* ((i (length definition))
+                                (s (make-string i 0)))
+                           (while definition
+                             (aset s (setq i (1- i)) (pop definition)))
+
+                           (string-match "\\bgnus-agent-do-once\\b" s))))
+                      ((listp func)
+                       (eq (cadr (nth 2 func)) 'gnus-agent-do-once) ; handles eval'd lambda
+                       ))
+
+            (remove-hook 'gnus-group-prepare-hook func)
+            ;; I don't what remove-hook is going to actually do to the
+            ;; hook list so start over from the beginning.
+            (setq h t))))))
+
+;; gnus-agent-unhook-expire-days is safe in that it does not modify
+;; the .newsrc.eld file.
+(gnus-convert-mark-converter-prompt 'gnus-agent-unhook-expire-days t)
index 996d4e3..6851604 100644 (file)
               url-generic-parse-url url-http-file-exists-p
               url-insert-file-contents vcard-pretty-print w32-focus-frame
               w3m-charset-to-coding-system w3m-region x-focus-frame))
-(maybe-bind '(filladapt-mode
-             mc-pgp-always-sign rmail-insert-mime-forwarded-message-function
-             url-current-object url-package-name url-package-version
+(maybe-bind '(eudc-protocol
+             filladapt-mode mc-pgp-always-sign
+             rmail-insert-mime-forwarded-message-function url-current-object
+             url-package-name url-package-version
              w3-meta-charset-content-type-regexp
              w3-meta-content-type-charset-regexp
              w3m-cid-retrieve-function-alist w3m-current-buffer
@@ -33,8 +34,8 @@
 (if (featurep 'xemacs)
     (progn
       (maybe-fbind '(delete-overlay
-                    event-click-count event-end event-start
-                    find-coding-systems-for-charsets
+                    detect-coding-string 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
index 523efba..39a202c 100644 (file)
@@ -33,8 +33,7 @@
 (eval-and-compile
   (autoload 'pop3-movemail "pop3")
   (autoload 'pop3-get-message-count "pop3")
-  (autoload 'nnheader-cancel-timer "nnheader")
-  (autoload 'nnheader-run-at-time "nnheader"))
+  (autoload 'nnheader-cancel-timer "nnheader"))
 (require 'format-spec)
 (require 'mm-util)
 (require 'message) ;; for `message-directory'
@@ -826,12 +825,13 @@ Pass INFO on to CALLBACK."
   "Open and close a POP connection shortly.
 POP server should be defined in `mail-source-primary-source' (which is
 preferred) or `mail-sources'.  You may use it for the POP-before-SMTP
-authentication.  To do that, you need to set the option
-`message-send-mail-function' to `message-smtpmail-send-it' and put the
-following line in .gnus file:
+authentication.  To do that, you need to set the
+`message-send-mail-function' variable as `message-smtpmail-send-it'
+and put the following line in your ~/.gnus.el file:
 
 \(add-hook 'message-send-mail-hook 'mail-source-touch-pop)
-"
+
+See the Gnus manual for details."
   (let ((sources (if mail-source-primary-source
                     (list mail-source-primary-source)
                   mail-sources)))
@@ -901,7 +901,7 @@ This only works when `display-time' is enabled."
          (setq display-time-mail-function #'mail-source-new-mail-p)
          ;; Set up the main timer.
          (setq mail-source-report-new-mail-timer
-               (nnheader-run-at-time
+               (run-at-time
                 (* 60 mail-source-report-new-mail-interval)
                 (* 60 mail-source-report-new-mail-interval)
                 #'mail-source-start-idle-timer))
diff --git a/lisp/md4.el b/lisp/md4.el
new file mode 100644 (file)
index 0000000..05e4f87
--- /dev/null
@@ -0,0 +1,228 @@
+;;; md4.el --- MD4 Message Digest Algorithm.
+
+;; Copyright (C) 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2001 Taro Kawagishi
+;; Author: Taro Kawagishi <tarok@transpulse.org>
+;; Keywords: MD4
+;; Version: 1.00
+;; Created: February 2001
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program 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.
+;;
+;; This program 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 this program; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Code:
+
+;;;
+;;; MD4 hash calculation
+
+(defvar md4-buffer (make-vector 4 '(0 . 0))
+  "work buffer of four 32-bit integers")
+
+(defun md4 (in n)
+  "Returns the MD4 hash string of 16 bytes long for a string IN of N
+bytes long.  N is required to handle strings containing character 0."
+  (let (m
+       (b (cons 0 (* n 8)))
+       (i 0)
+       (buf (make-string 128 0)) c4)
+    ;; initial values
+    (aset md4-buffer 0 '(26437 . 8961))                ;0x67452301
+    (aset md4-buffer 1 '(61389 . 43913))       ;0xefcdab89
+    (aset md4-buffer 2 '(39098 . 56574))       ;0x98badcfe
+    (aset md4-buffer 3 '(4146 . 21622))                ;0x10325476
+
+    ;; process the string in 64 bits chunks
+    (while (> n 64)
+      (setq m (md4-copy64 (substring in 0 64)))
+      (md4-64 m)
+      (setq in (substring in 64))
+      (setq n (- n 64)))
+
+    ;; process the rest of the string (length is now n <= 64)
+    (setq i 0)
+    (while (< i n)
+      (aset buf i (aref in i))
+      (setq i (1+ i)))
+    (aset buf n 128)                   ;0x80
+    (if (<= n 55)
+       (progn
+         (setq c4 (md4-pack-int32 b))
+         (aset buf 56 (aref c4 0))
+         (aset buf 57 (aref c4 1))
+         (aset buf 58 (aref c4 2))
+         (aset buf 59 (aref c4 3))
+         (setq m (md4-copy64 buf))
+         (md4-64 m))
+      ;; else
+      (setq c4 (md4-pack-int32 b))
+      (aset buf 120 (aref c4 0))
+      (aset buf 121 (aref c4 1))
+      (aset buf 122 (aref c4 2))
+      (aset buf 123 (aref c4 3))
+      (setq m (md4-copy64 buf))
+      (md4-64 m)
+      (setq m (md4-copy64 (substring buf 64)))
+      (md4-64 m)))
+
+    (concat (md4-pack-int32 (aref md4-buffer 0))
+           (md4-pack-int32 (aref md4-buffer 1))
+           (md4-pack-int32 (aref md4-buffer 2))
+           (md4-pack-int32 (aref md4-buffer 3))))
+
+(defsubst md4-F (x y z) (logior (logand x y) (logand (lognot x) z)))
+(defsubst md4-G (x y z) (logior (logand x y) (logand x z) (logand y z)))
+(defsubst md4-H (x y z) (logxor x y z))
+
+(defmacro md4-make-step (name func)
+  (`
+   (defun (, name) (a b c d xk s ac)
+     (let*
+         ((h1 (+ (car a) ((, func) (car b) (car c) (car d)) (car xk) (car ac)))
+          (l1 (+ (cdr a) ((, func) (cdr b) (cdr c) (cdr d)) (cdr xk) (cdr ac)))
+          (h2 (logand 65535 (+ h1 (lsh l1 -16))))
+          (l2 (logand 65535 l1))
+         ;; cyclic shift of 32 bits integer
+          (h3 (logand 65535 (if (> s 15)
+                                (+ (lsh h2 (- s 32)) (lsh l2 (- s 16)))
+                              (+ (lsh h2 s) (lsh l2 (- s 16))))))
+          (l3 (logand 65535 (if (> s 15)
+                                (+ (lsh l2 (- s 32)) (lsh h2 (- s 16)))
+                              (+ (lsh l2 s) (lsh h2 (- s 16)))))))
+       (cons h3 l3)))))
+
+(md4-make-step md4-round1 md4-F)
+(md4-make-step md4-round2 md4-G)
+(md4-make-step md4-round3 md4-H)
+
+(defsubst md4-add (x y)
+  "Return 32-bit sum of 32-bit integers X and Y."
+  (let ((h (+ (car x) (car y)))
+       (l (+ (cdr x) (cdr y))))
+    (cons (logand 65535 (+ h (lsh l -16))) (logand 65535 l))))
+
+(defsubst md4-and (x y)
+  (cons (logand (car x) (car y)) (logand (cdr x) (cdr y))))
+
+(defun md4-64 (m)
+  "Calculate md4 of 64 bytes chunk M which is represented as 16 pairs of
+32 bits integers.  The resulting md4 value is placed in md4-buffer."
+  (let ((a (aref md4-buffer 0))
+       (b (aref md4-buffer 1))
+       (c (aref md4-buffer 2))
+       (d (aref md4-buffer 3)))
+    (setq a (md4-round1 a b c d (aref m  0)   3 '(0 . 0))
+         d (md4-round1 d a b c (aref m  1)   7 '(0 . 0))
+         c (md4-round1 c d a b (aref m  2)  11 '(0 . 0))
+         b (md4-round1 b c d a (aref m  3)  19 '(0 . 0))
+         a (md4-round1 a b c d (aref m  4)   3 '(0 . 0))
+         d (md4-round1 d a b c (aref m  5)   7 '(0 . 0))
+         c (md4-round1 c d a b (aref m  6)  11 '(0 . 0))
+         b (md4-round1 b c d a (aref m  7)  19 '(0 . 0))
+         a (md4-round1 a b c d (aref m  8)   3 '(0 . 0))
+         d (md4-round1 d a b c (aref m  9)   7 '(0 . 0))
+         c (md4-round1 c d a b (aref m 10)  11 '(0 . 0))
+         b (md4-round1 b c d a (aref m 11)  19 '(0 . 0))
+         a (md4-round1 a b c d (aref m 12)   3 '(0 . 0))
+         d (md4-round1 d a b c (aref m 13)   7 '(0 . 0))
+         c (md4-round1 c d a b (aref m 14)  11 '(0 . 0))
+         b (md4-round1 b c d a (aref m 15)  19 '(0 . 0))
+
+         a (md4-round2 a b c d (aref m  0)   3 '(23170 . 31129)) ;0x5A827999
+         d (md4-round2 d a b c (aref m  4)   5 '(23170 . 31129))
+         c (md4-round2 c d a b (aref m  8)   9 '(23170 . 31129))
+         b (md4-round2 b c d a (aref m 12)  13 '(23170 . 31129))
+         a (md4-round2 a b c d (aref m  1)   3 '(23170 . 31129))
+         d (md4-round2 d a b c (aref m  5)   5 '(23170 . 31129))
+         c (md4-round2 c d a b (aref m  9)   9 '(23170 . 31129))
+         b (md4-round2 b c d a (aref m 13)  13 '(23170 . 31129))
+         a (md4-round2 a b c d (aref m  2)   3 '(23170 . 31129))
+         d (md4-round2 d a b c (aref m  6)   5 '(23170 . 31129))
+         c (md4-round2 c d a b (aref m 10)   9 '(23170 . 31129))
+         b (md4-round2 b c d a (aref m 14)  13 '(23170 . 31129))
+         a (md4-round2 a b c d (aref m  3)   3 '(23170 . 31129))
+         d (md4-round2 d a b c (aref m  7)   5 '(23170 . 31129))
+         c (md4-round2 c d a b (aref m 11)   9 '(23170 . 31129))
+         b (md4-round2 b c d a (aref m 15)  13 '(23170 . 31129))
+
+         a (md4-round3 a b c d (aref m  0)   3 '(28377 . 60321)) ;0x6ED9EBA1
+         d (md4-round3 d a b c (aref m  8)   9 '(28377 . 60321))
+         c (md4-round3 c d a b (aref m  4)  11 '(28377 . 60321))
+         b (md4-round3 b c d a (aref m 12)  15 '(28377 . 60321))
+         a (md4-round3 a b c d (aref m  2)   3 '(28377 . 60321))
+         d (md4-round3 d a b c (aref m 10)   9 '(28377 . 60321))
+         c (md4-round3 c d a b (aref m  6)  11 '(28377 . 60321))
+         b (md4-round3 b c d a (aref m 14)  15 '(28377 . 60321))
+         a (md4-round3 a b c d (aref m  1)   3 '(28377 . 60321))
+         d (md4-round3 d a b c (aref m  9)   9 '(28377 . 60321))
+         c (md4-round3 c d a b (aref m  5)  11 '(28377 . 60321))
+         b (md4-round3 b c d a (aref m 13)  15 '(28377 . 60321))
+         a (md4-round3 a b c d (aref m  3)   3 '(28377 . 60321))
+         d (md4-round3 d a b c (aref m 11)   9 '(28377 . 60321))
+         c (md4-round3 c d a b (aref m  7)  11 '(28377 . 60321))
+         b (md4-round3 b c d a (aref m 15)  15 '(28377 . 60321)))
+
+    (aset md4-buffer 0 (md4-add a (aref md4-buffer 0)))
+    (aset md4-buffer 1 (md4-add b (aref md4-buffer 1)))
+    (aset md4-buffer 2 (md4-add c (aref md4-buffer 2)))
+    (aset md4-buffer 3 (md4-add d (aref md4-buffer 3)))
+    ))
+
+(defun md4-copy64 (seq)
+  "Unpack a 64 bytes string into 16 pairs of 32 bits integers."
+  (let ((int32s (make-vector 16 0)) (i 0) j)
+    (while (< i 16)
+      (setq j (* i 4))
+      (aset int32s i (cons (+ (aref seq (+ j 2)) (lsh (aref seq (+ j 3)) 8))
+                          (+ (aref seq j) (lsh (aref seq (1+ j)) 8))))
+      (setq i (1+ i)))
+    int32s))
+
+;;;
+;;; sub functions
+
+(defun md4-pack-int16 (int16)
+  "Pack 16 bits integer in 2 bytes string as little endian."
+  (let ((str (make-string 2 0)))
+    (aset str 0 (logand int16 255))
+    (aset str 1 (lsh int16 -8))
+    str))
+
+(defun md4-pack-int32 (int32)
+  "Pack 32 bits integer in a 4 bytes string as little endian.  A 32 bits
+integer is represented as a pair of two 16 bits integers (cons high low)."
+  (let ((str (make-string 4 0))
+       (h (car int32)) (l (cdr int32)))
+    (aset str 0 (logand l 255))
+    (aset str 1 (lsh l -8))
+    (aset str 2 (logand h 255))
+    (aset str 3 (lsh h -8))
+    str))
+
+(defun md4-unpack-int16 (str)
+  (if (eq 2 (length str))
+      (+ (lsh (aref str 1) 8) (aref str 0))
+    (error "%s is not 2 bytes long" str)))
+
+(defun md4-unpack-int32 (str)
+  (if (eq 4 (length str))
+      (cons (+ (lsh (aref str 3) 8) (aref str 2))
+           (+ (lsh (aref str 1) 8) (aref str 0)))
+    (error "%s is not 4 bytes long" str)))
+
+(provide 'md4)
+
+;;; md4.el ends here
index 4697efa..eec8456 100644 (file)
 (require 'mail-parse)
 (require 'mml)
 (require 'rfc822)
-(eval-and-compile
-  (autoload 'sha1 "sha1-el")
-  (autoload 'gnus-find-method-for-group "gnus")
-  (autoload 'nnvirtual-find-group-art "nnvirtual")
-  (autoload 'gnus-group-decoded-name "gnus-group"))
 
 (defgroup message '((user-mail-address custom-variable)
                    (user-full-name custom-variable))
@@ -540,15 +535,13 @@ Done before generating the new subject of a forward."
   (if (string-match "[[:digit:]]" "1") ;; support POSIX?
       "\\([ \t]*[-_.[:word:]]+>+\\|[ \t]*[]>|}+]\\)+"
     ;; ?-, ?_ or ?. MUST NOT be in syntax entry w.
-    (let ((old-table (syntax-table))
-         non-word-constituents)
-      (set-syntax-table text-mode-syntax-table)
-      (setq non-word-constituents
-           (concat
-            (if (string-match "\\w" "-")  "" "-")
-            (if (string-match "\\w" "_")  "" "_")
-            (if (string-match "\\w" ".")  "" ".")))
-      (set-syntax-table old-table)
+    (let (non-word-constituents)
+      (with-syntax-table text-mode-syntax-table
+       (setq non-word-constituents
+             (concat
+              (if (string-match "\\w" "-")  "" "-")
+              (if (string-match "\\w" "_")  "" "_")
+              (if (string-match "\\w" ".")  "" "."))))
       (if (equal non-word-constituents "")
          "\\([ \t]*\\(\\w\\)+>+\\|[ \t]*[]>|}+]\\)+"
        (concat "\\([ \t]*\\(\\w\\|["
@@ -731,11 +724,6 @@ might set this variable to '(\"-f\" \"you@some.where\")."
   :type '(choice (function)
                 (repeat string)))
 
-(defvar message-cater-to-broken-inn t
-  "Non-nil means Gnus should not fold the `References' header.
-Folding `References' makes ancient versions of INN create incorrect
-NOV lines.")
-
 (eval-when-compile
   (defvar gnus-post-method)
   (defvar gnus-select-method))
@@ -762,7 +750,7 @@ variable isn't used."
 ;; is nil.  See: http://article.gmane.org/gmane.emacs.gnus.general/51138
 (defcustom message-generate-headers-first '(references)
   "Which headers should be generated before starting to compose a message.
-If `t', generate all required headers.  This can also be a list of headers to
+If t, generate all required headers.  This can also be a list of headers to
 generate.  The variables `message-required-news-headers' and
 `message-required-mail-headers' specify which headers to generate.
 
@@ -1532,26 +1520,34 @@ no, only reply back to the author."
   :type 'regexp)
 
 (eval-and-compile
-  (autoload 'message-setup-toolbar "messagexmas")
-  (autoload 'mh-new-draft-name "mh-comp")
-  (autoload 'mh-send-letter "mh-comp")
-  (autoload 'gnus-point-at-eol "gnus-util")
-  (autoload 'gnus-point-at-bol "gnus-util")
-  (autoload 'gnus-output-to-rmail "gnus-util")
-  (autoload 'gnus-output-to-mail "gnus-util")
-  (autoload 'nndraft-request-associate-buffer "nndraft")
-  (autoload 'nndraft-request-expire-articles "nndraft")
-  (autoload 'gnus-open-server "gnus-int")
-  (autoload 'gnus-request-post "gnus-int")
   (autoload 'gnus-alive-p "gnus-util")
-  (autoload 'gnus-server-string "gnus")
+  (autoload 'gnus-delay-article "gnus-delay")
+  (autoload 'gnus-extract-address-components "gnus-util")
+  (autoload 'gnus-find-method-for-group "gnus")
+  (autoload 'gnus-group-decoded-name "gnus-group")
   (autoload 'gnus-group-name-charset "gnus-group")
   (autoload 'gnus-group-name-decode "gnus-group")
   (autoload 'gnus-groups-from-server "gnus")
-  (autoload 'rmail-output "rmailout")
-  (autoload 'gnus-delay-article "gnus-delay")
   (autoload 'gnus-make-local-hook "gnus-util")
-  (autoload 'gnus-extract-address-components "gnus-util"))
+  (autoload 'gnus-open-server "gnus-int")
+  (autoload 'gnus-output-to-mail "gnus-util")
+  (autoload 'gnus-output-to-rmail "gnus-util")
+  (autoload 'gnus-request-post "gnus-int")
+  (autoload 'gnus-server-string "gnus")
+  (autoload 'idna-to-ascii "idna")
+  (autoload 'message-setup-toolbar "messagexmas")
+  (autoload 'mh-new-draft-name "mh-comp")
+  (autoload 'mh-send-letter "mh-comp")
+  (autoload 'nndraft-request-associate-buffer "nndraft")
+  (autoload 'nndraft-request-expire-articles "nndraft")
+  (autoload 'nnvirtual-find-group-art "nnvirtual")
+  (autoload 'rmail-dont-reply-to "mail-utils")
+  (autoload 'rmail-msg-is-pruned "rmail")
+  (autoload 'rmail-msg-restore-non-pruned-header "rmail")
+  (autoload 'rmail-output "rmailout"))
+
+(eval-when-compile
+  (autoload 'sha1 "sha1-el"))
 
 \f
 
@@ -1631,7 +1627,6 @@ is used by default."
 The buffer is expected to be narrowed to just the header of the message;
 see `message-narrow-to-headers-or-head'."
   (let* ((inhibit-point-motion-hooks t)
-        (case-fold-search t)
         (value (mail-fetch-field header nil (not not-all))))
     (when value
       (while (string-match "\n[\t ]+" value)
@@ -1654,9 +1649,7 @@ see `message-narrow-to-headers-or-head'."
    (progn
      (forward-line 1)
      (if (re-search-forward "^[^ \n\t]" nil t)
-        (progn
-          (beginning-of-line)
-          (point))
+        (point-at-bol)
        (point-max))))
   (goto-char (point-min)))
 
@@ -2444,11 +2437,6 @@ M-RET    `message-newline-and-reformat' (break the line and reformat)."
   (set (make-local-variable 'message-checksum) nil)
   (set (make-local-variable 'message-mime-part) 0)
   (message-setup-fill-variables)
-  (set
-   (make-local-variable 'paragraph-separate)
-   (format "\\(%s\\)\\|\\(%s\\)"
-          paragraph-separate
-          "<#!*/?\\(multipart\\|part\\|external\\|mml\\|secure\\)"))
   ;; Allow using comment commands to add/remove quoting.
   (set (make-local-variable 'comment-start) message-yank-prefix)
   (if (featurep 'xemacs)
@@ -2500,7 +2488,9 @@ M-RET    `message-newline-and-reformat' (break the line and reformat)."
           "---+$\\|"              ; delimiters for forwarded messages
           page-delimiter "$\\|"        ; spoiler warnings
           ".*wrote:$\\|"               ; attribution lines
-          quote-prefix-regexp "$"))    ; empty lines in quoted text
+          quote-prefix-regexp "$\\|"   ; empty lines in quoted text
+                                       ; mml tags
+          "<#!*/?\\(multipart\\|part\\|external\\|mml\\|secure\\)"))
     (setq paragraph-separate paragraph-start)
     (setq adaptive-fill-regexp
          (concat quote-prefix-regexp "\\|" adaptive-fill-regexp))
@@ -2764,16 +2754,23 @@ or in the synonym headers, defined by `message-header-synonyms'."
   (when (message-goto-signature)
     (forward-line -2)))
 
-(defun message-kill-to-signature ()
-  "Deletes all text up to the signature."
-  (interactive)
-  (let ((point (point)))
-    (message-goto-signature)
-    (unless (eobp)
-      (end-of-line -1))
-    (kill-region point (point))
-    (unless (bolp)
-      (insert "\n"))))
+(defun message-kill-to-signature (&optional arg)
+  "Kill all text up to the signature.
+If a numberic argument or prefix arg is given, leave that number
+of lines before the signature intact."
+  (interactive "p")
+  (save-excursion
+    (save-restriction
+      (let ((point (point)))
+       (narrow-to-region point (point-max))
+       (message-goto-signature)
+       (unless (eobp)
+         (if (and arg (numberp arg))
+             (forward-line (- -1 arg))
+           (end-of-line -1)))
+       (unless (= point (point))
+         (kill-region point (point))
+         (insert "\n"))))))
 
 (defun message-newline-and-reformat (&optional arg not-break)
   "Insert four newlines, and then reformat if inside quoted text.
@@ -3890,14 +3887,15 @@ to find out how to use this."
   "Send the prepared message buffer with `smtpmail-send-it'.
 This only differs from `smtpmail-send-it' that this command evaluates
 `message-send-mail-hook' just before sending a message.  It is useful
-if your ISP requires the POP-before-SMTP authentication.  See the
-documentation for the function `mail-source-touch-pop'."
+if your ISP requires the POP-before-SMTP authentication.  See the Gnus
+manual for details."
   (run-hooks 'message-send-mail-hook)
   (smtpmail-send-it))
 
 (defun message-canlock-generate ()
   "Return a string that is non-trivial to guess.
 Do not use this for anything important, it is cryptographically weak."
+  (require 'sha1-el)
   (let (sha1-maximum-internal-length)
     (sha1 (concat (message-unique-id)
                  (format "%x%x%x" (random) (random t) (random))
@@ -4897,8 +4895,6 @@ I.e., calling it on a Subject: header is useless."
          (incf paren))
        (and (= (% dquote 2) 1) (= (% paren 2) 1))))))
 
-(autoload 'idna-to-ascii "idna")
-
 (defun message-idna-to-ascii-rhs-1 (header)
   "Interactively potentially IDNA encode domain names in HEADER."
   (let (rhs ace start startpos endpos ovl)
@@ -5055,7 +5051,7 @@ Headers already prepared in the buffer are not modified."
                      (forward-line -1)))
                ;; The value of this header was empty, so we clear
                ;; totally and insert the new value.
-               (delete-region (point) (gnus-point-at-eol))
+               (delete-region (point) (point-at-eol))
                ;; If the header is optional, and the header was
                ;; empty, we con't insert it anyway.
                (unless optionalp
@@ -5183,8 +5179,9 @@ If the current line has `message-yank-prefix', insert it on the new line."
 
 (defun message-shorten-references (header references)
   "Trim REFERENCES to be 21 Message-ID long or less, and fold them.
-If folding is disallowed, also check that the REFERENCES are less
-than 988 characters long, and if they are not, trim them until they are."
+When sending via news, also check that the REFERENCES are less
+than 988 characters long, and if they are not, trim them until
+they are."
   (let ((maxcount 21)
        (count 0)
        (cut 2)
@@ -5206,33 +5203,25 @@ than 988 characters long, and if they are not, trim them until they are."
        (message-shorten-1 refs cut surplus)
        (decf count surplus)))
 
-    ;; If folding is disallowed, make sure the total length (including
-    ;; the spaces between) will be less than MAXSIZE characters.
+    ;; When sending via news, make sure the total folded length will
+    ;; be less than 998 characters.  This is to cater to broken INN
+    ;; 2.3 which counts the total number of characters in a header
+    ;; rather than the physical line length of each line, as it shuld.
     ;;
-    ;; Only disallow folding for News messages. At this point the headers
-    ;; have not been generated, thus we use message-this-is-news directly.
-    (when (and message-this-is-news message-cater-to-broken-inn)
-      (let ((maxsize 988)
-           (totalsize (+ (apply #'+ (mapcar #'length refs))
-                         (1- count)))
-           (surplus 0)
-           (ptr (nthcdr (1- cut) refs)))
-       ;; Decide how many elements to cut off...
-       (while (> totalsize maxsize)
-         (decf totalsize (1+ (length (car ptr))))
-         (incf surplus)
-         (setq ptr (cdr ptr)))
-       ;; ...and do it.
-       (when (> surplus 0)
-         (message-shorten-1 refs cut surplus))))
-
+    ;; This hack should be removed when it's believed than INN 2.3 is
+    ;; no longer widely used.
+    ;;
+    ;; At this point the headers have not been generated, thus we use
+    ;; message-this-is-news directly.
+    (when message-this-is-news
+      (while (< 998
+               (with-temp-buffer
+                 (message-fill-header header (mapconcat #'identity refs " "))
+                 (buffer-size)))
+       (message-shorten-1 refs cut 1)))
     ;; Finally, collect the references back into a string and insert
     ;; it into the buffer.
-    (let ((refstring (mapconcat #'identity refs " ")))
-      (if (and message-this-is-news message-cater-to-broken-inn)
-         (insert (capitalize (symbol-name header)) ": "
-                 refstring "\n")
-       (message-fill-header header refstring)))))
+    (message-fill-header header (mapconcat #'identity refs " "))))
 
 (defun message-position-point ()
   "Move point to where the user probably wants to find it."
@@ -5281,7 +5270,7 @@ beginning of line."
           (message-point-in-header-p))
       (let* ((here (point))
             (bol (progn (beginning-of-line n) (point)))
-            (eol (gnus-point-at-eol))
+            (eol (point-at-eol))
             (eoh (re-search-forward ": *" eol t)))
        (if (or (not eoh) (equal here eoh))
            (goto-char bol)
@@ -5460,12 +5449,7 @@ are not included."
   (when message-default-headers
     (insert message-default-headers)
     (or (bolp) (insert ?\n)))
-  (put-text-property
-   (point)
-   (progn
-     (insert mail-header-separator "\n")
-     (1- (point)))
-   'read-only nil)
+  (insert mail-header-separator "\n")
   (forward-line -1)
   (when (message-news-p)
     (when message-default-news-headers
@@ -6276,8 +6260,6 @@ Optional DIGEST will use digest to forward."
 (defun message-forward-rmail-make-body (forward-buffer)
   (save-window-excursion
     (set-buffer forward-buffer)
-    ;; Rmail doesn't have rmail-msg-restore-non-pruned-header in Emacs
-    ;; 20.  FIXIT, or we drop support for rmail in Emacs 20.
     (if (rmail-msg-is-pruned)
        (rmail-msg-restore-non-pruned-header)))
   (message-forward-make-body forward-buffer))
@@ -6486,7 +6468,13 @@ which specify the range to operate on."
        (if (eq (char-after) (char-after (- (point) 2)))
            (delete-char -2))))))
 
-(defalias 'message-exchange-point-and-mark 'exchange-point-and-mark)
+(defun message-exchange-point-and-mark ()
+  "Exchange point and mark, but don't activate region if it was inactive."
+  (unless (prog1
+             (message-mark-active-p)
+           (exchange-point-and-mark))
+    (setq mark-active nil)))
+
 (defalias 'message-make-overlay 'make-overlay)
 (defalias 'message-delete-overlay 'delete-overlay)
 (defalias 'message-overlay-put 'overlay-put)
@@ -6630,9 +6618,12 @@ those headers."
            (delete-region (point) (progn (forward-line 3) (point))))))))))
 
 (defun message-expand-name ()
-  (if (fboundp 'bbdb-complete-name)
-      (bbdb-complete-name)
-    (expand-abbrev)))
+  (cond ((when (boundp 'eudc-protocol) eudc-protocol)
+        (eudc-expand-inline))
+       ((fboundp 'bbdb-complete-name)
+        (bbdb-complete-name))
+       (t
+        (expand-abbrev))))
 
 ;;; Help stuff.
 
index 364e685..b3e5028 100644 (file)
@@ -122,9 +122,8 @@ If it is non-nil, it must be a toolbar.  The five valid values are
     'message-xmas-exchange-point-and-mark)
   (defalias 'message-mark-active-p
     'region-exists-p)
-  (when (>= emacs-major-version 20)
-    (defalias 'message-make-caesar-translation-table
-      'message-xmas-make-caesar-translation-table))
+  (defalias 'message-make-caesar-translation-table
+    'message-xmas-make-caesar-translation-table)
   (defalias 'message-make-overlay 'make-extent)
   (defalias 'message-delete-overlay 'delete-extent)
   (defalias 'message-overlay-put 'set-extent-property))
index 3475168..6470ddf 100644 (file)
 
 ;;; Code:
 
-(eval-and-compile
-  (or (fboundp  'base64-decode-region)
-      (require 'base64)))
-
 (eval-when-compile
   (defvar mm-uu-decode-function)
   (defvar mm-uu-binhex-decode-function))
 (require 'rfc2047)
 (require 'mm-encode)
 
-;; 8bit treatment gets any char except: 0x32 - 0x7f, CR, LF, TAB, BEL,
+;; 8bit treatment gets any char except: 0x32 - 0x7f, LF, TAB, BEL,
 ;; BS, vertical TAB, form feed, and ^_
-(defvar mm-7bit-chars "\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f")
+;;
+;; Note that CR is *not* included, as that would allow a non-paired CR
+;; in the body contrary to RFC 2822:
+;;
+;;   - CR and LF MUST only occur together as CRLF; they MUST NOT
+;;     appear independently in the body.
+
+(defvar mm-7bit-chars "\x20-\x7f\n\t\x7\x8\xb\xc\x1f")
 
 (defcustom mm-body-charset-encoding-alist
   '((iso-2022-jp . 7bit)
@@ -49,6 +52,8 @@
     ;; known to break servers.
     ;; Note: UTF-16 variants are invalid for text parts [RFC 2781],
     ;; so this can't happen :-/.
+    ;; PPS: Yes, it can happen if the user specifies UTF-16 in the MML
+    ;; markup. - jh.
     (utf-16 . base64)
     (utf-16be . base64)
     (utf-16le . base64))
index 5d7f013..ccf92c8 100644 (file)
@@ -32,7 +32,6 @@
                   (require 'term))
 
 (eval-and-compile
-  (autoload 'executable-find "executable")
   (autoload 'mm-inline-partial "mm-partial")
   (autoload 'mm-inline-external-body "mm-extern")
   (autoload 'mm-insert-inline "mm-view"))
@@ -41,7 +40,7 @@
 
 (defgroup mime-display ()
   "Display of MIME in mail and news articles."
-  :link '(custom-manual "(emacs-mime)Customization")
+  :link '(custom-manual "(emacs-mime)Display Customization")
   :version "21.1"
   :group 'mail
   :group 'news
@@ -49,7 +48,7 @@
 
 (defgroup mime-security ()
   "MIME security in mail and news articles."
-  :link '(custom-manual "(emacs-mime)Customization")
+  :link '(custom-manual "(emacs-mime)Display Customization")
   :group 'mail
   :group 'news
   :group 'multimedia)
@@ -833,16 +832,16 @@ external if displayed external."
            (string= total "'%s'")
            (string= total "\"%s\""))
        (setq uses-stdin nil)
-       (push (mm-quote-arg
+       (push (shell-quote-argument
               (gnus-map-function mm-path-name-rewrite-functions file)) out))
        ((string= total "%t")
-       (push (mm-quote-arg (car type-list)) out))
+       (push (shell-quote-argument (car type-list)) out))
        (t
-       (push (mm-quote-arg (or (cdr (assq (intern sub) ctl)) "")) out))))
+       (push (shell-quote-argument (or (cdr (assq (intern sub) ctl)) "")) out))))
     (push (substring method beg (length method)) out)
     (when uses-stdin
       (push "<" out)
-      (push (mm-quote-arg
+      (push (shell-quote-argument
             (gnus-map-function mm-path-name-rewrite-functions file))
            out))
     (mapconcat 'identity (nreverse out) "")))
@@ -1090,9 +1089,10 @@ string if you do not like underscores."
       (setq filename (gnus-map-function mm-file-name-rewrite-functions
                                        (file-name-nondirectory filename))))
     (setq file
-         (read-file-name "Save MIME part to: "
-                         (or mm-default-directory default-directory)
-                         nil nil (or filename name "")))
+         (mm-with-multibyte
+           (read-file-name "Save MIME part to: "
+                           (or mm-default-directory default-directory)
+                           nil nil (or filename name ""))))
     (setq mm-default-directory (file-name-directory file))
     (and (or (not (file-exists-p file))
             (yes-or-no-p (format "File %s already exists; overwrite? "
@@ -1451,6 +1451,12 @@ If RECURSIVE, search recursively."
     parts))
 
 (defun mm-multiple-handles (handles)
+  (and (listp handles)
+       (> (length handles) 1)
+       (or (listp (car handles))
+          (stringp (car handles)))))
+
+(defun mm-complicated-handles (handles)
   (and (listp (car handles))
        (> (length handles) 1)))
 
index f6294e9..6e67807 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mm-url.el --- a wrapper of url functions/commands for Gnus
-;; Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 
@@ -34,9 +34,6 @@
 (require 'mm-util)
 (require 'gnus)
 
-(eval-and-compile
-  (autoload 'executable-find "executable"))
-
 (eval-when-compile
   (require 'timer))
 
index cbd85b1..8f600fd 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mm-util.el --- Utility functions for Mule and low level things
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
 ;;   Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -44,9 +44,6 @@
      (coding-system-equal . equal)
      (annotationp . ignore)
      (set-buffer-file-coding-system . ignore)
-     (make-char
-      . (lambda (charset int)
-         (int-to-char int)))
      (read-charset
       . (lambda (prompt)
          "Return a charset."
                    mm-mime-mule-charset-alist)
            nil t))))
      (subst-char-in-string
-      . (lambda (from to string) ;; stolen (and renamed) from nnheader.el
-         "Replace characters in STRING from FROM to TO."
-         (let ((string (substring string 0)) ;Copy string.
+      . (lambda (from to string &optional inplace) ;; stolen (and renamed) from nnheader.el
+         "Replace characters in STRING from FROM to TO.
+         Unless optional argument INPLACE is non-nil, return a new string."
+         (let ((string (if inplace string (copy-sequence string)))
                (len (length string))
                (idx 0))
            ;; Replace all occurrences of FROM with TO.
@@ -133,15 +131,9 @@ In XEmacs, also return non-nil if CS is a coding system object."
 
 (defvar mm-charset-synonym-alist
   `(
-    ;; Perfectly fine?  A valid MIME name, anyhow.
-    ,@(unless (mm-coding-system-p 'big5)
-       '((big5 . cn-big5)))
     ;; Not in XEmacs, but it's not a proper MIME charset anyhow.
     ,@(unless (mm-coding-system-p 'x-ctext)
        '((x-ctext . ctext)))
-    ;; Apparently not defined in Emacs 20, but is a valid MIME name.
-    ,@(unless (mm-coding-system-p 'gb2312)
-       '((gb2312 . cn-gb-2312)))
     ;; ISO-8859-15 is very similar to ISO-8859-1.  But it's _different_!
     ,@(unless (mm-coding-system-p 'iso-8859-15)
        '((iso-8859-15 . iso-8859-1)))
@@ -160,6 +152,11 @@ In XEmacs, also return non-nil if CS is a coding system object."
     ,@(if (and (not (mm-coding-system-p 'windows-1250))
               (mm-coding-system-p 'cp1250))
          '((windows-1250 . cp1250)))
+    ;; 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))))
     )
   "A mapping from invalid charset names to the real charset names.")
 
@@ -398,9 +395,6 @@ used as the line break code type of the coding system."
            (setq cs c)))
       cs))))
 
-(defsubst mm-replace-chars-in-string (string from to)
-  (mm-subst-char-in-string from to string))
-
 (eval-and-compile
   (defvar mm-emacs-mule (and (not (featurep 'xemacs))
                             (boundp 'default-enable-multibyte-characters)
@@ -632,12 +626,19 @@ Equivalent to `progn' in XEmacs"
 (put 'mm-with-unibyte-current-buffer 'edebug-form-spec '(body))
 
 (defmacro mm-with-unibyte (&rest forms)
-  "Eval the FORMS with the default value of `enable-multibyte-characters' nil, ."
+  "Eval the FORMS with the default value of `enable-multibyte-characters' nil."
   `(let (default-enable-multibyte-characters)
      ,@forms))
 (put 'mm-with-unibyte 'lisp-indent-function 0)
 (put 'mm-with-unibyte 'edebug-form-spec '(body))
 
+(defmacro mm-with-multibyte (&rest forms)
+  "Eval the FORMS with the default value of `enable-multibyte-characters' t."
+  `(let ((default-enable-multibyte-characters t))
+     ,@forms))
+(put 'mm-with-multibyte 'lisp-indent-function 0)
+(put 'mm-with-multibyte 'edebug-form-spec '(body))
+
 (defun mm-find-charset-region (b e)
   "Return a list of Emacs charsets in the region B to E."
   (cond
@@ -672,21 +673,6 @@ Equivalent to `progn' in XEmacs"
                                       mm-mime-mule-charset-alist)))))
            (list 'ascii (or charset 'latin-iso8859-1)))))))))
 
-(if (fboundp 'shell-quote-argument)
-    (defalias 'mm-quote-arg 'shell-quote-argument)
-  (defun mm-quote-arg (arg)
-    "Return a version of ARG that is safe to evaluate in a shell."
-    (let ((pos 0) new-pos accum)
-      ;; *** bug: we don't handle newline characters properly
-      (while (setq new-pos (string-match "[]*[;!'`\"$\\& \t{} |()<>]" arg pos))
-       (push (substring arg pos new-pos) accum)
-       (push "\\" accum)
-       (push (list (aref arg new-pos)) accum)
-       (setq pos (1+ new-pos)))
-      (if (= pos 0)
-         arg
-       (apply 'concat (nconc (nreverse accum) (list (substring arg pos))))))))
-
 (defun mm-auto-mode-alist ()
   "Return an `auto-mode-alist' with only the .gz (etc) thingies."
   (let ((alist auto-mode-alist)
@@ -769,11 +755,12 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'."
 (defun mm-image-load-path (&optional package)
   (let (dir result)
     (dolist (path load-path (nreverse result))
-      (if (file-directory-p
-          (setq dir (concat (file-name-directory
-                             (directory-file-name path))
-                            "etc/" (or package "gnus/"))))
-         (push dir result))
+      (when (and path
+                (file-directory-p
+                 (setq dir (concat (file-name-directory
+                                    (directory-file-name path))
+                                   "etc/" (or package "gnus/")))))
+       (push dir result))
       (push path result))))
 
 ;; Fixme: This doesn't look useful where it's used.
index f6e4a66..e88eca5 100644 (file)
@@ -1,5 +1,6 @@
 ;;; mm-view.el --- functions for viewing MIME objects
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
@@ -34,9 +35,7 @@
   (autoload 'vcard-parse-string "vcard")
   (autoload 'vcard-format-string "vcard")
   (autoload 'fill-flowed "flow-fill")
-  (autoload 'html2text "html2text")
-  (unless (fboundp 'diff-mode)
-    (autoload 'diff-mode "diff-mode" "" t nil)))
+  (autoload 'html2text "html2text"))
 
 (defvar mm-text-html-renderer-alist
   '((w3  . mm-inline-text-html-render-with-w3)
     (html2text  html2text))
   "The attributes of washer types for text/html.")
 
+(defcustom mm-fill-flowed t
+  "If non-nil a format=flowed article will be displayed flowed."
+  :type 'boolean
+  :group 'mime-display)
+
 ;;; Internal variables.
 
 ;;;
@@ -74,7 +78,6 @@
   (let ((b (point-marker))
        buffer-read-only)
     (put-image (mm-get-image handle) b)
-    (insert "\n\n")
     (mm-handle-set-undisplayer
      handle
      `(lambda ()
   (setq w3m-display-inline-images mm-inline-text-html-with-images))
 
 (defun mm-w3m-cid-retrieve-1 (url handle)
-  (dolist (elem handle)
-    (when (and (listp elem)
-              (equal url (mm-handle-id elem)))
-      (mm-insert-part elem)
-      (throw 'found-handle (mm-handle-media-type elem)))))
+  (if (mm-multiple-handles handle)
+      (dolist (elem handle)
+       (mm-w3m-cid-retrieve-1 url elem))
+    (when (and (listp handle)
+              (equal url (mm-handle-id handle)))
+      (mm-insert-part handle)
+      (throw 'found-handle (mm-handle-media-type handle)))))
 
 (defun mm-w3m-cid-retrieve (url &rest args)
   "Insert a content pointed by URL if it has the cid: scheme."
   (when (string-match "\\`cid:" url)
-    (setq url (concat "<" (substring url (match-end 0)) ">"))
     (catch 'found-handle
-      (let ((handles (with-current-buffer w3m-current-buffer
-                      gnus-article-mime-handles)))
-       (if (mm-multiple-handles handles)
-           (dolist (handle handles)
-             (mm-w3m-cid-retrieve-1 url handle))
-         (mm-w3m-cid-retrieve-1 url handles))))))
-
-(eval-and-compile
-  (unless (or (featurep 'xemacs)
-             (>= emacs-major-version 21))
-    (defvar mm-w3m-mode-map nil
-      "Keymap for text/html parts rendered by emacs-w3m.
-This keymap will be bound only when Emacs 20 is running and overwritten
-by the value of `w3m-minor-mode-map'.  In order to add some commands to
-this keymap, add them to `w3m-minor-mode-map' instead of this keymap.")))
-
-(defun mm-w3m-local-map-property ()
-  (when (and (boundp 'w3m-minor-mode-map) w3m-minor-mode-map)
-    (if (or (featurep 'xemacs)
-           (>= emacs-major-version 21))
-       (list 'keymap w3m-minor-mode-map)
-      (list 'local-map
-           (or mm-w3m-mode-map
-               (progn
-                 (setq mm-w3m-mode-map (copy-keymap w3m-minor-mode-map))
-                 (set-keymap-parent mm-w3m-mode-map gnus-article-mode-map)
-                 mm-w3m-mode-map))))))
+      (mm-w3m-cid-retrieve-1 (concat "<" (substring url (match-end 0)) ">")
+                            (with-current-buffer w3m-current-buffer
+                              gnus-article-mime-handles)))))
 
 (defun mm-inline-text-html-render-with-w3m (handle)
   "Render a text/html part using emacs-w3m."
@@ -257,12 +237,14 @@ this keymap, add them to `w3m-minor-mode-map' instead of this keymap.")))
        (let ((w3m-safe-url-regexp mm-w3m-safe-url-regexp)
              w3m-force-redisplay)
          (w3m-region (point-min) (point-max)))
-       (when mm-inline-text-html-with-w3m-keymap
+       (when (and mm-inline-text-html-with-w3m-keymap
+                  (boundp 'w3m-minor-mode-map)
+                  w3m-minor-mode-map)
          (add-text-properties
           (point-min) (point-max)
-          (nconc (mm-w3m-local-map-property)
-                 ;; Put the mark meaning this part was rendered by emacs-w3m.
-                 '(mm-inline-text-html-with-w3m t)))))
+          (list 'keymap w3m-minor-mode-map
+                ;; Put the mark meaning this part was rendered by emacs-w3m.
+                'mm-inline-text-html-with-w3m t))))
       (mm-handle-set-undisplayer
        handle
        `(lambda ()
@@ -366,7 +348,8 @@ this keymap, add them to `w3m-minor-mode-map' instead of this keymap.")))
          (mm-insert-part handle)
          (goto-char (point-max)))
       (insert (mm-decode-string (mm-get-part handle) charset)))
-    (when (and (equal type "plain")
+    (when (and mm-fill-flowed
+              (equal type "plain")
               (equal (cdr (assoc 'format (mm-handle-type handle)))
                      "flowed"))
       (save-restriction
@@ -516,23 +499,21 @@ this keymap, add them to `w3m-minor-mode-map' instead of this keymap.")))
 ;;          us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }
 (defvar mm-pkcs7-signed-magic
   (mm-string-as-unibyte
-   (apply 'concat
-         (mapcar 'char-to-string
-                 (list ?\x30 ?\x5c ?\x28 ?\x80 ?\x5c ?\x7c ?\x81 ?\x2e ?\x5c
-                       ?\x7c ?\x82 ?\x2e ?\x2e ?\x5c ?\x7c ?\x83 ?\x2e ?\x2e
-                       ?\x2e ?\x5c ?\x29 ?\x06 ?\x09 ?\x5c ?\x2a ?\x86 ?\x48
-                       ?\x86 ?\xf7 ?\x0d ?\x01 ?\x07 ?\x02)))))
+   (mapconcat 'char-to-string
+             (list ?\x30 ?\x5c ?\x28 ?\x80 ?\x5c ?\x7c ?\x81 ?\x2e ?\x5c
+                   ?\x7c ?\x82 ?\x2e ?\x2e ?\x5c ?\x7c ?\x83 ?\x2e ?\x2e
+                   ?\x2e ?\x5c ?\x29 ?\x06 ?\x09 ?\x5c ?\x2a ?\x86 ?\x48
+                   ?\x86 ?\xf7 ?\x0d ?\x01 ?\x07 ?\x02) "")))
 
 ;;      id-envelopedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
 ;;          us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3 }
 (defvar mm-pkcs7-enveloped-magic
   (mm-string-as-unibyte
-   (apply 'concat
-         (mapcar 'char-to-string
-                 (list ?\x30 ?\x5c ?\x28 ?\x80 ?\x5c ?\x7c ?\x81 ?\x2e ?\x5c
-                       ?\x7c ?\x82 ?\x2e ?\x2e ?\x5c ?\x7c ?\x83 ?\x2e ?\x2e
-                       ?\x2e ?\x5c ?\x29 ?\x06 ?\x09 ?\x5c ?\x2a ?\x86 ?\x48
-                       ?\x86 ?\xf7 ?\x0d ?\x01 ?\x07 ?\x03)))))
+   (mapconcat 'char-to-string
+             (list ?\x30 ?\x5c ?\x28 ?\x80 ?\x5c ?\x7c ?\x81 ?\x2e ?\x5c
+                   ?\x7c ?\x82 ?\x2e ?\x2e ?\x5c ?\x7c ?\x83 ?\x2e ?\x2e
+                   ?\x2e ?\x5c ?\x29 ?\x06 ?\x09 ?\x5c ?\x2a ?\x86 ?\x48
+                   ?\x86 ?\xf7 ?\x0d ?\x01 ?\x07 ?\x03) "")))
 
 (defun mm-view-pkcs7-get-type (handle)
   (mm-with-unibyte-buffer
@@ -566,8 +547,6 @@ this keymap, add them to `w3m-minor-mode-map' instead of this keymap.")))
   (sit-for 1)
   t)
 
-(autoload 'gnus-completing-read-maybe-default "gnus-util" nil nil 'macro)
-
 (defun mm-view-pkcs7-decrypt (handle)
   (insert-buffer-substring (mm-handle-buffer handle))
   (goto-char (point-min))
@@ -578,7 +557,7 @@ this keymap, add them to `w3m-minor-mode-map' instead of this keymap.")))
    (if (= (length smime-keys) 1)
        (cadar smime-keys)
      (smime-get-key-by-email
-      (gnus-completing-read-maybe-default
+      (completing-read
        (concat "Decipher using which key? "
               (if smime-keys (concat "(default " (caar smime-keys) ") ")
                 ""))
index c1a494b..be4665b 100644 (file)
@@ -112,7 +112,7 @@ You can also customize or set `mml-signencrypt-style-alist' instead."
            (setf (second style-item) style)
          ;; otherwise, just return the current value
          (second style-item))
-      (gnus-message 3 "Warning, attempt to set invalid signencrypt-style"))))
+      (message "Warning, attempt to set invalid signencrypt style"))))
 
 ;;; Security functions
 
index 45e06d7..dbcd1c1 100644 (file)
 
 ;;; Code:
 
+(eval-when-compile (require 'cl))
+
 (require 'smime)
 (require 'mm-decode)
 (autoload 'message-narrow-to-headers "message")
+(autoload 'message-fetch-field "message")
 
 (defun mml-smime-sign (cont)
   (when (null smime-keys)
index fded446..68370d6 100644 (file)
 (eval-and-compile
   (autoload 'message-make-message-id "message")
   (autoload 'gnus-setup-posting-charset "gnus-msg")
-  (autoload 'gnus-add-minor-mode "gnus-ems")
   (autoload 'gnus-make-local-hook "gnus-util")
   (autoload 'message-fetch-field "message")
+  (autoload 'message-mark-active-p "message")
   (autoload 'fill-flowed-encode "flow-fill")
-  (autoload 'message-posting-charset "message"))
+  (autoload 'message-posting-charset "message")
+  (autoload 'x-dnd-get-local-file-name "x-dnd"))
 
 (defcustom mml-content-type-parameters
   '(name access-type expiration size permission format)
@@ -131,19 +132,15 @@ one charsets.")
 
 (defun mml-destroy-buffers ()
   (let (kill-buffer-hook)
-    (mapcar 'kill-buffer mml-buffer-list)
+    (mapc 'kill-buffer mml-buffer-list)
     (setq mml-buffer-list nil)))
 
 (defun mml-parse ()
   "Parse the current buffer as an MML document."
   (save-excursion
     (goto-char (point-min))
-    (let ((table (syntax-table)))
-      (unwind-protect
-         (progn
-           (set-syntax-table mml-syntax-table)
-           (mml-parse-1))
-       (set-syntax-table table)))))
+    (with-syntax-table mml-syntax-table
+      (mml-parse-1))))
 
 (defun mml-parse-1 ()
   "Parse the current buffer as an MML document."
@@ -165,9 +162,8 @@ one charsets.")
               (method (cdr (assq 'method taginfo)))
               tags)
          (save-excursion
-           (if
-               (re-search-forward
-                "<#\\(/\\)?\\(multipart\\|part\\|external\\|mml\\)." nil t)
+           (if (re-search-forward
+                "<#/?\\(multipart\\|part\\|external\\|mml\\)." nil t)
                (setq secure-mode "multipart")
              (setq secure-mode "part")))
          (save-excursion
@@ -447,6 +443,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
                    ;; actually are hard newlines in the text.
                    (let (use-hard-newlines)
                      (when (and (string= type "text/plain")
+                                (not (string= (cdr (assq 'sign cont)) "pgp"))
                                 (or (null (assq 'format cont))
                                     (string= (cdr (assq 'format cont))
                                              "flowed"))
@@ -554,7 +551,8 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
            (message-options-set 'message-sender sender))
          (if (setq recipients (cdr (assq 'recipients cont)))
              (message-options-set 'message-recipients recipients))
-         (let ((style (mml-signencrypt-style (first (or sign-item encrypt-item)))))
+         (let ((style (mml-signencrypt-style
+                       (first (or sign-item encrypt-item)))))
            ;; check if: we're both signing & encrypting, both methods
            ;; are the same (why would they be different?!), and that
            ;; the signencrypt style allows for combined operation.
@@ -588,7 +586,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
          (insert-buffer-substring (cdr (assq 'buffer cont))))
         ((and (setq filename (cdr (assq 'filename cont)))
               (not (equal (cdr (assq 'nofile cont)) "yes")))
-         (mm-insert-file-contents filename))
+         (mm-insert-file-contents filename nil nil nil nil t))
         (t
          (insert (cdr (assq 'contents cont)))))
        (goto-char (point-min))
@@ -598,7 +596,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
                                      (incf mml-multipart-number)))
          (throw 'not-unique nil))))
      ((eq (car cont) 'multipart)
-      (mapcar 'mml-compute-boundary-1 (cddr cont))))
+      (mapc 'mml-compute-boundary-1 (cddr cont))))
     t))
 
 (defun mml-make-boundary (number)
@@ -875,7 +873,10 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
      ["S/MIME Encrypt Part" mml-secure-encrypt-smime t])
     ["Encrypt/Sign off" mml-unsecure-message t]
     ;;["Narrow" mml-narrow-to-part t]
-    ["Quote MML" mml-quote-region t]
+    ["Quote MML" mml-quote-region
+     :active (message-mark-active-p)
+     ,@(if (featurep 'xemacs) nil
+        '(:help "Quote MML tags in region"))]
     ["Validate MML" mml-validate t]
     ["Preview" mml-preview t]))
 
@@ -892,8 +893,13 @@ See Info node `(emacs-mime)Composing'.
   (when (set (make-local-variable 'mml-mode)
             (if (null arg) (not mml-mode)
               (> (prefix-numeric-value arg) 0)))
-    (gnus-add-minor-mode 'mml-mode " MML" mml-mode-map)
+    (add-minor-mode 'mml-mode " MML" mml-mode-map)
     (easy-menu-add mml-menu mml-mode-map)
+    (when (boundp 'x-dnd-protocol-alist)
+      (set (make-local-variable 'x-dnd-protocol-alist)
+          '(("^file:///" . mml-x-dnd-attach-file)
+            ("^file://"  . x-dnd-open-file)
+            ("^file:"    . mml-x-dnd-attach-file))))
     (run-hooks 'mml-mode-hook)))
 
 ;;;
@@ -940,10 +946,11 @@ See Info node `(emacs-mime)Composing'.
                      (if (string-match "^text/.*" type)
                          "inline"
                        "attachment")))
-        (disposition (completing-read "Disposition: "
-                                      '(("attachment") ("inline") (""))
-                                      nil
-                                      nil)))
+        (disposition (completing-read 
+                      (format "Disposition: (default %s): " default)
+                      '(("attachment") ("inline") (""))
+                      nil
+                      nil)))
     (if (not (equal disposition ""))
        disposition
       default)))
@@ -1010,6 +1017,15 @@ description of the attachment."
                        'disposition (or disposition "attachment")
                        'description description))
 
+(defun mml-x-dnd-attach-file (uri action)
+  "Attach a drag and drop file."
+  (let ((file (x-dnd-get-local-file-name uri t)))
+    (when (and file (file-regular-p file))
+      (let* ((type (mml-minibuffer-read-type file))
+           (description (mml-minibuffer-read-description))
+           (disposition (mml-minibuffer-read-disposition type)))
+       (mml-attach-file file type description disposition)))))
+
 (defun mml-attach-buffer (buffer &optional type description)
   "Attach a buffer to the outgoing MIME message.
 See `mml-attach-file' for details of operation."
index 13a4a4d..2b29b12 100644 (file)
@@ -1,5 +1,5 @@
 ;;; mml2015.el --- MIME Security with Pretty Good Privacy (PGP)
-;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: PGP MIME MML
 (defvar mml2015-use (or
                     (progn
                       (ignore-errors
-                        (require 'pgg))
+                       ;; Avoid the "Recursive load suspected" error
+                       ;; in Emacs 21.1.
+                       (let ((recursive-load-depth-limit 100))
+                         (require 'pgg)))
                       (and (fboundp 'pgg-sign-region)
                            'pgg))
                     (progn
@@ -50,7 +53,8 @@
                                 (fboundp 'mc-sign-generic)
                                 (fboundp 'mc-cleanup-recipient-headers)
                                 'mailcrypt)))
-  "The package used for PGP/MIME.")
+  "The package used for PGP/MIME.
+Valid packages include `pgg', `gpg' and `mailcrypt'.")
 
 ;; Something is not RFC2015.
 (defvar mml2015-function-alist
index 3bfc76d..b561885 100644 (file)
 ;;; Code:
 
 ;;;
-;;; .netrc and .authinforc parsing
+;;; .netrc and .authinfo rc parsing
 ;;;
 
+;; autoload password
 (eval-and-compile
-  (defalias 'netrc-point-at-eol
-    (if (fboundp 'point-at-eol)
-       'point-at-eol
-      'line-end-position)))
+  (autoload 'password-read "password"))
+
+(defgroup netrc nil
+ "Netrc configuration.")
+
+(defcustom netrc-encrypting-method nil
+  "Decoding method used for the netrc file.
+Use the OpenSSL symmetric ciphers here.  Leave nil for no
+decoding.  Encrypt the file with netrc-encrypt, but make sure you
+have set netrc-encrypting-method to a non-nil value."
+  :type '(choice
+         (const :tag "DES-3" "des3")
+         (const :tag "IDEA" "idea")
+         (const :tag "RC4" "rc4")
+         (string :tag "Explicit cipher name")
+         (const :tag "None" nil))
+  :group 'netrc)
+
+(defcustom netrc-openssl-path (executable-find "openssl")
+  "File path of the OpenSSL shell."
+  :type '(choice (file :tag "Location of openssl")
+                (const :tag "openssl is not installed" nil))
+  :group 'netrc)
+
+(defun netrc-encrypt (plain-file encrypted-file)
+  (interactive "fPlain File: \nFEncrypted File: ")
+  "Encrypt FILE to ENCRYPTED-FILE with netrc-encrypting-method cipher."
+  (when (and (file-exists-p plain-file)
+            (stringp encrypted-file)
+            netrc-encrypting-method
+            netrc-openssl-path)
+    (let ((buffer-file-coding-system 'binary)
+         (coding-system-for-read 'binary)
+         (coding-system-for-write 'binary)
+         (password 
+          (password-read
+           (format "OpenSSL Password for cipher %s? "
+                   netrc-encrypting-method)
+           (format "netrc-openssl-password-%s"
+                   netrc-encrypting-method))))
+      (when password
+       (with-temp-buffer
+         (insert-file-contents plain-file)
+         (setenv "NETRC_OPENSSL_PASSWORD" password)
+         (shell-command-on-region 
+          (point-min) 
+          (point-max)
+          (format "%s %s -pass env:NETRC_OPENSSL_PASSWORD -e"
+                  netrc-openssl-path
+                  netrc-encrypting-method)
+          t
+          t)
+         (write-file encrypted-file t))))))
 
 (defun netrc-parse (file)
+  (interactive "fFile to Parse: ")
   "Parse FILE and return an list of all entries in the file."
   (when (file-exists-p file)
     (with-temp-buffer
                      "password" "account" "macdef" "force"
                      "port"))
            alist elem result pair)
-       (insert-file-contents file)
+       (if (and netrc-encrypting-method
+                netrc-openssl-path)
+           (let ((buffer-file-coding-system 'binary)
+                 (coding-system-for-read 'binary)
+                 (coding-system-for-write 'binary)
+                 (password 
+                  (password-read
+                   (format "OpenSSL Password for cipher %s? "
+                           netrc-encrypting-method)
+                   (format "netrc-openssl-password-%s" 
+                           netrc-encrypting-method))))
+             (when password
+               (insert-file-contents file)
+               (setenv "NETRC_OPENSSL_PASSWORD" password)
+               (shell-command-on-region
+                (point-min) 
+                (point-max)
+                (format "%s %s -pass env:NETRC_OPENSSL_PASSWORD -d"
+                        netrc-openssl-path
+                        netrc-encrypting-method)
+                t
+                t)))
+         (insert-file-contents file))
        (goto-char (point-min))
        ;; Go through the file, line by line.
        (while (not (eobp))
-         (narrow-to-region (point) (netrc-point-at-eol))
+         (narrow-to-region (point) (point-at-eol))
          ;; For each line, get the tokens and values.
          (while (not (eobp))
            (skip-chars-forward "\t ")
index 9a1b353..ad84c5c 100644 (file)
@@ -70,9 +70,6 @@
 
 (defvoo nnbabyl-previous-buffer-mode nil)
 
-(eval-and-compile
-  (autoload 'gnus-set-text-properties "gnus-ems"))
-
 \f
 
 ;;; Interface functions
 
     (save-excursion
       (set-buffer nnbabyl-mbox-buffer)
-      (gnus-set-text-properties (point-min) (point-max) nil)
+      (set-text-properties (point-min) (point-max) nil)
       (while (and articles is-old)
        (goto-char (point-min))
        (when (search-forward (nnbabyl-article-string (car articles)) nil t)
index 02152b0..efd0a9c 100644 (file)
@@ -1,6 +1,6 @@
 ;;; nndb.el --- nndb access for Gnus
 
-;; Copyright (C) 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;         Kai Grossjohann <grossjohann@ls6.informatik.uni-dortmund.de>
 (eval-when-compile (require 'cl))
 
 (eval-and-compile
-  (autoload 'news-setup "rnewspost")
-  (autoload 'news-reply-mode "rnewspost")
-  (autoload 'cancel-timer "timer")
-  (autoload 'telnet "telnet" nil t)
   (autoload 'telnet-send-input "telnet" nil t)
   (autoload 'gnus-declare-backend "gnus-start"))
 
index 51cbd9a..28cf37e 100644 (file)
@@ -992,7 +992,7 @@ all.  This may very well take some time.")
                  (search-forward id nil t)) ; We find the ID.
        ;; And the id is in the fourth field.
        (if (not (and (search-backward "\t" nil t 4)
-                     (not (search-backward"\t" (gnus-point-at-bol) t))))
+                     (not (search-backward"\t" (point-at-bol) t))))
            (forward-line 1)
          (beginning-of-line)
          (setq found t)
index 169ea63..a76065d 100644 (file)
@@ -469,7 +469,7 @@ from the document.")
 (defun nndoc-forward-type-p ()
   (when (and (re-search-forward "^-+ \\(Start of \\)?forwarded message.*\n+"
                                nil t)
-            (looking-at "[\r\n]*[a-zA-Z][a-zA-Z0-9-]*:"))
+            (looking-at "[\r\n]*[a-zA-Z][a-zA-Z0-9-]*:\\|^>?From "))
     t))
 
 (defun nndoc-rfc934-type-p ()
index 4ac87bc..8ed01d7 100644 (file)
@@ -202,7 +202,7 @@ the group.  Then the marks file will be regenerated properly by Gnus.")
                        (goto-char (match-end 0))
                        (setq num (string-to-int
                                   (buffer-substring
-                                   (point) (gnus-point-at-eol))))
+                                   (point) (point-at-eol))))
                        (goto-char start)
                        (< num article)))
                      ;; Check that we are before an article with a
@@ -212,7 +212,7 @@ the group.  Then the marks file will be regenerated properly by Gnus.")
                      (progn
                        (setq num (string-to-int
                                   (buffer-substring
-                                   (point) (gnus-point-at-eol))))
+                                   (point) (point-at-eol))))
                        (> num article))
                      ;; Discard any article numbers before the one we're
                      ;; now looking at.
@@ -286,7 +286,7 @@ the group.  Then the marks file will be regenerated properly by Gnus.")
                  (if (search-forward (concat "\n" nnfolder-article-marker)
                                      nil t)
                      (string-to-int (buffer-substring
-                                     (point) (gnus-point-at-eol)))
+                                     (point) (point-at-eol)))
                    -1))))))))
 
 (deffoo nnfolder-request-group (group &optional server dont-check)
@@ -1174,7 +1174,7 @@ This command does not work if you use short group names."
       (let ((range (nth 0 action))
            (what  (nth 1 action))
            (marks (nth 2 action)))
-       (assert (or (eq what 'add) (eq what 'del)) t
+       (assert (or (eq what 'add) (eq what 'del)) nil
                "Unknown request-set-mark action: %s" what)
        (dolist (mark marks)
          (setq nnfolder-marks (gnus-update-alist-soft
@@ -1195,16 +1195,16 @@ This command does not work if you use short group names."
     (nnheader-message 8 "Updating marks for %s..." group)
     (nnfolder-open-marks group server)
     ;; Update info using `nnfolder-marks'.
-    (mapcar (lambda (pred)
-             (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
-               (gnus-info-set-marks
-                info
-                (gnus-update-alist-soft
-                 (cdr pred)
-                 (cdr (assq (cdr pred) nnfolder-marks))
-                 (gnus-info-marks info))
-                t)))
-           gnus-article-mark-lists)
+    (mapc (lambda (pred)
+           (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
+             (gnus-info-set-marks
+              info
+              (gnus-update-alist-soft
+               (cdr pred)
+               (cdr (assq (cdr pred) nnfolder-marks))
+               (gnus-info-marks info))
+              t)))
+         gnus-article-mark-lists)
     (let ((seen (cdr (assq 'read nnfolder-marks))))
       (gnus-info-set-read info
                          (if (and (integerp (car seen))
@@ -1240,7 +1240,7 @@ This command does not work if you use short group names."
                        nnfolder-marks-modtime))
       (error (or (gnus-yes-or-no-p
                  (format "Could not write to %s (%s).  Continue? " file err))
-                (error "Cannot write to %s (%s)" err))))))
+                (error "Cannot write to %s (%s)" file err))))))
 
 (defun nnfolder-open-marks (group server)
   (let ((file (nnfolder-group-marks-pathname group)))
index 01b573c..9e12f11 100644 (file)
@@ -105,7 +105,6 @@ on your system, you could say something like:
   (autoload 'nnmail-message-id "nnmail")
   (autoload 'mail-position-on-field "sendmail")
   (autoload 'message-remove-header "message")
-  (autoload 'gnus-point-at-eol "gnus-util")
   (autoload 'gnus-buffer-live-p "gnus-util"))
 
 ;;; Header access macros.
@@ -233,7 +232,7 @@ on your system, you could say something like:
 
 (defsubst nnheader-header-value ()
   (skip-chars-forward " \t")
-  (buffer-substring (point) (gnus-point-at-eol)))
+  (buffer-substring (point) (point-at-eol)))
 
 (defun nnheader-parse-naked-head (&optional number)
   ;; This function unfolds continuation lines in this buffer
@@ -279,9 +278,9 @@ on your system, you could say something like:
           (goto-char p)
           (if (search-forward "\nmessage-id:" nil t)
               (buffer-substring
-               (1- (or (search-forward "<" (gnus-point-at-eol) t)
+               (1- (or (search-forward "<" (point-at-eol) t)
                        (point)))
-               (or (search-forward ">" (gnus-point-at-eol) t) (point)))
+               (or (search-forward ">" (point-at-eol) t) (point)))
             ;; If there was no message-id, we just fake one to make
             ;; subsequent routines simpler.
             (nnheader-generate-fake-message-id)))
@@ -389,7 +388,7 @@ on your system, you could say something like:
        (nnheader-generate-fake-message-id))))
 
 (defun nnheader-parse-nov ()
-  (let ((eol (gnus-point-at-eol)))
+  (let ((eol (point-at-eol)))
     (vector
      (nnheader-nov-read-integer)       ; number
      (nnheader-nov-field)              ; subject
@@ -608,7 +607,7 @@ the line could be found."
       ;; This is invalid, but not all articles have Message-IDs.
       ()
     (mail-position-on-field "References")
-    (let ((begin (gnus-point-at-bol))
+    (let ((begin (point-at-bol))
          (fill-column 78)
          (fill-prefix "\t"))
       (when references
@@ -681,8 +680,7 @@ the line could be found."
 
 (defvar nnheader-directory-files-is-safe
   (or (eq system-type 'windows-nt)
-      (and (not (featurep 'xemacs))
-          (> emacs-major-version 20)))
+      (not (featurep 'xemacs)))
   "If non-nil, Gnus believes `directory-files' is safe.
 It has been reported numerous times that `directory-files' fails with
 an alarming frequency on NFS mounted file systems. If it is nil,
@@ -1005,7 +1003,6 @@ find-file-hooks, etc.
   "Strip all \r's from the current buffer."
   (nnheader-skeleton-replace "\r"))
 
-(defalias 'nnheader-run-at-time 'run-at-time)
 (defalias 'nnheader-cancel-timer 'cancel-timer)
 (defalias 'nnheader-cancel-function-timers 'cancel-function-timers)
 (defalias 'nnheader-string-as-multibyte 'string-as-multibyte)
index 5b6805a..2694ddf 100644 (file)
 
 ;;; Code:
 
-(if (condition-case nil
-       (progn
-         (unless (or itimer-process itimer-timer)
-           (itimer-driver-start))
-         ;; Check whether there is a bug to which the difference of
-         ;; the present time and the time when the itimer driver was
-         ;; woken up is subtracted from the initial itimer value.
-         (let* ((inhibit-quit t)
-                (ctime (current-time))
-                (itimer-timer-last-wakeup
-                 (prog1
-                     ctime
-                   (setcar ctime (1- (car ctime)))))
-                (itimer-list nil)
-                (itimer (start-itimer "nnheader-run-at-time" 'ignore 5)))
-           (sleep-for 0.1) ;; Accept the timeout interrupt.
-           (prog1
-               (> (itimer-value itimer) 0)
-             (delete-itimer itimer))))
-      (error nil))
-    (defun nnheader-xmas-run-at-time (time repeat function &rest args)
-      "Emulating function run as `run-at-time'.
-TIME should be nil meaning now, or a number of seconds from now.
-Return an itimer object which can be used in either `delete-itimer'
-or `cancel-timer'."
-      (apply #'start-itimer "nnheader-run-at-time"
-            function (if time (max time 1e-9) 1e-9)
-            repeat nil t args))
-  (defun nnheader-xmas-run-at-time (time repeat function &rest args)
-    "Emulating function run as `run-at-time' in the right way.
-TIME should be nil meaning now, or a number of seconds from now.
-Return an itimer object which can be used in either `delete-itimer'
-or `cancel-timer'."
-    (let ((itimers (list nil)))
-      (setcar
-       itimers
-       (apply #'start-itimer "nnheader-run-at-time"
-             (lambda (itimers repeat function &rest args)
-               (let ((itimer (car itimers)))
-                 (if repeat
-                     (progn
-                       (set-itimer-function
-                        itimer
-                        (lambda (itimer repeat function &rest args)
-                          (set-itimer-restart itimer repeat)
-                          (set-itimer-function itimer function)
-                          (set-itimer-function-arguments itimer args)
-                          (apply function args)))
-                       (set-itimer-function-arguments
-                        itimer
-                        (append (list itimer repeat function) args)))
-                   (set-itimer-function
-                    itimer
-                    (lambda (itimer function &rest args)
-                      (delete-itimer itimer)
-                      (apply function args)))
-                   (set-itimer-function-arguments
-                    itimer
-                    (append (list itimer function) args)))))
-             1e-9 (if time (max time 1e-9) 1e-9)
-             nil t itimers repeat function args)))))
+(require 'run-at-time)
 
-(defalias 'nnheader-run-at-time 'nnheader-xmas-run-at-time)
 (defalias 'nnheader-cancel-timer 'delete-itimer)
 (defalias 'nnheader-cancel-function-timers 'ignore)
 (defalias 'nnheader-string-as-multibyte 'identity)
index cf33d13..9c5d0a7 100644 (file)
@@ -402,6 +402,43 @@ just like \"ticked\" articles, in other IMAP clients.")
 If this is 'imap-mailbox-lsub, then use a server-side subscription list to
 restrict visible folders.")
 
+(defcustom nnimap-id nil
+  "Plist with client identity to send to server upon login.
+Nil means no information is sent, symbol `no' to disable ID query
+alltogheter, or plist with identifier-value pairs to send to
+server.  RFC 2971 describes the list as follows:
+
+   Any string may be sent as a field, but the following are defined to
+   describe certain values that might be sent.  Implementations are free
+   to send none, any, or all of these.  Strings are not case-sensitive.
+   Field strings MUST NOT be longer than 30 octets.  Value strings MUST
+   NOT be longer than 1024 octets.  Implementations MUST NOT send more
+   than 30 field-value pairs.
+
+     name            Name of the program
+     version         Version number of the program
+     os              Name of the operating system
+     os-version      Version of the operating system
+     vendor          Vendor of the client/server
+     support-url     URL to contact for support
+     address         Postal address of contact/vendor
+     date            Date program was released, specified as a date-time
+                       in IMAP4rev1
+     command         Command used to start the program
+     arguments       Arguments supplied on the command line, if any
+                       if any
+     environment     Description of environment, i.e., UNIX environment
+                       variables or Windows registry settings
+
+   Implementations MUST NOT send the same field name more than once.
+
+An example plist would be '(\"name\" \"Gnus\" \"version\" gnus-version-number
+\"os\" system-configuration \"vendor\" \"GNU\")."
+  :group 'nnimap
+  :type '(choice (const :tag "No information" nil)
+                (const :tag "Disable ID query" no)
+                (plist :key-type string :value-type string)))
+
 (defcustom nnimap-debug nil
   "If non-nil, random debug spews are placed in *nnimap-debug* buffer."
   :group 'nnimap
@@ -731,6 +768,7 @@ If EXAMINE is non-nil the group is selected read-only."
          (prog1
              (push (list server nnimap-server-buffer)
                    nnimap-server-buffer-alist)
+           (imap-id nnimap-id nnimap-server-buffer)
            (nnimap-possibly-change-server server))
        (imap-close nnimap-server-buffer)
        (kill-buffer nnimap-server-buffer)
@@ -792,8 +830,8 @@ Return nil if the server couldn't be closed for some reason."
 All buffers that have been created by that
 backend should be killed.  (Not the nntp-server-buffer, though.) This
 function is generally only called when Gnus is shutting down."
-  (mapcar (lambda (server) (nnimap-close-server (car server)))
-         nnimap-server-buffer-alist)
+  (mapc (lambda (server) (nnimap-close-server (car server)))
+       nnimap-server-buffer-alist)
   (setq nnimap-server-buffer-alist nil))
 
 (deffoo nnimap-status-message (&optional server)
@@ -1180,11 +1218,11 @@ function is generally only called when Gnus is shutting down."
              (if (memq 'dormant cmdmarks)
                  (setq cmdmarks (cons 'tick cmdmarks))))
            ;; remove stuff we are forbidden to store
-           (mapcar (lambda (mark)
-                     (if (imap-message-flag-permanent-p
-                          (nnimap-mark-to-flag mark))
-                         (setq marks (cons mark marks))))
-                   cmdmarks)
+           (mapc (lambda (mark)
+                   (if (imap-message-flag-permanent-p
+                        (nnimap-mark-to-flag mark))
+                       (setq marks (cons mark marks))))
+                 cmdmarks)
            (when (and range marks)
              (cond ((eq what 'del)
                     (imap-message-flags-del
@@ -1513,21 +1551,21 @@ function is generally only called when Gnus is shutting down."
       (error "Your server does not support ACL editing"))
     (with-current-buffer nnimap-server-buffer
       ;; delete all removed identifiers
-      (mapcar (lambda (old-acl)
-               (unless (assoc (car old-acl) new-acls)
-                 (or (imap-mailbox-acl-delete (car old-acl) mailbox)
-                     (error "Can't delete ACL for %s" (car old-acl)))))
-             old-acls)
+      (mapc (lambda (old-acl)
+             (unless (assoc (car old-acl) new-acls)
+               (or (imap-mailbox-acl-delete (car old-acl) mailbox)
+                   (error "Can't delete ACL for %s" (car old-acl)))))
+           old-acls)
       ;; set all changed acl's
-      (mapcar (lambda (new-acl)
-               (let ((new-rights (cdr new-acl))
-                     (old-rights (cdr (assoc (car new-acl) old-acls))))
-                 (unless (and old-rights new-rights
-                              (string= old-rights new-rights))
-                   (or (imap-mailbox-acl-set (car new-acl) new-rights mailbox)
-                       (error "Can't set ACL for %s to %s" (car new-acl)
-                              new-rights)))))
-             new-acls)
+      (mapc (lambda (new-acl)
+             (let ((new-rights (cdr new-acl))
+                   (old-rights (cdr (assoc (car new-acl) old-acls))))
+               (unless (and old-rights new-rights
+                            (string= old-rights new-rights))
+                 (or (imap-mailbox-acl-set (car new-acl) new-rights mailbox)
+                     (error "Can't set ACL for %s to %s" (car new-acl)
+                            new-rights)))))
+           new-acls)
       t)))
 
 \f
index fc0ff51..12c3b29 100644 (file)
@@ -227,7 +227,7 @@ Finds out what articles are to be part of the nnkiboze groups."
                          "." gnus-score-file-suffix))))))
 
 (defun nnkiboze-generate-group (group &optional inhibit-list-groups)
-  (let* ((info (nth 2 (gnus-gethash group gnus-newsrc-hashtb)))
+  (let* ((info (gnus-get-info group))
         (newsrc-file (concat nnkiboze-directory
                              (nnheader-translate-file-chars
                               (concat group ".newsrc"))))
@@ -269,8 +269,7 @@ Finds out what articles are to be part of the nnkiboze groups."
                  (numberp (car (symbol-value group))) ; It is active
                  (or (> nnkiboze-level 7)
                      (and (setq glevel
-                                (nth 1 (nth 2 (gnus-gethash
-                                               gname gnus-newsrc-hashtb))))
+                                (gnus-info-level (gnus-get-info gname)))
                           (>= nnkiboze-level glevel)))
                  (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
                  (push (cons gname (1- (car (symbol-value group))))
@@ -282,8 +281,7 @@ Finds out what articles are to be part of the nnkiboze groups."
          ;; number that has been kibozed in GROUP in this kiboze group.
          (setq newsrc nnkiboze-newsrc)
          (while newsrc
-           (if (not (setq active (gnus-gethash
-                                  (caar newsrc) gnus-active-hashtb)))
+           (if (not (setq active (gnus-active (caar newsrc))))
                ;; This group isn't active after all, so we remove it from
                ;; the list of component groups.
                (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
@@ -294,8 +292,7 @@ Finds out what articles are to be part of the nnkiboze groups."
              (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
              (setq ginfo (gnus-get-info (gnus-group-group-name))
                    orig-info (gnus-copy-sequence ginfo)
-                   num-unread (car (gnus-gethash (caar newsrc)
-                                                 gnus-newsrc-hashtb)))
+                   num-unread (gnus-group-unread (caar newsrc)))
              (unwind-protect
                  (progn
                    ;; We set all list of article marks to nil.  Since we operate
@@ -338,8 +335,7 @@ Finds out what articles are to be part of the nnkiboze groups."
                ;; Restore the proper info.
                (when ginfo
                  (setcdr ginfo (cdr orig-info)))
-               (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
-                       num-unread)))
+               (setcar (gnus-group-entry (caar newsrc)) num-unread)))
            (setcdr (car newsrc) (cdr active))
            (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
            (setq newsrc (cdr newsrc)))))
index 1008141..6391dd4 100644 (file)
     (mm-url-decode-entities)
     (while headers
       (goto-char (point-min))
-      (re-search-forward (format "<!-- %s=\"\\([^\"]+\\)" (car headers) nil t))
+      (re-search-forward (format "<!-- %s=\"\\([^\"]+\\)" (car headers)) nil t)
       (set (pop headers) (match-string 1)))
     (goto-char (point-min))
     (search-forward "<!-- body" nil t)
index c5d9392..2e19009 100644 (file)
@@ -31,7 +31,6 @@
 (require 'gnus)                                ; for macro gnus-kill-buffer, at least
 (require 'nnheader)
 (require 'message)
-(require 'custom)
 (require 'gnus-util)
 (require 'mail-source)
 (require 'mm-util)
@@ -403,13 +402,13 @@ This is copy of the `lazy' widget in Emacs 21.4 provided for compatibility."
                             (const :format "" &)
                             (editable-list :inline t nnmail-split-fancy))
                       (list :tag "Function with fixed arguments (:)"
-                            :value (: nil)
+                            :value (:)
                             (const :format "" :value :)
                             function 
                             (editable-list :inline t (sexp :tag "Arg"))
                             )
                       (list :tag "Function with split arguments (!)"
-                            :value (! nil)
+                            :value (!)
                             (const :format "" !)
                             function
                             (editable-list :inline t nnmail-split-fancy))
@@ -467,7 +466,7 @@ FIELD must match a complete field name.  VALUE must match a complete
 word according to the `nnmail-split-fancy-syntax-table' syntax table.
 You can use \".*\" in the regexps to match partial field names or words.
 
-FIELD and VALUE can also be lisp symbols, in that case they are expanded
+FIELD and VALUE can also be Lisp symbols, in that case they are expanded
 as specified in `nnmail-split-abbrev-alist'.
 
 GROUP can contain \\& and \\N which will substitute from matching
@@ -667,7 +666,7 @@ nn*-request-list should have been called before calling this function."
     (while (not (eobp))
       (condition-case err
          (progn
-           (narrow-to-region (point) (gnus-point-at-eol))
+           (narrow-to-region (point) (point-at-eol))
            (setq group (read buffer))
            (unless (stringp group)
              (setq group (symbol-name group)))
@@ -1105,7 +1104,7 @@ FUNC will be called with the group name to determine the article number."
        (while (not (eobp))
          (unless (< (move-to-column nnmail-split-header-length-limit)
                     nnmail-split-header-length-limit)
-           (delete-region (point) (gnus-point-at-eol)))
+           (delete-region (point) (point-at-eol)))
          (forward-line 1))
        ;; Allow washing.
        (goto-char (point-min))
@@ -1307,12 +1306,8 @@ to actually put the message in the right group."
 (defun nnmail-split-fancy ()
   "Fancy splitting method.
 See the documentation for the variable `nnmail-split-fancy' for details."
-  (let ((syntab (syntax-table)))
-    (unwind-protect
-       (progn
-         (set-syntax-table nnmail-split-fancy-syntax-table)
-         (nnmail-split-it nnmail-split-fancy))
-      (set-syntax-table syntab))))
+  (with-syntax-table nnmail-split-fancy-syntax-table
+    (nnmail-split-it nnmail-split-fancy)))
 
 (defvar nnmail-split-cache nil)
 ;; Alist of split expressions their equivalent regexps.
@@ -1614,7 +1609,7 @@ See the documentation for the variable `nnmail-split-fancy' for details."
        (skip-chars-forward "^\n\r\t")
        (unless (looking-at "[\r\n]")
          (forward-char 1)
-         (buffer-substring (point) (gnus-point-at-eol)))))))
+         (buffer-substring (point) (point-at-eol)))))))
 
 ;; Function for nnmail-split-fancy: look up all references in the
 ;; cache and if a match is found, return that group.
index 5391192..bd498a5 100644 (file)
@@ -229,7 +229,6 @@ by nnmaildir-request-article.")
 (defmacro nnmaildir--nov-dir   (dir) `(nnmaildir--subdir ,dir "nov"))
 (defmacro nnmaildir--marks-dir (dir) `(nnmaildir--subdir ,dir "marks"))
 (defmacro nnmaildir--num-dir   (dir) `(nnmaildir--subdir ,dir "num"))
-(defmacro nnmaildir--num-file  (dir) `(concat ,dir ":"))
 
 (defmacro nnmaildir--unlink (file-arg)
   `(let ((file ,file-arg))
@@ -237,20 +236,36 @@ by nnmaildir-request-article.")
 (defun nnmaildir--mkdir (dir)
   (or (file-exists-p (file-name-as-directory dir))
       (make-directory-internal (directory-file-name dir))))
+(defun nnmaildir--mkfile (file)
+  (write-region "" nil file nil 'no-message))
 (defun nnmaildir--delete-dir-files (dir ls)
   (when (file-attributes dir)
     (mapcar 'delete-file (funcall ls dir 'full "\\`[^.]" 'nosort))
     (delete-directory dir)))
 
 (defun nnmaildir--group-maxnum (server group)
-  (if (zerop (nnmaildir--grp-count group)) 0
-    (let ((x (nnmaildir--srvgrp-dir (nnmaildir--srv-dir server)
-                                   (nnmaildir--grp-name group))))
-      (setq x (nnmaildir--nndir x)
-           x (nnmaildir--num-dir x)
-           x (nnmaildir--num-file x)
-           x (file-attributes x))
-      (if x (1- (nth 1 x)) 0))))
+  (catch 'return
+    (if (zerop (nnmaildir--grp-count group)) (throw 'return 0))
+    (let ((dir (nnmaildir--srvgrp-dir (nnmaildir--srv-dir server)
+                                   (nnmaildir--grp-name group)))
+         (number-opened 1)
+         attr ino-opened nlink number-linked)
+      (setq dir (nnmaildir--nndir dir)
+           dir (nnmaildir--num-dir dir))
+      (while t
+       (setq attr (file-attributes
+                   (concat dir (number-to-string number-opened))))
+       (or attr (throw 'return (1- number-opened)))
+       (setq ino-opened (nth 10 attr)
+             nlink (nth 1 attr)
+             number-linked (+ number-opened nlink))
+       (if (or (< nlink 1) (< number-linked nlink))
+           (signal 'error '("Arithmetic overflow")))
+       (setq attr (file-attributes
+                   (concat dir (number-to-string number-linked))))
+       (or attr (throw 'return (1- number-linked)))
+       (if (/= ino-opened (nth 10 attr))
+           (setq number-opened number-linked))))))
 
 ;; Make the given server, if non-nil, be the current server.  Then make the
 ;; given group, if non-nil, be the current group of the current server.  Then
@@ -287,6 +302,56 @@ by nnmaildir-request-article.")
       (setq pos (match-end 0))))
   string)
 
+(defun nnmaildir--emlink-p (err)
+  (and (eq (car err) 'file-error)
+       (string= (caddr err) "too many links")))
+
+(defun nnmaildir--eexist-p (err)
+  (eq (car err) 'file-already-exists))
+
+(defun nnmaildir--new-number (nndir)
+  "Allocate a new article number by atomically creating a file under NNDIR."
+  (let ((numdir (nnmaildir--num-dir nndir))
+       (make-new-file t)
+       (number-open 1)
+       number-link previous-number-link path-open path-link ino-open)
+    (nnmaildir--mkdir numdir)
+    (catch 'return
+      (while t
+       (setq path-open (concat numdir (number-to-string number-open)))
+       (if (not make-new-file)
+           (setq previous-number-link number-link)
+         (nnmaildir--mkfile path-open)
+         ;; If Emacs had O_CREAT|O_EXCL, we could return number-open here.
+         (setq make-new-file nil
+               previous-number-link 0))
+       (let* ((attr (file-attributes path-open))
+              (nlink (nth 1 attr)))
+         (setq ino-open (nth 10 attr)
+               number-link (+ number-open nlink))
+         (if (or (< nlink 1) (< number-link nlink))
+             (signal 'error '("Arithmetic overflow"))))
+       (if (= number-link previous-number-link)
+           ;; We've already tried this number, in the previous loop iteration,
+           ;; and failed.
+           (signal 'error `("Corrupt internal nnmaildir data" ,path-open)))
+       (setq path-link (concat numdir (number-to-string number-link)))
+       (condition-case err
+           (progn
+             (add-name-to-file path-open path-link)
+             (throw 'return number-link))
+         (error
+          (cond
+           ((nnmaildir--emlink-p err)
+            (setq make-new-file t
+                  number-open number-link))
+           ((nnmaildir--eexist-p err)
+            (let ((attr (file-attributes path-link)))
+              (if (/= (nth 10 attr) ino-open)
+                  (setq number-open number-link
+                        number-link 0))))
+           (t (signal (car err) (cdr err))))))))))
+
 (defun nnmaildir--update-nov (server group article)
   (let ((nnheader-file-coding-system 'binary)
        (srv-dir (nnmaildir--srv-dir server))
@@ -398,30 +463,7 @@ by nnmaildir-request-article.")
                                      nnmaildir--extra)
              num (nnmaildir--art-num article))
        (unless num
-         ;; Allocate a new article number.
-         (erase-buffer)
-         (setq numdir (nnmaildir--num-dir dir)
-               file (nnmaildir--num-file numdir)
-               num -1)
-         (nnmaildir--mkdir numdir)
-         (write-region "" nil file nil 'no-message)
-         (while file
-           ;; Get the number of links to file.
-           (setq attr (nth 1 (file-attributes file)))
-           (if (= attr num)
-               ;; We've already tried this number, in the previous loop
-               ;; iteration, and failed.
-               (signal 'error `("Corrupt internal nnmaildir data" ,numdir)))
-           ;; If attr is 123, try to link file to "123".  This atomically
-           ;; increases the link count and creates the "123" link, failing
-           ;; if that link was already created by another Gnus, just after
-           ;; we stat()ed file.
-           (condition-case nil
-               (progn
-                 (add-name-to-file file (concat numdir (format "%x" attr)))
-                 (setq file nil)) ;; Stop looping.
-             (file-already-exists nil))
-           (setq num attr))
+         (setq num (nnmaildir--new-number dir))
          (setf (nnmaildir--art-num article) num))
        ;; Store this new NOV data in a file
        (erase-buffer)
@@ -682,8 +724,7 @@ by nnmaildir-request-article.")
              group (make-nnmaildir--grp :name gname :index 0))
        (nnmaildir--mkdir nndir)
        (nnmaildir--mkdir (nnmaildir--nov-dir   nndir))
-       (nnmaildir--mkdir (nnmaildir--marks-dir nndir))
-       (write-region "" nil (concat nndir "markfile") nil 'no-message))
+       (nnmaildir--mkdir (nnmaildir--marks-dir nndir)))
       (setq read-only (nnmaildir--param pgname 'read-only)
            ls (or (nnmaildir--param pgname 'directory-files) srv-ls))
       (unless read-only
@@ -1483,8 +1524,8 @@ by nnmaildir-request-article.")
        (coding-system-for-write nnheader-file-coding-system)
        (buffer-file-coding-system nil)
        (file-coding-system-alist nil)
-       del-mark del-action add-action set-action marksdir markfile nlist
-       ranges begin end article all-marks todo-marks did-marks mdir mfile
+       del-mark del-action add-action set-action marksdir nlist
+       ranges begin end article all-marks todo-marks mdir mfile
        pgname ls permarkfile deactivate-mark)
     (setq del-mark
          (lambda (mark)
@@ -1499,17 +1540,22 @@ by nnmaildir-request-article.")
               (setq mdir (nnmaildir--subdir marksdir (symbol-name mark))
                     permarkfile (concat mdir ":")
                     mfile (concat mdir (nnmaildir--art-prefix article)))
-              (unless (memq mark did-marks)
-                (setq did-marks (cons mark did-marks))
-                (nnmaildir--mkdir mdir)
-                (unless (file-attributes permarkfile)
-                  (condition-case nil
-                      (add-name-to-file markfile permarkfile)
-                    (file-error
-                     ;; AFS can't make hard links in separate directories
-                     (write-region "" nil permarkfile nil 'no-message)))))
-              (unless (file-exists-p mfile)
-                (add-name-to-file permarkfile mfile)))
+              (condition-case err
+                  (add-name-to-file permarkfile mfile)
+                (error
+                 (cond
+                  ((nnmaildir--eexist-p err))
+                  ((and (eq (car err) 'file-error)
+                        (string= (caddr err) "no such file or directory"))
+                   (nnmaildir--mkdir mdir)
+                   (nnmaildir--mkfile permarkfile)
+                   (add-name-to-file permarkfile mfile))
+                  ((nnmaildir--emlink-p err)
+                   (let ((permarkfilenew (concat permarkfile "{new}")))
+                     (nnmaildir--mkfile permarkfilenew)
+                     (rename-file permarkfilenew permarkfile 'replace)
+                     (add-name-to-file permarkfile mfile)))
+                  (t (signal (car err) (cdr err)))))))
             todo-marks))
          set-action (lambda (article)
                       (funcall add-action)
@@ -1529,7 +1575,6 @@ by nnmaildir-request-article.")
            marksdir (nnmaildir--srv-dir nnmaildir--cur-server)
            marksdir (nnmaildir--srvgrp-dir marksdir gname)
            marksdir (nnmaildir--nndir marksdir)
-           markfile (concat marksdir "markfile")
            marksdir (nnmaildir--marks-dir marksdir)
            gname (nnmaildir--grp-name group)
             pgname (nnmaildir--pgname nnmaildir--cur-server gname)
index 414f20a..4542443 100644 (file)
@@ -176,7 +176,7 @@ as unread by Gnus.")
        (nnheader-re-read-dir pathname)
        (setq dir
              (sort
-              (mapcar (lambda (name) (string-to-int name))
+              (mapcar 'string-to-int
                       (directory-files pathname nil "^[0-9]+$" t))
               '<))
        (cond
@@ -223,9 +223,8 @@ as unread by Gnus.")
        (nnmh-request-list-1 rdir))))
   ;; For each directory, generate an active file line.
   (unless (string= (expand-file-name nnmh-toplev) dir)
-    (let ((files (mapcar
-                 (lambda (name) (string-to-int name))
-                 (directory-files dir nil "^[0-9]+$" t))))
+    (let ((files (mapcar 'string-to-int
+                        (directory-files dir nil "^[0-9]+$" t))))
       (when files
        (save-excursion
          (set-buffer nntp-server-buffer)
@@ -356,11 +355,9 @@ as unread by Gnus.")
            nnmh-group-alist)
       (nnmh-possibly-create-directory group)
       (nnmh-possibly-change-directory group server)
-      (let ((articles (mapcar
-                      (lambda (file)
-                        (string-to-int file))
-                      (directory-files
-                       nnmh-current-directory nil "^[0-9]+$"))))
+      (let ((articles (mapcar 'string-to-int
+                             (directory-files
+                              nnmh-current-directory nil "^[0-9]+$"))))
        (when articles
          (setcar active (apply 'min articles))
          (setcdr active (apply 'max articles))))))
@@ -484,10 +481,8 @@ as unread by Gnus.")
        (gnus-make-directory dir))
       ;; Find the highest number in the group.
       (let ((files (sort
-                   (mapcar
-                    (lambda (f)
-                      (string-to-int f))
-                    (directory-files dir nil "^[0-9]+$"))
+                   (mapcar 'string-to-int
+                           (directory-files dir nil "^[0-9]+$"))
                    '>)))
        (when files
          (setcdr active (car files)))))
@@ -509,7 +504,7 @@ as unread by Gnus.")
   ;; articles in this folder.  The articles that are "new" will be
   ;; marked as unread by Gnus.
   (let* ((dir nnmh-current-directory)
-        (files (sort (mapcar (function (lambda (name) (string-to-int name)))
+        (files (sort (mapcar 'string-to-int
                              (directory-files nnmh-current-directory
                                               nil "^[0-9]+$" t))
                      '<))
index 0307faf..8083de6 100644 (file)
@@ -572,7 +572,7 @@ marks file will be regenerated properly by Gnus.")
                  (search-forward id nil t)) ; We find the ID.
        ;; And the id is in the fourth field.
        (if (not (and (search-backward "\t" nil t 4)
-                     (not (search-backward"\t" (gnus-point-at-bol) t))))
+                     (not (search-backward "\t" (point-at-bol) t))))
            (forward-line 1)
          (beginning-of-line)
          (setq found t)
@@ -699,7 +699,7 @@ marks file will be regenerated properly by Gnus.")
     (nnheader-insert-nov headers)))
 
 (defsubst nnml-header-value ()
-  (buffer-substring (match-end 0) (gnus-point-at-eol)))
+  (buffer-substring (match-end 0) (point-at-eol)))
 
 (defun nnml-parse-head (chars &optional number)
   "Parse the head of the current buffer."
@@ -923,7 +923,7 @@ Use the nov database for the current group if available."
       (let ((range (nth 0 action))
            (what  (nth 1 action))
            (marks (nth 2 action)))
-       (assert (or (eq what 'add) (eq what 'del)) t
+       (assert (or (eq what 'add) (eq what 'del)) nil
                "Unknown request-set-mark action: %s" what)
        (dolist (mark marks)
          (setq nnml-marks (gnus-update-alist-soft
@@ -941,16 +941,16 @@ Use the nov database for the current group if available."
     (nnheader-message 8 "Updating marks for %s..." group)
     (nnml-open-marks group server)
     ;; Update info using `nnml-marks'.
-    (mapcar (lambda (pred)
-             (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
-               (gnus-info-set-marks
-                info
-                (gnus-update-alist-soft
-                 (cdr pred)
-                 (cdr (assq (cdr pred) nnml-marks))
-                 (gnus-info-marks info))
-                t)))
-           gnus-article-mark-lists)
+    (mapc (lambda (pred)
+           (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
+             (gnus-info-set-marks
+              info
+              (gnus-update-alist-soft
+               (cdr pred)
+               (cdr (assq (cdr pred) nnml-marks))
+               (gnus-info-marks info))
+              t)))
+         gnus-article-mark-lists)
     (let ((seen (cdr (assq 'read nnml-marks))))
       (gnus-info-set-read info
                          (if (and (integerp (car seen))
@@ -984,7 +984,7 @@ Use the nov database for the current group if available."
                        nnml-marks-modtime))
       (error (or (gnus-yes-or-no-p
                  (format "Could not write to %s (%s).  Continue? " file err))
-                (error "Cannot write to %s (%s)" err))))))
+                (error "Cannot write to %s (%s)" file err))))))
 
 (defun nnml-open-marks (group server)
   (let ((file (expand-file-name
index 08a097d..9e26160 100644 (file)
@@ -32,8 +32,7 @@
 (defvar nnnil-status-string "")
 
 (defun nnnil-retrieve-headers (articles &optional group server fetch-old)
-  (save-excursion
-    (set-buffer nntp-server-buffer)
+  (with-current-buffer nntp-server-buffer
     (erase-buffer))
   'nov)
 
@@ -69,8 +68,7 @@
   t)
 
 (defun nnnil-request-list (&optional server)
-  (save-excursion
-    (set-buffer nntp-server-buffer)
+  (with-current-buffer nntp-server-buffer
     (erase-buffer))
   t)
 
index 35739a6..0662862 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnrss.el --- interfacing with RSS
-;; Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004  Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: RSS
@@ -54,7 +54,7 @@
 (defvoo nnrss-group-max 0)
 (defvoo nnrss-group-min 1)
 (defvoo nnrss-group nil)
-(defvoo nnrss-group-hashtb nil)
+(defvoo nnrss-group-hashtb (make-hash-table :test 'equal))
 (defvoo nnrss-status-string "")
 
 (defconst nnrss-version "nnrss 1.0")
@@ -75,7 +75,7 @@ To use the description in headers, put this name into `nnmail-extra-headers'.")
 (defvar nnrss-content-function nil
   "A function which is called in `nnrss-request-article'.
 The arguments are (ENTRY GROUP ARTICLE).
-ENTRY is the record of the current headline. GROUP is the group name.
+ENTRY is the record of the current headline.  GROUP is the group name.
 ARTICLE is the article number of the current headline.")
 
 (nnoo-define-basics nnrss)
@@ -167,28 +167,28 @@ ARTICLE is the article number of the current headline.")
                          (nth 2 e))))
            (insert "\n\n--" boundary "\nContent-Type: text/plain\n\n")
            (let ((point (point)))
-             (if text
-                 (progn (insert text)
-                        (goto-char point)
-                        (while (re-search-forward "\n" nil t)
-                          (replace-match " "))
-                        (goto-char (point-max))
-                        (insert "\n\n")))
-             (if link
-                 (insert link)))
+             (when text
+               (insert text)
+               (goto-char point)
+               (while (re-search-forward "\n" nil t)
+                 (replace-match " "))
+               (goto-char (point-max))
+               (insert "\n\n"))
+             (when link
+               (insert link)))
            (insert "\n\n--" boundary "\nContent-Type: text/html\n\n")
            (let ((point (point)))
-             (if text
-                 (progn (insert "<html><head></head><body>\n" text "\n</body></html>")
-                        (goto-char point)
-                        (while (re-search-forward "\n" nil t)
-                          (replace-match " "))
-                        (goto-char (point-max))
-                        (insert "\n\n")))
-             (if link
-                 (insert "<p><a href=\"" link "\">link</a></p>\n"))))
-         (if nnrss-content-function
-             (funcall nnrss-content-function e group article)))))
+             (when text
+               (insert "<html><head></head><body>\n" text "\n</body></html>")
+               (goto-char point)
+               (while (re-search-forward "\n" nil t)
+                 (replace-match " "))
+               (goto-char (point-max))
+               (insert "\n\n"))
+             (when link
+               (insert "<p><a href=\"" link "\">link</a></p>\n"))))
+         (when nnrss-content-function
+           (funcall nnrss-content-function e group article)))))
     (cond
      (err
       (nnheader-report 'nnrss err))
@@ -232,14 +232,8 @@ ARTICLE is the article number of the current headline.")
   (setq nnrss-server-data
        (delq (assoc group nnrss-server-data) nnrss-server-data))
   (nnrss-save-server-data server)
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat group (and server
-                                  (not (equal server ""))
-                                  "-")
-                       server ".el")) nnrss-directory)))
-    (ignore-errors
-      (delete-file file)))
+  (ignore-errors
+    (delete-file (nnrss-make-filename group server)))
   t)
 
 (deffoo nnrss-request-list-newsgroups (&optional server)
@@ -257,7 +251,7 @@ ARTICLE is the article number of the current headline.")
 ;;; Internal functions
 (eval-when-compile (defun xml-rpc-method-call (&rest args)))
 (defun nnrss-fetch (url &optional local)
-  "Fetch the url and put it in a the expected lisp structure."
+  "Fetch URL and put it in a the expected Lisp structure."
   (with-temp-buffer
   ;some CVS versions of url.el need this to close the connection quickly
     (let* (xmlform htmlform)
@@ -296,7 +290,7 @@ ARTICLE is the article number of the current headline.")
 (defvar nnrss-extra-categories '(nnrss-snarf-moreover-categories))
 
 (defun nnrss-generate-active ()
-  (if (y-or-n-p "fetch extra categories? ")
+  (if (y-or-n-p "Fetch extra categories? ")
       (dolist (func nnrss-extra-categories)
        (funcall func)))
   (save-excursion
@@ -312,85 +306,62 @@ ARTICLE is the article number of the current headline.")
 
 (defun nnrss-read-server-data (server)
   (setq nnrss-server-data nil)
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat "nnrss" (and server
-                                    (not (equal server ""))
-                                    "-")
-                       server
-                       ".el"))
-              nnrss-directory)))
+  (let ((file (nnrss-make-filename "nnrss" server)))
     (when (file-exists-p file)
-      (with-temp-buffer
-       (let ((coding-system-for-read 'binary)
-             emacs-lisp-mode-hook)
-         (insert-file-contents file)
-         (emacs-lisp-mode)
-         (goto-char (point-min))
-         (eval-buffer))))))
+      (let ((coding-system-for-read 'binary))
+       (load file nil nil t)))))
 
 (defun nnrss-save-server-data (server)
   (gnus-make-directory nnrss-directory)
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat "nnrss" (and server
-                                    (not (equal server ""))
-                                    "-")
-                       server ".el"))
-              nnrss-directory)))
-    (let ((coding-system-for-write 'binary)
-         print-level print-length)
-      (with-temp-file file
-       (insert "(setq nnrss-group-alist '"
-               (prin1-to-string nnrss-group-alist)
-               ")\n")
-       (insert "(setq nnrss-server-data '"
-               (prin1-to-string nnrss-server-data)
-               ")\n")))))
+  (let ((coding-system-for-write 'binary))
+    (with-temp-file (nnrss-make-filename "nnrss" server)
+      (gnus-prin1 `(setq nnrss-group-alist ',nnrss-group-alist))
+      (gnus-prin1 `(setq nnrss-server-data ',nnrss-server-data)))))
 
 (defun nnrss-read-group-data (group server)
   (setq nnrss-group-data nil)
-  (setq nnrss-group-hashtb (gnus-make-hashtable))
+  (if (hash-table-p nnrss-group-hashtb)
+      (clrhash nnrss-group-hashtb)
+    (setq nnrss-group-hashtb (make-hash-table :test 'equal)))
   (let ((pair (assoc group nnrss-server-data)))
     (setq nnrss-group-max (or (cadr pair) 0))
     (setq nnrss-group-min (+ nnrss-group-max 1)))
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat group (and server
-                                  (not (equal server ""))
-                                  "-")
-                       server ".el"))
-              nnrss-directory)))
+  (let ((file (nnrss-make-filename group server)))
     (when (file-exists-p file)
-      (with-temp-buffer
-       (let ((coding-system-for-read 'binary)
-             emacs-lisp-mode-hook)
-         (insert-file-contents file)
-         (emacs-lisp-mode)
-         (goto-char (point-min))
-         (eval-buffer)))
+      (let ((coding-system-for-read 'binary))
+       (load file nil t t))
       (dolist (e nnrss-group-data)
-       (gnus-sethash (nth 2 e) e nnrss-group-hashtb)
-       (if (and (car e) (> nnrss-group-min (car e)))
-           (setq nnrss-group-min (car e)))
-       (if (and (car e) (< nnrss-group-max (car e)))
-           (setq nnrss-group-max (car e)))))))
+       (puthash (or (nth 2 e) (nth 3 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)))
+         (setq nnrss-group-max (car e)))))))
 
 (defun nnrss-save-group-data (group server)
   (gnus-make-directory nnrss-directory)
-  (let ((file (expand-file-name
-              (nnrss-translate-file-chars
-               (concat group (and server
-                                  (not (equal server ""))
-                                  "-")
-                       server ".el"))
-              nnrss-directory)))
-    (let ((coding-system-for-write 'binary)
-         print-level print-length)
-      (with-temp-file file
-       (insert "(setq nnrss-group-data '"
-               (prin1-to-string nnrss-group-data)
-               ")\n")))))
+  (let ((coding-system-for-write 'binary))
+    (with-temp-file (nnrss-make-filename group server)
+      (gnus-prin1 `(setq nnrss-group-data ',nnrss-group-data)))))
+
+(defun nnrss-make-filename (name server)
+  (expand-file-name
+   (nnrss-translate-file-chars
+    (concat name
+           (and server
+                (not (equal server ""))
+                "-")
+           server
+           ".el"))
+   nnrss-directory))
+
+(gnus-add-shutdown 'nnrss-close 'gnus)
+
+(defun nnrss-close ()
+  "Clear internal nnrss variables."
+  (setq nnrss-group-data nil
+       nnrss-server-data nil
+       nnrss-group-hashtb nil
+       nnrss-group-alist nil))
 
 ;;; URL interface
 
@@ -449,11 +420,13 @@ ARTICLE is the article number of the current headline.")
          content-ns (nnrss-get-namespace-prefix xml "http://purl.org/rss/1.0/modules/content/"))
     (dolist (item (nreverse (nnrss-find-el (intern (concat rss-ns "item")) xml)))
       (when (and (listp item)
-                (eq (intern (concat rss-ns "item")) (car item))
-                (setq url (nnrss-decode-entities-unibyte-string
-                           (nnrss-node-text rss-ns 'link (cddr item))))
-                (not (gnus-gethash url nnrss-group-hashtb)))
-       (setq subject (nnrss-node-text rss-ns 'title item))
+                (string= (concat rss-ns "item") (car item))
+                (if (setq url (nnrss-decode-entities-unibyte-string
+                               (nnrss-node-text rss-ns 'link (cddr item))))
+                    (not (gethash url nnrss-group-hashtb))
+                  (setq subject (nnrss-node-text rss-ns 'title item))
+                  (not (gethash subject nnrss-group-hashtb))))
+       (setq subject (or subject (nnrss-node-text rss-ns 'title item)))
        (setq extra (or (nnrss-node-text content-ns 'encoded item)
                        (nnrss-node-text rss-ns 'description item)))
        (setq author (or (nnrss-node-text rss-ns 'author item)
@@ -472,8 +445,9 @@ ARTICLE is the article number of the current headline.")
          date
          (and extra (nnrss-decode-entities-unibyte-string extra)))
         nnrss-group-data)
-       (gnus-sethash url (car nnrss-group-data) nnrss-group-hashtb)
-       (setq changed t)))
+       (puthash (or url subject) t nnrss-group-hashtb)
+       (setq changed t))
+       (setq subject nil))
     (when changed
       (nnrss-save-group-data group server)
       (let ((pair (assoc group nnrss-server-data)))
@@ -482,6 +456,49 @@ ARTICLE is the article number of the current headline.")
          (push (list group nnrss-group-max) nnrss-server-data)))
       (nnrss-save-server-data server))))
 
+(defun nnrss-opml-import (opml-file)
+  "OPML subscriptions import.
+Read the file and attempt to subscribe to each Feed in the file."
+  (interactive "fImport file: ")
+  (mapcar
+   (lambda (node) (gnus-group-make-rss-group
+                   (cdr (assq 'xmlUrl (cadr node)))))
+   (nnrss-find-el 'outline
+                  (progn
+                    (find-file opml-file)
+                    (xml-parse-region (point-min)
+                                      (point-max))))))
+
+(defun nnrss-opml-export ()
+  "OPML subscription export.
+Export subscriptions to a buffer in OPML Format."
+  (interactive)
+  (with-current-buffer (get-buffer-create "*OPML Export*")
+    (mm-set-buffer-file-coding-system 'utf-8)
+    (insert (concat
+            "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+            "<!-- OPML generated by Emacs Gnus' nnrss.el -->\n"
+            "<opml version=\"1.1\">\n"
+            "  <head>\n"
+            "    <title>mySubscriptions</title>\n"
+            "    <dateCreated>" (format-time-string "%a, %d %b %Y %T %z")
+            "</dateCreated>\n"
+            "    <ownerEmail>" user-mail-address "</ownerEmail>\n"
+            "    <ownerName>" (user-full-name) "</ownerName>\n"
+            "  </head>\n"
+            "  <body>\n"))
+    (mapc (lambda (sub)
+           (insert (concat
+                    "    <outline text=\"" (car sub) "\" xmlUrl=\""
+                    (cadr sub) "\"/>\n")))
+         nnrss-group-alist)
+    (insert (concat
+            "  </body>\n"
+           "</opml>\n")))
+  (pop-to-buffer "*OPML Export*")
+  (when (fboundp 'sgml-mode)
+    (sgml-mode)))
+
 (defun nnrss-generate-download-script ()
   "Generate a download script in the current buffer.
 It is useful when `(setq nnrss-use-local t)'."
@@ -549,51 +566,52 @@ It is useful when `(setq nnrss-use-local t)'."
     node))
 
 (defun nnrss-find-el (tag data &optional found-list)
-  "Find the all matching elements in the data.  Careful with this on
-large documents!"
-  (if (listp data)
-      (mapcar (lambda (bit)
-               (if (car-safe bit)
-                   (progn (if (equal tag (car bit))
-                              (setq found-list
-                                    (append found-list
-                                            (list bit))))
-                          (if (and (listp (car-safe (caddr bit)))
-                                   (not (stringp (caddr bit))))
-                              (setq found-list
-                                    (append found-list
-                                            (nnrss-find-el
-                                             tag (caddr bit))))
-                            (setq found-list
-                                  (append found-list
-                                          (nnrss-find-el
-                                           tag (cddr bit))))))))
-               data))
+  "Find the all matching elements in the data.
+Careful with this on large documents!"
+  (when (listp data)
+    (mapc (lambda (bit)
+           (when (car-safe bit)
+             (when (equal tag (car bit))
+               (setq found-list
+                     (append found-list
+                             (list bit))))
+             (if (and (listp (car-safe (caddr bit)))
+                      (not (stringp (caddr bit))))
+                 (setq found-list
+                       (append found-list
+                               (nnrss-find-el
+                                tag (caddr bit))))
+               (setq found-list
+                     (append found-list
+                             (nnrss-find-el
+                              tag (cddr bit)))))))
+         data))
   found-list)
 
 (defun nnrss-rsslink-p (el)
   "Test if the element we are handed is an RSS autodiscovery link."
   (and (eq (car-safe el) 'link)
        (string-equal (cdr (assoc 'rel (cadr el))) "alternate")
-       (or (string-equal (cdr (assoc 'type (cadr el))) 
+       (or (string-equal (cdr (assoc 'type (cadr el)))
                         "application/rss+xml")
           (string-equal (cdr (assoc 'type (cadr el))) "text/xml"))))
 
 (defun nnrss-get-rsslinks (data)
   "Extract the <link> elements that are links to RSS from the parsed data."
-  (delq nil (mapcar 
+  (delq nil (mapcar
             (lambda (el)
               (if (nnrss-rsslink-p el) el))
             (nnrss-find-el 'link data))))
 
 (defun nnrss-extract-hrefs (data)
-  "Recursively extract hrefs from a page's source.  DATA should be
-the output of xml-parse-region or w3-parse-buffer."
+  "Recursively extract hrefs from a page's source.
+DATA should be the output of `xml-parse-region' or
+`w3-parse-buffer'."
   (mapcar (lambda (ahref)
            (cdr (assoc 'href (cadr ahref))))
          (nnrss-find-el 'a data)))
 
-(defmacro nnrss-match-macro (base-uri item 
+(defmacro nnrss-match-macro (base-uri item
                                           onsite-list offsite-list)
   `(cond ((or (string-match (concat "^" ,base-uri) ,item)
               (not (string-match "://" ,item)))
@@ -614,28 +632,28 @@ whether they are `offsite' or `onsite'."
        rss-onsite-in   rdf-onsite-in   xml-onsite-in
        rss-offsite-end rdf-offsite-end xml-offsite-end
        rss-offsite-in rdf-offsite-in xml-offsite-in)
-    (mapcar (lambda (href)
-             (if (not (null href))
-             (cond ((string-match "\\.rss$" href)
-                    (nnrss-match-macro
-                     base-uri href rss-onsite-end rss-offsite-end))
-                   ((string-match "\\.rdf$" href)
-                    (nnrss-match-macro 
-                     base-uri href rdf-onsite-end rdf-offsite-end))
-                   ((string-match "\\.xml$" href)
-                    (nnrss-match-macro
-                     base-uri href xml-onsite-end xml-offsite-end))
-                   ((string-match "rss" href)
-                    (nnrss-match-macro
-                     base-uri href rss-onsite-in rss-offsite-in))
-                   ((string-match "rdf" href)
-                    (nnrss-match-macro
-                     base-uri href rdf-onsite-in rdf-offsite-in))
-                   ((string-match "xml" href)
-                    (nnrss-match-macro
-                     base-uri href xml-onsite-in xml-offsite-in)))))
-           hrefs)
-    (append 
+    (mapc (lambda (href)
+           (if (not (null href))
+               (cond ((string-match "\\.rss$" href)
+                      (nnrss-match-macro
+                       base-uri href rss-onsite-end rss-offsite-end))
+                     ((string-match "\\.rdf$" href)
+                      (nnrss-match-macro
+                       base-uri href rdf-onsite-end rdf-offsite-end))
+                     ((string-match "\\.xml$" href)
+                      (nnrss-match-macro
+                       base-uri href xml-onsite-end xml-offsite-end))
+                     ((string-match "rss" href)
+                      (nnrss-match-macro
+                       base-uri href rss-onsite-in rss-offsite-in))
+                     ((string-match "rdf" href)
+                      (nnrss-match-macro
+                       base-uri href rdf-onsite-in rdf-offsite-in))
+                     ((string-match "xml" href)
+                      (nnrss-match-macro
+                       base-uri href xml-onsite-in xml-offsite-in)))))
+         hrefs)
+    (append
      rss-onsite-end  rdf-onsite-end  xml-onsite-end
      rss-onsite-in   rdf-onsite-in   xml-onsite-in
      rss-offsite-end rdf-offsite-end xml-offsite-end
@@ -668,7 +686,7 @@ whether they are `offsite' or `onsite'."
 ;;       - offsite links containing any of the above
          (let* ((base-uri (progn (string-match ".*://[^/]+/?" url)
                                  (match-string 0 url)))
-                (hrefs (nnrss-order-hrefs 
+                (hrefs (nnrss-order-hrefs
                         base-uri (nnrss-extract-hrefs parsed-page)))
                 (rss-link nil))
          (while (and (eq rss-link nil) (not (eq hrefs nil)))
@@ -684,7 +702,7 @@ whether they are `offsite' or `onsite'."
            (nnrss-find-rss-via-syndic8 url))))))))
 
 (defun nnrss-find-rss-via-syndic8 (url)
-  "query syndic8 for the rss feeds it has for the url."
+  "Query syndic8 for the rss feeds it has for URL."
   (if (not (locate-library "xml-rpc"))
       (progn
        (message "XML-RPC is not available... not checking Syndic8.")
@@ -695,22 +713,22 @@ whether they are `offsite' or `onsite'."
                   'syndic8.FindSites
                   url)))
       (when feedid
-       (let* ((feedinfo (xml-rpc-method-call 
+       (let* ((feedinfo (xml-rpc-method-call
                          "http://www.syndic8.com/xmlrpc.php"
                          'syndic8.GetFeedInfo
                          feedid))
               (urllist
-               (delq nil 
+               (delq nil
                      (mapcar
                       (lambda (listinfo)
-                        (if (string-equal 
+                        (if (string-equal
                              (cdr (assoc "status" listinfo))
                              "Syndicated")
                             (cons
                              (cdr (assoc "sitename" listinfo))
                              (list
                               (cons 'title
-                                    (cdr (assoc 
+                                    (cdr (assoc
                                           "sitename" listinfo)))
                               (cons 'href
                                     (cdr (assoc
@@ -719,20 +737,20 @@ whether they are `offsite' or `onsite'."
          (if (not (> (length urllist) 1))
              (cdar urllist)
            (let ((completion-ignore-case t)
-                 (selection 
+                 (selection
                   (mapcar (lambda (listinfo)
-                            (cons (cdr (assoc "sitename" listinfo)) 
-                                  (string-to-int 
+                            (cons (cdr (assoc "sitename" listinfo))
+                                  (string-to-int
                                    (cdr (assoc "feedid" listinfo)))))
                           feedinfo)))
-             (cdr (assoc 
+             (cdr (assoc
                    (completing-read
                     "Multiple feeds found.  Select one: "
                     selection nil t) urllist)))))))))
 
 (defun nnrss-rss-p (data)
-  "Test if data is an RSS feed.  Simply ensures that the first
-element is rss or rdf."
+  "Test if DATA is an RSS feed.
+Simply ensures that the first element is rss or rdf."
   (or (eq (caar data) 'rss)
       (eq (caar data) 'rdf:RDF)))
 
@@ -753,13 +771,13 @@ element is rss or rdf."
 that gives the URI for which you want to retrieve the namespace
 prefix), return the prefix."
   (let* ((prefix (car (rassoc uri (cadar el))))
-        (nslist (if prefix 
+        (nslist (if prefix
                     (split-string (symbol-name prefix) ":")))
         (ns (cond ((eq (length nslist) 1) ; no prefix given
                    "")
                   ((eq (length nslist) 2) ; extract prefix
                    (cadr nslist)))))
-    (if (and ns (not (eq ns "")))
+    (if (and ns (not (string= ns "")))
        (concat ns ":")
       ns)))
 
index d4eba69..cafc796 100644 (file)
@@ -244,8 +244,7 @@ there.")
        ;; Yes, completely empty spool directories *are* possible.
        ;; Fix by Sudish Joseph <joseph@cis.ohio-state.edu>
        (when (setq dir (directory-files pathname nil "^[0-9]+$" t))
-         (setq dir
-               (sort (mapcar (lambda (name) (string-to-int name)) dir) '<)))
+         (setq dir (sort (mapcar 'string-to-int dir) '<)))
        (if dir
            (nnheader-insert
             "211 %d %d %d %s\n" (length dir) (car dir)
index 4213bdc..b23c334 100644 (file)
@@ -1,7 +1,7 @@
 ;;; nntp.el --- nntp access for Gnus
 
 ;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993, 1994, 1995, 1996,
-;; 1997, 1998, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+;; 1997, 1998, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -80,6 +80,7 @@ Direct connections:
 
 Indirect connections:
 - `nntp-open-via-rlogin-and-telnet',
+- `nntp-open-via-rlogin-and-netcat',
 - `nntp-open-via-telnet-and-telnet'.")
 
 (defvoo nntp-pre-command nil
@@ -88,20 +89,22 @@ This is where you would put \"runsocks\" or stuff like that.")
 
 (defvoo nntp-telnet-command "telnet"
   "*Telnet command used to connect to the nntp server.
-This command is used by the various nntp-open-via-* methods.")
+This command is used by the methods `nntp-open-telnet-stream',
+`nntp-open-via-rlogin-and-telnet' and `nntp-open-via-telnet-and-telnet'.")
 
 (defvoo nntp-telnet-switches '("-8")
   "*Switches given to the telnet command `nntp-telnet-command'.")
 
 (defvoo nntp-end-of-line "\r\n"
   "*String to use on the end of lines when talking to the NNTP server.
-This is \"\\r\\n\" by default, but should be \"\\n\" when
-using and indirect connection method (nntp-open-via-*).")
+This is \"\\r\\n\" by default, but should be \"\\n\" when using and
+indirect telnet connection method (nntp-open-via-*-and-telnet).")
 
 (defvoo nntp-via-rlogin-command "rsh"
   "*Rlogin command used to connect to an intermediate host.
-This command is used by the `nntp-open-via-rlogin-and-telnet' method.
-The default is \"rsh\", but \"ssh\" is a popular alternative.")
+This command is used by the methods `nntp-open-via-rlogin-and-telnet'
+and `nntp-open-via-rlogin-and-netcat'.  The default is \"rsh\", but \"ssh\"
+is a popular alternative.")
 
 (defvoo nntp-via-rlogin-command-switches nil
   "*Switches given to the rlogin command `nntp-via-rlogin-command'.
@@ -117,9 +120,16 @@ This command is used by the `nntp-open-via-telnet-and-telnet' method.")
 (defvoo nntp-via-telnet-switches '("-8")
   "*Switches given to the telnet command `nntp-via-telnet-command'.")
 
+(defvoo nntp-via-netcat-command "nc"
+  "*Netcat command used to connect to the nntp server.
+This command is used by the `nntp-open-via-rlogin-and-netcat' method.")
+
+(defvoo nntp-via-netcat-switches nil
+  "*Switches given to the netcat command `nntp-via-netcat-command'.")
+
 (defvoo nntp-via-user-name nil
   "*User name to log in on an intermediate host with.
-This variable is used by the `nntp-open-via-telnet-and-telnet' method.")
+This variable is used by the various nntp-open-via-* methods.")
 
 (defvoo nntp-via-user-password nil
   "*Password to use to log in on an intermediate host with.
@@ -127,8 +137,7 @@ This variable is used by the `nntp-open-via-telnet-and-telnet' method.")
 
 (defvoo nntp-via-address nil
   "*Address of an intermediate host to connect to.
-This variable is used by the `nntp-open-via-rlogin-and-telnet' and
-`nntp-open-via-telnet-and-telnet' methods.")
+This variable is used by the various nntp-open-via-* methods.")
 
 (defvoo nntp-via-envuser nil
   "*Whether both telnet client and server support the ENVIRON option.
@@ -357,6 +366,11 @@ be restored and the command retried."
     (kill-buffer buffer)
     (nnheader-init-server-buffer)))
 
+(defun nntp-erase-buffer (buffer)
+  "Erase contents of BUFFER."
+  (with-current-buffer buffer
+    (erase-buffer)))
+
 (defsubst nntp-find-connection (buffer)
   "Find the connection delivering to BUFFER."
   (let ((alist nntp-connection-alist)
@@ -391,9 +405,7 @@ be restored and the command retried."
     (if process
         (progn
           (unless (or nntp-inhibit-erase nnheader-callback-function)
-            (save-excursion
-              (set-buffer (process-buffer process))
-              (erase-buffer)))
+           (nntp-erase-buffer (process-buffer process)))
           (condition-case err
               (progn
                 (when command
@@ -420,9 +432,7 @@ be restored and the command retried."
   "Send STRINGS to server and wait until WAIT-FOR returns."
   (when (and (not nnheader-callback-function)
             (not nntp-inhibit-output))
-    (save-excursion
-      (set-buffer nntp-server-buffer)
-      (erase-buffer)))
+    (nntp-erase-buffer nntp-server-buffer))
   (let* ((command (mapconcat 'identity strings " "))
         (process (nntp-find-connection nntp-server-buffer))
         (buffer (and process (process-buffer process)))
@@ -445,7 +455,7 @@ be restored and the command retried."
              (goto-char pos)
              (if (looking-at (regexp-quote command))
                  (delete-region pos (progn (forward-line 1)
-                                           (gnus-point-at-bol))))
+                                           (point-at-bol))))
              )))
       (nnheader-report 'nntp "Couldn't open connection to %s."
                       nntp-address))))
@@ -470,7 +480,7 @@ be restored and the command retried."
              (goto-char pos)
              (if (looking-at (regexp-quote command))
                  (delete-region pos (progn (forward-line 1)
-                                           (gnus-point-at-bol)))))))
+                                           (point-at-bol)))))))
       (nnheader-report 'nntp "Couldn't open connection to %s."
                       nntp-address))))
 
@@ -478,9 +488,7 @@ be restored and the command retried."
   "Send STRINGS to server and wait until WAIT-FOR returns."
   (when (and (not nnheader-callback-function)
             (not nntp-inhibit-output))
-    (save-excursion
-      (set-buffer nntp-server-buffer)
-      (erase-buffer)))
+    (nntp-erase-buffer nntp-server-buffer))
   (let* ((command (mapconcat 'identity strings " "))
         (process (nntp-find-connection nntp-server-buffer))
         (buffer (and process (process-buffer process)))
@@ -495,11 +503,11 @@ be restored and the command retried."
          (unless wait-for
            (nntp-accept-response)
            (save-excursion
-         (set-buffer buffer)
-         (goto-char pos)
-         (if (looking-at (regexp-quote command))
-             (delete-region pos (progn (forward-line 1) (gnus-point-at-bol))))
-         )))
+             (set-buffer buffer)
+             (goto-char pos)
+             (if (looking-at (regexp-quote command))
+                 (delete-region pos (progn (forward-line 1) (point-at-bol))))
+             )))
       (nnheader-report 'nntp "Couldn't open connection to %s."
                       nntp-address))))
 
@@ -508,9 +516,8 @@ be restored and the command retried."
   "Send the current buffer to server and wait until WAIT-FOR returns."
   (when (and (not nnheader-callback-function)
             (not nntp-inhibit-output))
-    (save-excursion
-      (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
-      (erase-buffer)))
+    (nntp-erase-buffer
+     (nntp-find-connection-buffer nntp-server-buffer)))
   (nntp-encode-text)
   (mm-with-unibyte-current-buffer
     ;; Some encoded unicode text contains character 0x80-0x9f e.g. Euro.
@@ -572,7 +579,7 @@ command whose response triggered the error."
 
              (let ((timer
                     (and nntp-connection-timeout
-                         (nnheader-run-at-time
+                         (run-at-time
                           nntp-connection-timeout nil
                           '(lambda ()
                              (let ((process (nntp-find-connection
@@ -674,8 +681,7 @@ command whose response triggered the error."
      (catch 'done
        (save-excursion
          ;; Erase nntp-server-buffer before nntp-inhibit-erase.
-         (set-buffer nntp-server-buffer)
-         (erase-buffer)
+        (nntp-erase-buffer nntp-server-buffer)
          (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
          ;; The first time this is run, this variable is `try'.  So we
          ;; try.
@@ -1063,7 +1069,7 @@ password contained in '~/.nntp-authinfo'."
       (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" (user-login-name))
       (nntp-send-command
        "^2.*\r?\n" "AUTHINFO PASS"
-       (buffer-substring (point) (gnus-point-at-eol))))))
+       (buffer-substring (point) (point-at-eol))))))
 
 ;;; Internal functions.
 
@@ -1073,9 +1079,7 @@ password contained in '~/.nntp-authinfo'."
     (funcall nntp-authinfo-function)
     ;; We have to re-send the function that was interrupted by
     ;; the authinfo request.
-    (save-excursion
-      (set-buffer nntp-server-buffer)
-      (erase-buffer))
+    (nntp-erase-buffer nntp-server-buffer)
     (nntp-send-string process last)))
 
 (defun nntp-make-process-buffer (buffer)
@@ -1101,7 +1105,7 @@ password contained in '~/.nntp-authinfo'."
   (let* ((pbuffer (nntp-make-process-buffer buffer))
         (timer
          (and nntp-connection-timeout
-              (nnheader-run-at-time
+              (run-at-time
                nntp-connection-timeout nil
                `(lambda ()
                   (nntp-kill-buffer ,pbuffer)))))
@@ -1210,7 +1214,7 @@ password contained in '~/.nntp-authinfo'."
   ;; doesn't trigger after-change-functions.
   (unless nntp-async-timer
     (setq nntp-async-timer
-         (nnheader-run-at-time 1 1 'nntp-async-timer-handler)))
+         (run-at-time 1 1 'nntp-async-timer-handler)))
   (add-to-list 'nntp-async-process-list process))
 
 (defun nntp-async-timer-handler ()
@@ -1338,9 +1342,7 @@ password contained in '~/.nntp-authinfo'."
                (nntp-send-command "^[245].*\n" "GROUP" group)
                (setcar (cddr entry) group)
                (erase-buffer)
-               (save-excursion
-                 (set-buffer nntp-server-buffer)
-                 (erase-buffer))))))))
+              (nntp-erase-buffer nntp-server-buffer)))))))
 
 (defun nntp-decode-text (&optional cr-only)
   "Decode the text in the current buffer."
@@ -1549,10 +1551,8 @@ password contained in '~/.nntp-authinfo'."
          (setq commands (cdr commands)))
        ;; If none of the commands worked, we disable XOVER.
        (when (eq nntp-server-xover 'try)
-         (save-excursion
-           (set-buffer nntp-server-buffer)
-           (erase-buffer)
-           (setq nntp-server-xover nil)))
+         (nntp-erase-buffer nntp-server-buffer)
+         (setq nntp-server-xover nil))
         nntp-server-xover))))
 
 (defun nntp-find-group-and-number (&optional group)
@@ -1801,6 +1801,36 @@ Please refer to the following variables to customize the connection:
       (delete-region (point) (point-max)))
     proc))
 
+(defun nntp-open-via-rlogin-and-netcat (buffer)
+  "Open a connection to an nntp server through an intermediate host.
+First rlogin to the remote host, and then connect to the real news
+server from there using the netcat command.
+
+Please refer to the following variables to customize the connection:
+- `nntp-pre-command',
+- `nntp-via-rlogin-command',
+- `nntp-via-rlogin-command-switches',
+- `nntp-via-user-name',
+- `nntp-via-address',
+- `nntp-via-netcat-command',
+- `nntp-via-netcat-switches',
+- `nntp-address',
+- `nntp-port-number',
+- `nntp-end-of-line'."
+  (let ((command `(,@(when nntp-pre-command
+                      (list nntp-pre-command))
+                  ,nntp-via-rlogin-command
+                  ,@(when nntp-via-rlogin-command-switches
+                      nntp-via-rlogin-command-switches)
+                  ,@(when nntp-via-user-name
+                      (list "-l" nntp-via-user-name))
+                  ,nntp-via-address
+                  ,nntp-via-netcat-command
+                  ,@nntp-via-netcat-switches
+                  ,nntp-address
+                  ,nntp-port-number)))
+    (apply 'start-process "nntpd" buffer command)))
+
 (defun nntp-open-via-telnet-and-telnet (buffer)
   "Open a connection to an nntp server through an intermediate host.
 First telnet the remote host, and then telnet the real news server
index 185dd6b..6657369 100644 (file)
@@ -338,9 +338,9 @@ component group will show up when you enter the virtual group.")
     (let ((gnus-group-marked (copy-sequence nnvirtual-component-groups))
          (gnus-expert-user t))
       ;; Make sure all groups are activated.
-      (mapcar
+      (mapc
        (lambda (g)
-        (when (not (numberp (car (gnus-gethash g gnus-newsrc-hashtb))))
+        (when (not (numberp (gnus-group-unread g)))
           (gnus-activate-group g)))
        nnvirtual-component-groups)
       (save-excursion
@@ -400,7 +400,7 @@ component group will show up when you enter the virtual group.")
   (looking-at
    "[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t")
   (goto-char (match-end 0))
-  (unless (search-forward "\t" (gnus-point-at-eol) 'move)
+  (unless (search-forward "\t" (point-at-eol) 'move)
     (insert "\t"))
 
   ;; Remove any spaces at the beginning of the Xref field.
@@ -416,8 +416,8 @@ component group will show up when you enter the virtual group.")
   ;; component server prefix.
   (save-restriction
     (narrow-to-region (point)
-                     (or (search-forward "\t" (gnus-point-at-eol) t)
-                         (gnus-point-at-eol)))
+                     (or (search-forward "\t" (point-at-eol) t)
+                         (point-at-eol)))
     (goto-char (point-min))
     (when (re-search-forward "Xref: *[^\n:0-9 ]+ *" nil t)
       (replace-match "" t t))
@@ -663,8 +663,7 @@ numbers has no corresponding component article, then it is left out of
 the result."
   (when (numberp (cdr-safe articles))
     (setq articles (list articles)))
-  (let ((carticles (mapcar (lambda (g) (list g))
-                          nnvirtual-component-groups))
+  (let ((carticles (mapcar 'list nnvirtual-component-groups))
        a i j article entry)
     (while (setq a (pop articles))
       (if (atom a)
@@ -677,8 +676,8 @@ the result."
          (setq entry (assoc (car article) carticles))
          (setcdr entry (cons (cdr article) (cdr entry))))
        (setq i (1+ i))))
-    (mapcar (lambda (x) (setcdr x (nreverse (cdr x))))
-           carticles)
+    (mapc (lambda (x) (setcdr x (nreverse (cdr x))))
+         carticles)
     carticles))
 
 
@@ -700,29 +699,29 @@ based on the marks on the component groups."
     ;; Into all-unreads we put (g unreads).
     ;; Into all-marks we put (g marks).
     ;; We also increment cnt and tot here, and compute M (max of sizes).
-    (mapcar (lambda (g)
-             (setq active (gnus-activate-group g)
-                   min (car active)
-                   max (cdr active))
-             (when (and active (>= max min) (not (zerop max)))
-               ;; store active information
-               (push (list g (- max min -1) max) actives)
-               ;; collect unread/mark info for later
-               (setq unreads (gnus-list-of-unread-articles g))
-               (setq marks (gnus-info-marks (gnus-get-info g)))
-               (when gnus-use-cache
-                 (push (cons 'cache
-                             (gnus-cache-articles-in-group g))
-                       marks))
-               (push (cons g unreads) all-unreads)
-               (push (cons g marks) all-marks)
-               ;; count groups, total #articles, and max size
-               (setq size (- max min -1))
-               (setq cnt (1+ cnt)
-                     tot (+ tot size)
-                     M (max M size))))
-           nnvirtual-component-groups)
-
+    (mapc (lambda (g)
+           (setq active (gnus-activate-group g)
+                 min (car active)
+                 max (cdr active))
+           (when (and active (>= max min) (not (zerop max)))
+             ;; store active information
+             (push (list g (- max min -1) max) actives)
+             ;; collect unread/mark info for later
+             (setq unreads (gnus-list-of-unread-articles g))
+             (setq marks (gnus-info-marks (gnus-get-info g)))
+             (when gnus-use-cache
+               (push (cons 'cache
+                           (gnus-cache-articles-in-group g))
+                     marks))
+             (push (cons g unreads) all-unreads)
+             (push (cons g marks) all-marks)
+             ;; count groups, total #articles, and max size
+             (setq size (- max min -1))
+             (setq cnt (1+ cnt)
+                   tot (+ tot size)
+                   M (max M size))))
+         nnvirtual-component-groups)
+    
     ;; Number of articles in the virtual group.
     (setq nnvirtual-mapping-len tot)
 
index 893cd17..85d03d5 100644 (file)
@@ -533,7 +533,7 @@ Valid types include `google', `dejanews', and `gmane'.")
             (nth 1 parse)
             " "))
     (insert ">\n")
-    (mapcar 'nnweb-insert-html (nth 2 parse))
+    (mapc 'nnweb-insert-html (nth 2 parse))
     (insert "</" (symbol-name (car parse)) ">\n")))
 
 (defun nnweb-parse-find (type parse &optional maxdepth)
diff --git a/lisp/ntlm.el b/lisp/ntlm.el
new file mode 100644 (file)
index 0000000..84522c5
--- /dev/null
@@ -0,0 +1,536 @@
+;;; ntlm.el --- NTLM (NT LanManager) authentication support
+
+;; Copyright (C) 2001 Taro Kawagishi
+;; Author: Taro Kawagishi <tarok@transpulse.org>
+;; Keywords: NTLM, SASL
+;; Version: 1.00
+;; Created: February 2001
+
+;; This program 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.
+;;
+;; This program 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 this program; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This library is a direct translation of the Samba release 2.2.0
+;; implementation of Windows NT and LanManager compatible password
+;; encryption.
+;; 
+;; Interface functions:
+;; 
+;; ntlm-build-auth-request
+;;   This will return a binary string, which should be used in the
+;;   base64 encoded form and it is the caller's responsibility to encode
+;;   the returned string with base64.
+;;
+;; ntlm-build-auth-response
+;;   It is the caller's responsibility to pass a base64 decoded string
+;;   (which will be a binary string) as the first argument and to
+;;   encode the returned string with base64.  The second argument user
+;;   should be given in user@domain format.
+;; 
+;; ntlm-get-password-hashes
+;;
+;;
+;; NTLM authentication procedure example:
+;;
+;;  1. Open a network connection to the Exchange server at the IMAP port (143)
+;;  2. Receive an opening message such as:
+;;     "* OK Microsoft Exchange IMAP4rev1 server version 5.5.2653.7 (XXXX) ready"
+;;  3. Ask for IMAP server capability by sending "NNN capability"
+;;  4. Receive a capability message such as:
+;;     "* CAPABILITY IMAP4 IMAP4rev1 IDLE LITERAL+ LOGIN-REFERRALS MAILBOX-REFERRALS NAMESPACE AUTH=NTLM"
+;;  5. Ask for NTLM authentication by sending a string
+;;     "NNN authenticate ntlm"
+;;  6. Receive continuation acknowledgment "+"
+;;  7. Send NTLM authentication request generated by 'ntlm-build-auth-request
+;;  8. Receive NTLM challenge string following acknowledgment "+"
+;;  9. Generate response to challenge by 'ntlm-build-auth-response
+;;     (here two hash function values of the user password are encrypted)
+;; 10. Receive authentication completion message such as
+;;     "NNN OK AUTHENTICATE NTLM completed."
+
+;;; Code:
+
+(require 'md4)
+
+;;;
+;;; NTLM authentication interface functions
+
+(defun ntlm-build-auth-request (user &optional domain)
+  "Return the NTLM authentication request string for USER and DOMAIN.
+USER is a string representing a user name to be authenticated and
+DOMAIN is a NT domain.  USER can include a NT domain part as in
+user@domain where the string after @ is used as the domain if DOMAIN
+is not given."
+  (interactive)
+  (let ((request-ident (concat "NTLMSSP" (make-string 1 0)))
+       (request-msgType (concat (make-string 1 1) (make-string 3 0)))
+                                       ;0x01 0x00 0x00 0x00
+       (request-flags (concat (make-string 1 7) (make-string 1 178)
+                              (make-string 2 0)))
+                                       ;0x07 0xb2 0x00 0x00
+       lu ld off-d off-u)
+    (when (string-match "@" user)
+      (unless domain
+       (setq domain (substring user (1+ (match-beginning 0)))))
+      (setq user (substring user 0 (match-beginning 0))))
+    ;; set fields offsets within the request struct
+    (setq lu (length user))
+    (setq ld (length domain))
+    (setq off-u 32)                    ;offset to the string 'user
+    (setq off-d (+ 32 lu))             ;offset to the string 'domain
+    ;; pack the request struct in a string
+    (concat request-ident              ;8 bytes
+           request-msgType     ;4 bytes
+           request-flags               ;4 bytes
+           (md4-pack-int16 lu) ;user field, count field
+           (md4-pack-int16 lu) ;user field, max count field
+           (md4-pack-int32 (cons 0 off-u)) ;user field, offset field
+           (md4-pack-int16 ld) ;domain field, count field
+           (md4-pack-int16 ld) ;domain field, max count field
+           (md4-pack-int32 (cons 0 off-d)) ;domain field, offset field
+           user                        ;bufer field
+           domain              ;bufer field
+           )))
+
+(eval-when-compile
+  (defmacro ntlm-string-as-unibyte (string)
+    (if (fboundp 'string-as-unibyte)
+       `(string-as-unibyte ,string)
+      string)))
+
+(defun ntlm-build-auth-response (challenge user password-hashes)
+  "Return the response string to a challenge string CHALLENGE given by
+the NTLM based server for the user USER and the password hash list
+PASSWORD-HASHES.  NTLM uses two hash values which are represented
+by PASSWORD-HASHES.  PASSWORD-HASHES should be a return value of
+ (list (ntlm-smb-passwd-hash password) (ntlm-md4hash password))"
+  (let* ((rchallenge (ntlm-string-as-unibyte challenge))
+        ;; get fields within challenge struct
+        ;;(ident (substring rchallenge 0 8))   ;ident, 8 bytes
+        ;;(msgType (substring rchallenge 8 12))        ;msgType, 4 bytes
+        (uDomain (substring rchallenge 12 20)) ;uDomain, 8 bytes
+        (flags (substring rchallenge 20 24))   ;flags, 4 bytes
+        (challengeData (substring rchallenge 24 32)) ;challengeData, 8 bytes
+        uDomain-len uDomain-offs
+        ;; response struct and its fields
+        lmRespData                     ;lmRespData, 24 bytes
+        ntRespData                     ;ntRespData, 24 bytes
+        domain                         ;ascii domain string
+        lu ld off-lm off-nt off-d off-u off-w off-s)
+    ;; extract domain string from challenge string
+    (setq uDomain-len (md4-unpack-int16 (substring uDomain 0 2)))
+    (setq uDomain-offs (md4-unpack-int32 (substring uDomain 4 8)))
+    (setq domain
+         (ntlm-unicode2ascii (substring challenge
+                                        (cdr uDomain-offs)
+                                        (+ (cdr uDomain-offs) uDomain-len))
+                             (/ uDomain-len 2)))
+    ;; overwrite domain in case user is given in <user>@<domain> format
+    (when (string-match "@" user)
+      (setq domain (substring user (1+ (match-beginning 0))))
+      (setq user (substring user 0 (match-beginning 0))))
+
+    ;; generate response data
+    (setq lmRespData
+         (ntlm-smb-owf-encrypt (car password-hashes) challengeData))
+    (setq ntRespData
+         (ntlm-smb-owf-encrypt (cadr password-hashes) challengeData))
+
+    ;; get offsets to fields to pack the response struct in a string
+    (setq lu (length user))
+    (setq ld (length domain))
+    (setq off-lm 64)                   ;offset to string 'lmResponse
+    (setq off-nt (+ 64 24))            ;offset to string 'ntResponse
+    (setq off-d (+ 64 48))             ;offset to string 'uDomain
+    (setq off-u (+ 64 48 (* 2 ld)))    ;offset to string 'uUser
+    (setq off-w (+ 64 48 (* 2 (+ ld lu)))) ;offset to string 'uWks
+    (setq off-s (+ 64 48 (* 2 (+ ld lu lu)))) ;offset to string 'sessionKey
+    ;; pack the response struct in a string
+    (concat "NTLMSSP\0"                        ;response ident field, 8 bytes
+           (md4-pack-int32 '(0 . 3))   ;response msgType field, 4 bytes
+
+           ;; lmResponse field, 8 bytes
+           ;;AddBytes(response,lmResponse,lmRespData,24);
+           (md4-pack-int16 24)         ;len field
+           (md4-pack-int16 24)         ;maxlen field
+           (md4-pack-int32 (cons 0 off-lm)) ;field offset
+
+           ;; ntResponse field, 8 bytes
+           ;;AddBytes(response,ntResponse,ntRespData,24);
+           (md4-pack-int16 24)         ;len field
+           (md4-pack-int16 24)         ;maxlen field
+           (md4-pack-int32 (cons 0 off-nt)) ;field offset
+
+           ;; uDomain field, 8 bytes
+           ;;AddUnicodeString(response,uDomain,domain);
+           ;;AddBytes(response, uDomain, udomain, 2*ld);
+           (md4-pack-int16 (* 2 ld))   ;len field
+           (md4-pack-int16 (* 2 ld))   ;maxlen field
+           (md4-pack-int32 (cons 0 off-d)) ;field offset
+
+           ;; uUser field, 8 bytes
+           ;;AddUnicodeString(response,uUser,u);
+           ;;AddBytes(response, uUser, uuser, 2*lu);
+           (md4-pack-int16 (* 2 lu))   ;len field
+           (md4-pack-int16 (* 2 lu))   ;maxlen field
+           (md4-pack-int32 (cons 0 off-u)) ;field offset
+
+           ;; uWks field, 8 bytes
+           ;;AddUnicodeString(response,uWks,u);
+           (md4-pack-int16 (* 2 lu))   ;len field
+           (md4-pack-int16 (* 2 lu))   ;maxlen field
+           (md4-pack-int32 (cons 0 off-w)) ;field offset
+
+           ;; sessionKey field, 8 bytes
+           ;;AddString(response,sessionKey,NULL);
+           (md4-pack-int16 0)          ;len field
+           (md4-pack-int16 0)          ;maxlen field
+           (md4-pack-int32 (cons 0 (- off-s off-lm))) ;field offset
+
+           ;; flags field, 4 bytes
+           flags                       ;
+
+           ;; buffer field
+           lmRespData                  ;lmResponse, 24 bytes
+           ntRespData                  ;ntResponse, 24 bytes
+           (ntlm-ascii2unicode domain  ;unicode domain string, 2*ld bytes
+                               (length domain)) ;
+           (ntlm-ascii2unicode user    ;unicode user string, 2*lu bytes
+                               (length user)) ;
+           (ntlm-ascii2unicode user    ;unicode user string, 2*lu bytes
+                               (length user)) ;
+           )))
+
+(defun ntlm-get-password-hashes (password)
+  "Return a pair of SMB hash and NT MD4 hash of the given password PASSWORD"
+  (list (ntlm-smb-passwd-hash password)
+       (ntlm-md4hash password)))
+
+(defun ntlm-ascii2unicode (str len)
+  "Convert an ASCII string into a NT Unicode string, which is
+little-endian utf16."
+  (let ((utf (make-string (* 2 len) 0)) (i 0) val)
+    (while (and (< i len)
+               (not (zerop (setq val (aref str i)))))
+      (aset utf (* 2 i) val)
+      (aset utf (1+ (* 2 i)) 0)
+      (setq i (1+ i)))
+    utf))
+
+(defun ntlm-unicode2ascii (str len)
+  "Extract 7 bits ASCII part of a little endian utf16 string STR of length LEN."
+  (let ((buf (make-string len 0)) (i 0) (j 0))
+    (while (< i len)
+      (aset buf i (logand (aref str j) 127)) ;(string-to-number "7f" 16)
+      (setq i (1+ i)
+           j (+ 2 j)))
+    buf))
+
+(defun ntlm-smb-passwd-hash (passwd)
+  "Return the SMB password hash string of 16 bytes long for the given password
+string PASSWD.  PASSWD is truncated to 14 bytes if longer."
+  (let ((len (min (length passwd) 14)))
+    (ntlm-smb-des-e-p16
+     (concat (substring (upcase passwd) 0 len) ;fill top 14 bytes with passwd
+            (make-string (- 15 len) 0)))))
+
+(defun ntlm-smb-owf-encrypt (passwd c8)
+  "Return the response string of 24 bytes long for the given password
+string PASSWD based on the DES encryption.  PASSWD is of at most 14
+bytes long and the challenge string C8 of 8 bytes long."
+  (let ((len (min (length passwd) 16)) p22)
+    (setq p22 (concat (substring passwd 0 len) ;fill top 16 bytes with passwd
+                     (make-string (- 22 len) 0)))
+    (ntlm-smb-des-e-p24 p22 c8)))
+
+(defun ntlm-smb-des-e-p24 (p22 c8)
+  "Return a 24 bytes hashed string for a 21 bytes string P22 and a 8 bytes
+string C8."
+  (concat (ntlm-smb-hash c8 p22 t)             ;hash first 8 bytes of p22
+         (ntlm-smb-hash c8 (substring p22 7) t)
+         (ntlm-smb-hash c8 (substring p22 14) t)))
+
+(defconst ntlm-smb-sp8 [75 71 83 33 64 35 36 37])
+
+(defun ntlm-smb-des-e-p16 (p15)
+  "Return a 16 bytes hashed string for a 15 bytes string P15."
+  (concat (ntlm-smb-hash ntlm-smb-sp8 p15 t)   ;hash of first 8 bytes of p15
+         (ntlm-smb-hash ntlm-smb-sp8           ;hash of last 8 bytes of p15
+                        (substring p15 7) t)))
+
+(defun ntlm-smb-hash (in key forw)
+  "Return the hash string of length 8 for a string IN of length 8 and
+a string KEY of length 8.  FORW is t or nil."
+  (let ((out (make-string 8 0))
+       outb                            ;string of length 64
+       (inb (make-string 64 0))
+       (keyb (make-string 64 0))
+       (key2 (ntlm-smb-str-to-key key))
+       (i 0) aa)
+    (while (< i 64)
+      (unless (zerop (logand (aref in (/ i 8)) (lsh 1 (- 7 (% i 8)))))
+       (aset inb i 1))
+      (unless (zerop (logand (aref key2 (/ i 8)) (lsh 1 (- 7 (% i 8)))))
+       (aset keyb i 1))
+      (setq i (1+ i)))
+    (setq outb (ntlm-smb-dohash inb keyb forw))
+    (setq i 0)
+    (while (< i 64)
+      (unless (zerop (aref outb i))
+       (setq aa (aref out (/ i 8)))
+       (aset out (/ i 8)
+             (logior aa (lsh 1 (- 7 (% i 8))))))
+      (setq i (1+ i)))
+    out))
+
+(defun ntlm-smb-str-to-key (str)
+  "Return a string of length 8 for the given string STR of length 7."
+  (let ((key (make-string 8 0))
+       (i 7))
+    (aset key 0 (lsh (aref str 0) -1))
+    (aset key 1 (logior
+                (lsh (logand (aref str 0) 1) 6)
+                (lsh (aref str 1) -2)))
+    (aset key 2 (logior
+                (lsh (logand (aref str 1) 3) 5)
+                (lsh (aref str 2) -3)))
+    (aset key 3 (logior
+                (lsh (logand (aref str 2) 7) 4)
+                (lsh (aref str 3) -4)))
+    (aset key 4 (logior
+                (lsh (logand (aref str 3) 15) 3)
+                (lsh (aref str 4) -5)))
+    (aset key 5 (logior
+                (lsh (logand (aref str 4) 31) 2)
+                (lsh (aref str 5) -6)))
+    (aset key 6 (logior
+                (lsh (logand (aref str 5) 63) 1)
+                (lsh (aref str 6) -7)))
+    (aset key 7 (logand (aref str 6) 127))
+    (while (>= i 0)
+      (aset key i (lsh (aref key i) 1))
+      (setq i (1- i)))
+    key))
+
+(defconst ntlm-smb-perm1 [57 49 41 33 25 17  9
+                    1 58 50 42 34 26 18
+                    10  2 59 51 43 35 27
+                    19 11  3 60 52 44 36
+                    63 55 47 39 31 23 15
+                    7 62 54 46 38 30 22
+                    14  6 61 53 45 37 29
+                    21 13  5 28 20 12  4])
+
+(defconst ntlm-smb-perm2 [14 17 11 24  1  5
+                    3 28 15  6 21 10
+                    23 19 12  4 26  8
+                    16  7 27 20 13  2
+                    41 52 31 37 47 55
+                    30 40 51 45 33 48
+                    44 49 39 56 34 53
+                    46 42 50 36 29 32])
+
+(defconst ntlm-smb-perm3 [58 50 42 34 26 18 10  2
+                    60 52 44 36 28 20 12  4
+                    62 54 46 38 30 22 14  6
+                    64 56 48 40 32 24 16  8
+                    57 49 41 33 25 17  9  1
+                    59 51 43 35 27 19 11  3
+                    61 53 45 37 29 21 13  5
+                    63 55 47 39 31 23 15  7])
+
+(defconst ntlm-smb-perm4 [32  1  2  3  4  5
+                    4  5  6  7  8  9
+                    8  9 10 11 12 13
+                    12 13 14 15 16 17
+                    16 17 18 19 20 21
+                    20 21 22 23 24 25
+                    24 25 26 27 28 29
+                    28 29 30 31 32  1])
+
+(defconst ntlm-smb-perm5 [16  7 20 21
+                    29 12 28 17
+                    1 15 23 26
+                    5 18 31 10
+                    2  8 24 14
+                    32 27  3  9
+                    19 13 30  6
+                    22 11  4 25])
+
+(defconst ntlm-smb-perm6 [40  8 48 16 56 24 64 32
+                    39  7 47 15 55 23 63 31
+                    38  6 46 14 54 22 62 30
+                    37  5 45 13 53 21 61 29
+                    36  4 44 12 52 20 60 28
+                    35  3 43 11 51 19 59 27
+                    34  2 42 10 50 18 58 26
+                    33  1 41  9 49 17 57 25])
+
+(defconst ntlm-smb-sc [1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1])
+
+(defconst ntlm-smb-sbox [[[14  4 13  1  2 15 11  8  3 10  6 12  5  9  0  7]
+                    [ 0 15  7  4 14  2 13  1 10  6 12 11  9  5  3  8]
+                    [ 4  1 14  8 13  6  2 11 15 12  9  7  3 10  5  0]
+                    [15 12  8  2  4  9  1  7  5 11  3 14 10  0  6 13]]
+                   [[15  1  8 14  6 11  3  4  9  7  2 13 12  0  5 10]
+                    [ 3 13  4  7 15  2  8 14 12  0  1 10  6  9 11  5]
+                    [ 0 14  7 11 10  4 13  1  5  8 12  6  9  3  2 15]
+                    [13  8 10  1  3 15  4  2 11  6  7 12  0  5 14  9]]
+                   [[10  0  9 14  6  3 15  5  1 13 12  7 11  4  2  8]
+                    [13  7  0  9  3  4  6 10  2  8  5 14 12 11 15  1]
+                    [13  6  4  9  8 15  3  0 11  1  2 12  5 10 14  7]
+                    [ 1 10 13  0  6  9  8  7  4 15 14  3 11  5  2 12]]
+                   [[ 7 13 14  3  0  6  9 10  1  2  8  5 11 12  4 15]
+                    [13  8 11  5  6 15  0  3  4  7  2 12  1 10 14  9]
+                    [10  6  9  0 12 11  7 13 15  1  3 14  5  2  8  4]
+                    [ 3 15  0  6 10  1 13  8  9  4  5 11 12  7  2 14]]
+                   [[ 2 12  4  1  7 10 11  6  8  5  3 15 13  0 14  9]
+                    [14 11  2 12  4  7 13  1  5  0 15 10  3  9  8  6]
+                    [ 4  2  1 11 10 13  7  8 15  9 12  5  6  3  0 14]
+                    [11  8 12  7  1 14  2 13  6 15  0  9 10  4  5  3]]
+                   [[12  1 10 15  9  2  6  8  0 13  3  4 14  7  5 11]
+                    [10 15  4  2  7 12  9  5  6  1 13 14  0 11  3  8]
+                    [ 9 14 15  5  2  8 12  3  7  0  4 10  1 13 11  6]
+                    [ 4  3  2 12  9  5 15 10 11 14  1  7  6  0  8 13]]
+                   [[ 4 11  2 14 15  0  8 13  3 12  9  7  5 10  6  1]
+                    [13  0 11  7  4  9  1 10 14  3  5 12  2 15  8  6]
+                    [ 1  4 11 13 12  3  7 14 10 15  6  8  0  5  9  2]
+                    [ 6 11 13  8  1  4 10  7  9  5  0 15 14  2  3 12]]
+                   [[13  2  8  4  6 15 11  1 10  9  3 14  5  0 12  7]
+                    [ 1 15 13  8 10  3  7  4 12  5  6 11  0 14  9  2]
+                    [ 7 11  4  1  9 12 14  2  0  6 10 13 15  3  5  8]
+                    [ 2  1 14  7  4 10  8 13 15 12  9  0  3  5  6 11]]])
+
+(defsubst ntlm-string-permute (in perm n)
+  "Return a string of length N for a string IN and a permutation vector
+PERM of size N.  The length of IN should be height of PERM."
+  (let ((i 0) (out (make-string n 0)))
+    (while (< i n)
+      (aset out i (aref in (- (aref perm i) 1)))
+      (setq i (1+ i)))
+    out))
+
+(defsubst ntlm-string-lshift (str count len)
+  "Return a string by circularly shifting a string STR by COUNT to the left.
+length of STR is LEN."
+  (let ((c (% count len)))
+    (concat (substring str c len) (substring str 0 c))))
+
+(defsubst ntlm-string-xor (in1 in2 n)
+  "Return exclusive-or of sequences in1 and in2"
+  (let ((w (make-string n 0)) (i 0))
+    (while (< i n)
+      (aset w i (logxor (aref in1 i) (aref in2 i)))
+      (setq i (1+ i)))
+    w))
+
+(defun ntlm-smb-dohash (in key forw)
+  "Return the hash value for a string IN and a string KEY.
+Length of IN and KEY are 64.  FORW non nill means forward, nil means
+backward."
+  (let (pk1                            ;string of length 56
+       c                               ;string of length 28
+       d                               ;string of length 28
+       cd                              ;string of length 56
+       (ki (make-vector 16 0))         ;vector of string of length 48
+       pd1                             ;string of length 64
+       l                               ;string of length 32
+       r                               ;string of length 32
+       rl                              ;string of length 64
+       (i 0) (j 0) (k 0))
+    (setq pk1 (ntlm-string-permute key ntlm-smb-perm1 56))
+    (setq c (substring pk1 0 28))
+    (setq d (substring pk1 28 56))
+
+    (setq i 0)
+    (while (< i 16)
+      (setq c (ntlm-string-lshift c (aref ntlm-smb-sc i) 28))
+      (setq d (ntlm-string-lshift d (aref ntlm-smb-sc i) 28))
+      (setq cd (concat (substring c 0 28) (substring d 0 28)))
+      (aset ki i (ntlm-string-permute cd ntlm-smb-perm2 48))
+      (setq i (1+ i)))
+
+    (setq pd1 (ntlm-string-permute in ntlm-smb-perm3 64))
+
+    (setq l (substring pd1 0 32))
+    (setq r (substring pd1 32 64))
+
+    (setq i 0)
+    (let (er                           ;string of length 48
+         erk                           ;string of length 48
+         (b (make-vector 8 0))         ;vector of strings of length 6
+         cb                            ;string of length 32
+         pcb                           ;string of length 32
+         r2                            ;string of length 32
+         jj m n bj sbox-jmn)
+      (while (< i 16)
+       (setq er (ntlm-string-permute r ntlm-smb-perm4 48))
+       (setq erk (ntlm-string-xor er
+                      (aref ki (if forw i (- 15 i)))
+                      48))
+       (setq j 0)
+       (while (< j 8)
+         (setq jj (* 6 j))
+         (aset b j (substring erk jj (+ jj 6)))
+         (setq j (1+ j)))
+       (setq j 0)
+       (while (< j 8)
+         (setq bj (aref b j))
+         (setq m (logior (lsh (aref bj 0) 1) (aref bj 5)))
+         (setq n (logior (lsh (aref bj 1) 3)
+                         (lsh (aref bj 2) 2)
+                         (lsh (aref bj 3) 1)
+                         (aref bj 4)))
+         (setq k 0)
+         (setq sbox-jmn (aref (aref (aref ntlm-smb-sbox j) m) n))
+         (while (< k 4)
+           (aset bj k
+                 (if (zerop (logand sbox-jmn (lsh 1 (- 3 k))))
+                     0 1))
+           (setq k (1+ k)))
+         (setq j (1+ j)))
+
+       (setq j 0)
+       (setq cb nil)
+       (while (< j 8)
+         (setq cb (concat cb (substring (aref b j) 0 4)))
+         (setq j (1+ j)))
+
+       (setq pcb (ntlm-string-permute cb ntlm-smb-perm5 32))
+       (setq r2 (ntlm-string-xor l pcb 32))
+       (setq l r)
+       (setq r r2)
+       (setq i (1+ i))))
+    (setq rl (concat r l))
+    (ntlm-string-permute rl ntlm-smb-perm6 64)))
+
+(defun ntlm-md4hash (passwd)
+  "Return the 16 bytes MD4 hash of a string PASSWD after converting it
+into a Unicode string.  PASSWD is truncated to 128 bytes if longer."
+  (let (len wpwd)
+    ;; Password cannot be longer than 128 characters
+    (setq len (length passwd))
+    (if (> len 128)
+       (setq len 128))
+    ;; Password must be converted to NT unicode
+    (setq wpwd (ntlm-ascii2unicode passwd len))
+    ;; Calculate length in bytes
+    (setq len (* len 2))
+    (md4 wpwd len)))
+
+(provide 'ntlm)
+
+;;; ntlm.el ends here
diff --git a/lisp/password.el b/lisp/password.el
new file mode 100644 (file)
index 0000000..4683a9c
--- /dev/null
@@ -0,0 +1,111 @@
+;;; password.el --- Read passwords from user, possibly using a password cache.
+
+;; Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+
+;; Author: Simon Josefsson <simon@josefsson.org>
+;; Created: 2003-12-21
+;; Keywords: password cache passphrase key
+
+;; 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., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Greatly influenced by pgg.el written by Daiki Ueno, with timer
+;; fixes for XEmacs by Katsumi Yamaoka.  In fact, this is mostly just
+;; a rip-off.
+;;
+;; (password-read "Password? " "test")
+;; ;; Minibuffer prompt for password.
+;;  => "foo"
+;;
+;; (password-cache-add "test" "foo")
+;;  => nil
+;;
+;; (password-read "Password? " "test")
+;; ;; No minibuffer prompt
+;;  => "foo"
+;;
+;; (password-read "Password? " "test")
+;; ;; No minibuffer prompt
+;;  => "foo"
+;;
+;; ;; Wait `password-cache-expiry' seconds.
+;;
+;; (password-read "Password? " "test")
+;; ;; Minibuffer prompt for password is back.
+;;  => "foo"
+
+;;; Code:
+
+(when (featurep 'xemacs)
+  (require 'run-at-time))
+
+(eval-when-compile
+  (require 'cl))
+
+(defcustom password-cache t
+  "Whether to cache passwords."
+  :group 'password
+  :type 'boolean)
+
+(defcustom password-cache-expiry 16
+  "How many seconds passwords are cached, or nil to disable expiring.
+Whether passwords are cached at all is controlled by `password-cache'."
+  :group 'password
+  :type '(choice (const :tag "Never" nil)
+                (integer :tag "Seconds")))
+
+(defvar password-data (make-vector 7 0))
+
+(defun password-read (prompt &optional key)
+  "Read password, for use with KEY, from user, or from cache if wanted.
+KEY indicate the purpose of the password, so the cache can
+separate passwords.  The cache is not used if KEY is nil.  It is
+typically a string.
+The variable `password-cache' control whether the cache is used."
+  (or (and password-cache
+          key
+          (symbol-value (intern-soft key password-data)))
+      (read-passwd prompt)))
+
+(defun password-cache-remove (key)
+  "Remove password indexed by KEY from password cache.
+This is typically run be a timer setup from `password-cache-add',
+but can be invoked at any time to forcefully remove passwords
+from the cache.  This may be useful when it has been detected
+that a password is invalid, so that `password-read' query the
+user again."
+  (let ((password (symbol-value (intern-soft key password-data))))
+    (when password
+      (fillarray password ?_)
+      (unintern key password-data))))
+
+(defun password-cache-add (key password)
+  "Add password to cache.
+The password is removed by a timer after `password-cache-expiry'
+seconds."
+  (set (intern key password-data) password)
+  (when password-cache-expiry
+    (run-at-time password-cache-expiry nil
+                #'password-cache-remove
+                key))
+  nil)
+
+(provide 'password)
+
+;;; password.el ends here
index 5209ba4..45dd5ab 100644 (file)
@@ -25,8 +25,6 @@
 
 ;;; Code:
 
-(require 'custom)
-
 (defgroup pgg ()
   "Glue for the various PGP implementations."
   :group 'mime)
index 94c1b3a..d453abf 100644 (file)
@@ -1,6 +1,6 @@
 ;;; pgg-gpg.el --- GnuPG support for PGG.
 
-;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Created: 1999/10/28
       (with-temp-buffer
        (apply #'call-process pgg-gpg-program nil t nil args)
        (goto-char (point-min))
-       (while (re-search-forward "^\\(sec\\|pub\\):"  nil t)
-         (push (substring
-                (nth 3 (split-string
-                        (buffer-substring (match-end 0)
-                                          (progn (end-of-line) (point)))
-                        ":")) 8)
+       (while (re-search-forward
+               "^\\(sec\\|pub\\):[^:]*:[^:]*:[^:]*:\\([^:]*\\)" nil t)
+         (push (substring (match-string 2) 8)
                pgg-gpg-all-secret-keys)))))
   pgg-gpg-all-secret-keys)
 
     (with-temp-buffer
       (apply #'call-process pgg-gpg-program nil t nil args)
       (goto-char (point-min))
-      (if (re-search-forward "^\\(sec\\|pub\\):"  nil t)
-         (substring
-          (nth 3 (split-string
-                  (buffer-substring (match-end 0)
-                                    (progn (end-of-line)(point)))
-                  ":")) 8)))))
+      (if (re-search-forward "^\\(sec\\|pub\\):[^:]*:[^:]*:[^:]*:\\([^:]*\\)"
+                            nil t)
+         (substring (match-string 2) 8)))))
 
 (defun pgg-gpg-encrypt-region (start end recipients &optional sign)
   "Encrypt the current region between START and END.
index 1515887..9c2a3a4 100644 (file)
@@ -37,8 +37,6 @@
 
 (eval-when-compile (require 'cl))
 
-(require 'custom)
-
 (defgroup pgg-parse ()
   "OpenPGP packet parsing"
   :group 'pgg)
index 673e24a..50dc3ea 100644 (file)
@@ -1,6 +1,6 @@
 ;;; pgg.el --- glue for the various PGP implementations.
 
-;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Created: 1999/10/28
@@ -29,7 +29,7 @@
 
 (require 'pgg-def)
 (require 'pgg-parse)
-(autoload 'run-at-time "timer")
+(require 'password)
 
 ;; Don't merge these two `eval-when-compile's.
 (eval-when-compile
        (set-buffer standard-output)
        (insert-buffer-substring pgg-errors-buffer)))))
 
-(defvar pgg-passphrase-cache (make-vector 7 0))
-
 (defun pgg-read-passphrase (prompt &optional key)
-  (or (and pgg-cache-passphrase
-          key (setq key (pgg-truncate-key-identifier key))
-          (symbol-value (intern-soft key pgg-passphrase-cache)))
-      (read-passwd prompt)))
-
-(eval-when-compile
-  (defvar itimer-process)
-  (defvar itimer-timer)
-  (autoload 'delete-itimer "itimer")
-  (autoload 'itimer-driver-start "itimer")
-  (autoload 'itimer-value "itimer")
-  (autoload 'set-itimer-function "itimer")
-  (autoload 'set-itimer-function-arguments "itimer")
-  (autoload 'set-itimer-restart "itimer")
-  (autoload 'start-itimer "itimer"))
-
-(eval-and-compile
-  (defalias
-    'pgg-run-at-time
-    (if (featurep 'xemacs)
-       (if (condition-case nil
-               (progn
-                 (unless (or itimer-process itimer-timer)
-                   (itimer-driver-start))
-                 ;; Check whether there is a bug to which the difference of
-                 ;; the present time and the time when the itimer driver was
-                 ;; woken up is subtracted from the initial itimer value.
-                 (let* ((inhibit-quit t)
-                        (ctime (current-time))
-                        (itimer-timer-last-wakeup
-                         (prog1
-                             ctime
-                           (setcar ctime (1- (car ctime)))))
-                        (itimer-list nil)
-                        (itimer (start-itimer "pgg-run-at-time" 'ignore 5)))
-                   (sleep-for 0.1) ;; Accept the timeout interrupt.
-                   (prog1
-                       (> (itimer-value itimer) 0)
-                     (delete-itimer itimer))))
-             (error nil))
-           (lambda (time repeat function &rest args)
-             "Emulating function run as `run-at-time'.
-TIME should be nil meaning now, or a number of seconds from now.
-Return an itimer object which can be used in either `delete-itimer'
-or `cancel-timer'."
-             (apply #'start-itimer "pgg-run-at-time"
-                    function (if time (max time 1e-9) 1e-9)
-                    repeat nil t args))
-         (lambda (time repeat function &rest args)
-           "Emulating function run as `run-at-time' in the right way.
-TIME should be nil meaning now, or a number of seconds from now.
-Return an itimer object which can be used in either `delete-itimer'
-or `cancel-timer'."
-           (let ((itimers (list nil)))
-             (setcar
-              itimers
-              (apply #'start-itimer "pgg-run-at-time"
-                     (lambda (itimers repeat function &rest args)
-                       (let ((itimer (car itimers)))
-                         (if repeat
-                             (progn
-                               (set-itimer-function
-                                itimer
-                                (lambda (itimer repeat function &rest args)
-                                  (set-itimer-restart itimer repeat)
-                                  (set-itimer-function itimer function)
-                                  (set-itimer-function-arguments itimer args)
-                                  (apply function args)))
-                               (set-itimer-function-arguments
-                                itimer
-                                (append (list itimer repeat function) args)))
-                           (set-itimer-function
-                            itimer
-                            (lambda (itimer function &rest args)
-                              (delete-itimer itimer)
-                              (apply function args)))
-                           (set-itimer-function-arguments
-                            itimer
-                            (append (list itimer function) args)))))
-                     1e-9 (if time (max time 1e-9) 1e-9)
-                     nil t itimers repeat function args)))))
-      'run-at-time)))
+  (when pgg-cache-passphrase
+    (password-read prompt (setq key (pgg-truncate-key-identifier key)))))
 
 (defun pgg-add-passphrase-cache (key passphrase)
-  (setq key (pgg-truncate-key-identifier key))
-  (set (intern key pgg-passphrase-cache)
-       passphrase)
-  (pgg-run-at-time pgg-passphrase-cache-expiry nil
-                  #'pgg-remove-passphrase-cache
-                  key))
+  (let ((password-cache-expiry pgg-passphrase-cache-expiry))
+    (password-cache-add (setq key (pgg-truncate-key-identifier key))
+                       passphrase)))
 
 (defun pgg-remove-passphrase-cache (key)
-  (let ((passphrase (symbol-value (intern-soft key pgg-passphrase-cache))))
-    (when passphrase
-      (fillarray passphrase ?_)
-      (unintern key pgg-passphrase-cache))))
+  (password-cache-remove key))
 
 (defmacro pgg-convert-lbt-region (start end lbt)
   `(let ((pgg-conversion-end (set-marker (make-marker) ,end)))
index 6c53a48..81d9f94 100644 (file)
@@ -36,6 +36,7 @@
 ;;; Code:
 
 (require 'mail-utils)
+(require 'nnheader)
 
 (defvar pop3-maildrop (or (user-login-name) (getenv "LOGNAME") (getenv "USER") nil)
   "*POP3 maildrop.")
@@ -304,7 +305,7 @@ If NOW, use that time instead."
        (setq pass
              (read-passwd (format "Password for %s: " pop3-maildrop))))
     (if pass
-       (let ((hash (pop3-md5 (concat pop3-timestamp pass))))
+       (let ((hash (md5 (concat pop3-timestamp pass))))
          (pop3-send-command process (format "APOP %s %s" user hash))
          (let ((response (pop3-read-response process t)))
            (if (not (and response (string-match "+OK" response)))
@@ -313,22 +314,6 @@ If NOW, use that time instead."
 
 ;; TRANSACTION STATE
 
-(eval-and-compile
-  (if (fboundp 'md5)
-      (defalias 'pop3-md5 'md5)
-    (defvar pop3-md5-program "md5"
-      "*Program to encode its input in MD5.")
-
-    (defun pop3-md5 (string)
-      (with-temp-buffer
-       (insert string)
-       (call-process-region (point-min) (point-max)
-                            pop3-md5-program
-                            t (current-buffer) nil)
-       ;; The meaningful output is the first 32 characters.
-       ;; Don't return the newline that follows them!
-       (buffer-substring (point-min) (+ 32 (point-min)))))))
-
 (defun pop3-stat (process)
   "Return the number of messages in the maildrop and the maildrop's size."
   (pop3-send-command process "STAT")
index d4d6e96..3b4cfda 100644 (file)
 
 (eval-when-compile
   (require 'cl)
-  (defvar message-posting-charset)
-  (unless (fboundp 'with-syntax-table) ; not in Emacs 20
-    (defmacro with-syntax-table (table &rest body)
-      "Evaluate BODY with syntax table of current buffer set to TABLE.
-The syntax table of the current buffer is saved, BODY is evaluated, and the
-saved table is restored, even in case of an abnormal exit.
-Value is what BODY returns."
-      (let ((old-table (make-symbol "table"))
-           (old-buffer (make-symbol "buffer")))
-       `(let ((,old-table (syntax-table))
-              (,old-buffer (current-buffer)))
-          (unwind-protect
-              (progn
-                (set-syntax-table ,table)
-                ,@body)
-            (save-current-buffer
-              (set-buffer ,old-buffer)
-              (set-syntax-table ,old-table))))))))
+  (defvar message-posting-charset))
 
 (require 'qp)
 (require 'mm-util)
@@ -55,18 +38,6 @@ Value is what BODY returns."
 (require 'base64)
 (autoload 'mm-body-7-or-8 "mm-bodies")
 
-(eval-and-compile
-  ;; Avoid gnus-util for mm- code.
-  (defalias 'rfc2047-point-at-bol
-    (if (fboundp 'point-at-bol)
-       'point-at-bol
-      'line-beginning-position))
-
-  (defalias 'rfc2047-point-at-eol
-    (if (fboundp 'point-at-eol)
-       'point-at-eol
-      'line-end-position)))
-
 (defvar rfc2047-header-encoding-alist
   '(("Newsgroups" . nil)
     ("Followup-To" . nil)
@@ -126,6 +97,25 @@ quoted-printable and base64 respectively.")
 ;;; Functions for encoding RFC2047 messages
 ;;;
 
+(defun rfc2047-qp-or-base64 ()
+  "Return the type with which to encode the buffer.
+This is either `base64' or `quoted-printable'."
+  (save-excursion
+    (let ((limit (min (point-max) (+ 2000 (point-min))))
+         (n8bit 0))
+      (goto-char (point-min))
+      (skip-chars-forward "\x20-\x7f\r\n\t" limit)
+      (while (< (point) limit)
+       (incf n8bit)
+       (forward-char 1)
+       (skip-chars-forward "\x20-\x7f\r\n\t" limit))
+      (if (or (< (* 6 n8bit) (- limit (point-min)))
+             ;; Don't base64, say, a short line with a single
+             ;; non-ASCII char when splitting parts by charset.
+             (= n8bit 1))
+         'quoted-printable
+       'base64))))
+
 (defun rfc2047-narrow-to-field ()
   "Narrow the buffer to the header on the current line."
   (beginning-of-line)
@@ -134,7 +124,7 @@ quoted-printable and base64 respectively.")
    (progn
      (forward-line 1)
      (if (re-search-forward "^[^ \n\t]" nil t)
-        (rfc2047-point-at-bol)
+        (point-at-bol)
        (point-max))))
   (goto-char (point-min)))
 
@@ -411,7 +401,7 @@ By default, the region is treated as containing addresses (see
                       ;; encoding, choose the one that's shorter.
                       (save-restriction
                         (narrow-to-region b e)
-                        (if (eq (mm-qp-or-base64) 'base64)
+                        (if (eq (rfc2047-qp-or-base64) 'base64)
                             'B
                           'Q))))
         (start (concat
@@ -424,7 +414,7 @@ By default, the region is treated as containing addresses (see
                   (t 8)))
         (pre (- b (save-restriction
                     (widen)
-                    (rfc2047-point-at-bol))))
+                    (point-at-bol))))
         ;; encoded-words must not be longer than 75 characters,
         ;; including charset, encoding etc.  This leaves us with
         ;; 75 - (length start) - 2 - 2 characters.  The last 2 is for
@@ -483,7 +473,7 @@ By default, the region is treated as containing addresses (see
          (first t)
          (bol (save-restriction
                 (widen)
-                (rfc2047-point-at-bol))))
+                (point-at-bol))))
       (while (not (eobp))
        (when (and (or break qword-break)
                   (> (- (point) bol) 76))
@@ -554,18 +544,18 @@ By default, the region is treated as containing addresses (see
     (goto-char (point-min))
     (let ((bol (save-restriction
                 (widen)
-                (rfc2047-point-at-bol)))
-         (eol (rfc2047-point-at-eol)))
+                (point-at-bol)))
+         (eol (point-at-eol)))
       (forward-line 1)
       (while (not (eobp))
        (if (and (looking-at "[ \t]")
-                (< (- (rfc2047-point-at-eol) bol) 76))
+                (< (- (point-at-eol) bol) 76))
            (delete-region eol (progn
                                 (goto-char eol)
                                 (skip-chars-forward "\r\n")
                                 (point)))
-         (setq bol (rfc2047-point-at-bol)))
-       (setq eol (rfc2047-point-at-eol))
+         (setq bol (point-at-bol)))
+       (setq eol (point-at-eol))
        (forward-line 1)))))
 
 (defun rfc2047-b-encode-region (b e)
@@ -585,7 +575,7 @@ By default, the region is treated as containing addresses (see
       (narrow-to-region (goto-char b) e)
       (let ((bol (save-restriction
                   (widen)
-                  (rfc2047-point-at-bol))))
+                  (point-at-bol))))
        (quoted-printable-encode-region
         b e nil
         ;; = (\075), _ (\137), ? (\077) are used in the encoded word.
@@ -617,8 +607,8 @@ By default, the region is treated as containing addresses (see
 
 (eval-and-compile
   (defconst rfc2047-encoded-word-regexp
-    "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\
-\\?\\([!->@-~ +]*\\)\\?="))
+    "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\
+\\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?="))
 
 ;; Fixme: This should decode in place, not cons intermediate strings.
 ;; Also check whether it needs to worry about delimiting fields like
@@ -697,7 +687,20 @@ By default, the region is treated as containing addresses (see
               mail-parse-charset
               (not (eq mail-parse-charset 'us-ascii))
               (not (eq mail-parse-charset 'gnus-decoded)))
-         (mm-decode-coding-string string mail-parse-charset)
+         ;; `decode-coding-string' in Emacs offers a third optional
+         ;; arg NOCOPY to avoid consing a new string if the decoding
+         ;; is "trivial".  Unfortunately it currently doesn't
+         ;; consider anything else than a `nil' coding system
+         ;; trivial.
+         ;; `rfc2047-decode-string' is called multiple times for each
+         ;; article during summary buffer generation, and we really
+         ;; want to avoid unnecessary consing.  So we bypass
+         ;; `decode-coding-string' if the string is purely ASCII.
+         (if (and (fboundp 'detect-coding-string)
+                  ;; string is purely ASCII
+                  (eq (detect-coding-string string t) 'undecided))
+             string
+           (mm-decode-coding-string string mail-parse-charset))
        (mm-string-as-multibyte string)))))
 
 (defun rfc2047-parse-and-decode (word)
@@ -710,7 +713,7 @@ decodable."
      (condition-case nil
         (rfc2047-decode
          (match-string 1 word)
-         (upcase (match-string 2 word))
+         (string-to-char (match-string 2 word))
          (match-string 3 word))
        (error word))
      word)))                           ; un-decodable
@@ -720,15 +723,19 @@ decodable."
   ;; Be more liberal to accept buggy base64 strings. If
   ;; base64-decode-string accepts buggy strings, this function could
   ;; be aliased to identity.
-  (case (mod (length string) 4)
-    (0 string)
-    (1 string) ;; Error, don't pad it.
-    (2 (concat string "=="))
-    (3 (concat string "="))))
+  (if (= 0 (mod (length string) 4))
+      string
+    (when (string-match "=+$" string)
+      (setq string (substring string 0 (match-beginning 0))))
+    (case (mod (length string) 4)
+      (0 string)
+      (1 string) ;; Error, don't pad it.
+      (2 (concat string "=="))
+      (3 (concat string "=")))))
 
 (defun rfc2047-decode (charset encoding string)
   "Decode STRING from the given MIME CHARSET in the given ENCODING.
-Valid ENCODINGs are \"B\" and \"Q\".
+Valid ENCODINGs are the characters \"B\" and \"Q\".
 If your Emacs implementation can't decode CHARSET, return nil."
   (if (stringp charset)
       (setq charset (intern (downcase charset))))
@@ -748,13 +755,13 @@ If your Emacs implementation can't decode CHARSET, return nil."
        (setq cs mail-parse-charset))
       (mm-decode-coding-string
        (cond
-       ((equal "B" encoding)
+       ((char-equal ?B encoding)
         (base64-decode-string
          (rfc2047-pad-base64 string)))
-       ((equal "Q" encoding)
+       ((char-equal ?Q encoding)
         (quoted-printable-decode-string
-         (mm-replace-chars-in-string string ?_ ? )))
-       (t (error "Invalid encoding: %s" encoding)))
+         (mm-subst-char-in-string ?_ ? string t)))
+       (t (error "Invalid encoding: %c" encoding)))
        cs))))
 
 (provide 'rfc2047)
diff --git a/lisp/run-at-time.el b/lisp/run-at-time.el
new file mode 100644 (file)
index 0000000..47298e9
--- /dev/null
@@ -0,0 +1,96 @@
+;;; run-at-time.el --- A non-buggy version of the run-at-time function
+
+;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
+
+;; Author: Katsumi Yamaoka  <yamaoka@jpl.org>
+
+;; 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., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; XEmacs has a buggy version of run-at-time.  This file defines a
+;; non-buggy version of the same.
+
+(defalias
+  'run-at-time
+  (if (condition-case nil
+         (progn
+           (unless (or itimer-process itimer-timer)
+             (itimer-driver-start))
+           ;; Check whether there is a bug to which the difference of
+           ;; the present time and the time when the itimer driver was
+           ;; woken up is subtracted from the initial itimer value.
+           (let* ((inhibit-quit t)
+                  (ctime (current-time))
+                  (itimer-timer-last-wakeup
+                   (prog1
+                       ctime
+                     (setcar ctime (1- (car ctime)))))
+                  (itimer-list nil)
+                  (itimer (start-itimer "run-at-time" 'ignore 5)))
+             (sleep-for 0.1) ;; Accept the timeout interrupt.
+             (prog1
+                 (> (itimer-value itimer) 0)
+               (delete-itimer itimer))))
+       (error nil))
+      (lambda (time repeat function &rest args)
+       "Function emulating the function of the same name of Emacs.
+TIME should be nil meaning now, or a number of seconds from now.
+Return an itimer object which can be used in either `delete-itimer'
+or `cancel-timer'."
+       (apply #'start-itimer "run-at-time"
+              function (if time (max time 1e-9) 1e-9)
+              repeat nil t args))
+    (lambda (time repeat function &rest args)
+      "Function emulating the function of the same name of Emacs.
+It works correctly for TIME even if there is a bug in the XEmacs core.
+TIME should be nil meaning now, or a number of seconds from now.
+Return an itimer object which can be used in either `delete-itimer'
+or `cancel-timer'."
+      (let ((itimers (list nil)))
+       (setcar
+        itimers
+        (apply #'start-itimer "fixed-run-at-time"
+               (lambda (itimers repeat function &rest args)
+                 (let ((itimer (car itimers)))
+                   (if repeat
+                       (progn
+                         (set-itimer-function
+                          itimer
+                          (lambda (itimer repeat function &rest args)
+                            (set-itimer-restart itimer repeat)
+                            (set-itimer-function itimer function)
+                            (set-itimer-function-arguments itimer args)
+                            (apply function args)))
+                         (set-itimer-function-arguments
+                          itimer
+                          (append (list itimer repeat function) args)))
+                     (set-itimer-function
+                      itimer
+                      (lambda (itimer function &rest args)
+                        (delete-itimer itimer)
+                        (apply function args)))
+                     (set-itimer-function-arguments
+                      itimer
+                      (append (list itimer function) args)))))
+               1e-9 (if time (max time 1e-9) 1e-9)
+               nil t itimers repeat function args))))))
+
+(provide 'run-at-time)
+
+;;; run-at-time.el ends here
diff --git a/lisp/sasl-cram.el b/lisp/sasl-cram.el
new file mode 100644 (file)
index 0000000..25d1082
--- /dev/null
@@ -0,0 +1,51 @@
+;;; sasl-cram.el --- CRAM-MD5 module for the SASL client framework
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Daiki Ueno <ueno@unixuser.org>
+;;     Kenichi OKADA <okada@opaopa.org>
+;; Keywords: SASL, CRAM-MD5
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program 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.
+
+;; This program 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 this program; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+(require 'sasl)
+(require 'hmac-md5)
+
+(defconst sasl-cram-md5-steps
+  '(ignore                             ;no initial response
+    sasl-cram-md5-response))
+
+(defun sasl-cram-md5-response (client step)
+  (let ((passphrase
+        (sasl-read-passphrase
+         (format "CRAM-MD5 passphrase for %s: "
+                 (sasl-client-name client)))))
+    (unwind-protect
+       (concat (sasl-client-name client) " "
+               (encode-hex-string
+                (hmac-md5 (sasl-step-data step) passphrase)))
+      (fillarray passphrase 0))))
+
+(put 'sasl-cram 'sasl-mechanism
+     (sasl-make-mechanism "CRAM-MD5" sasl-cram-md5-steps))
+
+(provide 'sasl-cram)
+
+;;; sasl-cram.el ends here
diff --git a/lisp/sasl-digest.el b/lisp/sasl-digest.el
new file mode 100644 (file)
index 0000000..9e061b7
--- /dev/null
@@ -0,0 +1,156 @@
+;;; sasl-digest.el --- DIGEST-MD5 module for the SASL client framework
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Daiki Ueno <ueno@unixuser.org>
+;;     Kenichi OKADA <okada@opaopa.org>
+;; Keywords: SASL, DIGEST-MD5
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program 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.
+
+;; This program 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 this program; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;; This program is implemented from draft-leach-digest-sasl-05.txt.
+;;
+;; It is caller's responsibility to base64-decode challenges and
+;; base64-encode responses in IMAP4 AUTHENTICATE command.
+;;
+;; Passphrase should be longer than 16 bytes. (See RFC 2195)
+
+;;; Commentary:
+
+(require 'sasl)
+(require 'hmac-md5)
+
+(defvar sasl-digest-md5-nonce-count 1)
+(defvar sasl-digest-md5-unique-id-function
+  sasl-unique-id-function)
+
+(defvar sasl-digest-md5-syntax-table
+  (let ((table (make-syntax-table)))
+    (modify-syntax-entry ?= "." table)
+    (modify-syntax-entry ?, "." table)
+    table)
+  "A syntax table for parsing digest-challenge attributes.")
+
+(defconst sasl-digest-md5-steps
+  '(ignore                             ;no initial response
+    sasl-digest-md5-response
+    ignore))                           ;""
+
+(defun sasl-digest-md5-parse-string (string)
+  "Parse STRING and return a property list.
+The value is a cons cell of the form \(realm nonce qop-options stale maxbuf
+charset algorithm cipher-opts auth-param)."
+  (with-temp-buffer
+    (set-syntax-table sasl-digest-md5-syntax-table)
+    (save-excursion
+      (insert string)
+      (goto-char (point-min))
+      (insert "(")
+      (while (progn (forward-sexp) (not (eobp)))
+       (delete-char 1)
+       (insert " "))
+      (insert ")")
+      (read (point-min-marker)))))
+
+(defun sasl-digest-md5-digest-uri (serv-type host &optional serv-name)
+  (concat serv-type "/" host
+         (if (and serv-name
+                  (not (string= host serv-name)))
+             (concat "/" serv-name))))
+
+(defun sasl-digest-md5-cnonce ()
+  (let ((sasl-unique-id-function sasl-digest-md5-unique-id-function))
+    (sasl-unique-id)))
+
+(defun sasl-digest-md5-response-value (username
+                                      realm
+                                      nonce
+                                      cnonce
+                                      nonce-count
+                                      qop
+                                      digest-uri
+                                      authzid)
+  (let ((passphrase
+        (sasl-read-passphrase
+         (format "DIGEST-MD5 passphrase for %s: "
+                 username))))
+    (unwind-protect
+       (encode-hex-string
+        (md5-binary
+         (concat
+          (encode-hex-string
+           (md5-binary (concat (md5-binary 
+                                (concat username ":" realm ":" passphrase))
+                               ":" nonce ":" cnonce
+                               (if authzid 
+                                   (concat ":" authzid)))))
+          ":" nonce
+          ":" (format "%08x" nonce-count) ":" cnonce ":" qop ":"
+          (encode-hex-string
+           (md5-binary
+            (concat "AUTHENTICATE:" digest-uri
+                    (if (member qop '("auth-int" "auth-conf"))
+                        ":00000000000000000000000000000000")))))))
+      (fillarray passphrase 0))))
+
+(defun sasl-digest-md5-response (client step)
+  (let* ((plist
+         (sasl-digest-md5-parse-string (sasl-step-data step)))
+        (realm
+         (or (sasl-client-property client 'realm)
+             (plist-get plist 'realm))) ;need to check
+        (nonce-count
+         (or (sasl-client-property client 'nonce-count)
+              sasl-digest-md5-nonce-count))
+        (qop
+         (or (sasl-client-property client 'qop)
+             "auth"))
+        (digest-uri
+         (sasl-digest-md5-digest-uri
+          (sasl-client-service client)(sasl-client-server client)))
+        (cnonce
+         (or (sasl-client-property client 'cnonce)
+             (sasl-digest-md5-cnonce))))
+    (sasl-client-set-property client 'nonce-count (1+ nonce-count))
+    (unless (string= qop "auth")
+      (sasl-error (format "Unsupported \"qop-value\": %s" qop)))
+    (concat
+     "username=\"" (sasl-client-name client) "\","
+     "realm=\"" realm "\","
+     "nonce=\"" (plist-get plist 'nonce) "\","
+     "cnonce=\"" cnonce "\","
+     (format "nc=%08x," nonce-count)
+     "digest-uri=\"" digest-uri "\","
+     "qop=" qop ","
+     "response="
+     (sasl-digest-md5-response-value
+      (sasl-client-name client)
+      realm
+      (plist-get plist 'nonce)
+      cnonce
+      nonce-count
+      qop
+      digest-uri
+      (plist-get plist 'authzid)))))
+
+(put 'sasl-digest 'sasl-mechanism
+     (sasl-make-mechanism "DIGEST-MD5" sasl-digest-md5-steps))
+
+(provide 'sasl-digest)
+
+;;; sasl-digest.el ends here
diff --git a/lisp/sasl-ntlm.el b/lisp/sasl-ntlm.el
new file mode 100644 (file)
index 0000000..67b4c96
--- /dev/null
@@ -0,0 +1,65 @@
+;;; sasl-ntlm.el --- NTLM (NT Lan Manager) module for the SASL client framework
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Taro Kawagishi <tarok@transpulse.org>
+;; Keywords: SASL, NTLM
+;; Version: 1.00
+;; Created: February 2001
+
+;; This program 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.
+;;
+;; This program 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 this program; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This is a SASL interface layer for NTLM authentication message
+;; generation by ntlm.el
+
+;;; Code:
+
+(require 'sasl)
+(require 'ntlm)
+
+(defconst sasl-ntlm-steps
+  '(ignore                             ;nothing to do before making
+    sasl-ntlm-request                  ;authentication request
+    sasl-ntlm-response)                        ;response to challenge
+  "A list of functions to be called in sequnece for the NTLM
+authentication steps.  Ther are called by 'sasl-next-step.")
+
+(defun sasl-ntlm-request (client step)
+  "SASL step function to generate a NTLM authentication request to the server.
+Called from 'sasl-next-step.
+CLIENT is a vector [mechanism user service server sasl-client-properties]
+STEP is a vector [<previous step function> <result of previous step function>]"
+  (let ((user (sasl-client-name client)))
+    (ntlm-build-auth-request user)))
+
+(defun sasl-ntlm-response (client step)
+  "SASL step function to generate a NTLM response against the server
+challenge stored in the 2nd element of STEP.  Called from 'sasl-next-step."
+  (let* ((user (sasl-client-name client))
+        (passphrase
+         (sasl-read-passphrase (format "NTLM passphrase for %s: " user)))
+        (challenge (sasl-step-data step)))
+    (ntlm-build-auth-response challenge user
+                             (ntlm-get-password-hashes passphrase))))
+
+(put 'sasl-ntlm 'sasl-mechanism
+     (sasl-make-mechanism "NTLM" sasl-ntlm-steps))
+
+(provide 'sasl-ntlm)
+
+;;; sasl-ntlm.el ends here
diff --git a/lisp/sasl.el b/lisp/sasl.el
new file mode 100644 (file)
index 0000000..593f46b
--- /dev/null
@@ -0,0 +1,272 @@
+;;; sasl.el --- SASL client framework
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Daiki Ueno <ueno@unixuser.org>
+;; Keywords: SASL
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program 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.
+
+;; This program 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 this program; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This module provides common interface functions to share several
+;; SASL mechanism drivers.  The toplevel is designed to be mostly
+;; compatible with [Java-SASL].
+;;
+;; [SASL] J. Myers, "Simple Authentication and Security Layer (SASL)",
+;;     RFC 2222, October 1997.
+;;
+;; [Java-SASL] R. Weltman & R. Lee, "The Java SASL Application Program
+;;     Interface", draft-weltman-java-sasl-03.txt, March 2000.
+
+;;; Code:
+
+(defvar sasl-mechanisms
+  '("CRAM-MD5" "DIGEST-MD5" "PLAIN" "LOGIN" "ANONYMOUS"
+    "NTLM" "SCRAM-MD5"))
+
+(defvar sasl-mechanism-alist
+  '(("CRAM-MD5" sasl-cram)
+    ("DIGEST-MD5" sasl-digest)
+    ("PLAIN" sasl-plain)
+    ("LOGIN" sasl-login)
+    ("ANONYMOUS" sasl-anonymous)
+    ("NTLM" sasl-ntlm)
+    ("SCRAM-MD5" sasl-scram)))
+
+(defvar sasl-unique-id-function #'sasl-unique-id-function)
+
+(put 'sasl-error 'error-message "SASL error")
+(put 'sasl-error 'error-conditions '(sasl-error error))
+
+(defun sasl-error (datum)
+  (signal 'sasl-error (list datum)))
+
+;;; @ SASL client
+;;;
+
+(defun sasl-make-client (mechanism name service server)
+  "Return a newly allocated SASL client.
+NAME is name of the authorization.  SERVICE is name of the service desired.
+SERVER is the fully qualified host name of the server to authenticate to."
+  (vector mechanism name service server (make-symbol "sasl-client-properties")))
+
+(defun sasl-client-mechanism (client)
+  "Return the authentication mechanism driver of CLIENT."
+  (aref client 0))
+
+(defun sasl-client-name (client)
+  "Return the authorization name of CLIENT, a string."
+  (aref client 1))
+
+(defun sasl-client-service (client)
+  "Return the service name of CLIENT, a string."
+  (aref client 2))
+
+(defun sasl-client-server (client)
+  "Return the server name of CLIENT, a string."
+  (aref client 3))
+
+(defun sasl-client-set-properties (client plist)
+  "Destructively set the properties of CLIENT.
+The second argument PLIST is the new property list."
+  (setplist (aref client 4) plist))
+
+(defun sasl-client-set-property (client property value)
+  "Add the given property/value to CLIENT."
+  (put (aref client 4) property value))
+
+(defun sasl-client-property (client property)
+  "Return the value of the PROPERTY of CLIENT."
+  (get (aref client 4) property))
+
+(defun sasl-client-properties (client)
+  "Return the properties of CLIENT."
+  (symbol-plist (aref client 4)))
+
+;;; @ SASL mechanism
+;;;
+
+(defun sasl-make-mechanism (name steps)
+  "Make an authentication mechanism.
+NAME is a IANA registered SASL mechanism name.
+STEPS is list of continuation function."
+  (vector name
+         (mapcar
+          (lambda (step)
+            (let ((symbol (make-symbol (symbol-name step))))
+              (fset symbol (symbol-function step))
+              symbol))
+          steps)))
+
+(defun sasl-mechanism-name (mechanism)
+  "Return name of MECHANISM, a string."
+  (aref mechanism 0))
+
+(defun sasl-mechanism-steps (mechanism)
+  "Return the authentication steps of MECHANISM, a list of functions."
+  (aref mechanism 1))
+
+(defun sasl-find-mechanism (mechanisms)
+  "Retrieve an apropriate mechanism object from MECHANISMS hints."
+  (let* ((sasl-mechanisms sasl-mechanisms)
+        (mechanism
+         (catch 'done
+           (while sasl-mechanisms
+             (if (member (car sasl-mechanisms) mechanisms)
+                 (throw 'done (nth 1 (assoc (car sasl-mechanisms)
+                                            sasl-mechanism-alist))))
+             (setq sasl-mechanisms (cdr sasl-mechanisms))))))
+    (if mechanism
+       (require mechanism))
+    (get mechanism 'sasl-mechanism)))
+
+;;; @ SASL authentication step
+;;;
+
+(defun sasl-step-data (step)
+  "Return the data which STEP holds, a string."
+  (aref step 1))
+
+(defun sasl-step-set-data (step data)
+  "Store DATA string to STEP."
+  (aset step 1 data))
+
+(defun sasl-next-step (client step)
+  "Evaluate the challenge and prepare an appropriate next response.
+The data type of the value and optional 2nd argument STEP is nil or
+opaque authentication step which holds the reference to the next action
+and the current challenge.  At the first time STEP should be set to nil."
+  (let* ((steps
+         (sasl-mechanism-steps
+          (sasl-client-mechanism client)))
+        (function
+         (if (vectorp step)
+             (nth 1 (memq (aref step 0) steps))
+           (car steps))))
+    (if function
+       (vector function (funcall function client step)))))
+
+(defvar sasl-read-passphrase nil)
+(defun sasl-read-passphrase (prompt)
+  (if (not sasl-read-passphrase)
+      (if (functionp 'read-passwd)
+         (setq sasl-read-passphrase 'read-passwd)
+       (if (load "passwd" t)
+           (setq sasl-read-passphrase 'read-passwd)
+         (autoload 'ange-ftp-read-passwd "ange-ftp")
+         (setq sasl-read-passphrase 'ange-ftp-read-passwd))))
+  (funcall sasl-read-passphrase prompt))
+
+(defun sasl-unique-id ()
+  "Compute a data string which must be different each time.
+It contain at least 64 bits of entropy."
+  (concat (funcall sasl-unique-id-function)(funcall sasl-unique-id-function)))
+
+(defvar sasl-unique-id-char nil)
+
+;; stolen (and renamed) from message.el
+(defun sasl-unique-id-function ()
+  ;; Don't use microseconds from (current-time), they may be unsupported.
+  ;; Instead we use this randomly inited counter.
+  (setq sasl-unique-id-char
+       (% (1+ (or sasl-unique-id-char (logand (random t) (1- (lsh 1 20)))))
+          ;; (current-time) returns 16-bit ints,
+          ;; and 2^16*25 just fits into 4 digits i base 36.
+          (* 25 25)))
+  (let ((tm (current-time)))
+    (concat
+     (sasl-unique-id-number-base36
+      (+ (car   tm)
+        (lsh (% sasl-unique-id-char 25) 16)) 4)
+     (sasl-unique-id-number-base36
+      (+ (nth 1 tm)
+        (lsh (/ sasl-unique-id-char 25) 16)) 4))))
+
+(defun sasl-unique-id-number-base36 (num len)
+  (if (if (< len 0)
+         (<= num 0)
+       (= len 0))
+      ""
+    (concat (sasl-unique-id-number-base36 (/ num 36) (1- len))
+           (char-to-string (aref "zyxwvutsrqponmlkjihgfedcba9876543210"
+                                 (% num 36))))))
+
+;;; PLAIN (RFC2595 Section 6)
+(defconst sasl-plain-steps
+  '(sasl-plain-response))
+
+(defun sasl-plain-response (client step)
+  (let ((passphrase
+        (sasl-read-passphrase
+         (format "PLAIN passphrase for %s: " (sasl-client-name client))))
+       (authenticator-name
+        (sasl-client-property
+         client 'authenticator-name))
+       (name (sasl-client-name client)))
+    (unwind-protect
+       (if (and authenticator-name
+                (not (string= authenticator-name name)))
+           (concat authenticator-name "\0" name "\0" passphrase)
+         (concat "\0" name "\0" passphrase))
+      (fillarray passphrase 0))))
+
+(put 'sasl-plain 'sasl-mechanism
+     (sasl-make-mechanism "PLAIN" sasl-plain-steps))
+
+(provide 'sasl-plain)
+
+;;; LOGIN (No specification exists)
+(defconst sasl-login-steps
+  '(ignore                             ;no initial response
+    sasl-login-response-1
+    sasl-login-response-2))
+
+(defun sasl-login-response-1 (client step)
+;;;  (unless (string-match "^Username:" (sasl-step-data step))
+;;;    (sasl-error (format "Unexpected response: %s" (sasl-step-data step))))
+  (sasl-client-name client))
+
+(defun sasl-login-response-2 (client step)
+;;;  (unless (string-match "^Password:" (sasl-step-data step))
+;;;    (sasl-error (format "Unexpected response: %s" (sasl-step-data step))))
+  (sasl-read-passphrase
+   (format "LOGIN passphrase for %s: " (sasl-client-name client))))
+
+(put 'sasl-login 'sasl-mechanism
+     (sasl-make-mechanism "LOGIN" sasl-login-steps))
+
+(provide 'sasl-login)
+
+;;; ANONYMOUS (RFC2245)
+(defconst sasl-anonymous-steps
+  '(ignore                             ;no initial response
+    sasl-anonymous-response))
+
+(defun sasl-anonymous-response (client step)
+  (or (sasl-client-property client 'trace)
+      (sasl-client-name client)))
+
+(put 'sasl-anonymous 'sasl-mechanism
+     (sasl-make-mechanism "ANONYMOUS" sasl-anonymous-steps))
+
+(provide 'sasl-anonymous)
+
+(provide 'sasl)
+
+;;; sasl.el ends here
index ab5804d..44f3f5b 100644 (file)
@@ -1,6 +1,6 @@
-;;; sha1-el.el --- SHA1 Secure Hash Algorithm in Emacs-Lisp.
+;;; sha1-el.el --- SHA1 Secure Hash Algorithm in Emacs-Lisp
 
-;; Copyright (C) 1999, 2001, 2003  Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2001, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
 ;; Keywords: SHA1, FIPS 180-1
@@ -54,8 +54,6 @@
 
 (require 'hex-util)
 
-(autoload 'executable-find "executable")
-
 ;;;
 ;;; external SHA1 function.
 ;;;
   :group 'extensions)
 
 (defcustom sha1-maximum-internal-length 500
-  "*Maximum length of message to use lisp version of SHA1 function.
+  "*Maximum length of message to use Lisp version of SHA1 function.
 If message is longer than this, `sha1-program' is used instead.
 
-If this variable is set to 0, use extarnal program only.
+If this variable is set to 0, use external program only.
 If this variable is set to nil, use internal function only."
   :type 'integer
   :group 'sha1)
@@ -87,31 +85,26 @@ If this variable is set to nil, use internal function only."
   :type 'boolean
   :group 'sha1)
 
-(defun sha1-string-external (string)
-  ;; `with-temp-buffer' is new in v20, so we do not use it.
-  (save-excursion
-    (let (buffer)
-      (unwind-protect
-         (let (prog args)
-           (if (consp sha1-program)
-               (setq prog (car sha1-program)
-                     args (cdr sha1-program))
-             (setq prog sha1-program
-                   args nil))
-           (setq buffer (set-buffer
-                         (generate-new-buffer " *sha1 external*")))
-           (insert string)
-           (apply (function call-process-region)
-                  (point-min)(point-max)
-                  prog t t nil args)
-           ;; SHA1 is 40 bytes long in hexadecimal form.
-           (buffer-substring (point-min)(+ (point-min) 40)))
-       (and buffer
-            (buffer-name buffer)
-            (kill-buffer buffer))))))
-
-(defun sha1-region-external (beg end)
-  (sha1-string-external (buffer-substring-no-properties beg end)))
+(defun sha1-string-external (string &optional binary)
+  (let (prog args digest default-enable-multibyte-characters)
+    (if (consp sha1-program)
+       (setq prog (car sha1-program)
+             args (cdr sha1-program))
+      (setq prog sha1-program
+           args nil))
+    (with-temp-buffer
+      (insert string)
+      (apply (function call-process-region)
+            (point-min)(point-max)
+            prog t t nil args)
+      ;; SHA1 is 40 bytes long in hexadecimal form.
+      (setq digest (buffer-substring (point-min)(+ (point-min) 40))))
+    (if binary
+       (decode-hex-string digest)
+      digest)))
+
+(defun sha1-region-external (beg end &optional binary)
+  (sha1-string-external (buffer-substring-no-properties beg end) binary))
 
 ;;;
 ;;; internal SHA1 function.
@@ -403,41 +396,44 @@ If this variable is set to nil, use internal function only."
       (fillarray block-high nil)
       (fillarray block-low  nil))))
 
-(defun sha1-string-internal (string)
-  (encode-hex-string (sha1-binary string)))
+(defun sha1-string-internal (string &optional binary)
+  (if binary
+      (sha1-binary string)
+    (encode-hex-string (sha1-binary string))))
 
-(defun sha1-region-internal (beg end)
-  (sha1-string-internal (buffer-substring-no-properties beg end)))
+(defun sha1-region-internal (beg end &optional binary)
+  (sha1-string-internal (buffer-substring-no-properties beg end) binary))
 
 ;;;
 ;;; application interface.
 ;;;
 
-(defun sha1-region (beg end)
+(defun sha1-region (beg end &optional binary)
   (if (and sha1-use-external
           sha1-maximum-internal-length
           (> (abs (- end beg)) sha1-maximum-internal-length))
-      (sha1-region-external beg end)
-    (sha1-region-internal beg end)))
+      (sha1-region-external beg end binary)
+    (sha1-region-internal beg end binary)))
 
-(defun sha1-string (string)
+(defun sha1-string (string &optional binary)
   (if (and sha1-use-external
           sha1-maximum-internal-length
           (> (length string) sha1-maximum-internal-length))
-      (sha1-string-external string)
-    (sha1-string-internal string)))
+      (sha1-string-external string binary)
+    (sha1-string-internal string binary)))
 
 ;;;###autoload
-(defun sha1 (object &optional beg end)
+(defun sha1 (object &optional beg end binary)
   "Return the SHA1 (Secure Hash Algorithm) of an object.
 OBJECT is either a string or a buffer.
 Optional arguments BEG and END denote buffer positions for computing the
-hash of a portion of OBJECT."
+hash of a portion of OBJECT.
+If BINARY is non-nil, return a string in binary form."
   (if (stringp object)
-      (sha1-string object)
+      (sha1-string object binary)
     (save-excursion
       (set-buffer object)
-      (sha1-region (or beg (point-min)) (or end (point-max))))))
+      (sha1-region (or beg (point-min)) (or end (point-max)) binary))))
 
 (provide 'sha1-el)
 
index bda44dc..63588b8 100644 (file)
@@ -1,5 +1,5 @@
 ;;; sieve-manage.el --- Implementation of the managesive protocol in elisp
-;; Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 
 ;; This library provides an elisp API for the managesieve network
 ;; protocol.
 ;;
-;; Currently only the CRAM-MD5 authentication mechanism is supported.
+;; It uses the SASL library for authentication, which means it
+;; supports DIGEST-MD5, CRAM-MD5, SCRAM-MD5, NTLM, PLAIN and LOGIN
+;; methods.  STARTTLS is not well tested, but should be easy to get to
+;; work if someone wants.
 ;;
 ;; The API should be fairly obvious for anyone familiar with the
 ;; managesieve protocol, interface functions include:
 ;;
 ;; 2001-10-31 Committed to Oort Gnus.
 ;; 2002-07-27 Added DELETESCRIPT.  Suggested by Ned Ludd.
+;; 2002-08-03 Use SASL library.
 
 ;;; Code:
 
-(require 'rfc2104)
-(or (fboundp 'md5)
-    (require 'md5))
+(require 'password)
+(eval-when-compile
+  (require 'sasl)
+  (require 'starttls))
 (eval-and-compile
-  (autoload 'starttls-open-stream "starttls")
-  (autoload 'starttls-negotiate "starttls"))
+  (autoload 'sasl-find-mechanism "sasl")
+  (autoload 'starttls-open-stream "starttls"))
 
 ;; User customizable variables:
 
@@ -115,12 +120,21 @@ NAME names the stream, CHECK is a function returning non-nil if the
 server support the stream and OPEN is a function for opening the
 stream.")
 
-(defcustom sieve-manage-authenticators '(cram-md5 plain)
+(defcustom sieve-manage-authenticators '(digest-md5
+                                        cram-md5
+                                        scram-md5
+                                        ntlm
+                                        plain
+                                        login)
   "Priority of authenticators to consider when authenticating to server.")
 
 (defcustom sieve-manage-authenticator-alist
   '((cram-md5   sieve-manage-cram-md5-p       sieve-manage-cram-md5-auth)
-    (plain      sieve-manage-plain-p          sieve-manage-plain-auth))
+    (digest-md5 sieve-manage-digest-md5-p     sieve-manage-digest-md5-auth)
+    (scram-md5  sieve-manage-scram-md5-p      sieve-manage-scram-md5-auth)
+    (ntlm       sieve-manage-ntlm-p           sieve-manage-ntlm-auth)
+    (plain      sieve-manage-plain-p          sieve-manage-plain-auth)
+    (login      sieve-manage-login-p          sieve-manage-login-auth))
   "Definition of authenticators.
 
 \(NAME CHECK AUTHENTICATE)
@@ -177,38 +191,45 @@ Returns t if login was successful, nil otherwise."
   (with-current-buffer buffer
     (make-variable-buffer-local 'sieve-manage-username)
     (make-variable-buffer-local 'sieve-manage-password)
-    (let (user passwd ret reason)
-      ;;      (condition-case ()
-      (while (or (not user) (not passwd))
-       (setq user (or sieve-manage-username
-                      (read-from-minibuffer
-                       (concat "Managesieve username for "
-                               sieve-manage-server ": ")
-                       (or user sieve-manage-default-user))))
-       (setq passwd (or sieve-manage-password
-                        (read-passwd
-                         (concat "Managesieve password for " user "@"
-                                 sieve-manage-server ": "))))
-       (when (and user passwd)
-         (if (funcall loginfunc user passwd)
-             (progn
-               (setq ret t
-                     sieve-manage-username user)
-               (if (and (not sieve-manage-password)
-                        (y-or-n-p "Store password for this session? "))
-                   (setq sieve-manage-password passwd)))
-           (if reason
-               (message "Login failed (reason given: %s)..." reason)
-             (message "Login failed..."))
-           (setq reason nil)
-           (setq passwd nil)
-           (sit-for 1))))
-      ;;       (quit (with-current-buffer buffer
-      ;;               (setq user nil
-      ;;                     passwd nil)))
-      ;;       (error (with-current-buffer buffer
-      ;;                (setq user nil
-      ;;                      passwd nil))))
+    (let (user passwd ret reason passwd-key)
+      (condition-case ()
+         (while (or (not user) (not passwd))
+           (setq user (or sieve-manage-username
+                          (read-from-minibuffer
+                           (concat "Managesieve username for "
+                                   sieve-manage-server ": ")
+                           (or user sieve-manage-default-user)))
+                 passwd-key (concat "managesieve:" user "@" sieve-manage-server
+                                    ":" sieve-manage-port)
+                 passwd (or sieve-manage-password
+                            (password-read (concat "Managesieve password for "
+                                                   user "@" sieve-manage-server
+                                                   ": ")
+                                           passwd-key)))
+           (when (y-or-n-p "Store password for this session? ")
+             (password-cache-add passwd-key (copy-sequence passwd)))
+           (when (and user passwd)
+             (if (funcall loginfunc user passwd)
+                 (setq ret t
+                       sieve-manage-username user)
+               (if reason
+                   (message "Login failed (reason given: %s)..." reason)
+                 (message "Login failed..."))
+               (password-cache-remove passwd-key)
+               (setq sieve-manage-password nil)
+               (setq passwd nil)
+               (setq reason nil)
+               (sit-for 1))))
+       (quit (with-current-buffer buffer
+               (password-cache-remove passwd-key)
+               (setq user nil
+                     passwd nil
+                     sieve-manage-password nil)))
+       (error (with-current-buffer buffer
+                (password-cache-remove passwd-key)
+                (setq user nil
+                      passwd nil
+                      sieve-manage-password nil))))
       ret)))
 
 (defun sieve-manage-erase (&optional p buffer)
@@ -293,60 +314,111 @@ Returns t if login was successful, nil otherwise."
 
 ;; Authenticators
 
+(defun sieve-sasl-auth (buffer mech)
+  "Login to server using the SASL MECH method."
+  (message "sieve: Authenticating using %s..." mech)
+  (if (sieve-manage-interactive-login 
+       buffer
+       (lambda (user passwd)
+        (let (client step tag data rsp)
+          (setq client (sasl-make-client (sasl-find-mechanism (list mech))
+                                         user "sieve" sieve-manage-server))
+          (setq sasl-read-passphrase (function (lambda (prompt) passwd)))
+          (setq step (sasl-next-step client nil))
+          (setq tag
+                (sieve-manage-send
+                 (concat
+                  "AUTHENTICATE \""
+                  mech
+                  "\""
+                  (and (sasl-step-data step)
+                       (concat
+                        " \""
+                        (base64-encode-string
+                         (sasl-step-data step)
+                         'no-line-break)
+                        "\"")))))
+          (catch 'done
+            (while t
+              (setq rsp nil)
+              (goto-char (point-min))
+              (while (null (or (progn
+                                 (setq rsp (sieve-manage-is-string))
+                                 (if (not (and rsp (looking-at
+                                                    sieve-manage-server-eol)))
+                                     (setq rsp nil)
+                                   (goto-char (match-end 0))
+                                   rsp))
+                               (setq rsp (sieve-manage-is-okno))))
+                (accept-process-output sieve-manage-process 1)
+                (goto-char (point-min)))
+              (sieve-manage-erase)
+              (when (sieve-manage-ok-p rsp)
+                (when (string-match "^SASL \"\\([^\"]+\\)\"" (cadr rsp))
+                  (sasl-step-set-data
+                   step (base64-decode-string (match-string 1 (cadr rsp)))))
+                (if (and (setq step (sasl-next-step client step))
+                         (setq data (sasl-step-data step)))
+                    ;; We got data for server but it's finished
+                    (error "Server not ready for SASL data: %s" data)
+                  ;; The authentication process is finished.
+                  (throw 'done t)))
+              (unless (stringp rsp)
+                (apply 'error "Server aborted SASL authentication: %s %s %s"
+                       rsp))
+              (sasl-step-set-data step (base64-decode-string rsp))
+              (setq step (sasl-next-step client step))
+              (sieve-manage-send
+               (if (sasl-step-data step)
+                   (concat "\""
+                           (base64-encode-string (sasl-step-data step)
+                                                 'no-line-break)
+                           "\"")
+                 "")))))))
+      (message "sieve: Authenticating using %s...done" mech)
+    (message "sieve: Authenticating using %s...failed" mech)))
+
+(defun sieve-manage-cram-md5-p (buffer)
+  (sieve-manage-capability "SASL" "CRAM-MD5" buffer))
+
+(defun sieve-manage-cram-md5-auth (buffer)
+  "Login to managesieve server using the CRAM-MD5 SASL method."
+  (sieve-sasl-auth buffer "CRAM-MD5"))
+
+(defun sieve-manage-digest-md5-p (buffer)
+  (sieve-manage-capability "SASL" "DIGEST-MD5" buffer))
+
+(defun sieve-manage-digest-md5-auth (buffer)
+  "Login to managesieve server using the DIGEST-MD5 SASL method."
+  (sieve-sasl-auth buffer "DIGEST-MD5"))
+
+(defun sieve-manage-scram-md5-p (buffer)
+  (sieve-manage-capability "SASL" "SCRAM-MD5" buffer))
+
+(defun sieve-manage-scram-md5-auth (buffer)
+  "Login to managesieve server using the SCRAM-MD5 SASL method."
+  (sieve-sasl-auth buffer "SCRAM-MD5"))
+
+(defun sieve-manage-ntlm-p (buffer)
+  (sieve-manage-capability "SASL" "NTLM" buffer))
+
+(defun sieve-manage-ntlm-auth (buffer)
+  "Login to managesieve server using the NTLM SASL method."
+  (sieve-sasl-auth buffer "NTLM"))
+
 (defun sieve-manage-plain-p (buffer)
   (sieve-manage-capability "SASL" "PLAIN" buffer))
 
 (defun sieve-manage-plain-auth (buffer)
   "Login to managesieve server using the PLAIN SASL method."
-  (let* ((done (sieve-manage-interactive-login
-               buffer
-               (lambda (user passwd)
-                 (sieve-manage-send (concat "AUTHENTICATE \"PLAIN\" \""
-                                            (base64-encode-string
-                                             (concat (char-to-string 0)
-                                                     user
-                                                     (char-to-string 0)
-                                                     passwd))
-                                            "\""))
-                 (let ((rsp (sieve-manage-parse-okno)))
-                   (if (sieve-manage-ok-p rsp)
-                       t
-                     (setq reason (cdr-safe rsp))
-                     nil))))))
-    (if done
-       (message "sieve: Authenticating using PLAIN...done")
-      (message "sieve: Authenticating using PLAIN...failed"))))
+  (sieve-sasl-auth buffer "PLAIN"))
 
-(defun sieve-manage-cram-md5-p (buffer)
-  (sieve-manage-capability "SASL" "CRAM-MD5" buffer))
+(defun sieve-manage-login-p (buffer)
+  (sieve-manage-capability "SASL" "LOGIN" buffer))
 
-(defun sieve-manage-cram-md5-auth (buffer)
-  "Login to managesieve server using the CRAM-MD5 SASL method."
-  (message "sieve: Authenticating using CRAM-MD5...")
-  (let* ((done (sieve-manage-interactive-login
-               buffer
-               (lambda (user passwd)
-                 (sieve-manage-send "AUTHENTICATE \"CRAM-MD5\"")
-                 (sieve-manage-send
-                  (concat
-                   "\""
-                   (base64-encode-string
-                    (concat
-                     user " "
-                     (rfc2104-hash 'md5 64 16 passwd
-                                   (base64-decode-string
-                                    (prog1
-                                        (sieve-manage-parse-string)
-                                      (sieve-manage-erase))))))
-                   "\""))
-                 (let ((rsp (sieve-manage-parse-okno)))
-                   (if (sieve-manage-ok-p rsp)
-                       t
-                     (setq reason (cdr-safe rsp))
-                     nil))))))
-    (if done
-       (message "sieve: Authenticating using CRAM-MD5...done")
-      (message "sieve: Authenticating using CRAM-MD5...failed"))))
+(defun sieve-manage-login-auth (buffer)
+  "Login to managesieve server using the LOGIN SASL method."
+  (sieve-sasl-auth buffer "LOGIN"))
 
 ;; Managesieve API
 
@@ -361,7 +433,7 @@ Optional variable BUFFER is buffer (buffer, or string naming buffer)
 to work in."
   (setq buffer (or buffer (format " *sieve* %s:%d" server (or port 2000))))
   (with-current-buffer (get-buffer-create buffer)
-    (mapcar 'make-variable-buffer-local sieve-manage-local-variables)
+    (mapc 'make-variable-buffer-local sieve-manage-local-variables)
     (sieve-manage-disable-multibyte)
     (buffer-disable-undo)
     (setq sieve-manage-server (or server sieve-manage-server))
index e4945c9..f105ced 100644 (file)
@@ -1,5 +1,5 @@
 ;;; sieve-mode.el --- Sieve code editing commands for Emacs
-;; Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Simon Josefsson <simon@josefsson.org>
 
@@ -49,7 +49,6 @@
 
 (autoload 'sieve-manage "sieve")
 (autoload 'sieve-upload "sieve")
-(autoload 'c-mode "cc-mode")
 (require 'easymenu)
 (eval-when-compile
   (require 'font-lock))
index 83dd4f3..2b044ad 100644 (file)
@@ -173,7 +173,7 @@ require \"fileinto\";
     (sieve-refresh-scriptlist)
     (if (sieve-manage-ok-p err)
        (message "Deactivating scripts...done")
-      (message "Deactivating scripts...failed" (nth 2 err)))))
+      (message "Deactivating scripts...failed: %s" (nth 2 err)))))
 
 (defalias 'sieve-deactivate 'sieve-deactivate-all)
 
index af7f955..1006e4d 100644 (file)
@@ -512,20 +512,13 @@ A string or a list of strings is returned."
            (caddr curkey)
          (smime-get-certfiles keyfile otherkeys)))))
 
-;; Use mm-util?
-(eval-and-compile
-  (defalias 'smime-point-at-eol
-    (if (fboundp 'point-at-eol)
-       'point-at-eol
-      'line-end-position)))
-
 (defun smime-buffer-as-string-region (b e)
   "Return each line in region between B and E as a list of strings."
   (save-excursion
     (goto-char b)
     (let (res)
       (while (< (point) e)
-       (let ((str (buffer-substring (point) (smime-point-at-eol))))
+       (let ((str (buffer-substring (point) (point-at-eol))))
          (unless (string= "" str)
            (push str res)))
        (forward-line))
index efd6778..6527817 100644 (file)
@@ -59,14 +59,32 @@ instead."
 
 (defcustom spam-report-url-ping-function
   'spam-report-url-ping-plain
-  "Function to use for url ping spam reporting."
+  "Function to use for url ping spam reporting.
+The function must accept the arguments `host' and `report'."
   :type '(choice
          (const :tag "Connect directly"
                 spam-report-url-ping-plain)
          (const :tag "Use the external program specified in `mm-url-program'"
-                spam-report-url-ping-mm-url))
+                spam-report-url-ping-mm-url)
+         (const :tag "Store request URLs in `spam-report-requests-file'"
+                spam-report-url-to-file)
+         (function :tag "User defined function" nil))
   :group 'spam-report)
 
+(defcustom spam-report-requests-file
+  (nnheader-concat gnus-directory "spam/" "spam-report-requests.url")
+  ;; Is there a convention for the extension of such a file?
+  ;; Should we use `spam-directory'?
+  "File where spam report request are stored."
+  :type 'file
+  :group 'spam-report)
+
+(defvar spam-report-url-ping-temp-agent-function nil
+  "Internal variable for `spam-report-agentize' and `spam-report-deagentize'.
+This variable will store the value of `spam-report-url-ping-function' from
+before `spam-report-agentize' was run, so that `spam-report-deagentize' can
+undo that change.")
+
 (defun spam-report-gmane (&rest articles)
   "Report an article as spam through Gmane"
   (dolist (article articles)
@@ -113,14 +131,113 @@ the function specified by `spam-report-url-ping-function'."
        (format "GET %s HTTP/1.1\nUser-Agent: %s (spam-report.el)\nHost: %s\n\n"
               report (gnus-emacs-version) host)))))
 
+;;;###autoload
+(defun spam-report-process-queue (&optional file keep)
+  "Report all queued requests from `spam-report-requests-file'.
+
+If FILE is given, use it instead of `spam-report-requests-file'.
+If KEEP is t, leave old requests in the file.  If KEEP is the
+symbol `ask', query before flushing the queue file."
+  (interactive
+   (list (read-file-name
+         "File: "
+         (file-name-directory spam-report-requests-file)
+         spam-report-requests-file
+         nil
+         (file-name-nondirectory spam-report-requests-file))
+        current-prefix-arg))
+  (if (eq spam-report-url-ping-function 'spam-report-url-to-file)
+      (error (concat "Cannot process requests when "
+                    "`spam-report-url-ping-function' is "
+                    "`spam-report-url-to-file'."))
+    (gnus-message 7 "Processing requests using `%s'."
+                 spam-report-url-ping-function))
+  (or file (setq file spam-report-requests-file))
+  (save-excursion
+    (set-buffer (find-file-noselect file))
+    (goto-char (point-min))
+    (while (and (not (eobp))
+               (re-search-forward
+                "http://\\([^/]+\\)\\(/.*\\) *$" (point-at-eol) t))
+      (funcall spam-report-url-ping-function (match-string 1) (match-string 2))
+      (forward-line 1))
+    (if (or (eq keep nil)
+           (and (eq keep 'ask)
+                (y-or-n-p
+                 (format
+                  "Flush requests from `%s'? " (current-buffer)))))
+       (progn
+         (gnus-message 7 "Flushing request file `%s'"
+                       spam-report-requests-file)
+         (erase-buffer)
+         (save-buffer)
+         (kill-buffer (current-buffer)))
+      (gnus-message 7 "Keeping requests in `%s'" spam-report-requests-file))))
+
+;;;###autoload
 (defun spam-report-url-ping-mm-url (host report)
   "Ping a host through HTTP, addressing a specific GET resource. Use
 the external program specified in `mm-url-program' to connect to
 server."
   (with-temp-buffer
-    (let ((url (concat "http://" host "/" report)))
+    (let ((url (concat "http://" host report)))
       (mm-url-insert url t))))
 
+;;;###autoload
+(defun spam-report-url-to-file (host report)
+  "Collect spam report requests in `spam-report-requests-file'.
+Customize `spam-report-url-ping-function' to use this function."
+  (let ((url (concat "http://" host report))
+       (file spam-report-requests-file))
+    (gnus-make-directory (file-name-directory file))
+    (gnus-message 9 "Writing URL `%s' to file `%s'" url file)
+    (with-temp-buffer
+      (insert url)
+      (newline)
+      (append-to-file (point-min) (point-max) file))))
+
+;;;###autoload
+(defun spam-report-agentize ()
+  "Add spam-report support to the Agent.
+Spam reports will be queued with \\[spam-report-url-to-file] when
+the Agent is unplugged, and will be submitted in a batch when the
+Agent is plugged."
+  (interactive)
+  (add-hook 'gnus-agent-plugged-hook 'spam-report-plug-agent)
+  (add-hook 'gnus-agent-unplugged-hook 'spam-report-unplug-agent))
+
+;;;###autoload
+(defun spam-report-deagentize ()
+  "Remove spam-report support from the Agent.
+Spam reports will be queued with the method used when
+\\[spam-report-agentize] was run."
+  (interactive)
+  (remove-hook 'gnus-agent-plugged-hook 'spam-report-plug-agent)
+  (remove-hook 'gnus-agent-unplugged-hook 'spam-report-unplug-agent))
+
+(defun spam-report-plug-agent ()
+  "Adjust spam report settings for plugged state.
+Process queued spam reports."
+  ;; Process the queue, unless the user only wanted to report to a file
+  ;; anyway.
+  (unless (equal spam-report-url-ping-temp-agent-function
+                'spam-report-url-to-file)
+    (spam-report-process-queue))
+  ;; Set the reporting function, if we have memorized something otherwise,
+  ;; stick with plain URL reporting.
+  (setq spam-report-url-ping-function
+       (or spam-report-url-ping-temp-agent-function
+           'spam-report-url-ping-plain)))
+
+(defun spam-report-unplug-agent ()
+  "Restore spam report settings for unplugged state."
+  ;; save the old value
+  (setq spam-report-url-ping-temp-agent-function
+       spam-report-url-ping-function)
+  ;; store all reports to file
+  (setq spam-report-url-ping-function
+       'spam-report-url-to-file))
+
 (provide 'spam-report)
 
 ;;; spam-report.el ends here.
index e85e057..0038731 100644 (file)
@@ -1,6 +1,6 @@
 ;;; spam-stat.el --- detecting spam based on statistics
 
-;; Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Keywords: network
 \f
 
 ;;; Code:
+(require 'mail-parse)
 
 (defgroup spam-stat nil
   "Statistical spam detection for Emacs.
@@ -160,17 +161,30 @@ This variable says how many characters this will be."
   :group 'spam-stat)
 
 (defcustom spam-stat-split-fancy-spam-group "mail.spam"
-  "Name of the group where spam should be stored, if
-`spam-stat-split-fancy' is used in fancy splitting rules.  Has no
-effect when spam-stat is invoked through spam.el."
+  "Name of the group where spam should be stored.
+If `spam-stat-split-fancy' is used in fancy splitting rules.  Has
+no effect when spam-stat is invoked through spam.el."
   :type 'string
   :group 'spam-stat)
 
 (defcustom spam-stat-split-fancy-spam-threshhold 0.9
-  "Spam score threshhold in spam-stat-split-fancy."
+  "Spam score threshold in spam-stat-split-fancy."
   :type 'number
   :group 'spam-stat)
 
+(defcustom spam-stat-washing-hook nil
+  "Hook applied to each message before analysis."
+  :type 'hook
+  :group 'spam-stat)
+
+(defcustom spam-stat-process-directory-age 90
+  "Max. age of files to be processed in directory, in days.
+When using `spam-stat-process-spam-directory' or
+`spam-stat-process-non-spam-directory', only files that have
+been touched in this many days will be considered.  Without
+this filter, re-training spam-stat with several thousand messages
+will start to take a very long time.")
+
 (defvar spam-stat-syntax-table
   (let ((table (copy-syntax-table text-mode-syntax-table)))
     (modify-syntax-entry ?- "w" table)
@@ -193,52 +207,24 @@ This is set by hooking into Gnus.")
 (defvar spam-stat-buffer-name " *spam stat buffer*"
   "Name of the `spam-stat-buffer'.")
 
-;; Functions missing in Emacs 20
-
-(when (memq nil (mapcar 'fboundp
-                       '(gethash hash-table-count make-hash-table
-                                 mapc puthash)))
-  (require 'cl)
-  (unless (fboundp 'puthash)
-    ;; alias puthash is missing from Emacs 20 cl-extra.el
-    (defalias 'puthash 'cl-puthash)))
-
-(eval-when-compile
-  (unless (fboundp 'with-syntax-table)
-    ;; Imported from Emacs 21.2
-    (defmacro with-syntax-table (table &rest body) "\
-Evaluate BODY with syntax table of current buffer set to a copy of TABLE.
-The syntax table of the current buffer is saved, BODY is evaluated, and the
-saved table is restored, even in case of an abnormal exit.
-Value is what BODY returns."
-      (let ((old-table (make-symbol "table"))
-           (old-buffer (make-symbol "buffer")))
-       `(let ((,old-table (syntax-table))
-              (,old-buffer (current-buffer)))
-          (unwind-protect
-              (progn
-                (set-syntax-table (copy-syntax-table ,table))
-                ,@body)
-            (save-current-buffer
-              (set-buffer ,old-buffer)
-              (set-syntax-table ,old-table))))))))
+(defvar spam-stat-coding-system
+  (if (mm-coding-system-p 'emacs-mule) 'emacs-mule 'raw-text)
+  "Coding system used for `spam-stat-file'.")
 
 ;; Hooking into Gnus
 
 (defun spam-stat-store-current-buffer ()
   "Store a copy of the current buffer in `spam-stat-buffer'."
-  (save-excursion
-    (let ((str (buffer-string)))
-      (set-buffer (get-buffer-create spam-stat-buffer-name))
+  (let ((buf (current-buffer)))
+    (with-current-buffer (get-buffer-create spam-stat-buffer-name)
       (erase-buffer)
-      (insert str)
+      (insert-buffer-substring buf)
       (setq spam-stat-buffer (current-buffer)))))
 
 (defun spam-stat-store-gnus-article-buffer ()
   "Store a copy of the current article in `spam-stat-buffer'.
 This uses `gnus-article-buffer'."
-  (save-excursion
-    (set-buffer gnus-original-article-buffer)
+  (with-current-buffer gnus-original-article-buffer
     (spam-stat-store-current-buffer)))
 
 ;; Data -- not using defstruct in order to save space and time
@@ -310,7 +296,7 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
 ;; Parsing
 
 (defmacro with-spam-stat-max-buffer-size (&rest body)
-  "Narrows the buffer down to the first 4k characters, then evaluates BODY."
+  "Narrow the buffer down to the first 4k characters, then evaluate BODY."
   `(save-restriction
      (when (> (- (point-max)
                 (point-min))
@@ -320,7 +306,8 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
      ,@body))
 
 (defun spam-stat-buffer-words ()
-  "Return a hash table of words and number of occurences in the buffer."
+  "Return a hash table of words and number of occurrences in the buffer."
+  (run-hooks 'spam-stat-washing-hook)
   (with-spam-stat-max-buffer-size
    (with-syntax-table spam-stat-syntax-table
      (goto-char (point-min))
@@ -369,7 +356,7 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
    (lambda (word count)
      (let ((entry (gethash word spam-stat)))
        (if (not entry)
-          (error "This buffer has unknown words in it.")
+          (gnus-message 8 "This buffer has unknown words in it")
         (spam-stat-set-good entry (- (spam-stat-good entry) count))
         (spam-stat-set-bad entry (+ (spam-stat-bad entry) count))
         (spam-stat-set-score entry (spam-stat-compute-score entry))
@@ -385,7 +372,7 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
    (lambda (word count)
      (let ((entry (gethash word spam-stat)))
        (if (not entry)
-          (error "This buffer has unknown words in it.")
+          (gnus-message 8 "This buffer has unknown words in it")
         (spam-stat-set-good entry (+ (spam-stat-good entry) count))
         (spam-stat-set-bad entry (- (spam-stat-bad entry) count))
         (spam-stat-set-score entry (spam-stat-compute-score entry))
@@ -396,30 +383,30 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
 ;; Saving and Loading
 
 (defun spam-stat-save (&optional force)
-  "Save the `spam-stat' hash table as lisp file."
-  (interactive)
+  "Save the `spam-stat' hash table as Lisp file.
+With a prefix argument save unconditionally."
+  (interactive "P")
   (when (or force spam-stat-dirty)
-    (with-temp-buffer
-      (let ((standard-output (current-buffer))
-           (font-lock-maximum-size 0))
-       (insert "(setq spam-stat-ngood "
-               (number-to-string spam-stat-ngood)
-               " spam-stat-nbad "
-               (number-to-string spam-stat-nbad)
-               " spam-stat (spam-stat-to-hash-table '(")
-       (maphash (lambda (word entry)
-                  (prin1 (list word
-                               (spam-stat-good entry)
-                               (spam-stat-bad entry))))
-                spam-stat)
-       (insert ")))")
-       (write-file spam-stat-file)))
-    (setq spam-stat-dirty nil)))
+    (let ((coding-system-for-write spam-stat-coding-system))
+      (with-temp-file spam-stat-file
+       (let ((standard-output (current-buffer))
+             (font-lock-maximum-size 0))
+         (insert (format ";-*- coding: %s; -*-\n" spam-stat-coding-system))
+         (insert (format "(setq spam-stat-ngood %d spam-stat-nbad %d
+spam-stat (spam-stat-to-hash-table '(" spam-stat-ngood spam-stat-nbad))
+         (maphash (lambda (word entry)
+                    (prin1 (list word
+                                 (spam-stat-good entry)
+                                 (spam-stat-bad entry))))
+                  spam-stat)
+         (insert ")))"))))
+       (setq spam-stat-dirty nil)))
 
 (defun spam-stat-load ()
   "Read the `spam-stat' hash table from disk."
   ;; TODO: maybe we should warn the user if spam-stat-dirty is t?
-  (load-file spam-stat-file)
+  (let ((coding-system-for-read spam-stat-coding-system))
+    (load-file spam-stat-file))
   (setq spam-stat-dirty nil))
 
 (defun spam-stat-to-hash-table (entries)
@@ -429,7 +416,8 @@ the word string, NGOOD is the number of good mails it has appeared in,
 NBAD is the number of bad mails it has appeared in, GOOD is the number
 of times it appeared in good mails, and BAD is the number of times it
 has appeared in bad mails."
-  (let ((table (make-hash-table :test 'equal)))
+  (let ((table (make-hash-table :size (length entries)
+                               :test 'equal)))
     (mapc (lambda (l)
            (puthash (car l)
                     (spam-stat-make-entry (nth 1 l) (nth 2 l))
@@ -462,22 +450,20 @@ The default score for unknown words is stored in
 These are the words whose spam-stat differs the most from 0.5.
 The list returned contains elements of the form \(WORD SCORE DIFF),
 where DIFF is the difference between SCORE and 0.5."
-  (with-spam-stat-max-buffer-size
-   (with-syntax-table spam-stat-syntax-table
-     (let (result word score)
-       (maphash        (lambda (word ignore)
-                 (setq score (spam-stat-score-word word)
-                       result (cons (list word score (abs (- score 0.5)))
-                                    result)))
-               (spam-stat-buffer-words))
-       (setq result (sort result (lambda (a b) (< (nth 2 b) (nth 2 a)))))
-       (setcdr (nthcdr 14 result) nil)
-       result))))
+  (let (result word score)
+    (maphash (lambda (word ignore)
+              (setq score (spam-stat-score-word word)
+                    result (cons (list word score (abs (- score 0.5)))
+                                 result)))
+            (spam-stat-buffer-words))
+    (setq result (sort result (lambda (a b) (< (nth 2 b) (nth 2 a)))))
+    (setcdr (nthcdr 14 result) nil)
+    result))
 
 (defun spam-stat-score-buffer ()
   "Return a score describing the spam-probability for this buffer."
   (setq spam-stat-score-data (spam-stat-buffer-words-with-scores))
-  (let* ((probs (mapcar (lambda (e) (cadr e)) spam-stat-score-data))
+  (let* ((probs (mapcar 'cadr spam-stat-score-data))
         (prod (apply #'* probs)))
     (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x))
                                       probs))))))
@@ -502,6 +488,13 @@ check the variable `spam-stat-score-data'."
 
 ;; Testing
 
+(defun spam-stat-strip-xref ()
+  "Strip the the Xref header."
+  (save-restriction
+    (mail-narrow-to-head)
+    (when (re-search-forward "^Xref:.*\n" nil t)
+      (delete-region (match-beginning 0) (match-end 0)))))
+
 (defun spam-stat-process-directory (dir func)
   "Process all the regular files in directory DIR using function FUNC."
   (let* ((files (directory-files dir t "^[^.]"))
@@ -511,10 +504,13 @@ check the variable `spam-stat-score-data'."
       (dolist (f files)
        (when (and (file-readable-p f)
                   (file-regular-p f)
-                   (> (nth 7 (file-attributes f)) 0))
+                   (> (nth 7 (file-attributes f)) 0)
+                  (< (time-to-number-of-days (time-since (nth 5 (file-attributes f))))
+                     spam-stat-process-directory-age))
          (setq count (1+ count))
          (message "Reading %s: %.2f%%" dir (/ count max))
-         (insert-file-contents f)
+         (insert-file-contents-literally f)
+         (spam-stat-strip-xref)
          (funcall func)
          (erase-buffer))))))
 
@@ -533,13 +529,19 @@ check the variable `spam-stat-score-data'."
   (interactive)
   (hash-table-count spam-stat))
 
-(defun spam-stat-test-directory (dir)
+(defun spam-stat-test-directory (dir &optional verbose)
   "Test all the regular files in directory DIR for spam.
 If the result is 1.0, then all files are considered spam.
 If the result is 0.0, non of the files is considered spam.
-You can use this to determine error rates."
-  (interactive "D")
+You can use this to determine error rates.
+
+If VERBOSE is non-nil display names of files detected as spam or
+non-spam in a temporary buffer.  If it is the symbol `ham',
+display non-spam files; otherwise display spam files."
+  (interactive "DDirectory: ")
   (let* ((files (directory-files dir t "^[^.]"))
+        display-files
+        buffer-score
         (total (length files))
         (score 0.0); float
         (max (/ total 100.0)); float
@@ -550,12 +552,22 @@ You can use this to determine error rates."
                   (file-regular-p f)
                    (> (nth 7 (file-attributes f)) 0))
          (setq count (1+ count))
-         (message "Reading %.2f%%, score %.2f%%"
-                  (/ count max) (/ score count))
-         (insert-file-contents f)
-         (when (> (spam-stat-score-buffer) 0.9)
+         (message "Reading %.2f%%, score %.2f"
+                  (/ count max) (/ score count))
+         (insert-file-contents-literally f)
+         (setq buffer-score (spam-stat-score-buffer))
+         (when (> buffer-score 0.9)
            (setq score (1+ score)))
+         (when verbose
+           (if (> buffer-score 0.9)
+               (unless (eq verbose 'ham) (push f display-files))
+             (when (eq verbose 'ham) (push f display-files))))
          (erase-buffer))))
+    (when display-files
+      (with-output-to-temp-buffer "*spam-stat results*"
+       (dolist (file display-files)
+         (princ file)
+         (terpri))))
     (message "Final score: %d / %d = %f" score total (/ score total))))
 
 ;; Shrinking the dictionary
@@ -571,10 +583,11 @@ COUNT defaults to 5"
                         (spam-stat-bad entry))
                      count)
               (remhash key spam-stat)))
-          spam-stat))
+          spam-stat)
+  (setq spam-stat-dirty t))
 
 (defun spam-stat-install-hooks-function ()
-  "Install the spam-stat function hooks"
+  "Install the spam-stat function hooks."
   (interactive)
   (add-hook 'nnmail-prepare-incoming-message-hook
            'spam-stat-store-current-buffer)
@@ -585,7 +598,7 @@ COUNT defaults to 5"
   (spam-stat-install-hooks-function))
 
 (defun spam-stat-unload-hook ()
-  "Uninstall the spam-stat function hooks"
+  "Uninstall the spam-stat function hooks."
   (interactive)
   (remove-hook 'nnmail-prepare-incoming-message-hook
               'spam-stat-store-current-buffer)
diff --git a/lisp/spam-wash.el b/lisp/spam-wash.el
new file mode 100644 (file)
index 0000000..be91cdf
--- /dev/null
@@ -0,0 +1,74 @@
+;;; spam-wash.el --- wash spam before analysis
+
+;; Copyright (C) 2004 Free Software Foundation, Inc.
+
+;; Author: Andrew Cohen <cohen@andy.bu.edu>
+;; Keywords: mail
+
+;; 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
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; This 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., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This library decodes MIME encodings such as base64 and
+;; quoted-printable to allow for better spam analysis.
+;;
+;; `spam-wash' should be called in a buffer containing the message.
+
+;;; Code:
+
+(require 'gnus-art)
+
+(defun spam-wash ()
+  "Treat the current buffer prior to spam analysis."
+  (interactive)
+  (run-hooks 'gnus-article-decode-hook)
+  (save-excursion
+    (save-restriction
+      (let* ((buffer-read-only  nil)
+            (gnus-inhibit-treatment t)
+            (gnus-article-buffer (current-buffer))
+            (handles (or (mm-dissect-buffer nil gnus-article-loose-mime)
+                         (and gnus-article-emulate-mime
+                              (mm-uu-dissect))))
+            handle)
+         (when gnus-article-mime-handles
+           (mm-destroy-parts gnus-article-mime-handles)
+           (setq gnus-article-mime-handle-alist nil))
+         (setq gnus-article-mime-handles handles)
+         (when (and handles
+                  (or (not (stringp (car handles)))
+                      (cdr handles)))
+               (article-goto-body)
+               (delete-region (point) (point-max))
+               (spam-treat-parts handles))))))
+
+(defun spam-treat-parts (handle)
+  (if (stringp (car handle))
+      (mapcar 'spam-treat-parts (cdr handle))
+    (if (bufferp (car handle))
+       (save-restriction
+         (narrow-to-region (point) (point))
+       (when (let ((case-fold-search t))
+               (string-match "text" (car (mm-handle-type handle))))
+         (mm-insert-part handle))
+         (goto-char (point-max)))
+      (mapcar 'spam-treat-parts handle))))
+
+(provide 'spam-wash)
+
+;;; spam-wash.el ends here
index 130fcd8..f3d0c11 100644 (file)
 ;; for nnimap-split-download-body-default
 (eval-when-compile (require 'nnimap))
 
-;; autoload executable-find
-(eval-and-compile
-  ;; executable-find is not autoloaded in Emacs 20
-  (autoload 'executable-find "executable"))
-
 ;; autoload query-dig
 (eval-and-compile
   (autoload 'query-dig "dig"))
@@ -78,7 +73,7 @@
 (defgroup spam nil
   "Spam configuration.")
 
-(defcustom spam-directory "~/News/spam/"
+(defcustom spam-directory (nnheader-concat gnus-directory "spam/")
   "Directory for spam whitelists and blacklists."
   :type 'directory
   :group 'spam)
@@ -135,9 +130,9 @@ Competition."
   :group 'spam)
 
 (defcustom spam-disable-spam-split-during-ham-respool nil
-  "Whether `spam-split' should be ignored while resplitting ham in a process
-destination.  This is useful to prevent ham from ending up in the same spam
-group after the resplit.  Don't set this to t if you have spam-split as the
+  "Whether `spam-split' should be ignored while resplitting ham.
+This is useful to prevent ham from ending up in the same spam
+group after the resplit.  Don't set this to t if you have `spam-split' as the
 last rule in your split configuration."
   :type 'boolean
   :group 'spam)
@@ -167,6 +162,11 @@ The regular expression is matched against the address."
   :type 'boolean
   :group 'spam)
 
+(defcustom spam-use-gmane-xref nil
+  "Whether the Gmane spam xref should be used by `spam-split'."
+  :type 'boolean
+  :group 'spam)
+
 (defcustom spam-use-blacklist nil
   "Whether the blacklist should be used by `spam-split'."
   :type 'boolean
@@ -223,6 +223,18 @@ Enable this if you want Gnus to invoke Bogofilter on new messages."
   :type 'boolean
   :group 'spam)
 
+(defcustom spam-use-bsfilter-headers nil
+  "Whether bsfilter headers should be used by `spam-split'.
+Enable this if you pre-process messages with Bsfilter BEFORE Gnus sees them."
+  :type 'boolean
+  :group 'spam)
+
+(defcustom spam-use-bsfilter nil
+  "Whether bsfilter should be invoked by `spam-split'.
+Enable this if you want Gnus to invoke Bsfilter on new messages."
+  :type 'boolean
+  :group 'spam)
+
 (defcustom spam-use-BBDB nil
   "Whether BBDB should be used by `spam-split'."
   :type 'boolean
@@ -250,8 +262,22 @@ considered spam."
   :type 'boolean
   :group 'spam)
 
+(defcustom spam-use-spamassassin nil
+  "Whether spamassassin should be invoked by `spam-split'.
+Enable this if you want Gnus to invoke SpamAssassin on new messages."
+  :type 'boolean
+  :group 'spam)
+
+(defcustom spam-use-spamassassin-headers nil
+  "Whether spamassassin headers should be checked by `spam-split'.
+Enable this if you pre-process messages with SpamAssassin BEFORE Gnus sees
+them."
+  :type 'boolean
+  :group 'spam)
+
 (defcustom spam-install-hooks (or
                               spam-use-dig
+                              spam-use-gmane-xref
                               spam-use-blacklist
                               spam-use-whitelist
                               spam-use-whitelist-exclusive
@@ -259,8 +285,12 @@ considered spam."
                               spam-use-hashcash
                               spam-use-regex-headers
                               spam-use-regex-body
-                              spam-use-bogofilter-headers
                               spam-use-bogofilter
+                              spam-use-bogofilter-headers
+                              spam-use-spamassassin
+                              spam-use-spamassassin-headers
+                              spam-use-bsfilter
+                              spam-use-bsfilter-headers
                               spam-use-BBDB
                               spam-use-BBDB-exclusive
                               spam-use-ifile
@@ -286,14 +316,23 @@ All unmarked article in such group receive the spam mark on group entry."
   :type '(repeat (string :tag "Group"))
   :group 'spam)
 
+
+(defcustom spam-gmane-xref-spam-group "gmane.spam.detected"
+  "The group where spam xrefs can be found on Gmane.
+Only meaningful if you enable `spam-use-gmane-xref'."
+  :type 'string
+  :group 'spam)
+
 (defcustom spam-blackhole-servers '("bl.spamcop.net" "relays.ordb.org"
                                    "dev.null.dk" "relays.visi.com")
-  "List of blackhole servers."
+  "List of blackhole servers.
+Only meaningful if you enable `spam-use-blackholes'."
   :type '(repeat (string :tag "Server"))
   :group 'spam)
 
 (defcustom spam-blackhole-good-server-regex nil
-  "String matching IP addresses that should not be checked in the blackholes."
+  "String matching IP addresses that should not be checked in the blackholes.
+Only meaningful if you enable `spam-use-blackholes'."
   :type '(radio (const nil)
                (regexp :format "%t: %v\n" :size 0))
   :group 'spam)
@@ -304,22 +343,26 @@ All unmarked article in such group receive the spam mark on group entry."
   :group 'spam)
 
 (defcustom spam-regex-headers-spam '("^X-Spam-Flag: YES")
-  "Regular expression for positive header spam matches."
+  "Regular expression for positive header spam matches.
+Only meaningful if you enable `spam-use-regex-headers'."
   :type '(repeat (regexp :tag "Regular expression to match spam header"))
   :group 'spam)
 
 (defcustom spam-regex-headers-ham '("^X-Spam-Flag: NO")
-  "Regular expression for positive header ham matches."
+  "Regular expression for positive header ham matches.
+Only meaningful if you enable `spam-use-regex-headers'."
   :type '(repeat (regexp :tag "Regular expression to match ham header"))
   :group 'spam)
 
 (defcustom spam-regex-body-spam '()
-  "Regular expression for positive body spam matches."
+  "Regular expression for positive body spam matches.
+Only meaningful if you enable `spam-use-regex-body'."
   :type '(repeat (regexp :tag "Regular expression to match spam body"))
   :group 'spam)
 
 (defcustom spam-regex-body-ham '()
-  "Regular expression for positive body ham matches."
+  "Regular expression for positive body ham matches.
+Only meaningful if you enable `spam-use-regex-body'."
   :type '(repeat (regexp :tag "Regular expression to match ham body"))
   :group 'spam)
 
@@ -405,13 +448,60 @@ your main source of newsgroup names."
                 (const :tag "Use the default"))
   :group 'spam-bogofilter)
 
+(defgroup spam-bsfilter nil
+  "Spam bsfilter configuration."
+  :group 'spam)
+
+(defcustom spam-bsfilter-path (executable-find "bsfilter")
+  "File path of the Bsfilter executable program."
+  :type '(choice (file :tag "Location of bsfilter")
+                (const :tag "Bsfilter is not installed"))
+  :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-header "X-Spam-Flag"
+  "The header inserted by Bsfilter to flag spam."
+  :type 'string
+  :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-probability-header "X-Spam-Probability"
+  "The header that Bsfilter inserts in messages."
+  :type 'string
+  :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-spam-switch "--add-spam"
+  "The switch that Bsfilter uses to register spam messages."
+  :type 'string
+  :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-ham-switch "--add-ham"
+  "The switch that Bsfilter uses to register ham messages."
+  :type 'string
+  :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-spam-strong-switch "--sub-spam"
+  "The switch that Bsfilter uses to unregister ham messages."
+  :type 'string
+  :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-ham-strong-switch "--sub-clean"
+  "The switch that Bsfilter uses to unregister spam messages."
+  :type 'string
+  :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-database-directory nil
+  "Directory path of the Bsfilter databases."
+  :type '(choice (directory
+                 :tag "Location of the Bsfilter database directory")
+                (const :tag "Use the default"))
+  :group 'spam-bsfilter)
+
 (defgroup spam-spamoracle nil
   "Spam spamoracle configuration."
   :group 'spam)
 
 (defcustom spam-spamoracle-database nil
-  "Location of spamoracle database file. When nil, use the default
-spamoracle database."
+  "Location of spamoracle database file.
+When nil, use the default spamoracle database."
   :type '(choice (directory :tag "Location of spamoracle database file.")
                 (const :tag "Use the default"))
   :group 'spam-spamoracle)
@@ -422,15 +512,87 @@ spamoracle database."
                 (const :tag "Use the default"))
   :group 'spam-spamoracle)
 
+(defgroup spam-spamassassin nil
+  "Spam SpamAssassin configuration."
+  :group 'spam)
+
+(defcustom spam-spamassassin-path (executable-find "spamassassin")
+  "File path of the spamassassin executable 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")
+                (const :tag "spamassassin is not installed"))
+  :group 'spam-spamassassin)
+
+(defcustom spam-spamassassin-arguments ()
+  "Arguments to pass to the spamassassin executable.
+This must be a list.  For example, `(\"-C\" \"configfile\")'."
+  :type '(restricted-sexp :match-alternatives (listp))
+  :group 'spam-spamassassin)
+
+(defcustom spam-spamassassin-spam-flag-header "X-Spam-Flag"
+  "The header inserted by SpamAssassin to flag spam."
+  :type 'string
+  :group 'spam-spamassassin)
+
+(defcustom spam-spamassassin-positive-spam-flag-header "YES"
+  "The regex on `spam-spamassassin-spam-flag-header' for positive spam
+identification"
+  :type 'string
+  :group 'spam-spamassassin)
+
+(defcustom spam-spamassassin-spam-status-header "X-Spam-Status"
+  "The header inserted by SpamAssassin, giving extended scoring information"
+  :type 'string
+  :group 'spam-spamassassin)
+
+(defcustom spam-sa-learn-path (executable-find "sa-learn")
+  "File path of the sa-learn executable program."
+  :type '(choice (file :tag "Location of spamassassin")
+                (const :tag "spamassassin is not installed"))
+  :group 'spam-spamassassin)
+
+(defcustom spam-sa-learn-rebuild t
+  "Whether sa-learn should rebuild the database every time it is called
+Enable this if you want sa-learn to rebuild the database automatically.  Doing
+this will slightly increase the running time of the spam registration process.
+If you choose not to do this, you will have to run \"sa-learn --rebuild\" in
+order for SpamAssassin to recognize the new registered spam."
+  :type 'boolean
+  :group 'spam-spamassassin)
+
+(defcustom spam-sa-learn-spam-switch "--spam"
+  "The switch that sa-learn uses to register spam messages"
+  :type 'string
+  :group 'spam-spamassassin)
+
+(defcustom spam-sa-learn-ham-switch "--ham"
+  "The switch that sa-learn uses to register ham messages"
+  :type 'string
+  :group 'spam-spamassassin)
+
+(defcustom spam-sa-learn-unregister-switch "--forget"
+  "The switch that sa-learn uses to unregister messages messages"
+  :type 'string
+  :group 'spam-spamassassin)
+
 ;;; Key bindings for spam control.
 
 (gnus-define-keys gnus-summary-mode-map
-  "St" spam-bogofilter-score
+  "St" spam-generic-score
   "Sx" gnus-summary-mark-as-spam
-  "Mst" spam-bogofilter-score
+  "Mst" spam-generic-score
   "Msx" gnus-summary-mark-as-spam
   "\M-d" gnus-summary-mark-as-spam)
 
+(defvar spam-cache-lookups t
+  "Whether spam.el will try to cache lookups using `spam-caches'.")
+
+(defvar spam-caches (make-hash-table
+                    :size 10
+                    :test 'equal)
+  "Cache of spam detection entries.")
+
 (defvar spam-old-ham-articles nil
   "List of old ham articles, generated when a group is entered.")
 
@@ -441,15 +603,21 @@ spamoracle database."
   "If non-nil, `spam-split' is disabled, and always returns nil.")
 
 (defvar spam-split-last-successful-check nil
-  "`spam-split' will set this to nil or a spam-use-XYZ check if it
-  finds ham or spam.")
+  "Internal variable.
+`spam-split' will set this to nil or a spam-use-XYZ check if it
+finds ham or spam.")
 
 ;; convenience functions
+(defun spam-clear-cache (symbol)
+  "Clear the spam-caches entry for a check."
+  (remhash symbol spam-caches))
+
 (defun spam-xor (a b)
-  "Logical exclusive `or'."
+  "Logical A xor B."
   (and (or a b) (not (and a b))))
 
 (defun spam-group-ham-mark-p (group mark &optional spam)
+  "Checks if MARK is considered a ham mark in GROUP."
   (when (stringp group)
     (let* ((marks (spam-group-ham-marks group spam))
           (marks (if (symbolp mark)
@@ -458,9 +626,11 @@ spamoracle database."
       (memq mark marks))))
 
 (defun spam-group-spam-mark-p (group mark)
+  "Checks if MARK is considered a spam mark in GROUP."
   (spam-group-ham-mark-p group mark t))
 
 (defun spam-group-ham-marks (group &optional spam)
+  "In GROUP, get all the ham marks."
   (when (stringp group)
     (let* ((marks (if spam
                      (gnus-parameter-spam-marks group)
@@ -470,9 +640,11 @@ spamoracle database."
       marks)))
 
 (defun spam-group-spam-marks (group)
+  "In GROUP, get all the spam marks."
   (spam-group-ham-marks group t))
 
 (defun spam-group-spam-contents-p (group)
+  "Is GROUP a spam group?"
   (if (stringp group)
       (or (member group spam-junk-mailgroups)
          (memq 'gnus-group-spam-classification-spam
@@ -480,6 +652,7 @@ spamoracle database."
     nil))
 
 (defun spam-group-ham-contents-p (group)
+  "Is GROUP a ham group?"
   (if (stringp group)
       (memq 'gnus-group-spam-classification-ham
            (gnus-parameter-spam-contents group))
@@ -488,20 +661,24 @@ spamoracle database."
 (defvar spam-list-of-processors
   '((gnus-group-spam-exit-processor-report-gmane spam spam-use-gmane)
     (gnus-group-spam-exit-processor-bogofilter   spam spam-use-bogofilter)
+    (gnus-group-spam-exit-processor-bsfilter    spam spam-use-bsfilter)
     (gnus-group-spam-exit-processor-blacklist    spam spam-use-blacklist)
     (gnus-group-spam-exit-processor-ifile        spam spam-use-ifile)
     (gnus-group-spam-exit-processor-stat         spam spam-use-stat)
     (gnus-group-spam-exit-processor-spamoracle   spam spam-use-spamoracle)
+    (gnus-group-spam-exit-processor-spamassassin spam spam-use-spamassassin)
     (gnus-group-ham-exit-processor-ifile         ham spam-use-ifile)
     (gnus-group-ham-exit-processor-bogofilter    ham spam-use-bogofilter)
+    (gnus-group-ham-exit-processor-bsfilter      ham spam-use-bsfilter)
     (gnus-group-ham-exit-processor-stat          ham spam-use-stat)
     (gnus-group-ham-exit-processor-whitelist     ham spam-use-whitelist)
     (gnus-group-ham-exit-processor-BBDB          ham spam-use-BBDB)
     (gnus-group-ham-exit-processor-copy          ham spam-use-ham-copy)
+    (gnus-group-ham-exit-processor-spamassassin  ham spam-use-spamassassin)
     (gnus-group-ham-exit-processor-spamoracle    ham spam-use-spamoracle))
-  "The spam-list-of-processors list contains pairs associating a
-ham/spam exit processor variable with a classification and a
-spam-use-* variable.")
+  "The `spam-list-of-processors' list.
+This list contains pairs associating a ham/spam exit processor
+variable with a classification and a spam-use-* variable.")
 
 (defun spam-group-processor-p (group processor)
   (if (and (stringp group)
@@ -564,6 +741,74 @@ spam-use-* variable.")
 (defun spam-group-ham-processor-spamoracle-p (group)
   (spam-group-processor-p group 'gnus-group-ham-exit-processor-spamoracle))
 
+(defun spam-report-articles-gmane (n)
+  "Report the current message as spam.
+Respects the process/prefix convention."
+  (interactive "P")
+  (dolist (article (gnus-summary-work-articles n))
+    (gnus-summary-remove-process-mark article)
+    (spam-report-gmane article)))
+
+(defun spam-necessary-extra-headers ()
+  "Return the extra headers spam.el thinks are necessary."
+  (let (list)
+    (when (or spam-use-spamassassin
+             spam-use-spamassassin-headers
+             spam-use-regex-headers)
+      (push 'X-Spam-Status list))
+    list))
+
+(defun spam-user-format-function-S (headers)
+  (when headers
+    (spam-summary-score headers)))
+
+(defun spam-article-sort-by-spam-status (h1 h2)
+  "Sort articles by score."
+  (let (result)
+    (dolist (header (spam-necessary-extra-headers))
+      (let ((s1 (spam-summary-score h1 header))
+           (s2 (spam-summary-score h2 header)))
+      (unless (= s1 s2)
+       (setq result (< s1 s2))
+       (return))))
+    result))
+
+(defun spam-extra-header-to-number (header headers)
+  "Transform an extra header to a number."
+  (if (gnus-extra-header header headers)
+      (cond
+       ((eq header 'X-Spam-Status)
+       (string-to-number (gnus-replace-in-string
+                          (gnus-extra-header header headers)
+                          ".*hits=" "")))
+       (t nil))
+    nil))
+
+(defun spam-summary-score (headers &optional specific-header)
+  "Score an article for the summary buffer, as fast as possible.
+With SPECIFIC-HEADER, returns only that header's score.
+Will not return a nil score."
+  (let (score)
+    (dolist (header 
+            (if specific-header
+                (list specific-header)
+              (spam-necessary-extra-headers)))
+      (setq score 
+           (spam-extra-header-to-number header headers))
+      (when score 
+       (return)))
+    (or score 0)))
+
+(defun spam-generic-score (&optional recheck)
+  "Invoke whatever scoring method we can."
+  (interactive "P")
+  (cond
+   ((or spam-use-spamassassin spam-use-spamassassin-headers)
+    (spam-spamassassin-score recheck))
+   ((or spam-use-bsfilter spam-use-bsfilter-headers)
+    (spam-bsfilter-score recheck))
+   (t (spam-bogofilter-score recheck))))
+
 ;;; Summary entry and exit processing.
 
 (defun spam-summary-prepare ()
@@ -587,7 +832,7 @@ spam-use-* variable.")
             (new-articles (spam-list-articles
                            gnus-newsgroup-articles
                            classification))
-            (changed-articles (gnus-set-difference old-articles new-articles)))
+            (changed-articles (spam-set-difference new-articles old-articles)))
        ;; now that we have the changed articles, we go through the processors
        (dolist (processor-param spam-list-of-processors)
          (let ((processor (nth 0 processor-param))
@@ -602,7 +847,8 @@ spam-use-* variable.")
            ;; call spam-register-routine with specific articles to unregister,
            ;; when there are articles to unregister and the check is enabled
            (when (and unregister-list (symbol-value check))
-             (spam-register-routine classification check t unregister-list))))))
+             (spam-register-routine 
+              classification check t unregister-list))))))
 
     ;; find all the spam processors applicable to this group
     (dolist (processor-param spam-list-of-processors)
@@ -613,18 +859,17 @@ spam-use-* variable.")
                   (spam-group-processor-p gnus-newsgroup-name processor))
          (spam-register-routine classification check))))
 
-    (if spam-move-spam-nonspam-groups-only
-       (when (not (spam-group-spam-contents-p gnus-newsgroup-name))
-         (spam-mark-spam-as-expired-and-move-routine
-          (gnus-parameter-spam-process-destination gnus-newsgroup-name)))
-      (gnus-message 5 "Marking spam as expired and moving it to %s"
-                   gnus-newsgroup-name)
+    (unless (and spam-move-spam-nonspam-groups-only
+                (spam-group-spam-contents-p gnus-newsgroup-name))
+      (gnus-message 6 "Marking spam as expired and moving it to %s"
+                   (gnus-parameter-spam-process-destination 
+                    gnus-newsgroup-name))
       (spam-mark-spam-as-expired-and-move-routine
        (gnus-parameter-spam-process-destination gnus-newsgroup-name)))
 
     ;; now we redo spam-mark-spam-as-expired-and-move-routine to only
     ;; expire spam, in case the above did not expire them
-    (gnus-message 5 "Marking spam as expired without moving it")
+    (gnus-message 6 "Marking spam as expired without moving it")
     (spam-mark-spam-as-expired-and-move-routine nil)
 
     (when (or (spam-group-ham-contents-p gnus-newsgroup-name)
@@ -641,24 +886,38 @@ spam-use-* variable.")
            (spam-register-routine classification check)))))
 
     (when (spam-group-ham-processor-copy-p gnus-newsgroup-name)
-      (gnus-message 5 "Copying ham")
+      (gnus-message 6 "Copying ham")
       (spam-ham-copy-routine
        (gnus-parameter-ham-process-destination gnus-newsgroup-name)))
 
     ;; now move all ham articles out of spam groups
     (when (spam-group-spam-contents-p gnus-newsgroup-name)
-      (gnus-message 5 "Moving ham messages from spam group")
+      (gnus-message 6 "Moving ham messages from spam group")
       (spam-ham-move-routine
        (gnus-parameter-ham-process-destination gnus-newsgroup-name))))
 
   (setq spam-old-ham-articles nil)
   (setq spam-old-spam-articles nil))
 
+(defun spam-set-difference (list1 list2)
+  "Return a set difference of LIST1 and LIST2.  
+When either list is nil, the other is returned."
+  (if (and list1 list2)
+      ;; we have two non-nil lists
+      (progn
+       (dolist (item (append list1 list2))
+         (when (and (memq item list1) (memq item list2))
+           (setq list1 (delq item list1))
+           (setq list2 (delq item list2))))
+       (append list1 list2))
+    ;; if either of the lists was nil, return the other one
+    (if list1 list1 list2)))
+
 (defun spam-mark-junk-as-spam-routine ()
   ;; check the global list of group names spam-junk-mailgroups and the
   ;; group parameters
   (when (spam-group-spam-contents-p gnus-newsgroup-name)
-    (gnus-message 5 "Marking %s articles as spam"
+    (gnus-message 6 "Marking %s articles as spam"
                  (if spam-mark-only-unseen-as-spam
                      "unseen"
                    "unread"))
@@ -763,28 +1022,13 @@ spam-use-* variable.")
       (apply 'spam-ham-move-routine (car groups))
     (spam-ham-copy-or-move-routine nil groups)))
 
-(eval-and-compile
-  (defalias 'spam-point-at-eol (if (fboundp 'point-at-eol)
-                                  'point-at-eol
-                                'line-end-position)))
-
 (defun spam-get-article-as-string (article)
-  (let ((article-buffer (spam-get-article-as-buffer article))
-       article-string)
-    (when article-buffer
-      (save-window-excursion
-       (set-buffer article-buffer)
-       (setq article-string (buffer-string))))
-    article-string))
-
-(defun spam-get-article-as-buffer (article)
-  (let ((article-buffer))
-    (when (numberp article)
-      (save-window-excursion
-       (gnus-summary-goto-subject article)
-       (gnus-summary-show-article t)
-       (setq article-buffer (get-buffer gnus-article-buffer))))
-    article-buffer))
+  (when (numberp article)
+    (with-temp-buffer
+      (gnus-request-article-this-buffer
+       article
+       gnus-newsgroup-name)
+      (buffer-string))))
 
 ;; disabled for now
 ;; (defun spam-get-article-as-filename (article)
@@ -798,48 +1042,88 @@ spam-use-* variable.")
 ;;     article-filename
 ;;       nil)))
 
-(defun spam-fetch-field-from-fast (article)
-  "Fetch the `from' field 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))))
-    nil))
-
-(defun spam-fetch-field-subject-fast (article)
-  "Fetch the `subject' field quickly, using the internal
-  gnus-data-list function"
-  (if (and (numberp article)
-          (assoc article (gnus-data-list nil)))
-      (mail-header-subject
-       (gnus-data-header (assoc article (gnus-data-list nil))))
-    nil))
-
-(defun spam-fetch-field-message-id-fast (article)
-  "Fetch the `Message-ID' field quickly, using the internal
-  gnus-data-list function"
-  (if (and (numberp article)
-          (assoc article (gnus-data-list nil)))
-      (mail-header-message-id
-       (gnus-data-header (assoc article (gnus-data-list nil))))
-    nil))
+(defun spam-fetch-field-fast (article field &optional prepared-data-header)
+  "Fetch a field quickly, using the internal gnus-data-list function"
+  (when (numberp article)
+    (let* ((data-header (or prepared-data-header
+                           (spam-fetch-article-header article))))
+      (if (arrayp data-header)
+       (cond
+        ((equal field 'from)
+         (mail-header-from data-header))
+        ((equal field 'message-id)
+         (mail-header-message-id data-header))
+        ((equal field 'subject)
+         (mail-header-subject data-header))
+        ((equal field 'references)
+         (mail-header-references data-header))
+        ((equal field 'date)
+         (mail-header-date data-header))
+        ((equal field 'xref)
+         (mail-header-xref data-header))
+        ((equal field 'extra)
+         (mail-header-extra data-header))
+        (t
+         nil))
+       (gnus-message 6 "Article %d has a nil data header" article)))))
+
+(defun spam-fetch-field-from-fast (article &optional prepared-data-header)
+  (spam-fetch-field-fast article 'from prepared-data-header))
+
+(defun spam-fetch-field-subject-fast (article &optional prepared-data-header)
+  (spam-fetch-field-fast article 'subject prepared-data-header))
+
+(defun spam-fetch-field-message-id-fast (article &optional prepared-data-header)
+  (spam-fetch-field-fast article 'message-id prepared-data-header))
+
+(defun spam-generate-fake-headers (article)
+  (let ((dh (spam-fetch-article-header article)))
+    (if dh
+       (concat
+        (format 
+         (concat "From: %s\nSubject: %s\nMessage-ID: %s\n"
+                 "Date: %s\nReferences: %s\nXref: %s\n")
+         (spam-fetch-field-fast article 'from dh)
+         (spam-fetch-field-fast article 'subject dh)
+         (spam-fetch-field-fast article 'message-id dh)
+         (spam-fetch-field-fast article 'date dh)
+         (spam-fetch-field-fast article 'references dh)
+         (spam-fetch-field-fast article 'xref dh))
+        (when (spam-fetch-field-fast article 'extra dh)
+          (format "%s\n" (spam-fetch-field-fast article 'extra dh))))
+      (gnus-message
+       5
+       "spam-generate-fake-headers: article %d didn't have a valid header"
+       article))))
+
+(defun spam-fetch-article-header (article)
+  (save-excursion
+    (set-buffer gnus-summary-buffer)
+    (gnus-read-header article)
+    (nth 3 (assq article gnus-newsgroup-data))))
 
 \f
 ;;;; Spam determination.
 
 (defvar spam-list-of-checks
-  '((spam-use-blacklist         . spam-check-blacklist)
-    (spam-use-regex-headers     . spam-check-regex-headers)
-    (spam-use-regex-body        . spam-check-regex-body)
-    (spam-use-whitelist         . spam-check-whitelist)
-    (spam-use-BBDB              . spam-check-BBDB)
-    (spam-use-ifile             . spam-check-ifile)
-    (spam-use-spamoracle         . spam-check-spamoracle)
-    (spam-use-stat              . spam-check-stat)
-    (spam-use-blackholes        . spam-check-blackholes)
-    (spam-use-hashcash          . spam-check-hashcash)
-    (spam-use-bogofilter-headers . spam-check-bogofilter-headers)
-    (spam-use-bogofilter        . spam-check-bogofilter))
+  '((spam-use-blacklist                .       spam-check-blacklist)
+    (spam-use-regex-headers            .       spam-check-regex-headers)
+    (spam-use-gmane-xref               .       spam-check-gmane-xref)
+    (spam-use-regex-body               .       spam-check-regex-body)
+    (spam-use-whitelist                .       spam-check-whitelist)
+    (spam-use-BBDB                     .       spam-check-BBDB)
+    (spam-use-BBDB-exclusive           .       spam-check-BBDB)
+    (spam-use-ifile                    .       spam-check-ifile)
+    (spam-use-spamoracle               .       spam-check-spamoracle)
+    (spam-use-stat                     .       spam-check-stat)
+    (spam-use-blackholes               .       spam-check-blackholes)
+    (spam-use-hashcash                 .       spam-check-hashcash)
+    (spam-use-spamassassin-headers     .       spam-check-spamassassin-headers)
+    (spam-use-spamassassin             .       spam-check-spamassassin)
+    (spam-use-bogofilter-headers       .       spam-check-bogofilter-headers)
+    (spam-use-bogofilter               .       spam-check-bogofilter)
+    (spam-use-bsfilter-headers         .       spam-check-bsfilter-headers)
+    (spam-use-bsfilter                 .       spam-check-bsfilter))
   "The spam-list-of-checks list contains pairs associating a
 parameter variable with a spam checking function.  If the
 parameter variable is true, then the checking function is called,
@@ -859,11 +1143,15 @@ definitely a spam.")
     spam-use-regex-body
     spam-use-stat
     spam-use-bogofilter
+    spam-use-bsfilter
+    spam-use-blackholes
+    spam-use-spamassassin
     spam-use-spamoracle)
   "The spam-list-of-statistical-checks list contains all the mail
-splitters that need to have the full message body available.")
+splitters that need to have the full message body available.
+Note that you should fetch extra headers if you don't like this,
+e.g. fetch the 'Received' header for spam-use-blackholes.")
 
-;;;TODO: modify to invoke self with each check if invoked without specifics
 (defun spam-split (&rest specific-checks)
   "Split this message into the `spam' group if it is spam.
 This function can be used as an entry in the variable `nnmail-split-fancy',
@@ -885,7 +1173,9 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
        (save-excursion
          (save-restriction
            (dolist (check spam-list-of-statistical-checks)
-             (when (and (symbolp check) (symbol-value check))
+             (when (and (symbolp check)
+                        (or (symbol-value check)
+                            (memq check specific-checks)))
                (widen)
                (gnus-message 8 "spam-split: widening the buffer (%s requires it)"
                              (symbol-name check))
@@ -895,10 +1185,12 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
                  decision)
              (while (and list-of-checks (not decision))
                (let ((pair (pop list-of-checks)))
-                 (when (and (symbol-value (car pair))
-                            (or (null specific-checks)
-                                (memq (car pair) specific-checks)))
-                   (gnus-message 5 "spam-split: calling the %s function"
+                 (when (or
+                        ;; either, given specific checks, this is one of them
+                        (and specific-checks (memq (car pair) specific-checks))
+                        ;; or, given no specific checks, spam-use-CHECK is set
+                        (and (null specific-checks) (symbol-value (car pair))))
+                   (gnus-message 6 "spam-split: calling the %s function"
                                  (symbol-name (cdr pair)))
                    (setq decision (funcall (cdr pair)))
                    ;; if we got a decision at all, save the current check
@@ -906,8 +1198,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
                      (setq spam-split-last-successful-check (car pair)))
 
                    (when (eq decision 'spam)
-                     (if spam-split-symbolic-return
-                         (setq decision spam-split-group)
+                     (unless spam-split-symbolic-return
                        (gnus-error
                         5
                         (format "spam-split got %s but %s is nil"
@@ -924,44 +1215,73 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
   (let* ((group gnus-newsgroup-name)
         (autodetect (gnus-parameter-spam-autodetect group))
         (methods (gnus-parameter-spam-autodetect-methods group))
-        (first-method (nth 0 methods)))
-  (when (and autodetect
-            (not (equal first-method 'none)))
+        (first-method (nth 0 methods))
+        (articles (if spam-autodetect-recheck-messages
+                      gnus-newsgroup-articles
+                    gnus-newsgroup-unseen))
+        article-cannot-be-faked)
+
+    (dolist (check spam-list-of-statistical-checks)
+      (when (and (symbolp check)
+                (memq check methods))
+       (setq article-cannot-be-faked t)
+       (return)))
+
+    (when (memq 'default methods)
+      (setq article-cannot-be-faked t))
+
+    (when (and autodetect
+              (not (equal first-method 'none)))
     (mapcar
      (lambda (article)
        (let ((id (spam-fetch-field-message-id-fast article))
             (subject (spam-fetch-field-subject-fast article))
-            (sender (spam-fetch-field-from-fast article)))
-        (unless (and spam-log-to-registry
-                     (spam-log-registered-p id 'incoming))
-          (let* ((spam-split-symbolic-return t)
-                 (spam-split-symbolic-return-positive t)
-                 (split-return
-                  (with-temp-buffer
-                    (gnus-request-article-this-buffer
-                     article
-                     group)
-                    (if (or (null first-method)
-                            (equal first-method 'default))
-                        (spam-split)
-                      (apply 'spam-split methods)))))
-            (if (equal split-return 'spam)
-                (gnus-summary-mark-article article gnus-spam-mark))
-
-            (when (and split-return spam-log-to-registry)
-              (when (zerop (gnus-registry-group-count id))
-                (gnus-registry-add-group
-                 id group subject sender))
-
+            (sender (spam-fetch-field-from-fast article))
+            registry-lookup)
+        
+        (unless id
+          (gnus-message 6 "Article %d has no message ID!" article))
+        
+        (when (and id spam-log-to-registry)
+          (setq registry-lookup (spam-log-registration-type id 'incoming))
+          (when registry-lookup
+            (gnus-message
+             9
+             "spam-find-spam: message %s was already registered incoming"
+             id)))
+
+        (let* ((spam-split-symbolic-return t)
+               (spam-split-symbolic-return-positive t)
+               (fake-headers (spam-generate-fake-headers article))
+               (split-return
+                (or registry-lookup
+                    (with-temp-buffer
+                      (if article-cannot-be-faked
+                          (gnus-request-article-this-buffer
+                           article
+                           group)
+                        ;; else, we fake the article
+                        (when fake-headers (insert fake-headers)))
+                      (if (or (null first-method)
+                              (equal first-method 'default))
+                          (spam-split)
+                        (apply 'spam-split methods))))))
+          (if (equal split-return 'spam)
+              (gnus-summary-mark-article article gnus-spam-mark))
+          
+          (when (and id split-return spam-log-to-registry)
+            (when (zerop (gnus-registry-group-count id))
+              (gnus-registry-add-group
+               id group subject sender))
+              
+            (unless registry-lookup
               (spam-log-processing-to-registry
                id
                'incoming
                split-return
                spam-split-last-successful-check
                group))))))
-     (if spam-autodetect-recheck-messages
-        gnus-newsgroup-articles
-       gnus-newsgroup-unseen)))))
+    articles))))
 
 (defvar spam-registration-functions
   ;; first the ham register, second the spam register function
@@ -974,6 +1294,10 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
                         nil
                         spam-whitelist-unregister-routine
                         nil)
+    (spam-use-ham-copy   nil
+                        nil
+                        nil
+                        nil)
     (spam-use-BBDB      spam-BBDB-register-routine
                         nil
                         spam-BBDB-unregister-routine
@@ -996,10 +1320,18 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
                         ;; does Gmane support unregistration?
                         nil
                         nil)
+    (spam-use-spamassassin spam-spamassassin-register-ham-routine
+                          spam-spamassassin-register-spam-routine
+                          spam-spamassassin-unregister-ham-routine
+                          spam-spamassassin-unregister-spam-routine)
     (spam-use-bogofilter spam-bogofilter-register-ham-routine
                         spam-bogofilter-register-spam-routine
                         spam-bogofilter-unregister-ham-routine
-                        spam-bogofilter-unregister-spam-routine))
+                        spam-bogofilter-unregister-spam-routine)
+    (spam-use-bsfilter  spam-bsfilter-register-ham-routine
+                        spam-bsfilter-register-spam-routine
+                        spam-bsfilter-unregister-ham-routine
+                        spam-bsfilter-unregister-spam-routine))
   "The spam-registration-functions list contains pairs
 associating a parameter variable with the ham and spam
 registration functions, and the ham and spam unregistration
@@ -1035,21 +1367,19 @@ functions")
   (let ((mark-check (if (eq classification 'spam)
                        'spam-group-spam-mark-p
                      'spam-group-ham-mark-p))
-       list mark-cache-yes mark-cache-no)
+       alist mark-cache-yes mark-cache-no)
     (dolist (article articles)
       (let ((mark (gnus-summary-article-mark article)))
-       (unless (memq mark mark-cache-no)
-         (if (memq mark mark-cache-yes)
-             (push article list)
-           ;; else, we have to actually check the mark
-           (if (funcall mark-check
-                        gnus-newsgroup-name
-                        mark)
-               (progn
-                 (push article list)
-                 (push mark mark-cache-yes))
-             (push mark mark-cache-no))))))
-    list))
+       (unless (or (memq mark mark-cache-yes)
+                   (memq mark mark-cache-no))
+         (if (funcall mark-check
+                      gnus-newsgroup-name
+                      mark)
+             (push mark mark-cache-yes)
+           (push mark mark-cache-no)))
+       (when (memq mark mark-cache-yes)
+         (push article alist))))
+    alist))
 
 (defun spam-register-routine (classification
                              check
@@ -1076,7 +1406,7 @@ functions")
                            gnus-newsgroup-articles
                            classification)))
        ;; process them
-       (gnus-message 5 "%s %d %s articles with classification %s, check %s"
+       (gnus-message 5 "%s %d %s articles as %s using backend %s"
                      (if unregister "Unregistering" "Registering")
                      (length articles)
                      (if specific-articles "specific" "")
@@ -1108,8 +1438,10 @@ functions")
           type
           cell-list))
 
-      (gnus-message 5 (format "%s called with bad ID, type, classification, check, or group"
-                             "spam-log-processing-to-registry")))))
+      (gnus-message 
+       5 
+       (format "%s call with bad ID, type, classification, spam-check, or group"
+              "spam-log-processing-to-registry")))))
 
 ;;; check if a ham- or spam-processor registration has been done
 (defun spam-log-registered-p (id type)
@@ -1118,10 +1450,29 @@ functions")
             (spam-process-type-valid-p type))
        (cdr-safe (gnus-registry-fetch-extra id type))
       (progn
-       (gnus-message 5 (format "%s called with bad ID, type, classification, or check"
-                               "spam-log-registered-p"))
+       (gnus-message
+        5 
+        (format "%s called with bad ID, type, classification, or spam-check"
+                "spam-log-registered-p"))
        nil))))
 
+;;; check what a ham- or spam-processor registration says
+;;; returns nil if conflicting registrations are found
+(defun spam-log-registration-type (id type)
+  (let ((count 0)
+       decision)
+    (dolist (reg (spam-log-registered-p id type))
+      (let ((classification (nth 0 reg)))
+       (when (spam-classification-valid-p classification)
+         (when (and decision
+                    (not (eq classification decision)))
+           (setq count (+ 1 count)))
+         (setq decision classification))))
+    (if (< 0 count)
+       nil
+      decision)))
+
+
 ;;; check if a ham- or spam-processor registration needs to be undone
 (defun spam-log-unregistration-needed-p (id type classification check)
   (when spam-log-to-registry
@@ -1138,8 +1489,10 @@ functions")
                (setq found t))))
          found)
       (progn
-       (gnus-message 5 (format "%s called with bad ID, type, classification, or check"
-                               "spam-log-unregistration-needed-p"))
+       (gnus-message
+        5 
+        (format "%s called with bad ID, type, classification, or spam-check"
+                "spam-log-unregistration-needed-p"))
        nil))))
 
 
@@ -1162,7 +1515,7 @@ functions")
           type
           new-cell-list))
       (progn
-       (gnus-message 5 (format "%s called with bad ID, type, check, or group"
+       (gnus-message 6 (format "%s call with bad ID, type, spam-check, or group"
                                "spam-log-undo-registration"))
        nil))))
 
@@ -1173,6 +1526,20 @@ functions")
       (setq nnimap-split-download-body-default t))))
 
 \f
+;;;; Gmane xrefs
+(defun spam-check-gmane-xref ()
+  (let ((header (or
+                (message-fetch-field "Xref")
+                (message-fetch-field "Newsgroups")))
+       (spam-split-group (if spam-split-symbolic-return
+                             'spam
+                           spam-split-group)))
+    (when header                       ; return nil when no header
+      (when (string-match spam-gmane-xref-spam-group
+                         header)
+         spam-split-group))))
+
+\f
 ;;;; Regex body
 
 (defun spam-check-regex-body ()
@@ -1215,7 +1582,7 @@ functions")
 
 (defun spam-check-blackholes ()
   "Check the Received headers for blackholed relays."
-  (let ((headers (nnmail-fetch-field "received"))
+  (let ((headers (message-fetch-field "received"))
        (spam-split-group (if spam-split-symbolic-return
                              'spam
                            spam-split-group))
@@ -1224,7 +1591,7 @@ functions")
       (with-temp-buffer
        (insert headers)
        (goto-char (point-min))
-       (gnus-message 5 "Checking headers for relay addresses")
+       (gnus-message 6 "Checking headers for relay addresses")
        (while (re-search-forward
                "\\([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\\)" nil t)
          (gnus-message 9 "Blackhole search found host IP %s." (match-string 1))
@@ -1242,13 +1609,13 @@ functions")
                (if spam-use-dig
                    (let ((query-result (query-dig query-string)))
                      (when query-result
-                       (gnus-message 5 "(DIG): positive blackhole check '%s'"
+                       (gnus-message 6 "(DIG): positive blackhole check '%s'"
                                      query-result)
                        (push (list ip server query-result)
                              matches)))
                  ;; else, if not using dig.el
                  (when (query-dns query-string)
-                   (gnus-message 5 "positive blackhole check")
+                   (gnus-message 6 "positive blackhole check")
                    (push (list ip server (query-dns query-string 'TXT))
                          matches)))))))))
     (when matches
@@ -1280,6 +1647,12 @@ functions")
       (require 'bbdb)
       (require 'bbdb-com)
 
+      ;; when the BBDB changes, we want to clear out our cache
+      (defun spam-clear-cache-BBDB (&rest immaterial)
+       (spam-clear-cache 'spam-use-BBDB))
+
+      (add-hook 'bbdb-change-hook 'spam-clear-cache-BBDB)
+
       (defun spam-enter-ham-BBDB (addresses &optional remove)
        "Enter an address into the BBDB; implies ham (non-spam) sender"
        (dolist (from addresses)
@@ -1293,7 +1666,7 @@ functions")
                   (record (and net-address
                                (bbdb-search-simple nil net-address))))
              (when net-address
-               (gnus-message 5 "%s address %s %s BBDB"
+               (gnus-message 6 "%s address %s %s BBDB"
                              (if remove "Deleting" "Adding")
                              from
                              (if remove "from" "to"))
@@ -1315,13 +1688,30 @@ functions")
 
       (defun spam-check-BBDB ()
        "Mail from people in the BBDB is classified as ham or non-spam"
-       (let ((who (nnmail-fetch-field "from"))
+       (let ((who (message-fetch-field "from"))
              (spam-split-group (if spam-split-symbolic-return
                                    'spam
-                                 spam-split-group)))
+                                 spam-split-group))
+             bbdb-cache bbdb-hashtable)
+         (when spam-cache-lookups
+           (setq bbdb-cache (gethash 'spam-use-BBDB spam-caches))
+           (unless bbdb-cache
+             (setq bbdb-cache
+                   ;; this is the expanded (bbdb-hashtable) macro
+                   ;; without the debugging support
+                   (with-current-buffer (bbdb-buffer)
+                     (save-excursion
+                       (save-window-excursion
+                         (bbdb-records nil t)
+                         bbdb-hashtable))))
+             (puthash 'spam-use-BBDB bbdb-cache spam-caches)))
          (when who
            (setq who (nth 1 (gnus-extract-address-components who)))
-           (if (bbdb-search-simple nil who)
+           (if
+               (if spam-cache-lookups
+                   (symbol-value
+                    (intern-soft who bbdb-cache))
+                 (bbdb-search-simple nil who))
                t
              (if spam-use-BBDB-exclusive
                  spam-split-group
@@ -1329,6 +1719,8 @@ functions")
 
   (file-error (progn
                (defalias 'bbdb-search-simple 'ignore)
+               (defalias 'bbdb-records 'ignore)
+               (defalias 'bbdb-buffer 'ignore)
                (defalias 'spam-check-BBDB 'ignore)
                (defalias 'spam-BBDB-register-routine 'ignore)
                (defalias 'spam-enter-ham-BBDB 'ignore)
@@ -1368,7 +1760,7 @@ functions")
        ;; check the return now (we're back in the temp buffer)
        (goto-char (point-min))
        (if (not (eobp))
-           (setq category (buffer-substring (point) (spam-point-at-eol))))
+           (setq category (buffer-substring (point) (point-at-eol))))
        (when (not (zerop (length category))) ; we need a category here
          (if spam-ifile-all-categories
              (setq return category)
@@ -1489,7 +1881,8 @@ Uses `gnus-newsgroup-name' if category is nil (for ham registration)."
 With a non-nil REMOVE, remove them."
   (interactive "sAddress: ")
   (spam-enter-list address spam-whitelist remove)
-  (setq spam-whitelist-cache nil))
+  (setq spam-whitelist-cache nil)
+  (spam-clear-cache 'spam-use-whitelist))
 
 ;;; address can be a list, too
 (defun spam-enter-blacklist (address &optional remove)
@@ -1497,7 +1890,8 @@ With a non-nil REMOVE, remove them."
 With a non-nil REMOVE, remove them."
   (interactive "sAddress: ")
   (spam-enter-list address spam-blacklist remove)
-  (setq spam-blacklist-cache nil))
+  (setq spam-blacklist-cache nil)
+  (spam-clear-cache 'spam-use-whitelist))
 
 (defun spam-enter-list (addresses file &optional remove)
   "Enter ADDRESSES into the given FILE.
@@ -1526,6 +1920,32 @@ REMOVE not nil, remove the ADDRESSES."
              (insert a "\n")))))
       (save-buffer))))
 
+(defun spam-filelist-build-cache (type)
+  (let ((cache (if (eq type 'spam-use-blacklist)
+                  spam-blacklist-cache
+                spam-whitelist-cache))
+       parsed-cache)
+    (unless (gethash type spam-caches)
+      (while cache
+       (let ((address (pop cache)))
+         (unless (zerop (length address)) ; 0 for a nil address too
+           (setq address (regexp-quote address))
+           ;; fix regexp-quote's treatment of user-intended regexes
+           (while (string-match "\\\\\\*" address)
+             (setq address (replace-match ".*" t t address))))
+         (push address parsed-cache)))
+      (puthash type parsed-cache spam-caches))))
+
+(defun spam-filelist-check-cache (type from)
+  (when (stringp from)
+    (spam-filelist-build-cache type)
+    (let (found)
+      (dolist (address (gethash type spam-caches))
+       (when (and address (string-match address from))
+         (setq found t)
+         (return)))
+      found)))
+
 ;;; returns t if the sender is in the whitelist, nil or
 ;;; spam-split-group otherwise
 (defun spam-check-whitelist ()
@@ -1535,7 +1955,7 @@ REMOVE not nil, remove the ADDRESSES."
                            spam-split-group)))
     (unless spam-whitelist-cache
       (setq spam-whitelist-cache (spam-parse-list spam-whitelist)))
-    (if (spam-from-listed-p spam-whitelist-cache)
+    (if (spam-from-listed-p 'spam-use-whitelist)
        t
       (if spam-use-whitelist-exclusive
          spam-split-group
@@ -1548,7 +1968,7 @@ REMOVE not nil, remove the ADDRESSES."
                            spam-split-group)))
     (unless spam-blacklist-cache
       (setq spam-blacklist-cache (spam-parse-list spam-blacklist)))
-    (and (spam-from-listed-p spam-blacklist-cache) spam-split-group)))
+    (and (spam-from-listed-p 'spam-use-blacklist) spam-split-group)))
 
 (defun spam-parse-list (file)
   (when (file-readable-p file)
@@ -1556,7 +1976,7 @@ REMOVE not nil, remove the ADDRESSES."
       (with-temp-buffer
        (insert-file-contents file)
        (while (not (eobp))
-         (setq address (buffer-substring (point) (spam-point-at-eol)))
+         (setq address (buffer-substring (point) (point-at-eol)))
          (forward-line 1)
          ;; insert the e-mail address if detected, otherwise the raw data
          (unless (zerop (length address))
@@ -1564,20 +1984,10 @@ REMOVE not nil, remove the ADDRESSES."
              (push (or pure-address address) contents)))))
       (nreverse contents))))
 
-(defun spam-from-listed-p (cache)
-  (let ((from (nnmail-fetch-field "from"))
+(defun spam-from-listed-p (type)
+  (let ((from (message-fetch-field "from"))
        found)
-    (while cache
-      (let ((address (pop cache)))
-       (unless (zerop (length address)) ; 0 for a nil address too
-         (setq address (regexp-quote address))
-         ;; fix regexp-quote's treatment of user-intended regexes
-         (while (string-match "\\\\\\*" address)
-           (setq address (replace-match ".*" t t address))))
-       (when (and address (string-match address from))
-         (setq found t
-               cache nil))))
-    found))
+    (spam-filelist-check-cache type from)))
 
 (defun spam-filelist-register-routine (articles blacklist &optional unregister)
   (let ((de-symbol (if blacklist 'spam-use-whitelist 'spam-use-blacklist))
@@ -1586,7 +1996,7 @@ REMOVE not nil, remove the ADDRESSES."
         (if blacklist 'spam-enter-blacklist 'spam-enter-whitelist))
        (remove-function
         (if blacklist 'spam-enter-whitelist 'spam-enter-blacklist))
-       from addresses unregister-list)
+       from addresses unregister-list article-unregister-list)
     (dolist (article articles)
       (let ((from (spam-fetch-field-from-fast article))
            (id (spam-fetch-field-message-id-fast article))
@@ -1602,6 +2012,7 @@ REMOVE not nil, remove the ADDRESSES."
                 (null unregister)
                 (spam-log-unregistration-needed-p
                  id 'process declassification de-symbol))
+           (push article article-unregister-list)
            (push from unregister-list))
          (unless sender-ignored
            (push from addresses)))))
@@ -1610,7 +2021,7 @@ REMOVE not nil, remove the ADDRESSES."
        (funcall enter-function addresses t) ; unregister all these addresses
       ;; else, register normally and unregister what we need to
       (funcall remove-function unregister-list t)
-      (dolist (article unregister-list)
+      (dolist (article article-unregister-list)
        (spam-log-undo-registration
         (spam-fetch-field-message-id-fast article)
         'process
@@ -1639,7 +2050,7 @@ REMOVE not nil, remove the ADDRESSES."
 \f
 ;;;; Bogofilter
 (defun spam-check-bogofilter-headers (&optional score)
-  (let ((header (nnmail-fetch-field spam-bogofilter-header))
+  (let ((header (message-fetch-field spam-bogofilter-header))
        (spam-split-group (if spam-split-symbolic-return
                              'spam
                            spam-split-group)))
@@ -1654,17 +2065,18 @@ REMOVE not nil, remove the ADDRESSES."
          spam-split-group)))))
 
 ;; return something sensible if the score can't be determined
-(defun spam-bogofilter-score ()
+(defun spam-bogofilter-score (&optional recheck)
   "Get the Bogofilter spamicity score"
-  (interactive)
+  (interactive "P")
   (save-window-excursion
     (gnus-summary-show-article t)
     (set-buffer gnus-article-buffer)
-    (let ((score (or (spam-check-bogofilter-headers t)
+    (let ((score (or (unless recheck
+                      (spam-check-bogofilter-headers t))
                     (spam-check-bogofilter t))))
+      (gnus-summary-show-article)
       (message "Spamicity score %s" score)
-      (or score "0"))
-    (gnus-summary-show-article)))
+      (or score "0"))))
 
 (defun spam-check-bogofilter (&optional score)
   "Check the Bogofilter backend for the classification of this message"
@@ -1746,7 +2158,7 @@ REMOVE not nil, remove the ADDRESSES."
                  (goto-char (point-min))
                  (when (re-search-forward "^X-Spam: yes;" nil t)
                    spam-split-group))
-             (error "Error running spamoracle" status))))))))
+             (error "Error running spamoracle: %s" status))))))))
 
 (defun spam-spamoracle-learn (articles article-is-spam-p &optional unregister)
   "Run spamoracle in training mode."
@@ -1768,8 +2180,8 @@ REMOVE not nil, remove the ADDRESSES."
                           `("-f" ,spam-spamoracle-database
                             "add" ,arg)
                         `("add" ,arg)))))
-         (when (not (eq 0 status))
-           (error "Error running spamoracle" status)))))))
+         (unless (eq 0 status)
+           (error "Error running spamoracle: %s" status)))))))
 
 (defun spam-spamoracle-learn-ham (articles &optional unregister)
   (spam-spamoracle-learn articles nil unregister))
@@ -1784,12 +2196,202 @@ REMOVE not nil, remove the ADDRESSES."
   (spam-spamoracle-learn-spam articles t))
 
 \f
+;;;; SpamAssassin
+;;; based mostly on the bogofilter code
+(defun spam-check-spamassassin-headers (&optional score)
+  "Check the SpamAssassin headers for the classification of this message."
+  (if score                            ; scoring mode
+      (let ((header (message-fetch-field spam-spamassassin-spam-status-header)))
+       (when header
+         (if (string-match "hits=\\(-?[0-9.]+\\)" header)
+             (match-string 1 header)
+           "0")))
+    ;; spam detection mode
+    (let ((header (message-fetch-field spam-spamassassin-spam-flag-header))
+         (spam-split-group (if spam-split-symbolic-return
+                                'spam
+                              spam-split-group)))
+         (when header                  ; return nil when no header
+           (when (string-match spam-spamassassin-positive-spam-flag-header
+                               header)
+             spam-split-group)))))
+
+(defun spam-check-spamassassin (&optional score)
+  "Check the SpamAssassin backend for the classification of this message."
+  (let ((article-buffer-name (buffer-name)))
+    (with-temp-buffer
+      (let ((temp-buffer-name (buffer-name)))
+       (save-excursion
+         (set-buffer article-buffer-name)
+         (apply 'call-process-region
+                (point-min) (point-max) spam-spamassassin-path
+                nil temp-buffer-name nil spam-spamassassin-arguments))
+       ;; check the return now (we're back in the temp buffer)
+       (goto-char (point-min))
+       (spam-check-spamassassin-headers score)))))
+
+;; return something sensible if the score can't be determined
+(defun spam-spamassassin-score (&optional recheck)
+  "Get the SpamAssassin score"
+  (interactive "P")
+  (save-window-excursion
+    (gnus-summary-show-article t)
+    (set-buffer gnus-article-buffer)
+    (let ((score (or (unless recheck
+                      (spam-check-spamassassin-headers t))
+                    (spam-check-spamassassin t))))
+      (gnus-summary-show-article)
+      (message "SpamAssassin score %s" score)
+      (or score "0"))))
+
+(defun spam-spamassassin-register-with-sa-learn (articles spam
+                                                &optional unregister)
+  "Register articles with spamassassin's sa-learn as spam or non-spam."
+  (if articles
+      (let ((action (if unregister spam-sa-learn-unregister-switch
+                     (if spam spam-sa-learn-spam-switch
+                       spam-sa-learn-ham-switch)))
+           (summary-buffer-name (buffer-name)))
+       (with-temp-buffer
+         ;; group the articles into mbox format
+         (dolist (article articles)
+           (let (article-string)
+             (save-excursion
+               (set-buffer summary-buffer-name)
+               (setq article-string (spam-get-article-as-string article)))
+             (when (stringp article-string)
+               (insert "From \n") ; mbox separator (sa-learn only checks the
+                                  ; first five chars, so we can get away with
+                                  ; a bogus line))
+               (insert article-string)
+               (insert "\n"))))
+         ;; call sa-learn on all messages at the same time
+         (apply 'call-process-region
+                (point-min) (point-max)
+                spam-sa-learn-path
+                nil nil nil "--mbox"
+                (if spam-sa-learn-rebuild
+                    (list action)
+                  `("--no-rebuild" ,action)))))))
+
+(defun spam-spamassassin-register-spam-routine (articles &optional unregister)
+  (spam-spamassassin-register-with-sa-learn articles t unregister))
+
+(defun spam-spamassassin-register-ham-routine (articles &optional unregister)
+  (spam-spamassassin-register-with-sa-learn articles nil unregister))
+
+(defun spam-spamassassin-unregister-spam-routine (articles)
+  (spam-spamassassin-register-with-sa-learn articles t t))
+
+(defun spam-spamassassin-unregister-ham-routine (articles)
+  (spam-spamassassin-register-with-sa-learn articles nil t))
+
+\f
+;;;; Bsfilter
+;;; based mostly on the bogofilter code
+(defun spam-check-bsfilter-headers (&optional score)
+  (if score
+      (or (nnmail-fetch-field spam-bsfilter-probability-header)
+         "0")
+    (let ((header (nnmail-fetch-field spam-bsfilter-header))
+         (spam-split-group (if spam-split-symbolic-return
+                               'spam
+                             spam-split-group)))
+      (when header ; return nil when no header
+       (when (string-match "YES" header)
+         spam-split-group)))))
+
+;; return something sensible if the score can't be determined
+(defun spam-bsfilter-score (&optional recheck)
+  "Get the Bsfilter spamicity score"
+  (interactive "P")
+  (save-window-excursion
+    (gnus-summary-show-article t)
+    (set-buffer gnus-article-buffer)
+    (let ((score (or (unless recheck
+                      (spam-check-bsfilter-headers t))
+                    (spam-check-bsfilter t))))
+      (gnus-summary-show-article)
+      (message "Spamicity score %s" score)
+      (or score "0"))))
+
+(defun spam-check-bsfilter (&optional score)
+  "Check the Bsfilter backend for the classification of this message"
+  (let ((article-buffer-name (buffer-name))
+       (dir spam-bsfilter-database-directory)
+       return)
+    (with-temp-buffer
+      (let ((temp-buffer-name (buffer-name)))
+       (save-excursion
+         (set-buffer article-buffer-name)
+         (apply 'call-process-region
+                (point-min) (point-max)
+                spam-bsfilter-path
+                nil temp-buffer-name nil
+                "--pipe"
+                "--insert-flag"
+                "--insert-probability"
+                (when dir
+                  (list "--homedir" dir))))
+       (setq return (spam-check-bsfilter-headers score))))
+    return))
+
+(defun spam-bsfilter-register-with-bsfilter (articles
+                                            spam
+                                            &optional unregister)
+  "Register an article, given as a string, as spam or non-spam."
+  (dolist (article articles)
+    (let ((article-string (spam-get-article-as-string article))
+         (switch (if unregister
+                     (if spam
+                         spam-bsfilter-spam-strong-switch
+                       spam-bsfilter-ham-strong-switch)
+                   (if spam
+                       spam-bsfilter-spam-switch
+                     spam-bsfilter-ham-switch))))
+      (when (stringp article-string)
+       (with-temp-buffer
+         (insert article-string)
+         (apply 'call-process-region
+                (point-min) (point-max)
+                spam-bsfilter-path
+                nil nil nil switch
+                "--update"
+                (when spam-bsfilter-database-directory
+                  (list "--homedir"
+                        spam-bsfilter-database-directory))))))))
+
+(defun spam-bsfilter-register-spam-routine (articles &optional unregister)
+  (spam-bsfilter-register-with-bsfilter articles t unregister))
+
+(defun spam-bsfilter-unregister-spam-routine (articles)
+  (spam-bsfilter-register-spam-routine articles t))
+
+(defun spam-bsfilter-register-ham-routine (articles &optional unregister)
+  (spam-bsfilter-register-with-bsfilter articles nil unregister))
+
+(defun spam-bsfilter-unregister-ham-routine (articles)
+  (spam-bsfilter-register-ham-routine articles t))
+
+\f
 ;;;; Hooks
 
 ;;;###autoload
-(defun spam-initialize ()
-  "Install the spam.el hooks and do other initialization"
+(defun spam-initialize (&rest symbols)
+  "Install the spam.el hooks and do other initialization.
+When SYMBOLS is given, set those variables to t.  This is so you
+can call spam-initialize before you set spam-use-* variables on
+explicitly, and matters only if you need the extra headers
+installed through spam-necessary-extra-headers."
   (interactive)
+
+  (dolist (var symbols)
+    (set var t))
+
+  (dolist (header (spam-necessary-extra-headers))
+    (add-to-list 'nnmail-extra-headers header)
+    (add-to-list 'gnus-extra-headers header))
+
   (setq spam-install-hooks t)
   ;; TODO: How do we redo this every time spam-face is customized?
   (push '((eq mark gnus-spam-mark) . spam-face)
@@ -1801,7 +2403,7 @@ REMOVE not nil, remove the ADDRESSES."
   (add-hook 'gnus-summary-prepare-exit-hook 'spam-summary-prepare-exit)
   (add-hook 'gnus-summary-prepare-hook 'spam-summary-prepare)
   (add-hook 'gnus-get-new-news-hook 'spam-setup-widening)
-  (add-hook 'gnus-summary-prepare-hook 'spam-find-spam))
+  (add-hook 'gnus-summary-prepared-hook 'spam-find-spam))
 
 (defun spam-unload-hook ()
   "Uninstall the spam.el hooks"
@@ -1819,8 +2421,4 @@ REMOVE not nil, remove the ADDRESSES."
 
 (provide 'spam)
 
-;;; spam.el ends here.
-
-(provide 'spam)
-
 ;;; spam.el ends here
index 75b7c86..5b74b5a 100644 (file)
@@ -1,6 +1,7 @@
 ;;; uudecode.el -- elisp native uudecode
 
-;; Copyright (c) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+;; Copyright (c) 1998, 1999, 2000, 2001, 2003, 2004
+;;        Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: uudecode news
@@ -26,8 +27,6 @@
 
 ;;; Code:
 
-(autoload 'executable-find "executable")
-
 (eval-when-compile (require 'cl))
 
 (eval-and-compile
index ddd22a3..dae69a8 100755 (executable)
--- a/make.bat
+++ b/make.bat
@@ -1,6 +1,6 @@
 @echo off\r
 \r
-rem Written by Frank Schmitt <ich@frank-schmitt.net>\r
+rem Written by Frank Schmitt (ich@frank-schmitt.net)\r
 rem based on the work by David Charlap (shamino@writeme.com)\r
 rem .\r
 rem Clear PWD so emacs doesn't get confused\r
@@ -38,8 +38,8 @@ goto emacs
 \r
 :emacs\r
 if not "%2" == "/copy" goto emacsnocopy\r
-if not exist %1\..\site-lisp mkdir %1\..\site-lisp\r
-if not exist %1\..\site-lisp\gnus mkdir %1\..\site-lisp\gnus\r
+if not exist %1\..\site-lisp\nul mkdir %1\..\site-lisp\r
+if not exist %1\..\site-lisp\gnus\nul mkdir %1\..\site-lisp\gnus\r
 if not exist %1\..\site-lisp\subdirs.el set subdirwarning=yes\r
 :emacsnocopy\r
 set EMACS_ARGS=-batch -q -no-site-file\r
@@ -51,10 +51,10 @@ goto lisp
 :xemacs\r
 set EMACS=xemacs.exe\r
 if not "%2" == "/copy" goto xemacsnocopy\r
-if not exist %1\..\..\site-packages\ mkdir %1\..\..\site-packages\\r
-if not exist %1\..\..\site-packages\info mkdir %1\..\..\site-packages\info\r
-if not exist %1\..\..\site-packages\lisp mkdir %1\..\..\site-packages\lisp\r
-if not exist %1\..\..\site-packages\etc mkdir %1\..\..\site-packages\etc\r
+if not exist %1\..\..\site-packages\nul mkdir %1\..\..\site-packages\\r
+if not exist %1\..\..\site-packages\info\nul mkdir %1\..\..\site-packages\info\r
+if not exist %1\..\..\site-packages\lisp\nul mkdir %1\..\..\site-packages\lisp\r
+if not exist %1\..\..\site-packages\etc\nul mkdir %1\..\..\site-packages\etc\r
 :xemacsnocopy\r
 set EMACS_ARGS=-batch -no-autoloads\r
 set GNUS_INFO_DIR=%1\..\..\site-packages\info\r
@@ -70,6 +70,7 @@ goto lisp
 :lisp\r
 set EMACSBATCH=call %1\%EMACS% %EMACS_ARGS%\r
 cd lisp\r
+attrib -r gnus-load.el\r
 if exist gnus-load.el del gnus-load.el\r
 echo.\r
 echo Stand by while generating autoloads.\r
@@ -90,14 +91,16 @@ if not "%2" == "/copy" goto infotest
 echo.\r
 echo Stand by while copying lisp files.\r
 echo.\r
-if not exist %GNUS_LISP_DIR% mkdir %GNUS_LISP_DIR%\r
+if not exist %GNUS_LISP_DIR%\nul mkdir %GNUS_LISP_DIR%\r
 xcopy /R /Q /Y *.el* %GNUS_LISP_DIR%\r
 if ErrorLevel 1 set ERROR=%ERROR%,copy-lisp\r
 goto infotest\r
 \r
 :infotest\r
 cd ..\texi\r
+attrib -r sieve\r
 if exist sieve del sieve\r
+\r
 makeinfo sieve.texi\r
 if exist sieve goto minfo\r
 REM It seems that makeinfo isn't available\r
@@ -134,7 +137,7 @@ if ErrorLevel 1 set ERROR=%ERROR%,pgg.texi
 if ErrorLevel 1 set ERROR=%ERROR%,message.texi\r
 \r
 if not "%2" == "/copy" goto nocopy\r
-if not exist %GNUS_INFO_DIR% mkdir %GNUS_INFO_DIR%\r
+if not exist %GNUS_INFO_DIR%\nul mkdir %GNUS_INFO_DIR%\r
 \r
 echo.\r
 echo Stand by while copying info files.\r
@@ -172,13 +175,13 @@ cd ..\etc
 echo.\r
 echo Stand by while copying etc files.\r
 echo.\r
-if not exist %GNUS_ETC_DIR% mkdir %GNUS_ETC_DIR%\r
+if not exist %GNUS_ETC_DIR%\nul mkdir %GNUS_ETC_DIR%\r
 xcopy /R /Q /Y gnus-tut.txt %GNUS_ETC_DIR%\r
 if ErrorLevel 1 set ERROR=%ERROR%,copy-etc-gnus-tut-txt\r
-if not exist %GNUS_ETC_DIR%\gnus mkdir %GNUS_ETC_DIR%\gnus\r
+if not exist %GNUS_ETC_DIR%\gnus\nul mkdir %GNUS_ETC_DIR%\gnus\r
 xcopy /R /Q /Y .\gnus\* %GNUS_ETC_DIR%\gnus\\r
 if ErrorLevel 1 set ERROR=%ERROR%,copy-etc-gnus-*\r
-if not exist %GNUS_ETC_DIR%\smilies mkdir %GNUS_ETC_DIR%\smilies\r
+if not exist %GNUS_ETC_DIR%\smilies\nul mkdir %GNUS_ETC_DIR%\smilies\r
 xcopy /R /Q /Y .\smilies\* %GNUS_ETC_DIR%\smilies\\r
 if ErrorLevel 1 set ERROR=%ERROR%,copy-etc-smilies-*\r
 goto warnings\r
@@ -192,7 +195,7 @@ echo *
 echo * (add-to-list 'load-path "/Path/to/gnus/lisp")\r
 echo * (if (featurep 'xemacs)\r
 echo *     (add-to-list 'Info-directory-list "c:/Path/to/gnus/texi/")\r
-echo *   (add-to-list 'Info-default-directory-list "c:/Path/to/gnus/texi/")\r
+echo *   (add-to-list 'Info-default-directory-list "c:/Path/to/gnus/texi/"))\r
 echo * (require 'gnus-load)\r
 echo *\r
 echo * Replace c:/Path/to/gnus with the Path where your new Gnus is (that's here\r
index 682c335..4936dd2 100644 (file)
@@ -4,6 +4,7 @@ gnus
 gnus-[0-9]*
 message
 message-[0-9]*
+sasl
 sieve
 pgg
 gnustmp.texi
index 8c0289a..ce2d608 100644 (file)
@@ -1,3 +1,255 @@
+2004-04-19  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.texi (SpamAssassin backend): Add it to the detailmenu.
+
+2004-04-16  Florian Weimer  <fw@deneb.enyo.de>
+
+       * gnus.texi (Charsets): Point to relevant section in emacs-mime.
+
+2004-04-14  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus.texi (Agent Visuals): Referenced new F(etched) group line
+       format.
+       (Group Line Specification): Added F(etched) group line format.
+
+2004-04-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.texi (Indirect Functions): Add
+       nntp-open-via-rlogin-and-netcat.
+
+2004-04-11  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-news.texi: Add OPML.
+
+       * gnus.texi (RSS): do.
+
+2004-04-10  Jesper Harder  <harder@ifa.au.dk>
+
+       * emacs-mime.texi (Flowed text): Markup fix.
+
+2004-04-07  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.texi (Blacklists and Whitelists, BBDB Whitelists)
+       (Bogofilter, spam-stat spam filtering, SpamOracle): old incorrect
+       warning about ham processors in spam groups removed
+
+2004-04-02  Teodor Zlatanov  <tzz@lifelogs.com>
+       From Hubert Chan <hubert@uhoreg.ca>
+
+       * gnus.texi (SpamAssassin backend): added new node about SpamAssassin
+
+2004-03-29  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.texi (Spam ELisp Package Sequence of Events): some clarifications
+       (Spam ELisp Package Global Variables)
+       (Spam ELisp Package Global Variables): more clarifications
+
+2004-03-18  Helmut Waitzmann  <Helmut.Waitzmann@web.de>  (tiny change)
+
+       * gnus.texi (Various Summary Stuff): Fix the documentation for
+       gnus-newsgroup-variables.
+
+2004-03-18  Raymond Scholz  <ray-2004@zonix.de>  (tiny change)
+
+       * gnus.texi (Misc Article): Refer to `Summary Buffer Mode Line' in
+       the gnus-article-mode-line-format section.
+
+2004-03-18  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-news.texi: Addition.
+
+2004-03-08  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.texi (Category Syntax): Markup fix.
+
+2004-03-08  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.texi (POP before SMTP): Addition.
+
+2004-03-05  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.texi (Spam ELisp Package Sequence of Events): Index.
+       (Mailing List): Typo.
+       (Customizing Articles): Add gnus-treat-ansi-sequences.
+       (Article Washing): Index.
+
+       * message.texi: Use m-dash consistently.
+
+       * emacs-mime.texi: do.
+
+2004-03-05  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.texi (POP before SMTP): New node.
+
+2004-03-04  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.texi (X-Face, Face): Add gnus-x-face and
+       gnus-face-properties-alist.
+
+2004-03-04  Jesper Harder  <harder@ifa.au.dk>
+
+       * texi2latex.el (latexi-translate-file): Support accents.
+
+       * gnus.texi: Don't use 8bit chars (except \e,A,\e(B).
+
+       * emacs-mime.texi: do.
+
+       * Makefile.in (.texi, makeinfo): Use --enable-encoding.
+
+       * gnus.texi: Move @documentencoding back, and change to latin-1.
+
+       * emacs-mime.texi: do.
+
+       * infohack.el (infohack): Support @documentencoding in Emacs 21.3.
+
+2004-03-03  Jesper Harder  <harder@ifa.au.dk>
+
+       * Makefile.in: Add gnus-news.
+
+       * texi2latex.el (latexi-translate): Add gnus-news.
+       (latexi-translate-file): Add @documentencoding.
+
+2004-03-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.texi: Enclose the iflatex section with iftex.
+       (Gnus Unplugged): Use pxref instead of xref.
+
+       * emacs-mime.texi: Enclose the iflatex section with iftex.
+
+2004-03-02  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * emacs-mime.texi: Wrapped documentencoding inside of iflatex as
+       documentencoding is not supported by infohack.
+
+       * gnus.texi: Wrapped documentencoding inside of iflatex as
+       documentencoding is not supported by infohack.
+       Changed file's character coding to utf-8 as the file contains
+       characters that can not be encoded using iso-8859-1.
+       (Gnus Unplugged): Reference gnus-agent variable.
+       (Agent Variables): Added gnus-agent.
+       
+
+2004-02-17  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       * gnus.texi (X-Face): Add uncompface-use-external.
+       (Slow Machine): Ditto.
+
+2004-02-06  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus-news.texi: dnd attachments.
+
+       * message.texi (MIME): do.
+
+2004-02-03  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus.texi (Batching Agents): Fixed typo in example.  Reported
+       by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
+
+2004-01-30  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.texi: Set documentencoding.
+
+       * emacs-mime.texi: do.
+
+2004-01-27  Simon Josefsson  <jas@extundo.com>
+
+       * emacs-mime.texi (Flowed text): Add.
+
+2004-01-23  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.texi (Spam ELisp Package Filtering of Incoming Mail):
+       mention spam-split does not modify incoming mail
+
+2004-01-23  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.texi (GroupLens): Remove.
+
+2004-01-22  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.texi (Spam ELisp Package Sequence of Events): fix typo
+
+2004-01-21  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+       * gnus.texi (Outgoing Messages, Agent Variables): Add
+       gnus-agent-queue-mail and gnus-agent-prompt-send-queue.
+       Suggested by Gaute Strokkenes <gs234@srcf.ucam.org>
+
+       * gnus.texi (agent-disable-undownloaded-faces): Replaced with
+       agent-enable-undownloaded-faces
+
+2004-01-17  Jesper Harder  <harder@ifa.au.dk>
+
+       * sieve.texi (Manage Sieve API): nil -> @code{nil}.
+
+       * pgg.texi (User Commands, Backend methods): do.
+
+       * gnus.texi (Debugging IMAP): Fix.
+       (Thwarting Email Spam): Avoid overfull hboxes in printed
+       version.  Markup fixes.
+
+2004-01-12  Teodor Zlatanov  <tzz@lifelogs.com>
+
+       * gnus.texi (The problem of spam): fixed so many countries and
+       continents are used as examples of why blocking by country blocks
+       is a bad idea.
+
+2004-01-11  Simon Josefsson  <jas@extundo.com>
+
+       * gnus.texi (The problem of spam): Fix, reported by Cheng Gao
+       <chenggao@cyberhut.org> and suggested by Richard Hoskins
+       <rmh@apk.net> (tiny change).
+
+2004-01-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * dir: Add SASL.
+
+       * sasl.texi: Markup fixes.
+
+       * gnus.texi (Fancy Mail Splitting, SpamAssassin)
+       (Spam ELisp Package Sequence of Events)
+       (Spam ELisp Package Global Variables)
+       (Spam ELisp Package Configuration Examples): do.
+
+2004-01-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Summary Mail Commands): S D e.
+
+2004-01-07  Jesper Harder  <harder@ifa.au.dk>
+
+       * gnus.texi (Limiting): Add gnus-summary-limit-to-replied.
+
+       * gnusref.tex: do.
+
+2004-01-06  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus.texi (SpamOracle): Fixed typo.
+       (Article Washing): Add `gnus-article-treat-ansi-sequences'.
+
+       * gnus-news.texi, gnus-news.el: New files.
+
+       * Makefile.in: Use `gnus-news.*' to create GNUS-NEWS.
+
+       * gnus.texi (No Gnus): New node.  Includes `gnus-news.texi'.
+
+2004-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi: Fix the last commit.
+
+2004-01-05  Simon Josefsson  <jas@extundo.com>
+
+       * gnus.texi (Top): Add SASL.
+       * texi2latex.el (latexi-translate): Do sasl.
+
+       * pgg.texi (Caching passphrase): Fix PGG passphrase caching
+       section.
+
+       * sasl.texi: New file.
+       * Makefile.in: Add sasl.texi.
+
+2004-01-05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Emacsen): Bump numbers.
+
 2004-01-04  Reiner Steib  <Reiner.Steib@gmx.de>
 
        * gnus.texi (Spam ELisp Package Configuration Examples): Markup fixes.
index 686a2a3..eefd57f 100644 (file)
@@ -18,7 +18,7 @@ INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 SHELL = /bin/sh
 PAPERTYPE=a4
-INFO_DEPS=gnus message emacs-mime sieve pgg
+INFO_DEPS=gnus message emacs-mime sieve pgg sasl
 
 all: $(INFO_DEPS)
 
@@ -28,15 +28,23 @@ most: texi2latex.elc latex latexps
 
 .texi:
        if test "x$(MAKEINFO)" != "xno" ; then \
-         $(MAKEINFO) -I $(srcdir) -o $* $<; \
+         $(MAKEINFO) -I $(srcdir) --enable-encoding -o $* $<; \
        else \
          rm -f $@; \
          $(EMACSINFO) $<; \
        fi
 
-dvi: gnus.dvi message.dvi refcard.dvi emacs-mime.dvi sieve.dvi pgg.dvi
+# Files included in gnus.texi
+gnus.texi: gnus-faq.texi gnus-news.texi
 
-pdf: gnus.pdf message.pdf refcard.pdf emacs-mime.pdf sieve.pdf pgg.pdf
+# FIXME: Target should be in parent directory.  A cvs commit script could
+# automatically create it.
+GNUS-NEWS:     gnus-news.texi
+       $(EMACSCOMP) -l $(srcdir)/gnus-news.el -f batch-gnus-news $< $@
+
+dvi: gnus.dvi message.dvi refcard.dvi emacs-mime.dvi sieve.dvi pgg.dvi sasl.dvi
+
+pdf: gnus.pdf message.pdf refcard.pdf emacs-mime.pdf sieve.pdf pgg.pdf sasl.pdf
 
 .texi.dvi :
        sed -e '/@iflatex/,/@end iflatex/d' $< > gnustmp.texi 
@@ -88,15 +96,15 @@ clean:
        thumbdta.tex xface.tex *.tpt gnus-manual-*.pdf gnus-manual-*.ps.gz
 
 makeinfo:
-       makeinfo -o gnus gnus.texi
-       makeinfo -o message message.texi
+       makeinfo --enable-encoding -o gnus gnus.texi
+       makeinfo --enable-encoding -o message message.texi
 
 texi2latex.elc: texi2latex.el
        srcdir=$(srcdir)/../lisp $(EMACSCOMP) -l $(srcdir)/../lisp/dgnushack.el --eval '(byte-compile-file "$(srcdir)/texi2latex.el")'
 
-latex: gnus.latexi gnus-faq.latexi message.latexi emacs-mime.latexi sieve.latexi pgg.latexi
+latex: gnus.latexi gnus-faq.latexi message.latexi emacs-mime.latexi sieve.latexi pgg.latexi sasl.latexi gnus-news.latexi
 
-gnus.latexi gnus-faq.latexi message.latexi emacs-mime.latexi sieve.latexi pgg.latexi: $(srcdir)/gnus.texi $(srcdir)/gnus-faq.texi $(srcdir)/message.texi $(srcdir)/emacs-mime.texi $(srcdir)/sieve.texi $(srcdir)/pgg.texi texi2latex.elc
+gnus.latexi gnus-faq.latexi message.latexi emacs-mime.latexi sieve.latexi pgg.latexi sasl.latexi gnus-news.latexi: $(srcdir)/gnus.texi $(srcdir)/gnus-faq.texi $(srcdir)/message.texi $(srcdir)/emacs-mime.texi $(srcdir)/sieve.texi $(srcdir)/pgg.texi $(srcdir)/sasl.texi $(srcdir)/gnus-news.texi texi2latex.elc
        srcdir=$(srcdir) $(EMACSCOMP) -l ./texi2latex.elc -f latexi-translate
 
 .latexi.dvi-x:
index 57e9dec..c37973b 100644 (file)
--- a/texi/dir
+++ b/texi/dir
@@ -21,3 +21,4 @@ File: dir     Node: Top       This is the Gnus Info tree
 * Emacs MIME: (emacs-mime).    Libraries for handling MIME.
 * Sieve: (sieve).              Managing Sieve scripts in Emacs.
 * PGG: (pgg).                  Emacs interface to various PGP implementations.
+* SASL: (sasl).                The Emacs SASL library.
index 8c51bde..3de34ae 100644 (file)
@@ -9,6 +9,7 @@
 @direntry
 * Emacs MIME: (emacs-mime).   The MIME de/composition library.
 @end direntry
+@documentencoding ISO-8859-1
 @iftex
 @finalout
 @end iftex
@@ -18,7 +19,7 @@
 
 This file documents the Emacs MIME interface functionality.
 
-Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
           Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
@@ -409,15 +410,15 @@ The program used to start an external terminal.
 
 @item mm-enable-external
 @vindex mm-enable-external
-Indicate whether external MIME handlers should be used.
+Indicate whether external @acronym{MIME} handlers should be used.
 
-If @code{t}, all defined external MIME handlers are used.  If
+If @code{t}, all defined external @acronym{MIME} handlers are used.  If
 @code{nil}, files are saved to disk (@code{mailcap-save-binary-file}).
 If it is the symbol @code{ask}, you are prompted before the external
 @acronym{MIME} handler is invoked.
 
 When you launch an attachment through mailcap (@pxref{mailcap}) an
-attempt is made to use a safe viewer with the safest options--this isn't
+attempt is made to use a safe viewer with the safest options---this isn't
 the case if you save it to disk and launch it in a different way
 (command line or double-clicking).  Anyhow, if you want to be sure not
 to launch any external programs, set this variable to @code{nil} or
@@ -972,7 +973,11 @@ together and wrapped after the column decided by
 @code{fill-flowed-display-column}.  The default is to wrap after
 @code{fill-column}.
 
-
+@table @code
+@item mm-fill-flowed
+@vindex mm-fill-flowed
+If non-@code{nil} a format=flowed article will be displayed flowed.
+@end table
 
 
 @node Interface Functions
@@ -1135,7 +1140,7 @@ Return the value of the field under point.
 @item mail-encode-encoded-word-region
 @findex mail-encode-encoded-word-region
 Encode the non-@acronym{ASCII} words in the region.  For instance,
-@samp{Naïve} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}.
+@samp{Na@"{@dotless{i}}ve} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}.
 
 @item mail-encode-encoded-word-buffer
 @findex mail-encode-encoded-word-buffer
@@ -1148,7 +1153,7 @@ Encode the words that need encoding in a string, and return the result.
 
 @example
 (mail-encode-encoded-word-string
- "This is naïve, baby")
+ "This is na@"{@dotless{i}}ve, baby")
 @result{} "This is =?iso-8859-1?q?na=EFve,?= baby"
 @end example
 
@@ -1163,7 +1168,7 @@ Decode the encoded words in the string and return the result.
 @example
 (mail-decode-encoded-word-string
  "This is =?iso-8859-1?q?na=EFve,?= baby")
-@result{} "This is naïve, baby"
+@result{} "This is na@"{@dotless{i}}ve, baby"
 @end example
 
 @end table
diff --git a/texi/gnus-news.el b/texi/gnus-news.el
new file mode 100644 (file)
index 0000000..67c101f
--- /dev/null
@@ -0,0 +1,109 @@
+;;; gnus-news.el --- a hack to create GNUS-NEWS from texinfo source
+;; Copyright (C)  2004  Free Software Foundation, Inc.
+
+;; Author: Reiner Steib  <Reiner.Steib@gmx.de>
+;; Keywords: tools
+
+;; 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., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(defvar gnus-news-header-disclaimer
+"GNUS NEWS -- history of user-visible changes.
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+See the end for copying conditions.
+
+Please send Gnus bug reports to bugs\@gnus.org.
+
+\f
+* Changes in No Gnus
+
+")
+
+(defvar gnus-news-trailer
+"\f
+* For older news, see Gnus info node \"New Features\".
+
+----------------------------------------------------------------------
+Copyright information:
+
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+   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.
+\f\nLocal variables:\nmode: outline
+paragraph-separate: \"[        \f]*$\"\nend:\n")
+
+(defvar gnus-news-makeinfo-command "makeinfo")
+
+(defvar gnus-news-fill-column 72)
+
+(defvar gnus-news-makeinfo-switches
+  (concat " --no-headers --paragraph-indent=0"
+         " --fill-column=" (number-to-string
+                            (+ 3 ;; will strip leading spaces later
+                               (or gnus-news-fill-column 80)))))
+
+(defun batch-gnus-news ()
+  "Make GNUS-NEWS in batch mode."
+  (let (infile outfile)
+    (setq infile (car command-line-args-left)
+         command-line-args-left (cdr command-line-args-left)
+         outfile (car command-line-args-left)
+         command-line-args-left nil)
+    (if (and infile outfile)
+       (message "Creating `%s' from `%s'..." outfile infile)
+      (error "Not enough files given."))
+    (gnus-news-translate-file infile outfile)))
+
+(defun gnus-news-translate-file (infile outfile)
+  "Translate INFILE (texinfo) to OUTFILE (GNUS-NEWS)."
+  (let* ((dir (concat (or (getenv "srcdir") ".") "/"))
+        (infile (concat dir infile))
+        (buffer (find-file-noselect (concat dir outfile))))
+    (with-temp-buffer
+      ;; Could be done using `texinfmt' stuff as in `infohack.el'.
+      (insert
+       (shell-command-to-string
+       (concat gnus-news-makeinfo-command " "
+               gnus-news-makeinfo-switches " " infile)))
+      (goto-char (point-max))
+      (delete-char -1)
+      (goto-char (point-min))
+      (save-excursion
+       (while (re-search-forward "^   \\* " nil t)
+         (replace-match "** ")))
+      (save-excursion
+       (while (re-search-forward "^     " nil t)
+         (replace-match "")))
+      (goto-char (point-min))
+      (insert gnus-news-header-disclaimer)
+      (goto-char (point-max))
+      (insert gnus-news-trailer)
+      (write-region (point-min) (point-max) outfile))))
+
+;;; gnus-news.el ends here
diff --git a/texi/gnus-news.texi b/texi/gnus-news.texi
new file mode 100644 (file)
index 0000000..ccb8191
--- /dev/null
@@ -0,0 +1,71 @@
+@c -*-texinfo-*-
+
+@c Copyright (C) 2004 Free Software Foundation, Inc.
+
+@c    Permission is granted to anyone to make or distribute verbatim copies
+@c    of this document as received, in any medium, provided that the
+@c    copyright notice and this permission notice are preserved,
+@c    thus giving the recipient permission to redistribute in turn.
+
+@c    Permission is granted to distribute modified versions
+@c    of this document, or of portions of it,
+@c    under the above conditions, provided also that they
+@c    carry prominent notices stating who last changed them.
+
+This file contains a list of news features Gnus.  It is supposed to be
+included in `gnus.texi'.  `GNUS-NEWS' is automatically generated from
+this file (see `gnus-news.el').
+
+@itemize @bullet
+
+@item
+You can import and export your @acronym{RSS} subscriptions from
+@acronym{OPML} files.  @xref{RSS}.
+
+@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.
+
+@item You can now drag and drop attachments to the Message buffer.
+
+@item @kbd{/ r} limits the summary buffer to replied articles.
+
+@item @acronym{ANSI} @acronym{SGR} control sequences can be transformed
+using @kbd{W A}.
+
+@acronym{ANSI} sequences are used in some Chinese hierarchies for
+highlighting articles (@code{gnus-article-treat-ansi-sequences}).
+
+@item Gnus includes an Emacs Lisp @acronym{SASL} library.
+
+This provide a clean @acronym{API} to @acronym{SASL} mechanisms from
+within Emacs.  The user visible aspects of this, compared to the earlier
+situation, include support for @acronym{DIGEST}-@acronym{MD5} and
+@acronym{NTLM}.
+
+@item ManageSieve connections uses the @acronym{SASL} library by default.
+
+The primary change this brings is support for @acronym{DIGEST-MD5} and
+@acronym{NTLM}, when the server support it.
+
+@item Gnus include a password cache mechanism in password.el.
+
+It is enabled by default (see @code{password-cache}), with a short
+timeout of 16 seconds (see @code{password-cache-expiry}).  If
+@acronym{PGG} is used as the @acronym{PGP} backend, the @acronym{PGP}
+passphrase is managed by this mechanism.  Passwords for ManageSieve
+connections are managed by this mechanism, after quering the user about
+whether to do so.
+
+@item @acronym{IMAP} identity (@acronym{RFC} 2971) is supported.
+
+By default, Gnus do not send any information about itself, but you can
+customize it using @code{nnimap-id}.
+
+@item The @file{all.SCORE} file can now be edited from the group buffer 
+using @kbd{W e}.
+
+@end itemize
+
+@c gnus-news.texi ends here.
index 6a40647..ec30aa0 100644 (file)
@@ -9,6 +9,7 @@
 @direntry
 * Gnus: (gnus).         The newsreader Gnus.
 @end direntry
+@documentencoding ISO-8859-1
 @iftex
 @finalout
 @end iftex
@@ -330,7 +331,7 @@ license to the document, as described in section 6 of the license.
 
 This file documents Gnus, the GNU Emacs newsreader.
 
-Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
         Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
@@ -361,7 +362,7 @@ license to the document, as described in section 6 of the license.
 
 @vskip 0pt plus 1filll
 Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003
+2002, 2003, 2004
         Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
@@ -448,6 +449,7 @@ Other related manuals
 * Emacs-MIME:(emacs-mime).      Composing messages; @acronym{MIME}-specific parts.
 * Sieve:(sieve).                Managing Sieve scripts in Emacs.
 * PGG:(pgg).                    @acronym{PGP/MIME} with Gnus.
+* SASL:(sasl).                  @acronym{SASL} authentication in Emacs.
 
 @detailmenu
  --- The Detailed Node Listing ---
@@ -645,6 +647,7 @@ Composing Messages
 
 * Mail::                        Mailing and replying.
 * Posting Server::              What server should you post and mail via?
+* POP before SMTP::             You cannot send a mail unless you read a mail.
 * Mail and Post::               Mailing and posting at the same time.
 * Archived Messages::           Where Gnus stores the messages you've sent.
 * Posting Styles::              An easier way to specify who you are.
@@ -802,17 +805,9 @@ Scoring
 * Global Score Files::          Earth-spanning, ear-splitting score files.
 * Kill Files::                  They are still here, but they can be ignored.
 * Converting Kill Files::       Translating kill files to score files.
-* GroupLens::                   Getting predictions on what you like to read.
 * Advanced Scoring::            Using logical expressions to build score rules.
 * Score Decays::                It can be useful to let scores wither away.
 
-GroupLens
-
-* Using GroupLens::             How to make Gnus use GroupLens.
-* Rating Articles::             Letting GroupLens know how you rate articles.
-* Displaying Predictions::      Displaying predictions given by GroupLens.
-* GroupLens Variables::         Customizing GroupLens.
-
 Advanced Scoring
 
 * Advanced Scoring Syntax::     A definition.
@@ -883,6 +878,7 @@ Filtering Spam Using The Spam ELisp Package
 * Blackholes::                  
 * Regular Expressions Header Matching::  
 * Bogofilter::                  
+* SpamAssassin backend::        
 * ifile spam filtering::        
 * spam-stat spam filtering::    
 * SpamOracle::                  
@@ -926,6 +922,7 @@ New Features
 * Quassia Gnus::                Two times two is four, or Gnus 5.6/5.7.
 * Pterodactyl Gnus::            Pentad also starts with P, AKA Gnus 5.8/5.9.
 * Oort Gnus::                   It's big.  It's far out.  Gnus 5.10.
+* No Gnus::                     Lars, FIXME!
 
 Customization
 
@@ -1900,6 +1897,12 @@ the group lately.
 A string that says when you last read the group (@pxref{Group
 Timestamp}).
 
+@item F
+The disk space used by the articles fetched by both the cache and
+agent.  The value is automatically scaled to bytes(B), kilobytes(K),
+megabytes(M), or gigabytes(G) to minimize the column width.  A format
+of %7F is sufficient for a fixed-width column.
+
 @item u
 User defined specifier.  The next character in the format string should
 be a letter.  Gnus will call the function
@@ -5405,6 +5408,13 @@ to the @code{root} account, you may want to resend it to
 This command understands the process/prefix convention
 (@pxref{Process/Prefix}).
 
+@item S D e
+@kindex S D e (Summary)
+@findex gnus-summary-resend-message-edit
+
+Like the previous command, but will allow you to edit the message as
+if it were a new message before resending.
+
 @item S O m
 @kindex S O m (Summary)
 @findex gnus-uu-digest-mail-forward
@@ -6351,6 +6361,13 @@ group parameter predicate
 (@code{gnus-summary-limit-to-display-predicate}).  @xref{Group
 Parameters}, for more on this predicate.
 
+@item / r
+@kindex / r (Summary)
+@findex gnus-summary-limit-to-replied
+Limit the summary buffer to replied articles
+(@code{gnus-summary-limit-to-replied}).  If given a prefix, exclude
+replied articles.
+
 @item / E
 @itemx M S
 @kindex M S (Summary)
@@ -8542,9 +8559,9 @@ CRs into LF (this takes care of Mac line endings)
 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
 Quoted-Printable is one common @acronym{MIME} encoding employed when
 sending non-@acronym{ASCII} (i.e., 8-bit) articles.  It typically
-makes strings like @samp{déjà vu} look like @samp{d=E9j=E0 vu}, which
-doesn't look very readable to me.  Note that this is usually done
-automatically by Gnus if the message in question has a
+makes strings like @samp{d@'ej@`a vu} look like @samp{d=E9j=E0 vu},
+which doesn't look very readable to me.  Note that this is usually
+done automatically by Gnus if the message in question has a
 @code{Content-Transfer-Encoding} header that says that this encoding
 has been done.  If a prefix is given, a charset will be asked for.
 
@@ -8565,6 +8582,14 @@ Treat HZ or HZP (@code{gnus-article-decode-HZ}).  HZ (or HZP) is one
 common encoding employed when sending Chinese articles.  It typically
 makes strings look like @samp{~@{<:Ky2;S@{#,NpJ)l6HK!#~@}}.
 
+@item W A
+@kindex W A (Summary)
+@findex gnus-article-treat-ansi-sequences
+@cindex @acronym{ANSI} control sequences
+Translate @acronym{ANSI} SGR control sequences into overlays or
+extents (@code{gnus-article-treat-ansi-sequences}).  @acronym{ANSI}
+sequences are used in some Chinese hierarchies for highlighting.
+
 @item W u
 @kindex W u (Summary)
 @findex gnus-article-unsplit-urls
@@ -9454,6 +9479,10 @@ encode using quoted-printable) or @code{t} (always use 8bit).
 @cindex coding system aliases
 @cindex preferred charset
 
+@xref{Encoding Customization, , Encoding Customization, emacs-mime,
+The Emacs MIME Manual}, for additional variables that control which
+MIME charsets are used when sending messages.
+
 Other charset tricks that may be useful, although not Gnus-specific:
 
 If there are several @acronym{MIME} charsets that encode the same Emacs
@@ -10166,11 +10195,19 @@ the list in one particular group:
 @vindex gnus-newsgroup-variables
 @item gnus-newsgroup-variables
 A list of newsgroup (summary buffer) local variables, or cons of
-variables and their default values (when the default values are not
-@code{nil}), that should be made global while the summary buffer is
-active.  These variables can be used to set variables in the group
-parameters while still allowing them to affect operations done in
-other buffers.  For example:
+variables and their default expressions to be evalled (when the default
+values are not @code{nil}), that should be made global while the summary
+buffer is active.
+
+Note: The default expressions will be evaluated (using function
+@code{eval}) before assignment to the local variable rather than just
+assigned to it.  If the default expression is the symbol @code{global},
+that symbol will not be evaluated but the global value of the local
+variable will be used instead.
+
+These variables can be used to set variables in the group parameters
+while still allowing them to affect operations done in other
+buffers.  For example:
 
 @lisp
 (setq gnus-newsgroup-variables
@@ -10179,6 +10216,7 @@ other buffers.  For example:
  "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
 @end lisp
 
+Also @pxref{Group Parameters}.
 @end table
 
 
@@ -10714,7 +10752,7 @@ Send a message to the mailing list owner, if List-Owner field exists.
 
 @item C-c C-n a
 @kindex C-c C-n a (Summary)
-@findex gnus-mailing-list-owner
+@findex gnus-mailing-list-archive
 Browse the mailing list archive, if List-Archive field exists.
 
 @end table
@@ -11157,6 +11195,7 @@ is controlled by @code{gnus-body-boundary-delimiter}.
 
 @item gnus-treat-play-sounds
 @item gnus-treat-translate
+@item gnus-treat-ansi-sequences (t)
 @item gnus-treat-x-pgp-sig (head)
 
 @item gnus-treat-unfold-headers (head)
@@ -11299,9 +11338,9 @@ no more new text to scroll in.  The default is @code{nil}.
 @vindex gnus-article-mode-line-format
 @item gnus-article-mode-line-format
 This variable is a format string along the same lines as
-@code{gnus-summary-mode-line-format} (@pxref{Mode Line Formatting}).  It
-accepts the same format specifications as that variable, with two
-extensions:
+@code{gnus-summary-mode-line-format} (@pxref{Summary Buffer Mode
+Line}).  It accepts the same format specifications as that variable,
+with two extensions:
 
 @table @samp
 
@@ -11388,6 +11427,7 @@ on your setup (@pxref{Posting Server}).
 @menu
 * Mail::                        Mailing and replying.
 * Posting Server::              What server should you post and mail via?
+* POP before SMTP::             You cannot send a mail unless you read a mail.
 * Mail and Post::               Mailing and posting at the same time.
 * Archived Messages::           Where Gnus stores the messages you've sent.
 * Posting Styles::              An easier way to specify who you are.
@@ -11491,14 +11531,67 @@ package correctly.  An example:
 @end lisp
 
 To the thing similar to this, there is
-@code{message-smtpmail-send-it}.  It is useful if your ISP requires
-the @acronym{POP}-before-@acronym{SMTP} authentication.  See the
-documentation for the function @code{mail-source-touch-pop}.
+@code{message-smtpmail-send-it}.  It is useful if your @acronym{ISP}
+requires the @acronym{POP}-before-@acronym{SMTP} authentication.
+@xref{POP before SMTP}.
 
 Other possible choices for @code{message-send-mail-function} includes
 @code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
 and @code{feedmail-send-it}.
 
+@node POP before SMTP
+@section POP before SMTP
+@cindex pop before smtp
+@findex message-smtpmail-send-it
+@findex mail-source-touch-pop
+
+Does your @acronym{ISP} require the @acronym{POP}-before-@acronym{SMTP}
+authentication?  It is whether you need to connect to the @acronym{POP}
+mail server within a certain time before sending mails.  If so, there is
+a convenient way.  To do that, put the following lines in your
+@file{~/.gnus.el} file:
+
+@lisp
+(setq message-send-mail-function 'message-smtpmail-send-it)
+(add-hook 'message-send-mail-hook 'mail-source-touch-pop)
+@end lisp
+
+@noindent
+It means to let Gnus connect to the @acronym{POP} mail server in advance
+whenever you send a mail.  The @code{mail-source-touch-pop} function
+does only a @acronym{POP} authentication according to the value of
+@code{mail-sources} without fetching mails, just before sending a mail.
+Note that you have to use @code{message-smtpmail-send-it} which runs
+@code{message-send-mail-hook} rather than @code{smtpmail-send-it} and
+set the value of @code{mail-sources} for a @acronym{POP} connection
+correctly.  @xref{Mail Sources}.
+
+If you have two or more @acronym{POP} mail servers set in
+@code{mail-sources}, you may want to specify one of them to
+@code{mail-source-primary-source} as the @acronym{POP} mail server to be
+used for the @acronym{POP}-before-@acronym{SMTP} authentication.  If it
+is your primary @acronym{POP} mail server (i.e., you are fetching mails
+mainly from that server), you can set it permanently as follows:
+
+@lisp
+(setq mail-source-primary-source
+      '(pop :server "pop3.mail.server"
+            :password "secret"))
+@end lisp
+
+@noindent
+Otherwise, bind it dynamically only when performing the
+@acronym{POP}-before-@acronym{SMTP} authentication as follows:
+
+@lisp
+(add-hook 'message-send-mail-hook
+          (lambda ()
+            (let ((mail-source-primary-source
+                   '(pop :server "pop3.mail.server"
+                         :password "secret")))
+              (mail-source-touch-pop))))
+@end lisp
+
 @node Mail and Post
 @section Mail and Post
 
@@ -12824,9 +12917,44 @@ the telnet command requires a pseudo-tty allocation on an intermediate
 host.
 @end table
 
+Note that you may want to change the value for @code{nntp-end-of-line}
+to @samp{\n} (@pxref{Common Variables}).
+
+@item nntp-open-via-rlogin-and-netcat
+@findex nntp-open-via-rlogin-and-netcat
+Does essentially the same, but uses
+@uref{http://netcat.sourceforge.net/, netcat} instead of @samp{telnet}
+to connect to the real @acronym{NNTP} server from the intermediate host.
+
+@code{nntp-open-via-rlogin-and-netcat}-specific variables:
+
+@table @code
+@item nntp-via-netcat-command
+@vindex nntp-via-netcat-command
+Command used to connect to the real @acronym{NNTP} server from the
+intermediate host.  The default is @samp{nc}.  You can also use other
+programs like @uref{http://www.imasy.or.jp/~gotoh/ssh/connect.html,
+connect} instead.
+
+@item nntp-via-netcat-switches
+@vindex nntp-via-netcat-switches
+List of strings to be used as the switches to the
+@code{nntp-via-telnet-command} command.  The default is @code{nil}.
+
+@item nntp-via-rlogin-command
+@vindex nntp-via-rlogin-command
+Command used to log in on the intermediate host.  The default is
+@samp{rsh}, but @samp{ssh} is a popular alternative.
+
+@item nntp-via-rlogin-command-switches
+@vindex nntp-via-rlogin-command-switches
+List of strings to be used as the switches to
+@code{nntp-via-rlogin-command}.  The default is @code{nil}.
+@end table
+
 @item nntp-open-via-telnet-and-telnet
 @findex nntp-open-via-telnet-and-telnet
-Does essentially the same, but uses @samp{telnet} instead of
+Does essentially also the same, but uses @samp{telnet} instead of
 @samp{rlogin} to connect to the intermediate host.
 
 @code{nntp-open-via-telnet-and-telnet}-specific variables:
@@ -12859,6 +12987,8 @@ is @samp{bash\\|\$ *\r?$\\|> *\r?}.
 
 @end table
 
+Note that you may want to change the value for @code{nntp-end-of-line}
+to @samp{\n} (@pxref{Common Variables}).
 @end table
 
 
@@ -12911,7 +13041,7 @@ not work with named ports.
 @vindex nntp-end-of-line
 String to use as end-of-line marker when talking to the @acronym{NNTP}
 server.  This is @samp{\r\n} by default, but should be @samp{\n} when
-using a non native connection function.
+using a non native telnet connection function.
 
 @item nntp-telnet-command
 @vindex nntp-telnet-command
@@ -13976,8 +14106,8 @@ is run.  That's why @code{(widen)} needs to be called after
 @code{save-excursion} and @code{save-restriction} in the example
 above.  Also note that with the nnimap backend, message bodies will
 not be downloaded by default.  You need to set
-@code{nnimap-split-download-body} to t to do that (@pxref{Splitting in
-IMAP}).
+@code{nnimap-split-download-body} to @code{t} to do that
+(@pxref{Splitting in IMAP}).
 
 @item (! @var{func} @var{split})
 If the split is a list, and the first element is @code{!}, then
@@ -15559,7 +15689,7 @@ group as read.
 
 If the search engine changes its output substantially, @code{nnweb}
 won't be able to parse it and will fail.  One could hardly fault the Web
-providers if they were to do this---their @emph{raison d'être} is to
+providers if they were to do this---their @emph{raison d'@^etre} is to
 make money off of advertisements, not to provide services to the
 community.  Since @code{nnweb} washes the ads off all the articles, one
 might think that the providers might be somewhat miffed.  We'll see.
@@ -15788,6 +15918,21 @@ An easy way to get started with @code{nnrss} is to say something like
 the following in the group buffer: @kbd{B nnrss RET y}, then
 subscribe to groups.
 
+@cindex OPML
+You can also use the following commands to import and export your
+subscriptions from a file in @acronym{OPML} format (Outline Processor
+Markup Language).
+
+@defun nnrss-opml-import file
+Prompt for an @acronym{OPML} file, and subscribe to each feed in the
+file.
+@end defun
+
+@defun nnrss-opml-export
+Write your current @acronym{RSS} subscriptions to a buffer in
+@acronym{OPML} format.
+@end defun
+
 The following @code{nnrss} variables can be altered:
 
 @table @code
@@ -16518,7 +16663,7 @@ follows:
 This instructs the @code{imap.el} package to log any exchanges with
 the server.  The log is stored in the buffer @samp{*imap-log*}.  Look
 for error messages, which sometimes are tagged with the keyword
-@code{BAD} - but when submitting a bug, make sure to include all the
+@code{BAD}---but when submitting a bug, make sure to include all the
 data.
 
 @node Other Sources
@@ -17415,7 +17560,8 @@ functionality up to the newsreader makes sense if you're the only person
 reading news on a machine.
 
 Setting up Gnus as an ``offline'' newsreader is quite simple.  In
-fact, you don't even have to configure anything.
+fact, you don't have to configure anything as the agent is now enabled
+by default (@pxref{Agent Variables, gnus-agent}).
 
 Of course, to use it as such, you have to learn a few new commands.
 
@@ -17591,55 +17737,49 @@ listed below.
 
 @cindex Agent Parameters
 @table @code
-@item gnus-agent-cat-name
+@item agent-cat-name
 The name of the category.
 
-@item gnus-agent-cat-groups
+@item agent-groups
 The list of groups that are in this category.
 
-@item gnus-agent-cat-predicate
+@item agent-predicate
 A predicate which (generally) gives a rough outline of which articles
 are eligible for downloading; and
 
-@item gnus-agent-cat-score-file
+@item agent-score-file
 a score rule which (generally) gives you a finer granularity when
 deciding what articles to download.  (Note that this @dfn{download
 score} is not necessarily related to normal scores.)
 
-@item gnus-agent-cat-enable-expiration
+@item agent-enable-expiration
 a boolean indicating whether the agent should expire old articles in
 this group.  Most groups should be expired to conserve disk space.  In
 fact, its probably safe to say that the gnus.* hierarchy contains the
 only groups that should not be expired.
 
-@item gnus-agent-cat-days-until-old
+@item agent-days-until-old
 an integer indicating the number of days that the agent should wait
 before deciding that a read article is safe to expire.
 
-@item gnus-agent-cat-low-score
+@item agent-low-score
 an integer that overrides the value of @code{gnus-agent-low-score}.
 
-@item gnus-agent-cat-high-score
+@item agent-high-score
 an integer that overrides the value of @code{gnus-agent-high-score}.
 
-@item gnus-agent-cat-length-when-short
+@item agent-length-when-short
 an integer that overrides the value of
 @code{gnus-agent-short-article}.
 
-@item gnus-agent-cat-length-when-long
+@item agent-length-when-long
 an integer that overrides the value of @code{gnus-agent-long-article}.
 
-@c @item gnus-agent-cat-disable-undownloaded-faces
-@c a symbol indicating whether the summary buffer should @emph{not} display
-@c undownloaded articles using the gnus-summary-*-undownloaded-face
-@c faces.  The symbol nil will enable the use of undownloaded faces while
-@c all other symbols disable them.
-
-@item gnus-agent-cat-enable-undownloaded-faces
+@item agent-enable-undownloaded-faces
 a symbol indicating whether the summary buffer should display
-undownloaded articles using the gnus-summary-*-undownloaded-face
-faces.  The symbol nil will disable the use of undownloaded faces while
-all other symbols enable them.
+undownloaded articles using the @code{gnus-summary-*-undownloaded-face}
+faces.  Any symbol other than @code{nil} will enable the use of
+undownloaded faces.
 @end table
 
 The name of a category can not be changed once the category has been
@@ -18222,21 +18362,28 @@ If you use the Agent as a cache (to avoid downloading the same article
 each time you visit it or to minimize your connection time), the
 undownloaded face will probably seem like a good idea.  The reason
 being that you do all of our work (marking, reading, deleting) with
-downloaded articles so the normal faces always appear.
-
-For occasional Agent users, the undownloaded faces may appear to be an
-absolutely horrible idea.  The issue being that, since most of their
-articles have not been fetched into the Agent, most of the normal
-faces will be obscured by the undownloaded faces.  If this is your
-situation, you have two choices available.  First, you can completely
-disable the undownload faces by customizing
-@code{gnus-summary-highlight} to delete the three cons-cells that
-refer to the @code{gnus-summary-*-undownloaded-face} faces.  Second, if
-you prefer to take a more fine-grained approach, you may set the
-@code{agent-disable-undownloaded-faces} group parameter to t.  This
-parameter, like all other agent parameters, may be set on an Agent
-Category (@pxref{Agent Categories}), a Group Topic (@pxref{Topic
-Parameters}), or an individual group (@pxref{Group Parameters}).
+downloaded articles so the normal faces always appear.  For those
+users using the agent to improve online performance by caching the NOV
+database (most users since 5.10.2), the undownloaded faces may appear
+to be an absolutely horrible idea.  The issue being that, since none
+of their articles have been fetched into the Agent, all of the
+normal faces will be obscured by the undownloaded faces.
+
+If you would like to use the undownloaded faces, you must enable the
+undownloaded faces by setting the @code{agent-enable-undownloaded-faces}
+group parameter to t.  This parameter, like all other agent
+parameters, may be set on an Agent Category (@pxref{Agent
+Categories}), a Group Topic (@pxref{Topic Parameters}), or an
+individual group (@pxref{Group Parameters}).
+
+The one problem common to all users using the agent is how quickly it
+can consume disk space.  If you using the agent on many groups, it is
+even more difficult to effectively recover disk space.  One solution
+is the @samp{%F} format available in @code{gnus-group-line-format}.
+This format will display the actual disk space used by articles
+fetched into both the agent and cache.  By knowing which groups use
+the most space, users know where to focus their efforts when ``agent
+expiring'' articles.
 
 @node Agent as Cache
 @subsection Agent as Cache
@@ -18388,21 +18535,40 @@ directory.  It's emptied when you synchronize flags.
 @node Outgoing Messages
 @subsection Outgoing Messages
 
-When Gnus is unplugged, all outgoing messages (both mail and news) are
-stored in the draft group ``queue'' (@pxref{Drafts}).  You can view
-them there after posting, and edit them at will.
+By default, when Gnus is unplugged, all outgoing messages (both mail
+and news) are stored in the draft group ``queue'' (@pxref{Drafts}).
+You can view them there after posting, and edit them at will.
 
-When Gnus is plugged again, you can send the messages either from the
-draft group with the special commands available there, or you can use
-the @kbd{J S} command in the group buffer to send all the sendable
-messages in the draft group.
+You can control the circumstances under which outgoing mail is queued
+(see @code{gnus-agent-queue-mail}, @pxref{Agent Variables}).  Outgoing
+news is always queued when Gnus is unplugged, and never otherwise.
 
+You can send the messages either from the draft group with the special
+commands available there, or you can use the @kbd{J S} command in the
+group buffer to send all the sendable messages in the draft group.
+Posting news will only work when Gnus is plugged, but you can send
+mail at any time.
 
+If sending mail while unplugged does not work for you and you worry
+about hitting @kbd{J S} by accident when unplugged, you can have Gnus
+ask you to confirm your action (see
+@code{gnus-agent-prompt-send-queue}, @pxref{Agent Variables}).
 
 @node Agent Variables
 @subsection Agent Variables
 
 @table @code
+@item gnus-agent
+@vindex gnus-agent
+Is the agent enabled?  The default is @code{t}.  When first enabled,
+the agent will use @code{gnus-agent-auto-agentize-methods} to
+automatically mark some backends as agentized.  You may change which
+backends are agentized using the agent commands in the server buffer.
+
+To enter the server buffer, use the @kbd{^}
+(@code{gnus-group-enter-server-mode}) command in the group buffer.
+
+
 @item gnus-agent-directory
 @vindex gnus-agent-directory
 Where the Gnus Agent will store its files.  The default is
@@ -18497,6 +18663,19 @@ have not been fetched), @code{always-undownloaded} (maneuvering always
 ignores articles that have not been fetched), @code{unfetched}
 (maneuvering ignores articles whose headers have not been fetched).
 
+@item gnus-agent-queue-mail
+@vindex gnus-agent-queue-mail
+When @code{gnus-agent-queue-mail} is @code{always}, Gnus will always
+queue mail rather than sending it straight away.  When @code{t}, Gnus
+will queue mail when unplugged only.  When @code{nil}, never queue
+mail.  The default is @code{t}.
+
+@item gnus-agent-prompt-send-queue
+@vindex gnus-agent-prompt-send-queue
+When @code{gnus-agent-prompt-send-queue} is non-@code{nil} Gnus will
+prompt you to confirm that you really wish to proceed if you hit
+@kbd{J S} while unplugged.  The default is @code{nil}.
+
 @item gnus-agent-auto-agentize-methods
 @vindex gnus-agent-auto-agentize-methods
 If you have never used the Agent before (or more technically, if
@@ -18571,7 +18750,7 @@ following incantation:
 
 @example
 #!/bin/sh
-emacs -batch -l ~/.emacs -f -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1
+emacs -batch -l ~/.emacs -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1
 @end example
 
 
@@ -18643,7 +18822,6 @@ silently to help keep the sizes of the score files down.
 * Global Score Files::          Earth-spanning, ear-splitting score files.
 * Kill Files::                  They are still here, but they can be ignored.
 * Converting Kill Files::       Translating kill files to score files.
-* GroupLens::                   Getting predictions on what you like to read.
 * Advanced Scoring::            Using logical expressions to build score rules.
 * Score Decays::                It can be useful to let scores wither away.
 @end menu
@@ -18914,6 +19092,12 @@ There aren't many of these as yet, I'm afraid.
 
 @table @kbd
 
+@item W e
+@kindex W e (Group)
+@findex gnus-score-edit-all-score
+Edit the apply-to-all-groups all.SCORE file.  You will be popped into
+a @code{gnus-score-mode} buffer (@pxref{Score File Editing}).
+
 @item W f
 @kindex W f (Group)
 @findex gnus-score-flush-cache
@@ -20031,205 +20215,6 @@ hand.  Or just let them be as they are.  Gnus will still use them as
 before.
 
 
-@node GroupLens
-@section GroupLens
-@cindex GroupLens
-
-@sc{Note:} Unfortunately the GroupLens system seems to have shut down,
-so this section is mostly of historical interest.
-
-@uref{http://www.cs.umn.edu/Research/GroupLens/, GroupLens} is a
-collaborative filtering system that helps you work together with other
-people to find the quality news articles out of the huge volume of
-news articles generated every day.
-
-To accomplish this the GroupLens system combines your opinions about
-articles you have already read with the opinions of others who have done
-likewise and gives you a personalized prediction for each unread news
-article.  Think of GroupLens as a matchmaker.  GroupLens watches how you
-rate articles, and finds other people that rate articles the same way.
-Once it has found some people you agree with it tells you, in the form
-of a prediction, what they thought of the article.  You can use this
-prediction to help you decide whether or not you want to read the
-article.
-
-@menu
-* Using GroupLens::             How to make Gnus use GroupLens.
-* Rating Articles::             Letting GroupLens know how you rate articles.
-* Displaying Predictions::      Displaying predictions given by GroupLens.
-* GroupLens Variables::         Customizing GroupLens.
-@end menu
-
-
-@node Using GroupLens
-@subsection Using GroupLens
-
-To use GroupLens you must register a pseudonym with your local
-@uref{http://www.cs.umn.edu/Research/GroupLens/bbb.html, Better Bit
-Bureau (BBB)} is the only better bit in town at the moment.
-
-Once you have registered you'll need to set a couple of variables.
-
-@table @code
-
-@item gnus-use-grouplens
-@vindex gnus-use-grouplens
-Setting this variable to a non-@code{nil} value will make Gnus hook into
-all the relevant GroupLens functions.
-
-@item grouplens-pseudonym
-@vindex grouplens-pseudonym
-This variable should be set to the pseudonym you got when registering
-with the Better Bit Bureau.
-
-@item grouplens-newsgroups
-@vindex grouplens-newsgroups
-A list of groups that you want to get GroupLens predictions for.
-
-@end table
-
-That's the minimum of what you need to get up and running with GroupLens.
-Once you've registered, GroupLens will start giving you scores for
-articles based on the average of what other people think.  But, to get
-the real benefit of GroupLens you need to start rating articles
-yourself.  Then the scores GroupLens gives you will be personalized for
-you, based on how the people you usually agree with have already rated.
-
-
-@node Rating Articles
-@subsection Rating Articles
-
-In GroupLens, an article is rated on a scale from 1 to 5, inclusive.
-Where 1 means something like this article is a waste of bandwidth and 5
-means that the article was really good.  The basic question to ask
-yourself is, ``on a scale from 1 to 5 would I like to see more articles
-like this one?''
-
-There are four ways to enter a rating for an article in GroupLens.
-
-@table @kbd
-
-@item r
-@kindex r (GroupLens)
-@findex bbb-summary-rate-article
-This function will prompt you for a rating on a scale of one to five.
-
-@item k
-@kindex k (GroupLens)
-@findex grouplens-score-thread
-This function will prompt you for a rating, and rate all the articles in
-the thread.  This is really useful for some of those long running giant
-threads in rec.humor.
-
-@end table
-
-The next two commands, @kbd{n} and @kbd{,} take a numerical prefix to be
-the score of the article you're reading.
-
-@table @kbd
-
-@item 1-5 n
-@kindex n (GroupLens)
-@findex grouplens-next-unread-article
-Rate the article and go to the next unread article.
-
-@item 1-5 ,
-@kindex , (GroupLens)
-@findex grouplens-best-unread-article
-Rate the article and go to the next unread article with the highest score.
-
-@end table
-
-If you want to give the current article a score of 4 and then go to the
-next article, just type @kbd{4 n}.
-
-
-@node Displaying Predictions
-@subsection Displaying Predictions
-
-GroupLens makes a prediction for you about how much you will like a
-news article.  The predictions from GroupLens are on a scale from 1 to
-5, where 1 is the worst and 5 is the best.  You can use the predictions
-from GroupLens in one of three ways controlled by the variable
-@code{gnus-grouplens-override-scoring}.
-
-@vindex gnus-grouplens-override-scoring
-There are three ways to display predictions in grouplens.  You may
-choose to have the GroupLens scores contribute to, or override the
-regular Gnus scoring mechanism.  override is the default; however, some
-people prefer to see the Gnus scores plus the grouplens scores.  To get
-the separate scoring behavior you need to set
-@code{gnus-grouplens-override-scoring} to @code{'separate}.  To have the
-GroupLens predictions combined with the grouplens scores set it to
-@code{'override} and to combine the scores set
-@code{gnus-grouplens-override-scoring} to @code{'combine}.  When you use
-the combine option you will also want to set the values for
-@code{grouplens-prediction-offset} and
-@code{grouplens-score-scale-factor}.
-
-@vindex grouplens-prediction-display
-In either case, GroupLens gives you a few choices for how you would like
-to see your predictions displayed.  The display of predictions is
-controlled by the @code{grouplens-prediction-display} variable.
-
-The following are valid values for that variable.
-
-@table @code
-@item prediction-spot
-The higher the prediction, the further to the right an @samp{*} is
-displayed.
-
-@item confidence-interval
-A numeric confidence interval.
-
-@item prediction-bar
-The higher the prediction, the longer the bar.
-
-@item confidence-bar
-Numerical confidence.
-
-@item confidence-spot
-The spot gets bigger with more confidence.
-
-@item prediction-num
-Plain-old numeric value.
-
-@item confidence-plus-minus
-Prediction +/- confidence.
-
-@end table
-
-
-@node GroupLens Variables
-@subsection GroupLens Variables
-
-@table @code
-
-@item gnus-summary-grouplens-line-format
-The summary line format used in GroupLens-enhanced summary buffers.  It
-accepts the same specs as the normal summary line format (@pxref{Summary
-Buffer Lines}).  The default is @samp{%U%R%z%l%I%(%[%4L: %-23,23n%]%)
-%s\n}.
-
-@item grouplens-bbb-host
-Host running the bbbd server.  @samp{grouplens.cs.umn.edu} is the
-default.
-
-@item grouplens-bbb-port
-Port of the host running the bbbd server.  The default is 9000.
-
-@item grouplens-score-offset
-Offset the prediction by this value.  In other words, subtract the
-prediction value by this number to arrive at the effective score.  The
-default is 0.
-
-@item grouplens-score-scale-factor
-This variable allows the user to magnify the effect of GroupLens scores.
-The scale factor is applied after the offset.  The default is 1.
-
-@end table
-
-
 @node Advanced Scoring
 @section Advanced Scoring
 
@@ -20476,6 +20461,8 @@ four days, Gnus will decay the scores four times, for instance.
 @include sieve.texi
 @chapter PGG
 @include pgg.texi
+@chapter SASL
+@include sasl.texi
 @end iflatex
 @end iftex
 
@@ -21805,7 +21792,32 @@ readers.
 @end iftex
 @c @anchor{X-Face}
 
-Decoding an @code{X-Face} header either requires an Emacs that has
+Gnus now uses the internal ELisp-based @code{uncompface} program for
+decoding an @code{X-Face} header normally in Emacs.  While it doesn't
+require any other external program, you may feel it is slow if you are
+using a slow machine.  In such a case, you can modify the following
+variables:
+
+@table @code
+@item uncompface-use-external
+@vindex uncompface-use-external
+Specify which of the internal or the external decoder should be used.
+@code{nil} means to use the internal ELisp-based @code{uncompface}
+program.  @code{t} means to use the external decoder.  The default value
+is normally @code{undecided} which means to determine it by checking
+whether the host machine is slow, being controlled by
+@code{uncompface-use-external-threshold} (which see).
+
+@item uncompface-use-external-threshold
+@vindex uncompface-use-external-threshold
+A number of seconds to check whether the host machine is slow.  If the
+host takes time larger than this value for decoding an @code{X-Face}
+using the internal ELisp-based @code{uncompface} program, it will be
+changed to using the external decoder.  The default is 0.1 seconds.
+@end table
+
+If the internal decoder is invalidated or if you are using XEmacs,
+decoding an @code{X-Face} header either requires an Emacs that has
 @samp{compface} support (which most XEmacs versions has), or that you
 have @samp{compface} installed on your system.  If either is true,
 Gnus will default to displaying @code{X-Face} headers.
@@ -21835,6 +21847,43 @@ like @code{netpbm}, @code{libgr-progs} and @code{compface}.})
 (Note: @code{x-face} is used in the variable/function names, not
 @code{xface}).
 
+@noindent
+Face and variable:
+
+@table @code
+@item gnus-x-face
+@vindex gnus-x-face
+Face to show X-Face.  The colors from this face are used as the
+foreground and background colors of the displayed X-Faces.  The
+default colors are black and white.
+
+@item gnus-face-properties-alist
+@vindex gnus-face-properties-alist
+Alist of image types and properties applied to Face (@pxref{Face}) and
+X-Face images.  The default value is @code{((pbm . (:face gnus-x-face))
+(png . nil))} for Emacs or @code{((xface . (:face gnus-x-face)))} for
+XEmacs.  Here are examples:
+
+@lisp
+;; Specify the altitude of Face and X-Face images in the From header.
+(setq gnus-face-properties-alist
+      '((pbm . (:face gnus-x-face :ascent 80))
+        (png . (:ascent 80))))
+
+;; Show Face and X-Face images as pressed buttons.
+(setq gnus-face-properties-alist
+      '((pbm . (:face gnus-x-face :relief -2))
+        (png . (:relief -2))))
+@end lisp
+
+@pxref{Image Descriptors, ,Image Descriptors, elisp, The Emacs Lisp
+Reference Manual} for the valid properties for various image types.
+Currently, @code{pbm} is used for X-Face images and @code{png} is used
+for Face images in Emacs.  Only the @code{:face} property is effective
+on the @code{xface} image type in XEmacs if it is built with the
+@samp{libcompface} library.
+@end table
+
 Gnus provides a few convenience functions and variables to allow
 easier insertion of X-Face headers in outgoing messages.
 
@@ -21895,6 +21944,9 @@ The contents of a @code{Face} header must be a base64 encoded PNG image.
 See @uref{http://quimby.gnus.org/circus/face/} for the precise
 specifications.
 
+The @code{gnus-face-properties-alist} variable affects the appearance of
+displayed Face images.  @xref{X-Face}.
+
 Gnus provides a few convenience functions and variables to allow
 easier insertion of Face headers in outgoing messages.
 
@@ -22195,16 +22247,18 @@ server or when you sort through incoming mail.  If you get 200 spam
 messages per day from @samp{random-address@@vmadmin.com}, you block
 @samp{vmadmin.com}.  If you get 200 messages about @samp{VIAGRA}, you
 discard all messages with @samp{VIAGRA} in the message.  If you get
-lots of spam from China, for example, you try to filter all mail from
-Chinese IPs.
+lots of spam from Bulgaria, for example, you try to filter all mail
+from Bulgarian IPs.  
+
+This, unfortunately, is a great way to discard legitimate e-mail.  The
+risks of blocking a whole country (Bulgaria, Norway, Nigeria, China,
+etc.) or even a continent (Asia, Africa, Europe, etc.) from contacting
+you should be obvious, so don't do it if you have the choice.
 
-This, unfortunately, is a great way to discard legitimate e-mail.  For
-instance, the very informative and useful RISKS digest has been
-blocked by overzealous mail filters because it @strong{contained}
-words that were common in spam messages.  The risks of blocking a
-whole country from contacting you should also be obvious, so don't do
-it if you have the choice.  Nevertheless, in isolated cases, with
-great care, direct filtering of mail can be useful.
+In another instance, the very informative and useful RISKS digest has
+been blocked by overzealous mail filters because it @strong{contained}
+words that were common in spam messages.  Nevertheless, in isolated
+cases, with great care, direct filtering of mail can be useful.
 
 Another approach to filtering e-mail is the distributed spam
 processing, for instance DCC implements such a system.  In essence,
@@ -22381,8 +22435,8 @@ call the external tools during splitting.  Example fancy split method:
 
 Note that with the nnimap backend, message bodies will not be
 downloaded by default.  You need to set
-@code{nnimap-split-download-body} to t to do that (@pxref{Splitting in
-IMAP}).
+@code{nnimap-split-download-body} to @code{t} to do that
+(@pxref{Splitting in IMAP}).
 
 That is about it.  As some spam is likely to get through anyway, you
 might want to have a nifty function to call when you happen to read
@@ -22547,6 +22601,7 @@ group.
 * Blackholes::                  
 * Regular Expressions Header Matching::  
 * Bogofilter::                  
+* SpamAssassin backend::        
 * ifile spam filtering::        
 * spam-stat spam filtering::    
 * SpamOracle::                  
@@ -22575,22 +22630,24 @@ Splitting incoming mail is better suited to mail backends such as
 called a @dfn{Spool File}.  See @xref{Spam ELisp Package Filtering of
 Incoming Mail}.
 
+@vindex gnus-spam-autodetect
+@vindex gnus-spam-autodetect-methods
 For backends such as @code{nntp} there is no incoming mail spool, so
 an alternate mechanism must be used.  This may also happen for
 backends where the server is in charge of splitting incoming mail, and
 Gnus does not do further splitting.  The @code{spam-autodetect} and
 @code{spam-autodetect-methods} group parameters (accessible with
 @kbd{G c} and @kbd{G p} as usual), and the corresponding variables
-@code{gnus-spam-autodetect-methods} and
-@code{gnus-spam-autodetect-methods} (accessible with @kbd{M-x
-customize-variable} as usual).
+@code{gnus-spam-autodetect} and @code{gnus-spam-autodetect-methods}
+(accessible with @kbd{M-x customize-variable} as usual) can help.
 
-When @code{spam-autodetect} is used, it hooks into the process of
-entering a group.  Thus, entering a group with unseen or unread
-articles becomes the substitute for checking incoming mail.  Whether
-only unseen articles or all unread articles will be processed is
-determined by the @code{spam-autodetect-recheck-messages}.  When set
-to t, unread messages will be rechecked.
+When @code{spam-autodetect} is used (you can turn it on for a
+group/topic or wholesale by regex, as needed), it hooks into the
+process of entering a group.  Thus, entering a group with unseen or
+unread articles becomes the substitute for checking incoming mail.
+Whether only unseen articles or all unread articles will be processed
+is determined by the @code{spam-autodetect-recheck-messages}.  When
+set to @code{t}, unread messages will be rechecked.
 
 @code{spam-autodetect} grants the user at once more and less control
 of spam filtering.  The user will have more control over each group's
@@ -22618,8 +22675,8 @@ any are set, and the processed mail is moved to the
 @code{ham-process-destination} or the @code{spam-process-destination}
 depending on the article's classification.  If the
 @code{ham-process-destination} or the @code{spam-process-destination},
-whichever is appropriate, are nil, the article is left in the current
-group.
+whichever is appropriate, are @code{nil}, the article is left in the
+current group.
 
 If a spam is found in any group (this can be changed to only non-spam
 groups with @code{spam-move-spam-nonspam-groups-only}), it is
@@ -22631,11 +22688,11 @@ You have to load the @code{gnus-registry.el} package and enable the
 @code{spam-log-to-registry} variable if you want spam to be processed
 no more than once.  Thus, spam is detected and processed everywhere,
 which is what most people want.  If the
-@code{spam-process-destination} is nil, the spam is marked as
+@code{spam-process-destination} is @code{nil}, the spam is marked as
 expired, which is usually the right thing to do.
 
-If spam can not be moved - because of a read-only backend such as NNTP,
-for example, it will be copied.
+If spam can not be moved---because of a read-only backend such as
+@acronym{NNTP}, for example, it will be copied.
 
 If a ham mail is found in a ham group, as determined by the
 @code{ham-marks} parameter, it is processed as ham by the active ham
@@ -22649,11 +22706,11 @@ no more than once.  Thus, ham is detected and processed only when
 necessary, which is what most people want.  More on this in
 @xref{Spam ELisp Package Configuration Examples}.
 
-If ham can not be moved - because of a read-only backend such as NNTP,
-for example, it will be copied.
+If ham can not be moved---because of a read-only backend such as
+@acronym{NNTP}, for example, it will be copied.
 
 If all this seems confusing, don't worry.  Soon it will be as natural
-as typing Lisp one-liners on a neural interface... err, sorry, that's
+as typing Lisp one-liners on a neural interface@dots{} err, sorry, that's
 50 years in the future yet.  Just trust us, it's not so bad.
 
 @node Spam ELisp Package Filtering of Incoming Mail
@@ -22674,6 +22731,8 @@ Note that the fancy split may be called @code{nnmail-split-fancy} or
 @code{nnimap-split-fancy}, depending on whether you use the nnmail or
 nnimap back ends to retrieve your mail.
 
+Also, @code{spam-split} will not modify incoming mail in any way.
+
 The @code{spam-split} function will process incoming mail and send the
 mail considered to be spam into the group name given by the variable
 @code{spam-split-group}.  By default that group name is @samp{spam},
@@ -22687,7 +22746,7 @@ actually give you the group
 work depending on your server's tolerance for strange group names.
 
 You can also give @code{spam-split} a parameter,
-e.g. @samp{'spam-use-regex-headers} or @samp{"maybe-spam"}.  Why is
+e.g. @code{spam-use-regex-headers} or @code{"maybe-spam"}.  Why is
 this useful?
 
 Take these split rules (with @code{spam-use-regex-headers} and
@@ -22697,7 +22756,7 @@ Take these split rules (with @code{spam-use-regex-headers} and
  nnimap-split-fancy '(|
                       (any "ding" "ding")
                       (: spam-split)
-                      ;; default mailbox
+                      ;; @r{default mailbox}
                       "mail")
 @end example
 
@@ -22713,14 +22772,15 @@ You can let SpamAssassin headers supersede ding rules, but all other
 regex-headers check) will be after the ding rule:
 
 @example
- nnimap-split-fancy '(|
-;;; all spam detected by spam-use-regex-headers goes to "regex-spam"
-                      (: spam-split "regex-spam" 'spam-use-regex-headers)
-                      (any "ding" "ding")
-;;; all other spam detected by spam-split goes to spam-split-group
-                      (: spam-split)
-                      ;; default mailbox
-                      "mail")
+nnimap-split-fancy
+      '(|
+        ;; @r{all spam detected by @code{spam-use-regex-headers} goes to @samp{regex-spam}}
+        (: spam-split "regex-spam" 'spam-use-regex-headers)
+        (any "ding" "ding")
+        ;; @r{all other spam detected by spam-split goes to @code{spam-split-group}}
+        (: spam-split)
+        ;; @r{default mailbox}
+        "mail")
 @end example
 
 This lets you invoke specific @code{spam-split} checks depending on
@@ -22773,7 +22833,7 @@ processors take mail known to be spam and process it so similar spam
 will be detected later.
 
 The format of the spam or ham processor entry used to be a symbol,
-but now it is a cons cell.  See the individual spam processor entries
+but now it is a @sc{cons} cell.  See the individual spam processor entries
 for more information.
 
 @vindex gnus-spam-newsgroup-contents
@@ -22851,18 +22911,16 @@ not done for @emph{unclassified} or @emph{ham} groups.  Also, any
 determined by either the @code{ham-process-destination} group
 parameter or a match in the @code{gnus-ham-process-destinations}
 variable, which is a list of regular expressions matched with group
-names (it's easiest to customize this variable with
-@code{customize-variable gnus-ham-process-destinations}).  Each
-newsgroup specification has the format (REGEXP PROCESSOR) in a
-standard Lisp list, if you prefer to customize the variable manually.
-The ultimate location is a group name or names.  If the
-@code{ham-process-destination} parameter is not set, ham articles are
-left in place.  If the
+names (it's easiest to customize this variable with @kbd{M-x
+customize-variable @key{RET} gnus-ham-process-destinations}).  Each
+group name list is a standard Lisp list, if you prefer to customize
+the variable manually.  If the @code{ham-process-destination}
+parameter is not set, ham articles are left in place.  If the
 @code{spam-mark-ham-unread-before-move-from-spam-group} parameter is
-set, the ham articles are marked as unread before being moved.  
+set, the ham articles are marked as unread before being moved.
 
-If ham can not be moved - because of a read-only backend such as NNTP,
-for example, it will be copied.
+If ham can not be moved---because of a read-only backend such as
+@acronym{NNTP}, for example, it will be copied.
 
 Note that you can use multiples destinations per group or regular
 expression!  This enables you to send your ham to a regular mail
@@ -22890,18 +22948,16 @@ When you leave a @emph{ham} or @emph{unclassified} group, all
 the @code{spam-process-destination} group parameter or a match in the
 @code{gnus-spam-process-destinations} variable, which is a list of
 regular expressions matched with group names (it's easiest to
-customize this variable with @code{customize-variable
-gnus-spam-process-destinations}).  Each newsgroup specification has
-the repeated format (REGEXP GROUP) and they are all in a standard Lisp
-list, if you prefer to customize the variable manually.  The ultimate
-location is a group name or names.  If the
+customize this variable with @kbd{M-x customize-variable @key{RET}
+gnus-spam-process-destinations}).  Each group name list is a standard
+Lisp list, if you prefer to customize the variable manually.  If the
 @code{spam-process-destination} parameter is not set, the spam
 articles are only expired.  The group name is fully qualified, meaning
 that if you see @samp{nntp:servername} before the group name in the
-group buffer then you need it here as well.  
+group buffer then you need it here as well.
 
-If spam can not be moved - because of a read-only backend such as NNTP,
-for example, it will be copied.
+If spam can not be moved---because of a read-only backend such as
+@acronym{NNTP}, for example, it will be copied.
 
 Note that you can use multiples destinations per group or regular
 expression!  This enables you to send your spam to multiple @emph{spam
@@ -22917,15 +22973,15 @@ entries, this won't work as well as it does without a limit.
 
 @vindex spam-mark-only-unseen-as-spam
 Set this variable if you want only unseen articles in spam groups to
-be marked as spam.  By default, it is set.  If you set it to nil,
-unread articles will also be marked as spam.
+be marked as spam.  By default, it is set.  If you set it to
+@code{nil}, unread articles will also be marked as spam.
 
 @vindex spam-mark-ham-unread-before-move-from-spam-group
 Set this variable if you want ham to be unmarked before it is moved
 out of the spam group.  This is very useful when you use something
-like the tick mark @samp{!} to mark ham - the article will be placed
-in your ham-process-destination, unmarked as if it came fresh from
-the mail server.
+like the tick mark @samp{!} to mark ham---the article will be placed
+in your @code{ham-process-destination}, unmarked as if it came fresh
+from the mail server.
 
 @vindex spam-autodetect-recheck-messages
 When autodetecting spam, this variable tells @code{spam.el} whether
@@ -22943,87 +22999,86 @@ spam.  It is recommended that you leave it off.
 
 From Ted Zlatanov <tzz@@lifelogs.com>.
 @example
-
-;; for gnus-registry-split-fancy-with-parent and spam autodetection
-;; see gnus-registry.el for more information
+;; @r{for @code{gnus-registry-split-fancy-with-parent} and spam autodetection}
+;; @r{see @file{gnus-registry.el} for more information}
 (gnus-registry-initialize)
 (spam-initialize)
 
-;; I like control-S for marking spam
+;; @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 ;; for spam autodetection
+ spam-log-to-registry t     ; @r{for spam autodetection}
  spam-use-BBDB t
- spam-use-regex-headers t               ; catch X-Spam-Flag (SpamAssassin)
- ;; all groups with "spam" in the name contain spam
- gnus-spam-newsgroup-contents '(("spam" gnus-group-spam-classification-spam))
- ;; see documentation for these
+ spam-use-regex-headers t   ; @r{catch X-Spam-Flag (SpamAssassin)}
+ ;; @r{all groups with @samp{spam} in the name contain spam}
+ gnus-spam-newsgroup-contents
+  '(("spam" gnus-group-spam-classification-spam))
+ ;; @r{see documentation for these}
  spam-move-spam-nonspam-groups-only nil
  spam-mark-only-unseen-as-spam t
  spam-mark-ham-unread-before-move-from-spam-group t
  nnimap-split-rule 'nnimap-split-fancy
- ;; understand what this does before you copy it to your own setup!
+ ;; @r{understand what this does before you copy it to your own setup!}
  nnimap-split-fancy '(|
-                      ;; trace references to parents and put in their group
+                      ;; @r{trace references to parents and put in their group}
                       (: gnus-registry-split-fancy-with-parent)
-                      ;; this will catch server-side SpamAssassin tags
+                      ;; @r{this will catch server-side SpamAssassin tags}
                       (: spam-split 'spam-use-regex-headers)
                       (any "ding" "ding")
-                      ;; note that spam by default will go to "spam"
+                      ;; @r{note that spam by default will go to @samp{spam}}
                       (: spam-split)
-                      ;; default mailbox
+                      ;; @r{default mailbox}
                       "mail"))
 
-;; my parameters, set with `G p'
+;; @r{my parameters, set with @kbd{G p}}
 
-;; all nnml groups, and all nnimap groups except
-;; "nnimap+mail.lifelogs.com:train" and
-;; "nnimap+mail.lifelogs.com:spam": any spam goes to nnimap training,
-;; because it must have been detected manually
+;; @r{all nnml groups, and all nnimap groups except}
+;; @r{@samp{nnimap+mail.lifelogs.com:train} and}
+;; @r{@samp{nnimap+mail.lifelogs.com:spam}: any spam goes to nnimap training,}
+;; @r{because it must have been detected manually}
 
 ((spam-process-destination . "nnimap+mail.lifelogs.com:train"))
 
-;; all NNTP groups
-;; autodetect spam with the blacklist and ham with the BBDB
+;; @r{all @acronym{NNTP} groups}
+;; @r{autodetect spam with the blacklist and ham with the BBDB}
 ((spam-autodetect-methods spam-use-blacklist spam-use-BBDB)
-;; send all spam to the training group
+;; @r{send all spam to the training group}
  (spam-process-destination . "nnimap+mail.lifelogs.com:train"))
 
-;; only some NNTP groups, where I want to autodetect spam
+;; @r{only some @acronym{NNTP} groups, where I want to autodetect spam}
 ((spam-autodetect . t))
 
-;; my nnimap "nnimap+mail.lifelogs.com:spam" group
+;; @r{my nnimap @samp{nnimap+mail.lifelogs.com:spam} group}
 
-;; this is a spam group
+;; @r{this is a spam group}
 ((spam-contents gnus-group-spam-classification-spam)
 
- ;; any spam (which happens when I enter for all unseen messages,
- ;; because of the gnus-spam-newsgroup-contents setting above), goes to
- ;; "nnimap+mail.lifelogs.com:train" unless I mark it as ham
+ ;; @r{any spam (which happens when I enter for all unseen messages,}
+ ;; @r{because of the @code{gnus-spam-newsgroup-contents} setting above), goes to}
+ ;; @r{@samp{nnimap+mail.lifelogs.com:train} unless I mark it as ham}
 
  (spam-process-destination "nnimap+mail.lifelogs.com:train")
 
- ;; any ham goes to my "nnimap+mail.lifelogs.com:mail" folder, but
- ;; also to my "nnimap+mail.lifelogs.com:trainham" folder for training
+ ;; @r{any ham goes to my @samp{nnimap+mail.lifelogs.com:mail} folder, but}
+ ;; @r{also to my @samp{nnimap+mail.lifelogs.com:trainham} folder for training}
 
  (ham-process-destination "nnimap+mail.lifelogs.com:mail" 
                           "nnimap+mail.lifelogs.com:trainham")
- ;; in this group, only '!' marks are ham
+ ;; @r{in this group, only @samp{!} marks are ham}
  (ham-marks
   (gnus-ticked-mark))
- ;; remembers senders in the blacklist on the way out - this is
- ;; definitely not needed, it just makes me feel better
+ ;; @r{remembers senders in the blacklist on the way out---this is}
+ ;; @r{definitely not needed, it just makes me feel better}
  (spam-process (gnus-group-spam-exit-processor-blacklist)))
 
-;; Later, on the IMAP server I use the "train" group for training
-;; SpamAssassin to recognize spam, and the "trainham" group for
-;; recognizing ham - but Gnus has nothing to do with it.
+;; @r{Later, on the @acronym{IMAP} server I use the @samp{train} group for training}
+;; @r{SpamAssassin to recognize spam, and the @samp{trainham} group fora}
+;; @r{recognizing ham---but Gnus has nothing to do with it.}
 
 @end example
 
 @subsubheading Using @file{spam.el} on an IMAP server with a statistical filter on the server
-
 From Reiner Steib <reiner.steib@@gmx.de>.
 
 My provider has set up bogofilter (in combination with @acronym{DCC}) on
@@ -23061,7 +23116,7 @@ Because of the @code{gnus-group-spam-classification-spam} entry, all
 messages are marked as spam (with @code{$}).  When I find a false
 positive, I mark the message with some other ham mark (@code{ham-marks},
 @ref{Spam ELisp Package Global Variables}).  On group exit, those
-messages are copied to both groups, @samp{INBOX} (were I want to have
+messages are copied to both groups, @samp{INBOX} (where I want to have
 the article) and @samp{training.ham} (for training bogofilter) and
 deleted from the @samp{spam.detected} folder.
 
@@ -23093,7 +23148,7 @@ groups as spam and reports the to Gmane at group exit:
     (spam-process (gnus-group-spam-exit-processor-report-gmane)))
 @end lisp
 
-Additionally, I use `(setq spam-report-gmane-use-article-number nil)'
+Additionally, I use @code{(setq spam-report-gmane-use-article-number nil)}
 because I don't read the groups directly from news.gmane.org, but
 through my local news server (leafnode).  I.e. the article numbers are
 not the same as on news.gmane.org, thus @code{spam-report.el} has to check
@@ -23158,8 +23213,7 @@ customizing the group parameters or the
 @code{gnus-spam-process-newsgroups} variable.  When this symbol is
 added to a group's @code{spam-process} parameter, the senders of
 ham-marked articles in @emph{ham} groups will be added to the
-whitelist.  Note that this ham processor has no effect in @emph{spam}
-or @emph{unclassified} groups.
+whitelist.
 
 @emph{WARNING} 
 
@@ -23224,8 +23278,7 @@ customizing the group parameters or the
 @code{gnus-spam-process-newsgroups} variable.  When this symbol is
 added to a group's @code{spam-process} parameter, the senders of
 ham-marked articles in @emph{ham} groups will be added to the
-BBDB.  Note that this ham processor has no effect in @emph{spam}
-or @emph{unclassified} groups.
+BBDB.
 
 @emph{WARNING} 
 
@@ -23437,8 +23490,7 @@ customizing the group parameters or the
 @code{gnus-spam-process-newsgroups} variable.  When this symbol is
 added to a group's @code{spam-process} parameter, the ham-marked
 articles in @emph{ham} groups will be added to the Bogofilter database
-of non-spam messages.  Note that this ham processor has no effect in
-@emph{spam} or @emph{unclassified} groups.
+of non-spam messages.
 
 @emph{WARNING} 
 
@@ -23463,6 +23515,59 @@ variables to indicate to spam-split that Bogofilter should either be
 used, or has already been used on the article.  The 0.9.2.1 version of
 Bogofilter was used to test this functionality.
 
+@node SpamAssassin backend
+@subsubsection SpamAssassin backend
+@cindex spam filtering
+@cindex spamassassin, spam filtering
+@cindex spam
+
+@defvar spam-use-spamassassin
+
+Set this variable if you want @code{spam-split} to use SpamAssassin.
+
+SpamAssassin assigns a score to each article based on a set of rules
+and tests, including a Bayesian filter.  The Bayesian filter can be
+trained by associating the @samp{$} mark for spam articles.  The
+spam score can be viewed by using the command @kbd{S t} in summary
+mode.
+
+If you set this variable, each article will be processed by
+SpamAssassin when @code{spam-split} is called.  If your mail is
+preprocessed by SpamAssassin, and you want to just use the
+SpamAssassin headers, set @code{spam-use-spamassassin-headers}
+instead.
+
+You should not enable this is you use
+@code{spam-use-spamassassin-headers}.
+
+@end defvar
+
+@defvar spam-use-spamassassin-headers
+
+Set this variable if your mail is preprocessed by SpamAssassin and
+want @code{spam-split} to split based on the SpamAssassin headers.
+
+You should not enable this is you use @code{spam-use-spamassassin}.
+
+@end defvar
+
+@defvar spam-spamassassin-path
+
+This variable points to the SpamAssassin executable.  If you have
+@code{spamd} running, you can set this variable to the @code{spamc}
+executable for faster processing.  See the SpamAssassin documentation
+for more information on @code{spamd}/@code{spamc}.
+
+@end defvar
+
+SpamAssassin is a powerful and flexible spam filter that uses a wide
+variety of tests to identify spam.  A ham and a spam processors are
+provided, plus the @code{spam-use-spamassassin} and
+@code{spam-use-spamassassin-headers} variables to indicate to
+spam-split that SpamAssassin should be either used, or has already
+been used on the article.  The 2.63 version of SpamAssassin was used
+to test this functionality.
+
 @node ifile spam filtering
 @subsubsection ifile spam filtering
 @cindex spam filtering
@@ -23541,8 +23646,7 @@ customizing the group parameters or the
 @code{gnus-spam-process-newsgroups} variable.  When this symbol is
 added to a group's @code{spam-process} parameter, the ham-marked
 articles in @emph{ham} groups will be added to the spam-stat database
-of non-spam messages.  Note that this ham processor has no effect in
-@emph{spam} or @emph{unclassified} groups.
+of non-spam messages.
 
 @emph{WARNING} 
 
@@ -23648,10 +23752,9 @@ the same way, we promise.
 Add this symbol to a group's @code{spam-process} parameter by
 customizing the group parameter or the
 @code{gnus-spam-process-newsgroups} variable.  When this symbol is added
-to a grup's @code{spam-process} parameter, the ham-marked articles in
+to a group's @code{spam-process} parameter, the ham-marked articles in
 @emph{ham} groups will be sent to the SpamOracle as samples of ham
-messages.  Note that this ham processor has no effect in @emph{spam} or
-@emph{unclassified} groups.
+messages.
 
 @emph{WARNING} 
 
@@ -23688,7 +23791,7 @@ incoming mail, provide the following:
 @enumerate
 
 @item
-code
+Code
 
 @lisp
 (defvar spam-use-blackbox nil
@@ -23696,32 +23799,34 @@ code
 @end lisp
 
 Add
-@example
-    (spam-use-blackbox   . spam-check-blackbox)
-@end example
+@lisp
+(spam-use-blackbox   . spam-check-blackbox)
+@end lisp
 to @code{spam-list-of-checks}.
 
 Add
-@example
-    (gnus-group-ham-exit-processor-blackbox     ham spam-use-blackbox)
-    (gnus-group-spam-exit-processor-blackbox    spam spam-use-blackbox)
-@end example
+@lisp
+(gnus-group-ham-exit-processor-blackbox  ham spam-use-blackbox)
+(gnus-group-spam-exit-processor-blackbox spam spam-use-blackbox)
+@end lisp
+
 to @code{spam-list-of-processors}.
 
 Add
-@example
-    (spam-use-blackbox  spam-blackbox-register-routine
-                 nil
-                 spam-blackbox-unregister-routine
-                 nil)
-@end example
+@lisp
+(spam-use-blackbox spam-blackbox-register-routine
+                   nil
+                   spam-blackbox-unregister-routine
+                   nil)
+@end lisp
+
 to @code{spam-registration-functions}.  Write the register/unregister
 routines using the bogofilter register/unregister routines as a
 start, or other restister/unregister routines more appropriate to
 Blackbox.
 
 @item
-functionality
+Functionality
 
 Write the @code{spam-check-blackbox} function.  It should return
 @samp{nil} or @code{spam-split-group}, observing the other
@@ -23740,7 +23845,7 @@ For processing spam and ham messages, provide the following:
 @enumerate
 
 @item
-code
+Code
 
 Note you don't have to provide a spam or a ham processor.  Only
 provide them if Blackbox supports spam or ham processing.
@@ -23765,18 +23870,18 @@ Only applicable to non-spam (unclassified and ham) groups.")
 Gnus parameters
 
 Add
-@example
-                   (const :tag "Spam: Blackbox"   (spam spam-use-blackbox))
-                   (const :tag "Ham: Blackbox"    (ham spam-use-blackbox))
-@end example
+@lisp
+(const :tag "Spam: Blackbox" (spam spam-use-blackbox))
+(const :tag "Ham: Blackbox"  (ham spam-use-blackbox))
+@end lisp
 to the @code{spam-process} group parameter in @code{gnus.el}.  Make
 sure you do it twice, once for the parameter and once for the
 variable customization.
 
 Add
-@example
-          (variable-item spam-use-blackbox)
-@end example
+@lisp
+(variable-item spam-use-blackbox)
+@end lisp
 to the @code{spam-autodetect-methods} group parameter in
 @code{gnus.el}.
 
@@ -24540,10 +24645,10 @@ Gnus should work on:
 @itemize @bullet
 
 @item
-Emacs 20.7 and up.
+Emacs 21.1 and up.
 
 @item
-XEmacs 21.1 and up.
+XEmacs 21.4 and up.
 
 @end itemize
 
@@ -24648,8 +24753,7 @@ Wes Hardaker---@file{gnus-picon.el} and the manual section on
 Kim-Minh Kaplan---further work on the picon code.
 
 @item
-Brad Miller---@file{gnus-gl.el} and the GroupLens manual section
-(@pxref{GroupLens}).
+Brad Miller---@file{gnus-gl.el} and the GroupLens manual section.
 
 @item
 Sudish Joseph---innumerable bug fixes.
@@ -24690,7 +24794,7 @@ David Moore---rewrite of @file{nnvirtual.el} and many other things.
 Kevin Davidson---came up with the name @dfn{ding}, so blame him.
 
 @item
-François Pinard---many, many interesting and thorough bug reports, as
+Fran@,{c}ois Pinard---many, many interesting and thorough bug reports, as
 well as autoconf support.
 
 @end itemize
@@ -24707,7 +24811,7 @@ Kevin Greiner,
 Jesper Harder,
 Paul Jarc,
 Simon Josefsson,
-David Kågedal,
+David K@aa{}gedal,
 Richard Pieri,
 Fabrice Popineau,
 Daniel Quinlan,
@@ -24797,7 +24901,7 @@ Gunnar Horrigmo,
 Richard Hoskins,
 Brad Howes,
 Miguel de Icaza,
-François Felix Ingrand,
+Fran@,{c}ois Felix Ingrand,
 Tatsuya Ichikawa, @c Ichikawa
 Ishikawa Ichiro, @c Ishikawa
 Lee Iverson,
@@ -24937,6 +25041,7 @@ actually are people who are using Gnus.  Who'd'a thunk it!
 * Quassia Gnus::                Two times two is four, or Gnus 5.6/5.7.
 * Pterodactyl Gnus::            Pentad also starts with P, AKA Gnus 5.8/5.9.
 * Oort Gnus::                   It's big.  It's far out.  Gnus 5.10.
+* No Gnus::                     Lars, FIXME!
 @end menu
 
 These lists are, of course, just @emph{short} overviews of the
@@ -25096,7 +25201,7 @@ Partial thread regeneration now happens when articles are
 referred.
 
 @item
-Gnus can make use of GroupLens predictions (@pxref{GroupLens}).
+Gnus can make use of GroupLens predictions.
 
 @item
 Picons (personal icons) can be displayed under XEmacs (@pxref{Picons}).
@@ -26213,6 +26318,15 @@ used when forwarding signed or encrypted messages, as the conversion
 invalidate the digital signature.
 @end itemize
 
+@node No Gnus
+@subsubsection No Gnus
+@cindex No Gnus
+
+New features in No Gnus:
+@c FIXME: Gnus 5.12?
+
+@include gnus-news.texi
+
 @iftex
 
 @page
@@ -26648,6 +26762,10 @@ Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
 @code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
 summary buffer faster.
 
+Gnus uses the internal ELisp-based @code{uncompface} program for
+decoding an @code{X-Face} header normally in Emacs.  If you feel it is
+slow, set @code{uncompface-use-external} to @code{t}.  @xref{X-Face}.
+
 
 @page
 @node Troubleshooting
index 0ddecd6..955e240 100644 (file)
@@ -1,7 +1,7 @@
 %% include file for the Gnus refcard and booklet
 
 \def\progver{5.10}\def\refver{5.10-1} % program and refcard versions
-\def\date{Oct, 2003}
+\def\date{Jan, 2004}
 \def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$}
 
 %%
@@ -37,7 +37,7 @@
     Copyright \copyright\ 1995 Vladimir Alexiev
     $<$vladimir@cs.ualberta.ca$>$.\\*
     Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\*
-    Copyright \copyright\ 2001, 2002, 2003 \author.\\*
+    Copyright \copyright\ 2001, 2002, 2003, 2004 \author.\\*
     Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
     Ingebrigtsen.\\*
     and the Emacs Help Bindings feature (C-h b).\\*
       /o   & Insert all {\bf old} articles. [Prefix: how many]\\
       /N   & Insert all {\bf new} articles.\\
       /p   & Limit to articles {\bf predicated} in the `display' group parameter.\\
+      /r   & Limit to {\bf replied} articles. [Prefix: unreplied]\\
     \end{keys}
     }
   }
index 6e5705a..3425b27 100644 (file)
   (let ((dest-directory default-directory)
        (max-lisp-eval-depth (max max-lisp-eval-depth 600))
        coding-system)
+    ;; Emacs 21.3 doesn't support @documentencoding
+    (unless (get 'documentencoding 'texinfo-format)
+      (put 'documentencoding 'texinfo-format 
+          'texinfo-discard-line-with-args))
     (find-file file)
     (setq buffer-read-only nil)
     (setq coding-system buffer-file-coding-system)
index af78f63..ce33954 100644 (file)
@@ -96,8 +96,8 @@ manual.
 @node Interface
 @chapter Interface
 
-When a program (or a person) wants to respond to a message -- reply,
-follow up, forward, cancel -- the program (or person) should just put
+When a program (or a person) wants to respond to a message---reply,
+follow up, forward, cancel---the program (or person) should just put
 point in the buffer where the message is and call the required command.
 @code{Message} will then pop up a new @code{message} mode buffer with
 appropriate headers filled out, and the user can edit the message before
@@ -827,9 +827,10 @@ automatically add the @code{Content-Type} and
 @code{Content-Transfer-Encoding} headers.
 
 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.
+@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.  If your Emacs supports drag
+and drop, you can also drop the file in the Message buffer.
 
 You can also create arbitrarily complex multiparts using the @acronym{MML}
 language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
@@ -1271,7 +1272,7 @@ installed.
 @section Message Headers
 
 Message is quite aggressive on the message generation front.  It has to
-be -- it's a combined news and mail agent.  To be able to send combined
+be---it's a combined news and mail agent.  To be able to send combined
 messages, it has to generate all headers itself (instead of letting the
 mail/news system do it) to ensure that mail and news copies of messages
 look sufficiently similar.
@@ -1310,7 +1311,7 @@ values:
 
 @table @code
 @item nil
-Just the address -- @samp{king@@grassland.com}.
+Just the address---@samp{king@@grassland.com}.
 
 @item parens
 @samp{king@@grassland.com (Elvis Parsley)}.
@@ -1986,7 +1987,7 @@ message is a message of type @var{type}.
 
 @item function
 A function to be called if @var{predicate} returns non-@code{nil}.
-@var{function} is called with one parameter -- the prefix.
+@var{function} is called with one parameter---the prefix.
 @end table
 
 @lisp
index 72329a4..f8909a7 100644 (file)
@@ -13,7 +13,7 @@
 @ifinfo
 This file describes the PGG.
 
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 2003, 2004 Free Software Foundation, Inc.
 Copyright (C) 2001 Daiki Ueno.
 
 Permission is granted to copy, distribute and/or modify this document
@@ -141,8 +141,9 @@ would be asked about the recipients.
 If encryption is successful, it replaces the current region contents (in
 the accessible portion) with the resulting data.
 
-If optional argument @var{sign} is non-nil, the function is request to
-do a combined sign and encrypt.  This currently only work with GnuPG.
+If optional argument @var{sign} is non-@code{nil}, the function is
+request to do a combined sign and encrypt.  This currently only work
+with GnuPG.
 @end deffn
 
 @deffn Command pgg-decrypt-region start end
@@ -209,8 +210,8 @@ The value can be @code{gpg}, @code{pgp}, and @code{pgp5}.
 @node Caching passphrase
 @section Caching passphrase
 
-PGG provides a simple passphrase caching mechanism.  If you want to
-arrange the interaction, set the variable @code{pgg-read-passphrase}.
+PGG uses a simple passphrase caching mechanism, which is enabled by
+default.
 
 @defvar pgg-cache-passphrase
 If non-@code{nil}, store passphrases.  The default value of this
@@ -307,9 +308,9 @@ keyrings.
 
 @deffn Method pgg-scheme-encrypt-region scheme start end recipients &optional sign
 Encrypt the current region between @var{start} and @var{end} for
-@var{recipients}.  If @var{sign} is non-nil, do a combined sign and
-encrypt.  If encryption is successful, it returns @code{t}, otherwise
-@code{nil}.
+@var{recipients}.  If @var{sign} is non-@code{nil}, do a combined sign
+and encrypt.  If encryption is successful, it returns @code{t},
+otherwise @code{nil}.
 @end deffn
 
 @deffn Method pgg-scheme-decrypt-region scheme start end
diff --git a/texi/sasl.texi b/texi/sasl.texi
new file mode 100644 (file)
index 0000000..8d73326
--- /dev/null
@@ -0,0 +1,265 @@
+\input texinfo                  @c -*-texinfo-*-
+
+@setfilename sasl.info
+
+@set VERSION 0.2
+
+@dircategory Emacs
+@direntry
+* SASL: (sasl).   The Emacs SASL library.
+@end direntry
+
+@settitle Emacs SASL Library @value{VERSION}
+
+@ifinfo
+This file describes the Emacs SASL library.
+
+Copyright (C) 2000 Daiki Ueno.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+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".
+@end ifinfo
+
+@tex
+
+@titlepage
+@title Emacs SASL Library
+
+@author by Daiki Ueno
+@page
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 2000 Daiki Ueno.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+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".
+@end titlepage
+@page
+
+@end tex
+
+@node Top
+@top Emacs SASL
+This manual describes the Emacs SASL library.
+
+A common interface to share several authentication mechanisms between
+applications using different protocols.
+
+@menu
+* Overview::                    What Emacs SASL library is.
+* How to use::                  Adding authentication support to your applications.
+* Data types::                  
+* Backend drivers::             Writing your own drivers.
+* Index::                       
+* Function Index::              
+* Variable Index::              
+@end menu
+
+@node Overview
+@chapter Overview
+
+@sc{sasl} is short for @dfn{Simple Authentication and Security Layer}.
+This standard is documented in RFC2222.  It provides a simple method for
+adding authentication support to various application protocols.
+
+The toplevel interface of this library is inspired by Java @sc{sasl}
+Application Program Interface.  It defines an abstraction over a series
+of authentication mechanism drivers (@ref{Backend drivers}).
+
+Backend drivers are designed to be close as possible to the
+authentication mechanism.  You can access the additional configuration
+information anywhere from the implementation.
+
+@node How to use
+@chapter How to use
+
+(Not yet written).
+
+To use Emacs SASL library, please evaluate following expression at the
+beginning of your application program.
+
+@lisp
+(require 'sasl)
+@end lisp
+
+If you want to check existence of sasl.el at runtime, instead you
+can list autoload settings for functions you want.
+
+@node Data types
+@chapter Data types
+
+There are three data types to be used for carrying a negotiated
+security layer---a mechanism, a client parameter and an authentication
+step.
+
+@menu
+* Mechanisms::                  
+* Clients::                     
+* Steps::                       
+@end menu
+
+@node Mechanisms
+@section Mechanisms
+
+A mechanism (@code{sasl-mechanism} object) is a schema of the @sc{sasl}
+authentication mechanism driver.
+
+@defvar sasl-mechanisms
+A list of mechanism names.
+@end defvar
+
+@defun sasl-find-mechanism mechanisms
+
+Retrieve an apropriate mechanism.
+This function compares @var{mechanisms} and @code{sasl-mechanisms} then
+returns apropriate @code{sasl-mechanism} object.
+
+@example
+(let ((sasl-mechanisms '("CRAM-MD5" "DIGEST-MD5")))
+  (setq mechanism (sasl-find-mechanism server-supported-mechanisms)))
+@end example
+
+@end defun
+
+@defun sasl-mechanism-name mechanism
+Return name of mechanism, a string.
+@end defun
+
+If you want to write an authentication mechanism driver (@ref{Backend
+drivers}), use @code{sasl-make-mechanism} and modify
+@code{sasl-mechanisms} and @code{sasl-mechanism-alist} correctly.
+
+@defun sasl-make-mechanism name steps
+Allocate a @code{sasl-mechanism} object.
+This function takes two parameters---name of the mechanism, and a list
+of authentication functions.
+
+@example
+(defconst sasl-anonymous-steps
+  '(identity                           ;no initial response
+    sasl-anonymous-response))
+
+(put 'sasl-anonymous 'sasl-mechanism
+     (sasl-make-mechanism "ANONYMOUS" sasl-anonymous-steps))
+@end example
+
+@end defun
+
+@node Clients
+@section Clients
+
+A client (@code{sasl-client} object) initialized with four
+parameters---a mechanism, a user name, name of the service and name of
+the server.
+
+@defun sasl-make-client mechanism name service server
+Prepare a @code{sasl-client} object.
+@end defun
+
+@defun sasl-client-mechanism client
+Return the mechanism (@code{sasl-mechanism} object) of client.
+@end defun
+
+@defun sasl-client-name client
+Return the authorization name of client, a string.
+@end defun
+
+@defun sasl-client-service client
+Return the service name of client, a string.
+@end defun
+
+@defun sasl-client-server client
+Return the server name of client, a string.
+@end defun
+
+If you want to specify additional configuration properties, please use
+@code{sasl-client-set-property}.
+
+@defun sasl-client-set-property client property value
+Add the given property/value to client.
+@end defun
+
+@defun sasl-client-property client property
+Return the value of the property of client.
+@end defun
+
+@defun sasl-client-set-properties client plist
+Destructively set the properties of client.
+The second argument is the new property list.
+@end defun
+
+@defun sasl-client-properties client
+Return the whole property list of client configuration.
+@end defun
+
+@node Steps
+@section Steps
+
+A step (@code{sasl-step} object) is an abstraction of authentication
+``step'' which holds the response value and the next entry point for the
+authentication process (the latter is not accessible).
+
+@defun sasl-step-data step
+Return the data which @var{step} holds, a string.
+@end defun
+
+@defun sasl-step-set-data step data
+Store @var{data} string to @var{step}.
+@end defun
+
+To get the initial response, you should call the function
+@code{sasl-next-step} with the second argument @code{nil}.
+
+@example
+(setq name (sasl-mechanism-name mechanism))
+@end example
+
+At this point we could send the command which starts a SASL
+authentication protocol exchange.  For example,
+
+@example
+(process-send-string
+ process
+ (if (sasl-step-data step)             ;initial response
+     (format "AUTH %s %s\r\n" name (base64-encode-string (sasl-step-data step) t))
+   (format "AUTH %s\r\n" name)))
+@end example
+
+To go on with the authentication process, all you have to do is call
+@code{sasl-next-step} consecutively.
+
+@defun sasl-next-step client step
+Perform the authentication step.
+At the first time @var{step} should be set to @code{nil}.
+@end defun
+
+@node Backend drivers
+@chapter Backend drivers
+
+(Not yet written).
+
+@node Index
+@chapter Index
+@printindex cp
+
+@node Function Index
+@chapter Function Index
+@printindex fn
+
+@node Variable Index
+@chapter Variable Index
+@printindex vr
+
+@summarycontents
+@contents
+@bye
+
+@c End:
index 6bfcf2f..26077ca 100644 (file)
@@ -297,7 +297,7 @@ Sets the default port to use, the suggested port number is @code{2000}.
 
 @item sieve-manage-log
 @vindex sieve-manage-log
-If non-nil, should be a string naming a buffer where a protocol trace
+If non-@code{nil}, should be a string naming a buffer where a protocol trace
 is dumped (for debugging purposes).
 
 @end table
@@ -333,7 +333,8 @@ List scripts on the server.
 
 @item sieve-manage-havespace
 @findex sieve-manage-havespace
-Returns non-nil iff server have roam for a script of given size.
+Returns non-@code{nil} iff server have roam for a script of given
+size.
 
 @item sieve-manage-getscript
 @findex sieve-manage-getscript
index 93923c6..b07b76d 100644 (file)
@@ -1,5 +1,5 @@
 ;;; texi2latex.el --- convert a texi file into a LaTeX file.
-;; Copyright (C) 1996 Lars Magne Ingebrigtsen
+;; Copyright (C) 1996, 2004 Lars Magne Ingebrigtsen
 
 (require 'cl)
 
@@ -39,7 +39,9 @@
   (latexi-translate-file "message" t)
   (latexi-translate-file "emacs-mime" t)
   (latexi-translate-file "sieve" t)
-  (latexi-translate-file "pgg" t))
+  (latexi-translate-file "pgg" t)
+  (latexi-translate-file "sasl" t)
+  (latexi-translate-file "gnus-news" t))
 
 (defun latexi-translate-file (file &optional as-a-chapter)
   "Translate file a LaTeX file."
     (insert-buffer-substring cur)
     (goto-char (point-min))
     (latexi-strip-line)
+    (latexi-translate-string "@'e" "\\'{e}")
+    (latexi-translate-string "@`a" "\\`{a}")
+    (latexi-translate-string "@,{c}" "\\c{c}")
+    (latexi-translate-string "@aa{}" "{\\aa}")
+    (latexi-translate-string "@\"{@dotless{i}}" "ï")
     (latexi-translate-string "%@{" "\\gnuspercent{}\\gnusbraceleft{}")
     (latexi-translate-string "%@}" "\\gnuspercent{}\\gnusbraceright{}")
     (latexi-translate-string "%1@{" "\\gnuspercent{}1\\gnusbraceright{}")
                                  "summarycontents" "bye"
                                  "top" "iftex" "cartouche" 
                                  "iflatex" "finalout" "vskip"
-                                 "dircategory" "group" "syncodeindex"))
+                                 "dircategory" "group" "syncodeindex"
+                                 "documentencoding"))
                (latexi-strip-line))
               ((member command '("menu" "tex" "ifinfo" "ignore" 
                                  "ifnottex" "direntry"))
                (latexi-begin-command "verse"))
               ((equal command "page")
                (latexi-strip-line)
-               (insert (format "\\newpage\n" arg)))
+               (insert "\\newpage\n"))
               ((equal command "'s")
                (goto-char (match-beginning 0))
                (delete-char 1))