Synch with Oort Gnus.
[elisp/gnus.git-] / texi / gnus.texi
index 8ef8267..b927a84 100644 (file)
@@ -1,4 +1,4 @@
-\input texinfo                  @c -*-texinfo-*-  -*- coding: iso-latin-1 -*-
+\input texinfo
 
 @setfilename gnus
 @settitle T-gnus 6.15 Manual
 
 \ifx\pdfoutput\undefined
 \else
-\usepackage[pdftex,bookmarks]{hyperref}
+\usepackage[pdftex,bookmarks,colorlinks=true]{hyperref}
+\usepackage{thumbpdf}
 \pdfcompresslevel=9
 \fi
 
 \makeindex
 \begin{document}
 
-\newcommand{\gnusversionname}{Oort Gnus v.}
+\newcommand{\gnusversionname}{Oort Gnus v0.07}
 \newcommand{\gnuschaptername}{}
 \newcommand{\gnussectionname}{}
 
 
 \thispagestyle{empty}
 
-Copyright \copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Copyright \copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
 Free Software Foundation, Inc.
 
 
@@ -315,7 +316,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 
+Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
         Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
@@ -345,7 +346,7 @@ license to the document, as described in section 6 of the license.
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
         Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
@@ -381,9 +382,9 @@ can be gotten by any nefarious means you can think of---@sc{nntp}, local
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-T-gnus provides MIME features based on SEMI API.  So T-gnus supports
-your right to read strange messages including big images or other
-various kinds of formats.  T-gnus also supports
+T-gnus provides @sc{mime} features based on @sc{semi} API.  So T-gnus
+supports your right to read strange messages including big images or
+other various kinds of formats.  T-gnus also supports
 internationalization/localization and multiscript features based on MULE
 API.  So T-gnus does not discriminate various language communities.
 Oh, if you are a Klingon, please wait Unicode Next Generation.
@@ -484,8 +485,8 @@ Group Buffer Format
 
 Group Topics
 
-* Topic Variables::             How to customize the topics the Lisp Way.
 * Topic Commands::              Interactive E-Z commands.
+* Topic Variables::             How to customize the topics the Lisp Way.
 * Topic Sorting::               Sorting each topic individually.
 * Topic Topology::              A map of the world.
 * Topic Parameters::            Parameters that apply to all groups in a topic.
@@ -496,6 +497,7 @@ Misc Group Stuff
 * Group Information::           Information and help on groups and Gnus.
 * Group Timestamp::             Making Gnus keep track of when you last read a group.
 * File Commands::               Reading and writing the Gnus files.
+* Sieve Commands::              Managing Sieve scripts.
 
 Summary Buffer
 
@@ -599,8 +601,10 @@ Article Treatment
 * Article Fontisizing::         Making emphasized text look nice.
 * Article Hiding::              You also want to make certain info go away.
 * Article Washing::             Lots of way-neat functions to make life better.
+* Article Header::              Doing various header transformations.
 * Article Buttons::             Click on URLs, Message-IDs, addresses and the like.
 * Article Date::                Grumble, UT!
+* Article Display::             Display various stuff---X-Face, Picons, Smileys
 * Article Signature::           What is a signature?
 * Article Miscellania::         Various other stuff.
 
@@ -627,13 +631,13 @@ Article Buffer
 Composing Messages
 
 * Mail::                        Mailing and replying.
-* Posting Server::              What server should you post via?
+* Posting Server::              What server should you post and mail via?
 * 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.
 * Drafts::                      Postponing messages and rejected messages.
 * Rejected Articles::           What happens if the server doesn't like your article?
-* Using GPG::                   How to use GPG and MML to sign and encrypt messages
+* Signing and encrypting::      How to compose secure messages.
 
 Select Methods
 
@@ -682,7 +686,6 @@ Getting Mail
 * Duplicates::                  Dealing with duplicated mail.
 * Not Reading Mail::            Using mail back ends for reading other files.
 * Choosing a Mail Back End::    Gnus can read a variety of mail formats.
-* Archiving Mail::              How to backup your mail.
 
 Mail Sources
 
@@ -701,6 +704,7 @@ Choosing a Mail Back End
 
 Browsing the Web
 
+* Archiving Mail::              
 * Web Searches::                Creating groups from articles that match a string.
 * Slashdot::                    Reading the Slashdot comments.
 * Ultimate::                    The Ultimate Bulletin Board systems.
@@ -810,8 +814,9 @@ Various
 * Daemons::                     Gnus can do things behind your back.
 * NoCeM::                       How to avoid spam and other fatty foods.
 * Undo::                        Some actions can be undone.
+* Predicate Specifiers::        Specifying predicates.
 * Moderation::                  What to do if you're a moderator.
-* XEmacs Enhancements::         There are more pictures and stuff under XEmacs.
+* Image Enhancements::          Modern versions of Emacs/XEmacs can display images.
 * Fuzzy Matching::              What's the big fuzz?
 * Thwarting Email Spam::        A how-to on avoiding unsolicited commercial email.
 * Various Various::             Things that are really various.
@@ -827,10 +832,11 @@ Formatting Variables
 * Tabulation::                  Tabulating your output.
 * Wide Characters::             Dealing with wide characters.
 
-XEmacs Enhancements
+Image Enhancements
 
-* Picons::                      How to display pictures of what your reading.
+* Picons::                      How to display pictures of what you're reading.
 * Smileys::                     Show all those happy faces the way they were meant to be shown.
+* X-Face::                      Display a funky, teensy black-and-white image.
 * Toolbar::                     Click'n'drool.
 * XVarious::                    Other XEmacsy Gnusey variables.
 
@@ -842,8 +848,15 @@ Picons
 * Hard Picons::                 The way you should do it.  You'll learn something.
 * Picon Useless Configuration::  Other variables you can trash/tweak/munge/play with.
 
+Thwarting Email Spam
+
+* Anti-Spam Basics::            Simple steps to reduce the amount of spam.
+* SpamAssassin::                How to use external anti-spam tools.
+* Hashcash::                    Reduce spam by burning CPU time.
+
 Appendices
 
+* XEmacs::                      Requirements for installing under XEmacs.
 * History::                     How Gnus got where it is today.
 * On Writing Manuals::          Why this is not a beginner's guide.
 * Terminology::                 We use really difficult, like, words here.
@@ -851,6 +864,7 @@ Appendices
 * Troubleshooting::             What you might try if things do not work.
 * Gnus Reference Guide::        Rilly, rilly technical stuff.
 * Emacs for Heathens::          A short introduction to Emacsian terms.
+* Frequently Asked Questions::
 
 History
 
@@ -893,8 +907,8 @@ Gnus Reference Guide
 
 Back End Interface
 
-* Required Back End Functions:: Functions that must be implemented.
-* Optional Back End Functions:: Functions that need not be implemented.
+* Required Back End Functions::  Functions that must be implemented.
+* Optional Back End Functions::  Functions that need not be implemented.
 * Error Messaging::             How to get messages and report errors.
 * Writing New Back Ends::       Extending old back ends.
 * Hooking New Back Ends Into Gnus::  What has to be done on the Gnus end.
@@ -1116,6 +1130,11 @@ they were created, so the latest changes will have precedence.)
 Information from the slave files has, of course, precedence over the
 information in the normal (i.e., master) @code{.newsrc} file.
 
+If the @code{.newsrc*} files have not been saved in the master when the
+slave starts, you may be prompted as to whether to read an auto-save
+file.  If you answer "yes", the unsaved changes to the master will be
+incorporated into the slave.  If you answer "no", the slave may see some
+messages as unread that have been read in the master.
 
 @node Fetching a Group
 @section Fetching a Group
@@ -1304,8 +1323,9 @@ thought it would be nice to have two of these.  This variable is more
 meant for setting some ground rules, while the other variable is used
 more for user fiddling.  By default this variable makes all new groups
 that come from mail back ends (@code{nnml}, @code{nnbabyl},
-@code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed.  If you
-don't like that, just set this variable to @code{nil}.
+@code{nnfolder}, @code{nnmbox}, @code{nnmh}, and @code{nnmaildir})
+subscribed.  If you don't like that, just set this variable to
+@code{nil}.
 
 New groups that match this regexp are subscribed using
 @code{gnus-subscribe-options-newsgroup-method}.
@@ -1356,9 +1376,18 @@ and read ranges have become worthless.  You can use the @kbd{M-x
 gnus-group-clear-data-on-native-groups} command to clear out all data
 that you have on your native groups.  Use with caution.
 
+@kindex M-x gnus-group-clear-data
+@findex gnus-group-clear-data
+Clear the data from the current group only---nix out marks and the
+list of read articles (@code{gnus-group-clear-data}).
+
 After changing servers, you @strong{must} move the cache hierarchy away,
 since the cached articles will have wrong article numbers, which will
 affect which articles Gnus thinks are read.
+@code{gnus-group-clear-data-on-native-groups} will ask you if you want
+to have it done automatically; for @code{gnus-group-clear-data}, you
+can use @kbd{M-x gnus-cache-move-cache} (but beware, it will move the
+cache for all groups).
 
 
 @node Startup Files
@@ -1708,10 +1737,10 @@ a @code{printf} specifications, for those of you who use (feh!) C.
 @samp{%M%S%5y: %(%g%)\n} is the value that produced those lines above.
 
 There should always be a colon on the line; the cursor always moves to
-the colon after performing an operation.  Nothing else is required---not
-even the group name.  All displayed text is just window dressing, and is
-never examined by gnus.  Gnus stores all real information it needs using
-text properties.
+the colon after performing an operation.  @xref{Positioning
+Point}. Nothing else is required---not even the group name.  All
+displayed text is just window dressing, and is never examined by Gnus.
+Gnus stores all real information it needs using text properties.
 
 (Note that if you make a really strange, wonderful, spreadsheet-like
 layout, everybody will believe you are hard at work with the accounting
@@ -1746,13 +1775,13 @@ Number of read articles.
 Estimated total number of articles.  (This is really @var{max-number}
 minus @var{min-number} plus 1.)
 
-Gnus uses this estimation because the NNTP protocol provides efficient
-access to @var{max-number} and @var{min-number} but getting the true
-unread message count is not possible efficiently.  For hysterical
-raisins, even the mail back ends, where the true number of unread
-messages might be available efficiently, use the same limited
-interface.  To remove this restriction from Gnus means that the
-back end interface has to be changed, which is not an easy job.  If you
+Gnus uses this estimation because the @sc{nntp} protocol provides
+efficient access to @var{max-number} and @var{min-number} but getting
+the true unread message count is not possible efficiently.  For
+hysterical raisins, even the mail back ends, where the true number of
+unread messages might be available efficiently, use the same limited
+interface.  To remove this restriction from Gnus means that the back
+end interface has to be changed, which is not an easy job.  If you
 want to work on this, please contact the Gnus mailing list.
 
 @item y
@@ -1767,6 +1796,10 @@ Full group name.
 @item G
 Group name.
 
+@item C
+Group comment (@pxref{Group Parameters}) or group name if there is no
+comment element in the group parameters.
+
 @item D
 Newsgroup description.
 
@@ -1860,15 +1893,15 @@ background is dark:
 (cond (window-system
        (setq custom-background-mode 'light)
        (defface my-group-face-1
-        '((t (:foreground "Red" :bold t))) "First group face")
+         '((t (:foreground "Red" :bold t))) "First group face")
        (defface my-group-face-2
-        '((t (:foreground "DarkSeaGreen4" :bold t))) "Second group face")
+         '((t (:foreground "DarkSeaGreen4" :bold t))) "Second group face")
        (defface my-group-face-3
-        '((t (:foreground "Green4" :bold t))) "Third group face")
+         '((t (:foreground "Green4" :bold t))) "Third group face")
        (defface my-group-face-4
-        '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
+         '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
        (defface my-group-face-5
-        '((t (:foreground "Blue" :bold t))) "Fifth group face")))
+         '((t (:foreground "Blue" :bold t))) "Fifth group face")))
 
 (setq gnus-group-highlight
       '(((> unread 200) . my-group-face-1)
@@ -2048,8 +2081,8 @@ This is yet one more command that does the same as the @kbd{RET}
 command, but this one does it without expunging and hiding dormants
 (@code{gnus-group-visible-select-group}).
 
-@item M-C-RET
-@kindex M-C-RET (Group)
+@item C-M-RET
+@kindex C-M-RET (Group)
 @findex gnus-group-select-group-ephemerally
 Finally, this command selects the current group ephemerally without
 doing any processing of its contents
@@ -2071,44 +2104,40 @@ be fetched.
 
 @vindex gnus-select-group-hook
 @vindex gnus-auto-select-first
-@code{gnus-auto-select-first} control whether any articles are selected
+If @code{gnus-auto-select-first} is non-@code{nil}, select an article
 automatically when entering a group with the @kbd{SPACE} command.
+Which article this is is controlled by the
+@code{gnus-auto-select-subject} variable.  Valid values for this
+variable is:
 
 @table @code
 
-@item nil
-Don't select any articles when entering the group.  Just display the
-full summary buffer.
-
-@item t
-Select the first unread article when entering the group.
-
-@item best
-Select the highest scored article in the group when entering the
-group.
+@item unread
+Place point on the subject line of the first unread article.
 
-@end table
+@item first
+Place point on the subject line of the first article.
 
-This variable can also be a function.  In that case, that function will
-be called to place point on a subject line, and/or select some article.
-Useful functions include:
+@item unseen
+Place point on the subject line of the first unseen article.
 
-@table @code
-@item gnus-summary-first-unread-subject
-Place point on the subject line of the first unread article, but
-don't select the article.
+@item unseen-or-unread
+Place point on the subject line of the first unseen article, and if
+there is no such article, place point on the subject line of the first
+unread article.
 
-@item gnus-summary-first-unread-article
-Select the first unread article.
+@item best
+Place point on the subject line of the highest-scored unread article.
 
-@item gnus-summary-best-unread-article
-Select the highest-scored unread article.
 @end table
 
+This variable can also be a function.  In that case, that function
+will be called to place point on a subject line.  
 
 If you want to prevent automatic selection in some group (say, in a
-binary group with Huge articles) you can set this variable to @code{nil}
-in @code{gnus-select-group-hook}, which is called when a group is
+binary group with Huge articles) you can set the
+@code{gnus-auto-select-first} variable to @code{nil} in
+@code{gnus-select-group-hook}, which is called when a group is
 selected.
 
 
@@ -2547,20 +2576,19 @@ Create one of the groups mentioned in @code{gnus-useful-groups}
 @item G w
 @kindex G w (Group)
 @findex gnus-group-make-web-group
-@cindex DejaNews
-@cindex Alta Vista
-@cindex InReference
+@cindex Google
 @cindex nnweb
+@cindex gmane
 Make an ephemeral group based on a web search
 (@code{gnus-group-make-web-group}).  If you give a prefix to this
 command, make a solid group instead.  You will be prompted for the
 search engine type and the search string.  Valid search engine types
-include @code{dejanews}, @code{altavista} and @code{reference}.
+include @code{google}, @code{dejanews}, and @code{gmane}.
 @xref{Web Searches}.
 
-If you use the @code{dejanews} search engine, you can limit the search
+If you use the @code{google} search engine, you can limit the search
 to a particular group by using a match string like
-@samp{~g alt.sysadmin.recovery shaving}.
+@samp{shaving group:alt.sysadmin.recovery}.
 
 @item G DEL
 @kindex G DEL (Group)
@@ -2672,6 +2700,19 @@ entering summary buffer.
 
 See also @code{gnus-parameter-to-list-alist}.
 
+@anchor{subscribed}
+@item subscribed
+@cindex subscribed
+If this parameter is set to @code{t}, Gnus will consider the
+to-address and to-list parameters for this group as addresses of
+mailing lists you are subscribed to.  Giving Gnus this information is
+(only) a first step in getting it to generate correct Mail-Followup-To
+headers for your posts to these lists.  Look here @pxref{(message)Mailing
+Lists} for a complete treatment of available MFT support.
+
+See also @code{gnus-find-subscribed-addresses}, the function that
+directly uses this group parameter.
+
 @item visible
 @cindex visible
 If the group parameter list has the element @code{(visible . t)},
@@ -2706,8 +2747,10 @@ composed messages will be @code{Gcc}'d to the current group.  If
 generated, if @code{(gcc-self . "string")} is present, this string will
 be inserted literally as a @code{gcc} header.  This parameter takes
 precedence over any default @code{Gcc} rules as described later
-(@pxref{Archived Messages}).
-
+(@pxref{Archived Messages}).  CAVEAT:: It yields an error putting
+@code{(gcc-self . t)} in groups of a @code{nntp} server or so, because
+a @code{nntp} server doesn't accept artciles.
 @item auto-expire
 @cindex auto-expire
 If the group parameter has an element that looks like @code{(auto-expire
@@ -2763,6 +2806,10 @@ display on entering the group.  Valid values are:
 @item all
 Display all articles, both read and unread.
 
+@item an integer
+Display the last INTEGER articles in the group.  This is the same as
+entering the group with C-u INTEGER.
+
 @item default
 Display the default visible articles, which normally includes unread and
 ticked articles.
@@ -2773,8 +2820,8 @@ Display articles that satisfy a predicate.
 Here are some examples:
 
 @table @code
-@item [read]
-Display only read articles.
+@item [unread]
+Display only unread articles.
 
 @item [not expire]
 Display everything except expirable articles.
@@ -2786,9 +2833,9 @@ responded to.
 
 The available operators are @code{not}, @code{and} and @code{or}.
 Predicates include @code{tick}, @code{unsend}, @code{undownload},
-@code{read}, @code{dormant}, @code{expire}, @code{reply},
+@code{unread}, @code{dormant}, @code{expire}, @code{reply},
 @code{killed}, @code{bookmark}, @code{score}, @code{save},
-@code{cache}, @code{forward}, @code{seen} and @code{recent}.
+@code{cache}, @code{forward}, @code{unseen} and @code{recent}.
 
 @end table
 
@@ -2798,10 +2845,9 @@ command (@pxref{Limiting}).
 
 @item comment
 @cindex comment
-Elements that look like @code{(comment . "This is a comment")}
-are arbitrary comments on the group.  They are currently ignored by
-gnus, but provide a place for you to store information on particular
-groups.
+Elements that look like @code{(comment . "This is a comment")} are
+arbitrary comments on the group.  You can display comments in the
+group line (@pxref{Group Line Specification}).
 
 @item charset
 @cindex charset
@@ -2850,6 +2896,27 @@ that matches the regular expression "regex" to be stripped. Instead of
 last signature or any of the elements of the alist
 @code{gnus-article-banner-alist}.
 
+@item sieve
+@cindex sieve
+This parameter contains a Sieve test that should match incoming mail
+that should be placed in this group.  From this group parameter, a
+Sieve @samp{IF} control structure is generated, having the test as the
+condition and @samp{fileinto "group.name";} as the body.
+
+For example, if the INBOX.list.sieve group has the @code{(sieve
+address "sender" "sieve-admin@@extundo.com")} group parameter, when
+translating the group parameter into a Sieve script (@pxref{Sieve
+Commands}) the following Sieve code is generated:
+
+@example
+if address \"sender\" \"sieve-admin@@extundo.com\" @{
+        fileinto \"INBOX.list.sieve\";
+@}
+@end example
+
+The Sieve language is described in RFC 3028.  @xref{Top, , Top, sieve,
+Emacs Sieve}.
+
 @item (@var{variable} @var{form})
 You can use the group parameters to set variables local to the group you
 are entering.  If you want to turn threading off in @samp{news.answers},
@@ -2858,6 +2925,16 @@ that group.  @code{gnus-show-threads} will be made into a local variable
 in the summary buffer you enter, and the form @code{nil} will be
 @code{eval}ed there.
 
+@vindex gnus-list-identifiers
+A use for this feature, is to remove a mailing list identifier tag in
+the subject fields of articles.   E.g. if the news group
+@samp{nntp+news.gnus.org:gmane.text.docbook.apps} has the tag
+@samp{DOC-BOOK-APPS:} in the subject of all articles, this tag can be
+removed from the article subjects in the summary buffer for the group by
+putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")} into the group
+parameters for the group.
+
+
 This can also be used as a group-specific hook function, if you'd like.
 If you want to hear a beep when you enter a group, you could put
 something like @code{(dummy-variable (ding))} in the parameters of that
@@ -3170,6 +3247,11 @@ Sort the groups by group rank
 Sort the groups alphabetically by back end name
 (@code{gnus-group-sort-selected-groups-by-method}).
 
+@item G P s
+@kindex G P s (Group)
+@findex gnus-group-sort-selected-groups
+Sort the groups according to @code{gnus-group-sort-function}.
+
 @end table
 
 And finally, note that you can use @kbd{C-k} and @kbd{C-y} to manually
@@ -3204,8 +3286,8 @@ process (if any) (@code{gnus-group-expire-articles}).  That is, delete
 all expirable articles in the group that have been around for a while.
 (@pxref{Expiring Mail}).
 
-@item C-c M-C-x
-@kindex C-c M-C-x (Group)
+@item C-c C-M-x
+@kindex C-c C-M-x (Group)
 @findex gnus-group-expire-all-groups
 Run all expirable articles in all groups through the expiry process
 (@code{gnus-group-expire-all-groups}).
@@ -3585,6 +3667,16 @@ Delete an empty topic (@code{gnus-topic-delete}).
 List all groups that gnus knows about in a topics-ified way
 (@code{gnus-topic-list-active}).
 
+@item T M-n
+@kindex T M-n (Topic)
+@findex gnus-topic-goto-next-topic
+Go to the next topic (@code{gnus-topic-goto-next-topic}).
+
+@item T M-p
+@kindex T M-p (Topic)
+@findex gnus-topic-goto-previous-topic
+Go to the next topic (@code{gnus-topic-goto-previous-topic}).
+
 @item G p
 @kindex G p (Topic)
 @findex gnus-topic-edit-parameters
@@ -3690,9 +3782,18 @@ Sort the current topic alphabetically by back end name
 Sort the current topic alphabetically by server name
 (@code{gnus-topic-sort-groups-by-server}).
 
+@item T S s
+@kindex T S s
+@findex gnus-topic-sort-groups
+Sort the current topic according to the function(s) given by the
+@code{gnus-group-sort-function} variable
+(@code{gnus-topic-sort-groups}).
+
 @end table
 
-@xref{Sorting Groups}, for more information about group sorting.
+When given a prefix argument, all these commands will sort in reverse
+order.  @xref{Sorting Groups}, for more information about group
+sorting.
 
 
 @node Topic Topology
@@ -3757,6 +3858,11 @@ When subscribing new groups by topic (@pxref{Subscription Methods}), the
 value should be a regexp to match the groups that should go in that
 topic.
 
+@item subscribe-level
+When subscribing new groups by topic (see the @code{subscribe} parameter),
+the group will be subscribed with the level specified in the 
+@code{subscribe-level} instead of @code{gnus-level-default-subscribed}.
+
 @end table
 
 Group parameters (of course) override topic parameters, and topic
@@ -3810,6 +3916,7 @@ happens.  You just have to be careful if you do stuff like that.
 * Group Information::           Information and help on groups and Gnus.
 * Group Timestamp::             Making Gnus keep track of when you last read a group.
 * File Commands::               Reading and writing the Gnus files.
+* Sieve Commands::              Managing Sieve scripts.
 @end menu
 
 @table @kbd
@@ -3823,13 +3930,33 @@ Enter the server buffer (@code{gnus-group-enter-server-mode}).
 @item a
 @kindex a (Group)
 @findex gnus-group-post-news
-Post an article to a group (@code{gnus-group-post-news}).  If given a
-prefix, the current group name will be used as the default.
+Start composing a message (a news by default)
+(@code{gnus-group-post-news}).  If given a prefix, post to the group
+under the point.  If the prefix is 1, prompt for a group to post to.
+Contrary to what the name of this function suggests, the prepared
+article might be a mail instead of a news, if a mail group is specified
+with the prefix argument.  @xref{Composing Messages}.
 
 @item m
 @kindex m (Group)
 @findex gnus-group-mail
-Mail a message somewhere (@code{gnus-group-mail}).
+Mail a message somewhere (@code{gnus-group-mail}).  If given a prefix,
+use the posting style of the group under the point.  If the prefix is 1,
+prompt for a group name to find the posting style.
+@xref{Composing Messages}.
+
+@item i
+@kindex i (Group)
+@findex gnus-group-news
+Start composing a news (@code{gnus-group-news}).  If given a prefix,
+post to the group under the point.  If the prefix is 1, prompt
+for group to post to.  @xref{Composing Messages}.
+
+This function actually prepares a news even when using mail groups.
+This is useful for "posting" messages to mail groups without actually
+sending them over the network: they're just saved directly to the group
+in question.  The corresponding back end must have a request-post method
+for this to work though.
 
 @end table
 
@@ -4038,6 +4165,20 @@ something like:
       "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
 @end lisp
 
+If you would like greater control of the time format, you can use a
+user-defined format spec.  Something like the following should do the
+trick: 
+
+@lisp
+(setq gnus-group-line-format
+      "%M\%S\%p\%P\%5y: %(%-40,40g%) %ud\n")
+(defun gnus-user-format-function-d (headers)
+  (let ((time (gnus-group-timestamp gnus-tmp-group)))
+    (if time
+        (format-time-string "%b %d  %H:%M" time)
+      "")))
+@end lisp
+            
 
 @node File Commands
 @subsection File Commands
@@ -4069,6 +4210,68 @@ file(s) whether Gnus thinks it is necessary or not.
 @end table
 
 
+@node Sieve Commands
+@subsection Sieve Commands
+@cindex group sieve commands
+
+Sieve is a server-side mail filtering language.  In Gnus you can use
+the @code{sieve} group parameter (@pxref{Group Parameters}) to specify
+sieve rules that should apply to each group.  Gnus provides two
+commands to translate all these group parameters into a proper Sieve
+script that can be transfered to the server somehow.
+
+@vindex gnus-sieve-file
+@vindex gnus-sieve-region-start
+@vindex gnus-sieve-region-end
+The generated Sieve script is placed in @code{gnus-sieve-file} (by
+default @file{~/.sieve}).  The Sieve code that Gnus generate is placed
+between two delimiters, @code{gnus-sieve-region-start} and
+@code{gnus-sieve-region-end}, so you may write additional Sieve code
+outside these delimiters that will not be removed the next time you
+regenerate the Sieve script.
+
+@vindex gnus-sieve-crosspost
+The variable @code{gnus-sieve-crosspost} controls how the Sieve script
+is generated.  If it is non-nil (the default) articles is placed in
+all groups that have matching rules, otherwise the article is only
+placed in the group with the first matching rule.  For example, the
+group parameter @samp{(sieve address "sender"
+"owner-ding@@hpc.uh.edu")} will generate the following piece of Sieve
+code if @code{gnus-sieve-crosspost} is nil. (When
+@code{gnus-sieve-crosspost} is non-nil, it looks the same except that
+the line containing the call to @code{stop} is removed.)
+
+@example
+if address "sender" "owner-ding@@hpc.uh.edu" @{
+        fileinto "INBOX.ding";
+        stop;
+@}
+@end example
+
+@xref{Top, ,Top, sieve, Emacs Sieve}.
+
+@table @kbd
+
+@item D g
+@kindex D g (Group)
+@findex gnus-sieve-generate
+@vindex gnus-sieve-file
+@cindex generating sieve script
+Regenerate a Sieve script from the @code{sieve} group parameters and
+put you into the @code{gnus-sieve-file} without saving it.
+
+@item D u
+@kindex D u (Group)
+@findex gnus-sieve-update
+@vindex gnus-sieve-file
+@cindex updating sieve script
+Regenerates the Gnus managed part of @code{gnus-sieve-file} using the
+@code{sieve} group parameters, save the file and upload it to the
+server using the @code{sieveshell} program.
+
+@end table
+
+
 @node Summary Buffer
 @chapter Summary Buffer
 @cindex summary buffer
@@ -4176,8 +4379,9 @@ the cursor always moves to the point position marker or the colon after
 performing an operation.  (Of course, Gnus wouldn't be Gnus if it wasn't
 possible to change this.  Just write a new function
 @code{gnus-goto-colon} which does whatever you like with the cursor.)
+@xref{Positioning Point}.
 
-The default string is @samp{%U%R%z%I%(%[%4L: %-23,23n%]%) %s\n}.
+The default string is @samp{%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n}.
 
 The following format specification characters and extended format
 specification(s) are understood:
@@ -4197,8 +4401,8 @@ Full @code{From} header.
 @item n
 The name (from the @code{From} header).
 @item f
-The name, code @code{To} header or the @code{Newsgroups} header
-(@pxref{To From Newsgroups}).
+The name, @code{To} header or the @code{Newsgroups} header (@pxref{To
+From Newsgroups}).
 @item a
 The name (from the @code{From} header).  This differs from the @code{n}
 spec in that it uses the function designated by the
@@ -4212,6 +4416,9 @@ Number of lines in the article.
 @item c
 Number of characters in the article. This specifier is not supported
 in some methods (like nnfolder).
+@item k
+Pretty-printed version of the number of characters in the article;
+for example, @samp{1.2k} or @samp{0.4M}.
 @item I
 Indentation based on thread level (@pxref{Customizing Threading}).
 @item B
@@ -4231,12 +4438,12 @@ One space for each thread level.
 @item <
 Twenty minus thread level spaces.
 @item U
-Unread.
+Unread. @xref{Read Articles}.
 
 @item R
 This misleadingly named specifier is the @dfn{secondary mark}.  This
 mark will say whether the article has been replied to, has been cached,
-or has been saved.
+or has been saved.  @xref{Other Marks}.
 
 @item i
 Score as a number (@pxref{Scoring}).
@@ -4349,7 +4556,8 @@ headers are used instead.
 A related variable is @code{nnmail-extra-headers}, which controls when
 to include extra headers when generating overview (@sc{nov}) files.  If
 you have old overview files, you should regenerate them after changing
-this variable.
+this variable, by entering the server buffer using `^', and then `g' on
+the appropriate mail server (e.g. nnml) to cause regeneration.
 
 @vindex gnus-summary-line-format
 You also have to instruct Gnus to display the data by changing the
@@ -4369,9 +4577,16 @@ In summary, you'd typically put something like the following in
       "Your Name Here")
 @end lisp
 
-Now, this is mostly useful for mail groups, where you have control over
+(The values listed above are the default values in Gnus.  Alter them
+to fit your needs.)
+
+A note for news server administrators, or for users who wish to try to
+convince their news server administrator to provide some additional
+support:
+
+The above is mostly useful for mail groups, where you have control over
 the @sc{nov} files that are created.  However, if you can persuade your
-nntp admin to add:
+nntp admin to add (in the usual implementation, notably INN):
 
 @example
 Newsgroups:full
@@ -4638,8 +4853,9 @@ Go to the first unread article
 @kindex G b (Summary)
 @kindex , (Summary)
 @findex gnus-summary-best-unread-article
-Go to the article with the highest score
-(@code{gnus-summary-best-unread-article}).
+Go to the unread article with the highest score
+(@code{gnus-summary-best-unread-article}).  If given a prefix argument,
+go to the first unread article that has a score over the default score.
 
 @item G l
 @itemx l
@@ -4855,6 +5071,13 @@ that goes out to all people listed in the @code{To}, @code{From} (or
 @code{Reply-to}) and @code{Cc} headers in all the process/prefixed
 articles.  This command uses the process/prefix convention.
 
+@item S V
+@kindex S V (Summary)
+@findex gnus-summary-very-wide-reply-with-original
+Mail a very wide reply to the author of the current article and include the
+original message (@code{gnus-summary-very-wide-reply-with-original}).  This
+command uses the process/prefix convention.
+
 @item S o m
 @itemx C-c C-f
 @kindex S o m (Summary)
@@ -4871,8 +5094,24 @@ headers of the forwarded article.
 @kindex S m (Summary)
 @findex gnus-summary-mail-other-window
 @c @icon{gnus-summary-mail-originate}
-Send a mail to some other person
-(@code{gnus-summary-mail-other-window}).
+Prepare a mail (@code{gnus-summary-mail-other-window}).  By default, use
+the posting style of the current group.  If given a prefix, disable that.
+If the prefix is 1, prompt for a group name to find the posting style.
+
+@item S i
+@itemx i
+@kindex i (Summary)
+@kindex S i (Summary)
+@findex gnus-summary-news-other-window
+Prepare a news (@code{gnus-summary-news-other-window}).  By default,
+post to the current group.  If given a prefix, disable that.  If the
+prefix is 1, prompt for a group to post to.
+
+This function actually prepares a news even when using mail groups.
+This is useful for "posting" messages to mail groups without actually
+sending them over the network: they're just saved directly to the group
+in question.  The corresponding back end must have a request-post method
+for this to work though.
 
 @item S D b
 @kindex S D b (Summary)
@@ -4903,7 +5142,7 @@ This command is mainly used if you have several accounts and want to
 ship a mail to a different account of yours.  (If you're both
 @code{root} and @code{postmaster} and get a mail for @code{postmaster}
 to the @code{root} account, you may want to resend it to
-@code{postmaster}.  Ordnung muß sein!
+@code{postmaster}.  Ordnung muss sein!
 
 This command understands the process/prefix convention
 (@pxref{Process/Prefix}).
@@ -4950,8 +5189,9 @@ Commands for posting a news article:
 @kindex S p (Summary)
 @findex gnus-summary-post-news
 @c @icon{gnus-summary-post-news}
-Post an article to the current group
-(@code{gnus-summary-post-news}).
+Prepare for posting an article (@code{gnus-summary-post-news}).  By
+default, post to the current group.  If given a prefix, disable that.
+If the prefix is 1, prompt for another group instead.
 
 @item S f
 @itemx f
@@ -5158,17 +5398,17 @@ calculates the deadline of the message and stores it in the
 @code{nndraft:delayed} group.
 
 And whenever you get new news, Gnus looks through the group for articles
-which are due and sends them.  It uses the @code{gnus-delay-send-drafts}
+which are due and sends them.  It uses the @code{gnus-delay-send-queue}
 function for this.  By default, this function is added to the hook
 @code{gnus-get-new-news-hook}.  But of course, you can change this.
 Maybe you want to use the demon to send drafts?  Just tell the demon to
-execute the @code{gnus-delay-send-drafts} function.
+execute the @code{gnus-delay-send-queue} function.
 
 @table @code
 @item gnus-delay-initialize
 @findex gnus-delay-initialize
 By default, this function installs the @kbd{C-c C-j} key binding in
-Message mode and @code{gnus-delay-send-drafts} in
+Message mode and @code{gnus-delay-send-queue} in
 @code{gnus-get-new-news-hook}.  But it accepts two optional arguments,
 @code{no-keymap} and @code{no-check}.  If @code{no-keymap} is non-nil,
 the @kbd{C-c C-j} binding is not intalled.  If @code{no-check} is
@@ -5348,15 +5588,11 @@ All articles that you have replied to or made a followup to (i.e., have
 answered) will be marked with an @samp{A} in the second column
 (@code{gnus-replied-mark}).
 
+@item
 @vindex gnus-forwarded-mark
 All articles that you have forwarded will be marked with an @samp{F} in
 the second column (@code{gnus-forwarded-mark}).
 
-@vindex gnus-recent-mark
-Articles that are ``recently'' arrived in the group will be marked
-with an @samp{N} in the second column (@code{gnus-recent-mark}).  Most
-back end doesn't support the mark, in which case it's not shown.
-
 @item
 @vindex gnus-cached-mark
 Articles stored in the article cache will be marked with an @samp{*} in
@@ -5373,12 +5609,12 @@ religiously) are marked with an @samp{S} in the second column
 Articles that according to the back end haven't been seen by the user
 before are marked with a @samp{N} in the second column
 (@code{gnus-recent-mark}).  Note that not all back ends support this
-mark, in which case it simply never appear.
+mark, in which case it simply never appears.
 
 @item
 @vindex gnus-unseen-mark
 Articles that haven't been seen by the user before are marked with a
-@samp{.} in the second column (@code{gnus-unseen-mark}). 
+@samp{.} in the second column (@code{gnus-unseen-mark}).
 
 @item
 @vindex gnus-not-empty-thread-mark
@@ -5729,20 +5965,23 @@ additional articles.
 @kindex / / (Summary)
 @findex gnus-summary-limit-to-subject
 Limit the summary buffer to articles that match some subject
-(@code{gnus-summary-limit-to-subject}).
+(@code{gnus-summary-limit-to-subject}). If given a prefix, exclude
+matching articles.
 
 @item / a
 @kindex / a (Summary)
 @findex gnus-summary-limit-to-author
 Limit the summary buffer to articles that match some author
-(@code{gnus-summary-limit-to-author}).
+(@code{gnus-summary-limit-to-author}). If given a prefix, exclude
+matching articles.
 
 @item / x
 @kindex / x (Summary)
 @findex gnus-summary-limit-to-extra
 Limit the summary buffer to articles that match one of the ``extra''
 headers (@pxref{To From Newsgroups})
-(@code{gnus-summary-limit-to-extra}).
+(@code{gnus-summary-limit-to-extra}). If given a prefix, exclude
+matching articles.
 
 @item / u
 @itemx x
@@ -5789,10 +6028,10 @@ score (@code{gnus-summary-limit-to-score}).
 
 @item / p
 @kindex / p (Summary)
-@findex gnus-summary-limit-to-display-parameter
+@findex gnus-summary-limit-to-display-predicate
 Limit the summary buffer to articles that satisfy the @code{display}
 group parameter predicate
-(@code{gnus-summary-limit-to-display-parameter}).  See @pxref{Group
+(@code{gnus-summary-limit-to-display-predicate}).  See @pxref{Group
 Parameters} for more on this predicate.
 
 @item / E
@@ -5854,7 +6093,7 @@ if @var{back-end}@code{-get-new-mail} is non-@code{nil}.
 @kindex / o (Summary)
 @findex gnus-summary-insert-old-articles
 Insert all old articles in the summary buffer. If given a numbered
-prefix, fetch this number of articles.  
+prefix, fetch this number of articles.
 
 @end table
 
@@ -6059,6 +6298,10 @@ Simplify fuzzily.
 @item gnus-simplify-whitespace
 @findex gnus-simplify-whitespace
 Remove excessive whitespace.
+
+@item gnus-simplify-all-whitespace
+@findex gnus-simplify-all-whitespace
+Remove all whitespace.
 @end table
 
 You may also write your own functions, of course.
@@ -6119,9 +6362,10 @@ connect as many loose threads as possible, you should set this variable
 to @code{some} or a number.  If you set it to a number, no more than
 that number of extra old headers will be fetched.  In either case,
 fetching old headers only works if the back end you are using carries
-overview files---this would normally be @code{nntp}, @code{nnspool} and
-@code{nnml}.  Also remember that if the root of the thread has been
-expired by the server, there's not much gnus can do about that.
+overview files---this would normally be @code{nntp}, @code{nnspool},
+@code{nnml}, and @code{nnmaildir}.  Also remember that if the root of
+the thread has been expired by the server, there's not much Gnus can do
+about that.
 
 This variable can also be set to @code{invisible}.  This won't have any
 visible effects, but is useful if you use the @kbd{A T} command a lot
@@ -6173,6 +6417,22 @@ slower and more awkward.
 If non-@code{nil}, all threads will be hidden when the summary buffer is
 generated.
 
+This can also be a predicate specifier (@pxref{Predicate Specifiers}).
+Avaliable predicates are @code{gnus-article-unread-p} and
+@code{gnus-article-unseen-p}).
+
+Here's an example:
+
+@lisp
+(setq gnus-thread-hide-subtree
+      '(or gnus-article-unread-p
+           gnus-article-unseen-p))
+@end lisp
+
+(It's a pretty nonsensical example, since all unseen articles are also
+unread, but you get my drift.)
+
+
 @item gnus-thread-expunge-below
 @vindex gnus-thread-expunge-below
 All threads that have a total score (as defined by
@@ -6256,9 +6516,9 @@ meaningful.  Here's one example:
 @table @kbd
 
 @item T k
-@itemx M-C-k
+@itemx C-M-k
 @kindex T k (Summary)
-@kindex M-C-k (Summary)
+@kindex C-M-k (Summary)
 @findex gnus-summary-kill-thread
 Mark all articles in the current (sub-)thread as read
 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
@@ -6266,9 +6526,9 @@ remove all marks instead.  If the prefix argument is negative, tick
 articles instead.
 
 @item T l
-@itemx M-C-l
+@itemx C-M-l
 @kindex T l (Summary)
-@kindex M-C-l (Summary)
+@kindex C-M-l (Summary)
 @findex gnus-summary-lower-thread
 Lower the score of the current (sub-)thread
 (@code{gnus-summary-lower-thread}).
@@ -6339,8 +6599,8 @@ understand the numeric prefix.
 
 @item T n
 @kindex T n (Summary)
-@itemx M-C-n
-@kindex M-C-n (Summary)
+@itemx C-M-f
+@kindex C-M-n (Summary)
 @itemx M-down
 @kindex M-down (Summary)
 @findex gnus-summary-next-thread
@@ -6348,8 +6608,8 @@ Go to the next thread (@code{gnus-summary-next-thread}).
 
 @item T p
 @kindex T p (Summary)
-@itemx M-C-p
-@kindex M-C-p (Summary)
+@itemx C-M-b
+@kindex C-M-p (Summary)
 @itemx M-up
 @kindex M-up (Summary)
 @findex gnus-summary-prev-thread
@@ -6395,7 +6655,9 @@ Matching}).
 @findex gnus-thread-sort-by-subject
 @findex gnus-thread-sort-by-author
 @findex gnus-thread-sort-by-number
+@findex gnus-thread-sort-by-random
 @vindex gnus-thread-sort-functions
+@findex gnus-thread-sort-by-most-recent-thread
 If you are using a threaded summary display, you can sort the threads by
 setting @code{gnus-thread-sort-functions}, which can be either a single
 function, a list of functions, or a list containing functions and
@@ -6404,7 +6666,10 @@ function, a list of functions, or a list containing functions and
 By default, sorting is done on article numbers.  Ready-made sorting
 predicate functions include @code{gnus-thread-sort-by-number},
 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
-@code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
+@code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score},
+@code{gnus-thread-sort-by-most-recent-number},
+@code{gnus-thread-sort-by-most-recent-date},
+@code{gnus-thread-sort-by-random} and
 @code{gnus-thread-sort-by-total-score}.
 
 Each function takes two threads and returns non-@code{nil} if the first
@@ -6455,14 +6720,18 @@ tickles your fancy.
 @findex gnus-article-sort-by-score
 @findex gnus-article-sort-by-subject
 @findex gnus-article-sort-by-author
+@findex gnus-article-sort-by-random
 @findex gnus-article-sort-by-number
-If you are using an unthreaded display for some strange reason or other,
-you have to fiddle with the @code{gnus-article-sort-functions} variable.
-It is very similar to the @code{gnus-thread-sort-functions}, except that
-it uses slightly different functions for article comparison.  Available
-sorting predicate functions are @code{gnus-article-sort-by-number},
-@code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject},
-@code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}.
+If you are using an unthreaded display for some strange reason or
+other, you have to fiddle with the @code{gnus-article-sort-functions}
+variable.  It is very similar to the
+@code{gnus-thread-sort-functions}, except that it uses slightly
+different functions for article comparison.  Available sorting
+predicate functions are @code{gnus-article-sort-by-number},
+@code{gnus-article-sort-by-author},
+@code{gnus-article-sort-by-subject}, @code{gnus-article-sort-by-date},
+@code{gnus-article-sort-by-random}, and
+@code{gnus-article-sort-by-score}.
 
 If you want to sort an unthreaded summary display by subject, you could
 say something like:
@@ -6643,6 +6912,10 @@ gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
 files, and @kbd{gnus-cache-generate-active} will (re)generate the active
 file.
 
+@findex gnus-cache-move-cache
+@code{gnus-cache-move-cache} will move your whole
+@code{gnus-cache-directory} to some other location. You get asked to
+where, isn't that cool?
 
 @node Persistent Articles
 @section Persistent Articles
@@ -6724,6 +6997,10 @@ processing of the article is done before it is saved).  For a different
 approach (uudecoding, unsharing) you should use @code{gnus-uu}
 (@pxref{Decoding Articles}).
 
+For the commands listed here, the target is a file.  If you want to
+save to a group, see the @kbd{B c} (@code{gnus-summary-copy-article})
+command (@pxref{Mail Group Commands}).
+
 @vindex gnus-save-all-headers
 If @code{gnus-save-all-headers} is non-@code{nil}, gnus will not delete
 unwanted headers before saving the article.
@@ -6794,6 +7071,17 @@ Save the current article in a VM folder
 @findex gnus-summary-pipe-output
 Save the current article in a pipe.  Uhm, like, what I mean is---Pipe
 the current article to a process (@code{gnus-summary-pipe-output}).
+
+@item O P
+@kindex O P (Summary)
+@findex gnus-summary-muttprint
+@vindex gnus-summary-muttprint-program
+Save the current article into muttprint. That is, print it using the
+external program Muttprint (see
+@uref{http://muttprint.sourceforge.net/}). The program name and
+options to use is controlled by the variable
+@code{gnus-summary-muttprint-program}. (@code{gnus-summary-muttprint}).
+
 @end table
 
 @vindex gnus-prompt-before-saving
@@ -6841,6 +7129,13 @@ Append the article straight to an ordinary file.  Uses the function in
 the @code{gnus-file-save-name} variable to get a file name to save the
 article in.  The default is @code{gnus-numeric-save-name}.
 
+@item gnus-summary-write-to-file
+@findex gnus-summary-write-to-file
+Write the article straight to an ordinary file.  The file is
+overwritten if it exists.  Uses the function in the
+@code{gnus-file-save-name} variable to get a file name to save the
+article in.  The default is @code{gnus-numeric-save-name}.
+
 @item gnus-summary-save-body-in-file
 @findex gnus-summary-save-body-in-file
 Append the article body to an ordinary file.  Uses the function in the
@@ -7404,8 +7699,10 @@ these articles easier.
 * Article Fontisizing::         Making emphasized text look nice.
 * Article Hiding::              You also want to make certain info go away.
 * Article Washing::             Lots of way-neat functions to make life better.
+* Article Header::              Doing various header transformations.
 * Article Buttons::             Click on URLs, Message-IDs, addresses and the like.
 * Article Date::                Grumble, UT!
+* Article Display::             Display various stuff---X-Face, Picons, Smileys
 * Article Signature::           What is a signature?
 * Article Miscellania::         Various other stuff.
 @end menu
@@ -7597,8 +7894,8 @@ headers, PGP, cited text and the signature.
 
 @item W W h
 @kindex W W h (Summary)
-@findex gnus-article-toggle-headers
-Toggle hiding of headers (@code{gnus-article-toggle-headers}).  @xref{Hiding
+@findex gnus-article-hide-headers
+Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
 Headers}.
 
 @item W W b
@@ -7803,15 +8100,15 @@ is rumored to have employed this form of, uh, somewhat weak encryption.
 @item t
 @kindex W t (Summary)
 @kindex t (Summary)
-@findex gnus-article-toggle-headers
+@findex gnus-summary-toggle-header
 Toggle whether to display all headers in the article buffer
-(@code{gnus-article-toggle-headers}).
+(@code{gnus-summary-toggle-header}).
 
 @item W v
 @kindex W v (Summary)
-@findex gnus-summary-verbose-header
+@findex gnus-summary-verbose-headers
 Toggle whether to display all headers in the article buffer permanently
-(@code{gnus-summary-verbose-header}).
+(@code{gnus-summary-verbose-headers}).
 
 @item W m
 @kindex W m (Summary)
@@ -7842,6 +8139,13 @@ an attempt to provide more quoting characters.  If you see something
 like @code{\222} or @code{\264} where you're expecting some kind of
 apostrophe or quotation mark, then try this wash.
 
+@item W k
+@kindex W k (Summary)
+@findex gnus-article-outlook-deuglify-article
+@cindex Outlook Express
+Deuglify broken Outlook (Express) articles and redisplay
+(@code{gnus-article-outlook-deuglify-article}).
+
 @item W w
 @kindex W w (Summary)
 @findex gnus-article-fill-cited-article
@@ -7874,7 +8178,7 @@ CRs into LF (this takes care of Mac line endings)
 @findex gnus-article-de-base64-unreadable
 Treat base64 (@code{gnus-article-de-base64-unreadable}).
 Base64 is one common @sc{mime} encoding employed when sending non-ASCII
-(i. e., 8-bit) articles.  Note that the this is usually done
+(i. e., 8-bit) articles.  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.
@@ -7887,49 +8191,48 @@ 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 u
+@kindex W u (Summary)
+@findex gnus-article-unsplit-urls
+Remove newlines from within URLs.  Some mailers insert newlines into
+outgoing email messages to keep lines short.  This reformatting can
+split long URLs onto multiple lines.  Repair those URLs by removing
+the newlines (@code{gnus-article-unsplit-urls}).
+
 @item W h
 @kindex W h (Summary)
 @findex gnus-article-wash-html
-Treat HTML (@code{gnus-article-wash-html}).
-Note that the this is usually done automatically by Gnus if the message
-in question has a @code{Content-Type} header that says that this type
-has been done.
+Treat @sc{html} (@code{gnus-article-wash-html}).  Note that this is
+usually done automatically by Gnus if the message in question has a
+@code{Content-Type} header that says that the message is @sc{html}.
+
 If a prefix is given, a charset will be asked for.
 
-@item W f
-@kindex W f (Summary)
-@cindex x-face
-@findex gnus-article-display-x-face
-@findex gnus-article-x-face-command
-@vindex gnus-article-x-face-command
-@vindex gnus-article-x-face-too-ugly
-@iftex
-@iflatex
-\include{xface}
-@end iflatex
-@end iftex
-@c @anchor{X-Face}
-Look for and display any X-Face headers
-(@code{gnus-article-display-x-face}).  The command executed by this
-function is given by the @code{gnus-article-x-face-command} variable.
-If this variable is a string, this string will be executed in a
-sub-shell.  If it is a function, this function will be called with the
-face as the argument.  If the @code{gnus-article-x-face-too-ugly} (which
-is a regexp) matches the @code{From} header, the face will not be shown.
-The default action under Emacs is to fork off the @code{display}
-program@footnote{@code{display} is from the ImageMagick package.  For the
-@code{uncompface} and @code{icontopbm} programs look for a package
-like `compface' or `faces-xface' on a GNU/Linux system.}
-to view the face.  Under XEmacs or Emacs 21+ with suitable image
-support, the default action is to display the face before the
-@code{From} header.  (It's nicer if XEmacs has been compiled with X-Face
-support---that will make display somewhat faster.  If there's no native
-X-Face support, Gnus will try to convert the @code{X-Face} header using
-external programs from the @code{pbmplus} package and
-friends.@footnote{On a GNU/Linux system look for packages with names
-like @code{netpbm} or @code{libgr-progs}.})  If you
-want to have this function in the display hook, it should probably come
-last.
+@vindex gnus-article-wash-function
+The default is to use the function specified by
+@code{mm-inline-text-html-renderer} (@pxref{Customization, , , emacs-mime}) 
+to convert the @sc{html}, but this is controlled by the
+@code{gnus-article-wash-function} variable.  Pre-defined functions you
+can use include:
+
+@table @code
+@item w3
+Use Emacs/w3.
+
+@item w3m
+Use emacs-w3m (see @uref{http://emacs-w3m.namazu.org/} for more
+information).
+
+@item links
+Use Links (see @uref{http://artax.karlin.mff.cuni.cz/~mikulas/links/}).
+
+@item lynx
+Use Lynx (see @uref{http://lynx.browser.org/}).
+
+@item html2text
+Use html2text -- a simple @sc{html} converter included with Gnus.
+
+@end table
 
 @item W b
 @kindex W b (Summary)
@@ -7953,11 +8256,17 @@ public key of the maintainer to your keyring to verify the
 message.@footnote{PGP keys for many hierarchies are available at
 @uref{ftp://ftp.isc.org/pub/pgpcontrol/README.html}}
 
-@item W W H
-@kindex W W H (Summary)
-@findex gnus-article-strip-headers-from-body
+@item W s
+@kindex W s (Summary)
+@findex gnus-summary-force-verify-and-decrypt
+Verify a signed (PGP, @sc{pgp/mime} or @sc{s/mime}) message
+(@code{gnus-summary-force-verify-and-decrypt}). @xref{Security}.
+
+@item W a
+@kindex W a (Summary)
+@findex gnus-article-strip-headers-in-body
 Strip headers like the @code{X-No-Archive} header from the beginning of
-article bodies (@code{gnus-article-strip-headers-from-body}).
+article bodies (@code{gnus-article-strip-headers-in-body}).
 
 @item W E l
 @kindex W E l (Summary)
@@ -8007,6 +8316,39 @@ body (@code{gnus-article-strip-trailing-space}).
 @xref{Customizing Articles}, for how to wash articles automatically.
 
 
+@node Article Header
+@subsection Article Header
+
+These commands perform various transformations of article header.
+
+@table @kbd
+
+@item W G u
+@kindex W G u (Summary)
+@findex gnus-article-treat-unfold-headers
+Unfold folded header lines (@code{gnus-article-treat-unfold-headers}).
+
+@item W G n
+@kindex W G n (Summary)
+@findex gnus-article-treat-fold-newsgroups
+Fold the @code{Newsgroups} and @code{Followup-To} headers
+(@code{gnus-article-treat-fold-newsgroups}).
+
+@item W G f
+@kindex W G f (Summary)
+@findex gnus-article-treat-fold-header
+Fold all the message headers
+(@code{gnus-article-treat-fold-headers}).
+
+@item W E w
+@kindex W E w
+@findex gnus-article-remove-leading-whitespace
+Remove excessive whitespace from all headers
+(@code{gnus-article-remove-leading-whitespace}).
+
+@end table
+
+
 @node Article Buttons
 @subsection Article Buttons
 @cindex buttons
@@ -8036,7 +8378,8 @@ This is an alist where each entry has this form:
 @item regexp
 All text that match this regular expression will be considered an
 external reference.  Here's a typical regexp that matches embedded URLs:
-@samp{<URL:\\([^\n\r>]*\\)>}.
+@samp{<URL:\\([^\n\r>]*\\)>}. This can also be a variable containing a
+regexp, useful variables to use include @code{gnus-button-url-regexp}.
 
 @item button-par
 Gnus has to know which parts of the matches is to be highlighted.  This
@@ -8181,6 +8524,66 @@ that the article was posted in 1854.  Although something like that is
 preferred format automatically.
 
 
+@node Article Display
+@subsection Article Display
+@cindex picons
+@cindex x-face
+@cindex smileys
+
+These commands add various frivolous display gimmics to the article
+buffer in Emacs versions that support them.
+
+@code{X-Face} headers are small black-and-white images supplied by the
+message headers (@pxref{X-Face}).
+
+Picons, on the other hand, reside on your own system, and Gnus will
+try to match the headers to what you have (@pxref{Picons}).
+
+Smileys are those little @samp{:-)} symbols that people like to litter
+their messages with (@pxref{Smileys}).
+
+All these functions are toggles--if the elements already exist,
+they'll be removed.
+
+@table @kbd
+@item W D x
+@kindex W D x (Summary)
+@findex gnus-article-display-x-face
+Display an @code{X-Face} in the @code{From} header.
+(@code{gnus-article-display-x-face}).
+
+@item W D s
+@kindex W D s (Summary)
+@findex gnus-treat-smiley
+Display smileys (@code{gnus-treat-smiley}).
+
+@item W D f
+@kindex W D f (Summary)
+@findex gnus-treat-from-picon
+Piconify the @code{From} header (@code{gnus-treat-from-picon}).
+
+@item W D m
+@kindex W D m (Summary)
+@findex gnus-treat-mail-picon
+Piconify all mail headers (i. e., @code{Cc}, @code{To})
+(@code{gnus-treat-mail-picon}).
+
+@item W D n
+@kindex W D n (Summary)
+@findex gnus-treat-newsgroups-picon
+Piconify all news headers (i. e., @code{Newsgroups} and
+@code{Followup-To}) (@code{gnus-treat-newsgroups-picon}).
+
+@item W D D
+@kindex W D D (Summary)
+@findex gnus-article-remove-images
+Remove all images from the article buffer
+(@code{gnus-article-remove-images}).
+
+@end table
+
+
+
 @node Article Signature
 @subsection Article Signature
 @cindex signatures
@@ -8257,7 +8660,7 @@ Translate the article from one language to another
 
 
 @node MIME Commands
-@section @sc{mime} Commands
+@section MIME Commands
 @cindex MIME decoding
 @cindex attachments
 @cindex viewing attachments
@@ -8337,9 +8740,9 @@ Decode encoded article bodies as well as charsets
 This command looks in the @code{Content-Type} header to determine the
 charset.  If there is no such header in the article, you can give it a
 prefix, which will prompt for the charset to decode as.  In regional
-groups where people post using some common encoding (but do not include
-MIME headers), you can set the @code{charset} group/topic parameter to
-the required charset (@pxref{Group Parameters}).
+groups where people post using some common encoding (but do not
+include @sc{mime} headers), you can set the @code{charset} group/topic
+parameter to the required charset (@pxref{Group Parameters}).
 
 @item W M v
 @kindex W M v (Summary)
@@ -8545,8 +8948,9 @@ something like
 @vindex gnus-ps-print-hook
 @findex gnus-summary-print-article
 Generate and print a PostScript image of the article buffer
-(@code{gnus-summary-print-article}).  @code{gnus-ps-print-hook} will be
-run just before printing the buffer.
+(@code{gnus-summary-print-article}).  @code{gnus-ps-print-hook} will
+be run just before printing the buffer.  An alternative way to print
+article is to use Muttprint (@pxref{Saving Articles}).
 
 @end table
 
@@ -8595,6 +8999,11 @@ Sort by article length (@code{gnus-summary-sort-by-chars}).
 @findex gnus-summary-sort-by-score
 Sort by score (@code{gnus-summary-sort-by-score}).
 
+@item C-c C-s C-r
+@kindex C-c C-s C-r (Summary)
+@findex gnus-summary-sort-by-random
+Randomize (@code{gnus-summary-sort-by-random}).
+
 @item C-c C-s C-o
 @kindex C-c C-s C-o (Summary)
 @findex gnus-summary-sort-by-original
@@ -8690,21 +9099,21 @@ is a list, Gnus will try all the methods in the list until it finds a
 match.
 
 Here's an example setting that will first try the current method, and
-then ask Deja if that fails:
+then ask Google if that fails:
 
 @lisp
 (setq gnus-refer-article-method
       '(current
-        (nnweb "refer" (nnweb-type dejanews))))
+        (nnweb "refer" (nnweb-type google))))
 @end lisp
 
 Most of the mail back ends support fetching by @code{Message-ID}, but
-do not do a particularly excellent job at it.  That is, @code{nnmbox}
-and @code{nnbabyl} are able to locate articles from any groups, while
-@code{nnml}, @code{nnfolder} and @code{nnimap}1 are only able to locate
-articles that have been posted to the current group.  (Anything else
-would be too time consuming.)  @code{nnmh} does not support this at
-all.
+do not do a particularly excellent job at it.  That is, @code{nnmbox},
+@code{nnbabyl}, and @code{nnmaildir} are able to locate articles from
+any groups, while @code{nnml}, @code{nnfolder}, and @code{nnimap} are
+only able to locate articles that have been posted to the current group.
+(Anything else would be too time consuming.)  @code{nnmh} does not
+support this at all.
 
 
 @node Alternative Approaches
@@ -8907,6 +9316,14 @@ have several windows displayed side-by-side in a frame and the tree
 buffer is one of these, minimizing the tree window will also resize all
 other windows displayed next to it.
 
+You may also wish to add the following hook to keep the window minimized
+at all times:
+
+@lisp
+(add-hook 'gnus-configure-windows-hook
+          'gnus-tree-perhaps-minimize)
+@end lisp
+
 @item gnus-generate-tree-function
 @vindex gnus-generate-tree-function
 @findex gnus-generate-horizontal-tree
@@ -8984,8 +9401,8 @@ process (@code{gnus-summary-expire-articles}).  That is, delete all
 expirable articles in the group that have been around for a while.
 (@pxref{Expiring Mail}).
 
-@item B M-C-e
-@kindex B M-C-e (Summary)
+@item B C-M-e
+@kindex B C-M-e (Summary)
 @findex gnus-summary-expire-articles-now
 Delete all the expirable articles in the group
 (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
@@ -9007,7 +9424,7 @@ disk forever and ever, never to return again.'' Use with caution.
 @vindex gnus-preserve-marks
 Move the article from one mail group to another
 (@code{gnus-summary-move-article}).  Marks will be preserved if
-@var{gnus-preserve-marks} is non-@code{nil} (which is the default).
+@code{gnus-preserve-marks} is non-@code{nil} (which is the default).
 
 @item B c
 @kindex B c (Summary)
@@ -9016,7 +9433,7 @@ Move the article from one mail group to another
 @c @icon{gnus-summary-mail-copy}
 Copy the article from one group (mail group or not) to a mail group
 (@code{gnus-summary-copy-article}).  Marks will be preserved if
-@var{gnus-preserve-marks} is non-@code{nil} (which is the default).
+@code{gnus-preserve-marks} is non-@code{nil} (which is the default).
 
 @item B B
 @kindex B B (Summary)
@@ -9034,6 +9451,13 @@ Import an arbitrary file into the current mail newsgroup
 (@code{gnus-summary-import-article}).  You will be prompted for a file
 name, a @code{From} header and a @code{Subject} header.
 
+@item B I
+@kindex B I (Summary)
+@findex gnus-summary-create-article
+Create an empty article in the current mail newsgroups
+(@code{gnus-summary-create-article}).  You will be prompted for a
+@code{From} header and a @code{Subject} header.
+
 @item B r
 @kindex B r (Summary)
 @findex gnus-summary-respool-article
@@ -9041,7 +9465,7 @@ Respool the mail article (@code{gnus-summary-respool-article}).
 @code{gnus-summary-respool-default-method} will be used as the default
 select method when respooling.  This variable is @code{nil} by default,
 which means that the current group select method will be used instead.
-Marks will be preserved if @var{gnus-preserve-marks} is non-@code{nil}
+Marks will be preserved if @code{gnus-preserve-marks} is non-@code{nil}
 (which is the default).
 
 @item B w
@@ -9050,9 +9474,10 @@ Marks will be preserved if @var{gnus-preserve-marks} is non-@code{nil}
 @kindex e (Summary)
 @findex gnus-summary-edit-article
 @kindex C-c C-c (Article)
+@findex gnus-summary-edit-article-done
 Edit the current article (@code{gnus-summary-edit-article}).  To finish
 editing and make the changes permanent, type @kbd{C-c C-c}
-(@kbd{gnus-summary-edit-article-done}).  If you give a prefix to the
+(@code{gnus-summary-edit-article-done}).  If you give a prefix to the
 @kbd{C-c C-c} command, gnus won't re-highlight the article.
 
 @item B q
@@ -9082,6 +9507,14 @@ it didn't find the article, it may have been posted anyway---mail
 propagation is much faster than news propagation, and the news copy may
 just not have arrived yet.
 
+@item K E
+@kindex K E (Summary)
+@findex gnus-article-encrypt-body
+@vindex gnus-article-encrypt-protocol
+Encrypt the body of an article (@code{gnus-article-encrypt-body}).
+The body is encrypted with the encryption protocol specified by the
+variable @code{gnus-article-encrypt-protocol}.
+
 @end table
 
 @vindex gnus-move-split-methods
@@ -9163,6 +9596,22 @@ the list in one particular group:
     articles))
 @end lisp
 
+@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
+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:
+
+@lisp
+(setq gnus-newsgroup-variables
+     '(message-use-followup-to
+       (gnus-visible-headers .
+         "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
+@end lisp
+
 @end table
 
 
@@ -9277,8 +9726,8 @@ whenever you see a message that is a collection of other messages of
 some format, you @kbd{C-d} and read these messages in a more convenient
 fashion.
 
-@item M-C-d
-@kindex M-C-d (Summary)
+@item C-M-d
+@kindex C-M-d (Summary)
 @findex gnus-summary-read-document
 This command is very similar to the one above, but lets you gather
 several documents into one biiig group
@@ -9302,14 +9751,14 @@ to have truncation switched off while reading articles.
 Expand the summary buffer window (@code{gnus-summary-expand-window}).
 If given a prefix, force an @code{article} window configuration.
 
-@item M-C-e
-@kindex M-C-e (Summary)
+@item C-M-e
+@kindex C-M-e (Summary)
 @findex gnus-summary-edit-parameters
 Edit the group parameters (@pxref{Group Parameters}) of the current
 group (@code{gnus-summary-edit-parameters}).
 
-@item M-C-a
-@kindex M-C-a (Summary)
+@item C-M-a
+@kindex C-M-a (Summary)
 @findex gnus-summary-customize-parameters
 Customize the group parameters (@pxref{Group Parameters}) of the current
 group (@code{gnus-summary-customize-parameters}).
@@ -9574,22 +10023,22 @@ to you to figure out, I think.
 @section Security
 
 Gnus is able to verify signed messages or decrypt encrypted messages.
-The formats that are supported are PGP and S/MIME, however you need
-some external programs to get things to work:
+The formats that are supported are PGP, @sc{pgp/mime} and @sc{s/mime},
+however you need some external programs to get things to work:
 
 @enumerate
 @item
-To verify or decrypt PGP messages, you have to install mailcrypt or
-gpg.el as well as a OpenPGP implementation (such as GnuPG). @xref{Using GPG}.
+To handle PGP messages, you have to install mailcrypt or gpg.el as
+well as a OpenPGP implementation (such as GnuPG).
 
 @item
-To verify or decrypt S/MIME message, you need to install OpenSSL.
-OpenSSL 0.9.6 or newer is recommended.
+To handle @sc{s/mime} message, you need to install OpenSSL.  OpenSSL 0.9.6
+or newer is recommended.
 
 @end enumerate
 
 More information on how to set things up can be found in the message
-manual. @xref{Security, ,Security, message, The Message Manual}.
+manual (@pxref{Security, ,Security, message, Message Manual}).
 
 @table @code
 @item mm-verify-option
@@ -9601,7 +10050,7 @@ protocols. Otherwise, ask user.
 @item mm-decrypt-option
 @vindex mm-decrypt-option
 Option of decrypting encrypted parts.  @code{never}, no decryption;
-@code{always}, always decrypt @code{known}, only decrypt known
+@code{always}, always decrypt; @code{known}, only decrypt known
 protocols. Otherwise, ask user.
 
 @end table
@@ -9609,9 +10058,12 @@ protocols. Otherwise, ask user.
 @node Mailing List
 @section Mailing List
 
+@kindex A M (summary)
+@findex gnus-mailing-list-insinuate
 Gnus understands some mailing list fields of RFC 2369.  To enable it,
 either add a `to-list' group parameter (@pxref{Group Parameters}),
-possibly using @kbd{A M} in the summary buffer, or say:
+possibly using @kbd{A M} (@code{gnus-mailing-list-insinuate}) in the
+summary buffer, or say:
 
 @lisp
 (add-hook 'gnus-summary-mode-hook 'turn-on-gnus-mailing-list-mode)
@@ -9781,7 +10233,7 @@ Remove the @code{To} header if it is very long.
 Remove all @code{To} headers if there are more than one.
 @end table
 
-To include these three elements, you could say something like;
+To include these three elements, you could say something like:
 
 @lisp
 (setq gnus-boring-article-headers
@@ -9807,21 +10259,18 @@ other naughty stuff in innocent-looking articles.
 
 @vindex gnus-show-mime
 @vindex gnus-article-display-method-for-mime
-@vindex gnus-strict-mime
 @findex gnus-article-display-mime-message
 Gnus handles @sc{mime} by pushing the articles through
 @code{gnus-article-display-method-for-mime}, which is
 @code{gnus-article-display-mime-message} by default.  This function
-calls the SEMI MIME-View program to actually do the work.  For more
-information on SEMI MIME-View, see its manual page (however it is not
-existed yet, sorry).
+calls the @sc{semi} MIME-View program to actually do the work.  For more
+information on @sc{semi} MIME-View, see its manual page (however it is
+not existed yet, sorry).
 
 Set @code{gnus-show-mime} to @code{t} if you want to use
-@sc{mime} all the time.  However, if @code{gnus-strict-mime} is
-non-@code{nil}, the @sc{mime} method will only be used if there are
-@sc{mime} headers in the article.  If you have @code{gnus-show-mime}
-set, then you'll see some unfortunate display glitches in the article
-buffer.  These can't be avoided.
+@sc{mime} all the time.  If you have @code{gnus-show-mime} set, then
+you'll see some unfortunate display glitches in the article buffer.
+These can't be avoided.
 
 In GNUS or Gnus, it might be best to just use the toggling functions
 from the summary buffer to avoid getting nasty surprises. (For instance,
@@ -9919,43 +10368,84 @@ group.  Values in parenthesis are suggested sensible values.  Others are
 possible but those listed are probably sufficient for most people.
 
 @table @code
-@item gnus-treat-highlight-signature (t, last)
 @item gnus-treat-buttonize (t, integer)
 @item gnus-treat-buttonize-head (head)
-@item gnus-treat-emphasize (t, head, integer)
-@item gnus-treat-fill-article (t, integer)
+
+@xref{Article Buttons}.
+
+@item gnus-treat-capitalize-sentences (t, integer)
+@item gnus-treat-overstrike (t, integer)
 @item gnus-treat-strip-cr (t, integer)
-@item gnus-treat-hide-headers (head)
-@item gnus-treat-hide-boring-headers (head)
-@item gnus-treat-hide-signature (t, last)
-@item gnus-treat-hide-citation (t, integer)
-@item gnus-treat-hide-citation-maybe (t, integer)
-@item gnus-treat-strip-pgp (t, last, integer)
-@item gnus-treat-x-pgp-sig (head)
+@item gnus-treat-strip-headers-in-body (t, integer)
+@item gnus-treat-strip-leading-blank-lines (t, integer)
+@item gnus-treat-strip-multiple-blank-lines (t, integer)
 @item gnus-treat-strip-pem (t, last, integer)
-@item gnus-treat-highlight-headers (head)
-@item gnus-treat-highlight-citation (t, integer)
-@item gnus-treat-highlight-signature (t, last, integer)
-@item gnus-treat-date-ut (head)
-@item gnus-treat-date-local (head)
+@item gnus-treat-strip-pgp (t, last, integer)
+@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
+@item gnus-treat-unsplit-urls (t, integer)
+@item gnus-treat-decode-article-as-default-mime-charset (t, integer)
+
+@xref{Article Washing}.
+
 @item gnus-treat-date-english (head)
+@item gnus-treat-date-iso8601 (head)
 @item gnus-treat-date-lapsed (head)
+@item gnus-treat-date-local (head)
 @item gnus-treat-date-original (head)
-@item gnus-treat-date-iso8601 (head)
 @item gnus-treat-date-user-defined (head)
-@item gnus-treat-strip-headers-in-body (t, integer)
-@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
-@item gnus-treat-strip-leading-blank-lines (t, integer)
-@item gnus-treat-strip-multiple-blank-lines (t, integer)
-@item gnus-treat-overstrike (t, integer)
-@item gnus-treat-display-xface (head)
+@item gnus-treat-date-ut (head)
+
+@xref{Article Date}.
+
+@item gnus-treat-from-picon (head)
+@item gnus-treat-mail-picon (head)
+@item gnus-treat-newsgroups-picon (head)
+
+@xref{Picons}.
+
 @item gnus-treat-display-smileys (t, integer)
-@item gnus-treat-display-picons (head)
-@item gnus-treat-capitalize-sentences (t, integer)
+
+@item gnus-treat-body-boundary (head)
+
+@vindex gnus-body-boundary-delimiter
+Adds a delimiter between header and body, the string used as delimiter
+is controlled by @code{gnus-body-boundary-delimiter}.
+
+@xref{Smileys}.
+
+@item gnus-treat-display-xface (head)
+
+@xref{X-Face}.
+
+@item gnus-treat-emphasize (t, head, integer)
+@item gnus-treat-fill-article (t, integer)
 @item gnus-treat-fill-long-lines (t, integer)
+@item gnus-treat-hide-boring-headers (head)
+@item gnus-treat-hide-citation (t, integer)
+@item gnus-treat-hide-citation-maybe (t, integer)
+@item gnus-treat-hide-headers (head)
+@item gnus-treat-hide-signature (t, last)
+
+@xref{Article Hiding}.
+
+@item gnus-treat-highlight-citation (t, integer)
+@item gnus-treat-highlight-headers (head)
+@item gnus-treat-highlight-signature (t, last, integer)
+
+@xref{Article Highlighting}.
+
 @item gnus-treat-play-sounds
 @item gnus-treat-translate
-@item gnus-treat-decode-article-as-default-mime-charset
+@item gnus-treat-x-pgp-sig (head)
+
+@item gnus-treat-unfold-headers (head)
+@item gnus-treat-fold-headers (head)
+@item gnus-treat-fold-newsgroups (head)
+@item gnus-treat-leading-whitespace (head)
+
+@xref{Article Header}.
+
+
 @end table
 
 @vindex gnus-part-display-hook
@@ -10025,6 +10515,23 @@ only makes sense if you have buttonizing turned on.
 @findex gnus-article-prev-button
 Go to the previous button, if any (@code{gnus-article-prev-button}).
 
+@item R
+@kindex R (Article)
+@findex gnus-article-reply-with-original
+Send a reply to the current article and yank the current article
+(@code{gnus-article-reply-with-original}).  If given a prefix, make a
+wide reply.  If the region is active, only yank the text in the
+region.
+
+@item F
+@kindex F (Article)
+@findex gnus-article-followup-with-original
+Send a followup to the current article and yank the current article
+(@code{gnus-article-followup-with-original}).  If given a prefix, make
+a wide reply.  If the region is active, only yank the text in the
+region.
+
+
 @end table
 
 
@@ -10083,7 +10590,7 @@ Displayed when cited text may be hidden in the article buffer.
 @item h
 Displayed when headers are hidden in the article buffer.
 
-@item p 
+@item p
 Displayed when article is digitally signed or encrypted, and Gnus has
 hidden the security headers.  (N.B. does not tell anything about
 security status, i.e. good or bad signature.)
@@ -10129,23 +10636,25 @@ This is the delimiter mentioned above.  By default, it is @samp{^L}
 @cindex followup
 @cindex post
 @cindex using gpg
+@cindex using s/mime
+@cindex using smime
 
 @kindex C-c C-c (Post)
 All commands for posting and mailing will put you in a message buffer
 where you can edit the article all you like, before you send the
-article by pressing @kbd{C-c C-c}.  @xref{Top, , Top, message, The
+article by pressing @kbd{C-c C-c}.  @xref{Top, , Overview, message,
 Message Manual}.  Where the message will be posted/mailed to depends
 on your setup (@pxref{Posting Server}).
 
 @menu
 * Mail::                        Mailing and replying.
-* Posting Server::              What server should you post via?
+* Posting Server::              What server should you post and mail via?
 * 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.
 * Drafts::                      Postponing messages and rejected messages.
 * Rejected Articles::           What happens if the server doesn't like your article?
-* Using GPG::                   How to use GPG and MML to sign and encrypt messages
+* Signing and encrypting::      How to compose secure messages.
 @end menu
 
 Also see @pxref{Canceling and Superseding} for information on how to
@@ -10168,6 +10677,12 @@ headers will be included in the sequence they are matched.
 If non-@code{nil}, add a @code{to-list} group parameter to mail groups
 that have none when you do a @kbd{a}.
 
+@item gnus-confirm-mail-reply-to-news
+@vindex gnus-confirm-mail-reply-to-news
+If non-@code{nil}, Gnus requests confirmation when replying to news.
+If you find yourself never wanting to reply to mail, but occasionally
+press R anyway, this variable might be for you.
+
 @end table
 
 
@@ -10179,15 +10694,18 @@ When you press those magical @kbd{C-c C-c} keys to ship off your latest
 
 Thank you for asking.  I hate you.
 
-@vindex gnus-post-method
+It can be quite complicated.  
 
-It can be quite complicated.  Normally, Gnus will post using the same
-select method as you're reading from (which might be convenient if
-you're reading lots of groups from different private servers).
-However.  If the server you're reading from doesn't allow posting,
-just reading, you probably want to use some other server to post your
-(extremely intelligent and fabulously interesting) articles.  You can
-then set the @code{gnus-post-method} to some other method:
+@vindex gnus-post-method
+When posting news, Message usually invokes @code{message-send-news}
+(@pxref{News Variables, , News Variables, message, Message Manual}).
+Normally, Gnus will post using the same select method as you're
+reading from (which might be convenient if you're reading lots of
+groups from different private servers).  However.  If the server
+you're reading from doesn't allow posting, just reading, you probably
+want to use some other server to post your (extremely intelligent and
+fabulously interesting) articles.  You can then set the
+@code{gnus-post-method} to some other method:
 
 @lisp
 (setq gnus-post-method '(nnspool ""))
@@ -10208,6 +10726,23 @@ for posting.
 Finally, if you want to always post using the native select method,
 you can set this variable to @code{native}.
 
+When sending mail, Message invokes @code{message-send-mail-function}.
+The default function, @code{message-send-mail-with-sendmail}, pipes
+your article to the @code{sendmail} binary for further queuing and
+sending.  When your local system is not configured for sending mail
+using @code{sendmail}, and you have access to a remote @sc{smtp}
+server, you can set @code{message-send-mail-function} to
+@code{smtpmail-send-it} and make sure to setup the @code{smtpmail}
+package correctly.  An example:
+
+@lisp
+(setq message-send-mail-function 'smtpmail-send-it
+      smtpmail-default-smtp-server "YOUR SMTP HOST")
+@end lisp
+
+Other possible choises 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 Mail and Post
 @section Mail and Post
@@ -10270,6 +10805,10 @@ store the messages.  If you want to disable this completely, the
 @code{gnus-message-archive-group} variable should be @code{nil}, which
 is the default.
 
+For archiving interesting messages in a group you read, see the
+@kbd{B c} (@code{gnus-summary-copy-article}) command (@pxref{Mail
+Group Commands}).
+
 @vindex gnus-message-archive-method
 @code{gnus-message-archive-method} says what virtual server gnus is to
 use to store sent messages.  The default is:
@@ -10401,10 +10940,18 @@ of names).
 This variable can be used instead of @code{gnus-message-archive-group},
 but the latter is the preferred method.
 
-@item gnus-inews-mark-gcc-as-read
-@vindex gnus-inews-mark-gcc-as-read
+@item gnus-gcc-mark-as-read
+@vindex gnus-gcc-mark-as-read
 If non-@code{nil}, automatically mark @code{Gcc} articles as read.
 
+@item gnus-gcc-externalize-attachments
+@vindex gnus-gcc-externalize-attachments
+If @code{nil}, attach files as normal parts in Gcc copies; if a regexp
+and matches the Gcc group name, attach files as external parts; if it is
+@code{all}, attach local files as external parts; if it is other
+non-@code{nil}, the behavior is the same as @code{all}, but it may be
+changed in the future.
+
 @end table
 
 
@@ -10448,30 +10995,36 @@ signature and the @samp{What me?} @code{Organization} header.
 
 The first element in each style is called the @code{match}.  If it's a
 string, then Gnus will try to regexp match it against the group name.
-If it is the symbol @code{header}, then Gnus will look for header (the
-next element in the match) in the original article , and compare that to
-the last regexp in the match.  If it's a function symbol, that function
-will be called with no arguments.  If it's a variable symbol, then the
-variable will be referenced.  If it's a list, then that list will be
-@code{eval}ed.  In any case, if this returns a non-@code{nil} value,
-then the style is said to @dfn{match}.
-
-Each style may contain a arbitrary amount of @dfn{attributes}.  Each
+If it is the form @code{(header MATCH REGEXP)}, then Gnus will look in
+the original article for a header whose name is MATCH and compare that
+REGEXP.  MATCH and REGEXP are strings. If it's a function symbol, that
+function will be called with no arguments.  If it's a variable symbol,
+then the variable will be referenced.  If it's a list, then that list
+will be @code{eval}ed.  In any case, if this returns a non-@code{nil}
+value, then the style is said to @dfn{match}.
+
+Each style may contain an arbitrary amount of @dfn{attributes}.  Each
 attribute consists of a @code{(@var{name} @var{value})} pair.  The
 attribute name can be one of @code{signature}, @code{signature-file},
-@code{organization}, @code{address}, @code{name} or @code{body}.  The
-attribute name can also be a string.  In that case, this will be used as
-a header name, and the value will be inserted in the headers of the
-article; if the value is @code{nil}, the header name will be removed.
-If the attribute name is @code{eval}, the form is evaluated, and the
-result is thrown away.
+@code{x-face-file}, @code{address} (overriding
+@code{user-mail-address}), @code{name} (overriding
+@code{(user-full-name)}) or @code{body}.  The attribute name can also
+be a string or a symbol.  In that case, this will be used as a header
+name, and the value will be inserted in the headers of the article; if
+the value is @code{nil}, the header name will be removed.  If the
+attribute name is @code{eval}, the form is evaluated, and the result
+is thrown away.
 
 The attribute value can be a string (used verbatim), a function with
 zero arguments (the return value will be used), a variable (its value
 will be used) or a list (it will be @code{eval}ed and the return value
 will be used).  The functions and sexps are called/@code{eval}ed in the
 message buffer that is being set up.  The headers of the current article
-are available through the @code{message-reply-headers} variable.
+are available through the @code{message-reply-headers} variable, which
+is a vector of the following headers: number subject from date id
+references chars lines xref extra.
+
+@vindex message-reply-headers
 
 If you wish to check whether the message you are about to compose is
 meant to be a news article or a mail message, you can check the values
@@ -10491,13 +11044,16 @@ So here's a new example:
          (organization "People's Front Against MWM"))
         ("^rec.humor"
          (signature my-funny-signature-randomizer))
-        ((equal (system-name) "gnarly")
+        ((equal (system-name) "gnarly")  ;; A form
          (signature my-quote-randomizer))
-        ((message-news-p)
+        (message-news-p        ;; A function symbol
          (signature my-news-signature))
-        (header "to" "larsi.*org"
-                (Organization "Somewhere, Inc."))
-        ((posting-from-work-p)
+        (window-system         ;; A value symbol
+         ("X-Window-System" (format "%s" window-system)))
+        ;; If I'm replying to Larsi, set the Organization header.
+        ((header "from" "larsi.*org")
+         (Organization "Somewhere, Inc."))
+        ((posting-from-work-p) ;; A user defined function
          (signature-file "~/.work-signature")
          (address "user@@bar.foo")
          (body "You are fired.\n\nSincerely, your boss.")
@@ -10606,50 +11162,79 @@ The rejected articles will automatically be put in a special draft group
 (@pxref{Drafts}).  When the server comes back up again, you'd then
 typically enter that group and send all the articles off.
 
-@node Using GPG
-@section Using GPG
+@node Signing and encrypting
+@section Signing and encrypting
 @cindex using gpg
+@cindex using s/mime
+@cindex using smime
+
+Gnus can digitally sign and encrypt your messages, using vanilla PGP
+format or @sc{pgp/mime} or @sc{s/mime}.  For decoding such messages,
+see the @code{mm-verify-option} and @code{mm-decrypt-option} options
+(@pxref{Security}).
+
+For PGP, Gnus supports two external libraries, @sc{gpg.el} and
+@sc{Mailcrypt}, you need to install at least one of them.  The
+@sc{s/mime} support in Gnus requires the external program OpenSSL.
+
+Often, you would like to sign replies to people who send you signed
+messages.  Even more often, you might want to encrypt messages which
+are in reply to encrypted messages.  Gnus offers
+@code{gnus-message-replysign} to enable the former, and
+@code{gnus-message-replyencrypt} for the latter.  In addition, setting
+@code{gnus-message-replysignencrypted} (on by default) will sign
+automatically encrypted messages.
+
+Instructing MML to perform security operations on a @sc{mime} part is
+done using the @kbd{C-c C-m s} key map for signing and the @kbd{C-c
+C-m c} key map for encryption, as follows.
 
-Gnus has an ALPHA support to GPG that's provided by @file{gpg.el}. See
-@code{mm-verify-option} and @code{mm-decrypt-option} to enable Gnus to
-verify or decrypt messages accordingly.
+@table @kbd
 
-To use this correctly with GPG, you'll need the following lisp code in your
-@file{~/.emacs} or @file{~/.gnus}:
+@item C-c C-m s s
+@kindex C-c C-m s s
+@findex mml-secure-message-sign-smime
 
-@lisp
-(require 'gpg)
-(setq mml2015-use 'gpg)
-(setq gpg-temp-directory (expand-file-name "~/.gnupg/tmp"))
-@end lisp
+Digitally sign current message using @sc{s/mime}.
 
-The @code{gpg-temp-directory} need to point to a directory with permissions set
-to 700, for your own safety.
+@item C-c C-m s o
+@kindex C-c C-m s o
+@findex mml-secure-message-sign-pgp
 
-If you want to benefit of PGP2.6 compatibility, you might create a script named
-@file{gpg-2comp} with these instructions:
+Digitally sign current message using PGP.
 
-@example
-#!/bin/sh
-exec gpg --rfc1991 "$@@"
-@end example
+@item C-c C-m s p
+@kindex C-c C-m s p
+@findex mml-secure-message-sign-pgp
 
-If you don't want to use such compatibility, you can add the following line to
-your @file{~/.emacs} or @file{~/.gnus}:
+Digitally sign current message using @sc{pgp/mime}.
 
-@lisp
-(setq gpg-command-default-alist (quote ((gpg . "gpg") (gpg-2comp . "gpg"))))
-@end lisp
+@item C-c C-m c s
+@kindex C-c C-m c s
+@findex mml-secure-message-encrypt-smime
+
+Digitally encrypt current message using @sc{s/mime}.
+
+@item C-c C-m c o
+@kindex C-c C-m c o
+@findex mml-secure-message-encrypt-pgp
 
-To sign or encrypt your message you may choose to use the MML Security
-menu or @kbd{C-c C-m s p} to sign your message using PGP/MIME,
-@kbd{C-c C-m s s} to sign your message using S/MIME. There's also
-@kbd{C-c C-m c p} to encrypt your message with PGP/MIME and @kbd{C-c
-C-m c s} to encrypt using S/MIME. @xref{Security, ,Security, message,
-The Message Manual}.
+Digitally encrypt current message using PGP.
 
-Gnus will ask for your passphrase and then it will send your message, if
-you've typed it correctly.
+@item C-c C-m c p
+@kindex C-c C-m c p
+@findex mml-secure-message-encrypt-pgpmime
+
+Digitally encrypt current message using @sc{pgp/mime}.
+
+@item C-c C-m C-n
+@kindex C-c C-m C-n
+@findex mml-unsecure-message
+Remove security related MML tags from message.
+
+@end table
+
+Also @xref{Security, ,Security, message, Message Manual}.
 
 @node Select Methods
 @chapter Select Methods
@@ -10915,6 +11500,8 @@ configuration to the example above:
       (nntp-via-rlogin-command "ssh")
 @end lisp
 
+See also @code{nntp-via-rlogin-command-switches}.
+
 If you're behind a firewall, but have direct access to the outside world
 through a wrapper command like "runsocks", you could open a socksified
 telnet connection to the news server as follows:
@@ -11067,6 +11654,11 @@ Close the connections to all servers in the buffer
 Remove all marks to whether Gnus was denied connection from any servers
 (@code{gnus-server-remove-denials}).
 
+@item L
+@kindex L (Server)
+@findex gnus-server-offline-server
+Set server status to offline (@code{gnus-server-offline-server}).
+
 @end table
 
 
@@ -11086,7 +11678,7 @@ or it can read from a local spool.
 
 
 @node NNTP
-@subsection @sc{nntp}
+@subsection NNTP
 @cindex nntp
 
 Subscribing to a foreign group from an @sc{nntp} server is rather easy.
@@ -11306,6 +11898,21 @@ Five pre-made functions are supplied.  These functions can be grouped in
 two categories: direct connection functions (three pre-made), and
 indirect ones (two pre-made).
 
+@item nntp-prepare-post-hook
+@vindex nntp-prepare-post-hook
+A hook run just before posting an article.  If there is no
+@code{Message-ID} header in the article and the news server provides the
+recommended ID, it will be added to the article before running this
+hook.  It is useful to make @code{Cancel-Lock} headers even if you
+inhibit Gnus to add a @code{Message-ID} header, you could say:
+
+@lisp
+(add-hook 'nntp-prepare-post-hook 'canlock-insert-header)
+@end lisp
+
+Note that not all servers support the recommended ID.  This works for
+INN versions 2.3.0 and later, for instance.
+
 @item nntp-list-options
 @vindex nntp-list-options
 List of newsgroup name used for a option of the LIST command to restrict
@@ -11437,6 +12044,15 @@ you need to connect to a firewall machine first.
 @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}.  If you use
+@samp{ssh} for `nntp-via-rlogin-command', you may set this to
+@samp{("-C")} in order to compress all data connections, otherwise set
+this to @samp{("-t")} or @samp{("-C" "-t")} if the telnet command
+requires a pseudo-tty allocation on an intermediate host.
 @end table
 
 @item nntp-open-via-telnet-and-telnet
@@ -11632,7 +12248,6 @@ course.
 * Duplicates::                  Dealing with duplicated mail.
 * Not Reading Mail::            Using mail back ends for reading other files.
 * Choosing a Mail Back End::    Gnus can read a variety of mail formats.
-* Archiving Mail::              How to backup your mail.
 @end menu
 
 
@@ -11667,7 +12282,7 @@ mail, is that the transport mechanism has very little to do with how
 they want to treat a message.
 
 Many people subscribe to several mailing lists.  These are transported
-via SMTP, and are therefore mail.  But we might go for weeks without
+via @sc{smtp}, and are therefore mail.  But we might go for weeks without
 answering, or even reading these messages very carefully.  We may not
 need to save them because if we should need to read one again, they are
 archived somewhere else.
@@ -11814,6 +12429,20 @@ where re-spooling messages would put the messages, you can use
 @code{gnus-summary-respool-trace} and related commands (@pxref{Mail
 Group Commands}).
 
+@vindex nnmail-split-header-length-limit
+Header lines longer than the value of
+@code{nnmail-split-header-length-limit} are excluded from the split
+function.
+
+@vindex nnmail-mail-splitting-charset
+@vindex nnmail-mail-splitting-decodes
+By default the splitting codes MIME decodes headers so you can match
+on non-ASCII strings.  The @code{nnmail-mail-splitting-charset}
+variable specifies the default charset for decoding.  The behaviour
+can be turned off completely by binding
+@code{nnmail-mail-splitting-decodes} to nil, which is useful if you
+want to match articles based on the raw header data.
+
 Gnus gives you all the opportunity you could possibly want for shooting
 yourself in the foot.  Let's say you create a group that will contain
 all the mail you get from your boss.  And then you accidentally
@@ -12028,6 +12657,27 @@ This can be either the symbol @code{password} or the symbol @code{apop}
 and says what authentication scheme to use.  The default is
 @code{password}.
 
+@item :connection
+What stream to use for connecting to the server, this can be the symbol
+@code{ssl}, the symbol @code{tls} or others.  The default is @code{nil}
+and use insecure connections.  Note that for SSL/TLS, you need external
+programs and libraries:
+
+@itemize @bullet
+@item
+@dfn{ssl:} Connect through SSL@. Requires OpenSSL (the program
+@samp{openssl}) or SSLeay (@samp{s_client}) as well as the external
+library @samp{ssl.el}.
+@item
+@dfn{starttls:} Connect via the STARTTLS extension (similar to SSL)@.
+Requires the external library @samp{starttls.el} and program
+@samp{starttls}.
+@end itemize
+
+@item :leave
+Non-@code{nil} if mail is to be left on the server and UIDL used for
+message retrieval.  The default is @code{nil}.
+
 @end table
 
 If the @code{:program} and @code{:function} keywords aren't specified,
@@ -12098,6 +12748,9 @@ some reason or other, Gnus let you treat it similar to a POP server
 and fetches articles from a given @sc{imap} mailbox.  @xref{IMAP}, for
 more information.
 
+Note that for the Kerberos, GSSAPI, SSL/TLS and STARTTLS support you
+may need external programs and libraries, @xref{IMAP}.
+
 Keywords:
 
 @table @code
@@ -12107,7 +12760,7 @@ The name of the @sc{imap} server.  The default is taken from the
 
 @item :port
 The port number of the @sc{imap} server.  The default is @samp{143}, or
-@samp{993} for SSL connections.
+@samp{993} for SSL/TLS connections.
 
 @item :user
 The user name to give to the @sc{imap} server.  The default is the login
@@ -12164,13 +12817,13 @@ UNDELETED}, is probably the best choice for most people, but if you
 sometimes peek in your mailbox with a @sc{imap} client and mark some
 articles as read (or; SEEN) you might want to set this to @samp{nil}.
 Then all articles in the mailbox is fetched, no matter what.  For a
-complete list of predicates, see RFC 2060 Â§6.4.4.
+complete list of predicates, see RFC 2060 section 6.4.4.
 
 @item :fetchflag
 How to flag fetched articles on the server, the default @samp{\Deleted}
 will mark them as deleted, an alternative would be @samp{\Seen} which
 would simply mark them as read.  These are the two most likely choices,
-but more flags are defined in RFC 2060 Â§2.3.2.
+but more flags are defined in RFC 2060 section 2.3.2.
 
 @item :dontexpunge
 If non-nil, don't remove all articles marked as deleted in the mailbox
@@ -12187,16 +12840,14 @@ An example @sc{imap} mail source:
 @end lisp
 
 @item webmail
-Get mail from a webmail server, such as www.hotmail.com,
-webmail.netscape.com, www.netaddress.com, www.my-deja.com.
-
-NOTE: Now mail.yahoo.com provides POP3 service, so @sc{pop} mail source
-is suggested.
+Get mail from a webmail server, such as @uref{www.hotmail.com},
+@uref{webmail.netscape.com}, @uref{www.netaddress.com},
+@uref{mail.yahoo..com}.
 
 NOTE: Webmail largely depends cookies. A "one-line-cookie" patch is
 required for url "4.0pre.46".
 
-WARNING: Mails may lost.  NO WARRANTY.
+WARNING: Mails may be lost.  NO WARRANTY.
 
 Keywords:
 
@@ -12423,6 +13074,16 @@ If non-@code{nil}, put the @code{Message-ID}s of articles imported into
 the back end (via @code{Gcc}, for instance) into the mail duplication
 discovery cache.  The default is @code{nil}.
 
+@item nnmail-cache-ignore-groups
+@vindex nnmail-cache-ignore-groups
+This can be a regular expression or a list of regular expressions.
+Group names that match any of the regular expressions will never be
+recorded in the @code{Message-ID} cache.
+
+This can be useful, for example, when using Fancy Splitting
+(@pxref{Fancy Mail Splitting}) together with the function
+@code{nnmail-split-fancy-with-parent}.
+
 @end table
 
 
@@ -12582,7 +13243,9 @@ To use this feature, you have to set @code{nnmail-treat-duplicates} and
 you can include @code{nnmail-split-fancy-with-parent} using the colon
 feature, like so:
 @lisp
-(setq nnmail-split-fancy
+(setq nnmail-treat-duplicates 'warn     ; or 'delete
+      nnmail-cache-accepted-message-ids t
+      nnmail-split-fancy
       '(| (: nnmail-split-fancy-with-parent)
           ;; other splits go here
         ))
@@ -12607,6 +13270,13 @@ When @code{nnmail-cache-accepted-message-ids} is non-@code{nil}, Gnus
 also records the message ids of moved articles, so that the followup
 messages goes into the new group.
 
+Also see the variable @code{nnmail-cache-ignore-groups} if you don't
+want certain groups to be recorded in the cache.  For example, if all
+outgoing messages are written to an `outgoing' group, you could set
+@code{nnmail-cache-ignore-groups} to match that group name.
+Otherwise, answers to all your messages would end up in the
+`outgoing' group.
+
 
 @node Group Mail Splitting
 @subsection Group Mail Splitting
@@ -12691,7 +13361,7 @@ may use it for only some of them, by using @code{nnmail-split-fancy}
 splits like this:
 
 @lisp
-(: gnus-mlsplt-fancy GROUPS NO-CROSSPOST CATCH-ALL)
+(: gnus-group-split-fancy GROUPS NO-CROSSPOST CATCH-ALL)
 @end lisp
 
 @var{groups} may be a regular expression or a list of group names whose
@@ -12893,23 +13563,43 @@ change the expiry period (@pxref{Group Parameters}).
 
 @vindex nnmail-expiry-target
 The normal action taken when expiring articles is to delete them.
-However, in some circumstances it might make more sense to move them to
-other groups instead of deleting them.  The variable @code{nnmail-expiry-target}
-(and the @code{expiry-target} group parameter) controls this.  The
-variable supplies a default value for all groups, which can be
-overridden for specific groups by the group parameter.
-default value is @code{delete}, but this can also be a string (which
-should be the name of the group the message should be moved to), or a
-function (which will be called in a buffer narrowed to the message in
-question, and with the name of the group being moved from as its
-parameter) which should return a target -- either a group name or
-@code{delete}.
+However, in some circumstances it might make more sense to move them
+to other groups instead of deleting them.  The variable
+@code{nnmail-expiry-target} (and the @code{expiry-target} group
+parameter) controls this.  The variable supplies a default value for
+all groups, which can be overridden for specific groups by the group
+parameter.  default value is @code{delete}, but this can also be a
+string (which should be the name of the group the message should be
+moved to), or a function (which will be called in a buffer narrowed to
+the message in question, and with the name of the group being moved
+from as its parameter) which should return a target -- either a group
+name or @code{delete}.
 
 Here's an example for specifying a group name:
 @lisp
 (setq nnmail-expiry-target "nnml:expired")
 @end lisp
 
+@findex nnmail-fancy-expiry-target
+@vindex nnmail-fancy-expiry-targets
+Gnus provides a function @code{nnmail-fancy-expiry-target} which will
+expire mail to groups according to the variable
+@code{nnmail-fancy-expiry-targets}.  Here's an example:
+
+@lisp
+ (setq nnmail-expiry-target 'nnmail-fancy-expiry-target
+       nnmail-fancy-expiry-targets
+       '((to-from "boss" "nnfolder:Work")
+         ("subject" "IMPORTANT" "nnfolder:IMPORTANT.%Y.%b")
+         ("from" ".*" "nnfolder:Archive-%Y")))
+@end lisp
+
+With this setup, any mail that has @code{IMPORTANT} in its Subject
+header and was sent in the year @code{YYYY} and month @code{MMM}, will
+get expired to the group @code{nnfolder:IMPORTANT.YYYY.MMM}. If its
+From or To header contains the string @code{boss}, it will get expired
+to @code{nnfolder:Work}. All other mail will get expired to
+@code{nnfolder:Archive-YYYY}.
 
 @vindex nnmail-keep-last-article
 If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
@@ -12988,6 +13678,12 @@ cleaning up the headers.  Functions that can be used include:
 Clear leading white space that ``helpful'' listservs have added to the
 headers to make them look nice.  Aaah.
 
+(Note that this function works on both the header on the body of all
+messages, so it is a potentially dangerous function to use (if a body
+of a message contains something that looks like a header line).  So
+rather than fix the bug, it is of course the right solution to make it
+into a feature by documenting it.)
+
 @item nnmail-remove-list-identifiers
 @findex nnmail-remove-list-identifiers
 Some list servers add an identifier---for example, @samp{(idm)}---to the
@@ -13128,10 +13824,13 @@ Gnus will read the mail spool when you activate a mail group.  The mail
 file is first copied to your home directory.  What happens after that
 depends on what format you want to store your mail in.
 
-There are five different mail back ends in the standard Gnus, and more
+There are six different mail back ends in the standard Gnus, and more
 back ends are available separately.  The mail back end most people use
-(because it is the fastest and most flexible) is @code{nnml}
-(@pxref{Mail Spool}).
+(because it is possibly the fastest) is @code{nnml} (@pxref{Mail
+Spool}).  You might notice that only five back ends are listed below;
+@code{nnmaildir}'s documentation has not yet been completely
+incorporated into this manual.  Until it is, you can find it at
+@uref{http://multivac.cwru.edu./nnmaildir/}.
 
 @menu
 * Unix Mail Box::               Using the (quite) standard Un*x mbox.
@@ -13232,10 +13931,11 @@ to trudge through a big mbox file just to read your new mail.
 
 @code{nnml} is probably the slowest back end when it comes to article
 splitting.  It has to create lots of files, and it also generates
-@sc{nov} databases for the incoming mails.  This makes it the fastest
-back end when it comes to reading mail.
+@sc{nov} databases for the incoming mails.  This makes it possibly the
+fastest back end when it comes to reading mail.
 
 @cindex self contained nnml servers
+@cindex marks
 When the marks file is used (which it is by default), @code{nnml}
 servers have the property that you may backup them using @code{tar} or
 similar, and later be able to restore them into Gnus (by adding the
@@ -13246,6 +13946,10 @@ Individual @code{nnml} groups are also possible to backup, use @kbd{G m}
 to restore the group (after restoring the backup into the nnml
 directory).
 
+If for some reason you believe your @file{.marks} files are screwed
+up, you can just delete them all.  Gnus will then correctly regenerate
+them next time it starts.
+
 Virtual server settings:
 
 @table @code
@@ -13290,7 +13994,12 @@ default is @code{nil}.
 
 @item nnml-marks-file-name
 @vindex nnml-marks-file-name
-The name of the @sc{marks} files.  The default is @file{.marks}.
+The name of the @dfn{marks} files.  The default is @file{.marks}.
+
+@item nnml-use-compressed-files
+@vindex nnml-use-compressed-files
+If non-@code{nil}, @code{nnml} will allow using compressed message
+files.
 
 @end table
 
@@ -13351,6 +14060,7 @@ will add extra headers to keep track of article numbers and arrival
 dates.
 
 @cindex self contained nnfolder servers
+@cindex marks
 When the marks file is used (which it is by default), @code{nnfolder}
 servers have the property that you may backup them using @code{tar} or
 similar, and later be able to restore them into Gnus (by adding the
@@ -13563,6 +14273,62 @@ messages, @code{nnfolder} is not the best choice, but if you receive
 only a moderate amount of mail, @code{nnfolder} is probably the most
 friendly mail back end all over.
 
+@item nnmaildir
+
+@code{nnmaildir} is largely similar to @code{nnml}, with some notable
+differences.  Each message is stored in a separate file, but the
+filename is unrelated to the article number in Gnus.  @code{nnmaildir}
+also stores the equivalent of @code{nnml}'s overview files in one file
+per article, so it uses about twice as many inodes as @code{nnml}.  (Use
+@code{df -i} to see how plentiful your inode supply is.)  If this slows
+you down or takes up very much space, consider switching to ReiserFS
+(@uref{http://www.namesys.com/}) or another non-block-structured
+filesystem.
+
+Since maildirs don't require locking for delivery, the maildirs you use
+as groups can also be the maildirs your mail is directly delivered to.
+This means you can skip Gnus's mail splitting if your mail is already
+organized into different mailboxes during delivery.  A @code{directory}
+entry in @code{mail-sources} would have a similar effect, but would
+require one set of mailboxes for spooling deliveries (in mbox format,
+thus damaging message bodies), and another set to be used as groups (in
+whatever format you like).  A maildir has a built-in spool, in the
+@code{new/} subdirectory.  Beware that currently, mail moved from
+@code{new/} to @code{cur/} instead of via mail splitting will undergo
+treatment such as duplicate checking.
+
+An article will not necessarily keep the same number across Gnus
+sessions; articles are renumbered starting from 1 for each Gnus session
+(more precisely, each time you open the @code{nnmaildir} server).  This
+way, you don't get gaps in your article number ranges, and when entering
+large groups, Gnus is likely to give a more accurate article count.  The
+price is that @code{nnmaildir} doesn't work with the cache or agent.
+This will probably be changed in the future.
+
+@code{nnmaildir} stores article marks for a given group in the
+corresponding maildir, in a way designed so that it's easy to manipulate
+them from outside Gnus.  You can tar up a maildir, unpack it somewhere
+else, and still have your marks.  @code{nnml} also stores marks, but
+it's not as easy to work with them from outside Gnus as with
+@code{nnmaildir}.
+
+For configuring expiry and other things, @code{nnmaildir} uses group
+parameters slightly different from those of other mail backends.
+
+@code{nnmaildir} uses a significant amount of memory to speed things up.
+(It keeps in memory some of the things that @code{nnml} stores in files
+and that @code{nnmh} repeatedly parses out of message files.)  If this
+is a problem for you, you can set the @code{nov-cache-size} group
+parameter to somthing small (0 would probably not work, but 1 probably
+would) to make it use less memory.
+
+Startup and shutdown are likely to be slower with @code{nnmaildir} than
+with other backends.  Everything in between is likely to be faster,
+depending in part on your filesystem.
+
+@code{nnmaildir} does not use @code{nnoo}, so you cannot use @code{nnoo}
+to write an @code{nnmaildir}-derived backend.
+
 @end table
 
 
@@ -13594,6 +14360,7 @@ Gnus has been getting a bit of a collection of back ends for providing
 interfaces to these sources.
 
 @menu
+* Archiving Mail::              
 * Web Searches::                Creating groups from articles that match a string.
 * Slashdot::                    Reading the Slashdot comments.
 * Ultimate::                    The Ultimate Bulletin Board systems.
@@ -13621,37 +14388,40 @@ leisure from your local disk.  No more World Wide Wait for you.
 @cindex archiving mail
 @cindex backup of mail
 
-Some of the back ends, notably nnml and nnfolder, now actually store
-the article marks with each group.  For these servers, archiving and
-restoring a group while preserving marks is fairly simple.
+Some of the back ends, notably @code{nnml}, @code{nnfolder}, and
+@code{nnmaildir}, now actually store the article marks with each group.
+For these servers, archiving and restoring a group while preserving
+marks is fairly simple.
 
 (Preserving the group level and group parameters as well still
-requires ritual dancing and sacrifices to the @code{.newsrc.eld} deity
+requires ritual dancing and sacrifices to the @file{.newsrc.eld} deity
 though.)
 
-To archive an entire @code{nnml} or @code{nnfolder} server, take a
-recursive copy of the server directory.  There is no need to shut down
-Gnus, so archiving may be invoked by @code{cron} or similar.  You
-restore the data by restoring the directory tree, and adding a server
-definition pointing to that directory in Gnus. The @ref{Article
-Backlog}, @ref{Asynchronous Fetching} and other things might interfer
-with overwriting data, so you may want to shut down Gnus before you
-restore the data.
-
-It is also possible to archive individual @code{nnml} or
-@code{nnfolder} groups, while preserving marks.  For @code{nnml}, you
-copy all files in the group's directory.  For @code{nnfolder} you need
-to copy both the base folder file itself (@code{FOO}, say), and the
-marks file (@code{FOO.mrk} in this example).  Restoring the group is
-done with @kbd{G m} from the Group buffer.  The last step makes Gnus
-notice the new directory.
+To archive an entire @code{nnml}, @code{nnfolder}, or @code{nnmaildir}
+server, take a recursive copy of the server directory.  There is no need
+to shut down Gnus, so archiving may be invoked by @code{cron} or
+similar.  You restore the data by restoring the directory tree, and
+adding a server definition pointing to that directory in Gnus. The
+@ref{Article Backlog}, @ref{Asynchronous Fetching} and other things
+might interfer with overwriting data, so you may want to shut down Gnus
+before you restore the data.
+
+It is also possible to archive individual @code{nnml},
+@code{nnfolder}, or @code{nnmaildir} groups, while preserving marks.
+For @code{nnml} or @code{nnmaildir}, you copy all files in the group's
+directory.  For @code{nnfolder} you need to copy both the base folder
+file itself (@file{FOO}, say), and the marks file (@file{FOO.mrk} in
+this example). Restoring the group is done with @kbd{G m} from the Group
+buffer.  The last step makes Gnus notice the new directory.
+@code{nnmaildir} notices the new directory automatically, so @kbd{G m}
+is unnecessary in that case.
 
 @node Web Searches
 @subsection Web Searches
 @cindex nnweb
-@cindex DejaNews
-@cindex Alta Vista
-@cindex InReference
+@cindex Google
+@cindex dejanews
+@cindex gmane
 @cindex Usenet searches
 @cindex searching the Usenet
 
@@ -13674,7 +14444,7 @@ pattern), you are likely to get the articles ordered in a different
 manner.  Not even using duplicate suppression (@pxref{Duplicate
 Suppression}) will help, since @code{nnweb} doesn't even know the
 @code{Message-ID} of the articles before reading them using some search
-engines (DejaNews, for instance).  The only possible way to keep track
+engines (Google, for instance).  The only possible way to keep track
 of which articles you've read is by scoring on the @code{Date}
 header---mark all articles posted before the last date you read the
 group as read.
@@ -13695,8 +14465,8 @@ Virtual server variables:
 @item nnweb-type
 @vindex nnweb-type
 What search engine type is being used.  The currently supported types
-are @code{dejanews}, @code{dejanewsold}, @code{altavista} and
-@code{reference}.
+are @code{google}, @code{dejanews}, and @code{gmane}. Note that
+@code{dejanews} is an alias to @code{google}.
 
 @item nnweb-search
 @vindex nnweb-search
@@ -13705,7 +14475,7 @@ The search string to feed to the search engine.
 @item nnweb-max-hits
 @vindex nnweb-max-hits
 Advisory maximum number of hits per search to display.  The default is
-100.
+999.
 
 @item nnweb-type-definition
 @vindex nnweb-type-definition
@@ -13922,7 +14692,7 @@ the summary buffer.
 
 (defun gnus-user-format-function-X (header)
   (let ((descr
-        (assq nnrss-description-field (mail-header-extra header))))
+         (assq nnrss-description-field (mail-header-extra header))))
     (if descr (concat "\n\t" (cdr descr)) "")))
 @end lisp
 
@@ -13978,8 +14748,9 @@ Put that in your @file{.emacs} file, and hitting links in w3-rendered
 @sc{html} in the Gnus article buffers will use @code{browse-url} to
 follow the link.
 
+
 @node IMAP
-@section @sc{imap}
+@section IMAP
 @cindex nnimap
 @cindex @sc{imap}
 
@@ -13989,23 +14760,24 @@ server is much similar to connecting to a news server, you just
 specify the network address of the server.
 
 @sc{imap} has two properties.  First, @sc{imap} can do everything that
-POP can, it can hence be viewed as POP++.  Secondly, @sc{imap} is a
+POP can, it can hence be viewed as a POP++.  Secondly, @sc{imap} is a
 mail storage protocol, similar to @sc{nntp} being a news storage
-protocol.  (@sc{imap} offers more features than @sc{nntp} because news
-is more or less read-only whereas mail is read-write.)
+protocol -- however, @sc{imap} offers more features than @sc{nntp}
+because news is more or less read-only whereas mail is read-write.
 
-If you want to use @sc{imap} as POP++, use an imap entry in
-mail-sources.  With this, Gnus will fetch mails from the @sc{imap}
-server and store them on the local disk.  This is not the usage
-described in this section.  @xref{Mail Sources}.
+If you want to use @sc{imap} as a POP++, use an imap entry in
+@code{mail-sources}.  With this, Gnus will fetch mails from the
+@sc{imap} server and store them on the local disk.  This is not the
+usage described in this section--@xref{Mail Sources}.
 
 If you want to use @sc{imap} as a mail storage protocol, use an nnimap
-entry in gnus-secondary-select-methods.  With this, Gnus will
+entry in @code{gnus-secondary-select-methods}.  With this, Gnus will
 manipulate mails stored on the @sc{imap} server.  This is the kind of
 usage explained in this section.
 
 A server configuration in @code{~/.gnus} with a few @sc{imap} servers
-might look something like this:
+might look something like the following. (Note that for SSL/TLS, you
+need external programs and libraries, see below.)
 
 @lisp
 (setq gnus-secondary-select-methods
@@ -14046,7 +14818,7 @@ server name if not specified.
 @vindex nnimap-server-port
 Port on server to contact.  Defaults to port 143, or 993 for SSL.
 
-Note that this should be a integer, example server specification:
+Note that this should be an integer, example server specification:
 
 @lisp
 (nnimap "mail.server.com"
@@ -14078,8 +14850,8 @@ Example server specification:
 @vindex nnimap-stream
 The type of stream used to connect to your server.  By default, nnimap
 will detect and automatically use all of the below, with the exception
-of SSL. (SSL is being replaced by STARTTLS, which can be automatically
-detected, but it's not widely deployed yet).
+of SSL/TLS. (@sc{imap} over SSL/TLS is being replaced by STARTTLS, which
+can be automatically detected, but it's not widely deployed yet.)
 
 Example server specification:
 
@@ -14092,17 +14864,18 @@ Please note that the value of @code{nnimap-stream} is a symbol!
 
 @itemize @bullet
 @item
-@dfn{gssapi:} Connect with GSSAPI (usually kerberos 5). Requires the
+@dfn{gssapi:} Connect with GSSAPI (usually Kerberos 5). Requires the
 @samp{imtest} program.
 @item
-@dfn{kerberos4:} Connect with kerberos 4. Requires the @samp{imtest} program.
+@dfn{kerberos4:} Connect with Kerberos 4. Requires the @samp{imtest} program.
 @item
 @dfn{starttls:} Connect via the STARTTLS extension (similar to
-SSL). Requires the external library @samp{starttls.el} and program
+SSL).  Requires the external library @samp{starttls.el} and program
 @samp{starttls}.
 @item
-@dfn{ssl:} Connect through SSL. Requires OpenSSL (the
-program @samp{openssl}) or SSLeay (@samp{s_client}).
+@dfn{ssl:} Connect through SSL.  Requires OpenSSL (the program
+@samp{openssl}) or SSLeay (@samp{s_client}) as well as the external
+library @samp{ssl.el}.
 @item
 @dfn{shell:} Use a shell command to start @sc{imap} connection.
 @item
@@ -14115,7 +14888,7 @@ using @samp{imtest} from Cyrus IMAPD < 2.0.14 (which includes version
 1.5.x and 1.6.x) you need to frob @code{imap-process-connection-type}
 to make @code{imap.el} use a pty instead of a pipe when communicating
 with @samp{imtest}.  You will then suffer from a line length
-restrictions on IMAP commands, which might make Gnus seem to hang
+restrictions on @sc{imap} commands, which might make Gnus seem to hang
 indefinitely if you have many articles in a mailbox.  The variable
 @code{imap-kerberos4-program} contain parameters to pass to the imtest
 program.
@@ -14127,7 +14900,8 @@ and nnimap support it too - altough the most recent versions of
 SSLeay, 0.9.x, are known to have serious bugs making it
 useless. Earlier versions, especially 0.8.x, of SSLeay are known to
 work. The variable @code{imap-ssl-program} contain parameters to pass
-to OpenSSL/SSLeay.
+to OpenSSL/SSLeay.  You also need @samp{ssl.el} (from the W3
+distribution, for instance).
 
 @vindex imap-shell-program
 @vindex imap-shell-host
@@ -14151,13 +14925,13 @@ Please note that the value of @code{nnimap-authenticator} is a symbol!
 
 @itemize @bullet
 @item
-@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Require
+@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Requires
 external program @code{imtest}.
 @item
-@dfn{kerberos4:} Kerberos authentication. Require external program
+@dfn{kerberos4:} Kerberos 4 authentication. Requires external program
 @code{imtest}.
 @item
-@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Require
+@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Requires
 external library @code{digest-md5.el}.
 @item
 @dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
@@ -14174,7 +14948,7 @@ Unlike Parmenides the @sc{imap} designers has decided that things that
 doesn't exist actually does exist.  More specifically, @sc{imap} has
 this concept of marking articles @code{Deleted} which doesn't actually
 delete them, and this (marking them @code{Deleted}, that is) is what
-nnimap does when you delete a article in Gnus (with @kbd{G DEL} or
+nnimap does when you delete a article in Gnus (with @kbd{B DEL} or
 similar).
 
 Since the articles aren't really removed when we mark them with the
@@ -14206,11 +14980,12 @@ articles or not.
 @item nnimap-importantize-dormant
 @vindex nnimap-importantize-dormant
 
-If non-nil, marks dormant articles as ticked (as well), for other IMAP
-clients. Within Gnus, dormant articles will naturally still (only) be
-marked as ticked.  This is to make dormant articles stand out, just
-like ticked articles, in other IMAP clients. (In other words, Gnus has
-two ``Tick'' marks and IMAP has only one.)
+If non-nil (the default), marks dormant articles as ticked (as well),
+for other @sc{imap} clients. Within Gnus, dormant articles will
+naturally still (only) be marked as dormant.  This is to make dormant
+articles stand out, just like ticked articles, in other @sc{imap}
+clients. (In other words, Gnus has two ``Tick'' marks and @sc{imap}
+has only one.)
 
 Probably the only reason for frobing this would be if you're trying
 enable per-user persistant dormant flags, using something like:
@@ -14229,7 +15004,7 @@ as ticked for other users.
 @cindex Expunging
 @vindex nnimap-expunge-search-string
 
-This variable contain the IMAP search command sent to server when
+This variable contain the @sc{imap} search command sent to server when
 searching for articles eligible for expiring.  The default is
 @code{"UID %s NOT SINCE %s"}, where the first @code{%s} is replaced by
 UID set and the second @code{%s} is replaced by a date.
@@ -14258,7 +15033,7 @@ variable @code{nntp-authinfo-file} for exact syntax; also see
 
 
 @node Splitting in IMAP
-@subsection Splitting in @sc{imap}
+@subsection Splitting in IMAP
 @cindex splitting imap mail
 
 Splitting is something Gnus users has loved and used for years, and now
@@ -14351,7 +15126,7 @@ This variable can also have a function as its value, the function will
 be called with the headers narrowed and should return a group where it
 thinks the article should be split to.  See @code{nnimap-split-fancy}.
 
-The splitting code tries to create mailboxes if it need too.
+The splitting code tries to create mailboxes if it needs to.
 
 To allow for different split rules on different virtual servers, and
 even different split rules in different inboxes on the same server,
@@ -14413,7 +15188,7 @@ Nnmail equivalent: @code{nnmail-split-fancy}.
 @end table
 
 @node Editing IMAP ACLs
-@subsection Editing @sc{imap} ACLs
+@subsection Editing IMAP ACLs
 @cindex editing imap acls
 @cindex Access Control Lists
 @cindex Editing @sc{imap} ACLs
@@ -14609,13 +15384,46 @@ Forwarded articles.
 Netscape mail boxes.
 
 @item mime-parts
-MIME multipart messages.
+@sc{mime} multipart messages.
 
 @item standard-digest
 The standard (RFC 1153) digest format.
 
+@item mime-digest
+A @sc{mime} digest of messages.
+
+@item lanl-gov-announce
+Announcement messages from LANL Gov Announce.
+
+@item rfc822-forward
+A message forwarded according to RFC822.
+
+@item outlook
+The Outlook mail box.
+
+@item oe-dbx
+The Outlook Express dbx mail box.
+
+@item exim-bounce
+A bounce message from the Exim MTA.
+
+@item forward
+A message forwarded according to informal rules.
+
+@item rfc934
+An RFC934-forwarded message.
+
+@item mailman
+A mailman digest.
+
+@item clari-briefs
+A digest of Clarinet brief news items.
+
 @item slack-digest
 Non-standard digest format---matches most things, but does it badly.
+
+@item mail-in-mail
+The last resort.
 @end table
 
 You can also use the special ``file type'' @code{guess}, which means
@@ -14646,8 +15454,8 @@ Virtual server variables:
 This should be one of @code{mbox}, @code{babyl}, @code{digest},
 @code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
 @code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
-@code{slack-digest}, @code{clari-briefs}, @code{nsmail},
-@code{outlook}, @code{oe-dbx}, and @code{mailman} or @code{guess}.
+@code{slack-digest}, @code{clari-briefs}, @code{nsmail}, @code{outlook},
+@code{oe-dbx}, @code{mailman}, and @code{mail-in-mail} or @code{guess}.
 
 @item nndoc-post-type
 @vindex nndoc-post-type
@@ -14971,7 +15779,7 @@ Regular expression matching @sc{soup} reply packets in
 
 
 @node SOUP Groups
-@subsubsection @sc{soup} Groups
+@subsubsection SOUP Groups
 @cindex nnsoup
 
 @code{nnsoup} is the back end for reading @sc{soup} packets.  It will
@@ -15102,7 +15910,7 @@ For instance, an article with this @code{Newsgroups} header:
 Newsgroups: alt.religion.emacs
 @end example
 
-will get this @code{From} header inserted:
+will get this @code{To} header inserted:
 
 @example
 To: alt-religion-emacs@@GATEWAY
@@ -15176,9 +15984,12 @@ regexp to match component groups.
 
 All marks in the virtual group will stick to the articles in the
 component groups.  So if you tick an article in a virtual group, the
-article will also be ticked in the component group from whence it came.
-(And vice versa---marks from the component groups will also be shown in
-the virtual group.)
+article will also be ticked in the component group from whence it
+came.  (And vice versa---marks from the component groups will also be
+shown in the virtual group.). To create an empty virtual group, run
+@kbd{G V} (@code{gnus-group-make-empty-virtual}) in the group buffer
+and edit the method regexp with @kbd{M-e}
+(@code{gnus-group-edit-group-method})
 
 Here's an example @code{nnvirtual} method that collects all Andrea Dworkin
 newsgroups into one, big, happy newsgroup:
@@ -15233,9 +16044,12 @@ there is typically no sure way for the component back end to know this,
 and in that case @code{nnvirtual} tells Gnus that the article came from a
 not-news back end.  (Just to be on the safe side.)
 
-@kbd{C-c C-t} in the message buffer will insert the @code{Newsgroups}
+@kbd{C-c C-n} in the message buffer will insert the @code{Newsgroups}
 line from the article you respond to in these cases.
 
+@code{nnvirtual} groups do not inherit anything but articles and marks
+from component groups---group parameters, for instance, are not
+inherited. 
 
 
 @node Kibozed Groups
@@ -15323,11 +16137,11 @@ that has full connection to the net.  Go ahead.  I'll still be waiting
 here.
 
 @item
-Then, put the following magical incantation at the end of your
-@file{.gnus.el} file:
+Then, put the following magical incantation in your @file{.gnus.el}
+file:
 
 @lisp
-(gnus-agentize)
+(setq gnus-agent t)
 @end lisp
 @end itemize
 
@@ -15557,13 +16371,13 @@ with the predicate then defined as:
 
 or you could append your predicate to the predefined
 @code{gnus-category-predicate-alist} in your @file{~/.gnus.el} or
-wherever.  (Note: this would have to be at a point *after*
-@code{gnus-agent} has been loaded via @code{(gnus-agentize)})
+wherever. 
 
 @lisp
+(require 'gnus-agent)
 (setq  gnus-category-predicate-alist
   (append gnus-category-predicate-alist
-        '((old . my-article-old-p))))
+         '((old . my-article-old-p))))
 @end lisp
 
 and simply specify your predicate as:
@@ -15828,12 +16642,12 @@ toggles the plugged/unplugged state of the Gnus Agent.
 * Server Agent Commands::       
 @end menu
 
-You can run a complete batch fetch from the command line with the
+You can run a complete batch command from the command line with the
 following incantation:
 
-@cindex gnus-agent-batch-fetch
+@cindex gnus-agent-batch
 @example
-$ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
+$ emacs -batch -l ~/.gnus.el -f gnus-agent-batch
 @end example
 
 
@@ -15861,9 +16675,9 @@ Fetch all eligible articles in all groups
 
 @item J S
 @kindex J S (Agent Group)
-@findex gnus-group-send-drafts
-Send all sendable messages in the draft group
-(@code{gnus-group-send-drafts}).  @xref{Drafts}.
+@findex gnus-group-send-queue
+Send all sendable messages in the queue group
+(@code{gnus-group-send-queue}).  @xref{Drafts}.
 
 @item J a
 @kindex J a (Agent Group)
@@ -15917,7 +16731,7 @@ Mark all undownloaded articles as read (@code{gnus-agent-catchup}).
 @kindex J u (Agent Summary)
 @findex gnus-agent-summary-fetch-group
 Download all downloadable articles in the current group
-(@code{gnus-agent-summary-fetch-group}). 
+(@code{gnus-agent-summary-fetch-group}).
 
 @end table
 
@@ -15958,12 +16772,30 @@ whenever you feel that you're running out of space.  It's not
 particularly fast or efficient, and it's not a particularly good idea to
 interrupt it (with @kbd{C-g} or anything else) once you've started it.
 
+@code{gnus-agent-expire-days} can also be a list of regexp/day pairs.
+The regexps will be matched against group names to allow differing
+expiry in different groups.
+
+@lisp
+(setq gnus-agent-expire-days
+      '(("alt\\." 7)
+        (".*binary" 1)
+        ("." 21)))
+@end lisp
+
+If you use the list form, the last element must always be the default
+method---it must always match all groups.
+
 @vindex gnus-agent-expire-all
-if @code{gnus-agent-expire-all} is non-@code{nil}, this command will
+If @code{gnus-agent-expire-all} is non-@code{nil}, this command will
 expire all articles---unread, read, ticked and dormant.  If @code{nil}
 (which is the default), only read articles are eligible for expiry, and
 unread, ticked and dormant articles will be kept indefinitely.
 
+@findex gnus-agent-regenerate
+If you find that some articles eligible for expiry are never expired,
+perhaps some Gnus Agent files are corrupted.  There's a special
+@code{gnus-agent-regenerate} command to fix possible problems.
 
 @node Agent and IMAP
 @subsection Agent and IMAP
@@ -16057,6 +16889,24 @@ Hook run when connecting to the network.
 @vindex gnus-agent-unplugged-hook
 Hook run when disconnecting from the network.
 
+@item gnus-agent-fetched-hook
+@vindex gnus-agent-fetched-hook
+Hook run when after finishing fetching articles.
+
+@item gnus-agent-cache
+@vindex gnus-agent-cache
+Variable to control whether use the locally stored @sc{nov} and articles when
+plugged.
+
+@item gnus-agent-go-online
+@vindex gnus-agent-go-online
+If @code{gnus-agent-go-online} is @code{nil}, the Agent will never
+automatically switch offline servers into online status.  If it is
+@code{ask}, the default, the Agent will ask if you wish to switch
+offline servers into online status when you re-connect.  If it has any
+other value, all offline servers will be automatically switched into
+online status.
+
 @end table
 
 
@@ -16080,7 +16930,8 @@ setup, you may be able to use something like the following as your
 (setq gnus-secondary-select-methods '((nnml "")))
 
 ;;; Make Gnus into an offline newsreader.
-(gnus-agentize)
+;;; (gnus-agentize) ; The obsolete setting.
+(setq gnus-agent t)
 @end lisp
 
 That should be it, basically.  Put that in your @file{~/.gnus.el} file,
@@ -16126,20 +16977,19 @@ newsreaders.  Here are some common questions that some imaginary people
 may ask:
 
 @table @dfn
-@item If I read an article while plugged, do they get entered into the
-Agent?
+@item If I read an article while plugged, do they get entered into the Agent?
 
-@strong{No.}
+@strong{No}.
 
-@item If I read an article while plugged, and the article already exists
-in the Agent, will it get downloaded once more?
+@item If I read an article while plugged, and the article already exists in the Agent, will it get downloaded once more?
 
-@strong{Yes.}
+@strong{No}, unless @code{gnus-agent-cache} is `nil'.
 
 @end table
 
 In short, when Gnus is unplugged, it only looks into the locally stored
-articles; when it's plugged, it only talks to your ISP.
+articles; when it's plugged, it only talks to your ISP and also uses the
+locally stored articles.
 
 
 @node Scoring
@@ -16226,6 +17076,11 @@ Display the score of the current article
 Display all score rules that have been used on the current article
 (@code{gnus-score-find-trace}).
 
+@item V w
+@kindex V w (Summary)
+@findex gnus-score-find-favourite-words
+List words used in scoring (@code{gnus-score-find-favourite-words}).
+
 @item V R
 @kindex V R (Summary)
 @findex gnus-summary-rescore
@@ -16322,6 +17177,10 @@ Score on the number of lines.
 @item i
 Score on the @code{Message-ID} header.
 
+@item e
+Score on an "extra" header, that is, one of those in gnus-extra-headers,
+if your @sc{nntp} server tracks additional header data in overviews.
+
 @item f
 Score on followups---this matches the author name, and adds scores to
 the followups to this author.  (Using this key leads to the creation of
@@ -16390,9 +17249,10 @@ Greater than number.
 @end table
 
 @item
-The fourth and final key says whether this is a temporary (i.e., expiring)
-score entry, or a permanent (i.e., non-expiring) score entry, or whether
-it is to be done immediately, without adding to the score file.
+The fourth and usually final key says whether this is a temporary (i.e.,
+expiring) score entry, or a permanent (i.e., non-expiring) score entry,
+or whether it is to be done immediately, without adding to the score
+file.
 @table @kbd
 
 @item t
@@ -16405,6 +17265,11 @@ Permanent score entry.
 Immediately scoring.
 @end table
 
+@item
+If you are scoring on `e' (extra) headers, you will then be prompted for
+the header name on which you wish to score.  This must be a header named
+in gnus-extra-headers, and @samp{TAB} completion is available.
+
 @end enumerate
 
 So, let's say you want to increase the score on the current author with
@@ -16597,12 +17462,12 @@ are expired.  It's 7 by default.
 
 @item gnus-update-score-entry-dates
 @vindex gnus-update-score-entry-dates
-If this variable is non-@code{nil}, matching score entries will have
-their dates updated.  (This is how Gnus controls expiry---all
-non-matching entries will become too old while matching entries will
-stay fresh and young.)  However, if you set this variable to @code{nil},
-even matching entries will grow old and will have to face that oh-so
-grim reaper.
+If this variable is non-@code{nil}, temporary score entries that have
+been triggered (matched) will have their dates updated.  (This is how Gnus
+controls expiry---all non-matched-entries will become too old while
+matched entries will stay fresh and young.)  However, if you set this
+variable to @code{nil}, even matched entries will grow old and will
+have to face that oh-so grim reaper.
 
 @item gnus-score-after-write-file-function
 @vindex gnus-score-after-write-file-function
@@ -16722,6 +17587,18 @@ one-letter types are really just abbreviations for the @code{regexp},
 @code{string}, @code{exact}, and @code{word} types, which you can use
 instead, if you feel like.
 
+@item Extra
+Just as for the standard string overview headers, if you are using
+gnus-extra-headers, you can score on these headers' values.  In this
+case, there is a 5th element in the score entry, being the name of the
+header to be scored.  The following entry is useful in your
+@file{all.SCORE} file in case of spam attacks from a single origin host,
+if your @sc{nntp} server tracks NNTP-Posting-Host in overviews:
+
+@lisp
+("111.222.333.444" -1000 nil s "NNTP-Posting-Host")
+@end lisp
+
 @item Lines, Chars
 These two headers use different match types: @code{<}, @code{>},
 @code{=}, @code{>=} and @code{<=}.
@@ -17267,7 +18144,7 @@ Newsgroups} section of the manual, it's explained in greater detail what
 this mechanism does, but here's a cookbook example for @code{nnml} on
 how to allow scoring on the @samp{To} and @samp{Cc} headers.
 
-Put the following in your @file{.gnus.el} file. 
+Put the following in your @file{.gnus.el} file.
 
 @lisp
 (setq gnus-extra-headers '(To Cc Newsgroups Keywords)
@@ -17817,6 +18694,10 @@ simple scoring, and the match types are also the same.
 @node Advanced Scoring Examples
 @subsection Advanced Scoring Examples
 
+Please note that the following examples are score file rules.  To
+make a complete score file from them, surround them with another pair
+of parentheses.
+
 Let's say you want to increase the score of articles written by Lars
 when he's talking about Gnus:
 
@@ -17976,6 +18857,8 @@ four days, Gnus will decay the scores four times, for instance.
 @include message.texi
 @chapter Emacs MIME
 @include emacs-mime.texi
+@chapter Sieve
+@include sieve.texi
 @end iflatex
 @end iftex
 
@@ -17996,8 +18879,9 @@ four days, Gnus will decay the scores four times, for instance.
 * Daemons::                     Gnus can do things behind your back.
 * NoCeM::                       How to avoid spam and other fatty foods.
 * Undo::                        Some actions can be undone.
+* Predicate Specifiers::        Specifying predicates.
 * Moderation::                  What to do if you're a moderator.
-* XEmacs Enhancements::         There are more pictures and stuff under XEmacs.
+* Image Enhancements::          Modern versions of Emacs/XEmacs can display images.
 * Fuzzy Matching::              What's the big fuzz?
 * Thwarting Email Spam::        A how-to on avoiding unsolicited commercial email.
 * Various Various::             Things that are really various.
@@ -18110,9 +18994,9 @@ same time?  You can't, and you're probably perfectly happy that way.
 I'm not, so I've added a second prefix---the @dfn{symbolic prefix}.  The
 prefix key is @kbd{M-i} (@code{gnus-symbolic-argument}), and the next
 character typed in is the value.  You can stack as many @kbd{M-i}
-prefixes as you want.  @kbd{M-i a M-C-u} means ``feed the @kbd{M-C-u}
-command the symbolic prefix @code{a}''.  @kbd{M-i a M-i b M-C-u} means
-``feed the @kbd{M-C-u} command the symbolic prefixes @code{a} and
+prefixes as you want.  @kbd{M-i a C-M-u} means ``feed the @kbd{C-M-u}
+command the symbolic prefix @code{a}''.  @kbd{M-i a M-i b C-M-u} means
+``feed the @kbd{C-M-u} command the symbolic prefixes @code{a} and
 @code{b}''.  You get the drift.
 
 Typing in symbolic prefixes to commands that don't accept them doesn't
@@ -18192,6 +19076,7 @@ less than 4 characters wide.
 Also Gnus supports some extended format specifications, such as
 @samp{%&user-date;}.
 
+
 @node Mode Line Formatting
 @subsection Mode Line Formatting
 
@@ -18258,6 +19143,13 @@ Return an empty string if the field is equal to the specified value.
 @item form
 Use the specified form as the field value when the @samp{@@} spec is
 used.
+
+Here's an example:
+
+@lisp
+"~(form (current-time-string))@@"
+@end lisp
+
 @end table
 
 Let's take an example.  The @samp{%o} spec in the summary mode lines
@@ -19181,11 +20073,38 @@ never be totally undoable.
 @findex gnus-undo
 The undoability is provided by the @code{gnus-undo-mode} minor mode.  It
 is used if @code{gnus-use-undo} is non-@code{nil}, which is the
-default.  The @kbd{M-C-_} key performs the @code{gnus-undo}
+default.  The @kbd{C-M-_} key performs the @code{gnus-undo}
 command, which should feel kinda like the normal Emacs @code{undo}
 command.
 
 
+@node Predicate Specifiers
+@section Predicate Specifiers
+@cindex predicate specifiers
+
+Some Gnus variables are @dfn{predicate specifiers}.  This is a special
+form that allows flexible specification of predicates without having
+to type all that much.
+
+These specifiers are lists consisting of functions, symbols and lists.
+
+Here's an example:
+
+@lisp
+(or gnus-article-unseen-p
+    gnus-article-unread-p)
+@end lisp
+
+The available symbols are @code{or}, @code{and} and @code{not}.  The
+functions all take one parameter.
+
+@findex gnus-make-predicate
+Internally, Gnus calls @code{gnus-make-predicate} on these specifiers
+to create a function that can be called.  This input parameter to this
+function will be passed along to all the functions in the predicate
+specifier. 
+
+
 @node Moderation
 @section Moderation
 @cindex moderation
@@ -19231,16 +20150,16 @@ To use moderation mode in these two groups, say:
 @end lisp
 
 
-@node XEmacs Enhancements
-@section XEmacs Enhancements
-@cindex XEmacs
+@node Image Enhancements
+@section Image Enhancements
 
-XEmacs is able to display pictures and stuff, so Gnus has taken
-advantage of that.
+XEmacs, as well as Emacs 21, is able to display pictures and stuff, so
+Gnus has taken advantage of that.
 
 @menu
-* Picons::                      How to display pictures of what your reading.
+* Picons::                      How to display pictures of what you're reading.
 * Smileys::                     Show all those happy faces the way they were meant to be shown.
+* X-Face::                      Display a funky, teensy black-and-white image.
 * Toolbar::                     Click'n'drool.
 * XVarious::                    Other XEmacsy Gnusey variables.
 @end menu
@@ -19302,6 +20221,9 @@ obtaining and installing the picons databases, point your Web browser at @*
 picons to be installed into a location pointed to by
 @code{gnus-picons-database}.
 
+If you are using Debian GNU/Linux, saying @samp{apt-get install
+picons.*} will install the picons where Gnus can find them.
+
 
 @node Picon Requirements
 @subsubsection Picon Requirements
@@ -19316,7 +20238,7 @@ If you want to display faces from @code{X-Face} headers, you should have
 the @code{xface} support compiled into XEmacs.  Otherwise you must have
 the @code{netpbm} utilities installed, or munge the
 @code{gnus-picons-convert-x-face} variable to use something else.
-
+(NOTE: @code{x-face} is used in the variable name, not @code{xface})
 
 @node Easy Picons
 @subsubsection Easy Picons
@@ -19405,8 +20327,9 @@ Looks up and displays the picons for the author and the author's domain
 in the @code{gnus-picons-display-where} buffer.
 
 @item gnus-picons-article-display-x-face
-@findex gnus-article-display-picons
+@findex gnus-picons-article-display-x-face
 Decodes and displays the X-Face header if present.
+(NOTE: @code{x-face} is used in the function name, not @code{xface})
 
 @end table
 
@@ -19450,11 +20373,13 @@ command to use to convert the @code{X-Face} header to an X bitmap
 (@code{xbm}).  Defaults to @code{(format "@{ echo '/* Width=48,
 Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s"
 gnus-picons-x-face-file-name)}
+(NOTE: @code{x-face} is used in the variable name, not @code{xface})
 
 @item gnus-picons-x-face-file-name
 @vindex gnus-picons-x-face-file-name
 Names a temporary file to store the @code{X-Face} bitmap in.  Defaults
 to @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}.
+(NOTE: @code{x-face} is used in the variable name, not @code{xface})
 
 @item gnus-picons-has-modeline-p
 @vindex gnus-picons-has-modeline-p
@@ -19580,6 +20505,91 @@ Face used for mouse highlighting over the smiley face.
 @end table
 
 
+@node X-Face
+@subsection X-Face
+@cindex x-face
+
+@code{X-Face} headers describe a 48x48 pixel black-and-white (1 bit
+depth) image that's supposed to represent the author of the message.
+It seems to be supported by an ever-growing number of mail and news
+readers.
+
+@cindex x-face
+@findex gnus-article-display-x-face
+@findex gnus-article-x-face-command
+@vindex gnus-article-x-face-command
+@vindex gnus-article-x-face-too-ugly
+@iftex
+@iflatex
+\include{xface}
+@end iflatex
+@end iftex
+@c @anchor{X-Face}
+
+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.
+
+The variable that controls this is the
+@code{gnus-article-x-face-command} variable.  If this variable is a
+string, this string will be executed in a sub-shell.  If it is a
+function, this function will be called with the face as the argument.
+If the @code{gnus-article-x-face-too-ugly} (which is a regexp) matches
+the @code{From} header, the face will not be shown.
+
+The default action under Emacs 20 is to fork off the @code{display}
+program@footnote{@code{display} is from the ImageMagick package.  For
+the @code{uncompface} and @code{icontopbm} programs look for a package
+like @code{compface} or @code{faces-xface} on a GNU/Linux system.}  to
+view the face.
+
+Under XEmacs or Emacs 21+ with suitable image support, the default
+action is to display the face before the @code{From} header.  (It's
+nicer if XEmacs has been compiled with @code{X-Face} support---that
+will make display somewhat faster.  If there's no native @code{X-Face}
+support, Gnus will try to convert the @code{X-Face} header using
+external programs from the @code{pbmplus} package and
+friends.@footnote{On a GNU/Linux system look for packages with names
+like @code{netpbm}, @code{libgr-progs} and @code{compface}.})
+
+(NOTE: @code{x-face} is used in the variable/function names, not
+@code{xface}).
+
+Gnus provides a few convenience functions and variables to allow
+easier insertion of X-Face headers in outgoing messages.
+
+@findex gnus-random-x-face
+@code{gnus-random-x-face} goes through all the @samp{pbm} files
+in @code{gnus-x-face-directory} and picks one at random, and then
+converts it to the X-Face format by using the
+@code{gnus-convert-pbm-to-x-face-command} shell command.  The
+@samp{pbm} files should be 48x48 pixels big.
+
+@code{gnus-x-face-from-file} takes a file as the parameter, and then
+converts the file to X-Face format by using the
+@code{gnus-convert-image-to-x-face-command} shell command.
+
+Here's how you would typically use the former function.  Put something
+like the folllowing in your @file{.gnus.el} file:
+
+@lisp
+(setq message-required-news-headers
+      (nconc message-required-news-headers
+             (list '(X-Face . gnus-random-x-face))))
+@end lisp
+
+Using the latter function would be something like this:
+
+@lisp
+(setq message-required-news-headers
+      (nconc message-required-news-headers
+             (list '(X-Face . (lambda ()
+                                (gnus-x-face-from-file
+                                 "~/My-face.gif"))))))
+@end lisp
+
+
 @node Toolbar
 @subsection Toolbar
 
@@ -19694,7 +20704,20 @@ and one mail asking me to repent and find some god.
 
 This is annoying.
 
-The way to deal with this is having Gnus split out all spam into a
+@menu
+* Anti-Spam Basics::            Simple steps to reduce the amount of spam.
+* SpamAssassin::                How to use external anti-spam tools.
+* Hashcash::                    Reduce spam by burning CPU time.
+@end menu
+
+@node Anti-Spam Basics
+@subsection Anti-Spam Basics
+@cindex email spam
+@cindex spam
+@cindex UCE
+@cindex unsolicited commercial email
+
+One way of dealing with spam is having Gnus split out all spam into a
 @samp{spam} mail group (@pxref{Splitting Mail}).
 
 First, pick one (1) valid mail address that you can be reached at, and
@@ -19728,7 +20751,7 @@ This says that all mail to this address is suspect, but if it has a
 header, it's probably ok.  All the rest goes to the @samp{spam} group.
 (This idea probably comes from Tim Pierce.)
 
-In addition, many mail spammers talk directly to your @code{smtp} server
+In addition, many mail spammers talk directly to your @sc{smtp} server
 and do not include your email address explicitly in the @code{To}
 header.  Why they do this is unknown---perhaps it's to thwart this
 thwarting scheme?  In any case, this is trivial to deal with---you just
@@ -19760,6 +20783,156 @@ spam.  It's a win-win situation.  Forging @code{From} headers to point
 to non-existent domains is yucky, in my opinion.
 
 
+
+@node SpamAssassin
+@subsection SpamAssassin, Vipul's Razor, DCC, etc
+@cindex SpamAssassin
+@cindex Vipul's Razor
+@cindex DCC
+
+The days where the hints in the previous section was sufficient in
+avoiding spam is coming to an end.  There are many tools out there
+that claim to reduce the amount of spam you get.  This section could
+easily become outdated fast, as new products replace old, but
+fortunately most of these tools seem to have similar interfaces.  Even
+though this section will use SpamAssassin as an example, it should be
+easy to adapt it to most other tools.
+
+If the tool you are using is not installed on the mail server, you
+need to invoke it yourself.  Ideas on how to use the
+@code{:postscript} mail source parameter (@pxref{Mail Source
+Specifiers}) follows.
+
+@lisp
+(setq mail-sources
+      '((file :prescript "formail -bs spamassassin < /var/mail/%u")
+        (pop :user "jrl"
+             :server "pophost" 
+             :postscript "mv %t /tmp/foo; formail -bs spamc < /tmp/foo > %t")))
+@end lisp
+
+Once you managed to process your incoming spool somehow, thus making
+the mail contain e.g. a header indicating it is spam, you are ready to
+filter it out.  Using normal split methods (@pxref{Splitting Mail}):
+
+@lisp
+(setq nnmail-split-methods '(("spam"  "^X-Spam-Flag: YES")
+                             ...))
+@end lisp
+
+Or using fancy split methods (@pxref{Fancy Mail Splitting}):
+
+@lisp
+(setq nnmail-split-methods 'nnmail-split-fancy
+      nnmail-split-fancy '(| ("X-Spam-Flag" "YES" "spam")
+                             ...))
+@end lisp
+
+Some people might not like the idea of piping the mail through various
+programs using a @code{:prescript} (if some program is buggy, you
+might lose all mail).  If you are one of them, another solution is to
+call the external tools during splitting.  Example fancy split method:
+
+@lisp
+(setq nnmail-split-fancy '(| (: kevin-spamassassin)
+                             ...))
+(defun kevin-spamassassin ()
+  (save-excursion
+    (let ((buf (or (get-buffer " *nnmail incoming*")
+                   (get-buffer " *nnml move*"))))
+      (if (not buf)
+          (progn (message "Oops, cannot find message buffer") nil)
+        (set-buffer buf)
+        (if (eq 1 (call-process-region (point-min) (point-max)
+                                       "spamc" nil nil nil "-c"))
+            "spam")))))
+@end lisp
+
+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
+spam.  And here is the nifty function:
+
+@lisp
+ (defun my-gnus-raze-spam ()
+  "Submit SPAM to Vipul's Razor, then mark it as expirable."
+  (interactive)
+  (gnus-summary-show-raw-article)
+  (gnus-summary-save-in-pipe "razor-report -f -d")
+  (gnus-summary-mark-as-expirable 1))
+@end lisp
+
+@node Hashcash
+@subsection Hashcash
+@cindex hashcash
+
+A novel technique to fight spam is to require senders to do something
+costly for each message they send.  This has the obvious drawback that
+you cannot rely on that everyone in the world uses this technique,
+since it is not part of the internet standards, but it may be useful
+in smaller communities.
+
+While the tools in the previous section work well in practice, they
+work only because the tools are constantly maintained and updated as
+new form of spam appears.  This means that a small percentage of spam
+will always get through.  It also means that somewhere, someone needs
+to read lots of spam to update these tools.  Hashcash avoids that, but
+instead requires that everyone you communicate with supports the
+scheme.  You can view the two approaches as pragmatic vs dogmatic.
+The approaches have their own advantages and disadvantages, but as
+often in the real world, a combination of them is stronger than either
+one of them separately.
+
+@cindex X-Hashcash
+The ``something costly'' is to burn CPU time, more specifically to
+compute a hash collision up to a certain number of bits.  The
+resulting hashcash cookie is inserted in a @samp{X-Hashcash:}
+header. For more details, and for the external application
+@code{hashcash} you need to install to use this feature, see
+@uref{http://www.cypherspace.org/~adam/hashcash/}.  Even more
+information can be found at @uref{http://www.camram.org/}.
+
+If you wish to call hashcash for each message you send, say something
+like:
+
+@lisp
+(require 'hashcash)
+(add-hook 'message-send-hook 'mail-add-payment)
+@end lisp
+
+The @code{hashcash.el} library can be found at
+@uref{http://users.actrix.gen.nz/mycroft/hashcash.el}, or in the Gnus
+development contrib directory.
+
+You will need to set up some additional variables as well:
+
+@table @code
+
+@item hashcash-default-payment
+@vindex hashcash-default-payment
+This variable indicates the default number of bits the hash collision
+should consist of.  By default this is 0, meaning nothing will be
+done.  Suggested useful values include 17 to 29.
+
+@item hashcash-payment-alist
+@vindex hashcash-payment-alist
+Some receivers may require you to spend burn more CPU time than the
+default.  This variable contains a list of @samp{(ADDR AMOUNT)} cells,
+where ADDR is the receiver (email address or newsgroup) and AMOUNT is
+the number of bits in the collision that is needed.  It can also
+contain @samp{(ADDR STRING AMOUNT)} cells, where the STRING is the
+string to use (normally the email address or newsgroup name is used).
+
+@item hashcash
+@vindex hashcash
+Where the @code{hashcash} binary is installed.
+
+@end table
+
+Currently there is no built in functionality in Gnus to verify
+hashcash cookies, it is expected that this is performed by your hand
+customized mail filtering scripts.  Improvements in this area would be
+a useful contribution, however.
+
 @node Various Various
 @section Various Various
 @cindex mode lines
@@ -19901,6 +21074,7 @@ but at the common table.@*
 @chapter Appendices
 
 @menu
+* XEmacs::                      Requirements for installing under XEmacs.
 * History::                     How Gnus got where it is today.
 * On Writing Manuals::          Why this is not a beginner's guide.
 * Terminology::                 We use really difficult, like, words here.
@@ -19912,6 +21086,18 @@ but at the common table.@*
 @end menu
 
 
+@node XEmacs
+@section XEmacs
+@cindex XEmacs
+@cindex Installing under XEmacs
+
+XEmacs is distributed as a collection of packages.  You should install
+whatever packages the Gnus XEmacs package requires.  The current
+requirements are @samp{gnus}, @samp{w3}, @samp{mh-e},
+@samp{mailcrypt}, @samp{rmail}, @samp{eterm}, @samp{mail-lib},
+@samp{xemacs-base}, and @samp{fsf-compat}.
+
+
 @node History
 @section History
 
@@ -19952,10 +21138,13 @@ renamed it back again to ``Gnus''.  But in mixed case.  ``Gnus'' vs.
 
 @node Gnus Versions
 @subsection Gnus Versions
-@cindex Pterodactyl Gnus
 @cindex ding Gnus
 @cindex September Gnus
+@cindex Red Gnus
 @cindex Quassia Gnus
+@cindex Pterodactyl Gnus
+@cindex Oort Gnus
+@cindex No Gnus
 
 The first ``proper'' release of Gnus 5 was done in November 1995 when it
 was included in the Emacs 19.30 distribution (132 (ding) Gnus releases
@@ -20109,8 +21298,9 @@ with, of course.
 
 @table @strong
 
-@item RFC 822
+@item RFC (2)822
 @cindex RFC 822
+@cindex RFC 2822
 There are no known breaches of this standard.
 
 @item RFC 1036
@@ -20139,6 +21329,38 @@ on Son-of-RFC 1036.  They have produced a number of drafts proposing
 various changes to the format of news articles.  The Gnus towers will
 look into implementing the changes when the draft is accepted as an RFC.
 
+@item MIME - RFC 2045-2049 etc
+@cindex MIME
+All the various @sc{mime} RFCs are supported.
+
+@item Disposition Notifications - RFC 2298
+Message Mode is able to request notifications from the receiver.
+
+@item PGP - RFC 1991 and RFC 2440
+@cindex RFC 1991
+@cindex RFC 2440
+RFC 1991 is the original PGP message specification, published as a
+Information RFC.  RFC 2440 was the follow-up, now called Open PGP, and
+put on the Standards Track.  Both document a non-@sc{mime} aware PGP
+format.  Gnus supports both encoding (signing and encryption) and
+decoding (verification and decryption).
+
+@item PGP/MIME - RFC 2015/3156
+RFC 2015 (superceded by 3156 which references RFC 2440 instead of RFC
+1991) describes the @sc{mime}-wrapping around the RF 1991/2440 format.
+Gnus supports both encoding and decoding.
+
+@item S/MIME - RFC 2633
+RFC 2633 describes the @sc{s/mime} format.
+
+@item IMAP - RFC 1730/2060, RFC 2195, RFC 2086, RFC 2359, RFC 2595, RFC 1731
+RFC 1730 is @sc{imap} version 4, updated somewhat by RFC 2060 (@sc{imap} 4
+revision 1).  RFC 2195 describes CRAM-MD5 authentication for @sc{imap}. RFC
+2086 describes access control lists (ACLs) for @sc{imap}. RFC 2359
+describes a @sc{imap} protocol enhancement.  RFC 2595 describes the proper
+TLS integration (STARTTLS) with @sc{imap}.  RFC 1731 describes the
+GSSAPI/Kerberos4 mechanisms for @sc{imap}.
+
 @end table
 
 If you ever notice Gnus acting non-compliant with regards to the texts
@@ -20982,7 +22204,7 @@ There's a way now to specify that ``uninteresting'' fields be suppressed
 when generating lines in buffers (@pxref{Advanced Formatting}).
 
 @item
-Several commands in the group buffer can be undone with @kbd{M-C-_}
+Several commands in the group buffer can be undone with @kbd{C-M-_}
 (@pxref{Undo}).
 
 @item
@@ -21014,7 +22236,7 @@ the native server (@pxref{Changing Servers}).
 
 @item
 A new command for reading collections of documents
-(@code{nndoc} with @code{nnvirtual} on top) has been added---@kbd{M-C-d}
+(@code{nndoc} with @code{nnvirtual} on top) has been added---@kbd{C-M-d}
 (@pxref{Really Various Summary Commands}).
 
 @item
@@ -21202,7 +22424,7 @@ New features in Gnus 5.8:
 
 @itemize @bullet
 
-@item 
+@item
 The mail-fetching functions have changed.  See the manual for the
 many details.  In particular, all procmail fetching variables are gone.
 
@@ -21220,14 +22442,14 @@ this now has changed to
 @lisp
 (setq mail-sources
       '((directory :path "~/mail/incoming/"
-                  :suffix ".in")))
+                   :suffix ".in")))
 @end lisp
 
 More information is available in the info doc at Select Methods ->
 Getting Mail -> Mail Sources
 
-@item 
-Gnus is now a MIME-capable reader.  This affects many parts of
+@item
+Gnus is now a @sc{mime}-capable reader.  This affects many parts of
 Gnus, and adds a slew of new commands.  See the manual for details.
 
 @item
@@ -21240,7 +22462,7 @@ called to position point.
 
 @item
 The user can now decide which extra headers should be included in
-summary buffers and NOV files.
+summary buffers and @sc{nov} files.
 
 @item
 @code{gnus-article-display-hook} has been removed.  Instead, a number
@@ -21256,7 +22478,7 @@ New web-based back ends have been added: @code{nnslashdot},
 again, to keep up with ever-changing layouts.
 
 @item
-Gnus can now read IMAP mail via @code{nnimap}.
+Gnus can now read @sc{imap} mail via @code{nnimap}.
 
 @end itemize
 
@@ -21553,7 +22775,7 @@ for some quite common situations.
 
 
 @node Slow/Expensive Connection
-@subsection Slow/Expensive @sc{nntp} Connection
+@subsection Slow/Expensive NNTP Connection
 
 If you run Emacs on a machine locally, and get your news from a machine
 over some very thin strings, you want to cut down on the amount of data
@@ -21613,6 +22835,7 @@ want to read them anyway.
 If this is non-@code{nil}, all threads in the summary buffer will be
 hidden initially.
 
+
 @item gnus-updated-mode-lines
 If this is @code{nil}, Gnus will not put information in the buffer mode
 lines, which might save some time.
@@ -21972,8 +23195,8 @@ In the examples and definitions I will refer to the imaginary back end
 @cindex @code{nnchoke}
 
 @menu
-* Required Back End Functions:: Functions that must be implemented.
-* Optional Back End Functions:: Functions that need not be implemented.
+* Required Back End Functions::  Functions that must be implemented.
+* Optional Back End Functions::  Functions that need not be implemented.
 * Error Messaging::             How to get messages and report errors.
 * Writing New Back Ends::       Extending old back ends.
 * Hooking New Back Ends Into Gnus::  What has to be done on the Gnus end.
@@ -21993,10 +23216,10 @@ In the examples and definitions I will refer to the imaginary back end
 sequences (lists) of article numbers, and most back ends do not support
 retrieval of @code{Message-ID}s.  But they should try for both.
 
-The result data should either be HEADs or NOV lines, and the result
+The result data should either be HEADs or @sc{nov} lines, and the result
 value should either be @code{headers} or @code{nov} to reflect this.
 This might later be expanded to @code{various}, which will be a mixture
-of HEADs and NOV lines, but this is currently not supported by Gnus.
+of HEADs and @sc{nov} lines, but this is currently not supported by Gnus.
 
 If @var{fetch-old} is non-@code{nil} it says to try fetching "extra
 headers", in some meaning of the word.  This is generally done by
@@ -22142,7 +23365,9 @@ number of articles may be less than one might think while just
 considering the highest and lowest article numbers, but some articles
 may have been canceled.  Gnus just discards the total-number, so
 whether one should take the bother to generate it properly (if that is a
-problem) is left as an exercise to the reader.
+problem) is left as an exercise to the reader.  If the group contains no
+articles, the lowest article number should be reported as 1 and the
+highest as 0.
 
 @example
 group-status = [ error / info ] eol
@@ -22172,7 +23397,9 @@ ifi.discussion 3324 3300 n
 @end example
 
 On each line we have a group name, then the highest article number in
-that group, the lowest article number, and finally a flag.
+that group, the lowest article number, and finally a flag.  If the group
+contains no articles, the lowest article number should be reported as 1
+and the highest as 0.
 
 @example
 active-file = *active-line
@@ -22350,9 +23577,9 @@ It is okay for this function to return `too many' groups; some back ends
 might find it cheaper to return the full list of groups, rather than
 just the new groups.  But don't do this for back ends with many groups.
 Normally, if the user creates the groups herself, there won't be too
-many groups, so nnml and the like are probably safe.  But for back ends
-like nntp, where the groups have been created by the server, it is quite
-likely that there can be many groups.
+many groups, so @code{nnml} and the like are probably safe.  But for
+back ends like @code{nntp}, where the groups have been created by the
+server, it is quite likely that there can be many groups.
 
 
 @item (nnchoke-request-create-group GROUP &optional SERVER)
@@ -22687,9 +23914,9 @@ The user should be prompted for an address when doing commands like
 @subsubsection Mail-like Back Ends
 
 One of the things that separate the mail back ends from the rest of the
-back ends is the heavy dependence by the mail back ends on common
-functions in @file{nnmail.el}.  For instance, here's the definition of
-@code{nnml-request-scan}:
+back ends is the heavy dependence by most of the mail back ends on
+common functions in @file{nnmail.el}.  For instance, here's the
+definition of @code{nnml-request-scan}:
 
 @lisp
 (deffoo nnml-request-scan (&optional group server)
@@ -23202,7 +24429,7 @@ description   = <string>
 
 Believe it or not, but some people who use Gnus haven't really used
 Emacs much before they embarked on their journey on the Gnus Love Boat.
-If you are one of those unfortunates whom ``@kbd{M-C-a}'', ``kill the
+If you are one of those unfortunates whom ``@kbd{C-M-a}'', ``kill the
 region'', and ``set @code{gnus-flargblossen} to an alist where the key
 is a regexp that is used for matching on the group name'' are magical
 phrases with little or no meaning, then this appendix is for you.  If
@@ -23242,11 +24469,11 @@ which is the meta key on this keyboard.  It's usually located somewhere
 to the left hand side of the keyboard, usually on the bottom row.
 
 Now, us Emacs people don't say ``press the meta-control-m key'',
-because that's just too inconvenient.  We say ``press the @kbd{M-C-m}
+because that's just too inconvenient.  We say ``press the @kbd{C-M-m}
 key''.  @kbd{M-} is the prefix that means ``meta'' and ``C-'' is the
 prefix that means ``control''.  So ``press @kbd{C-k}'' means ``press
 down the control key, and hold it down while you press @kbd{k}''.
-``Press @kbd{M-C-k}'' means ``press down and hold down the meta key and
+``Press @kbd{C-M-k}'' means ``press down and hold down the meta key and
 the control key and then press @kbd{k}''.  Simple, ay?
 
 This is somewhat complicated by the fact that not all keyboards have a
@@ -23337,6 +24564,9 @@ former).  The manual is unambiguous, but it can be confusing.
 @end iflatex
 @end iftex
 
+@c Local Variables:
+@c mode: texinfo
+@c coding: iso-8859-1
 @c End:
 % LocalWords:  BNF mucho detailmenu cindex kindex kbd
 % LocalWords:  findex Gnusae vindex dfn dfn samp nntp setq nnspool nntpserver