Import Oort Gnus v0.13.
[elisp/gnus.git-] / texi / gnus.texi
index c2ff745..1dcfeda 100644 (file)
@@ -1,13 +1,14 @@
-\input texinfo                  @c -*-texinfo-*-  -*- coding: iso-latin-1 -*-
+\input texinfo
 
 @setfilename gnus
 @settitle Gnus Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
-@c @direntry
-@c * Gnus: (gnus).         The newsreader Gnus.
-@c @end direntry
+@dircategory Emacs
+@direntry
+* Gnus: (gnus).         The newsreader Gnus.
+@end direntry
 @iftex
 @finalout
 @end iftex
 \usepackage[latin1]{inputenc}
 \usepackage{pagestyle}
 \usepackage{epsfig}
-\usepackage{bembo}
 \usepackage{pixidx}
+\input{gnusconfig.tex}
+
+\ifx\pdfoutput\undefined
+\else
+\usepackage[pdftex,bookmarks,colorlinks=true]{hyperref}
+\usepackage{thumbpdf}
+\pdfcompresslevel=9
+\fi
 
 \makeindex
 \begin{document}
 
+\newcommand{\gnusversionname}{Oort Gnus v0.13}
 \newcommand{\gnuschaptername}{}
 \newcommand{\gnussectionname}{}
 
 \newcommand{\gnusbackslash}{/}
 
+\newcommand{\gnusref}[1]{``#1'' on page \pageref{#1}}
+\ifx\pdfoutput\undefined
+\newcommand{\gnusuref}[1]{\gnustt{#1}}
+\else
+\newcommand{\gnusuref}[1]{\href{#1}{\gnustt{#1}}}
+\fi
 \newcommand{\gnusxref}[1]{See ``#1'' on page \pageref{#1}}
 \newcommand{\gnuspxref}[1]{see ``#1'' on page \pageref{#1}}
 
 \newcommand{\gnuskindex}[1]{\index{#1}}
 \newcommand{\gnusindex}[1]{\index{#1}}
 
-\newcommand{\gnustt}[1]{{\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}}
+\newcommand{\gnustt}[1]{{\gnusselectttfont{}#1}}
 \newcommand{\gnuscode}[1]{\gnustt{#1}}
-\newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}''}
+\newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\gnusselectttfont{}#1}''}
 \newcommand{\gnuslisp}[1]{\gnustt{#1}}
 \newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
+\newcommand{\gnuskey}[1]{`\gnustt{#1}'}
 \newcommand{\gnusfile}[1]{`\gnustt{#1}'}
 \newcommand{\gnusdfn}[1]{\textit{#1}}
 \newcommand{\gnusi}[1]{\textit{#1}}
@@ -49,6 +65,7 @@
 \newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}}
 \newcommand{\gnussc}[1]{\textsc{#1}}
 \newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
+\newcommand{\gnusversion}[1]{{\small\textit{#1}}}
 \newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
 \newcommand{\gnusresult}[1]{\gnustt{=> #1}}
 
@@ -66,7 +83,7 @@
 \newcommand{\gnusbraceleft}{{$>$}}
 \newcommand{\gnusbraceright}{{$>$}}
 
-\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head.eps,height=1cm}}}
+\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head,height=1cm}}}
 \newcommand{\gnusinteresting}{
 \marginpar[\mbox{}\hfill\gnushead]{\gnushead}
 }
 }
 
 \newcommand{\gnusicon}[1]{
-\marginpar[\mbox{}\hfill\raisebox{-1.5cm}{\epsfig{figure=tmp/#1-up.ps,height=1.5cm}}]{\raisebox{-1cm}{\epsfig{figure=tmp/#1-up.ps,height=1cm}}}
+\marginpar[\mbox{}\hfill\raisebox{-1.5cm}{\epsfig{figure=ps/#1-up,height=1.5cm}}]{\raisebox{-1cm}{\epsfig{figure=ps/#1-up,height=1cm}}}
 }
 
 \newcommand{\gnuspicon}[1]{
 {
 \ifodd\count0
 \mbox{} \hfill
-\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
 \else
-\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
 \hfill \mbox{}
 \fi
 }
 {
 \ifodd\count0
 \mbox{} \hfill
-\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
 \else
-\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
 \hfill \mbox{}
 \fi
 }
 {
 \ifodd\count0
 \mbox{} \hfill
-\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
 \else
-\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
 \hfill \mbox{}
 \fi
 }
 \parindent=0cm
 \addtolength{\textheight}{2cm}
 
-\gnustitle{\gnustitlename}\\
+\gnustitle{\gnustitlename}\hfill\gnusversion{\gnusversionname}\\
 \rule{15cm}{1mm}\\
 \vfill
-\hspace*{0cm}\epsfig{figure=ps/gnus-big-logo.eps,height=15cm}
+\hspace*{0cm}\epsfig{figure=ps/gnus-big-logo,height=15cm}
 \vfill
 \rule{15cm}{1mm}\\
 \gnusauthor{by Lars Magne Ingebrigtsen}
 
 \thispagestyle{empty}
 
-Copyright \copyright{} 1995,96,97,98,99 Free Software Foundation, Inc.
+Copyright \copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003
+Free Software Foundation, Inc.
 
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
 
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
 
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 \newpage
 \end{titlepage}
 @end iflatex
 @end iftex
 
-@ifinfo
+@ifnottex
 
 This file documents Gnus, the GNU Emacs newsreader.
 
-Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+        Free Software Foundation, Inc.
 
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being none, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
 
-@ignore
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
 
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ifinfo
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+@end ifnottex
 
 @tex
 
@@ -325,19 +348,26 @@ into another language, under the above conditions for modified versions.
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1995,96,97,98,99 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
+Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003
+        Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software.  Copies published by the Free
+Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License.  If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
 
 @end titlepage
 @page
@@ -355,7 +385,7 @@ 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.
 
-This manual corresponds to Gnus 5.8.7.
+This manual corresponds to Oort Gnus v0.13.
 
 @end ifinfo
 
@@ -387,94 +417,103 @@ the program.
 @end iftex
 
 @menu
-* Starting Up::           Finding news can be a pain.
-* The Group Buffer::      Selecting, subscribing and killing groups.
-* The Summary Buffer::    Reading, saving and posting articles.
-* The Article Buffer::    Displaying and handling articles.
-* Composing Messages::    Information on sending mail and news.
-* Select Methods::        Gnus reads all messages from various select methods.
-* Scoring::               Assigning values to articles.
-* Various::               General purpose settings.
-* The End::               Farewell and goodbye.
-* Appendices::            Terminology, Emacs intro, FAQ, History, Internals.
-* Index::                 Variable, function and concept index.
-* Key Index::             Key Index.
+* Starting Up::                 Finding news can be a pain.
+* Group Buffer::                Selecting, subscribing and killing groups.
+* Summary Buffer::              Reading, saving and posting articles.
+* Article Buffer::              Displaying and handling articles.
+* Composing Messages::          Information on sending mail and news.
+* Select Methods::              Gnus reads all messages from various select methods.
+* Scoring::                     Assigning values to articles.
+* Various::                     General purpose settings.
+* The End::                     Farewell and goodbye.
+* Appendices::                  Terminology, Emacs intro, FAQ, History, Internals.
+* Index::                       Variable, function and concept index.
+* Key Index::                   Key Index.
+
+Other related manuals
+
+* Message:(message).            Composing messages.
+* Emacs-MIME:(emacs-mime).      Composing messages; MIME-specific parts.
+* Sieve:(sieve).                Managing Sieve scripts in Emacs.
+* PGG:(pgg).                    PGP/MIME with Gnus.
 
 @detailmenu
  --- The Detailed Node Listing ---
 
 Starting Gnus
 
-* Finding the News::    Choosing a method for getting news.
-* The First Time::      What does Gnus do the first time you start it?
-* The Server is Down::  How can I read my mail then?
-* Slave Gnusae::        You can have more than one Gnus active at a time.
-* Fetching a Group::    Starting Gnus just to read a group.
-* New Groups::          What is Gnus supposed to do with new groups?
-* Startup Files::       Those pesky startup files---@file{.newsrc}.
-* Auto Save::           Recovering from a crash.
-* The Active File::     Reading the active file over a slow line Takes Time.
-* Changing Servers::    You may want to move from one server to another.
-* Startup Variables::   Other variables you might change.
+* Finding the News::            Choosing a method for getting news.
+* The First Time::              What does Gnus do the first time you start it?
+* The Server is Down::          How can I read my mail then?
+* Slave Gnusae::                You can have more than one Gnus active at a time.
+* Fetching a Group::            Starting Gnus just to read a group.
+* New Groups::                  What is Gnus supposed to do with new groups?
+* Changing Servers::            You may want to move from one server to another.
+* Startup Files::               Those pesky startup files---@file{.newsrc}.
+* Auto Save::                   Recovering from a crash.
+* The Active File::             Reading the active file over a slow line Takes Time.
+* Startup Variables::           Other variables you might change.
 
 New Groups
 
-* Checking New Groups::      Determining what groups are new.
-* Subscription Methods::     What Gnus should do with new groups.
-* Filtering New Groups::     Making Gnus ignore certain new groups.
-
-The Group Buffer
-
-* Group Buffer Format::    Information listed and how you can change it.
-* Group Maneuvering::      Commands for moving in the group buffer.
-* Selecting a Group::      Actually reading news.
-* Group Data::             Changing the info for a group.
-* Subscription Commands::  Unsubscribing, killing, subscribing.
-* Group Levels::           Levels? What are those, then?
-* Group Score::            A mechanism for finding out what groups you like.
-* Marking Groups::         You can mark groups for later processing.
-* Foreign Groups::         Creating and editing groups.
-* Group Parameters::       Each group may have different parameters set.
-* Listing Groups::         Gnus can list various subsets of the groups.
-* Sorting Groups::         Re-arrange the group order.
-* Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
-* Browse Foreign Server::  You can browse a server.  See what it has to offer.
-* Exiting Gnus::           Stop reading news and get some work done.
-* Group Topics::           A folding group mode divided into topics.
-* Misc Group Stuff::       Other stuff that you can to do.
+* Checking New Groups::         Determining what groups are new.
+* Subscription Methods::        What Gnus should do with new groups.
+* Filtering New Groups::        Making Gnus ignore certain new groups.
+
+Group Buffer
+
+* Group Buffer Format::         Information listed and how you can change it.
+* Group Maneuvering::           Commands for moving in the group buffer.
+* Selecting a Group::           Actually reading news.
+* Subscription Commands::       Unsubscribing, killing, subscribing.
+* Group Data::                  Changing the info for a group.
+* Group Levels::                Levels? What are those, then?
+* Group Score::                 A mechanism for finding out what groups you like.
+* Marking Groups::              You can mark groups for later processing.
+* Foreign Groups::              Creating and editing groups.
+* Group Parameters::            Each group may have different parameters set.
+* Listing Groups::              Gnus can list various subsets of the groups.
+* Sorting Groups::              Re-arrange the group order.
+* Group Maintenance::           Maintaining a tidy @file{.newsrc} file.
+* Browse Foreign Server::       You can browse a server.  See what it has to offer.
+* Exiting Gnus::                Stop reading news and get some work done.
+* Group Topics::                A folding group mode divided into topics.
+* Misc Group Stuff::            Other stuff that you can to do.
 
 Group Buffer Format
 
-* Group Line Specification::       Deciding how the group buffer is to look.
-* Group Modeline Specification::   The group buffer modeline.
-* Group Highlighting::             Having nice colors in the group buffer.
+* Group Line Specification::    Deciding how the group buffer is to look.
+* Group Modeline Specification::  The group buffer modeline.
+* Group Highlighting::          Having nice colors in the group buffer.
 
 Group Topics
 
-* Topic Variables::    How to customize the topics the Lisp Way.
-* Topic Commands::     Interactive E-Z commands.
-* Topic Sorting::      Sorting each topic individually.
-* Topic Topology::     A map of the world.
-* Topic Parameters::   Parameters that apply to all groups in a topic.
+* 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.
 
 Misc Group Stuff
 
-* Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
-* 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.
+* Scanning New Messages::       Asking Gnus to see whether new messages have arrived.
+* 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.
 
-The Summary Buffer
+Summary Buffer
 
 * Summary Buffer Format::       Deciding how the summary buffer is to look.
 * Summary Maneuvering::         Moving around the summary buffer.
 * Choosing Articles::           Reading articles.
 * Paging the Article::          Scrolling the current article.
 * Reply Followup and Post::     Posting articles.
+* Delayed Articles::            Send articles at a later time.
 * Marking Articles::            Marking articles as read, expirable, etc.
 * Limiting::                    You can limit the summary buffer.
 * Threading::                   How threads are made.
-* Sorting::                     How articles and threads are sorted.
+* Sorting the Summary Buffer::  How articles and threads are sorted.
 * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
 * Article Caching::             You may store articles in a cache.
 * Persistent Articles::         Making articles expiry-resistant.
@@ -491,34 +530,40 @@ The Summary Buffer
 * Tree Display::                A more visual display of threads.
 * Mail Group Commands::         Some commands can only be used in mail groups.
 * Various Summary Stuff::       What didn't fit anywhere else.
-* Exiting the Summary Buffer::  Returning to the Group buffer.
+* Exiting the Summary Buffer::  Returning to the Group buffer,
+                                or reselecting the current group.
 * Crosspost Handling::          How crossposted articles are dealt with.
 * Duplicate Suppression::       An alternative when crosspost handling fails.
+* Security::                    Decrypt and Verify.
+* Mailing List::                Mailing list minor mode.
 
 Summary Buffer Format
 
-* Summary Buffer Lines::     You can specify how summary lines should look.
-* To From Newsgroups::       How to not display your own name.
-* Summary Buffer Mode Line:: You can say how the mode line should look.
-* Summary Highlighting::     Making the summary buffer all pretty and nice.
+* Summary Buffer Lines::        You can specify how summary lines should look.
+* To From Newsgroups::          How to not display your own name.
+* Summary Buffer Mode Line::    You can say how the mode line should look.
+* Summary Highlighting::        Making the summary buffer all pretty and nice.
 
 Choosing Articles
 
-* Choosing Commands::        Commands for choosing articles.
-* Choosing Variables::       Variables that influence these commands.
+* Choosing Commands::           Commands for choosing articles.
+* Choosing Variables::          Variables that influence these commands.
 
 Reply, Followup and Post
 
 * Summary Mail Commands::       Sending mail.
 * Summary Post Commands::       Sending news.
 * Summary Message Commands::    Other Message-related commands.
-* Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''
+* Canceling and Superseding::   
 
 Marking Articles
 
-* Unread Articles::      Marks for unread articles.
-* Read Articles::        Marks for read articles.
-* Other Marks::          Marks that do not affect readedness.
+* Unread Articles::             Marks for unread articles.
+* Read Articles::               Marks for read articles.
+* Other Marks::                 Marks that do not affect readedness.
+* Setting Marks::               
+* Generic Marking Commands::    
+* Setting Process Marks::       
 
 Marking Articles
 
@@ -528,41 +573,43 @@ Marking Articles
 
 Threading
 
-* Customizing Threading::     Variables you can change to affect the threading.
-* Thread Commands::           Thread based commands in the summary buffer.
+* Customizing Threading::       Variables you can change to affect the threading.
+* Thread Commands::             Thread based commands in the summary buffer.
 
 Customizing Threading
 
-* Loose Threads::        How Gnus gathers loose threads into bigger threads.
-* Filling In Threads::   Making the threads displayed look fuller.
-* More Threading::       Even more variables for fiddling with threads.
-* Low-Level Threading::  You thought it was over... but you were wrong!
+* Loose Threads::               How Gnus gathers loose threads into bigger threads.
+* Filling In Threads::          Making the threads displayed look fuller.
+* More Threading::              Even more variables for fiddling with threads.
+* Low-Level Threading::         You thought it was over... but you were wrong!
 
 Decoding Articles
 
-* Uuencoded Articles::    Uudecode articles.
-* Shell Archives::        Unshar articles.
-* PostScript Files::      Split PostScript.
-* Other Files::           Plain save and binhex.
-* Decoding Variables::    Variables for a happy decoding.
-* Viewing Files::         You want to look at the result of the decoding?
+* Uuencoded Articles::          Uudecode articles.
+* Shell Archives::              Unshar articles.
+* PostScript Files::            Split PostScript.
+* Other Files::                 Plain save and binhex.
+* Decoding Variables::          Variables for a happy decoding.
+* Viewing Files::               You want to look at the result of the decoding?
 
 Decoding Variables
 
-* Rule Variables::          Variables that say how a file is to be viewed.
-* Other Decode Variables::  Other decode variables.
-* Uuencoding and Posting::  Variables for customizing uuencoding.
+* Rule Variables::              Variables that say how a file is to be viewed.
+* Other Decode Variables::      Other decode variables.
+* Uuencoding and Posting::      Variables for customizing uuencoding.
 
 Article Treatment
 
-* Article Highlighting::    You want to make the article look like fruit salad.
-* 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 Buttons::         Click on URLs, Message-IDs, addresses and the like.
-* Article Date::            Grumble, UT!
-* Article Signature::       What is a signature?
-* Article Miscellania::     Various other stuff.
+* Article Highlighting::        You want to make the article look like fruit salad.
+* 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.
 
 Alternative Approaches
 
@@ -571,101 +618,118 @@ Alternative Approaches
 
 Various Summary Stuff
 
-* Summary Group Information::         Information oriented commands.
-* Searching for Articles::            Multiple article commands.
-* Summary Generation Commands::       (Re)generating the summary buffer.
-* Really Various Summary Commands::   Those pesky non-conformant commands.
+* Summary Group Information::   Information oriented commands.
+* Searching for Articles::      Multiple article commands.
+* Summary Generation Commands::  
+* Really Various Summary Commands::  Those pesky non-conformant commands.
 
-The Article Buffer
+Article Buffer
 
-* Hiding Headers::        Deciding what headers should be displayed.
-* Using MIME::            Pushing articles through @sc{mime} before reading them.
-* Customizing Articles::  Tailoring the look of the articles.
-* Article Keymap::        Keystrokes available in the article buffer.
-* Misc Article::          Other stuff.
+* Hiding Headers::              Deciding what headers should be displayed.
+* Using MIME::                  Pushing articles through @sc{mime} before reading them.
+* Customizing Articles::        Tailoring the look of the articles.
+* Article Keymap::              Keystrokes available in the article buffer.
+* Misc Article::                Other stuff.
 
 Composing Messages
 
-* Mail::                 Mailing and replying.
-* Post::                 Posting and following up.
-* Posting Server::       What server should you post 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?
+* Mail::                        Mailing and replying.
+* 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?
+* Signing and encrypting::      How to compose secure messages.
 
 Select Methods
 
-* The Server Buffer::     Making and editing virtual servers.
-* Getting News::          Reading USENET news with Gnus.
-* Getting Mail::          Reading your personal mail with Gnus.
-* Browsing the Web::      Getting messages from a plethora of Web sources.
-* Other Sources::         Reading directories, files, SOUP packets.
-* Combined Groups::       Combining groups into one group.
-* Gnus Unplugged::        Reading news and mail offline.
+* Server Buffer::               Making and editing virtual servers.
+* Getting News::                Reading USENET news with Gnus.
+* Getting Mail::                Reading your personal mail with Gnus.
+* Browsing the Web::            Getting messages from a plethora of Web sources.
+* IMAP::                        Using Gnus as a @sc{imap} client.
+* Other Sources::               Reading directories, files, SOUP packets.
+* Combined Groups::             Combining groups into one group.
+* Gnus Unplugged::              Reading news and mail offline.
+
+Server Buffer
+
+* Server Buffer Format::        You can customize the look of this buffer.
+* Server Commands::             Commands to manipulate servers.
+* Example Methods::             Examples server specifications.
+* Creating a Virtual Server::   An example session.
+* Server Variables::            Which variables to set.
+* Servers and Methods::         You can use server names as select methods.
+* Unavailable Servers::         Some servers you try to contact may be down.
 
-The Server Buffer
+Getting News
 
-* Server Buffer Format::      You can customize the look of this buffer.
-* Server Commands::           Commands to manipulate servers.
-* Example Methods::           Examples server specifications.
-* Creating a Virtual Server:: An example session.
-* Server Variables::          Which variables to set.
-* Servers and Methods::       You can use server names as select methods.
-* Unavailable Servers::       Some servers you try to contact may be down.
+* NNTP::                        Reading news from an @sc{nntp} server.
+* News Spool::                  Reading news from the local spool.
 
-Getting News
+@sc{nntp}
 
-* NNTP::               Reading news from an @sc{nntp} server.
-* News Spool::         Reading news from the local spool.
+* Direct Functions::            Connecting directly to the server.
+* Indirect Functions::          Connecting indirectly to the server.
+* Common Variables::            Understood by several connection functions.
 
 Getting Mail
 
-* Mail in a Newsreader::         Important introductory notes.  
-* Getting Started Reading Mail:: A simple cookbook example.
-* Splitting Mail::               How to create mail groups.
-* Mail Sources::                 How to tell Gnus where to get mail from.
-* Mail Backend Variables::       Variables for customizing mail handling.
-* Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
-* Group Mail Splitting::         Use group customize to drive mail splitting.
-* Incorporating Old Mail::       What about the old mail you have?
-* Expiring Mail::                Getting rid of unwanted mail.
-* Washing Mail::                 Removing gruft from the mail you get.
-* Duplicates::                   Dealing with duplicated mail.
-* Not Reading Mail::             Using mail backends for reading other files.
-* Choosing a Mail Backend::      Gnus can read a variety of mail formats.
+* Mail in a Newsreader::        Important introductory notes.
+* Getting Started Reading Mail::  A simple cookbook example.
+* Splitting Mail::              How to create mail groups.
+* Mail Sources::                How to tell Gnus where to get mail from.
+* Mail Back End Variables::     Variables for customizing mail handling.
+* Fancy Mail Splitting::        Gnus can do hairy splitting of incoming mail.
+* Group Mail Splitting::        Use group customize to drive mail splitting.
+* Incorporating Old Mail::      What about the old mail you have?
+* Expiring Mail::               Getting rid of unwanted mail.
+* Washing Mail::                Removing gruft from the mail you get.
+* 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.
 
 Mail Sources
 
-* Mail Source Specifiers::       How to specify what a mail source is.
-* Mail Source Customization::    Some variables that influence things.
-* Fetching Mail::                Using the mail source specifiers.
+* Mail Source Specifiers::      How to specify what a mail source is.
+* Mail Source Customization::   Some variables that influence things.
+* Fetching Mail::               Using the mail source specifiers.
 
-Choosing a Mail Backend
+Choosing a Mail Back End
 
 * Unix Mail Box::               Using the (quite) standard Un*x mbox.
 * Rmail Babyl::                 Emacs programs use the rmail babyl format.
 * Mail Spool::                  Store your mail in a private spool?
-* MH Spool::                    An mhspool-like backend.
+* MH Spool::                    An mhspool-like back end.
 * Mail Folders::                Having one file for each group.
-* Comparing Mail Backends::     An in-depth looks at pros and cons.
+* Comparing Mail Back Ends::    An in-depth looks at pros and cons.
 
 Browsing the Web
 
-* Web Searches::          Creating groups from articles that match a string.
-* Slashdot::              Reading the Slashdot comments.
-* Ultimate::              The Ultimate Bulletin Board systems.
-* Web Archive::           Reading mailing list archived on web.
+* Archiving Mail::              
+* Web Searches::                Creating groups from articles that match a string.
+* Slashdot::                    Reading the Slashdot comments.
+* Ultimate::                    The Ultimate Bulletin Board systems.
+* Web Archive::                 Reading mailing list archived on web.
+* RSS::                         Reading RDF site summary.
+* Customizing w3::              Doing stuff to Emacs/w3 from Gnus.
+
+@sc{imap}
+
+* Splitting in IMAP::           Splitting mail with nnimap.
+* Expiring in IMAP::            Expiring mail with nnimap.
+* Editing IMAP ACLs::           Limiting/enabling other users access to a mailbox.
+* Expunging mailboxes::         Equivalent of a "compress mailbox" button.
+* A note on namespaces::        How to (not) use IMAP namespace in Gnus.
 
 Other Sources
 
-* Directory Groups::      You can read a directory as if it was a newsgroup.
-* Anything Groups::       Dired?  Who needs dired?
-* Document Groups::       Single files can be the basis of a group.
-* SOUP::                  Reading @sc{soup} packets ``offline''.
-* Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
-* IMAP::                  Using Gnus as a @sc{imap} client.
+* Directory Groups::            You can read a directory as if it was a newsgroup.
+* Anything Groups::             Dired?  Who needs dired?
+* Document Groups::             Single files can be the basis of a group.
+* SOUP::                        Reading @sc{soup} packets ``offline''.
+* Mail-To-News Gateways::       Posting articles via mail-to-news gateways.
 
 Document Groups
 
@@ -673,70 +737,67 @@ Document Groups
 
 SOUP
 
-* SOUP Commands::     Commands for creating and sending @sc{soup} packets
-* SOUP Groups::       A backend for reading @sc{soup} packets.
-* SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.
-
-@sc{imap}
-
-* Splitting in IMAP::     Splitting mail with nnimap.
-* Editing IMAP ACLs::     Limiting/enabling other users access to a mailbox.
-* Expunging mailboxes::   Equivalent of a "compress mailbox" button.
+* SOUP Commands::               Commands for creating and sending @sc{soup} packets
+* SOUP Groups::                 A back end for reading @sc{soup} packets.
+* SOUP Replies::                How to enable @code{nnsoup} to take over mail and news.
 
 Combined Groups
 
-* Virtual Groups::     Combining articles from many groups.
-* Kibozed Groups::     Looking through parts of the newsfeed for articles.
+* Virtual Groups::              Combining articles from many groups.
+* Kibozed Groups::              Looking through parts of the newsfeed for articles.
 
 Gnus Unplugged
 
-* Agent Basics::           How it all is supposed to work.
-* Agent Categories::       How to tell the Gnus Agent what to download.
-* Agent Commands::         New commands for all the buffers.
-* Agent Expiry::           How to make old articles go away.
-* Outgoing Messages::      What happens when you post/mail something?
-* Agent Variables::        Customizing is fun.
-* Example Setup::          An example @file{.gnus.el} file for offline people.
-* Batching Agents::        How to fetch news from a @code{cron} job.
-* Agent Caveats::          What you think it'll do and what it does.
+* Agent Basics::                How it all is supposed to work.
+* Agent Categories::            How to tell the Gnus Agent what to download.
+* Agent Commands::              New commands for all the buffers.
+* Agent as Cache::              The Agent is a big cache too.
+* Agent Expiry::                How to make old articles go away.
+* Agent and IMAP::              How to use the Agent with IMAP.
+* Outgoing Messages::           What happens when you post/mail something?
+* Agent Variables::             Customizing is fun.
+* Example Setup::               An example @file{.gnus.el} file for offline people.
+* Batching Agents::             How to fetch news from a @code{cron} job.
+* Agent Caveats::               What you think it'll do and what it does.
 
 Agent Categories
 
-* Category Syntax::       What a category looks like.
-* The Category Buffer::   A buffer for maintaining categories.
-* Category Variables::    Customize'r'Us.
+* Category Syntax::             What a category looks like.
+* Category Buffer::             A buffer for maintaining categories.
+* Category Variables::          Customize'r'Us.
 
 Agent Commands
 
-* Group Agent Commands::
-* Summary Agent Commands::
-* Server Agent Commands::
+* Group Agent Commands::        
+* Summary Agent Commands::      
+* Server Agent Commands::       
 
 Scoring
 
-* Summary Score Commands::   Adding score entries for the current group.
-* Group Score Commands::     General score commands.
-* Score Variables::          Customize your scoring.  (My, what terminology).
-* Score File Format::        What a score file may contain.
-* Score File Editing::       You can edit score files by hand as well.
-* Adaptive Scoring::         Big Sister Gnus knows what you read.
-* Home Score File::          How to say where new score entries are to go.
-* Followups To Yourself::    Having Gnus notice when people answer you.
-* Scoring Tips::             How to score effectively.
-* Reverse Scoring::          That problem child of old is not problem.
-* Global Score Files::       Earth-spanning, ear-splitting score files.
-* Kill Files::               They are still here, but they can be ignored.
-* Converting Kill Files::    Translating kill files to score files.
-* GroupLens::                Getting predictions on what you like to read.
-* Advanced Scoring::         Using logical expressions to build score rules.
-* Score Decays::             It can be useful to let scores wither away.
+* Summary Score Commands::      Adding score entries for the current group.
+* Group Score Commands::        General score commands.
+* Score Variables::             Customize your scoring.  (My, what terminology).
+* Score File Format::           What a score file may contain.
+* Score File Editing::          You can edit score files by hand as well.
+* Adaptive Scoring::            Big Sister Gnus knows what you read.
+* Home Score File::             How to say where new score entries are to go.
+* Followups To Yourself::       Having Gnus notice when people answer you.
+* Scoring On Other Headers::    Scoring on non-standard headers.
+* Scoring Tips::                How to score effectively.
+* Reverse Scoring::             That problem child of old is not problem.
+* Global Score Files::          Earth-spanning, ear-splitting score files.
+* Kill Files::                  They are still here, but they can be ignored.
+* Converting Kill Files::       Translating kill files to score files.
+* GroupLens::                   Getting predictions on what you like to read.
+* Advanced Scoring::            Using logical expressions to build score rules.
+* Score Decays::                It can be useful to let scores wither away.
 
 GroupLens
 
-* Using GroupLens::          How to make Gnus use GroupLens.
-* Rating Articles::          Letting GroupLens know how you rate articles.
-* Displaying Predictions::   Displaying predictions given by GroupLens.
-* GroupLens Variables::      Customizing GroupLens.
+* Using GroupLens::             How to make Gnus use GroupLens.
+* Rating Articles::             Letting GroupLens know how you rate articles.
+* Displaying Predictions::      Displaying predictions given by GroupLens.
+* GroupLens Variables::         Customizing GroupLens.
 
 Advanced Scoring
 
@@ -746,116 +807,131 @@ Advanced Scoring
 
 Various
 
-* Process/Prefix::             A convention used by many treatment commands.
-* Interactive::                Making Gnus ask you many questions.
-* Symbolic Prefixes::          How to supply some Gnus functions with options.
-* Formatting Variables::       You can specify what buffers should look like.
-* Windows Configuration::      Configuring the Gnus buffer windows.
-* Faces and Fonts::            How to change how faces look.
-* Compilation::                How to speed Gnus up.
-* Mode Lines::                 Displaying information in the mode lines.
-* Highlighting and Menus::     Making buffers look all nice and cozy.
-* Buttons::                    Get tendonitis in ten easy steps!
-* Daemons::                    Gnus can do things behind your back.
-* NoCeM::                      How to avoid spam and other fatty foods.
-* Undo::                       Some actions can be undone.
-* Moderation::                 What to do if you're a moderator.
-* XEmacs Enhancements::        There are more pictures and stuff under XEmacs.
-* 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.
+* Process/Prefix::              A convention used by many treatment commands.
+* Interactive::                 Making Gnus ask you many questions.
+* Symbolic Prefixes::           How to supply some Gnus functions with options.
+* Formatting Variables::        You can specify what buffers should look like.
+* Window Layout::               Configuring the Gnus buffer windows.
+* Faces and Fonts::             How to change how faces look.
+* Compilation::                 How to speed Gnus up.
+* Mode Lines::                  Displaying information in the mode lines.
+* Highlighting and Menus::      Making buffers look all nice and cozy.
+* Buttons::                     Get tendinitis in ten easy steps!
+* 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.
+* 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.
 
 Formatting Variables
 
-* Formatting Basics::     A formatting variable is basically a format string.
-* Mode Line Formatting::  Some rules about mode line formatting variables.
-* Advanced Formatting::   Modifying output in various ways.
-* User-Defined Specs::    Having Gnus call your own functions.
-* Formatting Fonts::      Making the formatting look colorful and nice.
+* Formatting Basics::           A formatting variable is basically a format string.
+* Mode Line Formatting::        Some rules about mode line formatting variables.
+* Advanced Formatting::         Modifying output in various ways.
+* User-Defined Specs::          Having Gnus call your own functions.
+* Formatting Fonts::            Making the formatting look colorful and nice.
+* Positioning Point::           Moving point to a position after an operation.
+* Tabulation::                  Tabulating your output.
+* Wide Characters::             Dealing with wide characters.
 
-XEmacs Enhancements
+Image Enhancements
 
-* Picons::    How to display pictures of what your reading.
-* Smileys::   Show all those happy faces the way they were meant to be shown.
-* Toolbar::   Click'n'drool.
-* XVarious::  Other XEmacsy Gnusey variables.
+* 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.
 
 Picons
 
-* Picon Basics::           What are picons and How do I get them.
-* Picon Requirements::     Don't go further if you aren't using XEmacs.
-* Easy Picons::            Displaying Picons---the easy way.
-* Hard Picons::            The way you should do it.  You'll learn something.
-* Picon Useless Configuration:: Other variables you can trash/tweak/munge/play with.
+* Picon Basics::                What are picons and How do I get them.
+* Picon Requirements::          Don't go further if you aren't using XEmacs.
+* Easy Picons::                 Displaying Picons---the easy way.
+* 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
+
+* The problem of spam::         Some background, and some solutions
+* 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.
+* Filtering Spam Using The Spam ELisp Package::  
+* Filtering Spam Using Statistics with spam-stat::  
 
 Appendices
 
-* 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.
-* Customization::                  Tailoring Gnus to your needs.
-* 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::     A question-and-answer session.
+* 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.
+* Customization::               Tailoring Gnus to your needs.
+* 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
 
-* Gnus Versions::       What Gnus versions have been released.
-* Other Gnus Versions:: Other Gnus versions that also have been released.
-* Why?::                What's the point of Gnus?
-* Compatibility::       Just how compatible is Gnus with @sc{gnus}?
-* Conformity::          Gnus tries to conform to all standards.
-* Emacsen::             Gnus can be run on a few modern Emacsen.
-* Gnus Development::    How Gnus is developed.
-* Contributors::        Oodles of people.
-* New Features::        Pointers to some of the new stuff in Gnus.
-* Newest Features::     Features so new that they haven't been written yet.
+* Gnus Versions::               What Gnus versions have been released.
+* Other Gnus Versions::         Other Gnus versions that also have been released.
+* Why?::                        What's the point of Gnus?
+* Compatibility::               Just how compatible is Gnus with @sc{gnus}?
+* Conformity::                  Gnus tries to conform to all standards.
+* Emacsen::                     Gnus can be run on a few modern Emacsen.
+* Gnus Development::            How Gnus is developed.
+* Contributors::                Oodles of people.
+* New Features::                Pointers to some of the new stuff in Gnus.
 
 New Features
 
-* ding Gnus::          New things in Gnus 5.0/5.1, the first new Gnus.
-* September Gnus::     The Thing Formally Known As Gnus 5.3/5.3.
-* Red Gnus::           Third time best---Gnus 5.4/5.5.
-* Quassia Gnus::       Two times two is four, or Gnus 5.6/5.7.
+* ding Gnus::                   New things in Gnus 5.0/5.1, the first new Gnus.
+* September Gnus::              The Thing Formally Known As Gnus 5.2/5.3.
+* Red Gnus::                    Third time best---Gnus 5.4/5.5.
+* Quassia Gnus::                Two times two is four, or Gnus 5.6/5.7.
+* Pterodactyl Gnus::            Pentad also starts with P, AKA Gnus 5.8/5.9.
 
 Customization
 
-* Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
-* Slow Terminal Connection::  You run a remote Emacs.
-* Little Disk Space::         You feel that having large setup files is icky.
-* Slow Machine::              You feel like buying a faster machine.
+* Slow/Expensive Connection::   You run a local Emacs and get the news elsewhere.
+* Slow Terminal Connection::    You run a remote Emacs.
+* Little Disk Space::           You feel that having large setup files is icky.
+* Slow Machine::                You feel like buying a faster machine.
 
 Gnus Reference Guide
 
-* Gnus Utility Functions::   Common functions and variable to use.
-* Backend Interface::        How Gnus communicates with the servers.
-* Score File Syntax::        A BNF definition of the score file standard.
-* Headers::                  How Gnus stores headers internally.
-* Ranges::                   A handy format for storing mucho numbers.
-* Group Info::               The group info format.
-* Extended Interactive::     Symbolic prefixes and stuff.
-* Emacs/XEmacs Code::        Gnus can be run under all modern Emacsen.
-* Various File Formats::     Formats of files that Gnus use.
-
-Backend Interface
-
-* Required Backend Functions::        Functions that must be implemented.
-* Optional Backend Functions::        Functions that need not be implemented.
-* Error Messaging::                   How to get messages and report errors.
-* Writing New Backends::              Extending old backends.
-* Hooking New Backends Into Gnus::    What has to be done on the Gnus end.
-* Mail-like Backends::                Some tips on mail backends.
+* Gnus Utility Functions::      Common functions and variable to use.
+* Back End Interface::          How Gnus communicates with the servers.
+* Score File Syntax::           A BNF definition of the score file standard.
+* Headers::                     How Gnus stores headers internally.
+* Ranges::                      A handy format for storing mucho numbers.
+* Group Info::                  The group info format.
+* Extended Interactive::        Symbolic prefixes and stuff.
+* Emacs/XEmacs Code::           Gnus can be run under all modern Emacsen.
+* Various File Formats::        Formats of files that Gnus use.
+
+Back End Interface
+
+* 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.
+* Mail-like Back Ends::         Some tips on mail back ends.
 
 Various File Formats
 
-* Active File Format::      Information on articles and groups available.
-* Newsgroups File Format::  Group descriptions.
+* Active File Format::          Information on articles and groups available.
+* Newsgroups File Format::      Group descriptions.
 
 Emacs for Heathens
 
-* Keystrokes::      Entering text and executing commands.
-* Emacs Lisp::      The built-in Emacs programming language.
+* Keystrokes::                  Entering text and executing commands.
+* Emacs Lisp::                  The built-in Emacs programming language.
 
 @end detailmenu
 @end menu
@@ -883,17 +959,17 @@ If you puzzle at any terms used in this manual, please refer to the
 terminology section (@pxref{Terminology}).
 
 @menu
-* Finding the News::    Choosing a method for getting news.
-* The First Time::      What does Gnus do the first time you start it?
-* The Server is Down::  How can I read my mail then?
-* Slave Gnusae::        You can have more than one Gnus active at a time.
-* Fetching a Group::    Starting Gnus just to read a group.
-* New Groups::          What is Gnus supposed to do with new groups?
-* Startup Files::       Those pesky startup files---@file{.newsrc}.
-* Auto Save::           Recovering from a crash.
-* The Active File::     Reading the active file over a slow line Takes Time.
-* Changing Servers::    You may want to move from one server to another.
-* Startup Variables::   Other variables you might change.
+* Finding the News::            Choosing a method for getting news.
+* The First Time::              What does Gnus do the first time you start it?
+* The Server is Down::          How can I read my mail then?
+* Slave Gnusae::                You can have more than one Gnus active at a time.
+* Fetching a Group::            Starting Gnus just to read a group.
+* New Groups::                  What is Gnus supposed to do with new groups?
+* Changing Servers::            You may want to move from one server to another.
+* Startup Files::               Those pesky startup files---@file{.newsrc}.
+* Auto Save::                   Recovering from a crash.
+* The Active File::             Reading the active file over a slow line Takes Time.
+* Startup Variables::           Other variables you might change.
 @end menu
 
 
@@ -923,7 +999,8 @@ If you want to read directly from the local spool, say:
 @end lisp
 
 If you can use a local spool, you probably should, as it will almost
-certainly be much faster.
+certainly be much faster.  But do not use the local spool if your
+server is running Leafnode; in this case, use @code{(nntp "localhost")}.
 
 @vindex gnus-nntpserver-file
 @cindex NNTPSERVER
@@ -969,8 +1046,8 @@ files during startup (if that's required), and new newsgroups that
 appear on these servers will be subscribed (or not) just as native
 groups are.
 
-For instance, if you use the @code{nnmbox} backend to read your mail, you
-would typically set this variable to
+For instance, if you use the @code{nnmbox} back end to read your mail,
+you would typically set this variable to
 
 @lisp
 (setq gnus-secondary-select-methods '((nnmbox "")))
@@ -1027,7 +1104,7 @@ your mail without bothering with the server at all, you can use the
 if you're in a hurry as well.  This command will not attempt to contact
 your primary server---instead, it will just activate all groups on level
 1 and 2.  (You should preferably keep no native groups on those two
-levels.)
+levels.) Also @pxref{Group Levels}.
 
 
 @node Slave Gnusae
@@ -1050,7 +1127,7 @@ conjunction with each other, you have to send $1 per usage instance to
 me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
 Applications}) will be much more expensive, of course.)
 
-Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
+Anyway, you start one Gnus up the normal way with @kbd{M-x gnus} (or
 however you do it).  Each subsequent slave Gnusae should be started with
 @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
 files, but instead save @dfn{slave files} that contain information only
@@ -1062,6 +1139,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
@@ -1087,13 +1169,13 @@ also save you some time at startup.  Even if this variable is
 @code{nil}, you can always subscribe to the new groups just by pressing
 @kbd{U} in the group buffer (@pxref{Group Maintenance}).  This variable
 is @code{ask-server} by default.  If you set this variable to
-@code{always}, then Gnus will query the backends for new groups even
+@code{always}, then Gnus will query the back ends for new groups even
 when you do the @kbd{g} command (@pxref{Scanning New Messages}).
 
 @menu
-* Checking New Groups::      Determining what groups are new.
-* Subscription Methods::     What Gnus should do with new groups.
-* Filtering New Groups::     Making Gnus ignore certain new groups.
+* Checking New Groups::         Determining what groups are new.
+* Subscription Methods::        What Gnus should do with new groups.
+* Filtering New Groups::        Making Gnus ignore certain new groups.
 @end menu
 
 
@@ -1182,7 +1264,7 @@ Kill all new groups.
 
 @item gnus-subscribe-topics
 @vindex gnus-subscribe-topics
-Put the groups into the topic that has a matching @code{subscribe} topic 
+Put the groups into the topic that has a matching @code{subscribe} topic
 parameter (@pxref{Topic Parameters}).  For instance, a @code{subscribe}
 topic parameter that looks like
 
@@ -1190,7 +1272,7 @@ topic parameter that looks like
 "nnslashdot"
 @end example
 
-will mean that all groups that match that regex will be subscribed under 
+will mean that all groups that match that regex will be subscribed under
 that topic.
 
 If no topics match the groups, the groups will be subscribed in the
@@ -1249,9 +1331,10 @@ Yet another variable that meddles here is
 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 backends (@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}.
+that come from mail back ends (@code{nnml}, @code{nnbabyl},
+@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}.
@@ -1302,9 +1385,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
@@ -1381,6 +1473,7 @@ startup files.  If you want to turn backup creation off, say something like:
 @end lisp
 
 @vindex gnus-init-file
+@vindex gnus-site-init-file
 When Gnus starts, it will read the @code{gnus-site-init-file}
 (@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
 (@file{~/.gnus} by default) files.  These are normal Emacs Lisp files
@@ -1467,9 +1560,10 @@ support the @code{LIST ACTIVE group} command), on others this isn't fast
 at all.  In any case, @code{some} should be faster than @code{nil}, and
 is certainly faster than @code{t} over slow lines.
 
-Some news servers (Leafnode and old versions of INN, for instance) do
-not support the @code{LIST ACTIVE group}.  For these servers, @code{nil}
-is probably the most efficient value for this variable.
+Some news servers (old versions of Leafnode and old versions of INN, for
+instance) do not support the @code{LIST ACTIVE group}.  For these
+servers, @code{nil} is probably the most efficient value for this
+variable.
 
 If this variable is @code{nil}, Gnus will ask for group info in total
 lock-step, which isn't very fast.  If it is @code{some} and you use an
@@ -1479,7 +1573,7 @@ performance, but if the server does not support the aforementioned
 @code{LIST ACTIVE group} command, this isn't very nice to the server.
 
 If you think that starting up Gnus takes too long, try all the three
-different values for this variable and see what works best for you. 
+different values for this variable and see what works best for you.
 
 In any case, if you use @code{some} or @code{nil}, you should definitely
 kill all groups that you aren't interested in to speed things up.
@@ -1531,7 +1625,7 @@ in a while from the group buffer instead (@pxref{Group Maintenance}).
 If non-@code{nil}, the startup message won't be displayed.  That way,
 your boss might not notice as easily that you are reading news instead
 of doing your job.  Note that this variable is used before
-@file{.gnus.el} is loaded, so it should be set in @code{.emacs} instead.
+@file{.gnus.el} is loaded, so it should be set in @file{.emacs} instead.
 
 @item gnus-no-groups-message
 @vindex gnus-no-groups-message
@@ -1549,10 +1643,30 @@ default is @samp{Tuxedomoon.Jingle4.au}.
 @end table
 
 
-@node The Group Buffer
-@chapter The Group Buffer
+@node Group Buffer
+@chapter Group Buffer
 @cindex group buffer
 
+@c Alex Schroeder suggests to rearrange this as follows:
+@c
+@c <kensanata> ok, just save it for reference.  I'll go to bed in a minute.
+@c   1. Selecting a Group, 2. (new) Finding a Group, 3. Group Levels,
+@c   4. Subscription Commands, 5. Group Maneuvering, 6. Group Data,
+@c   7. Group Score, 8. Group Buffer Format
+@c <kensanata> Group Levels should have more information on levels 5 to 9.  I
+@c   suggest to split the 4th paragraph ("Gnus considers groups...") as follows:
+@c <kensanata> First, "Gnus considers groups... (default 9)."
+@c <kensanata> New, a table summarizing what levels 1 to 9 mean.
+@c <kensanata> Third, "Gnus treats subscribed ... reasons of efficiency"
+@c <kensanata> Then expand the next paragraph or add some more to it.
+@c    This short one sentence explains levels 1 and 2, therefore I understand
+@c    that I should keep important news at 3 and boring news at 4.
+@c    Say so!  Then go on to explain why I should bother with levels 6 to 9.
+@c    Maybe keep those that you don't want to read temporarily at 6,
+@c    those that you never want to read at 8, those that offend your
+@c    human rights at 9...
+
+
 The @dfn{group buffer} lists all (or parts) of the available groups.  It
 is the first buffer shown when Gnus starts, and will never be killed as
 long as Gnus is active.
@@ -1560,7 +1674,7 @@ long as Gnus is active.
 @iftex
 @iflatex
 \gnusfigure{The Group Buffer}{320}{
-\put(75,50){\epsfig{figure=tmp/group.ps,height=9cm}}
+\put(75,50){\epsfig{figure=ps/group,height=9cm}}
 \put(120,37){\makebox(0,0)[t]{Buffer name}}
 \put(120,38){\vector(1,2){10}}
 \put(40,60){\makebox(0,0)[r]{Mode line}}
@@ -1572,23 +1686,23 @@ long as Gnus is active.
 @end iftex
 
 @menu
-* Group Buffer Format::    Information listed and how you can change it.
-* Group Maneuvering::      Commands for moving in the group buffer.
-* Selecting a Group::      Actually reading news.
-* Group Data::             Changing the info for a group.
-* Subscription Commands::  Unsubscribing, killing, subscribing.
-* Group Levels::           Levels? What are those, then?
-* Group Score::            A mechanism for finding out what groups you like.
-* Marking Groups::         You can mark groups for later processing.
-* Foreign Groups::         Creating and editing groups.
-* Group Parameters::       Each group may have different parameters set.
-* Listing Groups::         Gnus can list various subsets of the groups.
-* Sorting Groups::         Re-arrange the group order.
-* Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
-* Browse Foreign Server::  You can browse a server.  See what it has to offer.
-* Exiting Gnus::           Stop reading news and get some work done.
-* Group Topics::           A folding group mode divided into topics.
-* Misc Group Stuff::       Other stuff that you can to do.
+* Group Buffer Format::         Information listed and how you can change it.
+* Group Maneuvering::           Commands for moving in the group buffer.
+* Selecting a Group::           Actually reading news.
+* Subscription Commands::       Unsubscribing, killing, subscribing.
+* Group Data::                  Changing the info for a group.
+* Group Levels::                Levels? What are those, then?
+* Group Score::                 A mechanism for finding out what groups you like.
+* Marking Groups::              You can mark groups for later processing.
+* Foreign Groups::              Creating and editing groups.
+* Group Parameters::            Each group may have different parameters set.
+* Listing Groups::              Gnus can list various subsets of the groups.
+* Sorting Groups::              Re-arrange the group order.
+* Group Maintenance::           Maintaining a tidy @file{.newsrc} file.
+* Browse Foreign Server::       You can browse a server.  See what it has to offer.
+* Exiting Gnus::                Stop reading news and get some work done.
+* Group Topics::                A folding group mode divided into topics.
+* Misc Group Stuff::            Other stuff that you can to do.
 @end menu
 
 
@@ -1596,9 +1710,9 @@ long as Gnus is active.
 @section Group Buffer Format
 
 @menu
-* Group Line Specification::       Deciding how the group buffer is to look.
-* Group Modeline Specification::   The group buffer modeline.
-* Group Highlighting::             Having nice colors in the group buffer.
+* Group Line Specification::    Deciding how the group buffer is to look.
+* Group Modeline Specification::  The group buffer modeline.
+* Group Highlighting::          Having nice colors in the group buffer.
 @end menu
 
 
@@ -1630,13 +1744,13 @@ lines of a @code{format} specification, which is pretty much the same as
 a @code{printf} specifications, for those of you who use (feh!) C.
 @xref{Formatting Variables}.
 
-@samp{%M%S%5y: %(%g%)\n} is the value that produced those lines above.
+@samp{%M%S%5y:%B%(%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
@@ -1667,10 +1781,22 @@ Number of ticked articles.
 @item R
 Number of read articles.
 
+@item U
+Number of unseen articles.
+
 @item t
 Estimated total number of articles.  (This is really @var{max-number}
 minus @var{min-number} plus 1.)
 
+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
 Number of unread, unticked, non-dormant articles.
 
@@ -1683,6 +1809,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.
 
@@ -1695,6 +1825,9 @@ Newsgroup description.
 @item s
 Select method.
 
+@item B
+If the summary buffer for the group is open or not.
+
 @item n
 Select from where.
 
@@ -1718,6 +1851,9 @@ The default is 1---this will mean that group names like
 @samp{%} (@code{gnus-new-mail-mark}) if there has arrived new mail to
 the group lately.
 
+@item p
+@samp{#} (@code{gnus-process-mark}) if the group is process marked.
+
 @item d
 A string that says when you last read the group (@pxref{Group
 Timestamp}).
@@ -1773,15 +1909,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)
@@ -1925,6 +2061,14 @@ determines the number of articles Gnus will fetch.  If @var{N} is
 positive, Gnus fetches the @var{N} newest articles, if @var{N} is
 negative, Gnus fetches the @code{abs(@var{N})} oldest articles.
 
+Thus, @kbd{SPC} enters the group normally, @kbd{C-u SPC} offers old
+articles, @kbd{C-u 4 2 SPC} fetches the 42 newest articles, and @kbd{C-u
+- 4 2 SPC} fetches the 42 oldest ones.
+
+When you are in the group (in the Summary buffer), you can type
+@kbd{M-g} to fetch new articles, or @kbd{C-u M-g} to also show the old
+ones.
+
 @item RET
 @kindex RET (Group)
 @findex gnus-group-select-group
@@ -1953,8 +2097,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
@@ -1976,44 +2120,41 @@ be fetched.
 
 @vindex gnus-select-group-hook
 @vindex gnus-auto-select-first
-@code{gnus-auto-select-first} control whether any articles are selected
+@vindex gnus-auto-select-subject
+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.
 
 
@@ -2171,6 +2312,27 @@ reasons of efficiency.
 It is recommended that you keep all your mail groups (if any) on quite
 low levels (e.g. 1 or 2).
 
+Maybe the following description of the default behavior of Gnus helps to
+understand what these levels are all about.  By default, Gnus shows you
+subscribed nonempty groups, but by hitting @kbd{L} you can have it show
+empty subscribed groups and unsubscribed groups, too.  Type @kbd{l} to
+go back to showing nonempty subscribed groups again.  Thus, unsubscribed
+groups are hidden, in a way.
+
+Zombie and killed groups are similar to unsubscribed groups in that they
+are hidden by default.  But they are different from subscribed and
+unsubscribed groups in that Gnus doesn't ask the news server for
+information (number of messages, number of unread messages) on zombie
+and killed groups.  Normally, you use @kbd{C-k} to kill the groups you
+aren't interested in.  If most groups are killed, Gnus is faster.
+
+Why does Gnus distinguish between zombie and killed groups?  Well, when
+a new group arrives on the server, Gnus by default makes it a zombie
+group.  This means that you are normally not bothered with new groups,
+but you can type @kbd{A z} to get a list of all new groups.  Subscribe
+the ones you like and kill the ones you don't want.  (@kbd{A k} shows a
+list of killed groups.)
+
 If you want to play with the level variables, you should show some care.
 Set them once, and don't touch them ever again.  Better yet, don't touch
 them at all unless you know exactly what you're doing.
@@ -2336,7 +2498,7 @@ to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}.
 Rename the current group to something else
 (@code{gnus-group-rename-group}).  This is valid only on some
 groups---mail groups mostly.  This command might very well be quite slow
-on some backends.
+on some back ends.
 
 @item G c
 @kindex G c (Group)
@@ -2402,7 +2564,7 @@ strings to match on headers (@code{gnus-group-make-kiboze-group}).
 @findex gnus-group-enter-directory
 @cindex nneething
 Read an arbitrary directory as if it were a newsgroup with the
-@code{nneething} backend (@code{gnus-group-enter-directory}).
+@code{nneething} back end (@code{gnus-group-enter-directory}).
 @xref{Anything Groups}.
 
 @item G f
@@ -2413,10 +2575,12 @@ Read an arbitrary directory as if it were a newsgroup with the
 Make a group based on some file or other
 (@code{gnus-group-make-doc-group}).  If you give a prefix to this
 command, you will be prompted for a file name and a file type.
-Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
-@code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs},
-@code{rfc934}, @code{rfc822-forward}, @code{nsmail} and @code{forward}.
-If you run this command without a prefix, Gnus will guess at the file
+Currently supported types are @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}.  If
+you run this command without a prefix, Gnus will guess at the file
 type.  @xref{Document Groups}.
 
 @item G u
@@ -2429,20 +2593,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)
@@ -2496,6 +2659,9 @@ the dot is the key, while the thing after the dot is the value.  All the
 parameters have this form @emph{except} local variable specs, which are
 not dotted pairs, but proper lists.
 
+Some parameters have correspondant customizable variables, each of which
+is an alist of regexps and values.
+
 The following group parameters can be used:
 
 @table @code
@@ -2504,7 +2670,7 @@ The following group parameters can be used:
 Address used by when doing followups and new posts.
 
 @example
-(to-address .  "some@@where.com")
+(to-address . "some@@where.com")
 @end example
 
 This is primarily useful in mail groups that represent closed mailing
@@ -2520,9 +2686,11 @@ the articles from a mail-to-news gateway.  Posting directly to this
 group is therefore impossible---you have to send mail to the mailing
 list address instead.
 
+See also @code{gnus-parameter-to-address-alist}.
+
 @item to-list
 @cindex to-list
-Address used when doing a @kbd{a} in that group.
+Address used when doing @kbd{a} in that group.
 
 @example
 (to-list . "some@@where.com")
@@ -2542,6 +2710,26 @@ If you do an @kbd{a} command in a mail group and you don't have a
 @code{to-list} group parameter, one will be added automatically upon
 sending the message.
 
+@findex gnus-mailing-list-mode
+@cindex Mail List Groups
+If this variable is set, @code{gnus-mailing-list-mode} is turned on when
+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)},
@@ -2576,7 +2764,9 @@ 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 articles.
 
 @item auto-expire
 @cindex auto-expire
@@ -2584,6 +2774,8 @@ If the group parameter has an element that looks like @code{(auto-expire
 . t)}, all articles read will be marked as expirable.  For an
 alternative approach, @pxref{Expiring Mail}.
 
+See also @code{gnus-auto-expirable-newsgroups}.
+
 @item total-expire
 @cindex total-expire
 If the group parameter has an element that looks like
@@ -2592,14 +2784,17 @@ expiry process, even if they are not marked as expirable.  Use with
 caution.  Unread, ticked and dormant articles are not eligible for
 expiry.
 
+See also @code{gnus-total-expirable-newsgroups}.
+
 @item expiry-wait
 @cindex expiry-wait
 @vindex nnmail-expiry-wait-function
-If the group parameter has an element that looks like @code{(expiry-wait
-. 10)}, this value will override any @code{nnmail-expiry-wait} and
-@code{nnmail-expiry-wait-function} when expiring expirable messages.
-The value can either be a number of days (not necessarily an integer) or
-the symbols @code{never} or @code{immediate}.
+If the group parameter has an element that looks like
+@code{(expiry-wait . 10)}, this value will override any
+@code{nnmail-expiry-wait} and @code{nnmail-expiry-wait-function}
+(@pxref{Expiring Mail}) when expiring expirable messages.  The value
+can either be a number of days (not necessarily an integer) or the
+symbols @code{never} or @code{immediate}.
 
 @item score-file
 @cindex score file group parameter
@@ -2614,12 +2809,14 @@ Elements that look like @code{(adapt-file . "file")} will make
 All adaptive score entries will be put into this file.
 
 @item admin-address
+@cindex admin-address
 When unsubscribing from a mailing list you should never send the
 unsubscription notice to the mailing list itself.  Instead, you'd send
 messages to the administrative address.  This parameter allows you to
 put the admin address somewhere convenient.
 
 @item display
+@cindex display
 Elements that look like @code{(display . MODE)} say which articles to
 display on entering the group.  Valid values are:
 
@@ -2627,38 +2824,68 @@ 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.
+
+@item an array
+Display articles that satisfy a predicate.
+
+Here are some examples:
+
+@table @code
+@item [unread]
+Display only unread articles.
+
+@item [not expire]
+Display everything except expirable articles.
+
+@item [and (not reply) (not expire)]
+Display everything except expirable and articles you've already
+responded to.
+@end table
+
+The available operators are @code{not}, @code{and} and @code{or}.
+Predicates include @code{tick}, @code{unsend}, @code{undownload},
+@code{unread}, @code{dormant}, @code{expire}, @code{reply},
+@code{killed}, @code{bookmark}, @code{score}, @code{save},
+@code{cache}, @code{forward}, @code{unseen} and @code{recent}.
+
 @end table
 
+The @code{display} parameter works by limiting the summary buffer to
+the subset specified.  You can pop the limit by using the @kbd{/ w}
+command (@pxref{Limiting}).
+
 @item 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.
+@cindex comment
+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
 Elements that look like @code{(charset . iso-8859-1)} will make
 @code{iso-8859-1} the default charset; that is, the charset that will be
 used for all articles that do not specify a charset.
 
-@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},
-you could put @code{(gnus-show-threads nil)} in the group parameters of
-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.
+See also @code{gnus-group-charset-alist}.
 
-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
-group.  @code{dummy-variable} will be set to the result of the
-@code{(ding)} form, but who cares?
+@item ignored-charsets
+@cindex ignored-charset
+Elements that look like @code{(ignored-charsets x-unknown iso-8859-1)}
+will make @code{iso-8859-1} and @code{x-unknown} ignored; that is, the
+default charset will be used for decoding articles.
+
+See also @code{gnus-group-ignored-charsets-alist}.
 
 @item posting-style
-You can store additional posting style information for this group only
+@cindex posting-style
+You can store additional posting style information for this group
 here (@pxref{Posting Styles}).  The format is that of an entry in the
 @code{gnus-posting-styles} alist, except that there's no regexp matching
 the group name (of course).  Style elements in this group parameter will
@@ -2671,14 +2898,104 @@ like this in the group parameters:
 @example
 (posting-style
   (name "Funky Name")
+  ("X-My-Header" "Funky Value")
   (signature "Funky Signature"))
 @end example
 
+@item post-method
+@cindex post-method
+If it is set, the value is used as the method for posting message
+instead of @code{gnus-post-method}.
+
+@item banner
+@cindex banner
+An item like @code{(banner . "regex")} causes any part of an article
+that matches the regular expression "regex" to be stripped. Instead of
+"regex", you can also use the symbol @code{signature} which strips the
+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},
+you could put @code{(gnus-show-threads nil)} in the group parameters of
+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
+group.  @code{dummy-variable} will be set to the result of the
+@code{(ding)} form, but who cares?
+
 @end table
 
-Use the @kbd{G p} command to edit group parameters of a group.  You
-might also be interested in reading about topic parameters (@pxref{Topic
-Parameters}).
+Use the @kbd{G p} or the @kbd{G c} command to edit group parameters of a
+group.  (@kbd{G p} presents you with a Lisp-based interface, @kbd{G c}
+presents you with a Customize-like interface.  The latter helps avoid
+silly Lisp errors.)  You might also be interested in reading about topic
+parameters (@pxref{Topic Parameters}).
+
+@vindex gnus-parameters
+Group parameters can be set via the @code{gnus-parameters} variable too.
+But some variables, such as @code{visible}, have no effect.  For
+example:
+
+@example
+(setq gnus-parameters
+      '(("mail\\..*"
+         (gnus-show-threads nil)
+         (gnus-use-scoring nil)
+         (gnus-summary-line-format
+          "%U%R%z%I%(%[%d:%ub%-23,23f%]%) %s\n")
+         (gcc-self . t)
+         (display . all))
+
+        ("^nnimap:\\(foo.bar\\)$"
+         (to-group . "\\1"))
+
+        ("mail\\.me"
+         (gnus-use-scoring  t))
+
+        ("list\\..*"
+         (total-expire . t)
+         (broken-reply-to . t))))
+@end example
+
+String value of parameters will be subjected to regexp substitution, as
+the @code{to-group} example shows.
 
 
 @node Listing Groups
@@ -2776,6 +3093,22 @@ List all groups with cached articles (@code{gnus-group-list-cached}).
 @findex gnus-group-list-dormant
 List all groups with dormant articles (@code{gnus-group-list-dormant}).
 
+@item A /
+@kindex A / (Group)
+@findex gnus-group-list-limit
+List groups limited within the current selection
+(@code{gnus-group-list-limit}).
+
+@item A f
+@kindex A f (Group)
+@findex gnus-group-list-flush
+Flush groups from the current selection (@code{gnus-group-list-flush}).
+
+@item A p
+@kindex A p (Group)
+@findex gnus-group-list-plus
+List groups plus the current selection (@code{gnus-group-list-plus}).
+
 @end table
 
 @vindex gnus-permanently-visible-groups
@@ -2835,6 +3168,10 @@ Sort by number of unread articles.
 @findex gnus-group-sort-by-method
 Sort alphabetically on the select method.
 
+@item gnus-group-sort-by-server
+@findex gnus-group-sort-by-server
+Sort alphabetically on the Gnus server name.
+
 
 @end table
 
@@ -2880,9 +3217,15 @@ Sort the group buffer by group rank
 @item G S m
 @kindex G S m (Group)
 @findex gnus-group-sort-groups-by-method
-Sort the group buffer alphabetically by backend name
+Sort the group buffer alphabetically by back end name
 (@code{gnus-group-sort-groups-by-method}).
 
+@item G S n
+@kindex G S n (Group)
+@findex gnus-group-sort-groups-by-real-name
+Sort the group buffer alphabetically by real (unprefixed) group name
+(@code{gnus-group-sort-groups-by-real-name}).
+
 @end table
 
 All the commands below obey the process/prefix convention
@@ -2927,11 +3270,24 @@ Sort the groups by group rank
 @item G P m
 @kindex G P m (Group)
 @findex gnus-group-sort-selected-groups-by-method
-Sort the groups alphabetically by backend name
+Sort the groups alphabetically by back end name
 (@code{gnus-group-sort-selected-groups-by-method}).
 
+@item G P n
+@kindex G P n (Group)
+@findex gnus-group-sort-selected-groups-by-real-name
+Sort the groups alphabetically by real (unprefixed) group name
+(@code{gnus-group-sort-selected-groups-by-real-name}).
+
+@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
+move groups around.
 
 
 @node Group Maintenance
@@ -2958,12 +3314,14 @@ zombies.
 @kindex C-c C-x (Group)
 @findex gnus-group-expire-articles
 Run all expirable articles in the current group through the expiry
-process (if any) (@code{gnus-group-expire-articles}).
+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 articles in all groups through the expiry process
+Run all expirable articles in all groups through the expiry process
 (@code{gnus-group-expire-all-groups}).
 
 @end table
@@ -3025,6 +3383,11 @@ subscribe to it (@code{gnus-browse-unsubscribe-current-group}).
 @findex gnus-browse-exit
 Exit browse mode (@code{gnus-browse-exit}).
 
+@item d
+@kindex d (Browse)
+@findex gnus-browse-describe-group
+Describe the current group (@code{gnus-browse-describe-group}).
+
 @item ?
 @kindex ? (Browse)
 @findex gnus-browse-describe-briefly
@@ -3097,7 +3460,7 @@ groups or the sex groups---or both!  Go wild!
 @iftex
 @iflatex
 \gnusfigure{Group Topics}{400}{
-\put(75,50){\epsfig{figure=tmp/group-topic.ps,height=9cm}}
+\put(75,50){\epsfig{figure=ps/group-topic,height=9cm}}
 }
 @end iflatex
 @end iftex
@@ -3124,69 +3487,28 @@ To get this @emph{fab} functionality you simply turn on (ooh!) the
 is a toggling command.)
 
 Go ahead, just try it.  I'll still be here when you get back.  La de
-dum...  Nice tune, that...  la la la...  What, you're back? Yes, and now
-press @kbd{l}.  There.  All your groups are now listed under
+dum...  Nice tune, that...  la la la...  What, you're back?  Yes, and
+now press @kbd{l}.  There.  All your groups are now listed under
 @samp{misc}.  Doesn't that make you feel all warm and fuzzy?  Hot and
 bothered?
 
 If you want this permanently enabled, you should add that minor mode to
-the hook for the group mode:
+the hook for the group mode.  Put the following line in your
+@file{~/.gnus} file:
 
 @lisp
 (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
 @end lisp
 
 @menu
-* Topic Variables::    How to customize the topics the Lisp Way.
-* Topic Commands::     Interactive E-Z commands.
-* Topic Sorting::      Sorting each topic individually.
-* Topic Topology::     A map of the world.
-* Topic Parameters::   Parameters that apply to all groups in a topic.
+* 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.
 @end menu
 
 
-@node Topic Variables
-@subsection Topic Variables
-@cindex topic variables
-
-Now, if you select a topic, it will fold/unfold that topic, which is
-really neat, I think.
-
-@vindex gnus-topic-line-format
-The topic lines themselves are created according to the
-@code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
-Valid elements are:
-
-@table @samp
-@item i
-Indentation.
-@item n
-Topic name.
-@item v
-Visibility.
-@item l
-Level.
-@item g
-Number of groups in the topic.
-@item a
-Number of unread articles in the topic.
-@item A
-Number of unread articles in the topic and all its subtopics.
-@end table
-
-@vindex gnus-topic-indent-level
-Each sub-topic (and the groups in the sub-topics) will be indented with
-@code{gnus-topic-indent-level} times the topic level number of spaces.
-The default is 2.
-
-@vindex gnus-topic-mode-hook
-@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
-
-@vindex gnus-topic-display-empty-topics
-The @code{gnus-topic-display-empty-topics} says whether to display even
-topics that have no unread articles in them.  The default is @code{t}.
-
-
 @node Topic Commands
 @subsection Topic Commands
 @cindex topic commands
@@ -3195,6 +3517,16 @@ When the topic minor mode is turned on, a new @kbd{T} submap will be
 available.  In addition, a few of the standard keys change their
 definitions slightly.
 
+In general, the following kinds of operations are possible on topics.
+First of all, you want to create topics.  Secondly, you want to put
+groups in topics and to move them around until you have an order you
+like.  The third kind of operation is to show/hide parts of the whole
+shebang.  You might want to hide a topic including its subtopics and
+groups, to get a better overview of the other groups.
+
+Here is a list of the basic keys that you might need to set up topics
+the way you like.
+
 @table @kbd
 
 @item T n
@@ -3203,6 +3535,77 @@ definitions slightly.
 Prompt for a new topic name and create it
 (@code{gnus-topic-create-topic}).
 
+@item T TAB
+@itemx TAB
+@kindex T TAB (Topic)
+@kindex TAB (Topic)
+@findex gnus-topic-indent
+``Indent'' the current topic so that it becomes a sub-topic of the
+previous topic (@code{gnus-topic-indent}).  If given a prefix,
+``un-indent'' the topic instead.
+
+@item M-TAB
+@kindex M-TAB (Topic)
+@findex gnus-topic-unindent
+``Un-indent'' the current topic so that it becomes a sub-topic of the
+parent of its current parent (@code{gnus-topic-unindent}).
+
+@end table
+
+The following two keys can be used to move groups and topics around.
+They work like the well-known cut and paste.  @kbd{C-k} is like cut and
+@kbd{C-y} is like paste.  Of course, this being Emacs, we use the terms
+kill and yank rather than cut and paste.
+
+@table @kbd
+
+@item C-k
+@kindex C-k (Topic)
+@findex gnus-topic-kill-group
+Kill a group or topic (@code{gnus-topic-kill-group}).  All groups in the
+topic will be removed along with the topic.
+
+@item C-y
+@kindex C-y (Topic)
+@findex gnus-topic-yank-group
+Yank the previously killed group or topic
+(@code{gnus-topic-yank-group}).  Note that all topics will be yanked
+before all groups.
+
+So, to move a topic to the beginning of the list of topics, just hit
+@kbd{C-k} on it.  This is like the `cut' part of cut and paste.  Then,
+move the cursor to the beginning of the buffer (just below the `Gnus'
+topic) and hit @kbd{C-y}.  This is like the `paste' part of cut and
+paste.  Like I said -- E-Z.
+
+You can use @kbd{C-k} and @kbd{C-y} on groups as well as on topics.  So
+you can move topics around as well as groups.
+
+@end table
+
+After setting up the topics the way you like them, you might wish to
+hide a topic, or to show it again.  That's why we have the following
+key.
+
+@table @kbd
+
+@item RET
+@kindex RET (Topic)
+@findex gnus-topic-select-group
+@itemx SPACE
+Either select a group or fold a topic (@code{gnus-topic-select-group}).
+When you perform this command on a group, you'll enter the group, as
+usual.  When done on a topic line, the topic will be folded (if it was
+visible) or unfolded (if it was folded already).  So it's basically a
+toggling command on topics.  In addition, if you give a numerical
+prefix, group on that level (and lower) will be displayed.
+
+@end table
+
+Now for a list of other commands, in no particular order.
+
+@table @kbd
+
 @item T m
 @kindex T m (Topic)
 @findex gnus-topic-move-group
@@ -3213,7 +3616,7 @@ convention (@pxref{Process/Prefix}).
 @item T j
 @kindex T j (Topic)
 @findex gnus-topic-jump-to-topic
-Go to a topic (@code{gnus-topic-jump-to-topic}).  
+Go to a topic (@code{gnus-topic-jump-to-topic}).
 
 @item T c
 @kindex T c (Topic)
@@ -3222,6 +3625,18 @@ Copy the current group to some other topic
 (@code{gnus-topic-copy-group}).  This command uses the process/prefix
 convention (@pxref{Process/Prefix}).
 
+@item T h
+@kindex T h (Topic)
+@findex gnus-topic-hide-topic
+Hide the current topic (@code{gnus-topic-hide-topic}).  If given
+a prefix, hide the topic permanently.
+
+@item T s
+@kindex T s (Topic)
+@findex gnus-topic-show-topic
+Show the current topic (@code{gnus-topic-show-topic}).  If given
+a prefix, show the topic permanently.
+
 @item T D
 @kindex T D (Topic)
 @findex gnus-topic-remove-group
@@ -3266,50 +3681,12 @@ Mark all groups in the current topic with the process mark
 Remove the process mark from all groups in the current topic
 (@code{gnus-topic-unmark-topic}).
 
-@item T TAB
-@itemx TAB
-@kindex T TAB (Topic)
-@kindex TAB (Topic)
-@findex gnus-topic-indent
-``Indent'' the current topic so that it becomes a sub-topic of the
-previous topic (@code{gnus-topic-indent}).  If given a prefix,
-``un-indent'' the topic instead.
-
-@item M-TAB
-@kindex M-TAB (Topic)
-@findex gnus-topic-unindent
-``Un-indent'' the current topic so that it becomes a sub-topic of the
-parent of its current parent (@code{gnus-topic-unindent}).
-
-@item RET
-@kindex RET (Topic)
-@findex gnus-topic-select-group
-@itemx SPACE
-Either select a group or fold a topic (@code{gnus-topic-select-group}).
-When you perform this command on a group, you'll enter the group, as
-usual.  When done on a topic line, the topic will be folded (if it was
-visible) or unfolded (if it was folded already).  So it's basically a
-toggling command on topics.  In addition, if you give a numerical
-prefix, group on that level (and lower) will be displayed.
-
 @item C-c C-x
 @kindex C-c C-x (Topic)
 @findex gnus-topic-expire-articles
-Run all expirable articles in the current group or topic through the expiry
-process (if any) (@code{gnus-topic-expire-articles}).
-
-@item C-k
-@kindex C-k (Topic)
-@findex gnus-topic-kill-group
-Kill a group or topic (@code{gnus-topic-kill-group}).  All groups in the
-topic will be removed along with the topic.
-
-@item C-y
-@kindex C-y (Topic)
-@findex gnus-topic-yank-group
-Yank the previously killed group or topic
-(@code{gnus-topic-yank-group}).  Note that all topics will be yanked
-before all groups.
+Run all expirable articles in the current group or topic through the
+expiry process (if any)
+(@code{gnus-topic-expire-articles}). (@pxref{Expiring Mail}).
 
 @item T r
 @kindex T r (Topic)
@@ -3327,6 +3704,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
@@ -3339,6 +3726,48 @@ Edit the topic parameters (@code{gnus-topic-edit-parameters}).
 @end table
 
 
+@node Topic Variables
+@subsection Topic Variables
+@cindex topic variables
+
+The previous section told you how to tell Gnus which topics to display.
+This section explains how to tell Gnus what to display about each topic.
+
+@vindex gnus-topic-line-format
+The topic lines themselves are created according to the
+@code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
+Valid elements are:
+
+@table @samp
+@item i
+Indentation.
+@item n
+Topic name.
+@item v
+Visibility.
+@item l
+Level.
+@item g
+Number of groups in the topic.
+@item a
+Number of unread articles in the topic.
+@item A
+Number of unread articles in the topic and all its subtopics.
+@end table
+
+@vindex gnus-topic-indent-level
+Each sub-topic (and the groups in the sub-topics) will be indented with
+@code{gnus-topic-indent-level} times the topic level number of spaces.
+The default is 2.
+
+@vindex gnus-topic-mode-hook
+@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
+
+@vindex gnus-topic-display-empty-topics
+The @code{gnus-topic-display-empty-topics} says whether to display even
+topics that have no unread articles in them.  The default is @code{t}.
+
+
 @node Topic Sorting
 @subsection Topic Sorting
 @cindex topic sorting
@@ -3381,12 +3810,27 @@ Sort the current topic by group rank
 @item T S m
 @kindex T S m (Topic)
 @findex gnus-topic-sort-groups-by-method
-Sort the current topic alphabetically by backend name
+Sort the current topic alphabetically by back end name
 (@code{gnus-topic-sort-groups-by-method}).
 
+@item T S e
+@kindex T S e (Topic)
+@findex gnus-topic-sort-groups-by-server
+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
@@ -3446,10 +3890,15 @@ parameters:
 
 @table @code
 @item subscribe
-When subscribing new groups by topic (@pxref{Subscription Methods}), the 
-@code{subscribe} topic parameter says what groups go in what topic.  Its 
+When subscribing new groups by topic (@pxref{Subscription Methods}), the
+@code{subscribe} topic parameter says what groups go in what topic.  Its
 value should be a regexp to match the groups that should go in that
-topic. 
+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
 
@@ -3500,10 +3949,11 @@ happens.  You just have to be careful if you do stuff like that.
 @section Misc Group Stuff
 
 @menu
-* Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
-* 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.
+* Scanning New Messages::       Asking Gnus to see whether new messages have arrived.
+* 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
@@ -3512,18 +3962,38 @@ happens.  You just have to be careful if you do stuff like that.
 @kindex ^ (Group)
 @findex gnus-group-enter-server-mode
 Enter the server buffer (@code{gnus-group-enter-server-mode}).
-@xref{The Server Buffer}.
+@xref{Server Buffer}.
 
 @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
 
@@ -3564,9 +4034,12 @@ For example:
 @end lisp
 
 @item gnus-group-name-charset-group-alist
+@cindex UTF-8 group names
 @vindex gnus-group-name-charset-group-alist
-An alist of regexp of group name and the charset for group names. 
-It is used to show non-ASCII group names.
+An alist of regexp of group name and the charset for group names.  It
+is used to show non-ASCII group names.  @code{((".*" utf-8))} is the
+default value if UTF-8 is supported, otherwise the default is
+@code{nil}.
 
 For example:
 @lisp
@@ -3591,7 +4064,7 @@ Check the server(s) for new articles.  If the numerical prefix is used,
 this command will check only groups of level @var{arg} and lower
 (@code{gnus-group-get-new-news}).  If given a non-numerical prefix, this
 command will force a total re-reading of the active file(s) from the
-backend(s).
+back end(s).
 
 @item M-g
 @kindex M-g (Group)
@@ -3652,6 +4125,37 @@ for fetching the file.
 If fetching from the first site is unsuccessful, Gnus will attempt to go
 through @code{gnus-group-faq-directory} and try to open them one by one.
 
+@item H c
+@kindex H c (Group)
+@findex gnus-group-fetch-charter
+@vindex gnus-group-charter-alist
+@cindex charter
+Try to open the charter for the current group in a web browser
+(@code{gnus-group-fetch-charter}).  Query for a group if given a
+prefix argument.
+
+Gnus will use @code{gnus-group-charter-alist} to find the location of
+the charter.  If no location is known, Gnus will fetch the control
+messages for the group, which in some cases includes the charter.
+
+@item H C
+@kindex H C (Group)
+@findex gnus-group-fetch-control
+@vindex gnus-group-fetch-control-use-browse-url
+@cindex control message
+Fetch the control messages for the group from the archive at
+@code{ftp.isc.org} (@code{gnus-group-fetch-control}). Query for a
+group if given a prefix argument.
+
+If @code{gnus-group-fetch-control-use-browse-url} is non-@code{nil},
+Gnus will open the control messages in a browser using
+@code{browse-url}.  Otherwise they are fetched using @code{ange-ftp}
+and displayed in an ephemeral group.
+
+Note that the control messages are compressed.  To use this command
+you need to turn on @code{auto-compression-mode}
+(@pxref{(emacs)Compressed Files}).
+
 @item H d
 @itemx C-c C-d
 @c @icon{gnus-group-describe-group}
@@ -3730,6 +4234,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
@@ -3761,8 +4279,70 @@ file(s) whether Gnus thinks it is necessary or not.
 @end table
 
 
-@node The Summary Buffer
-@chapter The Summary Buffer
+@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-@code{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 @code{nil}. (When
+@code{gnus-sieve-crosspost} is non-@code{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
 
 A line for each article is displayed in the summary buffer.  You can
@@ -3779,10 +4359,11 @@ You can have as many summary buffers open as you wish.
 * Choosing Articles::           Reading articles.
 * Paging the Article::          Scrolling the current article.
 * Reply Followup and Post::     Posting articles.
+* Delayed Articles::            Send articles at a later time.
 * Marking Articles::            Marking articles as read, expirable, etc.
 * Limiting::                    You can limit the summary buffer.
 * Threading::                   How threads are made.
-* Sorting::                     How articles and threads are sorted.
+* Sorting the Summary Buffer::  How articles and threads are sorted.
 * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
 * Article Caching::             You may store articles in a cache.
 * Persistent Articles::         Making articles expiry-resistant.
@@ -3799,9 +4380,12 @@ You can have as many summary buffers open as you wish.
 * Tree Display::                A more visual display of threads.
 * Mail Group Commands::         Some commands can only be used in mail groups.
 * Various Summary Stuff::       What didn't fit anywhere else.
-* Exiting the Summary Buffer::  Returning to the Group buffer.
+* Exiting the Summary Buffer::  Returning to the Group buffer,
+                                or reselecting the current group.
 * Crosspost Handling::          How crossposted articles are dealt with.
 * Duplicate Suppression::       An alternative when crosspost handling fails.
+* Security::                    Decrypt and Verify.
+* Mailing List::                Mailing list minor mode.
 @end menu
 
 
@@ -3812,17 +4396,17 @@ You can have as many summary buffers open as you wish.
 @iftex
 @iflatex
 \gnusfigure{The Summary Buffer}{180}{
-\put(0,0){\epsfig{figure=tmp/summary.ps,width=7.5cm}}
-\put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-article.ps,width=7.5cm}}}
+\put(0,0){\epsfig{figure=ps/summary,width=7.5cm}}
+\put(445,0){\makebox(0,0)[br]{\epsfig{figure=ps/summary-article,width=7.5cm}}}
 }
 @end iflatex
 @end iftex
 
 @menu
-* Summary Buffer Lines::     You can specify how summary lines should look.
-* To From Newsgroups::       How to not display your own name.
-* Summary Buffer Mode Line:: You can say how the mode line should look.
-* Summary Highlighting::     Making the summary buffer all pretty and nice.
+* Summary Buffer Lines::        You can specify how summary lines should look.
+* To From Newsgroups::          How to not display your own name.
+* Summary Buffer Mode Line::    You can say how the mode line should look.
+* Summary Highlighting::        Making the summary buffer all pretty and nice.
 @end menu
 
 @findex mail-extract-address-components
@@ -3857,9 +4441,17 @@ the @code{gnus-summary-line-format} variable.  It works along the same
 lines as a normal @code{format} string, with some extensions
 (@pxref{Formatting Variables}).
 
-The default string is @samp{%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n}.
+There should always be a colon or a point position marker on the line;
+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 following format specification characters are understood:
+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:
 
 @table @samp
 @item N
@@ -3876,8 +4468,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
@@ -3889,10 +4481,61 @@ the @code{a} spec.
 @item L
 Number of lines in the article.
 @item c
-Number of characters in the article. This specifier is not supported in some
-methods (like nnfolder).
+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
+A complex trn-style thread tree, showing response-connecting trace
+lines.  A thread could be drawn like this:
+
+@example
+>
++->
+| +->
+| | \->
+| |   \->
+| \->
++->
+\->
+@end example
+
+You can customize the appearance with the following options.  Note
+that it is possible to make the thread display look really neat by
+replacing the default ASCII characters with graphic line-drawing
+glyphs.
+@table @code
+@item gnus-sum-thread-tree-root
+@vindex gnus-sum-thread-tree-root
+Used for the root of a thread.  If @code{nil}, use subject
+instead. The default is @samp{> }.
+
+@item gnus-sum-thread-tree-single-indent
+@vindex gnus-sum-thread-tree-single-indent
+Used for a thread with just one message.  If @code{nil}, use subject
+instead.  The default is @samp{}.
+
+@item gnus-sum-thread-tree-vertical
+@vindex gnus-sum-thread-tree-vertical
+Used for drawing a vertical line.  The default is @samp{| }.
+
+@item gnus-sum-thread-tree-indent
+@vindex gnus-sum-thread-tree-indent
+Used for indenting.  The default is @samp{  }. 
+
+@item gnus-sum-thread-tree-leaf-with-other
+@vindex gnus-sum-thread-tree-leaf-with-other
+Used for a leaf with brothers.  The default is @samp{+-> }.
+
+@item gnus-sum-thread-tree-single-leaf
+@vindex gnus-sum-thread-tree-single-leaf
+Used for a leaf without brothers.  The default is @samp{\-> }
+
+@end table
+
 @item T
 Nothing if the article is a root and lots of spaces if it isn't (it
 pushes everything after it off the screen).
@@ -3907,12 +4550,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}).
@@ -3946,6 +4589,9 @@ article has any children.
 The line number.
 @item O
 Download mark.
+@item &user-date;
+Age sensitive date format.  Various date format is defined in
+@code{gnus-user-date-format-alist}.
 @item u
 User defined specifier.  The next character in the format string should
 be a letter.  Gnus will call the function
@@ -3955,6 +4601,10 @@ argument.  The function should return a string, which will be inserted
 into the summary just like information from any other summary specifier.
 @end table
 
+Text between @samp{%(} and @samp{%)} will be highlighted with
+@code{gnus-mouse-face} when the mouse point is placed inside the area.
+There can only be one such area.
+
 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
 have to be handled with care.  For reasons of efficiency, Gnus will
 compute what column these characters will end up in, and ``hard-code''
@@ -4018,28 +4668,37 @@ 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
 @code{%n} spec to the @code{%f} spec in the
 @code{gnus-summary-line-format} variable.
 
-In summary, you'd typically do something like the following:
+In summary, you'd typically put something like the following in
+@file{~/.gnus}:
 
 @lisp
 (setq gnus-extra-headers
       '(To Newsgroups))
 (setq nnmail-extra-headers gnus-extra-headers)
 (setq gnus-summary-line-format
-      "%U%R%z%I%(%[%4L: %-20,20f%]%) %s\n")
+      "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n")
 (setq gnus-ignored-from-addresses
       "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
@@ -4163,14 +4822,6 @@ Go to the next summary line of an unread article
 Go to the previous summary line of an unread article
 (@code{gnus-summary-prev-unread-subject}).
 
-@item G j
-@itemx j
-@kindex j (Summary)
-@kindex G j (Summary)
-@findex gnus-summary-goto-article
-Ask for an article number or @code{Message-ID}, and then go to that
-article (@code{gnus-summary-goto-article}).
-
 @item G g
 @kindex G g (Summary)
 @findex gnus-summary-goto-subject
@@ -4194,13 +4845,13 @@ no more unread articles after the current one, Gnus will offer to go to
 the next group.  If this variable is @code{t} and the next group is
 empty, Gnus will exit summary mode and return to the group buffer.  If
 this variable is neither @code{t} nor @code{nil}, Gnus will select the
-next group, no matter whether it has any unread articles or not.  As a
-special case, if this variable is @code{quietly}, Gnus will select the
-next group without asking for confirmation.  If this variable is
-@code{almost-quietly}, the same will happen only if you are located on
-the last article in the group.  Finally, if this variable is
-@code{slightly-quietly}, the @kbd{Z n} command will go to the next group
-without confirmation.  Also @pxref{Group Levels}.
+next group with unread articles.  As a special case, if this variable
+is @code{quietly}, Gnus will select the next group without asking for
+confirmation.  If this variable is @code{almost-quietly}, the same
+will happen only if you are located on the last article in the group.
+Finally, if this variable is @code{slightly-quietly}, the @kbd{Z n}
+command will go to the next group without confirmation.  Also
+@pxref{Group Levels}.
 
 @item gnus-auto-select-same
 @vindex gnus-auto-select-same
@@ -4239,8 +4890,8 @@ the given number of lines from the top.
 @cindex selecting articles
 
 @menu
-* Choosing Commands::        Commands for choosing articles.
-* Choosing Variables::       Variables that influence these commands.
+* Choosing Commands::           Commands for choosing articles.
+* Choosing Variables::          Variables that influence these commands.
 @end menu
 
 
@@ -4250,6 +4901,9 @@ the given number of lines from the top.
 None of the following movement commands understand the numeric prefix,
 and they all select and display an article.
 
+If you want to fetch new articles or redisplay the group, see
+@ref{Exiting the Summary Buffer}.
+
 @table @kbd
 @item SPACE
 @kindex SPACE (Summary)
@@ -4311,8 +4965,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
@@ -4332,6 +4987,15 @@ command above in that you can pop as many previous articles off the
 history as you like, while @kbd{l} toggles the two last read articles.
 For a somewhat related issue (if you use these commands a lot),
 @pxref{Article Backlog}.
+
+@item G j
+@itemx j
+@kindex j (Summary)
+@kindex G j (Summary)
+@findex gnus-summary-goto-article
+Ask for an article number or @code{Message-ID}, and then go to that
+article (@code{gnus-summary-goto-article}).
+
 @end table
 
 
@@ -4351,7 +5015,9 @@ the server and display it in the article buffer.
 @item gnus-select-article-hook
 @vindex gnus-select-article-hook
 This hook is called whenever an article is selected.  By default it
-exposes any threads hidden under the selected article.
+exposes any threads hidden under the selected article.  If you wish
+that the Agent saves all articles you read, putting
+@code{gnus-agent-fetch-selected-article} on this hook should do it.
 
 @item gnus-mark-article-hook
 @vindex gnus-mark-article-hook
@@ -4417,8 +5083,8 @@ If given a numerical prefix, you can do semi-manual charset stuff.
 encoded in the @code{cn-gb-2312} charset.  If you have
 
 @lisp
-(setq gnus-summary-show-article-charset-alist 
-      '((1 . cn-gb-2312) 
+(setq gnus-summary-show-article-charset-alist
+      '((1 . cn-gb-2312)
         (2 . big5)))
 @end lisp
 
@@ -4462,7 +5128,7 @@ Select the article buffer (@code{gnus-summary-select-article-buffer}).
 * Summary Mail Commands::       Sending mail.
 * Summary Post Commands::       Sending news.
 * Summary Message Commands::    Other Message-related commands.
-* Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''
+* Canceling and Superseding::   
 @end menu
 
 
@@ -4510,6 +5176,35 @@ Mail a wide reply to the current article and include the original
 message (@code{gnus-summary-wide-reply-with-original}).  This command uses
 the process/prefix convention.
 
+@item S v
+@kindex S v (Summary)
+@findex gnus-summary-very-wide-reply
+Mail a very wide reply to the author of the current article
+(@code{gnus-summary-wide-reply}).  A @dfn{very wide reply} is a reply
+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 B r
+@kindex S B r (Summary)
+@findex gnus-summary-reply-broken-reply-to
+Mail a reply to the author of the current article but ignore the
+@code{Reply-To} field (@code{gnus-summary-reply-broken-reply-to}).
+
+@item S B R
+@kindex S B R (Summary)
+@findex gnus-summary-reply-broken-reply-to-with-original
+Mail a reply to the author of the current article and include the
+original message but ignore the @code{Reply-To} field
+(@code{gnus-summary-reply-broken-reply-to-with-original}).
+
 @item S o m
 @itemx C-c C-f
 @kindex S o m (Summary)
@@ -4520,12 +5215,13 @@ Forward the current article to some other person
 (@code{gnus-summary-mail-forward}).  If no prefix is given, the message
 is forwarded according to the value of (@code{message-forward-as-mime})
 and (@code{message-forward-show-mml}); if the prefix is 1, decode the
-message and forward directly inline; if the prefix is 2, foward message
-as an rfc822 MIME section; if the prefix is 3, decode message and
-forward as an rfc822 MIME section; if the prefix is 4, foward message
+message and forward directly inline; if the prefix is 2, forward message
+as an rfc822 @sc{mime} section; if the prefix is 3, decode message and
+forward as an rfc822 @sc{mime} section; if the prefix is 4, forward message
 directly inline; otherwise, the message is forwarded as no prefix given
 but use the flipped value of (@code{message-forward-as-mime}).  By
-default, the message is decoded and forwarded as an rfc822 MIME section.
+default, the message is decoded and forwarded as an rfc822 @sc{mime}
+section.
 
 @item S m
 @itemx m
@@ -4533,8 +5229,24 @@ default, the message is decoded and forwarded as an rfc822 MIME section.
 @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)
@@ -4565,7 +5277,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}).
@@ -4594,7 +5306,8 @@ command understands the process/prefix convention
 
 @end table
 
-Also @pxref{(message)Header Commands} for more information.
+Also @xref{Header Commands, ,Header Commands, message, The Message
+Manual}, for more information.
 
 
 @node Summary Post Commands
@@ -4611,8 +5324,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
@@ -4650,16 +5364,16 @@ the process/prefix convention.
 @kindex S o p (Summary)
 @findex gnus-summary-post-forward
 Forward the current article to a newsgroup
-(@code{gnus-summary-post-forward}).  
+(@code{gnus-summary-post-forward}).
  If no prefix is given, the message is forwarded according to the value
 of (@code{message-forward-as-mime}) and
 (@code{message-forward-show-mml}); if the prefix is 1, decode the
-message and forward directly inline; if the prefix is 2, foward message
-as an rfc822 MIME section; if the prefix is 3, decode message and
-forward as an rfc822 MIME section; if the prefix is 4, foward message
+message and forward directly inline; if the prefix is 2, forward message
+as an rfc822 @sc{mime} section; if the prefix is 3, decode message and
+forward as an rfc822 @sc{mime} section; if the prefix is 4, forward message
 directly inline; otherwise, the message is forwarded as no prefix given
 but use the flipped value of (@code{message-forward-as-mime}).  By
-default, the message is decoded and forwarded as an rfc822 MIME section.
+default, the message is decoded and forwarded as an rfc822 @sc{mime} section.
 
 @item S O p
 @kindex S O p (Summary)
@@ -4678,7 +5392,8 @@ Uuencode a file, split it into parts, and post it as a series
 (@code{gnus-uu-post-news}).  (@pxref{Uuencoding and Posting}).
 @end table
 
-Also @pxref{(message)Header Commands} for more information.
+Also @xref{Header Commands, ,Header Commands, message, The Message
+Manual}, for more information.
 
 
 @node Summary Message Commands
@@ -4751,6 +5466,101 @@ canceled/superseded.
 
 Just remember, kids: There is no 'c' in 'supersede'.
 
+@node Delayed Articles
+@section Delayed Articles
+@cindex delayed sending
+@cindex send delayed
+
+Sometimes, you might wish to delay the sending of a message.  For
+example, you might wish to arrange for a message to turn up just in time
+to remind your about the birthday of your Significant Other.  For this,
+there is the @code{gnus-delay} package.  Setup is simple:
+
+@lisp
+(gnus-delay-initialize)
+@end lisp
+
+@findex gnus-delay-article
+Normally, to send a message you use the @kbd{C-c C-c} command from
+Message mode.  To delay a message, use @kbd{C-c C-j}
+(@code{gnus-delay-article}) instead.  This will ask you for how long the
+message should be delayed.  Possible answers are:
+
+@itemize @bullet
+@item
+A time span.  Consists of an integer and a letter.  For example,
+@code{42d} means to delay for 42 days.  Available letters are @code{m}
+(minutes), @code{h} (hours), @code{d} (days), @code{w} (weeks), @code{M}
+(months) and @code{Y} (years).
+
+@item
+A specific date.  Looks like @code{YYYYY-MM-DD}.  The message will be
+delayed until that day, at a specific time (eight o'clock by default).
+See also @code{gnus-delay-default-hour}.
+
+@item
+A specific time of day.  Given in @code{hh:mm} format, 24h, no am/pm
+stuff.  The deadline will be at that time today, except if that time has
+already passed, then it's at the given time tomorrow.  So if it's ten
+o'clock in the morning and you specify @code{11:15}, then the deadline
+is one hour and fifteen minutes hence.  But if you specify @code{9:20},
+that means a time tomorrow.
+@end itemize
+
+The action of the @code{gnus-delay-article} command is influenced by a
+couple of variables:
+
+@table @code
+@item gnus-delay-default-hour
+@vindex gnus-delay-default-hour
+When you specify a specific date, the message will be due on that hour
+on the given date.  Possible values are integers 0 through 23.
+
+@item gnus-delay-default-delay
+@vindex gnus-delay-default-delay
+This is a string and gives the default delay.  It can be of any of the
+formats described above.
+
+@item gnus-delay-group
+@vindex gnus-delay-group
+Delayed articles will be kept in this group on the drafts server until
+they are due.  You probably don't need to change this.  The default
+value is @code{"delayed"}.
+
+@item gnus-delay-header
+@vindex gnus-delay-header
+The deadline for each article will be stored in a header.  This variable
+is a string and gives the header name.  You probably don't need to
+change this.  The default value is @code{"X-Gnus-Delayed"}.
+@end table
+
+The way delaying works is like this: when you use the
+@code{gnus-delay-article} command, you give a certain delay.  Gnus
+calculates the deadline of the message and stores it in the
+@code{X-Gnus-Delayed} header and puts the message 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-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-queue} function.
+
+@table @code
+@item gnus-delay-initialize
+@findex gnus-delay-initialize
+By default, this function installs @code{gnus-delay-send-queue} in
+@code{gnus-get-new-news-hook}.  But it accepts the optional second
+argument @code{no-check}.  If it is non-@code{nil},
+@code{gnus-get-new-news-hook} is not changed.  The optional first
+argument is ignored.
+
+For example, @code{(gnus-delay-initialize nil t)} means to do nothing.
+Presumably, you want to use the demon for sending due delayed articles.
+Just don't forget to set that up :-)
+@end table
+
 
 @node Marking Articles
 @section Marking Articles
@@ -4767,9 +5577,9 @@ neologism ohoy!) of the article.  Alphabetic marks generally mean
 In addition, you also have marks that do not affect readedness.
 
 @menu
-* Unread Articles::      Marks for unread articles.
-* Read Articles::        Marks for read articles.
-* Other Marks::          Marks that do not affect readedness.
+* Unread Articles::             Marks for unread articles.
+* Read Articles::               Marks for read articles.
+* Other Marks::                 Marks that do not affect readedness.
 @end menu
 
 @ifinfo
@@ -4797,9 +5607,10 @@ Marked as ticked (@code{gnus-ticked-mark}).
 @dfn{Ticked articles} are articles that will remain visible always.  If
 you see an article that you find interesting, or you want to put off
 reading it, or replying to it, until sometime later, you'd typically
-tick it.  However, articles can be expired, so if you want to keep an
-article forever, you'll have to make it persistent (@pxref{Persistent
-Articles}).
+tick it.  However, articles can be expired (from news servers by the
+news server software, Gnus itself never expires ticked messages), so if
+you want to keep an article forever, you'll have to make it persistent
+(@pxref{Persistent Articles}).
 
 @item ?
 @vindex gnus-dormant-mark
@@ -4808,6 +5619,8 @@ Marked as dormant (@code{gnus-dormant-mark}).
 @dfn{Dormant articles} will only appear in the summary buffer if there
 are followups to it.  If you want to see them even if they don't have
 followups, you can use the @kbd{/ D} command (@pxref{Limiting}).
+Otherwise (except for the visibility issue), they are just like ticked
+messages.
 
 @item SPACE
 @vindex gnus-unread-mark
@@ -4871,7 +5684,7 @@ Threading}.
 @item M
 @vindex gnus-duplicate-mark
 Article marked as read by duplicate suppression
-(@code{gnus-duplicated-mark}).  @xref{Duplicate Suppression}.
+(@code{gnus-duplicate-mark}).  @xref{Duplicate Suppression}.
 
 @end table
 
@@ -4917,6 +5730,11 @@ 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}).
+
+@item
 @vindex gnus-cached-mark
 Articles stored in the article cache will be marked with an @samp{*} in
 the second column (@code{gnus-cached-mark}).  @xref{Article Caching}.
@@ -4928,6 +5746,37 @@ religiously) are marked with an @samp{S} in the second column
 (@code{gnus-saved-mark}).
 
 @item
+@vindex gnus-recent-mark
+Articles that according to the server haven't been shown to the user
+before are marked with a @samp{N} in the second column
+(@code{gnus-recent-mark}).  Note that not all servers support this
+mark, in which case it simply never appears. Compare with
+@code{gnus-unseen-mark}.
+
+@item
+@vindex gnus-unseen-mark
+Articles that haven't been seen before in Gnus by the user are marked
+with a @samp{.} in the second column (@code{gnus-unseen-mark}).
+Compare with @code{gnus-recent-mark}.
+
+@item
+@vindex gnus-undownloaded-mark
+When using the Gnus agent @pxref{Agent Basics}, some articles might not
+have been downloaded.  Such articles cannot be viewed while you are
+offline (unplugged).  These articles get the @samp{@@} mark in the
+first column.  (The variable @code{gnus-undownloaded-mark} controls
+which character to use.)
+
+@item
+@vindex gnus-downloadable-mark
+The Gnus agent @pxref{Agent Basics} downloads some articles
+automatically, but it is also possible to explicitly mark articles for
+download, even if they would not be downloaded automatically.  Such
+explicitly-marked articles get the @samp{%} mark in the first column.
+(The variable @code{gnus-downloadable-mark} controls which character to
+use.)
+
+@item
 @vindex gnus-not-empty-thread-mark
 @vindex gnus-empty-thread-mark
 If the @samp{%e} spec is used, the presence of threads or not will be
@@ -5032,9 +5881,15 @@ articles (@code{gnus-summary-catchup-all}).
 @item M H
 @kindex M H (Summary)
 @findex gnus-summary-catchup-to-here
-Catchup the current group to point
+Catchup the current group to point (before the point)
 (@code{gnus-summary-catchup-to-here}).
 
+@item M h
+@kindex M h (Summary)
+@findex gnus-summary-catchup-from-here
+Catchup the current group from point (after the point)
+(@code{gnus-summary-catchup-from-here}).
+
 @item C-w
 @kindex C-w (Summary)
 @findex gnus-summary-mark-region-as-read
@@ -5107,7 +5962,7 @@ even though I haven't heard of anybody wanting it to go to the
 previous (unread) article, I'm sure there are people that want that as
 well.
 
-Multiply these five behaviours with five different marking commands, and
+Multiply these five behaviors with five different marking commands, and
 you get a potentially complex set of variable to control what each
 command should do.
 
@@ -5139,6 +5994,13 @@ or
 @subsection Setting Process Marks
 @cindex setting process marks
 
+Process marks are displayed as @code{#} in the summary buffer, and are
+used for marking articles in such a way that other commands will
+process these articles.  For instance, if you process mark four
+articles and then use the @kbd{*} command, Gnus will enter these four
+commands into the cache.  For more information,
+@pxref{Process/Prefix}.
+
 @table @kbd
 
 @item M P p
@@ -5186,6 +6048,11 @@ expression (@code{gnus-uu-unmark-by-regexp}).
 @findex gnus-uu-mark-region
 Mark articles in region (@code{gnus-uu-mark-region}).
 
+@item M P g
+@kindex M P g
+@findex gnus-uu-unmark-region
+Unmark articles in region (@code{gnus-uu-unmark-region}).
+
 @item M P t
 @kindex M P t (Summary)
 @findex gnus-uu-mark-thread
@@ -5246,6 +6113,9 @@ Push the current process mark set onto the stack
 
 @end table
 
+Also see the @kbd{&} command in @pxref{Searching for Articles} for how to
+set process marks based on article body contents.
+
 
 @node Limiting
 @section Limiting
@@ -5267,20 +6137,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
@@ -5319,12 +6192,26 @@ Pop the previous limit off the stack and restore it
 (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
 the stack.
 
+@item / .
+@kindex / . (Summary)
+@findex gnus-summary-limit-to-unseen
+Limit the summary buffer to the unseen articles
+(@code{gnus-summary-limit-to-unseen}).
+
 @item / v
 @kindex / v (Summary)
 @findex gnus-summary-limit-to-score
 Limit the summary buffer to articles that have a score at or above some
 score (@code{gnus-summary-limit-to-score}).
 
+@item / p
+@kindex / p (Summary)
+@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-predicate}).  See @pxref{Group
+Parameters} for more on this predicate.
+
 @item / E
 @itemx M S
 @kindex M S (Summary)
@@ -5374,6 +6261,18 @@ Mark all excluded unread articles as read
 (@code{gnus-summary-limit-mark-excluded-as-read}).   If given a prefix,
 also mark excluded ticked and dormant articles as read.
 
+@item / N
+@kindex / N (Summary)
+@findex gnus-summary-insert-new-articles
+Insert all new articles in the summary buffer. It scans for new emails
+if @var{back-end}@code{-get-new-mail} is non-@code{nil}.
+
+@item / o
+@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.
+
 @end table
 
 
@@ -5389,7 +6288,7 @@ hierarchical fashion.
 Threading is done by looking at the @code{References} headers of the
 articles.  In a perfect world, this would be enough to build pretty
 trees, but unfortunately, the @code{References} header is often broken
-or simply missing.  Weird news propagation excarcerbates the problem,
+or simply missing.  Weird news propagation exacerbates the problem,
 so one has to employ other heuristics to get pleasing results.  A
 plethora of approaches exists, as detailed in horrible detail in
 @pxref{Customizing Threading}.
@@ -5424,8 +6323,8 @@ displayed as empty lines in the summary buffer.
 
 
 @menu
-* Customizing Threading::     Variables you can change to affect the threading.
-* Thread Commands::           Thread based commands in the summary buffer.
+* Customizing Threading::       Variables you can change to affect the threading.
+* Thread Commands::             Thread based commands in the summary buffer.
 @end menu
 
 
@@ -5434,10 +6333,10 @@ displayed as empty lines in the summary buffer.
 @cindex customizing threading
 
 @menu
-* Loose Threads::        How Gnus gathers loose threads into bigger threads.
-* Filling In Threads::   Making the threads displayed look fuller.
-* More Threading::       Even more variables for fiddling with threads.
-* Low-Level Threading::  You thought it was over... but you were wrong!
+* Loose Threads::               How Gnus gathers loose threads into bigger threads.
+* Filling In Threads::          Making the threads displayed look fuller.
+* More Threading::              Even more variables for fiddling with threads.
+* Low-Level Threading::         You thought it was over... but you were wrong!
 @end menu
 
 
@@ -5462,10 +6361,10 @@ There are four possible values:
 @iftex
 @iflatex
 \gnusfigure{The Summary Buffer}{390}{
-\put(0,0){\epsfig{figure=tmp/summary-adopt.ps,width=7.5cm}}
-\put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-empty.ps,width=7.5cm}}}
-\put(0,400){\makebox(0,0)[tl]{\epsfig{figure=tmp/summary-none.ps,width=7.5cm}}}
-\put(445,400){\makebox(0,0)[tr]{\epsfig{figure=tmp/summary-dummy.ps,width=7.5cm}}}
+\put(0,0){\epsfig{figure=ps/summary-adopt,width=7.5cm}}
+\put(445,0){\makebox(0,0)[br]{\epsfig{figure=ps/summary-empty,width=7.5cm}}}
+\put(0,400){\makebox(0,0)[tl]{\epsfig{figure=ps/summary-none,width=7.5cm}}}
+\put(445,400){\makebox(0,0)[tr]{\epsfig{figure=ps/summary-dummy,width=7.5cm}}}
 }
 @end iflatex
 @end iftex
@@ -5482,12 +6381,15 @@ square brackets (@samp{[]}).  This is the default method.
 
 @item dummy
 @vindex gnus-summary-dummy-line-format
+@vindex gnus-summary-make-false-root-always
 Gnus will create a dummy summary line that will pretend to be the
 parent.  This dummy line does not correspond to any real article, so
 selecting it will just select the first real article after the dummy
 article.  @code{gnus-summary-dummy-line-format} is used to specify the
 format of the dummy roots.  It accepts only one format spec:  @samp{S},
 which is the subject of the article.  @xref{Formatting Variables}.
+If you want all threads to have a dummy root, even the non-gathered
+ones, set @code{gnus-summary-make-false-root-always} to @code{t}.
 
 @item empty
 Gnus won't actually make any article the parent, but simply leave the
@@ -5577,6 +6479,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.
@@ -5636,10 +6542,11 @@ would like to display as few summary lines as possible, but still
 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 backend 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.
+fetching old headers only works if the back end you are using carries
+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
@@ -5660,6 +6567,18 @@ thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
 off sparse leaf nodes that don't lead anywhere.  This variable is
 @code{nil} by default.
 
+@item gnus-read-all-available-headers
+@vindex gnus-read-all-available-headers
+This is a rather obscure variable that few will find useful.  It's
+intended for those non-news newsgroups where the back end has to fetch
+quite a lot to present the summary buffer, and where it's impossible to
+go back to parents of articles.  This is mostly the case in the
+web-based groups, like the @code{nnultimate} groups.
+
+If you don't use those, then it's safe to leave this as the default
+@code{nil}.  If you want to use this variable, it should be a regexp
+that matches the group name, or @code{t} for all groups.
+
 @end table
 
 
@@ -5679,6 +6598,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}).
+Available 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
@@ -5694,9 +6629,9 @@ will be hidden.
 @item gnus-thread-ignore-subject
 @vindex gnus-thread-ignore-subject
 Sometimes somebody changes the subject in the middle of a thread.  If
-this variable is non-@code{nil}, the subject change is ignored.  If it
-is @code{nil}, which is the default, a change in the subject will result
-in a new thread.
+this variable is non-@code{nil}, which is the default, the subject
+change is ignored.  If it is @code{nil}, a change in the subject will
+result in a new thread.
 
 @item gnus-thread-indent-level
 @vindex gnus-thread-indent-level
@@ -5759,9 +6694,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,
@@ -5769,9 +6704,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}).
@@ -5842,8 +6777,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
@@ -5851,8 +6786,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
@@ -5889,8 +6824,8 @@ that have subjects fuzzily equal will be included (@pxref{Fuzzy
 Matching}).
 
 
-@node Sorting
-@section Sorting
+@node Sorting the Summary Buffer
+@section Sorting the Summary Buffer
 
 @findex gnus-thread-sort-by-total-score
 @findex gnus-thread-sort-by-date
@@ -5898,7 +6833,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
@@ -5907,7 +6844,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
@@ -5958,14 +6898,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:
@@ -6020,8 +6964,8 @@ happen automatically.
 @vindex gnus-use-article-prefetch
 You can control how many articles are to be pre-fetched by setting
 @code{gnus-use-article-prefetch}.  This is 30 by default, which means
-that when you read an article in the group, the backend will pre-fetch
-the next 30 articles.  If this variable is @code{t}, the backend will
+that when you read an article in the group, the back end will pre-fetch
+the next 30 articles.  If this variable is @code{t}, the back end will
 pre-fetch all the articles it can without bound.  If it is
 @code{nil}, no pre-fetching will be done.
 
@@ -6089,7 +7033,7 @@ Used carefully, though, it could be just an easier way to save articles.
 To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
 all articles ticked or marked as dormant will then be copied
 over to your local cache (@code{gnus-cache-directory}).  Whether this
-cache is flat or hierarchal is controlled by the
+cache is flat or hierarchical is controlled by the
 @code{gnus-use-long-file-name} variable, as usual.
 
 When re-selecting a ticked or dormant article, it will be fetched from the
@@ -6146,6 +7090,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
@@ -6227,6 +7175,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.
@@ -6291,10 +7243,25 @@ Save the current article in a VM folder
 (@code{gnus-summary-save-article-vm}).
 
 @item O p
+@itemx |
 @kindex O p (Summary)
+@kindex | (Summary)
 @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}).
+If given a symbolic prefix (@pxref{Symbolic Prefixes}), include the
+complete headers in the piped 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
@@ -6342,6 +7309,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
@@ -6394,6 +7368,10 @@ File names like @file{~/News/Alt.andrea-dworkin}.
 @item gnus-plain-save-name
 @findex gnus-plain-save-name
 File names like @file{~/News/alt.andrea-dworkin}.
+
+@item gnus-sender-save-name
+@findex gnus-sender-save-name
+File names like @file{~/News/larsi}.
 @end table
 
 @vindex gnus-split-methods
@@ -6470,7 +7448,8 @@ a spool, you could
 
 @lisp
 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
-(setq gnus-default-article-saver 'gnus-summary-save-in-file) ; no encoding
+(setq gnus-default-article-saver
+      'gnus-summary-save-in-file) ; no encoding
 @end lisp
 
 Then just save with @kbd{o}.  You'd then read this hierarchy with
@@ -6487,12 +7466,12 @@ Sometime users post articles (or series of articles) that have been
 encoded in some way or other.  Gnus can decode them for you.
 
 @menu
-* Uuencoded Articles::    Uudecode articles.
-* Shell Archives::        Unshar articles.
-* PostScript Files::      Split PostScript.
-* Other Files::           Plain save and binhex.
-* Decoding Variables::    Variables for a happy decoding.
-* Viewing Files::         You want to look at the result of the decoding?
+* Uuencoded Articles::          Uudecode articles.
+* Shell Archives::              Unshar articles.
+* PostScript Files::            Split PostScript.
+* Other Files::                 Plain save and binhex.
+* Decoding Variables::          Variables for a happy decoding.
+* Viewing Files::               You want to look at the result of the decoding?
 @end menu
 
 @cindex series
@@ -6659,9 +7638,9 @@ doesn't really work yet.
 Adjective, not verb.
 
 @menu
-* Rule Variables::          Variables that say how a file is to be viewed.
-* Other Decode Variables::  Other decode variables.
-* Uuencoding and Posting::  Variables for customizing uuencoding.
+* Rule Variables::              Variables that say how a file is to be viewed.
+* Other Decode Variables::      Other decode variables.
+* Uuencoding and Posting::      Variables for customizing uuencoding.
 @end menu
 
 
@@ -6896,14 +7875,16 @@ writing, so there are tons of functions and variables to make reading
 these articles easier.
 
 @menu
-* Article Highlighting::    You want to make the article look like fruit salad.
-* 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 Buttons::         Click on URLs, Message-IDs, addresses and the like.
-* Article Date::            Grumble, UT!
-* Article Signature::       What is a signature?
-* Article Miscellania::     Various other stuff.
+* Article Highlighting::        You want to make the article look like fruit salad.
+* 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
 
 
@@ -6952,10 +7933,6 @@ Some variables to customize the citation highlights:
 If the article size if bigger than this variable (which is 25000 by
 default), no citation highlighting will be performed.
 
-@item gnus-cite-prefix-regexp
-@vindex gnus-cite-prefix-regexp
-Regexp matching the longest possible citation prefix on a line.
-
 @item gnus-cite-max-prefix
 @vindex gnus-cite-max-prefix
 Maximum possible length for a citation prefix (default 20).
@@ -7035,7 +8012,7 @@ groupings will be hidden.)  The fourth is the face used for
 highlighting.
 
 @lisp
-(setq gnus-article-emphasis
+(setq gnus-emphasis-alist
       '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
         ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
 @end lisp
@@ -7117,10 +8094,11 @@ Signature}.
 @kindex W W l (Summary)
 @findex gnus-article-hide-list-identifiers
 @vindex gnus-list-identifiers
-Strip list identifiers specified in @code{gnus-list-identifiers}.
-These are strings some mailing list servers add to the beginning of
-all @code{Subject} headers---for example, @samp{[zebra 4711]}.  Any
-leading @samp{Re: } is skipped before stripping.
+Strip list identifiers specified in @code{gnus-list-identifiers}.  These
+are strings some mailing list servers add to the beginning of all
+@code{Subject} headers---for example, @samp{[zebra 4711]}.  Any leading
+@samp{Re: } is skipped before stripping. @code{gnus-list-identifiers}
+may not contain @code{\\(..\\)}.
 
 @table @code
 
@@ -7163,10 +8141,12 @@ Hide @sc{pem} (privacy enhanced messages) cruft
 @item W W B
 @kindex W W B (Summary)
 @findex gnus-article-strip-banner
+@vindex gnus-article-banner-alist
+@vindex gnus-article-address-banner-alist
 @cindex banner
 @cindex OneList
-@cindex stripping advertisments
-@cindex advertisments
+@cindex stripping advertisements
+@cindex advertisements
 Strip the banner specified by the @code{banner} group parameter
 (@code{gnus-article-strip-banner}).  This is mainly used to hide those
 annoying banners and/or signatures that some mailing lists and moderated
@@ -7175,7 +8155,33 @@ the @code{banner} group parameter (@pxref{Group Parameters}) to the
 group you want banners stripped from.  The parameter either be a string,
 which will be interpreted as a regular expression matching text to be
 removed, or the symbol @code{signature}, meaning that the (last)
-signature should be removed.
+signature should be removed, or other symbol, meaning that the
+corresponding regular expression in @code{gnus-article-banner-alist} is
+used.
+
+Regardless of a group, you can hide things like advertisements only when
+the sender of an article has a certain mail address specified in
+@code{gnus-article-address-banner-alist}.
+
+@table @code
+
+@item gnus-article-address-banner-alist
+@vindex gnus-article-address-banner-alist
+Alist of mail addresses and banners.  Each element has the form
+@code{(ADDRESS . BANNER)}, where ADDRESS is a regexp matching a mail
+address in the From header, BANNER is one of a symbol @code{signature},
+an item in @code{gnus-article-banner-alist}, a regexp and @code{nil}.
+If ADDRESS matches author's mail address, it will remove things like
+advertisements.  For example, if a sender has the mail address
+@samp{hail@@yoo-hoo.co.jp} and there is a banner something like
+@samp{Do You Yoo-hoo!?} in all articles he sends, you can use the
+following element to remove them:
+
+@lisp
+("@@yoo-hoo\\.co\\.jp\\'" . "\n_+\nDo You Yoo-hoo!\\?\n.*\n.*\n")
+@end lisp
+
+@end table
 
 @item W W c
 @kindex W W c (Summary)
@@ -7265,8 +8271,16 @@ We call this ``article washing'' for a really good reason.  Namely, the
 something else'', but normally results in something looking better.
 Cleaner, perhaps.
 
+@xref{Customizing Articles}, if you want to change how Gnus displays
+articles by default.
+
 @table @kbd
 
+@item C-u g
+This is not really washing, it's sort of the opposite of washing.  If
+you type this, you see the article exactly as it exists on disk or on
+the server.
+
 @item W l
 @kindex W l (Summary)
 @findex gnus-summary-stop-page-breaking
@@ -7288,17 +8302,25 @@ positions in the alphabet, e. g. @samp{B} (letter #2) -> @samp{O} (letter
 #15).  It is sometimes referred to as ``Caesar rotate'' because Caesar
 is rumored to have employed this form of, uh, somewhat weak encryption.
 
+@item W m
+@kindex W m (Summary)
+@findex gnus-summary-morse-message
+@c @icon{gnus-summary-morse-message}
+Morse decode the article buffer (@code{gnus-summary-morse-message}).
+
 @item W t
+@item t
 @kindex W t (Summary)
+@kindex t (Summary)
 @findex gnus-summary-toggle-header
 Toggle whether to display all headers in the article buffer
 (@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 o
 @kindex W o (Summary)
@@ -7310,14 +8332,49 @@ Treat overstrike (@code{gnus-article-treat-overstrike}).
 @findex gnus-article-treat-dumbquotes
 @vindex gnus-article-dumbquotes-map
 @cindex Smartquotes
-@cindex M******** sm*rtq**t*s
+@cindex M****s*** sm*rtq**t*s
 @cindex Latin 1
-Treat M******** sm*rtq**t*s according to
+Treat M****s*** sm*rtq**t*s according to
 @code{gnus-article-dumbquotes-map}
 (@code{gnus-article-treat-dumbquotes}).  Note that this function guesses
 whether a character is a sm*rtq**t* or not, so it should only be used
 interactively.
 
+Sm*rtq**t*s are M****s***'s unilateral extension to the character map in
+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 Y f
+@kindex W Y f (Summary)
+@findex gnus-article-outlook-deuglify-article
+@cindex Outlook Express
+Full deuglify of broken Outlook (Express) articles: Treat dumbquotes,
+unwrap lines, repair attribution and rearrange citation.
+(@code{gnus-article-outlook-deuglify-article}).
+
+@item W Y u
+@kindex W Y u (Summary)
+@findex gnus-article-outlook-unwrap-lines
+Unwrap lines that appear to be wrapped citation lines.  You can control
+what lines will be unwrapped by frobbing
+@code{gnus-outlook-deuglify-unwrap-min} and
+@code{gnus-outlook-deuglify-unwrap-max}, indicating the miminum and
+maximum length of an unwrapped citation line.
+(@code{gnus-outlook-deuglify-article}).
+
+@item W Y a
+@kindex W Y a (Summary)
+@findex gnus-article-outlook-repair-attribution
+Repair a broken attribution line.
+(@code{gnus-article-outlook-repair-attribution}).
+
+@item W Y c
+@kindex W Y c (Summary)
+@findex gnus-article-outlook-rearrange-citation
+Repair broken citations by rearranging the text.
+(@code{gnus-article-outlook-rearrange-citation}).
+
 @item W w
 @kindex W w (Summary)
 @findex gnus-article-fill-cited-article
@@ -7328,7 +8385,7 @@ when filling.
 
 @item W Q
 @kindex W Q (Summary)
-@findex gnus-article-fill-long-lines 
+@findex gnus-article-fill-long-lines
 Fill long lines (@code{gnus-article-fill-long-lines}).
 
 @item W C
@@ -7352,19 +8409,21 @@ Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
 Quoted-Printable is one common @sc{mime} encoding employed when sending
 non-ASCII (i. e., 8-bit) articles.  It typically makes strings like
 @samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very
-readable to me.  Note that the this is usually done automatically by
+readable to me.  Note that this is usually done automatically by
 Gnus if the message in question has a @code{Content-Transfer-Encoding}
 header that says that this encoding has been done.
+If a prefix is given, a charset will be asked for.
 
 @item W 6
 @kindex W 6 (Summary)
 @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.
+If a prefix is given, a charset will be asked for.
 
 @item W Z
 @kindex W Z (Summary)
@@ -7373,47 +8432,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}.
 
-@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
-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.
+If a prefix is given, a charset will be asked for.
+
+@vindex gnus-article-wash-function
+The default is to use the function specified by
+@code{mm-text-html-renderer} (@pxref{(emacs-mime)Display
+Customization}) 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)
@@ -7427,11 +8487,27 @@ Add clickable buttons to the article (@code{gnus-article-add-buttons}).
 Add clickable buttons to the article headers
 (@code{gnus-article-add-buttons-to-head}).
 
-@item W W H
-@kindex W W H (Summary)
-@findex gnus-article-strip-headers-from-body
+@item W p
+@kindex W p (Summary)
+@findex gnus-article-verify-x-pgp-sig
+Verify a signed control message (@code{gnus-article-verify-x-pgp-sig}).
+Control messages such as @code{newgroup} and @code{checkgroups} are
+usually signed by the hierarchy maintainer.  You need to add the PGP
+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 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)
@@ -7481,6 +8557,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-headers
+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
@@ -7490,10 +8599,11 @@ be nice if Gnus could just fetch whatever it is that people talk about
 with the minimum of fuzz when you hit @kbd{RET} or use the middle mouse
 button on these references.
 
+@vindex gnus-button-man-handler
 Gnus adds @dfn{buttons} to certain standard references by default:
-Well-formed URLs, mail addresses and Message-IDs.  This is controlled by
-two variables, one that handles article bodies and one that handles
-article heads:
+Well-formed URLs, mail addresses, Message-IDs, Info links and man pages.
+This is controlled by two variables, one that handles article bodies and
+one that handles article heads:
 
 @table @code
 
@@ -7508,9 +8618,11 @@ This is an alist where each entry has this form:
 @table @var
 
 @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>]*\\)>}.
+All text that match this regular expression (case insensitive) will be
+considered an external reference.  Here's a typical regexp that matches
+embedded URLs: @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
@@ -7594,6 +8706,12 @@ Display the date in international format, aka. ISO 8601
 @findex gnus-article-date-local
 Display the date in the local timezone (@code{gnus-article-date-local}).
 
+@item W T p
+@kindex W T p (Summary)
+@findex gnus-article-date-english
+Display the date in a format that's easily pronounceable in English
+(@code{gnus-article-date-english}).
+
 @item W T s
 @kindex W T s (Summary)
 @vindex gnus-article-time-format
@@ -7614,7 +8732,7 @@ Say how much time has elapsed between the article was posted and now
 (@code{gnus-article-date-lapsed}).  It looks something like:
 
 @example
-X-Sent: 9 years, 6 weeks, 4 days, 9 hours, 3 minutes, 28 seconds ago
+X-Sent: 6 weeks, 4 days, 1 hour, 3 minutes, 8 seconds ago
 @end example
 
 The value of @code{gnus-article-date-lapsed-new-header} determines
@@ -7649,6 +8767,72 @@ 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 gimmicks 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 d
+@kindex W D d (Summary)
+@findex gnus-article-display-face
+Display a @code{Face} in the @code{From} header.
+(@code{gnus-article-display-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
@@ -7719,14 +8903,16 @@ signature after all.
 @kindex A t (Summary)
 @findex gnus-article-babel
 Translate the article from one language to another
-(@code{gnus-article-babel}). 
+(@code{gnus-article-babel}).
 
 @end table
 
 
 @node MIME Commands
-@section @sc{mime} Commands
+@section MIME Commands
 @cindex MIME decoding
+@cindex attachments
+@cindex viewing attachments
 
 The following commands all understand the numerical prefix.  For
 instance, @kbd{3 b} means ``view the third @sc{mime} part''.
@@ -7786,29 +8972,32 @@ convention (@pxref{Process/Prefix}).
 
 @item M-t
 @kindex M-t (Summary)
-@findex gnus-summary-display-buttonized
+@findex gnus-summary-toggle-display-buttonized
 Toggle the buttonized display of the article buffer
 (@code{gnus-summary-toggle-display-buttonized}).
 
 @item W M w
 @kindex W M w (Summary)
+@findex gnus-article-decode-mime-words
 Decode RFC 2047-encoded words in the article headers
 (@code{gnus-article-decode-mime-words}).
 
 @item W M c
 @kindex W M c (Summary)
+@findex gnus-article-decode-charset
 Decode encoded article bodies as well as charsets
 (@code{gnus-article-decode-charset}).
 
 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)
+@findex gnus-mime-view-all-parts
 View all the @sc{mime} parts in the current article
 (@code{gnus-mime-view-all-parts}).
 
@@ -7830,11 +9019,47 @@ To have all Vcards be ignored, you'd say something like this:
       '("text/x-vcard"))
 @end lisp
 
+@item gnus-article-loose-mime
+@vindex gnus-article-loose-mime
+If non-@code{nil}, Gnus won't required the @samp{MIME-Version} header
+before interpreting the message as a @sc{mime} message.  This helps
+when reading messages from certain broken mail user agents.  The
+default is @code{nil}.
+
+@item gnus-article-emulate-mime
+@vindex gnus-article-emulate-mime
+There are other, non-@sc{mime} encoding methods used.  The most common
+is @samp{uuencode}, but yEncode is also getting to be popular.  If
+This variable is non-@code{nil}, Gnus will look in message bodies to
+see if it finds these encodings, and if so, it'll run them through the
+Gnus @sc{mime} machinery.  The default is @code{t}.
+
 @item gnus-unbuttonized-mime-types
 @vindex gnus-unbuttonized-mime-types
 This is a list of regexps.  @sc{mime} types that match a regexp from
 this list won't have @sc{mime} buttons inserted unless they aren't
-displayed.  The default value is @code{(".*/.*")}.
+displayed or this variable is overridden by
+@code{gnus-buttonized-mime-types}.  The default value is
+@code{(".*/.*")}.  This variable is only used when
+@code{gnus-inhibit-mime-unbuttonizing} is nil.
+
+@item gnus-buttonized-mime-types
+@vindex gnus-buttonized-mime-types
+This is a list of regexps.  @sc{mime} types that match a regexp from
+this list will have @sc{mime} buttons inserted unless they aren't
+displayed.  This variable overrides
+@code{gnus-unbuttonized-mime-types}.  The default value is @code{nil}.
+This variable is only used when @code{gnus-inhibit-mime-unbuttonizing}
+is nil.
+
+To see e.g. security buttons but no other buttons, you could set this
+variable to @code{("multipart/signed")} and leave
+@code{gnus-unbuttonized-mime-types} at the default value.
+
+@item gnus-inhibit-mime-unbuttonizing
+@vindex gnus-inhibit-mime-unbuttonizing
+If this is non-nil, then all @sc{mime} parts get buttons.  The default
+value is @code{nil}.
 
 @item gnus-article-mime-part-function
 @vindex gnus-article-mime-part-function
@@ -7861,6 +9086,42 @@ Here's an example function the does the latter:
 @item gnus-mime-multipart-functions
 Alist of @sc{mime} multipart types and functions to handle them.
 
+@vindex mm-file-name-rewrite-functions
+@item mm-file-name-rewrite-functions
+List of functions used for rewriting file names of @sc{mime} parts.
+Each function takes a file name as input and returns a file name.
+
+Ready-made functions include@*
+@code{mm-file-name-delete-whitespace},
+@code{mm-file-name-trim-whitespace},
+@code{mm-file-name-collapse-whitespace}, and
+@code{mm-file-name-replace-whitespace}.  The later uses the value of
+the variable @code{mm-file-name-replace-whitespace} to replace each
+whitespace character in a file name with that string; default value
+is @code{"_"} (a single underscore).
+@findex mm-file-name-delete-whitespace
+@findex mm-file-name-trim-whitespace
+@findex mm-file-name-collapse-whitespace
+@findex mm-file-name-replace-whitespace
+@vindex mm-file-name-replace-whitespace
+
+The standard functions @code{capitalize}, @code{downcase},
+@code{upcase}, and @code{upcase-initials} may be useful, too.
+
+Everybody knows that whitespace characters in file names are evil,
+except those who don't know.  If you receive lots of attachments from
+such unenlightened users, you can make live easier by adding
+
+@lisp
+(setq mm-file-name-rewrite-functions
+      '(mm-file-name-trim-whitespace
+        mm-file-name-collapse-whitespace
+        mm-file-name-replace-whitespace))
+@end lisp
+
+@noindent
+to your @file{.gnus.el} file.
+
 @end table
 
 
@@ -7878,17 +9139,17 @@ hierarchy uses @code{iso-2022-jp-2}.
 
 @vindex gnus-group-charset-alist
 This knowledge is encoded in the @code{gnus-group-charset-alist}
-variable, which is an alist of regexps (to match group names) and
-default charsets to be used when reading these groups.
+variable, which is an alist of regexps (use the first item to match full
+group names) and default charsets to be used when reading these groups.
 
 In addition, some people do use soi-disant @sc{mime}-aware agents that
-aren't.  These blitely mark messages as being in @code{iso-8859-1} even
-if they really are in @code{koi-8}.  To help here, the
+aren't.  These blithely mark messages as being in @code{iso-8859-1}
+even if they really are in @code{koi-8}.  To help here, the
 @code{gnus-newsgroup-ignored-charsets} variable can be used.  The
-charsets that are listed here will be ignored.  The variable can be set
-on a group-by-group basis using the group parameters (@pxref{Group
-Parameters}).  The default value is @code{(unknown-8bit)}, which is
-something some agents insist on having in there.
+charsets that are listed here will be ignored.  The variable can be
+set on a group-by-group basis using the group parameters (@pxref{Group
+Parameters}).  The default value is @code{(unknown-8bit x-unknown)},
+which includes values some agents insist on having in there.
 
 @vindex gnus-group-posting-charset-alist
 When posting, @code{gnus-group-posting-charset-alist} is used to
@@ -7962,8 +9223,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
 
@@ -8011,7 +9273,18 @@ Sort by article length (@code{gnus-summary-sort-by-chars}).
 @kindex C-c C-s C-i (Summary)
 @findex gnus-summary-sort-by-score
 Sort by score (@code{gnus-summary-sort-by-score}).
-@end table
+
+@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
+Sort using the default sorting method
+(@code{gnus-summary-sort-by-original}).
+@end table
 
 These functions will work both when you use threading and when you don't
 use threading.  In the latter case, all summary lines will be sorted,
@@ -8088,7 +9361,7 @@ The current select method will be used when fetching by
 by giving this command a prefix.
 
 @vindex gnus-refer-article-method
-If the group you are reading is located on a backend that does not
+If the group you are reading is located on a back end that does not
 support fetching by @code{Message-ID} very well (like @code{nnspool}),
 you can set @code{gnus-refer-article-method} to an @sc{nntp} method.  It
 would, perhaps, be best if the @sc{nntp} server you consult is the one
@@ -8101,20 +9374,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 "google" (nnweb-type google))))
 @end lisp
 
-Most of the mail backends 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} and @code{nnfolder} 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.
+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},
+@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
@@ -8317,6 +9591,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
@@ -8371,7 +9653,7 @@ following to your @file{.gnus.el} file:
              (article 1.0))))
 @end lisp
 
-@xref{Windows Configuration}.
+@xref{Window Layout}.
 
 
 @node Mail Group Commands
@@ -8389,11 +9671,13 @@ process/prefix convention (@pxref{Process/Prefix}).
 @item B e
 @kindex B e (Summary)
 @findex gnus-summary-expire-articles
-Expire all expirable articles in the group
-(@code{gnus-summary-expire-articles}).
+Run all expirable articles in the current group through the expiry
+process (@code{gnus-summary-expire-articles}).  That is, delete all
+expirable articles in the group that have been around for a while.
+(@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}
@@ -8415,7 +9699,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)
@@ -8424,7 +9708,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)
@@ -8442,6 +9726,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
@@ -8449,7 +9740,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
@@ -8458,9 +9749,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
@@ -8474,7 +9766,7 @@ will tell you (@code{gnus-summary-respool-query}).
 @kindex B t (Summary)
 @findex gnus-summary-respool-trace
 Similarly, this command will display all fancy splitting patterns used
-when repooling, if any (@code{gnus-summary-respool-trace}).
+when respooling, if any (@code{gnus-summary-respool-trace}).
 
 @item B p
 @kindex B p (Summary)
@@ -8490,6 +9782,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
@@ -8498,7 +9798,9 @@ If you move (or copy) articles regularly, you might wish to have Gnus
 suggest where to put the articles.  @code{gnus-move-split-methods} is a
 variable that uses the same syntax as @code{gnus-split-methods}
 (@pxref{Saving Articles}).  You may customize that variable to create
-suggestions you find reasonable.
+suggestions you find reasonable.  (Note that
+@code{gnus-move-split-methods} uses group names where
+@code{gnus-split-methods} uses file names.)
 
 @lisp
 (setq gnus-move-split-methods
@@ -8512,13 +9814,20 @@ suggestions you find reasonable.
 @section Various Summary Stuff
 
 @menu
-* Summary Group Information::         Information oriented commands.
-* Searching for Articles::            Multiple article commands.
-* Summary Generation Commands::       (Re)generating the summary buffer.
-* Really Various Summary Commands::   Those pesky non-conformant commands.
+* Summary Group Information::   Information oriented commands.
+* Searching for Articles::      Multiple article commands.
+* Summary Generation Commands::  
+* Really Various Summary Commands::  Those pesky non-conformant commands.
 @end menu
 
 @table @code
+@vindex gnus-summary-display-while-building
+@item gnus-summary-display-while-building
+If non-@code{nil}, show and update the summary buffer as it's being
+built.  If @code{t}, update the buffer after every line is inserted.
+If the value is an integer, @var{n}, update the display every @var{n}
+lines.  The default is @code{nil}.
+
 @vindex gnus-summary-mode-hook
 @item gnus-summary-mode-hook
 This hook is called when creating a summary mode buffer.
@@ -8569,6 +9878,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
 
 
@@ -8617,22 +9942,26 @@ Go to the Gnus info node (@code{gnus-info-find-node}).
 @item M-s
 @kindex M-s (Summary)
 @findex gnus-summary-search-article-forward
-Search through all subsequent articles for a regexp
+Search through all subsequent (raw) articles for a regexp
 (@code{gnus-summary-search-article-forward}).
 
 @item M-r
 @kindex M-r (Summary)
 @findex gnus-summary-search-article-backward
-Search through all previous articles for a regexp
+Search through all previous (raw) articles for a regexp
 (@code{gnus-summary-search-article-backward}).
 
 @item &
 @kindex & (Summary)
 @findex gnus-summary-execute-command
-This command will prompt you for a header field, a regular expression to
-match on this field, and a command to be executed if the match is made
-(@code{gnus-summary-execute-command}).  If given a prefix, search
-backward instead.
+This command will prompt you for a header, a regular expression to match
+on this field, and a command to be executed if the match is made
+(@code{gnus-summary-execute-command}).  If the header is an empty
+string, the match is done on the entire article.  If given a prefix,
+search backward instead.
+
+For instance, @kbd{& RET some.*string #} will put the process mark on
+all articles that have heads or bodies that match @samp{some.*string}.
 
 @item M-&
 @kindex M-& (Summary)
@@ -8657,6 +9986,12 @@ Regenerate the current summary buffer (@code{gnus-summary-prepare}).
 Pull all cached articles (for the current group) into the summary buffer
 (@code{gnus-summary-insert-cached-articles}).
 
+@item Y d
+@kindex Y d (Summary)
+@findex gnus-summary-insert-dormant-articles
+Pull all dormant articles (for the current group) into the summary buffer
+(@code{gnus-summary-insert-dormant-articles}).
+
 @end table
 
 
@@ -8679,8 +10014,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
@@ -8704,14 +10039,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}).
@@ -8972,9 +10307,109 @@ so that means that if you stop and start Gnus often, you should set
 @code{gnus-save-duplicate-list} to @code{nil}.  Uhm.  I'll leave this up
 to you to figure out, I think.
 
+@node Security
+@section Security
+
+Gnus is able to verify signed messages or decrypt encrypted messages.
+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 handle PGP and PGP/MIME messages, you have to install an OpenPGP
+implementation such as GnuPG.  The lisp interface to GnuPG included
+with Gnus is called PGG (@pxref{Top, ,PGG, pgg, PGG Manual}), but
+Mailcrypt and gpg.el are also supported.
+
+@item
+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 (@pxref{Security, ,Security, message, Message Manual}).
+
+@table @code
+@item mm-verify-option
+@vindex mm-verify-option
+Option of verifying signed parts.  @code{never}, not verify;
+@code{always}, always verify; @code{known}, only verify known
+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
+protocols. Otherwise, ask user.
+
+@item mml1991-use
+@vindex mml1991-use
+Symbol indicating elisp interface to OpenPGP implementation for PGP
+messages.  The default is @code{pgg}, but @code{mailcrypt} and
+@code{gpg} are also supported although deprecated.
+
+@item mml2015-use
+@vindex mml2015-use
+Symbol indicating elisp interface to OpenPGP implementation for
+PGP/MIME messages.  The default is @code{pgg}, but @code{mailcrypt}
+and @code{gpg} are also supported although deprecated.
+
+@end table
+
+@node Mailing List
+@section Mailing List
 
-@node The Article Buffer
-@chapter The Article Buffer
+@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} (@code{gnus-mailing-list-insinuate}) in the
+summary buffer, or say:
+
+@lisp
+(add-hook 'gnus-summary-mode-hook 'turn-on-gnus-mailing-list-mode)
+@end lisp
+
+That enables the following commands to the summary buffer:
+
+@table @kbd
+
+@item C-c C-n h
+@kindex C-c C-n h (Summary)
+@findex gnus-mailing-list-help
+Send a message to fetch mailing list help, if List-Help field exists.
+
+@item C-c C-n s
+@kindex C-c C-n s (Summary)
+@findex gnus-mailing-list-subscribe
+Send a message to subscribe the mailing list, if List-Subscribe field exists.
+
+@item C-c C-n u
+@kindex C-c C-n u (Summary)
+@findex gnus-mailing-list-unsubscribe
+Send a message to unsubscribe the mailing list, if List-Unsubscribe
+field exists.
+
+@item C-c C-n p
+@kindex C-c C-n p (Summary)
+@findex gnus-mailing-list-post
+Post to the mailing list, if List-Post field exists.
+
+@item C-c C-n o
+@kindex C-c C-n o (Summary)
+@findex gnus-mailing-list-owner
+Send a message to the mailing list owner, if List-Owner field exists.
+
+@item C-c C-n a
+@kindex C-c C-n a (Summary)
+@findex gnus-mailing-list-owner
+Browse the mailing list archive, if List-Archive field exists.
+
+@end table
+
+@node Article Buffer
+@chapter Article Buffer
 @cindex article buffer
 
 The articles are displayed in the article buffer, of which there is only
@@ -8982,11 +10417,11 @@ one.  All the summary buffers share the same article buffer unless you
 tell Gnus otherwise.
 
 @menu
-* Hiding Headers::        Deciding what headers should be displayed.
-* Using MIME::            Pushing articles through @sc{mime} before reading them.
-* Customizing Articles::  Tailoring the look of the articles.
-* Article Keymap::        Keystrokes available in the article buffer.
-* Misc Article::          Other stuff.
+* Hiding Headers::              Deciding what headers should be displayed.
+* Using MIME::                  Pushing articles through @sc{mime} before reading them.
+* Customizing Articles::        Tailoring the look of the articles.
+* Article Keymap::              Keystrokes available in the article buffer.
+* Misc Article::                Other stuff.
 @end menu
 
 
@@ -9069,7 +10504,7 @@ variable, will be displayed in random order after all the headers listed in this
 @findex gnus-article-hide-boring-headers
 @vindex gnus-boring-article-headers
 You can hide further boring headers by setting
-@code{gnus-treat-hide-boring-header} to @code{head}.  What this function
+@code{gnus-treat-hide-boring-headers} to @code{head}.  What this function
 does depends on the @code{gnus-boring-article-headers} variable.  It's a
 list, but this list doesn't actually contain header names.  Instead is
 lists various @dfn{boring conditions} that Gnus can check and remove
@@ -9088,6 +10523,9 @@ Remove the @code{Reply-To} header if it lists the same address as the
 @item newsgroups
 Remove the @code{Newsgroups} header if it only contains the current group
 name.
+@item to-address
+Remove the @code{To} header if it only contains the address identical to
+the current groups's @code{to-address} parameter.
 @item date
 Remove the @code{Date} header if the article is less than three days
 old.
@@ -9097,7 +10535,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 the four three elements, you could say something like;
+To include these three elements, you could say something like:
 
 @lisp
 (setq gnus-boring-article-headers
@@ -9108,7 +10546,7 @@ This is also the default value for this variable.
 
 
 @node Using MIME
-@section Using @sc{mime}
+@section Using MIME
 @cindex @sc{mime}
 
 Mime is a standard for waving your hands through the air, aimlessly,
@@ -9134,45 +10572,104 @@ The following commands are available when you have placed point over a
 @table @kbd
 @findex gnus-article-press-button
 @item RET (Article)
+@kindex RET (Article)
 @itemx BUTTON-2 (Article)
 Toggle displaying of the @sc{mime} object
-(@code{gnus-article-press-button}).
+(@code{gnus-article-press-button}). If builtin viewers can not display
+the object, Gnus resorts to external viewers in the @file{mailcap}
+files.  If a viewer has the @samp{copiousoutput} specification, the
+object is displayed inline.
 
 @findex gnus-mime-view-part
 @item M-RET (Article)
+@kindex M-RET (Article)
 @itemx v (Article)
 Prompt for a method, and then view the @sc{mime} object using this
 method (@code{gnus-mime-view-part}).
 
+@findex gnus-mime-view-part-as-type
+@item t (Article)
+@kindex t (Article)
+View the @sc{mime} object as if it were a different @sc{mime} media type
+(@code{gnus-mime-view-part-as-type}).
+
+@findex gnus-mime-view-part-as-charset
+@item C (Article)
+@kindex C (Article)
+Prompt for a charset, and then view the @sc{mime} object using this
+charset (@code{gnus-mime-view-part-as-charset}).
+
 @findex gnus-mime-save-part
 @item o (Article)
+@kindex o (Article)
 Prompt for a file name, and then save the @sc{mime} object
 (@code{gnus-mime-save-part}).
 
+@findex gnus-mime-save-part-and-strip
+@item C-o (Article)
+@kindex C-o (Article)
+Prompt for a file name, then save the @sc{mime} object and strip it from
+the article.  Then proceed to article editing, where a reasonable
+suggestion is being made on how the altered article should look
+like. The stripped @sc{mime} object will be referred via the
+message/external-body @sc{mime} type.
+(@code{gnus-mime-save-part-and-strip}).
+
 @findex gnus-mime-copy-part
 @item c (Article)
+@kindex c (Article)
 Copy the @sc{mime} object to a fresh buffer and display this buffer
-(@code{gnus-mime-copy-part}).
+(@code{gnus-mime-copy-part}).  Compressed files like @file{.gz} and
+@file{.bz2} are automatically decompressed if
+@code{auto-compression-mode} is enabled (@pxref{Compressed Files,,
+Accessing Compressed Files, emacs, The Emacs Editor}).
+
+@findex gnus-mime-print-part
+@item p (Article)
+@kindex p (Article)
+Print the @sc{mime} object (@code{gnus-mime-print-part}).  This
+command respects the @samp{print=} specifications in the
+@file{.mailcap} file.
 
-@findex gnus-mime-view-part-as-type
-@item t (Article)
-View the @sc{mime} object as if it were a different @sc{mime} media type
-(@code{gnus-mime-view-part-as-type}). 
+@findex gnus-mime-inline-part
+@item i (Article)
+@kindex i (Article)
+Insert the contents of the @sc{mime} object into the buffer
+(@code{gnus-mime-inline-part}) as text/plain.  If given a prefix, insert
+the raw contents without decoding.  If given a numerical prefix, you can
+do semi-manual charset stuff (see
+@code{gnus-summary-show-article-charset-alist} in @pxref{Paging the
+Article}).
+
+@findex gnus-mime-view-part-internally
+@item E (Article)
+@kindex E (Article)
+View the @sc{mime} object with an internal viewer.  If no internal
+viewer is available, use an external viewer
+(@code{gnus-mime-view-part-internally}).
+
+@findex gnus-mime-view-part-externally
+@item e (Article)
+@kindex e (Article)
+View the @sc{mime} object with an external viewer.
+(@code{gnus-mime-view-part-externally}).
 
 @findex gnus-mime-pipe-part
 @item | (Article)
+@kindex | (Article)
 Output the @sc{mime} object to a process (@code{gnus-mime-pipe-part}).
 
-@findex gnus-mime-inline-part
-@item i (Article)
-Insert the raw contents of the @sc{mime} object into the buffer
-(@code{gnus-mime-inline-part}).
+@findex gnus-mime-action-on-part
+@item . (Article)
+@kindex . (Article)
+Interactively run an action on the @sc{mime} object
+(@code{gnus-mime-action-on-part}).
 
 @end table
 
 Gnus will display some @sc{mime} objects automatically.  The way Gnus
-determines which parts to do this with is described in the Emacs MIME
-manual.
+determines which parts to do this with is described in the Emacs
+@sc{mime} manual.
 
 It might be best to just use the toggling functions from the article
 buffer to avoid getting nasty surprises.  (For instance, you enter the
@@ -9260,37 +10757,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-strip-pgp (t, last, 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-date-lapsed (head)
-@item gnus-treat-date-original (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-strip-pem (t, last, integer)
+@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-wash-html (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-user-defined (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-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
@@ -9298,7 +10842,7 @@ You can, of course, write your own functions to be called from
 @code{gnus-part-display-hook}.  The functions are called narrowed to the
 part, and you can do anything you like, pretty much.  There is no
 information that you have to keep in the buffer---you can change
-everything.  
+everything.
 
 
 @node Article Keymap
@@ -9360,6 +10904,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
 
 
@@ -9404,12 +10965,39 @@ accepts the same format specifications as that variable, with two
 extensions:
 
 @table @samp
+
 @item w
 The @dfn{wash status} of the article.  This is a short string with one
 character for each possible article wash operation that may have been
-performed.
+performed.  The characters and their meaning:
+
+@table @samp
+
+@item c
+Displayed when cited text may be hidden in the article buffer.
+
+@item h
+Displayed when headers are hidden in the article buffer.
+
+@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.)
+
+@item s
+Displayed when the signature has been hidden in the Article buffer.
+
+@item o
+Displayed when Gnus has treated overstrike characters in the article buffer.
+
+@item e
+Displayed when Gnus has treated emphasised strings in the article buffer.
+
+@end table
+
 @item m
 The number of @sc{mime} parts in the article.
+
 @end table
 
 @vindex gnus-break-pages
@@ -9436,23 +11024,26 @@ This is the delimiter mentioned above.  By default, it is @samp{^L}
 @cindex reply
 @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.
-* Post::                 Posting and following up.
-* Posting Server::       What server should you post 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?
+* Mail::                        Mailing and replying.
+* 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?
+* Signing and encrypting::      How to compose secure messages.
 @end menu
 
 Also see @pxref{Canceling and Superseding} for information on how to
@@ -9468,44 +11059,30 @@ Variables for customizing outgoing mail:
 @item gnus-uu-digest-headers
 @vindex gnus-uu-digest-headers
 List of regexps to match headers included in digested messages.  The
-headers will be included in the sequence they are matched.
+headers will be included in the sequence they are matched.  If
+@code{nil} include all headers.
 
 @item gnus-add-to-list
 @vindex gnus-add-to-list
 If non-@code{nil}, add a @code{to-list} group parameter to mail groups
 that have none when you do a @kbd{a}.
 
-@item message-send-mail-partially-limit
-@vindex message-send-mail-partially-limit
-The limitation of messages sent as message/partial.
-The lower bound of message size in characters, beyond which the message 
-should be sent in several parts. If it is nil, the size is unlimited.
-
-@end table
-
-
-@node Post
-@section Post
-
-Variables for composing news articles:
-
-@table @code
-@item gnus-sent-message-ids-file
-@vindex gnus-sent-message-ids-file
-Gnus will keep a @code{Message-ID} history file of all the mails it has
-sent.  If it discovers that it has already sent a mail, it will ask the
-user whether to re-send the mail.  (This is primarily useful when
-dealing with @sc{soup} packets and the like where one is apt to send the
-same packet multiple times.)  This variable says what the name of this
-history file is.  It is @file{~/News/Sent-Message-IDs} by default.  Set
-this variable to @code{nil} if you don't want Gnus to keep a history
-file.
-
-@item gnus-sent-message-ids-length
-@vindex gnus-sent-message-ids-length
-This variable says how many @code{Message-ID}s to keep in the history
-file.  It is 1000 by default.
-
+@item gnus-confirm-mail-reply-to-news
+@vindex gnus-confirm-mail-reply-to-news
+This can also be a function receiving the group name as the only
+parameter which should return non-@code{nil} if a confirmation is
+needed, or a regular expression matching group names, where
+confirmation is should be asked for.
+
+If you find yourself never wanting to reply to mail, but occasionally
+press R anyway, this variable might be for you.
+
+@item gnus-confirm-treat-mail-like-news
+@vindex gnus-confirm-treat-mail-like-news
+If non-@code{nil}, Gnus also requests confirmation according to
+@code{gnus-confirm-mail-reply-to-news} when replying to mail.  This is
+useful for treating mailing lists like newsgroups.
 @end table
 
 
@@ -9517,13 +11094,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 use the same native
-server.  However.  If your native server 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 ""))
@@ -9532,7 +11114,7 @@ then set the @code{gnus-post-method} to some other method:
 Now, if you've done this, and then this server rejects your article, or
 this server is down, what do you do then?  To override this variable you
 can use a non-zero prefix to the @kbd{C-c C-c} command to force using
-the ``current'' server for posting.
+the ``current'' server, to get back the default behavior, for posting.
 
 If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command,
 Gnus will prompt you for what method to use for posting.
@@ -9541,11 +11123,30 @@ You can also set @code{gnus-post-method} to a list of select methods.
 If that's the case, Gnus will always prompt you for what method to use
 for posting.
 
-Finally, if you want to always 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), you can set this variable to
-@code{current}.
+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
+
+To the thing similar to this, there is @code{message-smtpmail-send-it}.
+It is useful if your ISP requires the POP-before-SMTP authentication.
+See the documentation for the function @code{mail-source-touch-pop}.
 
+Other possible choices for @code{message-send-mail-function} includes
+@code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
+and @code{feedmail-send-it}.
 
 @node Mail and Post
 @section Mail and Post
@@ -9587,7 +11188,8 @@ you're in, you could say something like the following:
 (add-hook 'gnus-select-group-hook
           (lambda ()
             (cond
-             ((string-match "^de\\." gnus-newsgroup-name)
+             ((string-match
+               "^de\\." (gnus-group-real-name gnus-newsgroup-name))
               (ispell-change-dictionary "deutsch"))
              (t
               (ispell-change-dictionary "english")))))
@@ -9607,6 +11209,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:
@@ -9620,7 +11226,7 @@ use to store sent messages.  The default is:
 @end lisp
 
 You can, however, use any mail select method (@code{nnml},
-@code{nnmbox}, etc.).  @code{nnfolder} is a quite likeable select method
+@code{nnmbox}, etc.).  @code{nnfolder} is a quite likable select method
 for doing this sort of thing, though.  If you don't like the default
 directory chosen, you could say something like:
 
@@ -9641,13 +11247,27 @@ determined by the @code{gnus-message-archive-group} variable.
 This variable can be used to do the following:
 
 @itemize @bullet
-@item a string
+@item
+a string
 Messages will be saved in that group.
-@item a list of strings
+
+Note that you can include a select method in the group name, then the
+message will not be stored in the select method given by
+@code{gnus-message-archive-method}, but in the select method specified
+by the group name, instead.  Suppose @code{gnus-message-archive-method}
+has the default value shown above.  Then setting
+@code{gnus-message-archive-group} to @code{"foo"} means that outgoing
+messages are stored in @samp{nnfolder+archive:foo}, but if you use the
+value @code{"nnml:foo"}, then outgoing messages will be stored in
+@samp{nnml:foo}.
+@item
+a list of strings
 Messages will be saved in all those groups.
-@item an alist of regexps, functions and forms
+@item
+an alist of regexps, functions and forms
 When a key ``matches'', the result is used.
-@item @code{nil}
+@item
+@code{nil}
 No message archiving will take place.  This is the default.
 @end itemize
 
@@ -9689,8 +11309,8 @@ messages in one file per month:
           (concat "mail." (format-time-string "%Y-%m")))))
 @end lisp
 
-(XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
-use a different value for @code{gnus-message-archive-group} there.)
+@c (XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
+@c use a different value for @code{gnus-message-archive-group} there.)
 
 Now, when you send a message off, it will be stored in the appropriate
 group.  (If you want to disable storing for just one particular message,
@@ -9723,6 +11343,19 @@ of names).
 
 This variable can be used instead of @code{gnus-message-archive-group},
 but the latter is the preferred method.
+
+@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
 
 
@@ -9766,30 +11399,39 @@ 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 that
-match the next element in the match, and compare that to the last header
-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
+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.  (There original article is the
+one you are replying or following up to.  If you are not composing a
+reply or a followup, then there is nothing to match against.)  If the
+@code{match} is 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
-attribute consists of a @code{(@var{name} . @var{value})} pair.  The
+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
@@ -9809,21 +11451,32 @@ 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 "From.*To" "larsi.*org"
+        (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)
+        ((posting-from-work-p) ;; A user defined function
          (signature-file "~/.work-signature")
          (address "user@@bar.foo")
          (body "You are fired.\n\nSincerely, your boss.")
          (organization "Important Work, Inc"))
+        ("nnml:.*"
+         (From (save-excursion
+                 (set-buffer gnus-article-buffer)
+                 (message-fetch-field "to"))))
         ("^nn.+:"
          (signature-file "~/.mail-signature"))))
 @end lisp
 
+The @samp{nnml:.*} rule means that you use the @code{To} address as the
+@code{From} address in all your outgoing replies, which might be handy
+if you fill many roles.
+
 
 @node Drafts
 @section Drafts
@@ -9916,6 +11569,75 @@ 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 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}).
+
+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.
+
+@table @kbd
+
+@item C-c C-m s s
+@kindex C-c C-m s s
+@findex mml-secure-message-sign-smime
+
+Digitally sign current message using @sc{s/mime}.
+
+@item C-c C-m s o
+@kindex C-c C-m s o
+@findex mml-secure-message-sign-pgp
+
+Digitally sign current message using PGP.
+
+@item C-c C-m s p
+@kindex C-c C-m s p
+@findex mml-secure-message-sign-pgp
+
+Digitally sign current message using @sc{pgp/mime}.
+
+@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
+
+Digitally encrypt current message using PGP.
+
+@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
+
+@xref{Security, ,Security, message, Message Manual}, for more information.
 
 @node Select Methods
 @chapter Select Methods
@@ -9929,56 +11651,57 @@ personal mail group.
 
 A foreign group (or any group, really) is specified by a @dfn{name} and
 a @dfn{select method}.  To take the latter first, a select method is a
-list where the first element says what backend to use (e.g. @code{nntp},
+list where the first element says what back end to use (e.g. @code{nntp},
 @code{nnspool}, @code{nnml}) and the second element is the @dfn{server
 name}.  There may be additional elements in the select method, where the
-value may have special meaning for the backend in question.
+value may have special meaning for the back end in question.
 
 One could say that a select method defines a @dfn{virtual server}---so
-we do just that (@pxref{The Server Buffer}).
+we do just that (@pxref{Server Buffer}).
 
-The @dfn{name} of the group is the name the backend will recognize the
+The @dfn{name} of the group is the name the back end will recognize the
 group as.
 
 For instance, the group @samp{soc.motss} on the @sc{nntp} server
 @samp{some.where.edu} will have the name @samp{soc.motss} and select
 method @code{(nntp "some.where.edu")}.  Gnus will call this group
 @samp{nntp+some.where.edu:soc.motss}, even though the @code{nntp}
-backend just knows this group as @samp{soc.motss}.
+back end just knows this group as @samp{soc.motss}.
 
 The different methods all have their peculiarities, of course.
 
 @menu
-* The Server Buffer::     Making and editing virtual servers.
-* Getting News::          Reading USENET news with Gnus.
-* Getting Mail::          Reading your personal mail with Gnus.
-* Browsing the Web::      Getting messages from a plethora of Web sources.
-* Other Sources::         Reading directories, files, SOUP packets.
-* Combined Groups::       Combining groups into one group.
-* Gnus Unplugged::        Reading news and mail offline.
+* Server Buffer::               Making and editing virtual servers.
+* Getting News::                Reading USENET news with Gnus.
+* Getting Mail::                Reading your personal mail with Gnus.
+* Browsing the Web::            Getting messages from a plethora of Web sources.
+* IMAP::                        Using Gnus as a @sc{imap} client.
+* Other Sources::               Reading directories, files, SOUP packets.
+* Combined Groups::             Combining groups into one group.
+* Gnus Unplugged::              Reading news and mail offline.
 @end menu
 
 
-@node The Server Buffer
-@section The Server Buffer
+@node Server Buffer
+@section Server Buffer
 
 Traditionally, a @dfn{server} is a machine or a piece of software that
 one connects to, and then requests information from.  Gnus does not
 connect directly to any real servers, but does all transactions through
-one backend or other.  But that's just putting one layer more between
+one back end or other.  But that's just putting one layer more between
 the actual media and Gnus, so we might just as well say that each
-backend represents a virtual server.
+back end represents a virtual server.
 
-For instance, the @code{nntp} backend may be used to connect to several
+For instance, the @code{nntp} back end may be used to connect to several
 different actual @sc{nntp} servers, or, perhaps, to many different ports
-on the same actual @sc{nntp} server.  You tell Gnus which backend to
+on the same actual @sc{nntp} server.  You tell Gnus which back end to
 use, and what parameters to set by specifying a @dfn{select method}.
 
 These select method specifications can sometimes become quite
 complicated---say, for instance, that you want to read from the
 @sc{nntp} server @samp{news.funet.fi} on port number 13, which
 hangs if queried for @sc{nov} headers and has a buggy select.  Ahem.
-Anyways, if you had to specify that for each group that used this
+Anyway, if you had to specify that for each group that used this
 server, that would be too much work, so Gnus offers a way of naming
 select methods, which is what you do in the server buffer.
 
@@ -9986,13 +11709,13 @@ To enter the server buffer, use the @kbd{^}
 (@code{gnus-group-enter-server-mode}) command in the group buffer.
 
 @menu
-* Server Buffer Format::      You can customize the look of this buffer.
-* Server Commands::           Commands to manipulate servers.
-* Example Methods::           Examples server specifications.
-* Creating a Virtual Server:: An example session.
-* Server Variables::          Which variables to set.
-* Servers and Methods::       You can use server names as select methods.
-* Unavailable Servers::       Some servers you try to contact may be down.
+* Server Buffer Format::        You can customize the look of this buffer.
+* Server Commands::             Commands to manipulate servers.
+* Example Methods::             Examples server specifications.
+* Creating a Virtual Server::   An example session.
+* Server Variables::            Which variables to set.
+* Servers and Methods::         You can use server names as select methods.
+* Unavailable Servers::         Some servers you try to contact may be down.
 @end menu
 
 @vindex gnus-server-mode-hook
@@ -10011,7 +11734,7 @@ variable, with some simple extensions:
 @table @samp
 
 @item h
-How the news is fetched---the backend name.
+How the news is fetched---the back end name.
 
 @item n
 The name of this server.
@@ -10097,7 +11820,7 @@ servers.
 @findex gnus-server-regenerate-server
 Request that the server regenerate all its data structures
 (@code{gnus-server-regenerate-server}).  This can be useful if you have
-a mail backend that has gotten out of synch.
+a mail back end that has gotten out of sync.
 
 @end table
 
@@ -10118,7 +11841,7 @@ Reading directly from the spool is even simpler:
 @end lisp
 
 As you can see, the first element in a select method is the name of the
-backend, and the second is the @dfn{address}, or @dfn{name}, if you
+back end, and the second is the @dfn{address}, or @dfn{name}, if you
 will.
 
 After these two elements, there may be an arbitrary number of
@@ -10132,10 +11855,10 @@ look like then:
 (nntp "news.funet.fi" (nntp-port-number 15))
 @end lisp
 
-You should read the documentation to each backend to find out what
+You should read the documentation to each back end to find out what
 variables are relevant, but here's an @code{nnmh} example:
 
-@code{nnmh} is a mail backend that reads a spool-like structure.  Say
+@code{nnmh} is a mail back end that reads a spool-like structure.  Say
 you have two structures that you wish to access: One is your private
 mail spool, and the other is a public one.  Here's the possible spec for
 your private mail:
@@ -10155,6 +11878,9 @@ Here's the method for a public spool:
       (nnmh-get-new-mail nil))
 @end lisp
 
+@cindex proxy
+@cindex firewall
+
 If you are behind a firewall and only have access to the @sc{nntp}
 server from the firewall machine, you can instruct Gnus to @code{rlogin}
 on the firewall machine and telnet from there to the @sc{nntp} server.
@@ -10163,25 +11889,32 @@ should probably look something like this:
 
 @lisp
 (nntp "firewall"
-      (nntp-address "the.firewall.machine")
-      (nntp-open-connection-function nntp-open-rlogin)
-      (nntp-end-of-line "\n")
-      (nntp-rlogin-parameters
-       ("telnet" "the.real.nntp.host" "nntp")))
+      (nntp-open-connection-function nntp-open-via-rlogin-and-telnet)
+      (nntp-via-address "the.firewall.machine")
+      (nntp-address "the.real.nntp.host")
+      (nntp-end-of-line "\n"))
 @end lisp
 
 If you want to use the wonderful @code{ssh} program to provide a
-compressed connection over the modem line, you could create a virtual
-server that would look something like this:
+compressed connection over the modem line, you could add the following
+configuration to the example above:
+
+@lisp
+      (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:
 
 @lisp
-(nntp "news"
-       (nntp-address "copper.uio.no")
-       (nntp-rlogin-program "ssh")
-       (nntp-open-connection-function nntp-open-rlogin)
-       (nntp-end-of-line "\n")
-       (nntp-rlogin-parameters
-        ("telnet" "news.uio.no" "nntp")))
+(nntp "outside"
+      (nntp-pre-command "runsocks")
+      (nntp-open-connection-function nntp-open-via-telnet)
+      (nntp-address "the.news.server")
+      (nntp-end-of-line "\n"))
 @end lisp
 
 This means that you have to have set up @code{ssh-agent} correctly to
@@ -10228,7 +11961,7 @@ buffer, and you should be able to enter any of the groups displayed.
 @node Server Variables
 @subsection Server Variables
 
-One sticky point when defining variables (both on backends and in Emacs
+One sticky point when defining variables (both on back ends and in Emacs
 in general) is that some variables are typically initialized from other
 variables when the definition of the variables is being loaded.  If you
 change the "base" variable after the variables have been loaded, you
@@ -10241,7 +11974,7 @@ directory variables are initialized from that variable, so
 new virtual @code{nnml} server, it will @emph{not} suffice to set just
 @code{nnml-directory}---you have to explicitly set all the file
 variables to be what you want them to be.  For a complete list of
-variables for each backend, see each backend's section later in this
+variables for each back end, see each back end's section later in this
 manual, but here's an example @code{nnml} definition:
 
 @lisp
@@ -10283,7 +12016,7 @@ it will regard that server as ``down''.
 So, what happens if the machine was only feeling unwell temporarily?
 How do you test to see whether the machine has come up again?
 
-You jump to the server buffer (@pxref{The Server Buffer}) and poke it
+You jump to the server buffer (@pxref{Server Buffer}) and poke it
 with the following commands:
 
 @table @kbd
@@ -10324,26 +12057,31 @@ 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
 
 
 @node Getting News
 @section Getting News
 @cindex reading news
-@cindex news backends
+@cindex news back ends
 
 A newsreader is normally used for reading news.  Gnus currently provides
 only two methods of getting news---it can read from an @sc{nntp} server,
 or it can read from a local spool.
 
 @menu
-* NNTP::               Reading news from an @sc{nntp} server.
-* News Spool::         Reading news from the local spool.
+* NNTP::                        Reading news from an @sc{nntp} server.
+* News Spool::                  Reading news from the local spool.
 @end menu
 
 
 @node NNTP
-@subsection @sc{nntp}
+@subsection NNTP
 @cindex nntp
 
 Subscribing to a foreign group from an @sc{nntp} server is rather easy.
@@ -10396,12 +12134,15 @@ manual page, but here are the salient facts:
 The file contains one or more line, each of which define one server.
 
 @item
-Each line may contain an arbitrary number of token/value pairs.  The
-valid tokens include @samp{machine}, @samp{login}, @samp{password},
-@samp{default}, @samp{port} and @samp{force}.  (The latter is not a
-valid @file{.netrc}/@code{ftp} token, which is almost the only way the
-@file{.authinfo} file format deviates from the @file{.netrc} file
-format.)
+Each line may contain an arbitrary number of token/value pairs.
+
+The valid tokens include @samp{machine}, @samp{login}, @samp{password},
+@samp{default}.  In addition Gnus introduces two new tokens, not present
+in the original @file{.netrc}/@code{ftp} syntax, namely @samp{port} and
+@samp{force}.  (This is the only way the @file{.authinfo} file format
+deviates from the @file{.netrc} file format.)  @samp{port} is used to
+indicate what port on the server the credentials apply to and
+@samp{force} is explained below.
 
 @end enumerate
 
@@ -10452,7 +12193,8 @@ The default value is
 
 @lisp
 '(("nntpd 1\\.5\\.11t"
-   (remove-hook 'nntp-server-opened-hook 'nntp-send-mode-reader)))
+   (remove-hook 'nntp-server-opened-hook
+                'nntp-send-mode-reader)))
 @end lisp
 
 This ensures that Gnus doesn't send the @code{MODE READER} command to
@@ -10460,9 +12202,9 @@ nntpd 1.5.11t, since that command chokes that server, I've been told.
 
 @item nntp-maximum-request
 @vindex nntp-maximum-request
-If the @sc{nntp} server doesn't support @sc{nov} headers, this backend
+If the @sc{nntp} server doesn't support @sc{nov} headers, this back end
 will collect headers by sending a series of @code{head} commands.  To
-speed things up, the backend sends lots of these commands without
+speed things up, the back end sends lots of these commands without
 waiting for reply, and then reads all the replies.  This is controlled
 by the @code{nntp-maximum-request} variable, and is 400 by default.  If
 your network is buggy, you should set this to 1.
@@ -10474,7 +12216,7 @@ regularly, you're sure to have problems with @sc{nntp} servers not
 responding properly, or being too loaded to reply within reasonable
 time.  This is can lead to awkward problems, which can be helped
 somewhat by setting @code{nntp-connection-timeout}.  This is an integer
-that says how many seconds the @code{nntp} backend should wait for a
+that says how many seconds the @code{nntp} back end should wait for a
 connection before giving up.  If it is @code{nil}, which is the default,
 no timeouts are done.
 
@@ -10503,171 +12245,274 @@ no timeouts are done.
 This hook is run as the last step when connecting to an @sc{nntp}
 server.
 
-@findex nntp-open-rlogin
-@findex nntp-open-telnet
-@findex nntp-open-network-stream
-@item nntp-open-connection-function
-@vindex nntp-open-connection-function
-This function is used to connect to the remote system.  Four pre-made
-functions are supplied:
-
-@table @code
-@item nntp-open-network-stream
-This is the default, and simply connects to some port or other on the
-remote system.
+@item nntp-buggy-select
+@vindex nntp-buggy-select
+Set this to non-@code{nil} if your select routine is buggy.
 
-@item nntp-open-rlogin
-Does an @samp{rlogin} on the
-remote system, and then does a @samp{telnet} to the @sc{nntp} server
-available there.
+@item nntp-nov-is-evil
+@vindex nntp-nov-is-evil
+If the @sc{nntp} server does not support @sc{nov}, you could set this
+variable to @code{t}, but @code{nntp} usually checks automatically whether @sc{nov}
+can be used.
 
-@code{nntp-open-rlogin}-related variables:
+@item nntp-xover-commands
+@vindex nntp-xover-commands
+@cindex nov
+@cindex XOVER
+List of strings used as commands to fetch @sc{nov} lines from a
+server.  The default value of this variable is @code{("XOVER"
+"XOVERVIEW")}.
 
-@table @code
+@item nntp-nov-gap
+@vindex nntp-nov-gap
+@code{nntp} normally sends just one big request for @sc{nov} lines to
+the server.  The server responds with one huge list of lines.  However,
+if you have read articles 2-5000 in the group, and only want to read
+article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}
+lines that you will not need.  This variable says how
+big a gap between two consecutive articles is allowed to be before the
+@code{XOVER} request is split into several request.  Note that if your
+network is fast, setting this variable to a really small number means
+that fetching will probably be slower.  If this variable is @code{nil},
+@code{nntp} will never split requests.  The default is 5.
 
-@item nntp-rlogin-program
-@vindex nntp-rlogin-program
-Program used to log in on remote machines.  The default is @samp{rsh},
-but @samp{ssh} is a popular alternative.
+@item nntp-prepare-server-hook
+@vindex nntp-prepare-server-hook
+A hook run before attempting to connect to an @sc{nntp} server.
 
-@item nntp-rlogin-parameters
-@vindex nntp-rlogin-parameters
-This list will be used as the parameter list given to @code{rsh}.
+@item nntp-warn-about-losing-connection
+@vindex nntp-warn-about-losing-connection
+If this variable is non-@code{nil}, some noise will be made when a
+server closes connection.
 
-@item nntp-rlogin-user-name
-@vindex nntp-rlogin-user-name
-User name on the remote system.
+@item nntp-record-commands
+@vindex nntp-record-commands
+If non-@code{nil}, @code{nntp} will log all commands it sends to the
+@sc{nntp} server (along with a timestamp) in the @samp{*nntp-log*}
+buffer.  This is useful if you are debugging a Gnus/@sc{nntp} connection
+that doesn't seem to work.
 
-@end table
+@item nntp-open-connection-function
+@vindex nntp-open-connection-function
+It is possible to customize how the connection to the nntp server will
+be opened.  If you specify an @code{nntp-open-connection-function}
+parameter, Gnus will use that function to establish the connection.
+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:
 
-@item nntp-open-telnet
-Does a @samp{telnet} to the remote system and then another @samp{telnet}
-to get to the @sc{nntp} server.
+@lisp
+(add-hook 'nntp-prepare-post-hook 'canlock-insert-header)
+@end lisp
 
-@code{nntp-open-telnet}-related variables:
+Note that not all servers support the recommended ID.  This works for
+INN versions 2.3.0 and later, for instance.
+@end table
 
-@table @code
-@item nntp-telnet-command
-@vindex nntp-telnet-command
-Command used to start @code{telnet}.
+@menu
+* Direct Functions::            Connecting directly to the server.
+* Indirect Functions::          Connecting indirectly to the server.
+* Common Variables::            Understood by several connection functions.
+@end menu
 
-@item nntp-telnet-switches
-@vindex nntp-telnet-switches
-List of strings to be used as the switches to the @code{telnet} command.
 
-@item nntp-telnet-user-name
-@vindex nntp-telnet-user-name
-User name for log in on the remote system.
+@node Direct Functions
+@subsubsection Direct Functions
+@cindex direct connection functions
 
-@item nntp-telnet-passwd
-@vindex nntp-telnet-passwd
-Password to use when logging in.
+These functions are called direct because they open a direct connection
+between your machine and the @sc{nntp} server.  The behavior of these
+functions is also affected by commonly understood variables
+(@pxref{Common Variables}).
 
-@item nntp-telnet-parameters
-@vindex nntp-telnet-parameters
-A list of strings executed as a command after logging in
-via @code{telnet}.
-
-@item nntp-telnet-shell-prompt
-@vindex nntp-telnet-shell-prompt
-Regexp matching the shell prompt on the remote machine.  The default is
-@samp{bash\\|\$ *\r?$\\|> *\r?}.
-
-@item nntp-open-telnet-envuser
-@vindex nntp-open-telnet-envuser
-If non-@code{nil}, the @code{telnet} session (client and server both)
-will support the @code{ENVIRON} option and not prompt for login name.
-This works for Solaris @code{telnet}, for instance.
-
-@end table
+@table @code
+@findex nntp-open-network-stream
+@item nntp-open-network-stream
+This is the default, and simply connects to some port or other on the
+remote system.
 
 @findex nntp-open-ssl-stream
 @item nntp-open-ssl-stream
-Opens a connection to a server over a @dfn{secure} channel.  To use this
-you must have SSLay installed
-(@file{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}, and you also need
-@file{ssl.el} (from the W3 distributeion, for instance).  You then
+Opens a connection to a server over a @dfn{secure} channel.  To use
+this you must have OpenSSL (@uref{http://www.openssl.org}) or SSLeay
+installed (@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}, and you also
+need @file{ssl.el} (from the W3 distribution, for instance).  You then
 define a server as follows:
 
 @lisp
 ;; Type `C-c C-c' after you've finished editing.
 ;;
 ;; "snews" is port 563 and is predefined in our /etc/services
+;; however, openssl s_client -port doesn't like named ports
 ;;
 (nntp "snews.bar.com"
       (nntp-open-connection-function nntp-open-ssl-stream)
-      (nntp-port-number "snews")
+      (nntp-port-number 563)
       (nntp-address "snews.bar.com"))
 @end lisp
 
+@findex nntp-open-telnet-stream
+@item nntp-open-telnet-stream
+Opens a connection to an @sc{nntp} server by simply @samp{telnet}'ing
+it.  You might wonder why this function exists, since we have the
+default @code{nntp-open-network-stream} which would do the job.  (One
+of) the reason(s) is that if you are behind a firewall but have direct
+connections to the outside world thanks to a command wrapper like
+@code{runsocks}, you can use it like this:
+
+@lisp
+(nntp "socksified"
+      (nntp-pre-command "runsocks")
+      (nntp-open-connection-function nntp-open-telnet-stream)
+      (nntp-address "the.news.server"))
+@end lisp
+
+With the default method, you would need to wrap your whole Emacs
+session, which is not a good idea.
 @end table
 
-@item nntp-end-of-line
-@vindex nntp-end-of-line
-String to use as end-of-line marker when talking to the @sc{nntp}
-server.  This is @samp{\r\n} by default, but should be @samp{\n} when
-using @code{rlogin} to talk to the server.
 
-@item nntp-rlogin-user-name
-@vindex nntp-rlogin-user-name
-User name on the remote system when using the @code{rlogin} connect
-function.
+@node Indirect Functions
+@subsubsection Indirect Functions
+@cindex indirect connection functions
 
-@item nntp-address
-@vindex nntp-address
-The address of the remote system running the @sc{nntp} server.
+These functions are called indirect because they connect to an
+intermediate host before actually connecting to the @sc{nntp} server.
+All of these functions and related variables are also said to belong to
+the "via" family of connection: they're all prefixed with "via" to make
+things cleaner.  The behavior of these functions is also affected by
+commonly understood variables (@pxref{Common Variables}).
 
-@item nntp-port-number
-@vindex nntp-port-number
-Port number to connect to when using the @code{nntp-open-network-stream}
-connect function.
+@table @code
+@item nntp-open-via-rlogin-and-telnet
+@findex nntp-open-via-rlogin-and-telnet
+Does an @samp{rlogin} on a remote system, and then does a @samp{telnet}
+to the real @sc{nntp} server from there.  This is useful for instance if
+you need to connect to a firewall machine first.
 
-@item nntp-buggy-select
-@vindex nntp-buggy-select
-Set this to non-@code{nil} if your select routine is buggy.
+@code{nntp-open-via-rlogin-and-telnet}-specific variables:
 
-@item nntp-nov-is-evil
-@vindex nntp-nov-is-evil
-If the @sc{nntp} server does not support @sc{nov}, you could set this
-variable to @code{t}, but @code{nntp} usually checks automatically whether @sc{nov}
-can be used.
+@table @code
+@item nntp-via-rlogin-command
+@vindex nntp-via-rlogin-command
+Command used to log in on the intermediate host.  The default is
+@samp{rsh}, but @samp{ssh} is a popular alternative.
+
+@item nntp-via-rlogin-command-switches
+@vindex nntp-via-rlogin-command-switches
+List of strings to be used as the switches to
+@code{nntp-via-rlogin-command}.  The default is @code{nil}.  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-xover-commands
-@vindex nntp-xover-commands
-@cindex nov
-@cindex XOVER
-List of strings used as commands to fetch @sc{nov} lines from a
-server.  The default value of this variable is @code{("XOVER"
-"XOVERVIEW")}.
+@item nntp-open-via-telnet-and-telnet
+@findex nntp-open-via-telnet-and-telnet
+Does essentially the same, but uses @samp{telnet} instead of
+@samp{rlogin} to connect to the intermediate host.
 
-@item nntp-nov-gap
-@vindex nntp-nov-gap
-@code{nntp} normally sends just one big request for @sc{nov} lines to
-the server.  The server responds with one huge list of lines.  However,
-if you have read articles 2-5000 in the group, and only want to read
-article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}
-lines that you will not need.  This variable says how
-big a gap between two consecutive articles is allowed to be before the
-@code{XOVER} request is split into several request.  Note that if your
-network is fast, setting this variable to a really small number means
-that fetching will probably be slower.  If this variable is @code{nil},
-@code{nntp} will never split requests.  The default is 5.
+@code{nntp-open-via-telnet-and-telnet}-specific variables:
 
-@item nntp-prepare-server-hook
-@vindex nntp-prepare-server-hook
-A hook run before attempting to connect to an @sc{nntp} server.
+@table @code
+@item nntp-via-telnet-command
+@vindex nntp-via-telnet-command
+Command used to @code{telnet} the intermediate host.  The default is
+@samp{telnet}.
+
+@item nntp-via-telnet-switches
+@vindex nntp-via-telnet-switches
+List of strings to be used as the switches to the
+@code{nntp-via-telnet-command} command.  The default is @samp{("-8")}.
+
+@item nntp-via-user-password
+@vindex nntp-via-user-password
+Password to use when logging in on the intermediate host.
+
+@item nntp-via-envuser
+@vindex nntp-via-envuser
+If non-@code{nil}, the intermediate @code{telnet} session (client and
+server both) will support the @code{ENVIRON} option and not prompt for
+login name. This works for Solaris @code{telnet}, for instance.
+
+@item nntp-via-shell-prompt
+@vindex nntp-via-shell-prompt
+Regexp matching the shell prompt on the intermediate host.  The default
+is @samp{bash\\|\$ *\r?$\\|> *\r?}.
 
-@item nntp-warn-about-losing-connection
-@vindex nntp-warn-about-losing-connection
-If this variable is non-@code{nil}, some noise will be made when a
-server closes connection.
+@end table
 
-@item nntp-record-commands
-@vindex nntp-record-commands
-If non-@code{nil}, @code{nntp} will log all commands it sends to the
-@sc{nntp} server (along with a timestep) in the @samp{*nntp-log*}
-buffer.  This is useful if you are debugging a Gnus/@sc{nntp} connection
-that doesn't seem to work.
+@end table
+
+
+Here are some additional variables that are understood by all the above
+functions:
+
+@table @code
+
+@item nntp-via-user-name
+@vindex nntp-via-user-name
+User name to use when connecting to the intermediate host.
+
+@item nntp-via-address
+@vindex nntp-via-address
+Address of the intermediate host to connect to.
+
+@end table
+
+
+@node Common Variables
+@subsubsection Common Variables
+
+The following variables affect the behavior of all, or several of the
+pre-made connection functions. When not specified, all functions are
+affected.
+
+@table @code
+
+@item nntp-pre-command
+@vindex nntp-pre-command
+A command wrapper to use when connecting through a non native connection
+function (all except @code{nntp-open-network-stream} and
+@code{nntp-open-ssl-stream}.  This is where you would put a @samp{SOCKS}
+wrapper for instance.
+
+@item nntp-address
+@vindex nntp-address
+The address of the @sc{nntp} server.
+
+@item nntp-port-number
+@vindex nntp-port-number
+Port number to connect to the @sc{nntp} server.  The default is @samp{nntp}.
+If you use @sc{nntp} over @sc{ssl}, you may want to use integer ports rather
+than named ports (i.e, use @samp{563} instead of @samp{snews}), because
+external SSL tools may not work with named ports.
+
+@item nntp-end-of-line
+@vindex nntp-end-of-line
+String to use as end-of-line marker when talking to the @sc{nntp}
+server.  This is @samp{\r\n} by default, but should be @samp{\n} when
+using a non native connection function.
+
+@item nntp-telnet-command
+@vindex nntp-telnet-command
+Command to use when connecting to the @sc{nntp} server through
+@samp{telnet}.  This is NOT for an intermediate host.  This is just for
+the real @sc{nntp} server.  The default is @samp{telnet}.
+
+@item nntp-telnet-switches
+@vindex nntp-telnet-switches
+A list of switches to pass to @code{nntp-telnet-command}.  The default
+is @samp{("-8")}.
 
 @end table
 
@@ -10682,7 +12527,7 @@ and might be useful, for instance, to speed up reading groups that
 contain very big articles---@samp{alt.binaries.pictures.furniture}, for
 instance.
 
-Anyways, you just specify @code{nnspool} as the method and @code{""} (or
+Anyway, you just specify @code{nnspool} as the method and @code{""} (or
 anything else) as the address.
 
 If you have access to a local spool, you should probably use that as the
@@ -10716,19 +12561,19 @@ Where the news lib dir is (@file{/usr/lib/news/} by default).
 
 @item nnspool-active-file
 @vindex nnspool-active-file
-The path to the active file.
+The name of the active file.
 
 @item nnspool-newsgroups-file
 @vindex nnspool-newsgroups-file
-The path to the group descriptions file.
+The name of the group descriptions file.
 
 @item nnspool-history-file
 @vindex nnspool-history-file
-The path to the news history file.
+The name of the news history file.
 
 @item nnspool-active-times-file
 @vindex nnspool-active-times-file
-The path to the active date file.
+The name of the active date file.
 
 @item nnspool-nov-is-evil
 @vindex nnspool-nov-is-evil
@@ -10754,30 +12599,30 @@ Reading mail with a newsreader---isn't that just plain WeIrD? But of
 course.
 
 @menu
-* Mail in a Newsreader::         Important introductory notes.  
-* Getting Started Reading Mail:: A simple cookbook example.
-* Splitting Mail::               How to create mail groups.
-* Mail Sources::                 How to tell Gnus where to get mail from.
-* Mail Backend Variables::       Variables for customizing mail handling.
-* Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
-* Group Mail Splitting::         Use group customize to drive mail splitting.
-* Incorporating Old Mail::       What about the old mail you have?
-* Expiring Mail::                Getting rid of unwanted mail.
-* Washing Mail::                 Removing gruft from the mail you get.
-* Duplicates::                   Dealing with duplicated mail.
-* Not Reading Mail::             Using mail backends for reading other files.
-* Choosing a Mail Backend::      Gnus can read a variety of mail formats.
+* Mail in a Newsreader::        Important introductory notes.
+* Getting Started Reading Mail::  A simple cookbook example.
+* Splitting Mail::              How to create mail groups.
+* Mail Sources::                How to tell Gnus where to get mail from.
+* Mail Back End Variables::     Variables for customizing mail handling.
+* Fancy Mail Splitting::        Gnus can do hairy splitting of incoming mail.
+* Group Mail Splitting::        Use group customize to drive mail splitting.
+* Incorporating Old Mail::      What about the old mail you have?
+* Expiring Mail::               Getting rid of unwanted mail.
+* Washing Mail::                Removing gruft from the mail you get.
+* 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.
 @end menu
 
 
 @node Mail in a Newsreader
 @subsection Mail in a Newsreader
 
-If you are used to traditional mail readers, but have decided to switch 
+If you are used to traditional mail readers, but have decided to switch
 to reading mail with Gnus, you may find yourself experiencing something
 of a culture shock.
 
-Gnus does not behave like traditional mail readers.  If you want to make 
+Gnus does not behave like traditional mail readers.  If you want to make
 it behave that way, you can, but it's an uphill battle.
 
 Gnus, by default, handles all its groups using the same approach.  This
@@ -10791,7 +12636,7 @@ Does this mean that all the messages that have been marked as read are
 deleted?  How awful!
 
 But, no, it means that old messages are @dfn{expired} according to some
-scheme or other.  For news messages, the expire process is controlled by 
+scheme or other.  For news messages, the expire process is controlled by
 the news administrator; for mail, the expire process is controlled by
 you.  The expire process for mail is covered in depth in @pxref{Expiring
 Mail}.
@@ -10801,7 +12646,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.
@@ -10839,18 +12684,17 @@ You Do.)
 @subsection Getting Started Reading Mail
 
 It's quite easy to use Gnus to read your new mail.  You just plonk the
-mail backend of your choice into @code{gnus-secondary-select-methods},
+mail back end of your choice into @code{gnus-secondary-select-methods},
 and things will happen automatically.
 
 For instance, if you want to use @code{nnml} (which is a "one file per
-mail" backend), you could put the following in your @file{.gnus} file:
+mail" back end), you could put the following in your @file{.gnus.el} file:
 
 @lisp
-(setq gnus-secondary-select-methods
-      '((nnml "private")))
+(setq gnus-secondary-select-methods '((nnml "")))
 @end lisp
 
-Now, the next time you start Gnus, this backend will be queried for new
+Now, the next time you start Gnus, this back end will be queried for new
 articles, and it will move all the messages in your spool file to its
 directory, which is @code{~/Mail/} by default.  The new group that will
 be created (@samp{mail.misc}) will be subscribed, and you can read it
@@ -10872,7 +12716,7 @@ last group.
 
 This should be sufficient for reading mail with Gnus.  You might want to
 give the other sections in this part of the manual a perusal, though.
-Especially @pxref{Choosing a Mail Backend} and @pxref{Expiring Mail}.
+Especially @pxref{Choosing a Mail Back End} and @pxref{Expiring Mail}.
 
 
 @node Splitting Mail
@@ -10921,13 +12765,13 @@ arguments in a buffer narrowed to the headers of an incoming mail
 message.  The function should return a list of group names that it
 thinks should carry this mail message.
 
-Note that the mail backends are free to maul the poor, innocent,
+Note that the mail back ends are free to maul the poor, innocent,
 incoming headers all they want to.  They all add @code{Lines} headers;
 some add @code{X-Gnus-Group} headers; most rename the Unix mbox
 @code{From<SPACE>} line to something else.
 
 @vindex nnmail-crosspost
-The mail backends all support cross-posting.  If several regexps match,
+The mail back ends all support cross-posting.  If several regexps match,
 the mail will be ``cross-posted'' to all those groups.
 @code{nnmail-crosspost} says whether to use this mechanism or not.  Note
 that no articles are crossposted to the general (@samp{}) group.
@@ -10944,7 +12788,33 @@ variable is @code{add-name-to-file} by default.)
 @kindex M-x nnmail-split-history
 @kindex nnmail-split-history
 If you wish to see where the previous mail split put the messages, you
-can use the @kbd{M-x nnmail-split-history} command.
+can use the @kbd{M-x nnmail-split-history} command.  If you wish to see
+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.
+
+@vindex nnmail-resplit-incoming
+By default, splitting is performed on all incoming messages.  If
+you specify a @code{directory} entry for the variable
+@code{mail-sources} @pxref{Mail Source Specifiers}, however, then
+splitting does @emph{not} happen by default.  You can set the variable
+@code{nnmail-resplit-incoming} to a non-nil value to make splitting
+happen even in this case.  (This variable has no effect on other kinds
+of entries.)
 
 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
@@ -10965,9 +12835,9 @@ POP mail server, from a procmail directory, or from a maildir, for
 instance.
 
 @menu
-* Mail Source Specifiers::       How to specify what a mail source is.
-* Mail Source Customization::    Some variables that influence things.
-* Fetching Mail::                Using the mail source specifiers.
+* Mail Source Specifiers::      How to specify what a mail source is.
+* Mail Source Customization::   Some variables that influence things.
+* Fetching Mail::               Using the mail source specifiers.
 @end menu
 
 
@@ -11003,8 +12873,9 @@ Keywords:
 
 @table @code
 @item :path
-The path of the file.  Defaults to the value of the @code{MAIL}
-environment variable or @file{/usr/mail/spool/user-name}.
+The file name.  Defaults to the value of the @code{MAIL}
+environment variable or the value of @code{rmail-spool-directory}
+(usually something like @file{/usr/mail/spool/user-name}).
 @end table
 
 An example file mail source:
@@ -11013,14 +12884,14 @@ An example file mail source:
 (file :path "/usr/spool/mail/user-name")
 @end lisp
 
-Or using the default path:
+Or using the default file name:
 
 @lisp
 (file)
 @end lisp
 
-If the mail spool file is not located on the local machine, it's best to 
-use POP or @sc{imap} or the like to fetch the mail.  You can not you ange-ftp 
+If the mail spool file is not located on the local machine, it's best to
+use POP or @sc{imap} or the like to fetch the mail.  You can not use ange-ftp
 file names here---it has no way to lock the mail spool while moving the
 mail.
 
@@ -11039,7 +12910,7 @@ The @samp{getmail} script would look something like the following:
 #  flu@@iki.fi
 
 MOVEMAIL=/usr/lib/emacs/20.3/i386-redhat-linux/movemail
-TMP=~/Mail/tmp
+TMP=$HOME/Mail/tmp
 rm -f $TMP; $MOVEMAIL $MAIL $TMP >/dev/null && cat $TMP
 @end example
 
@@ -11047,16 +12918,27 @@ Alter this script to fit find the @samp{movemail} you want to use.
 
 
 @item directory
+@vindex nnmail-scan-directory-mail-source-once
 Get mail from several files in a directory.  This is typically used when
-you have procmail split the incoming mail into several files.  Setting
-@code{nnmail-scan-directory-mail-source-once} to non-nil force Gnus to
-scan the mail source only once.
+you have procmail split the incoming mail into several files.  That is,
+there is a one-to-one correspondence between files in that directory and
+groups, so that mail from the file @file{foo.bar.spool} will be put in
+the group @code{foo.bar}.  (You can change the suffix to be used instead
+of @code{.spool}.)  Setting
+@code{nnmail-scan-directory-mail-source-once} to non-nil forces Gnus to
+scan the mail source only once.  This is particularly useful if you want
+to scan mail groups at a specified level.
+
+@vindex nnmail-resplit-incoming
+There is also the variable @code{nnmail-resplit-incoming}, if you set
+that to a non-nil value, then the normal splitting process is applied
+to all the files from the directory, @ref{Splitting Mail}.
 
 Keywords:
 
 @table @code
 @item :path
-The path of the directory where the files are.  There is no default
+The name of the directory where the files are.  There is no default
 value.
 
 @item :suffix
@@ -11093,7 +12975,11 @@ The name of the POP server.  The default is taken from the
 @code{MAILHOST} environment variable.
 
 @item :port
-The port number of the POP server.  The default is @samp{pop3}.
+The port number of the POP server.  This can be a number (eg,
+@samp{:port 1234}) or a string (eg, @samp{:port "pop3"}).  If it is a
+string, it should be a service name as listed in @file{/etc/services} on
+Unix systems.  The default is @samp{"pop3"}.  On some systems you might
+need to specify it as @samp{"pop-3"} instead.
 
 @item :user
 The user name to give to the POP server.  The default is the login
@@ -11104,7 +12990,7 @@ The password to give to the POP server.  If not specified, the user is
 prompted.
 
 @item :program
-The program to use to fetch mail from the POP server.  This is should be
+The program to use to fetch mail from the POP server.  This should be
 a @code{format}-like string.  Here's an example:
 
 @example
@@ -11186,7 +13072,7 @@ Keywords:
 
 @table @code
 @item :path
-The path of the directory where the mails are stored.  The default is
+The name of the directory where the mails are stored.  The default is
 taken from the @code{MAILDIR} environment variable or
 @samp{~/Maildir/}.
 @item :subdirs
@@ -11206,18 +13092,24 @@ from locking problems).
 Two example maildir mail sources:
 
 @lisp
-(maildir :path "/home/user-name/Maildir/" :subdirs ("cur" "new"))
+(maildir :path "/home/user-name/Maildir/"
+         :subdirs ("cur" "new"))
 @end lisp
 
 @lisp
-(maildir :path "/user@@remotehost.org:~/Maildir/" :subdirs ("new"))
+(maildir :path "/user@@remotehost.org:~/Maildir/"
+         :subdirs ("new"))
 @end lisp
 
 @item imap
-Get mail from a @sc{imap} server.  If you don't want to use @sc{imap} as
-intended, as a network mail reading protocol (ie with nnimap), for some
-reason or other, Gnus let you treat it similar to a POP server and
-fetches articles from a given @sc{imap} mailbox.
+Get mail from a @sc{imap} server.  If you don't want to use @sc{imap}
+as intended, as a network mail reading protocol (ie with nnimap), for
+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:
 
@@ -11228,7 +13120,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
@@ -11241,13 +13133,39 @@ prompted.
 @item :stream
 What stream to use for connecting to the server, this is one of the
 symbols in @code{imap-stream-alist}.  Right now, this means
-@samp{kerberos4}, @samp{ssl} or the default @samp{network}.
+@samp{gssapi}, @samp{kerberos4}, @samp{starttls}, @samp{ssl},
+@samp{shell} or the default @samp{network}.
+
+@item :authentication
+Which authenticator to use for authenticating to the server, this is
+one of the symbols in @code{imap-authenticator-alist}.  Right now,
+this means @samp{gssapi}, @samp{kerberos4}, @samp{digest-md5},
+@samp{cram-md5}, @samp{anonymous} or the default @samp{login}.
+
+@item :program
+When using the `shell' :stream, the contents of this variable is
+mapped into the `imap-shell-program' variable.  This should be a
+@code{format}-like string (or list of strings).  Here's an example:
+
+@example
+ssh %s imapd
+@end example
+
+The valid format specifier characters are:
+
+@table @samp
+@item s
+The name of the server.
+
+@item l
+User name from `imap-default-user'.
+
+@item p
+The port number of the server.
+@end table
 
-@item :authenticator
-Which authenticator to use for authenticating to the server, this is one
-of the symbols in @code{imap-authenticator-alist}.  Right now, this
-means @samp{kerberos4}, @samp{cram-md5}, @samp{anonymous} or the default
-@samp{login}.
+The values used for these specs are taken from the values you give the
+corresponding keywords.
 
 @item :mailbox
 The name of the mailbox to get mail from.  The default is @samp{INBOX}
@@ -11257,15 +13175,15 @@ which normally is the mailbox which receive incoming mail.
 The predicate used to find articles to fetch.  The default, @samp{UNSEEN
 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}.
+articles as read (or; SEEN) you might want to set this to @samp{1:*}.
 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
+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
@@ -11276,20 +13194,20 @@ after finishing the fetch.
 An example @sc{imap} mail source:
 
 @lisp
-(imap :server "mail.mycorp.com" :stream kerberos4 :fetchflag "\\Seen")
+(imap :server "mail.mycorp.com"
+      :stream kerberos4
+      :fetchflag "\\Seen")
 @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:
 
@@ -11315,7 +13233,9 @@ folder after finishing the fetch.
 An example webmail source:
 
 @lisp
-(webmail :subtype 'hotmail :user "user-name" :password "secret")
+(webmail :subtype 'hotmail
+         :user "user-name"
+         :password "secret")
 @end lisp
 @end table
 
@@ -11332,7 +13252,7 @@ directory source to get mail, you can specify it as in this example:
 
 @lisp
 (setq mail-sources
-      '((directory :path "/home/pavel/.Spool/" 
+      '((directory :path "/home/pavel/.Spool/"
                    :suffix ""
                    :plugged t)))
 @end lisp
@@ -11343,6 +13263,27 @@ useful when you use local mail and news.
 @end table
 @end table
 
+@subsubsection Function Interface
+
+Some of the above keywords specify a Lisp function to be executed.
+For each keyword @code{:foo}, the Lisp variable @code{foo} is bound to
+the value of the keyword while the function is executing.  For example,
+consider the following mail-source setting:
+
+@lisp
+(setq mail-sources '((pop :user "jrl"
+                          :server "pophost" :function fetchfunc)))
+@end lisp
+
+While the function @code{fetchfunc} is executing, the symbol @code{user}
+is bound to @code{"jrl"}, and the symbol @code{server} is bound to
+@code{"pophost"}.  The symbols @code{port}, @code{password},
+@code{program}, @code{prescript}, @code{postscript}, @code{function},
+and @code{authentication} are also bound (to their default values).
+
+See above for a list of keywords for each type of mail source.
+
+
 @node Mail Source Customization
 @subsubsection Mail Source Customization
 
@@ -11367,10 +13308,22 @@ Directory where files (if any) will be stored.  The default is
 where the incoming files will be stored if the previous variable is
 @code{nil}.
 
+@item mail-source-incoming-file-prefix
+@vindex mail-source-incoming-file-prefix
+Prefix for file name for storing incoming mail.  The default is
+@file{Incoming}, in which case files will end up with names like
+@file{Incoming30630D_} or @file{Incoming298602ZD}.  This is really only
+relevant if @code{mail-source-delete-incoming} is @code{nil}.
+
 @item mail-source-default-file-modes
 @vindex mail-source-default-file-modes
 All new mail files will get this file mode.  The default is 384.
 
+@item mail-source-movemail-program
+@vindex mail-source-movemail-program
+If non-nil, name of program for fetching new mail.  If nil,
+@code{movemail} in @var{exec-directory}.
+
 @end table
 
 
@@ -11384,7 +13337,7 @@ The way to actually tell Gnus where to get new mail from is to set
 (@pxref{Mail Source Specifiers}).
 
 If this variable (and the obsolescent @code{nnmail-spool-file}) is
-@code{nil}, the mail backends will never attempt to fetch mail by
+@code{nil}, the mail back ends will never attempt to fetch mail by
 themselves.
 
 If you want to fetch mail both from your local spool as well as a POP
@@ -11409,25 +13362,25 @@ Or, if you don't want to use any of the keyword defaults:
 @end lisp
 
 
-When you use a mail backend, Gnus will slurp all your mail from your
+When you use a mail back end, Gnus will slurp all your mail from your
 inbox and plonk it down in your home directory.  Gnus doesn't move any
-mail if you're not using a mail backend---you have to do a lot of magic
+mail if you're not using a mail back end---you have to do a lot of magic
 invocations first.  At the time when you have finished drawing the
 pentagram, lightened the candles, and sacrificed the goat, you really
 shouldn't be too surprised when Gnus moves your mail.
 
 
 
-@node Mail Backend Variables
-@subsection Mail Backend Variables
+@node Mail Back End Variables
+@subsection Mail Back End Variables
 
 These variables are (for the most part) pertinent to all the various
-mail backends.
+mail back ends.
 
 @table @code
 @vindex nnmail-read-incoming-hook
 @item nnmail-read-incoming-hook
-The mail backends all call this hook after reading new mail.  You can
+The mail back ends all call this hook after reading new mail.  You can
 use this hook to notify any mail watch programs, if you want to.
 
 @vindex nnmail-split-hook
@@ -11455,19 +13408,19 @@ is done).  Here's and example of using these two hooks to change the
 default file modes the new mail files get:
 
 @lisp
-(add-hook 'gnus-pre-get-new-mail-hook
+(add-hook 'nnmail-pre-get-new-mail-hook
           (lambda () (set-default-file-modes 511)))
 
-(add-hook 'gnus-post-get-new-mail-hook
+(add-hook 'nnmail-post-get-new-mail-hook
           (lambda () (set-default-file-modes 551)))
 @end lisp
 
 @item nnmail-use-long-file-names
 @vindex nnmail-use-long-file-names
-If non-@code{nil}, the mail backends will use long file and directory
+If non-@code{nil}, the mail back ends will use long file and directory
 names.  Groups like @samp{mail.misc} will end up in directories
-(assuming use of @code{nnml} backend) or files (assuming use of
-@code{nnfolder} backend) like @file{mail.misc}.  If it is @code{nil},
+(assuming use of @code{nnml} back end) or files (assuming use of
+@code{nnfolder} back end) like @file{mail.misc}.  If it is @code{nil},
 the same group will end up in @file{mail/misc}.
 
 @item nnmail-delete-file-function
@@ -11478,9 +13431,19 @@ Function called to delete files.  It is @code{delete-file} by default.
 @item nnmail-cache-accepted-message-ids
 @vindex nnmail-cache-accepted-message-ids
 If non-@code{nil}, put the @code{Message-ID}s of articles imported into
-the backend (via @code{Gcc}, for instance) into the mail duplication
+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
 
 
@@ -11513,7 +13476,7 @@ Let's look at an example value of this variable first:
       (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
       (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
       ;; Both lists below have the same suffix, so prevent
-      ;; cross-posting to mkpkg.list of messages posted only to 
+      ;; cross-posting to mkpkg.list of messages posted only to
       ;; the bugs- list, but allow cross-posting when the
       ;; message was really cross-posted.
       (any "bugs-mypackage@@somewhere" "mypkg.bugs")
@@ -11557,7 +13520,7 @@ element is @code{&}, then process all @var{split}s in the list.
 
 @item
 @code{junk}: If the split is the symbol @code{junk}, then don't save
-this message.  Use with extreme caution.
+(i.e., delete) this message.  Use with extreme caution.
 
 @item
 @code{(: @var{function} @var{arg1} @var{arg2} @dots{})}:  If the split is
@@ -11565,6 +13528,22 @@ a list, and the first element is @code{:}, then the second element will
 be called as a function with @var{args} given as arguments.  The
 function should return a @var{split}.
 
+@cindex body split
+For instance, the following function could be used to split based on the
+body of the messages:
+
+@lisp
+(defun split-on-body ()
+  (save-excursion
+    (set-buffer " *nnmail incoming*")
+    (goto-char (point-min))
+    (when (re-search-forward "Some.*string" nil t)
+      "string.group")))
+@end lisp
+
+The @samp{" *nnmail incoming*"} is narrowed to the message in question
+when the @code{:} function is run.
+
 @item
 @code{(! @var{func} @var{split})}: If the split is a list, and the first
 element is @code{!}, then SPLIT will be processed, and FUNC will be
@@ -11609,6 +13588,55 @@ matched string will be substituted.  Similarly, the elements @samp{\\1}
 up to @samp{\\9} will be substituted with the text matched by the
 groupings 1 through 9.
 
+@findex nnmail-split-fancy-with-parent
+@code{nnmail-split-fancy-with-parent} is a function which allows you to
+split followups into the same groups their parents are in.  Sometimes
+you can't make splitting rules for all your mail.  For example, your
+boss might send you personal mail regarding different projects you are
+working on, and as you can't tell your boss to put a distinguishing
+string into the subject line, you have to resort to manually moving the
+messages into the right group.  With this function, you only have to do
+it once per thread.
+
+To use this feature, you have to set @code{nnmail-treat-duplicates} and
+@code{nnmail-cache-accepted-message-ids} to a non-nil value.  And then
+you can include @code{nnmail-split-fancy-with-parent} using the colon
+feature, like so:
+@lisp
+(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
+        ))
+@end lisp
+
+This feature works as follows: when @code{nnmail-treat-duplicates} is
+non-nil, Gnus records the message id of every message it sees in the
+file specified by the variable @code{nnmail-message-id-cache-file},
+together with the group it is in (the group is omitted for non-mail
+messages).  When mail splitting is invoked, the function
+@code{nnmail-split-fancy-with-parent} then looks at the References (and
+In-Reply-To) header of each message to split and searches the file
+specified by @code{nnmail-message-id-cache-file} for the message ids.
+When it has found a parent, it returns the corresponding group name
+unless the group name matches the regexp
+@code{nnmail-split-fancy-with-parent-ignore-groups}.  It is recommended
+that you set @code{nnmail-message-id-cache-length} to a somewhat higher
+number than the default so that the message ids are still in the cache.
+(A value of 5000 appears to create a file some 300 kBytes in size.)
+@vindex nnmail-cache-accepted-message-ids
+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
@@ -11652,9 +13680,13 @@ by defining a single @code{&} fancy split containing one split for each
 group.  If a message doesn't match any split, it will be stored in the
 group named in @code{gnus-group-split-default-catch-all-group}, unless
 some group has @var{split-spec} set to @code{catch-all}, in which case
-that group is used as the catch-all group.  Note that, in this case,
-there's no cross-posting, as a @code{|} fancy split encloses the
-@code{&} split and the catch-all group.
+that group is used as the catch-all group.  Even though this variable is
+often used just to name a group, it may also be set to an arbitrarily
+complex fancy split (after all, a group name is a fancy split), and this
+may be useful to split mail that doesn't go to any mailing list to
+personal mail folders.  Note that this fancy split is added as the last
+element of a @code{|} split list that also contains a @code{&} split
+with the rules extracted from group parameters.
 
 It's time for an example.  Assume the following group parameters have
 been defined:
@@ -11689,15 +13721,15 @@ 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
 parameters will be scanned to generate the output split.
 @var{no-crosspost} can be used to disable cross-posting; in this case, a
-single @code{|} split will be output.  @var{catch-all} may be the name
-of a group to be used as the default catch-all group.  If
-@var{catch-all} is @code{nil}, or if @var{split-regexp} matches the
+single @code{|} split will be output.  @var{catch-all} is the fallback
+fancy split, used like @var{gnus-group-split-default-catch-all-group}.
+If @var{catch-all} is @code{nil}, or if @var{split-regexp} matches the
 empty string in any selected group, no catch-all split will be issued.
 Otherwise, if some group has @var{split-spec} set to @code{catch-all},
 this group will override the value of the @var{catch-all} argument.
@@ -11706,18 +13738,18 @@ this group will override the value of the @var{catch-all} argument.
 Unfortunately, scanning all groups and their parameters can be quite
 slow, especially considering that it has to be done for every message.
 But don't despair!  The function @code{gnus-group-split-setup} can be
-used to select @code{gnus-group-split} in a much more efficient way.  It
+used to enable @code{gnus-group-split} in a much more efficient way.  It
 sets @code{nnmail-split-methods} to @code{nnmail-split-fancy} and sets
 @code{nnmail-split-fancy} to the split produced by
 @code{gnus-group-split-fancy}.  Thus, the group parameters are only
 scanned once, no matter how many messages are split.
 
 @findex gnus-group-split-update
-However, if you change group parameters, you have to update
+However, if you change group parameters, you'd have to update
 @code{nnmail-split-fancy} manually.  You can do it by running
 @code{gnus-group-split-update}.  If you'd rather have it updated
 automatically, just tell @code{gnus-group-split-setup} to do it for
-you.  For example, add to your @file{.gnus}:
+you.  For example, add to your @file{.gnus.el}:
 
 @lisp
 (gnus-group-split-setup AUTO-UPDATE CATCH-ALL)
@@ -11726,7 +13758,7 @@ you.  For example, add to your @file{.gnus}:
 If @var{auto-update} is non-@code{nil}, @code{gnus-group-split-update}
 will be added to @code{nnmail-pre-get-new-mail-hook}, so you won't ever
 have to worry about updating @code{nnmail-split-fancy} again.  If you
-don't omit @var{catch-all} (it's optional),
+don't omit @var{catch-all} (it's optional, equivalent to @code{nil}),
 @code{gnus-group-split-default-catch-all-group} will be set to its
 value.
 
@@ -11737,10 +13769,12 @@ by @code{gnus-group-split-update}, this function will run
 
 @node Incorporating Old Mail
 @subsection Incorporating Old Mail
+@cindex incorporating old mail
+@cindex import old mail
 
 Most people have lots of old mail stored in various file formats.  If
 you have set up Gnus to read mail using one of the spiffy Gnus mail
-backends, you'll probably wish to have that old mail incorporated into
+back ends, you'll probably wish to have that old mail incorporated into
 your mail groups.
 
 Doing so can be quite easy.
@@ -11758,18 +13792,18 @@ Here's how:
 Go to the group buffer.
 
 @item
-Type `G f' and give the path to the mbox file when prompted to create an
+Type @kbd{G f} and give the file name to the mbox file when prompted to create an
 @code{nndoc} group from the mbox file (@pxref{Foreign Groups}).
 
 @item
-Type `SPACE' to enter the newly created group.
+Type @kbd{SPACE} to enter the newly created group.
 
 @item
-Type `M P b' to process-mark all articles in this group's buffer
+Type @kbd{M P b} to process-mark all articles in this group's buffer
 (@pxref{Setting Process Marks}).
 
 @item
-Type `B r' to respool all the process-marked articles, and answer
+Type @kbd{B r} to respool all the process-marked articles, and answer
 @samp{nnml} when prompted (@pxref{Mail Group Commands}).
 @end enumerate
 
@@ -11780,8 +13814,8 @@ deleting the mbox file, but I wouldn't do that unless I was absolutely
 sure that all the mail has ended up where it should be.
 
 Respooling is also a handy thing to do if you're switching from one mail
-backend to another.  Just respool all the mail in the old mail groups
-using the new mail backend.
+back end to another.  Just respool all the mail in the old mail groups
+using the new mail back end.
 
 
 @node Expiring Mail
@@ -11801,26 +13835,51 @@ Gnus will not delete your old, read mail.  Unless you ask it to, of
 course.
 
 To make Gnus get rid of your unwanted mail, you have to mark the
-articles as @dfn{expirable}.  This does not mean that the articles will
-disappear right away, however.  In general, a mail article will be
+articles as @dfn{expirable}.  (With the default keybindings, this means
+that you have to type @kbd{E}.)  This does not mean that the articles
+will disappear right away, however.  In general, a mail article will be
 deleted from your system if, 1) it is marked as expirable, AND 2) it is
 more than one week old.  If you do not mark an article as expirable, it
 will remain on your system until hell freezes over.  This bears
 repeating one more time, with some spurious capitalizations: IF you do
 NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
 
+You do not have to mark articles as expirable by hand.  Gnus provides
+two features, called `auto-expire' and `total-expire', that can help you
+with this.  In a nutshell, `auto-expire' means that Gnus hits @kbd{E}
+for you when you select an article.  And `total-expire' means that Gnus
+considers all articles as expirable that are read.  So, in addition to
+the articles marked @samp{E}, also the articles marked @samp{r},
+@samp{R}, @samp{O}, @samp{K}, @samp{Y} and so on are considered
+expirable.
+
+When should either auto-expire or total-expire be used?  Most people
+who are subscribed to mailing lists split each list into its own group
+and then turn on auto-expire or total-expire for those groups.
+(@xref{Splitting Mail}, for more information on splitting each list
+into its own group.)
+
+Which one is better, auto-expire or total-expire?  It's not easy to
+answer.  Generally speaking, auto-expire is probably faster.  Another
+advantage of auto-expire is that you get more marks to work with: for
+the articles that are supposed to stick around, you can still choose
+between tick and dormant and read marks.  But with total-expire, you
+only have dormant and ticked to choose from.  The advantage of
+total-expire is that it works well with adaptive scoring @pxref{Adaptive
+Scoring}.  Auto-expire works with normal scoring but not with adaptive
+scoring.
+
 @vindex gnus-auto-expirable-newsgroups
-You do not have to mark articles as expirable by hand.  Groups that
-match the regular expression @code{gnus-auto-expirable-newsgroups} will
-have all articles that you read marked as expirable automatically.  All
-articles marked as expirable have an @samp{E} in the first
-column in the summary buffer.
+Groups that match the regular expression
+@code{gnus-auto-expirable-newsgroups} will have all articles that you
+read marked as expirable automatically.  All articles marked as
+expirable have an @samp{E} in the first column in the summary buffer.
 
 By default, if you have auto expiry switched on, Gnus will mark all the
 articles you read as expirable, no matter if they were read or unread
 before.  To avoid having articles marked as read marked as expirable
 automatically, you can put something like the following in your
-@file{.gnus} file:
+@file{.gnus.el} file:
 
 @vindex gnus-mark-article-hook
 @lisp
@@ -11832,7 +13891,7 @@ automatically, you can put something like the following in your
 Note that making a group auto-expirable doesn't mean that all read
 articles are expired---only the articles marked as expirable
 will be expired.  Also note that using the @kbd{d} command won't make
-groups expirable---only semi-automatic marking of articles as read will
+articles expirable---only semi-automatic marking of articles as read will
 mark the articles as expirable in auto-expirable groups.
 
 Let's say you subscribe to a couple of mailing lists, and you want the
@@ -11889,15 +13948,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 @code{nnmail-expiry-target}
-(and the @code{expiry-target} group parameter) controls this.  The
-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
@@ -11947,7 +14034,7 @@ laugh.
 
 Gnus provides a plethora of functions for washing articles while
 displaying them, but it might be nicer to do the filtering before
-storing the mail to disc.  For that purpose, we have three hooks and
+storing the mail to disk.  For that purpose, we have three hooks and
 various functions that can be put in these hooks.
 
 @table @code
@@ -11976,13 +14063,20 @@ 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
 beginning of all @code{Subject} headers.  I'm sure that's nice for
 people who use stone age mail readers.  This function will remove
 strings that match the @code{nnmail-list-identifiers} regexp, which can
-also be a list of regexp.
+also be a list of regexp.  @code{nnmail-list-identifiers} may not contain
+@code{\\(..\\)}.
 
 For instance, if you want to remove the @samp{(idm)} and the
 @samp{nagnagnag} identifiers:
@@ -12058,7 +14152,7 @@ methods:
 @lisp
 (setq nnmail-split-fancy
       '(| ;; Messages duplicates go to a separate group.
-          ("gnus-warning" "duplication of message" "duplicate")
+          ("gnus-warning" "duplicat\\(e\\|ion\\) of message" "duplicate")
           ;; Message from daemons, postmaster, and the like to another.
           (any mail "mail.misc")
           ;; Other rules.
@@ -12068,7 +14162,7 @@ methods:
 Or something like:
 @lisp
 (setq nnmail-split-methods
-      '(("duplicates" "^Gnus-Warning:")
+      '(("duplicates" "^Gnus-Warning:.*duplicate")
         ;; Other rules.
         [...]))
 @end lisp
@@ -12083,12 +14177,12 @@ received.  Think of all the fun!  She'll never see any of it!  Whee!
 @node Not Reading Mail
 @subsection Not Reading Mail
 
-If you start using any of the mail backends, they have the annoying
+If you start using any of the mail back ends, they have the annoying
 habit of assuming that you want to read mail with them.  This might not
 be unreasonable, but it might not be what you want.
 
 If you set @code{mail-sources} and @code{nnmail-spool-file} to
-@code{nil}, none of the backends will ever attempt to read incoming
+@code{nil}, none of the back ends will ever attempt to read incoming
 mail, which should help.
 
 @vindex nnbabyl-get-new-mail
@@ -12098,35 +14192,38 @@ mail, which should help.
 @vindex nnfolder-get-new-mail
 This might be too much, if, for instance, you are reading mail quite
 happily with @code{nnml} and just want to peek at some old @sc{rmail}
-file you have stashed away with @code{nnbabyl}.  All backends have
-variables called backend-@code{get-new-mail}.  If you want to disable
+file you have stashed away with @code{nnbabyl}.  All back ends have
+variables called back-end-@code{get-new-mail}.  If you want to disable
 the @code{nnbabyl} mail reading, you edit the virtual server for the
 group to have a setting where @code{nnbabyl-get-new-mail} to @code{nil}.
 
-All the mail backends will call @code{nn}*@code{-prepare-save-mail-hook}
+All the mail back ends will call @code{nn}*@code{-prepare-save-mail-hook}
 narrowed to the article to be saved before saving it when reading
 incoming mail.
 
 
-@node Choosing a Mail Backend
-@subsection Choosing a Mail Backend
+@node Choosing a Mail Back End
+@subsection Choosing a Mail Back End
 
 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 backends in the standard Gnus, and more
-backends are available separately.  The mail backend most people use
-(because it is the fastest and most flexible) is @code{nnml}
-(@pxref{Mail Spool}).
+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 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.
 * Rmail Babyl::                 Emacs programs use the rmail babyl format.
 * Mail Spool::                  Store your mail in a private spool?
-* MH Spool::                    An mhspool-like backend.
+* MH Spool::                    An mhspool-like back end.
 * Mail Folders::                Having one file for each group.
-* Comparing Mail Backends::     An in-depth looks at pros and cons.
+* Comparing Mail Back Ends::    An in-depth looks at pros and cons.
 @end menu
 
 
@@ -12137,7 +14234,7 @@ backends are available separately.  The mail backend most people use
 
 @vindex nnmbox-active-file
 @vindex nnmbox-mbox-file
-The @dfn{nnmbox} backend will use the standard Un*x mbox file to store
+The @dfn{nnmbox} back end will use the standard Un*x mbox file to store
 mail.  @code{nnmbox} will add extra headers to each mail article to say
 which group it belongs in.
 
@@ -12146,16 +14243,18 @@ Virtual server settings:
 @table @code
 @item nnmbox-mbox-file
 @vindex nnmbox-mbox-file
-The name of the mail box in the user's home directory.
+The name of the mail box in the user's home directory.  Default is
+@file{~/mbox}.
 
 @item nnmbox-active-file
 @vindex nnmbox-active-file
-The name of the active file for the mail box.
+The name of the active file for the mail box.  Default is
+@file{~/.mbox-active}.
 
 @item nnmbox-get-new-mail
 @vindex nnmbox-get-new-mail
 If non-@code{nil}, @code{nnmbox} will read incoming mail and split it
-into groups.
+into groups.  Default is @code{t}.
 @end table
 
 
@@ -12166,7 +14265,7 @@ into groups.
 
 @vindex nnbabyl-active-file
 @vindex nnbabyl-mbox-file
-The @dfn{nnbabyl} backend will use a babyl mail box (aka. @dfn{rmail
+The @dfn{nnbabyl} back end will use a babyl mail box (aka. @dfn{rmail
 mbox}) to store mail.  @code{nnbabyl} will add extra headers to each
 mail article to say which group it belongs in.
 
@@ -12175,15 +14274,17 @@ Virtual server settings:
 @table @code
 @item nnbabyl-mbox-file
 @vindex nnbabyl-mbox-file
-The name of the rmail mbox file.
+The name of the rmail mbox file.  The default is @file{~/RMAIL}
 
 @item nnbabyl-active-file
 @vindex nnbabyl-active-file
-The name of the active file for the rmail box.
+The name of the active file for the rmail box.  The default is
+@file{~/.rmail-active}
 
 @item nnbabyl-get-new-mail
 @vindex nnbabyl-get-new-mail
-If non-@code{nil}, @code{nnbabyl} will read incoming mail.
+If non-@code{nil}, @code{nnbabyl} will read incoming mail.  Default is
+@code{t}
 @end table
 
 
@@ -12196,7 +14297,7 @@ The @dfn{nnml} spool mail format isn't compatible with any other known
 format.  It should be used with some caution.
 
 @vindex nnml-directory
-If you use this backend, Gnus will split all incoming mail into files,
+If you use this back end, Gnus will split all incoming mail into files,
 one file for each mail, and put the articles into the corresponding
 directories under the directory specified by the @code{nnml-directory}
 variable.  The default value is @file{~/Mail/}.
@@ -12205,7 +14306,7 @@ You do not have to create any directories beforehand; Gnus will take
 care of all that.
 
 If you have a strict limit as to how many files you are allowed to store
-in your account, you should not use this backend.  As each mail gets its
+in your account, you should not use this back end.  As each mail gets its
 own file, you might very well occupy thousands of inodes within a few
 weeks.  If this is no problem for you, and it isn't a problem for you
 having your friendly systems administrator walking around, madly,
@@ -12213,10 +14314,26 @@ shouting ``Who is eating all my inodes?! Who? Who!?!'', then you should
 know that this is probably the fastest format to use.  You do not have
 to trudge through a big mbox file just to read your new mail.
 
-@code{nnml} is probably the slowest backend when it comes to article
+@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
-backend 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
+proper @code{nnml} server) and have all your marks be preserved.  Marks
+for a group is usually stored in the @code{.marks} file (but see
+@code{nnml-marks-file-name}) within each @code{nnml} group's directory.
+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:
 
@@ -12224,23 +14341,28 @@ Virtual server settings:
 @item nnml-directory
 @vindex nnml-directory
 All @code{nnml} directories will be placed under this directory.
+The default is the value of `message-directory' (whose default value is
+@file{~/Mail}).
 
 @item nnml-active-file
 @vindex nnml-active-file
-The active file for the @code{nnml} server.
+The active file for the @code{nnml} server.  The default is
+@file{~/Mail/active"}.
 
 @item nnml-newsgroups-file
 @vindex nnml-newsgroups-file
 The @code{nnml} group descriptions file.  @xref{Newsgroups File
-Format}.
+Format}.  The default is @file{~/Mail/newsgroups"}.
 
 @item nnml-get-new-mail
 @vindex nnml-get-new-mail
-If non-@code{nil}, @code{nnml} will read incoming mail.
+If non-@code{nil}, @code{nnml} will read incoming mail.  The default is
+@code{t}.
 
 @item nnml-nov-is-evil
 @vindex nnml-nov-is-evil
-If non-@code{nil}, this backend will ignore any @sc{nov} files.
+If non-@code{nil}, this back end will ignore any @sc{nov} files.  The
+default is @code{nil}.
 
 @item nnml-nov-file-name
 @vindex nnml-nov-file-name
@@ -12250,6 +14372,20 @@ The name of the @sc{nov} files.  The default is @file{.overview}.
 @vindex nnml-prepare-save-mail-hook
 Hook run narrowed to an article before saving.
 
+@item nnml-marks-is-evil
+@vindex nnml-marks-is-evil
+If non-@code{nil}, this back end will ignore any @sc{marks} files.  The
+default is @code{nil}.
+
+@item nnml-marks-file-name
+@vindex nnml-marks-file-name
+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
 
 @findex nnml-generate-nov-databases
@@ -12268,20 +14404,23 @@ Commands}).
 @cindex mh-e mail spool
 
 @code{nnmh} is just like @code{nnml}, except that is doesn't generate
-@sc{nov} databases and it doesn't keep an active file.  This makes
-@code{nnmh} a @emph{much} slower backend than @code{nnml}, but it also
-makes it easier to write procmail scripts for.
+@sc{nov} databases and it doesn't keep an active file or marks file.
+This makes @code{nnmh} a @emph{much} slower back end than @code{nnml},
+but it also makes it easier to write procmail scripts for.
 
 Virtual server settings:
 
 @table @code
 @item nnmh-directory
 @vindex nnmh-directory
-All @code{nnmh} directories will be located under this directory.
+All @code{nnmh} directories will be located under this directory.  The
+default is the value of @code{message-directory} (whose default is
+@file{~/Mail})
 
 @item nnmh-get-new-mail
 @vindex nnmh-get-new-mail
-If non-@code{nil}, @code{nnmh} will read incoming mail.
+If non-@code{nil}, @code{nnmh} will read incoming mail.  The default is
+@code{t}.
 
 @item nnmh-be-safe
 @vindex nnmh-be-safe
@@ -12290,7 +14429,7 @@ sure that the articles in the folder are actually what Gnus thinks they
 are.  It will check date stamps and stat everything in sight, so
 setting this to @code{t} will mean a serious slow-down.  If you never
 use anything but Gnus to read the @code{nnmh} articles, you do not have
-to set this variable to @code{t}.
+to set this variable to @code{t}.  The default is @code{nil}.
 @end table
 
 
@@ -12300,29 +14439,46 @@ to set this variable to @code{t}.
 @cindex mbox folders
 @cindex mail folders
 
-@code{nnfolder} is a backend for storing each mail group in a separate
+@code{nnfolder} is a back end for storing each mail group in a separate
 file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}
 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
+proper @code{nnfolder} server) and have all your marks be preserved.
+Marks for a group is usually stored in a file named as the mbox file
+with @code{.mrk} concatenated to it (but see
+@code{nnfolder-marks-file-suffix}) within the @code{nnfolder} directory.
+Individual @code{nnfolder} groups are also possible to backup, use
+@kbd{G m} to restore the group (after restoring the backup into the
+@code{nnfolder} directory).
+
 Virtual server settings:
 
 @table @code
 @item nnfolder-directory
 @vindex nnfolder-directory
 All the @code{nnfolder} mail boxes will be stored under this directory.
+The default is the value of @code{message-directory} (whose default is
+@file{~/Mail})
 
 @item nnfolder-active-file
 @vindex nnfolder-active-file
-The name of the active file.
+The name of the active file.  The default is @file{~/Mail/active}.
 
 @item nnfolder-newsgroups-file
 @vindex nnfolder-newsgroups-file
-The name of the group descriptions file.  @xref{Newsgroups File Format}.
+The name of the group descriptions file.  @xref{Newsgroups File
+Format}.  The default is @file{~/Mail/newsgroups"}
 
 @item nnfolder-get-new-mail
 @vindex nnfolder-get-new-mail
-If non-@code{nil}, @code{nnfolder} will read incoming mail.
+If non-@code{nil}, @code{nnfolder} will read incoming mail.  The default
+is @code{t}
 
 @item nnfolder-save-buffer-hook
 @vindex nnfolder-save-buffer-hook
@@ -12345,6 +14501,34 @@ Hook run in a buffer narrowed to the message that is to be deleted.
 This function can be used to copy the message to somewhere else, or to
 extract some information from it before removing it.
 
+@item nnfolder-nov-is-evil
+@vindex nnfolder-nov-is-evil
+If non-@code{nil}, this back end will ignore any @sc{nov} files.  The
+default is @code{nil}.
+
+@item nnfolder-nov-file-suffix
+@vindex nnfolder-nov-file-suffix
+The extension for @sc{nov} files.  The default is @file{.nov}.
+
+@item nnfolder-nov-directory
+@vindex nnfolder-nov-directory
+The directory where the @sc{nov} files should be stored.  If nil,
+@code{nnfolder-directory} is used.
+
+@item nnfolder-marks-is-evil
+@vindex nnfolder-marks-is-evil
+If non-@code{nil}, this back end will ignore any @sc{marks} files.  The
+default is @code{nil}.
+
+@item nnfolder-marks-file-suffix
+@vindex nnfolder-marks-file-suffix
+The extension for @sc{marks} files.  The default is @file{.mrk}.
+
+@item nnfolder-marks-directory
+@vindex nnfolder-marks-directory
+The directory where the @sc{marks} files should be stored.  If nil,
+@code{nnfolder-directory} is used.
+
 @end table
 
 
@@ -12356,13 +14540,13 @@ command to make @code{nnfolder} aware of all likely files in
 @code{nnfolder-directory}.  This only works if you use long file names,
 though.
 
-@node Comparing Mail Backends
-@subsubsection Comparing Mail Backends
+@node Comparing Mail Back Ends
+@subsubsection Comparing Mail Back Ends
 
-First, just for terminology, the @dfn{backend} is the common word for a
+First, just for terminology, the @dfn{back end} is the common word for a
 low-level access method---a transport, if you will, by which something
 is acquired.  The sense is that one's mail has to come from somewhere,
-and so selection of a suitable backend is required in order to get that
+and so selection of a suitable back end is required in order to get that
 mail within spitting distance of Gnus.
 
 The same concept exists for Usenet itself: Though access to articles is
@@ -12371,11 +14555,11 @@ in the world got at Usenet by running a reader on the machine where the
 articles lay (the machine which today we call an @sc{nntp} server), and
 access was by the reader stepping into the articles' directory spool
 area directly.  One can still select between either the @code{nntp} or
-@code{nnspool} backends, to select between these methods, if one happens
+@code{nnspool} back ends, to select between these methods, if one happens
 actually to live on the server (or can see its spool directly, anyway,
 via NFS).
 
-The goal in selecting a mail backend is to pick one which
+The goal in selecting a mail back end is to pick one which
 simultaneously represents a suitable way of dealing with the original
 format plus leaving mail in a form that is convenient to use in the
 future.  Here are some high and low points on each:
@@ -12391,7 +14575,7 @@ to make it clear in this instance that this is not the RFC-specified
 @samp{From:} header.)  Because Emacs and therefore Gnus emanate
 historically from the Unix environment, it is simplest if one does not
 mess a great deal with the original mailbox format, so if one chooses
-this backend, Gnus' primary activity in getting mail from the real spool
+this back end, Gnus' primary activity in getting mail from the real spool
 area to Gnus' preferred directory is simply to copy it, with no
 (appreciable) format change in the process.  It is the ``dumbest'' way
 to move mail into availability in the Gnus environment.  This makes it
@@ -12416,12 +14600,12 @@ headers/status bits stuff.  RMAIL itself still exists as well, of
 course, and is still maintained by Stallman.
 
 Both of the above forms leave your mail in a single file on your
-filesystem, and they must parse that entire file each time you take a
+file system, and they must parse that entire file each time you take a
 look at your mail.
 
 @item nnml
 
-@code{nnml} is the backend which smells the most as though you were
+@code{nnml} is the back end which smells the most as though you were
 actually operating with an @code{nnspool}-accessed Usenet system.  (In
 fact, I believe @code{nnml} actually derived from @code{nnspool} code,
 lo these years ago.)  One's mail is taken from the original spool file,
@@ -12437,13 +14621,13 @@ extremely fast on access because of what amounts to the indexing support
 provided by the active file and overviews.
 
 @code{nnml} costs @dfn{inodes} in a big way; that is, it soaks up the
-resource which defines available places in the filesystem to put new
+resource which defines available places in the file system to put new
 files.  Sysadmins take a dim view of heavy inode occupation within
-tight, shared filesystems.  But if you live on a personal machine where
-the filesystem is your own and space is not at a premium, @code{nnml}
+tight, shared file systems.  But if you live on a personal machine where
+the file system is your own and space is not at a premium, @code{nnml}
 wins big.
 
-It is also problematic using this backend if you are living in a
+It is also problematic using this back end if you are living in a
 FAT16-based Windows world, since much space will be wasted on all these
 tiny files.
 
@@ -12465,14 +14649,70 @@ itself puts *all* one's mail in one file; @code{nnfolder} provides a
 little bit of optimization to this so that each of one's mail groups has
 a Unix mail box file.  It's faster than @code{nnmbox} because each group
 can be parsed separately, and still provides the simple Unix mail box
-format requiring minimal effort in moving the mail around.  In addition, 
-it maintains an ``active'' file making it much faster for Gnus to figure 
+format requiring minimal effort in moving the mail around.  In addition,
+it maintains an ``active'' file making it much faster for Gnus to figure
 out how many messages there are in each separate group.
 
 If you have groups that are expected to have a massive amount of
 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 backend all over.
+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
+file system.
+
+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 back ends.
+
+@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 something 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 back ends.  Everything in between is likely to be faster,
+depending in part on your file system.
+
+@code{nnmaildir} does not use @code{nnoo}, so you cannot use @code{nnoo}
+to write an @code{nnmaildir}-derived back end.
 
 @end table
 
@@ -12492,32 +14732,34 @@ and click, and there's the discussion.  With mailing lists, you have to
 go through a cumbersome subscription procedure, and most people don't
 even know what a news group is.
 
-The problem with this scenario is that web browsers are not very good at 
-being newsreaders.  They do not keep track of what articles you've read; 
-they do not allow you to score on subjects you're interested in; they do 
+The problem with this scenario is that web browsers are not very good at
+being newsreaders.  They do not keep track of what articles you've read;
+they do not allow you to score on subjects you're interested in; they do
 not allow off-line browsing; they require you to click around and drive
 you mad in the end.
 
-So---if web browsers suck at reading discussion forums, why not use Gnus 
+So---if web browsers suck at reading discussion forums, why not use Gnus
 to do it instead?
 
-Gnus has been getting a bit of a collection of backends for providing
+Gnus has been getting a bit of a collection of back ends for providing
 interfaces to these sources.
 
 @menu
-* Web Searches::          Creating groups from articles that match a string.
-* Slashdot::              Reading the Slashdot comments.
-* Ultimate::              The Ultimate Bulletin Board systems.
-* Web Archive::           Reading mailing list archived on web.
-* Customizing w3::        Doing stuff to Emacs/w3 from Gnus.
+* Archiving Mail::              
+* Web Searches::                Creating groups from articles that match a string.
+* Slashdot::                    Reading the Slashdot comments.
+* Ultimate::                    The Ultimate Bulletin Board systems.
+* Web Archive::                 Reading mailing list archived on web.
+* RSS::                         Reading RDF site summary.
+* Customizing w3::              Doing stuff to Emacs/w3 from Gnus.
 @end menu
 
 All the web sources require Emacs/w3 and the url library to work.
 
 The main caveat with all these web sources is that they probably won't
-work for a very long time.  Gleaning information from the @sc{html} data 
-is guesswork at best, and when the layout is altered, the Gnus backend
-will fail.  If you have reasonably new versions of these backends,
+work for a very long time.  Gleaning information from the @sc{html} data
+is guesswork at best, and when the layout is altered, the Gnus back end
+will fail.  If you have reasonably new versions of these back ends,
 though, you should be ok.
 
 One thing all these Web methods have in common is that the Web sources
@@ -12526,13 +14768,45 @@ cases, it makes a lot of sense to let the Gnus Agent (@pxref{Gnus
 Unplugged}) handle downloading articles, and then you can read them at
 leisure from your local disk.  No more World Wide Wait for you.
 
+@node Archiving Mail
+@subsection Archiving Mail
+@cindex archiving mail
+@cindex backup of mail
+
+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 @file{.newsrc.eld} deity
+though.)
+
+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 interfere 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
 
@@ -12542,7 +14816,7 @@ those, like, Web browsers, and you, like, have to, rilly, like, look at
 the commercials, so, like, with Gnus you can do @emph{rad}, rilly,
 searches without having to use a browser.
 
-The @code{nnweb} backend allows an easy interface to the mighty search
+The @code{nnweb} back end allows an easy interface to the mighty search
 engine.  You create an @code{nnweb} group, enter a search pattern, and
 then enter the group and read the articles like you would any normal
 group.  The @kbd{G w} command in the group buffer (@pxref{Foreign
@@ -12555,7 +14829,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.
@@ -12576,8 +14850,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
@@ -12586,7 +14860,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
@@ -12621,7 +14895,7 @@ Format string URL to fetch an article by @code{Message-ID}.
 @cindex Slashdot
 @cindex nnslashdot
 
-Slashdot (@file{http://slashdot.org/}) is a popular news site, with
+Slashdot (@uref{http://slashdot.org/}) is a popular news site, with
 lively discussion following the news articles.  @code{nnslashdot} will
 let you read this forum in a convenient manner.
 
@@ -12633,7 +14907,7 @@ following in your @file{.gnus.el} file:
       '((nnslashdot "")))
 @end lisp
 
-This will make Gnus query the @code{nnslashdot} backend for new comments
+This will make Gnus query the @code{nnslashdot} back end for new comments
 and groups.  The @kbd{F} command will subscribe each new news article as
 a new Gnus group, and you can read the comments by entering these
 groups.  (Note that the default subscription method is to subscribe new
@@ -12660,7 +14934,7 @@ default is @code{t}.  To be able to display threads, @code{nnslashdot}
 has to retrieve absolutely all comments in a group upon entry.  If a
 threaded display is not required, @code{nnslashdot} will only retrieve
 the comments that are actually wanted by the user.  Threading is nicer,
-but much, much slower than untreaded.
+but much, much slower than unthreaded.
 
 @item nnslashdot-login-name
 @vindex nnslashdot-login-name
@@ -12672,12 +14946,12 @@ The password to use when posting.
 
 @item nnslashdot-directory
 @vindex nnslashdot-directory
-Where @code{nnslashdot} will store its files.  The default value is
+Where @code{nnslashdot} will store its files.  The default is
 @samp{~/News/slashdot/}.
 
 @item nnslashdot-active-url
 @vindex nnslashdot-active-url
-The @sc{url} format string that will be used to fetch the information on 
+The @sc{url} format string that will be used to fetch the information on
 news articles and comments.  The default is
 @samp{http://slashdot.org/search.pl?section=&min=%d}.
 
@@ -12711,13 +14985,13 @@ updated.  The default is 0.
 @cindex nnultimate
 @cindex Ultimate Bulletin Board
 
-The Ultimate Bulletin Board (@file{http://www.ultimatebb.com/}) is
+The Ultimate Bulletin Board (@uref{http://www.ultimatebb.com/}) is
 probably the most popular Web bulletin board system used.  It has a
 quite regular and nice interface, and it's possible to get the
 information Gnus needs to keep groups updated.
 
 The easiest way to get started with @code{nnultimate} is to say
-something like the following in the group buffer:  @kbd{B nnultimate RET 
+something like the following in the group buffer:  @kbd{B nnultimate RET
 http://www.tcj.com/messboard/ubbcgi/ RET}.  (Substitute the @sc{url}
 (not including @samp{Ultimate.cgi} or the like at the end) for a forum
 you're interested in; there's quite a list of them on the Ultimate web
@@ -12740,8 +15014,8 @@ The directory where @code{nnultimate} stores its files.  The default is
 @cindex Web Archive
 
 Some mailing lists only have archives on Web servers, such as
-@file{http://www.egroups.com/} and
-@file{http://www.mail-archive.com/}.  It has a quite regular and nice
+@uref{http://www.egroups.com/} and
+@uref{http://www.mail-archive.com/}.  It has a quite regular and nice
 interface, and it's possible to get the information Gnus needs to keep
 groups updated.
 
@@ -12751,7 +15025,7 @@ gnus-group-make-warchive-group RET an_egroup RET egroups RET
 www.egroups.com RET your@@email.address RET}.  (Substitute the
 @sc{an_egroup} with the mailing list you subscribed, the
 @sc{your@@email.address} with your email address.), or to browse the
-backend by @kbd{B nnwarchive RET mail-archive RET}.
+back end by @kbd{B nnwarchive RET mail-archive RET}.
 
 The following @code{nnwarchive} variables can be altered:
 
@@ -12770,6 +15044,66 @@ The account name on the web server.
 The password for your account on the web server.
 @end table
 
+@node RSS
+@subsection RSS
+@cindex nnrss
+@cindex RSS
+
+Some sites have RDF site summary (RSS)
+@uref{http://purl.org/rss/1.0/spec}.  It has a quite regular and nice
+interface, and it's possible to get the information Gnus needs to keep
+groups updated.
+
+The easiest way to get started with @code{nnrss} is to say something
+like the following in the group buffer: @kbd{B nnrss RET RET}, then
+subscribe groups.
+
+The following @code{nnrss} variables can be altered:
+
+@table @code
+@item nnrss-directory
+@vindex nnrss-directory
+The directory where @code{nnrss} stores its files.  The default is
+@samp{~/News/rss/}.
+
+@end table
+
+The following code may be helpful, if you want to show the description in
+the summary buffer.
+
+@lisp
+(add-to-list 'nnmail-extra-headers nnrss-description-field)
+(setq gnus-summary-line-format "%U%R%z%I%(%[%4L: %-15,15f%]%) %s%uX\n")
+
+(defun gnus-user-format-function-X (header)
+  (let ((descr
+         (assq nnrss-description-field (mail-header-extra header))))
+    (if descr (concat "\n\t" (cdr descr)) "")))
+@end lisp
+
+The following code may be useful to open an nnrss url directly from the
+summary buffer.
+@lisp
+(require 'browse-url)
+
+(defun browse-nnrss-url( arg )
+  (interactive "p")
+  (let ((url (assq nnrss-url-field
+                   (mail-header-extra
+                    (gnus-data-header
+                     (assq (gnus-summary-article-number)
+                           gnus-newsgroup-data))))))
+    (if url
+        (progn
+          (browse-url (cdr url))
+          (gnus-summary-mark-as-read-forward 1))
+      (gnus-summary-scroll-up arg))))
+
+(eval-after-load "gnus"
+  #'(define-key gnus-summary-mode-map
+      (kbd "<RET>") 'browse-nnrss-url))
+(add-to-list 'nnmail-extra-headers nnrss-url-field)
+@end lisp
 
 @node Customizing w3
 @subsection Customizing w3
@@ -12778,12 +15112,12 @@ The password for your account on the web server.
 @cindex url
 @cindex Netscape
 
-Gnus uses the url library to fetch web pages and Emacs/w3 to display web 
+Gnus uses the url library to fetch web pages and Emacs/w3 to display web
 pages.  Emacs/w3 is documented in its own manual, but there are some
 things that may be more relevant for Gnus users.
 
 For instance, a common question is how to make Emacs/w3 follow links
-using the @code{browse-url} functions (which will call some external web 
+using the @code{browse-url} functions (which will call some external web
 browser like Netscape).  Here's one way:
 
 @lisp
@@ -12802,1035 +15136,1298 @@ Put that in your @file{.emacs} file, and hitting links in w3-rendered
 follow the link.
 
 
-@node Other Sources
-@section Other Sources
+@node IMAP
+@section IMAP
+@cindex nnimap
+@cindex @sc{imap}
 
-Gnus can do more than just read news or mail.  The methods described
-below allow Gnus to view directories and files as if they were
-newsgroups.
+@sc{imap} is a network protocol for reading mail (or news, or ...),
+think of it as a modernized @sc{nntp}.  Connecting to a @sc{imap}
+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 a POP++.  Secondly, @sc{imap} is a
+mail storage protocol, similar to @sc{nntp} being a news storage
+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 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 @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 the following. (Note that for SSL/TLS, you
+need external programs and libraries, see below.)
 
-@menu
-* Directory Groups::      You can read a directory as if it was a newsgroup.
-* Anything Groups::       Dired?  Who needs dired?
-* Document Groups::       Single files can be the basis of a group.
-* SOUP::                  Reading @sc{soup} packets ``offline''.
-* Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
-* IMAP::                  Using Gnus as a @sc{imap} client.
-@end menu
+@lisp
+(setq gnus-secondary-select-methods
+      '((nnimap "simpleserver") ; no special configuration
+        ; perhaps a ssh port forwarded server:
+        (nnimap "dolk"
+                (nnimap-address "localhost")
+                (nnimap-server-port 1430))
+        ; a UW server running on localhost
+        (nnimap "barbar"
+                (nnimap-server-port 143)
+                (nnimap-address "localhost")
+                (nnimap-list-pattern ("INBOX" "mail/*")))
+        ; anonymous public cyrus server:
+        (nnimap "cyrus.andrew.cmu.edu"
+                (nnimap-authenticator anonymous)
+                (nnimap-list-pattern "archive.*")
+                (nnimap-stream network))
+        ; a ssl server on a non-standard port:
+        (nnimap "vic20"
+                (nnimap-address "vic20.somewhere.com")
+                (nnimap-server-port 9930)
+                (nnimap-stream ssl))))
+@end lisp
 
+The following variables can be used to create a virtual @code{nnimap}
+server:
 
-@node Directory Groups
-@subsection Directory Groups
-@cindex nndir
-@cindex directory groups
+@table @code
 
-If you have a directory that has lots of articles in separate files in
-it, you might treat it as a newsgroup.  The files have to have numerical
-names, of course.
+@item nnimap-address
+@vindex nnimap-address
 
-This might be an opportune moment to mention @code{ange-ftp} (and its
-successor @code{efs}), that most wonderful of all wonderful Emacs
-packages.  When I wrote @code{nndir}, I didn't think much about it---a
-backend to read directories.  Big deal.
+The address of the remote @sc{imap} server.  Defaults to the virtual
+server name if not specified.
 
-@code{ange-ftp} changes that picture dramatically.  For instance, if you
-enter the @code{ange-ftp} file name
-@file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the directory name,
-@code{ange-ftp} or @code{efs} will actually allow you to read this
-directory over at @samp{sina} as a newsgroup.  Distributed news ahoy!
+@item nnimap-server-port
+@vindex nnimap-server-port
+Port on server to contact.  Defaults to port 143, or 993 for SSL.
 
-@code{nndir} will use @sc{nov} files if they are present.
+Note that this should be an integer, example server specification:
 
-@code{nndir} is a ``read-only'' backend---you can't delete or expire
-articles with this method.  You can use @code{nnmh} or @code{nnml} for
-whatever you use @code{nndir} for, so you could switch to any of those
-methods if you feel the need to have a non-read-only @code{nndir}.
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-server-port 4711))
+@end lisp
 
+@item nnimap-list-pattern
+@vindex nnimap-list-pattern
+String or list of strings of mailboxes to limit available groups to.
+This is used when the server has very many mailboxes and you're only
+interested in a few -- some servers export your home directory via
+@sc{imap}, you'll probably want to limit the mailboxes to those in
+@file{~/Mail/*} then.
 
-@node Anything Groups
-@subsection Anything Groups
-@cindex nneething
+The string can also be a cons of REFERENCE and the string as above, what
+REFERENCE is used for is server specific, but on the University of
+Washington server it's a directory that will be concatenated with the
+mailbox.
 
-From the @code{nndir} backend (which reads a single spool-like
-directory), it's just a hop and a skip to @code{nneething}, which
-pretends that any arbitrary directory is a newsgroup.  Strange, but
-true.
+Example server specification:
 
-When @code{nneething} is presented with a directory, it will scan this
-directory and assign article numbers to each file.  When you enter such
-a group, @code{nneething} must create ``headers'' that Gnus can use.
-After all, Gnus is a newsreader, in case you're forgetting.
-@code{nneething} does this in a two-step process.  First, it snoops each
-file in question.  If the file looks like an article (i.e., the first
-few lines look like headers), it will use this as the head.  If this is
-just some arbitrary file without a head (e.g. a C source file),
-@code{nneething} will cobble up a header out of thin air.  It will use
-file ownership, name and date and do whatever it can with these
-elements.
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*"
+                               ("~friend/Mail/" . "list/*"))))
+@end lisp
 
-All this should happen automatically for you, and you will be presented
-with something that looks very much like a newsgroup.  Totally like a
-newsgroup, to be precise.  If you select an article, it will be displayed
-in the article buffer, just as usual.
+@item nnimap-stream
+@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/TLS. (@sc{imap} over SSL/TLS is being replaced by STARTTLS, which
+can be automatically detected, but it's not widely deployed yet.)
 
-If you select a line that represents a directory, Gnus will pop you into
-a new summary buffer for this @code{nneething} group.  And so on.  You can
-traverse the entire disk this way, if you feel like, but remember that
-Gnus is not dired, really, and does not intend to be, either.
+Example server specification:
 
-There are two overall modes to this action---ephemeral or solid.  When
-doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
-will not store information on what files you have read, and what files
-are new, and so on.  If you create a solid @code{nneething} group the
-normal way with @kbd{G m}, Gnus will store a mapping table between
-article numbers and file names, and you can treat this group like any
-other groups.  When you activate a solid @code{nneething} group, you will
-be told how many unread articles it contains, etc., etc.
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-stream ssl))
+@end lisp
 
-Some variables:
+Please note that the value of @code{nnimap-stream} is a symbol!
 
-@table @code
-@item nneething-map-file-directory
-@vindex nneething-map-file-directory
-All the mapping files for solid @code{nneething} groups will be stored
-in this directory, which defaults to @file{~/.nneething/}.
+@itemize @bullet
+@item
+@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.
+@item
+@dfn{starttls:} Connect via the STARTTLS extension (similar to
+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}) as well as the external
+library @samp{ssl.el}.
+@item
+@dfn{shell:} Use a shell command to start @sc{imap} connection.
+@item
+@dfn{network:} Plain, TCP/IP network connection.
+@end itemize
 
-@item nneething-exclude-files
-@vindex nneething-exclude-files
-All files that match this regexp will be ignored.  Nice to use to exclude
-auto-save files and the like, which is what it does by default.
+@vindex imap-kerberos4-program
+The @samp{imtest} program is shipped with Cyrus IMAPD.  If you're
+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 @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.
+
+@vindex imap-ssl-program
+For SSL connections, the OpenSSL program is available from
+@uref{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,
+and nnimap support it too - although 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.  You also need @samp{ssl.el} (from the W3
+distribution, for instance).
+
+@vindex imap-shell-program
+@vindex imap-shell-host
+For @sc{imap} connections using the @code{shell} stream, the variable
+@code{imap-shell-program} specify what program to call.
 
-@item nneething-include-files
-@vindex nneething-include-files
-Regexp saying what files to include in the group.  If this variable is
-non-@code{nil}, only files matching this regexp will be included.
+@item nnimap-authenticator
+@vindex nnimap-authenticator
 
-@item nneething-map-file
-@vindex nneething-map-file
-Name of the map files.
-@end table
+The authenticator used to connect to the server.  By default, nnimap
+will use the most secure authenticator your server is capable of.
 
+Example server specification:
 
-@node Document Groups
-@subsection Document Groups
-@cindex nndoc
-@cindex documentation group
-@cindex help group
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-authenticator anonymous))
+@end lisp
 
-@code{nndoc} is a cute little thing that will let you read a single file
-as a newsgroup.  Several files types are supported:
+Please note that the value of @code{nnimap-authenticator} is a symbol!
 
-@table @code
-@cindex babyl
-@cindex rmail mbox
+@itemize @bullet
+@item
+@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Requires
+external program @code{imtest}.
+@item
+@dfn{kerberos4:} Kerberos 4 authentication. Requires external program
+@code{imtest}.
+@item
+@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.
+@item
+@dfn{login:} Plain-text username/password via LOGIN.
+@item
+@dfn{anonymous:} Login as `anonymous', supplying your email address as password.
+@end itemize
 
-@item babyl
-The babyl (rmail) mail box.
-@cindex mbox
-@cindex Unix mbox
+@item nnimap-expunge-on-close
+@cindex Expunging
+@vindex nnimap-expunge-on-close
+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{B DEL} or
+similar).
 
-@item mbox
-The standard Unix mbox file.
+Since the articles aren't really removed when we mark them with the
+@code{Deleted} flag we'll need a way to actually delete them.  Feel like
+running in circles yet?
 
-@cindex MMDF mail box
-@item mmdf
-The MMDF mail box format.
+Traditionally, nnimap has removed all articles marked as @code{Deleted}
+when closing a mailbox but this is now configurable by this server
+variable.
 
-@item news
-Several news articles appended into a file.
+The possible options are:
 
-@item rnews
-@cindex rnews batch files
-The rnews batch transport format.
-@cindex forwarded messages
+@table @code
 
-@item forward
-Forwarded articles.
+@item always
+The default behavior, delete all articles marked as "Deleted" when
+closing a mailbox.
+@item never
+Never actually delete articles.  Currently there is no way of showing
+the articles marked for deletion in nnimap, but other @sc{imap} clients
+may allow you to do this.  If you ever want to run the EXPUNGE command
+manually, @xref{Expunging mailboxes}.
+@item ask
+When closing mailboxes, nnimap will ask if you wish to expunge deleted
+articles or not.
 
-@item nsmail
-Netscape mail boxes.
+@end table
 
-@item mime-parts
-MIME multipart messages.
+@item nnimap-importantize-dormant
+@vindex nnimap-importantize-dormant
 
-@item standard-digest
-The standard (RFC 1153) digest format.
+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.)
 
-@item slack-digest
-Non-standard digest format---matches most things, but does it badly.
-@end table
+Probably the only reason for frobing this would be if you're trying
+enable per-user persistant dormant flags, using something like:
 
-You can also use the special ``file type'' @code{guess}, which means
-that @code{nndoc} will try to guess what file type it is looking at.
-@code{digest} means that @code{nndoc} should guess what digest type the
-file is.
+@lisp
+(setcdr (assq 'dormant nnimap-mark-to-flag-alist)
+        (format "gnus-dormant-%s" (user-login-name)))
+(setcdr (assq 'dormant nnimap-mark-to-predicate-alist)
+        (format "KEYWORD gnus-dormant-%s" (user-login-name)))
+@end lisp
 
-@code{nndoc} will not try to change the file or insert any extra headers into
-it---it will simply, like, let you use the file as the basis for a
-group.  And that's it.
+In this case, you would not want the per-user dormant flag showing up
+as ticked for other users.
 
-If you have some old archived articles that you want to insert into your
-new & spiffy Gnus mail backend, @code{nndoc} can probably help you with
-that.  Say you have an old @file{RMAIL} file with mail that you now want
-to split into your new @code{nnml} groups.  You look at that file using
-@code{nndoc} (using the @kbd{G f} command in the group buffer
-(@pxref{Foreign Groups})), set the process mark on all the articles in
-the buffer (@kbd{M P b}, for instance), and then re-spool (@kbd{B r})
-using @code{nnml}.  If all goes well, all the mail in the @file{RMAIL}
-file is now also stored in lots of @code{nnml} directories, and you can
-delete that pesky @file{RMAIL} file.  If you have the guts!
+@item nnimap-expunge-search-string
+@cindex Expunging
+@vindex nnimap-expunge-search-string
 
-Virtual server variables:
+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.
 
-@table @code
-@item nndoc-article-type
-@vindex nndoc-article-type
-This should be one of @code{mbox}, @code{babyl}, @code{digest},
-@code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
-@code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
-@code{slack-digest}, @code{clari-briefs}, @code{nsmail} or @code{guess}.
+Probably the only useful value to change this to is
+@code{"UID %s NOT SENTSINCE %s"}, which makes nnimap use the Date: in
+messages instead of the internal article date. See section 6.4.4 of
+RFC 2060 for more information on valid strings.
+
+@item nnimap-authinfo-file
+@vindex nnimap-authinfo-file
+
+A file containing credentials used to log in on servers.  The format is
+(almost) the same as the @code{ftp} @file{~/.netrc} file.  See the
+variable @code{nntp-authinfo-file} for exact syntax; also see
+@ref{NNTP}.
 
-@item nndoc-post-type
-@vindex nndoc-post-type
-This variable says whether Gnus is to consider the group a news group or
-a mail group.  There are two valid values:  @code{mail} (the default)
-and @code{news}.
 @end table
 
 @menu
-* Document Server Internals::   How to add your own document types.
+* Splitting in IMAP::           Splitting mail with nnimap.
+* Expiring in IMAP::            Expiring mail with nnimap.
+* Editing IMAP ACLs::           Limiting/enabling other users access to a mailbox.
+* Expunging mailboxes::         Equivalent of a "compress mailbox" button.
+* A note on namespaces::        How to (not) use IMAP namespace in Gnus.
 @end menu
 
 
-@node Document Server Internals
-@subsubsection Document Server Internals
 
-Adding new document types to be recognized by @code{nndoc} isn't
-difficult.  You just have to whip up a definition of what the document
-looks like, write a predicate function to recognize that document type,
-and then hook into @code{nndoc}.
+@node Splitting in IMAP
+@subsection Splitting in IMAP
+@cindex splitting imap mail
 
-First, here's an example document type definition:
+Splitting is something Gnus users has loved and used for years, and now
+the rest of the world is catching up.  Yeah, dream on, not many
+@sc{imap} server has server side splitting and those that have splitting
+seem to use some non-standard protocol.  This means that @sc{imap}
+support for Gnus has to do it's own splitting.
 
-@example
-(mmdf
- (article-begin .  "^\^A\^A\^A\^A\n")
- (body-end .  "^\^A\^A\^A\^A\n"))
-@end example
+And it does.
 
-The definition is simply a unique @dfn{name} followed by a series of
-regexp pseudo-variable settings.  Below are the possible
-variables---don't be daunted by the number of variables; most document
-types can be defined with very few settings:
+Here are the variables of interest:
 
 @table @code
-@item first-article
-If present, @code{nndoc} will skip past all text until it finds
-something that match this regexp.  All text before this will be
-totally ignored.
 
-@item article-begin
-This setting has to be present in all document type definitions.  It
-says what the beginning of each article looks like.
+@item nnimap-split-crosspost
+@cindex splitting, crosspost
+@cindex crosspost
+@vindex nnimap-split-crosspost
 
-@item head-begin-function
-If present, this should be a function that moves point to the head of
-the article.
+If non-nil, do crossposting if several split methods match the mail.  If
+nil, the first match in @code{nnimap-split-rule} found will be used.
 
-@item nndoc-head-begin
-If present, this should be a regexp that matches the head of the
-article.
+Nnmail equivalent: @code{nnmail-crosspost}.
 
-@item nndoc-head-end
-This should match the end of the head of the article.  It defaults to
-@samp{^$}---the empty line.
+@item nnimap-split-inbox
+@cindex splitting, inbox
+@cindex inbox
+@vindex nnimap-split-inbox
 
-@item body-begin-function
-If present, this function should move point to the beginning of the body
-of the article.
+A string or a list of strings that gives the name(s) of @sc{imap}
+mailboxes to split from.  Defaults to nil, which means that splitting is
+disabled!
 
-@item body-begin
-This should match the beginning of the body of the article.  It defaults
-to @samp{^\n}.
+@lisp
+(setq nnimap-split-inbox
+      '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
+@end lisp
 
-@item body-end-function
-If present, this function should move point to the end of the body of
-the article.
+No nnmail equivalent.
 
-@item body-end
-If present, this should match the end of the body of the article.
+@item nnimap-split-rule
+@cindex Splitting, rules
+@vindex nnimap-split-rule
 
-@item file-end
-If present, this should match the end of the file.  All text after this
-regexp will be totally ignored.
+New mail found in @code{nnimap-split-inbox} will be split according to
+this variable.
 
-@end table
+This variable contains a list of lists, where the first element in the
+sublist gives the name of the @sc{imap} mailbox to move articles
+matching the regexp in the second element in the sublist.  Got that?
+Neither did I, we need examples.
 
-So, using these variables @code{nndoc} is able to dissect a document
-file into a series of articles, each with a head and a body.  However, a
-few more variables are needed since not all document types are all that
-news-like---variables needed to transform the head or the body into
-something that's palatable for Gnus:
+@lisp
+(setq nnimap-split-rule
+      '(("INBOX.nnimap"
+         "^Sender: owner-nnimap@@vic20.globalcom.se")
+        ("INBOX.junk"    "^Subject:.*MAKE MONEY")
+        ("INBOX.private" "")))
+@end lisp
 
-@table @code
-@item prepare-body-function
-If present, this function will be called when requesting an article.  It
-will be called with point at the start of the body, and is useful if the
-document has encoded some parts of its contents.
+This will put all articles from the nnimap mailing list into mailbox
+INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
+into INBOX.junk and everything else in INBOX.private.
 
-@item article-transform-function
-If present, this function is called when requesting an article.  It's
-meant to be used for more wide-ranging transformation of both head and
-body of the article.
+The first string may contain `\\1' forms, like the ones used by
+replace-match to insert sub-expressions from the matched text.  For
+instance:
 
-@item generate-head-function
-If present, this function is called to generate a head that Gnus can
-understand.  It is called with the article number as a parameter, and is
-expected to generate a nice head for the article in question.  It is
-called when requesting the headers of all articles.
+@lisp
+("INBOX.lists.\\1"     "^Sender: owner-\\([a-z-]+\\)@@")
+@end lisp
 
-@end table
+The first element can also be the symbol @code{junk} to indicate that
+matching messages should simply be deleted.  Use with care.
 
-Let's look at the most complicated example I can come up with---standard
-digests:
+The second element can also be a function.  In that case, it will be
+called with the first element of the rule as the argument, in a buffer
+containing the headers of the article.  It should return a non-nil value
+if it thinks that the mail belongs in that group.
 
-@example
-(standard-digest
- (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
- (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
- (prepare-body-function . nndoc-unquote-dashes)
- (body-end-function . nndoc-digest-body-end)
- (head-end . "^ ?$")
- (body-begin . "^ ?\n")
- (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
- (subtype digest guess))
-@end example
+Nnmail users might recollect that the last regexp had to be empty to
+match all articles (like in the example above).  This is not required in
+nnimap.  Articles not matching any of the regexps will not be moved out
+of your inbox.  (This might affect performance if you keep lots of
+unread articles in your inbox, since the splitting code would go over
+them every time you fetch new mail.)
 
-We see that all text before a 70-width line of dashes is ignored; all
-text after a line that starts with that @samp{^End of} is also ignored;
-each article begins with a 30-width line of dashes; the line separating
-the head from the body may contain a single space; and that the body is
-run through @code{nndoc-unquote-dashes} before being delivered.
+These rules are processed from the beginning of the alist toward the
+end.  The first rule to make a match will "win", unless you have
+crossposting enabled.  In that case, all matching rules will "win".
 
-To hook your own document definition into @code{nndoc}, use the
-@code{nndoc-add-type} function.  It takes two parameters---the first is
-the definition itself and the second (optional) parameter says where in
-the document type definition alist to put this definition.  The alist is
-traversed sequentially, and @code{nndoc-TYPE-type-p} is called for a given type @code{TYPE}.  So @code{nndoc-mmdf-type-p} is called to see whether a document
-is of @code{mmdf} type, and so on.  These type predicates should return
-@code{nil} if the document is not of the correct type; @code{t} if it is
-of the correct type; and a number if the document might be of the
-correct type.  A high number means high probability; a low number means
-low probability with @samp{0} being the lowest valid number.
+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 needs to.
 
-@node SOUP
-@subsection SOUP
-@cindex SOUP
-@cindex offline
+To allow for different split rules on different virtual servers, and
+even different split rules in different inboxes on the same server,
+the syntax of this variable have been extended along the lines of:
 
-In the PC world people often talk about ``offline'' newsreaders.  These
-are thingies that are combined reader/news transport monstrosities.
-With built-in modem programs.  Yecchh!
+@lisp
+(setq nnimap-split-rule
+      '(("my1server"    (".*"    (("ding"    "ding@@gnus.org")
+                                  ("junk"    "From:.*Simon")))
+        ("my2server"    ("INBOX" nnimap-split-fancy))
+        ("my[34]server" (".*"    (("private" "To:.*Simon")
+                                  ("junk"    my-junk-func)))))
+@end lisp
 
-Of course, us Unix Weenie types of human beans use things like
-@code{uucp} and, like, @code{nntpd} and set up proper news and mail
-transport things like Ghod intended.  And then we just use normal
-newsreaders.
+The virtual server name is in fact a regexp, so that the same rules
+may apply to several servers.  In the example, the servers
+@code{my3server} and @code{my4server} both use the same rules.
+Similarly, the inbox string is also a regexp.  The actual splitting
+rules are as before, either a function, or a list with group/regexp or
+group/function elements.
 
-However, it can sometimes be convenient to do something that's a bit
-easier on the brain if you have a very slow modem, and you're not really
-that interested in doing things properly.
+Nnmail equivalent: @code{nnmail-split-methods}.
 
-A file format called @sc{soup} has been developed for transporting news
-and mail from servers to home machines and back again.  It can be a bit
-fiddly.
+@item nnimap-split-predicate
+@cindex splitting
+@vindex nnimap-split-predicate
 
-First some terminology:
+Mail matching this predicate in @code{nnimap-split-inbox} will be
+split, it is a string and the default is @samp{UNSEEN UNDELETED}.
 
-@table @dfn
+This might be useful if you use another @sc{imap} client to read mail in
+your inbox but would like Gnus to split all articles in the inbox
+regardless of readedness. Then you might change this to
+@samp{UNDELETED}.
 
-@item server
-This is the machine that is connected to the outside world and where you
-get news and/or mail from.
+@item nnimap-split-fancy
+@cindex splitting, fancy
+@findex nnimap-split-fancy
+@vindex nnimap-split-fancy
 
-@item home machine
-This is the machine that you want to do the actual reading and responding
-on.  It is typically not connected to the rest of the world in any way.
+It's possible to set @code{nnimap-split-rule} to
+@code{nnmail-split-fancy} if you want to use fancy
+splitting. @xref{Fancy Mail Splitting}.
 
-@item packet
-Something that contains messages and/or commands.  There are two kinds
-of packets:
+However, to be able to have different fancy split rules for nnmail and
+nnimap back ends you can set @code{nnimap-split-rule} to
+@code{nnimap-split-fancy} and define the nnimap specific fancy split
+rule in @code{nnimap-split-fancy}.
 
-@table @dfn
-@item message packets
-These are packets made at the server, and typically contain lots of
-messages for you to read.  These are called @file{SoupoutX.tgz} by
-default, where @var{x} is a number.
+Example:
 
-@item response packets
-These are packets made at the home machine, and typically contains
-replies that you've written.  These are called @file{SoupinX.tgz} by
-default, where @var{x} is a number.
+@lisp
+(setq nnimap-split-rule 'nnimap-split-fancy
+      nnimap-split-fancy ...)
+@end lisp
 
-@end table
+Nnmail equivalent: @code{nnmail-split-fancy}.
+
+@item nnimap-split-download-body
+@findex nnimap-split-download-body
+@vindex nnimap-split-download-body
+
+Set to non-nil to download entire articles during splitting.  This is
+generally not required, and will slow things down considerably.  You
+may need it if you want to use an advanced splitting function that
+analyses the body to split the article.
 
 @end table
 
+@node Expiring in IMAP
+@subsection Expiring in IMAP
+@cindex expiring imap mail
+
+Even though @sc{nnimap} is not a proper @sc{nnmail} derived back end,
+it supports most features in regular expiring (@pxref{Expiring Mail}).
+Unlike splitting in IMAP (@pxref{Splitting in IMAP}) it do not clone
+the @sc{nnmail} variables (i.e., creating @var{nnimap-expiry-wait})
+but reuse the @sc{nnmail} variables.  What follows below are the
+variables used by the @sc{nnimap} expiry process.
+
+A note on how the expire mark is stored on the @sc{imap} server is
+appropriate here as well.  The expire mark is translated into a
+@sc{imap} client specific mark, @code{gnus-expire}, and stored on the
+message.  This means that likely only Gnus will understand and treat
+the @code{gnus-expire} mark properly, although other clients may allow
+you to view client specific flags on the message.  It also means that
+your server must support permanent storage of client specific flags on
+messages.  Most do, fortunately.
 
-@enumerate
+@table @code
 
-@item
-You log in on the server and create a @sc{soup} packet.  You can either
-use a dedicated @sc{soup} thingie (like the @code{awk} program), or you
-can use Gnus to create the packet with its @sc{soup} commands (@kbd{O
-s} and/or @kbd{G s b}; and then @kbd{G s p}) (@pxref{SOUP Commands}).
+@item nnmail-expiry-wait
+@item nnmail-expiry-wait-function
 
-@item
-You transfer the packet home.  Rail, boat, car or modem will do fine.
+These variables are fully supported.  The expire value can be a
+number, the symbol @var{immediate} or @var{never}.
 
-@item
-You put the packet in your home directory.
+@item nnmail-expiry-target
 
-@item
-You fire up Gnus on your home machine using the @code{nnsoup} backend as
-the native or secondary server.
+This variable is supported, and internally implemented by calling the
+@sc{nnmail} functions that handle this.  It contains an optimization
+that if the destination is a IMAP group on the same server, the
+article is copied instead of appended (that is, uploaded again).
 
-@item
-You read articles and mail and answer and followup to the things you
-want (@pxref{SOUP Replies}).
+@end table
 
-@item
-You do the @kbd{G s r} command to pack these replies into a @sc{soup}
-packet.
+@node Editing IMAP ACLs
+@subsection Editing IMAP ACLs
+@cindex editing imap acls
+@cindex Access Control Lists
+@cindex Editing @sc{imap} ACLs
+@kindex G l
+@findex gnus-group-nnimap-edit-acl
 
-@item
-You transfer this packet to the server.
+ACL stands for Access Control List.  ACLs are used in @sc{imap} for
+limiting (or enabling) other users access to your mail boxes.  Not all
+@sc{imap} servers support this, this function will give an error if it
+doesn't.
 
-@item
-You use Gnus to mail this packet out with the @kbd{G s s} command.
+To edit a ACL for a mailbox, type @kbd{G l}
+(@code{gnus-group-edit-nnimap-acl}) and you'll be presented with a ACL
+editing window with detailed instructions.
+
+Some possible uses:
 
+@itemize @bullet
 @item
-You then repeat until you die.
+Giving "anyone" the "lrs" rights (lookup, read, keep seen/unseen flags)
+on your mailing list mailboxes enables other users on the same server to
+follow the list without subscribing to it.
+@item
+At least with the Cyrus server, you are required to give the user
+"anyone" posting ("p") capabilities to have "plussing" work (that is,
+mail sent to user+mailbox@@domain ending up in the @sc{imap} mailbox
+INBOX.mailbox).
+@end itemize
 
-@end enumerate
+@node Expunging mailboxes
+@subsection Expunging mailboxes
+@cindex expunging
 
-So you basically have a bipartite system---you use @code{nnsoup} for
-reading and Gnus for packing/sending these @sc{soup} packets.
+@cindex Expunge
+@cindex Manual expunging
+@kindex G x
+@findex gnus-group-nnimap-expunge
 
-@menu
-* SOUP Commands::     Commands for creating and sending @sc{soup} packets
-* SOUP Groups::       A backend for reading @sc{soup} packets.
-* SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.
-@end menu
+If you're using the @code{never} setting of @code{nnimap-expunge-on-close},
+you may want the option of expunging all deleted articles in a mailbox
+manually.  This is exactly what @kbd{G x} does.
 
+Currently there is no way of showing deleted articles, you can just
+delete them.
 
-@node SOUP Commands
-@subsubsection SOUP Commands
+@node A note on namespaces
+@subsection A note on namespaces
+@cindex IMAP namespace
+@cindex namespaces
 
-These are commands for creating and manipulating @sc{soup} packets.
+The IMAP protocol has a concept called namespaces, described by the
+following text in the RFC:
 
-@table @kbd
-@item G s b
-@kindex G s b (Group)
-@findex gnus-group-brew-soup
-Pack all unread articles in the current group
-(@code{gnus-group-brew-soup}).  This command understands the
-process/prefix convention.
+@example
+5.1.2.  Mailbox Namespace Naming Convention
+
+   By convention, the first hierarchical element of any mailbox name
+   which begins with "#" identifies the "namespace" of the remainder of
+   the name.  This makes it possible to disambiguate between different
+   types of mailbox stores, each of which have their own namespaces.
+
+      For example, implementations which offer access to USENET
+      newsgroups MAY use the "#news" namespace to partition the USENET
+      newsgroup namespace from that of other mailboxes.  Thus, the
+      comp.mail.misc newsgroup would have an mailbox name of
+      "#news.comp.mail.misc", and the name "comp.mail.misc" could refer
+      to a different object (e.g. a user's private mailbox).
+@end example
 
-@item G s w
-@kindex G s w (Group)
-@findex gnus-soup-save-areas
-Save all @sc{soup} data files (@code{gnus-soup-save-areas}).
+While there is nothing in this text that warrants concern for the IMAP
+implementation in Gnus, some servers use namespace prefixes in a way
+that does not work with how Gnus uses mailbox names.
 
-@item G s s
-@kindex G s s (Group)
-@findex gnus-soup-send-replies
-Send all replies from the replies packet
-(@code{gnus-soup-send-replies}).
+Specifically, University of Washington's IMAP server uses mailbox
+names like @code{#driver.mbx/read-mail} which are valid only in the
+@sc{create} and @sc{append} commands.  After the mailbox is created
+(or a messages is appended to a mailbox), it must be accessed without
+the namespace prefix, i.e @code{read-mail}.  Since Gnus do not make it
+possible for the user to guarantee that user entered mailbox names
+will only be used with the CREATE and APPEND commands, you should
+simply not use the namespace prefixed mailbox names in Gnus.
 
-@item G s p
-@kindex G s p (Group)
-@findex gnus-soup-pack-packet
-Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}).
+See the UoW @sc{imapd} documentation for the @code{#driver.*/} prefix
+for more information on how to use the prefixes.  They are a power
+tool and should be used only if you are sure what the effects are.
 
-@item G s r
-@kindex G s r (Group)
-@findex nnsoup-pack-replies
-Pack all replies into a replies packet (@code{nnsoup-pack-replies}).
+@node Other Sources
+@section Other Sources
 
-@item O s
-@kindex O s (Summary)
-@findex gnus-soup-add-article
-This summary-mode command adds the current article to a @sc{soup} packet
-(@code{gnus-soup-add-article}).  It understands the process/prefix
-convention (@pxref{Process/Prefix}).
+Gnus can do more than just read news or mail.  The methods described
+below allow Gnus to view directories and files as if they were
+newsgroups.
 
-@end table
+@menu
+* Directory Groups::            You can read a directory as if it was a newsgroup.
+* Anything Groups::             Dired?  Who needs dired?
+* Document Groups::             Single files can be the basis of a group.
+* SOUP::                        Reading @sc{soup} packets ``offline''.
+* Mail-To-News Gateways::       Posting articles via mail-to-news gateways.
+@end menu
 
 
-There are a few variables to customize where Gnus will put all these
-thingies:
+@node Directory Groups
+@subsection Directory Groups
+@cindex nndir
+@cindex directory groups
 
-@table @code
+If you have a directory that has lots of articles in separate files in
+it, you might treat it as a newsgroup.  The files have to have numerical
+names, of course.
 
-@item gnus-soup-directory
-@vindex gnus-soup-directory
-Directory where Gnus will save intermediate files while composing
-@sc{soup} packets.  The default is @file{~/SoupBrew/}.
+This might be an opportune moment to mention @code{ange-ftp} (and its
+successor @code{efs}), that most wonderful of all wonderful Emacs
+packages.  When I wrote @code{nndir}, I didn't think much about it---a
+back end to read directories.  Big deal.
 
-@item gnus-soup-replies-directory
-@vindex gnus-soup-replies-directory
-This is what Gnus will use as a temporary directory while sending our
-reply packets.  @file{~/SoupBrew/SoupReplies/} is the default.
+@code{ange-ftp} changes that picture dramatically.  For instance, if you
+enter the @code{ange-ftp} file name
+@file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the directory name,
+@code{ange-ftp} or @code{efs} will actually allow you to read this
+directory over at @samp{sina} as a newsgroup.  Distributed news ahoy!
 
-@item gnus-soup-prefix-file
-@vindex gnus-soup-prefix-file
-Name of the file where Gnus stores the last used prefix.  The default is
-@samp{gnus-prefix}.
+@code{nndir} will use @sc{nov} files if they are present.
 
-@item gnus-soup-packer
-@vindex gnus-soup-packer
-A format string command for packing a @sc{soup} packet.  The default is
-@samp{tar cf - %s | gzip > $HOME/Soupout%d.tgz}.
+@code{nndir} is a ``read-only'' back end---you can't delete or expire
+articles with this method.  You can use @code{nnmh} or @code{nnml} for
+whatever you use @code{nndir} for, so you could switch to any of those
+methods if you feel the need to have a non-read-only @code{nndir}.
 
-@item gnus-soup-unpacker
-@vindex gnus-soup-unpacker
-Format string command for unpacking a @sc{soup} packet.  The default is
-@samp{gunzip -c %s | tar xvf -}.
 
-@item gnus-soup-packet-directory
-@vindex gnus-soup-packet-directory
-Where Gnus will look for reply packets.  The default is @file{~/}.
+@node Anything Groups
+@subsection Anything Groups
+@cindex nneething
 
-@item gnus-soup-packet-regexp
-@vindex gnus-soup-packet-regexp
-Regular expression matching @sc{soup} reply packets in
-@code{gnus-soup-packet-directory}.
+From the @code{nndir} back end (which reads a single spool-like
+directory), it's just a hop and a skip to @code{nneething}, which
+pretends that any arbitrary directory is a newsgroup.  Strange, but
+true.
 
-@end table
+When @code{nneething} is presented with a directory, it will scan this
+directory and assign article numbers to each file.  When you enter such
+a group, @code{nneething} must create ``headers'' that Gnus can use.
+After all, Gnus is a newsreader, in case you're forgetting.
+@code{nneething} does this in a two-step process.  First, it snoops each
+file in question.  If the file looks like an article (i.e., the first
+few lines look like headers), it will use this as the head.  If this is
+just some arbitrary file without a head (e.g. a C source file),
+@code{nneething} will cobble up a header out of thin air.  It will use
+file ownership, name and date and do whatever it can with these
+elements.
 
+All this should happen automatically for you, and you will be presented
+with something that looks very much like a newsgroup.  Totally like a
+newsgroup, to be precise.  If you select an article, it will be displayed
+in the article buffer, just as usual.
 
-@node SOUP Groups
-@subsubsection @sc{soup} Groups
-@cindex nnsoup
+If you select a line that represents a directory, Gnus will pop you into
+a new summary buffer for this @code{nneething} group.  And so on.  You can
+traverse the entire disk this way, if you feel like, but remember that
+Gnus is not dired, really, and does not intend to be, either.
 
-@code{nnsoup} is the backend for reading @sc{soup} packets.  It will
-read incoming packets, unpack them, and put them in a directory where
-you can read them at leisure.
+There are two overall modes to this action---ephemeral or solid.  When
+doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
+will not store information on what files you have read, and what files
+are new, and so on.  If you create a solid @code{nneething} group the
+normal way with @kbd{G m}, Gnus will store a mapping table between
+article numbers and file names, and you can treat this group like any
+other groups.  When you activate a solid @code{nneething} group, you will
+be told how many unread articles it contains, etc., etc.
 
-These are the variables you can use to customize its behavior:
+Some variables:
 
 @table @code
+@item nneething-map-file-directory
+@vindex nneething-map-file-directory
+All the mapping files for solid @code{nneething} groups will be stored
+in this directory, which defaults to @file{~/.nneething/}.
 
-@item nnsoup-tmp-directory
-@vindex nnsoup-tmp-directory
-When @code{nnsoup} unpacks a @sc{soup} packet, it does it in this
-directory.  (@file{/tmp/} by default.)
+@item nneething-exclude-files
+@vindex nneething-exclude-files
+All files that match this regexp will be ignored.  Nice to use to exclude
+auto-save files and the like, which is what it does by default.
 
-@item nnsoup-directory
-@vindex nnsoup-directory
-@code{nnsoup} then moves each message and index file to this directory.
-The default is @file{~/SOUP/}.
+@item nneething-include-files
+@vindex nneething-include-files
+Regexp saying what files to include in the group.  If this variable is
+non-@code{nil}, only files matching this regexp will be included.
 
-@item nnsoup-replies-directory
-@vindex nnsoup-replies-directory
-All replies will be stored in this directory before being packed into a
-reply packet.  The default is @file{~/SOUP/replies/"}.
+@item nneething-map-file
+@vindex nneething-map-file
+Name of the map files.
+@end table
 
-@item nnsoup-replies-format-type
-@vindex nnsoup-replies-format-type
-The @sc{soup} format of the replies packets.  The default is @samp{?n}
-(rnews), and I don't think you should touch that variable.  I probably
-shouldn't even have documented it.  Drats!  Too late!
 
-@item nnsoup-replies-index-type
-@vindex nnsoup-replies-index-type
-The index type of the replies packet.  The default is @samp{?n}, which
-means ``none''.  Don't fiddle with this one either!
+@node Document Groups
+@subsection Document Groups
+@cindex nndoc
+@cindex documentation group
+@cindex help group
 
-@item nnsoup-active-file
-@vindex nnsoup-active-file
-Where @code{nnsoup} stores lots of information.  This is not an ``active
-file'' in the @code{nntp} sense; it's an Emacs Lisp file.  If you lose
-this file or mess it up in any way, you're dead.  The default is
-@file{~/SOUP/active}.
+@code{nndoc} is a cute little thing that will let you read a single file
+as a newsgroup.  Several files types are supported:
 
-@item nnsoup-packer
-@vindex nnsoup-packer
-Format string command for packing a reply @sc{soup} packet.  The default
-is @samp{tar cf - %s | gzip > $HOME/Soupin%d.tgz}.
+@table @code
+@cindex babyl
+@cindex rmail mbox
 
-@item nnsoup-unpacker
-@vindex nnsoup-unpacker
-Format string command for unpacking incoming @sc{soup} packets.  The
-default is @samp{gunzip -c %s | tar xvf -}.
+@item babyl
+The babyl (rmail) mail box.
+@cindex mbox
+@cindex Unix mbox
 
-@item nnsoup-packet-directory
-@vindex nnsoup-packet-directory
-Where @code{nnsoup} will look for incoming packets.  The default is
-@file{~/}.
+@item mbox
+The standard Unix mbox file.
 
-@item nnsoup-packet-regexp
-@vindex nnsoup-packet-regexp
-Regular expression matching incoming @sc{soup} packets.  The default is
-@samp{Soupout}.
+@cindex MMDF mail box
+@item mmdf
+The MMDF mail box format.
 
-@item nnsoup-always-save
-@vindex nnsoup-always-save
-If non-@code{nil}, save the replies buffer after each posted message.
+@item news
+Several news articles appended into a file.
 
-@end table
+@item rnews
+@cindex rnews batch files
+The rnews batch transport format.
+@cindex forwarded messages
 
+@item forward
+Forwarded articles.
 
-@node SOUP Replies
-@subsubsection SOUP Replies
+@item nsmail
+Netscape mail boxes.
 
-Just using @code{nnsoup} won't mean that your postings and mailings end
-up in @sc{soup} reply packets automagically.  You have to work a bit
-more for that to happen.
+@item mime-parts
+@sc{mime} multipart messages.
 
-@findex nnsoup-set-variables
-The @code{nnsoup-set-variables} command will set the appropriate
-variables to ensure that all your followups and replies end up in the
-@sc{soup} system.
+@item standard-digest
+The standard (RFC 1153) digest format.
 
-In specific, this is what it does:
+@item mime-digest
+A @sc{mime} digest of messages.
 
-@lisp
-(setq message-send-news-function 'nnsoup-request-post)
-(setq message-send-mail-function 'nnsoup-request-mail)
-@end lisp
+@item lanl-gov-announce
+Announcement messages from LANL Gov Announce.
 
-And that's it, really.  If you only want news to go into the @sc{soup}
-system you just use the first line.  If you only want mail to be
-@sc{soup}ed you use the second.
+@item rfc822-forward
+A message forwarded according to RFC822.
 
+@item outlook
+The Outlook mail box.
 
-@node Mail-To-News Gateways
-@subsection Mail-To-News Gateways
-@cindex mail-to-news gateways
-@cindex gateways
+@item oe-dbx
+The Outlook Express dbx mail box.
 
-If your local @code{nntp} server doesn't allow posting, for some reason
-or other, you can post using one of the numerous mail-to-news gateways.
-The @code{nngateway} backend provides the interface.
+@item exim-bounce
+A bounce message from the Exim MTA.
 
-Note that you can't read anything from this backend---it can only be
-used to post with.
+@item forward
+A message forwarded according to informal rules.
 
-Server variables:
+@item rfc934
+An RFC934-forwarded message.
 
-@table @code
-@item nngateway-address
-@vindex nngateway-address
-This is the address of the mail-to-news gateway.
+@item mailman
+A mailman digest.
 
-@item nngateway-header-transformation
-@vindex nngateway-header-transformation
-News headers often have to be transformed in some odd way or other
-for the mail-to-news gateway to accept it.  This variable says what
-transformation should be called, and defaults to
-@code{nngateway-simple-header-transformation}.  The function is called
-narrowed to the headers to be transformed and with one parameter---the
-gateway address.
+@item clari-briefs
+A digest of Clarinet brief news items.
 
-This default function just inserts a new @code{To} header based on the
-@code{Newsgroups} header and the gateway address.
-For instance, an article with this @code{Newsgroups} header:
+@item slack-digest
+Non-standard digest format---matches most things, but does it badly.
 
-@example
-Newsgroups: alt.religion.emacs
-@end example
+@item mail-in-mail
+The last resort.
+@end table
 
-will get this @code{From} header inserted:
+You can also use the special ``file type'' @code{guess}, which means
+that @code{nndoc} will try to guess what file type it is looking at.
+@code{digest} means that @code{nndoc} should guess what digest type the
+file is.
 
-@example
-To: alt-religion-emacs@@GATEWAY
-@end example
+@code{nndoc} will not try to change the file or insert any extra headers into
+it---it will simply, like, let you use the file as the basis for a
+group.  And that's it.
 
-The following pre-defined functions exist:
-
-@findex nngateway-simple-header-transformation
-@table @code
+If you have some old archived articles that you want to insert into your
+new & spiffy Gnus mail back end, @code{nndoc} can probably help you with
+that.  Say you have an old @file{RMAIL} file with mail that you now want
+to split into your new @code{nnml} groups.  You look at that file using
+@code{nndoc} (using the @kbd{G f} command in the group buffer
+(@pxref{Foreign Groups})), set the process mark on all the articles in
+the buffer (@kbd{M P b}, for instance), and then re-spool (@kbd{B r})
+using @code{nnml}.  If all goes well, all the mail in the @file{RMAIL}
+file is now also stored in lots of @code{nnml} directories, and you can
+delete that pesky @file{RMAIL} file.  If you have the guts!
 
-@item nngateway-simple-header-transformation
-Creates a @code{To} header that looks like
-@var{newsgroup}@@@code{nngateway-address}.
+Virtual server variables:
 
-@findex nngateway-mail2news-header-transformation
+@table @code
+@item nndoc-article-type
+@vindex nndoc-article-type
+This should be one of @code{mbox}, @code{babyl}, @code{digest},
+@code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
+@code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
+@code{slack-digest}, @code{clari-briefs}, @code{nsmail}, @code{outlook},
+@code{oe-dbx}, @code{mailman}, and @code{mail-in-mail} or @code{guess}.
 
-@item nngateway-mail2news-header-transformation
-Creates a @code{To} header that looks like
-@code{nngateway-address}.
+@item nndoc-post-type
+@vindex nndoc-post-type
+This variable says whether Gnus is to consider the group a news group or
+a mail group.  There are two valid values:  @code{mail} (the default)
+and @code{news}.
+@end table
 
-Here's an example:
+@menu
+* Document Server Internals::   How to add your own document types.
+@end menu
 
-@lisp
-(setq gnus-post-method
-      '(nngateway "mail2news@@replay.com"
-                  (nngateway-header-transformation
-                   nngateway-mail2news-header-transformation)))
-@end lisp
 
-@end table
+@node Document Server Internals
+@subsubsection Document Server Internals
 
+Adding new document types to be recognized by @code{nndoc} isn't
+difficult.  You just have to whip up a definition of what the document
+looks like, write a predicate function to recognize that document type,
+and then hook into @code{nndoc}.
 
-@end table
+First, here's an example document type definition:
 
-So, to use this, simply say something like:
+@example
+(mmdf
+ (article-begin .  "^\^A\^A\^A\^A\n")
+ (body-end .  "^\^A\^A\^A\^A\n"))
+@end example
 
-@lisp
-(setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
-@end lisp
+The definition is simply a unique @dfn{name} followed by a series of
+regexp pseudo-variable settings.  Below are the possible
+variables---don't be daunted by the number of variables; most document
+types can be defined with very few settings:
 
+@table @code
+@item first-article
+If present, @code{nndoc} will skip past all text until it finds
+something that match this regexp.  All text before this will be
+totally ignored.
 
+@item article-begin
+This setting has to be present in all document type definitions.  It
+says what the beginning of each article looks like.
 
-@node IMAP
-@subsection @sc{imap}
-@cindex nnimap
-@cindex @sc{imap}
+@item head-begin-function
+If present, this should be a function that moves point to the head of
+the article.
 
-@sc{imap} is a network protocol for reading mail (or news, or ...),
-think of it as a modernized @sc{nntp}.  Connecting to a @sc{imap} server
-is much similar to connecting to a news server, you just specify the
-network address of the server.
+@item nndoc-head-begin
+If present, this should be a regexp that matches the head of the
+article.
 
-The following variables can be used to create a virtual @code{nnimap}
-server:
+@item nndoc-head-end
+This should match the end of the head of the article.  It defaults to
+@samp{^$}---the empty line.
 
-@table @code
+@item body-begin-function
+If present, this function should move point to the beginning of the body
+of the article.
 
-@item nnimap-address
-@vindex nnimap-address
+@item body-begin
+This should match the beginning of the body of the article.  It defaults
+to @samp{^\n}.
 
-The address of the remote @sc{imap} server.  Defaults to the virtual
-server name if not specified.
+@item body-end-function
+If present, this function should move point to the end of the body of
+the article.
 
-@item nnimap-server-port
-@vindex nnimap-server-port
-Port on server to contact.  Defaults to port 143, or 993 for SSL.
+@item body-end
+If present, this should match the end of the body of the article.
 
-@item nnimap-list-pattern
-@vindex nnimap-list-pattern
-String or list of strings of mailboxes to limit available groups to.
-This is used when the server has very many mailboxes and you're only
-interested in a few -- some servers export your home directory via
-@sc{imap}, you'll probably want to limit the mailboxes to those in
-@file{~/Mail/*} then.
+@item file-end
+If present, this should match the end of the file.  All text after this
+regexp will be totally ignored.
 
-The string can also be a cons of REFERENCE and the string as above, what
-REFERENCE is used for is server specific, but on the University of
-Washington server it's a directory that will be concatenated with the
-mailbox.
+@end table
 
-Example:
+So, using these variables @code{nndoc} is able to dissect a document
+file into a series of articles, each with a head and a body.  However, a
+few more variables are needed since not all document types are all that
+news-like---variables needed to transform the head or the body into
+something that's palatable for Gnus:
 
-@lisp
-("INBOX" "Mail/*" "alt.sex.*" ("~friend/Mail/" . "list/*"))
-@end lisp
+@table @code
+@item prepare-body-function
+If present, this function will be called when requesting an article.  It
+will be called with point at the start of the body, and is useful if the
+document has encoded some parts of its contents.
 
-@item nnimap-stream
-@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).
+@item article-transform-function
+If present, this function is called when requesting an article.  It's
+meant to be used for more wide-ranging transformation of both head and
+body of the article.
 
-@itemize @bullet
-@item
-@dfn{gssapi:} Connect with GSSAPI (usually kerberos 5). Require the
-@samp{imtest} program.
-@item
-@dfn{kerberos4:} Connect with kerberos 4. Require the @samp{imtest} program.
-@item
-@dfn{starttls:} Connect via the STARTTLS extension (similar to
-SSL). Require the external library @samp{starttls.el} and program
-@samp{starttls}.
-@item
-@dfn{ssl:} Connect through SSL. Require OpenSSL (the
-program @samp{openssl}) or SSLeay (@samp{s_client}).
-@item
-@dfn{network:} Plain, TCP/IP network connection.
-@end itemize
+@item generate-head-function
+If present, this function is called to generate a head that Gnus can
+understand.  It is called with the article number as a parameter, and is
+expected to generate a nice head for the article in question.  It is
+called when requesting the headers of all articles.
 
-The @samp{imtest} program is shipped with Cyrus IMAPD, nnimap support
-both @samp{imtest} version 1.5.x and version 1.6.x.
+@end table
 
-For SSL connections, the OpenSSL program is available from
-@file{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,
-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.
+Let's look at the most complicated example I can come up with---standard
+digests:
 
-@item nnimap-authenticator
-@vindex nnimap-authenticator
+@example
+(standard-digest
+ (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
+ (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
+ (prepare-body-function . nndoc-unquote-dashes)
+ (body-end-function . nndoc-digest-body-end)
+ (head-end . "^ ?$")
+ (body-begin . "^ ?\n")
+ (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
+ (subtype digest guess))
+@end example
 
-The authenticator used to connect to the server.  By default, nnimap
-will use the most secure authenticator your server is capable of.
+We see that all text before a 70-width line of dashes is ignored; all
+text after a line that starts with that @samp{^End of} is also ignored;
+each article begins with a 30-width line of dashes; the line separating
+the head from the body may contain a single space; and that the body is
+run through @code{nndoc-unquote-dashes} before being delivered.
 
-@itemize @bullet
-@item
-@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Require
-external program @code{imtest}.
-@item
-@dfn{kerberos4:} Kerberos authentication. Require external program
-@code{imtest}.
-@item
-@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Require
-external library @code{digest-md5.el}.
-@item
-@dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
-@item
-@dfn{login:} Plain-text username/password via LOGIN.
-@item
-@dfn{anonymous:} Login as `anonymous', supplying your emailadress as password.
-@end itemize
+To hook your own document definition into @code{nndoc}, use the
+@code{nndoc-add-type} function.  It takes two parameters---the first is
+the definition itself and the second (optional) parameter says where in
+the document type definition alist to put this definition.  The alist is
+traversed sequentially, and @code{nndoc-TYPE-type-p} is called for a given type @code{TYPE}.  So @code{nndoc-mmdf-type-p} is called to see whether a document
+is of @code{mmdf} type, and so on.  These type predicates should return
+@code{nil} if the document is not of the correct type; @code{t} if it is
+of the correct type; and a number if the document might be of the
+correct type.  A high number means high probability; a low number means
+low probability with @samp{0} being the lowest valid number.
 
-@item nnimap-expunge-on-close
-@cindex Expunging
-@vindex nnimap-expunge-on-close
-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
-similair).
 
-Since the articles aren't really removed when we mark them with the
-@code{Deleted} flag we'll need a way to actually delete them.  Feel like
-running in circles yet?
+@node SOUP
+@subsection SOUP
+@cindex SOUP
+@cindex offline
 
-Traditionally, nnimap has removed all articles marked as @code{Deleted}
-when closing a mailbox but this is now configurable by this server
-variable.
+In the PC world people often talk about ``offline'' newsreaders.  These
+are thingies that are combined reader/news transport monstrosities.
+With built-in modem programs.  Yecchh!
 
-The possible options are:
+Of course, us Unix Weenie types of human beans use things like
+@code{uucp} and, like, @code{nntpd} and set up proper news and mail
+transport things like Ghod intended.  And then we just use normal
+newsreaders.
 
-@table @code
+However, it can sometimes be convenient to do something that's a bit
+easier on the brain if you have a very slow modem, and you're not really
+that interested in doing things properly.
 
-@item always
-The default behaviour, delete all articles marked as "Deleted" when
-closing a mailbox.
-@item never
-Never actually delete articles.  Currently there is no way of showing
-the articles marked for deletion in nnimap, but other @sc{imap} clients
-may allow you to do this.  If you ever want to run the EXPUNGE command
-manually, @xref{Expunging mailboxes}.
-@item ask
-When closing mailboxes, nnimap will ask if you wish to expunge deleted
-articles or not.
-@end table
+A file format called @sc{soup} has been developed for transporting news
+and mail from servers to home machines and back again.  It can be a bit
+fiddly.
 
-@end table
+First some terminology:
 
-@menu
-* Splitting in IMAP::     Splitting mail with nnimap.
-* Editing IMAP ACLs::     Limiting/enabling other users access to a mailbox.
-* Expunging mailboxes::   Equivalent of a "compress mailbox" button.
-@end menu
+@table @dfn
 
+@item server
+This is the machine that is connected to the outside world and where you
+get news and/or mail from.
 
+@item home machine
+This is the machine that you want to do the actual reading and responding
+on.  It is typically not connected to the rest of the world in any way.
 
-@node Splitting in IMAP
-@subsubsection Splitting in @sc{imap}
-@cindex splitting imap mail
+@item packet
+Something that contains messages and/or commands.  There are two kinds
+of packets:
 
-Splitting is something Gnus users has loved and used for years, and now
-the rest of the world is catching up.  Yeah, dream on, not many
-@sc{imap} server has server side splitting and those that have splitting
-seem to use some non-standard protocol.  This means that @sc{imap}
-support for Gnus has to do it's own splitting.
+@table @dfn
+@item message packets
+These are packets made at the server, and typically contain lots of
+messages for you to read.  These are called @file{SoupoutX.tgz} by
+default, where @var{x} is a number.
 
-And it does.
+@item response packets
+These are packets made at the home machine, and typically contains
+replies that you've written.  These are called @file{SoupinX.tgz} by
+default, where @var{x} is a number.
 
-Here are the variables of interest:
+@end table
 
-@table @code
+@end table
 
-@item nnimap-split-crosspost
-@cindex splitting, crosspost
-@cindex crosspost
-@vindex nnimap-split-crosspost
 
-If non-nil, do crossposting if several split methods match the mail.  If
-nil, the first match in @code{nnimap-split-rule} found will be used.
+@enumerate
 
-Nnmail equivalent: @code{nnmail-crosspost}.
+@item
+You log in on the server and create a @sc{soup} packet.  You can either
+use a dedicated @sc{soup} thingie (like the @code{awk} program), or you
+can use Gnus to create the packet with its @sc{soup} commands (@kbd{O
+s} and/or @kbd{G s b}; and then @kbd{G s p}) (@pxref{SOUP Commands}).
 
-@item nnimap-split-inbox
-@cindex splitting, inbox
-@cindex inbox
-@vindex nnimap-split-inbox
+@item
+You transfer the packet home.  Rail, boat, car or modem will do fine.
 
-A string or a list of strings that gives the name(s) of @sc{imap}
-mailboxes to split from.  Defaults to nil, which means that splitting is
-disabled!
+@item
+You put the packet in your home directory.
 
-@lisp
-(setq nnimap-split-inbox '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
-@end lisp
+@item
+You fire up Gnus on your home machine using the @code{nnsoup} back end as
+the native or secondary server.
 
-No nnmail equivalent.
+@item
+You read articles and mail and answer and followup to the things you
+want (@pxref{SOUP Replies}).
 
-@item nnimap-split-rule
-@cindex Splitting, rules
-@vindex nnimap-split-rule
+@item
+You do the @kbd{G s r} command to pack these replies into a @sc{soup}
+packet.
 
-New mail found in @code{nnimap-split-inbox} will be split according to
-this variable.
+@item
+You transfer this packet to the server.
 
-This variable contains a list of lists, where the first element in the
-sublist gives the name of the @sc{imap} mailbox to move articles
-matching the regexp in the second element in the sublist.  Got that?
-Neither did I, we need examples.
+@item
+You use Gnus to mail this packet out with the @kbd{G s s} command.
 
-@lisp
-(setq nnimap-split-rule
-        '(("INBOX.nnimap"        "^Sender: owner-nnimap@@vic20.globalcom.se")
-          ("INBOX.junk"          "^Subject:.*MAKE MONEY")
-          ("INBOX.private"       "")))
-@end lisp
+@item
+You then repeat until you die.
 
-This will put all articles from the nnimap mailing list into mailbox
-INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
-into INBOX.spam and everything else in INBOX.private.
+@end enumerate
 
-The first string may contain `\\1' forms, like the ones used by
-replace-match to insert sub-expressions from the matched text.  For
-instance:
+So you basically have a bipartite system---you use @code{nnsoup} for
+reading and Gnus for packing/sending these @sc{soup} packets.
 
-@lisp
-("INBOX.lists.\\1"     "^Sender: owner-\\([a-z-]+\\)@@")
-@end lisp
+@menu
+* SOUP Commands::               Commands for creating and sending @sc{soup} packets
+* SOUP Groups::                 A back end for reading @sc{soup} packets.
+* SOUP Replies::                How to enable @code{nnsoup} to take over mail and news.
+@end menu
 
-The second element can also be a function.  In that case, it will be
-called with the first element of the rule as the argument, in a buffer
-containing the headers of the article.  It should return a non-nil value
-if it thinks that the mail belongs in that group.
 
-Nnmail users might recollect that the last regexp had to be empty to
-match all articles (like in the example above).  This is not required in
-nnimap.  Articles not matching any of the regexps will not be moved out
-of your inbox.  (This might might affect performance if you keep lots of
-unread articles in your inbox, since the splitting code would go over
-them every time you fetch new mail.)
+@node SOUP Commands
+@subsubsection SOUP Commands
 
-These rules are processed from the beginning of the alist toward the
-end.  The first rule to make a match will "win", unless you have
-crossposting enabled.  In that case, all matching rules will "win".
+These are commands for creating and manipulating @sc{soup} packets.
 
-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 splitted to.  See @code{nnimap-split-fancy}.
+@table @kbd
+@item G s b
+@kindex G s b (Group)
+@findex gnus-group-brew-soup
+Pack all unread articles in the current group
+(@code{gnus-group-brew-soup}).  This command understands the
+process/prefix convention.
 
-The splitting code tries to create mailboxes if it need too.
+@item G s w
+@kindex G s w (Group)
+@findex gnus-soup-save-areas
+Save all @sc{soup} data files (@code{gnus-soup-save-areas}).
 
-To allow for different split rules on different virtual servers, and
-even different split rules in different inboxes on the same server,
-the syntax of this variable have been extended along the lines of:
+@item G s s
+@kindex G s s (Group)
+@findex gnus-soup-send-replies
+Send all replies from the replies packet
+(@code{gnus-soup-send-replies}).
 
-@lisp
-(setq nnimap-split-rule
-      '(("my1server"    (".*"    (("ding"    "ding@@gnus.org")
-                                  ("junk"    "From:.*Simon")))
-        ("my2server"    ("INBOX" nnimap-split-fancy))
-        ("my[34]server" (".*"    (("private" "To:.*Simon")
-                                  ("junk"    my-junk-func)))))
-@end lisp
+@item G s p
+@kindex G s p (Group)
+@findex gnus-soup-pack-packet
+Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}).
 
-The virtual server name is in fact a regexp, so that the same rules
-may apply to several servers.  In the example, the servers
-@code{my3server} and @code{my4server} both use the same rules.
-Similarly, the inbox string is also a regexp.  The actual splitting
-rules are as before, either a function, or a list with group/regexp or
-group/function elements.
+@item G s r
+@kindex G s r (Group)
+@findex nnsoup-pack-replies
+Pack all replies into a replies packet (@code{nnsoup-pack-replies}).
 
-Nnmail equivalent: @code{nnmail-split-methods}.
+@item O s
+@kindex O s (Summary)
+@findex gnus-soup-add-article
+This summary-mode command adds the current article to a @sc{soup} packet
+(@code{gnus-soup-add-article}).  It understands the process/prefix
+convention (@pxref{Process/Prefix}).
 
-@item nnimap-split-predicate
-@cindex splitting
-@vindex nnimap-split-predicate
+@end table
 
-Mail matching this predicate in @code{nnimap-split-inbox} will be
-splitted, it is a string and the default is @samp{UNSEEN UNDELETED}.
 
-This might be useful if you use another @sc{imap} client to read mail in
-your inbox but would like Gnus to split all articles in the inbox
-regardless of readedness. Then you might change this to
-@samp{UNDELETED}.
+There are a few variables to customize where Gnus will put all these
+thingies:
 
-@item nnimap-split-fancy
-@cindex splitting, fancy
-@findex nnimap-split-fancy
-@vindex nnimap-split-fancy
+@table @code
 
-It's possible to set @code{nnimap-split-rule} to
-@code{nnmail-split-fancy} if you want to use fancy
-splitting. @xref{Fancy Mail Splitting}.
+@item gnus-soup-directory
+@vindex gnus-soup-directory
+Directory where Gnus will save intermediate files while composing
+@sc{soup} packets.  The default is @file{~/SoupBrew/}.
 
-However, to be able to have different fancy split rules for nnmail and
-nnimap backends you can set @code{nnimap-split-rule} to
-@code{nnimap-split-fancy} and define the nnimap specific fancy split
-rule in @code{nnimap-split-fancy}.
+@item gnus-soup-replies-directory
+@vindex gnus-soup-replies-directory
+This is what Gnus will use as a temporary directory while sending our
+reply packets.  @file{~/SoupBrew/SoupReplies/} is the default.
 
-Example:
+@item gnus-soup-prefix-file
+@vindex gnus-soup-prefix-file
+Name of the file where Gnus stores the last used prefix.  The default is
+@samp{gnus-prefix}.
 
-@lisp
-(setq nnimap-split-rule 'nnimap-split-fancy
-      nnimap-split-fancy ...)
-@end lisp
+@item gnus-soup-packer
+@vindex gnus-soup-packer
+A format string command for packing a @sc{soup} packet.  The default is
+@samp{tar cf - %s | gzip > $HOME/Soupout%d.tgz}.
 
-Nnmail equivalent: @code{nnmail-split-fancy}.
+@item gnus-soup-unpacker
+@vindex gnus-soup-unpacker
+Format string command for unpacking a @sc{soup} packet.  The default is
+@samp{gunzip -c %s | tar xvf -}.
 
-@end table
+@item gnus-soup-packet-directory
+@vindex gnus-soup-packet-directory
+Where Gnus will look for reply packets.  The default is @file{~/}.
 
-@node Editing IMAP ACLs
-@subsubsection Editing @sc{imap} ACLs
-@cindex editing imap acls
-@cindex Access Control Lists
-@cindex Editing @sc{imap} ACLs
-@kindex G l
-@findex gnus-group-nnimap-edit-acl
+@item gnus-soup-packet-regexp
+@vindex gnus-soup-packet-regexp
+Regular expression matching @sc{soup} reply packets in
+@code{gnus-soup-packet-directory}.
 
-ACL stands for Access Control List.  ACLs are used in @sc{imap} for
-limiting (or enabling) other users access to your mail boxes.  Not all
-@sc{imap} servers support this, this function will give an error if it
-doesn't.
+@end table
 
-To edit a ACL for a mailbox, type @kbd{G l}
-(@code{gnus-group-edit-nnimap-acl}) and you'll be presented with a ACL
-editing window with detailed instructions.
 
-Some possible uses:
+@node SOUP Groups
+@subsubsection SOUP Groups
+@cindex nnsoup
 
-@itemize @bullet
-@item
-Giving "anyone" the "lrs" rights (lookup, read, keep seen/unseen flags)
-on your mailing list mailboxes enables other users on the same server to
-follow the list without subscribing to it.
-@item
-At least with the Cyrus server, you are required to give the user
-"anyone" posting ("p") capabilities to have "plussing" work (that is,
-mail sent to user+mailbox@@domain ending up in the @sc{imap} mailbox
-INBOX.mailbox).
-@end itemize
+@code{nnsoup} is the back end for reading @sc{soup} packets.  It will
+read incoming packets, unpack them, and put them in a directory where
+you can read them at leisure.
 
-@node Expunging mailboxes
-@subsubsection Expunging mailboxes
-@cindex expunging
+These are the variables you can use to customize its behavior:
 
-@cindex Expunge
-@cindex Manual expunging
-@kindex G x
-@findex gnus-group-nnimap-expunge
+@table @code
 
-If you're using the @code{never} setting of @code{nnimap-expunge-close},
-you may want the option of expunging all deleted articles in a mailbox
-manually.  This is exactly what @kbd{G x} does.
+@item nnsoup-tmp-directory
+@vindex nnsoup-tmp-directory
+When @code{nnsoup} unpacks a @sc{soup} packet, it does it in this
+directory.  (@file{/tmp/} by default.)
 
-Currently there is no way of showing deleted articles, you can just
-delete them.
+@item nnsoup-directory
+@vindex nnsoup-directory
+@code{nnsoup} then moves each message and index file to this directory.
+The default is @file{~/SOUP/}.
+
+@item nnsoup-replies-directory
+@vindex nnsoup-replies-directory
+All replies will be stored in this directory before being packed into a
+reply packet.  The default is @file{~/SOUP/replies/"}.
+
+@item nnsoup-replies-format-type
+@vindex nnsoup-replies-format-type
+The @sc{soup} format of the replies packets.  The default is @samp{?n}
+(rnews), and I don't think you should touch that variable.  I probably
+shouldn't even have documented it.  Drats!  Too late!
+
+@item nnsoup-replies-index-type
+@vindex nnsoup-replies-index-type
+The index type of the replies packet.  The default is @samp{?n}, which
+means ``none''.  Don't fiddle with this one either!
+
+@item nnsoup-active-file
+@vindex nnsoup-active-file
+Where @code{nnsoup} stores lots of information.  This is not an ``active
+file'' in the @code{nntp} sense; it's an Emacs Lisp file.  If you lose
+this file or mess it up in any way, you're dead.  The default is
+@file{~/SOUP/active}.
+
+@item nnsoup-packer
+@vindex nnsoup-packer
+Format string command for packing a reply @sc{soup} packet.  The default
+is @samp{tar cf - %s | gzip > $HOME/Soupin%d.tgz}.
+
+@item nnsoup-unpacker
+@vindex nnsoup-unpacker
+Format string command for unpacking incoming @sc{soup} packets.  The
+default is @samp{gunzip -c %s | tar xvf -}.
+
+@item nnsoup-packet-directory
+@vindex nnsoup-packet-directory
+Where @code{nnsoup} will look for incoming packets.  The default is
+@file{~/}.
+
+@item nnsoup-packet-regexp
+@vindex nnsoup-packet-regexp
+Regular expression matching incoming @sc{soup} packets.  The default is
+@samp{Soupout}.
+
+@item nnsoup-always-save
+@vindex nnsoup-always-save
+If non-@code{nil}, save the replies buffer after each posted message.
+
+@end table
+
+
+@node SOUP Replies
+@subsubsection SOUP Replies
+
+Just using @code{nnsoup} won't mean that your postings and mailings end
+up in @sc{soup} reply packets automagically.  You have to work a bit
+more for that to happen.
+
+@findex nnsoup-set-variables
+The @code{nnsoup-set-variables} command will set the appropriate
+variables to ensure that all your followups and replies end up in the
+@sc{soup} system.
+
+In specific, this is what it does:
+
+@lisp
+(setq message-send-news-function 'nnsoup-request-post)
+(setq message-send-mail-function 'nnsoup-request-mail)
+@end lisp
+
+And that's it, really.  If you only want news to go into the @sc{soup}
+system you just use the first line.  If you only want mail to be
+@sc{soup}ed you use the second.
+
+
+@node Mail-To-News Gateways
+@subsection Mail-To-News Gateways
+@cindex mail-to-news gateways
+@cindex gateways
+
+If your local @code{nntp} server doesn't allow posting, for some reason
+or other, you can post using one of the numerous mail-to-news gateways.
+The @code{nngateway} back end provides the interface.
+
+Note that you can't read anything from this back end---it can only be
+used to post with.
+
+Server variables:
+
+@table @code
+@item nngateway-address
+@vindex nngateway-address
+This is the address of the mail-to-news gateway.
+
+@item nngateway-header-transformation
+@vindex nngateway-header-transformation
+News headers often have to be transformed in some odd way or other
+for the mail-to-news gateway to accept it.  This variable says what
+transformation should be called, and defaults to
+@code{nngateway-simple-header-transformation}.  The function is called
+narrowed to the headers to be transformed and with one parameter---the
+gateway address.
+
+This default function just inserts a new @code{To} header based on the
+@code{Newsgroups} header and the gateway address.
+For instance, an article with this @code{Newsgroups} header:
+
+@example
+Newsgroups: alt.religion.emacs
+@end example
+
+will get this @code{To} header inserted:
+
+@example
+To: alt-religion-emacs@@GATEWAY
+@end example
+
+The following pre-defined functions exist:
+
+@findex nngateway-simple-header-transformation
+@table @code
+
+@item nngateway-simple-header-transformation
+Creates a @code{To} header that looks like
+@var{newsgroup}@@@code{nngateway-address}.
+
+@findex nngateway-mail2news-header-transformation
+
+@item nngateway-mail2news-header-transformation
+Creates a @code{To} header that looks like
+@code{nngateway-address}.
+
+Here's an example:
+
+@lisp
+(setq gnus-post-method
+      '(nngateway
+        "mail2news@@replay.com"
+        (nngateway-header-transformation
+         nngateway-mail2news-header-transformation)))
+@end lisp
+
+@end table
+
+
+@end table
+
+So, to use this, simply say something like:
+
+@lisp
+(setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
+@end lisp
 
 
 
@@ -13841,8 +16438,8 @@ Gnus allows combining a mixture of all the other group types into bigger
 groups.
 
 @menu
-* Virtual Groups::     Combining articles from many groups.
-* Kibozed Groups::     Looking through parts of the newsfeed for articles.
+* Virtual Groups::              Combining articles from many groups.
+* Kibozed Groups::              Looking through parts of the newsfeed for articles.
 @end menu
 
 
@@ -13864,9 +16461,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:
@@ -13915,15 +16515,18 @@ you enter it---it'll have much the same effect.
 
 @code{nnvirtual} can have both mail and news groups as component groups.
 When responding to articles in @code{nnvirtual} groups, @code{nnvirtual}
-has to ask the backend of the component group the article comes from
-whether it is a news or mail backend.  However, when you do a @kbd{^},
-there is typically no sure way for the component backend to know this,
+has to ask the back end of the component group the article comes from
+whether it is a news or mail back end.  However, when you do a @kbd{^},
+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 backend.  (Just to be on the safe side.)
+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
@@ -13932,7 +16535,7 @@ line from the article you respond to in these cases.
 @cindex kibozing
 
 @dfn{Kibozing} is defined by @sc{oed} as ``grepping through (parts of)
-the news feed''.  @code{nnkiboze} is a backend that will do this for
+the news feed''.  @code{nnkiboze} is a back end that will do this for
 you.  Oh joy!  Now you can grind any @sc{nntp} server down to a halt
 with useless requests!  Oh happiness!
 
@@ -14002,37 +16605,23 @@ for some years, but doing that's a bore.  Moving the news server
 functionality up to the newsreader makes sense if you're the only person
 reading news on a machine.
 
-Using Gnus as an ``offline'' newsreader is quite simple.
-
-@itemize @bullet
-@item
-First, set up Gnus as you would do if you were running it on a machine
-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:
-
-@lisp
-(gnus-agentize)
-@end lisp
-@end itemize
-
-That's it.  Gnus is now an ``offline'' newsreader.
+Setting up Gnus as an ``offline'' newsreader is quite simple.  In
+fact, you don't even have to configure anything.
 
 Of course, to use it as such, you have to learn a few new commands.
 
 @menu
-* Agent Basics::           How it all is supposed to work.
-* Agent Categories::       How to tell the Gnus Agent what to download.
-* Agent Commands::         New commands for all the buffers.
-* Agent Expiry::           How to make old articles go away.
-* Outgoing Messages::      What happens when you post/mail something?
-* Agent Variables::        Customizing is fun.
-* Example Setup::          An example @file{.gnus.el} file for offline people.
-* Batching Agents::        How to fetch news from a @code{cron} job.
-* Agent Caveats::          What you think it'll do and what it does.
+* Agent Basics::                How it all is supposed to work.
+* Agent Categories::            How to tell the Gnus Agent what to download.
+* Agent Commands::              New commands for all the buffers.
+* Agent as Cache::              The Agent is a big cache too.
+* Agent Expiry::                How to make old articles go away.
+* Agent and IMAP::              How to use the Agent with IMAP.
+* Outgoing Messages::           What happens when you post/mail something?
+* Agent Variables::             Customizing is fun.
+* Example Setup::               An example @file{.gnus.el} file for offline people.
+* Batching Agents::             How to fetch news from a @code{cron} job.
+* Agent Caveats::               What you think it'll do and what it does.
 @end menu
 
 
@@ -14064,11 +16653,14 @@ already fetched while in this mode.
 @item
 You then decide to see whether any new news has arrived.  You connect
 your machine to the net (using PPP or whatever), and then hit @kbd{J j}
-to make Gnus become @dfn{plugged}.
+to make Gnus become @dfn{plugged} and use @kbd{g} to check for new mail
+as usual.  To check for new mail in unplugged mode, see (@pxref{Mail
+Source Specifiers}).
 
 @item
 You can then read the new news immediately, or you can download the news
-onto your local machine.  If you want to do the latter, you press @kbd{J
+onto your local machine.  If you want to do the latter, you press @kbd{g}
+to check if there are any new news and then @kbd{J
 s} to fetch all the eligible articles in all the groups.  (To let Gnus
 know which articles you want to download, @pxref{Agent Categories}.)
 
@@ -14088,11 +16680,13 @@ the Agent.
 
 @item
 Decide which servers should be covered by the Agent.  If you have a mail
-backend, it would probably be nonsensical to have it covered by the
+back end, it would probably be nonsensical to have it covered by the
 Agent.  Go to the server buffer (@kbd{^} in the group buffer) and press
-@kbd{J a} the server (or servers) that you wish to have covered by the
-Agent (@pxref{Server Agent Commands}).  This will typically be only the
-primary select method, which is listed on the bottom in the buffer.
+@kbd{J a} on the server (or servers) that you wish to have covered by the
+Agent (@pxref{Server Agent Commands}), or @kbd{J r} on automatically
+added servers you do not wish to have covered by the Agent.  By default,
+all @code{nntp} and @code{nnimap} groups in @code{gnus-select-method} and
+@code{gnus-secondary-select-methods} are agentized.
 
 @item
 Decide on download policy.  @xref{Agent Categories}.
@@ -14120,9 +16714,9 @@ Groups that do not belong in any other category belong to the
 managing categories.
 
 @menu
-* Category Syntax::       What a category looks like.
-* The Category Buffer::   A buffer for maintaining categories.
-* Category Variables::    Customize'r'Us.
+* Category Syntax::             What a category looks like.
+* Category Buffer::             A buffer for maintaining categories.
+* Category Variables::          Customize'r'Us.
 @end menu
 
 
@@ -14149,7 +16743,7 @@ predicates an additional score rule is superfluous.
 
 Predicates of @code{high} or @code{low} download articles in respect of
 their scores in relationship to @code{gnus-agent-high-score} and
-@code{gnus-agent-low-score} as descibed below.
+@code{gnus-agent-low-score} as described below.
 
 To gain even finer control of what is to be regarded eligible for
 download a predicate can consist of a number of predicates with logical
@@ -14241,13 +16835,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
-(defvar  gnus-category-predicate-alist
+(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:
@@ -14259,7 +16853,7 @@ and simply specify your predicate as:
 If/when using something like the above, be aware that there are many
 misconfigured systems/mailers out there and so an article's date is not
 always a reliable indication of when it was posted.  Hell, some people
-just don't give a damm.
+just don't give a damn.
 
 The above predicates apply to *all* the groups which belong to the
 category.  However, if you wish to have a specific predicate for an
@@ -14370,14 +16964,14 @@ about parenthesis?
 @item
 Use @code{normal} score files
 
-If you dont want to maintain two sets of scoring rules for a group, and
+If you don't want to maintain two sets of scoring rules for a group, and
 your desired @code{downloading} criteria for a group are the same as your
 @code{reading} criteria then you can tell the agent to refer to your
 @code{normal} score files when deciding what to download.
 
 These directives in either the category definition or a group's
 parameters will cause the agent to read in all the applicable score
-files for a group, *filtering out* those those sections that do not
+files for a group, *filtering out* those sections that do not
 relate to one of the permitted subset of scoring keywords.
 
 @itemize @bullet
@@ -14397,8 +16991,8 @@ Group Parameter specification
 @end itemize
 @end enumerate
 
-@node The Category Buffer
-@subsubsection The Category Buffer
+@node Category Buffer
+@subsubsection Category Buffer
 
 You'd normally do all category maintenance from the category buffer.
 When you enter it for the first time (with the @kbd{J c} command from
@@ -14502,23 +17096,16 @@ Articles that have a score higher than this have a high score.  Default
 @subsection Agent Commands
 
 All the Gnus Agent commands are on the @kbd{J} submap.  The @kbd{J j}
-(@code{gnus-agent-toggle-plugged} command works in all modes, and
+(@code{gnus-agent-toggle-plugged}) command works in all modes, and
 toggles the plugged/unplugged state of the Gnus Agent.
 
 
 @menu
-* Group Agent Commands::
-* Summary Agent Commands::
-* Server Agent Commands::
+* Group Agent Commands::        
+* Summary Agent Commands::      
+* Server Agent Commands::       
 @end menu
 
-You can run a complete batch fetch from the command line with the
-following incantation:
-
-@cindex gnus-agent-batch-fetch
-@example
-$ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch
-@end example
 
 
 
@@ -14545,9 +17132,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)
@@ -14563,6 +17150,12 @@ Remove the current group from its category, if any
 (@code{gnus-agent-remove-group}).  This command understands the
 process/prefix convention (@pxref{Process/Prefix}).
 
+@item J Y
+@kindex J Y (Agent Group)
+@findex gnus-agent-synchronize-flags
+Synchronize flags changed while unplugged with remote server, if any.
+
+
 @end table
 
 
@@ -14581,16 +17174,25 @@ Mark the article for downloading (@code{gnus-agent-mark-article}).
 Remove the downloading mark from the article
 (@code{gnus-agent-unmark-article}).
 
+@cindex %
 @item @@
 @kindex @@ (Agent Summary)
 @findex gnus-agent-toggle-mark
-Toggle whether to download the article (@code{gnus-agent-toggle-mark}).
+Toggle whether to download the article
+(@code{gnus-agent-toggle-mark}).  The dowload mark is @samp{%} by
+default. 
 
 @item J c
 @kindex J c (Agent Summary)
 @findex gnus-agent-catchup
 Mark all undownloaded articles as read (@code{gnus-agent-catchup}).
 
+@item J u
+@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}).
+
 @end table
 
 
@@ -14613,6 +17215,22 @@ Agent (@code{gnus-agent-remove-server}).
 @end table
 
 
+@node Agent as Cache
+@subsection Agent as Cache
+
+When Gnus is plugged, it is not efficient to download headers or
+articles from the server again, if they are already stored in the
+Agent.  So, Gnus normally only downloads headers once, and stores them
+in the Agent.  These headers are later used when generating the summary
+buffer, regardless of whether you are plugged or unplugged.  Articles
+are not cached in the Agent by default though (that would potentially
+consume lots of disk space), but if you have already downloaded an
+article into the Agent, Gnus will not download the article from the
+server again but use the locally stored copy instead.
+
+This behaviour can be controlled by @code{gnus-agent-cache}
+(@pxref{Agent Variables}).
+
 @node Agent Expiry
 @subsection Agent Expiry
 
@@ -14630,19 +17248,90 @@ 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
+
+The Agent work with any Gnus back end, including nnimap.  However,
+since there are some conceptual differences between @sc{nntp} and
+@sc{imap}, this section (should) provide you with some information to
+make Gnus Agent work smoother as a @sc{imap} Disconnected Mode client.
+
+The first thing to keep in mind is that all flags (read, ticked, etc)
+are kept on the @sc{imap} server, rather than in @code{.newsrc} as is the
+case for nntp.  Thus Gnus need to remember flag changes when
+disconnected, and synchronize these flags when you plug back in.
+
+Gnus keeps track of flag changes when reading nnimap groups under the
+Agent.  When you plug back in, Gnus will check if you have any changed
+any flags and ask if you wish to synchronize these with the server.
+The behavior is customizable by @code{gnus-agent-synchronize-flags}.
+
+@vindex gnus-agent-synchronize-flags
+If @code{gnus-agent-synchronize-flags} is @code{nil}, the Agent will
+never automatically synchronize flags.  If it is @code{ask}, which is
+the default, the Agent will check if you made any changes and if so
+ask if you wish to synchronize these when you re-connect.  If it has
+any other value, all flags will be synchronized automatically.
+
+If you do not wish to synchronize flags automatically when you
+re-connect, you can do it manually with the
+@code{gnus-agent-synchronize-flags} command that is bound to @kbd{J Y}
+in the group buffer.
+
+Some things are currently not implemented in the Agent that you'd might
+expect from a disconnected @sc{imap} client, including:
+
+@itemize @bullet
+
+@item
+Copying/moving articles into nnimap groups when unplugged.
+
+@item
+Creating/deleting nnimap groups when unplugged.
+
+@end itemize
+
+Technical note: the synchronization algorithm does not work by "pushing"
+all local flags to the server, but rather incrementally update the
+server view of flags by changing only those flags that were changed by
+the user.  Thus, if you set one flag on a article, quit the group and
+re-select the group and remove the flag; the flag will be set and
+removed from the server when you "synchronize".  The queued flag
+operations can be found in the per-server @code{flags} file in the Agent
+directory.  It's emptied when you synchronize flags.
+
 
 @node Outgoing Messages
 @subsection Outgoing Messages
 
 When Gnus is unplugged, all outgoing messages (both mail and news) are
-stored in the draft groups (@pxref{Drafts}).  You can view them there
-after posting, and edit them at will.
+stored in the draft group ``queue'' (@pxref{Drafts}).  You can view
+them there after posting, and edit them at will.
 
 When Gnus is plugged again, you can send the messages either from the
 draft group with the special commands available there, or you can use
@@ -14675,6 +17364,35 @@ 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, e.g. essentially using the Agent as a cache.
+The default is non-nil, which means to use the Agent as a cache.
+
+@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.
+
+@item gnus-server-unopen-status
+@vindex gnus-server-unopen-status
+Perhaps not a Agent variable, but closely related to the Agent, this
+variable says what will happen if Gnus cannot open a server.  If the
+Agent is enabled, the default, @code{nil}, makes Gnus ask the user
+whether to deny the server or whether to unplug the agent.  If the
+Agent is disabled, Gnus always simply deny the server.  Other choices
+for this variable include @code{denied} and @code{offline} the latter
+is only valid if the Agent is used.
+
 @end table
 
 
@@ -14698,7 +17416,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) ; Now the default.
 @end lisp
 
 That should be it, basically.  Put that in your @file{~/.gnus.el} file,
@@ -14730,9 +17449,12 @@ Having the Gnus Agent fetch articles (and post whatever messages you've
 written) is quite easy once you've gotten things set up properly.  The
 following shell script will do everything that is necessary:
 
+You can run a complete batch command from the command line with the
+following incantation:
+
 @example
 #!/bin/sh
-emacs -batch -l ~/.emacs -f gnus-agent-batch >/dev/null
+emacs -batch -l ~/.emacs -f -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1
 @end example
 
 
@@ -14744,20 +17466,21 @@ 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}.  If you want this behaviour, add
+@code{gnus-agent-fetch-selected-article} to
+@code{gnus-select-article-hook}.
 
-@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
@@ -14788,22 +17511,23 @@ temporary and have not been used for, say, a week, will be removed
 silently to help keep the sizes of the score files down.
 
 @menu
-* Summary Score Commands::   Adding score entries for the current group.
-* Group Score Commands::     General score commands.
-* Score Variables::          Customize your scoring.  (My, what terminology).
-* Score File Format::        What a score file may contain.
-* Score File Editing::       You can edit score files by hand as well.
-* Adaptive Scoring::         Big Sister Gnus knows what you read.
-* Home Score File::          How to say where new score entries are to go.
-* Followups To Yourself::    Having Gnus notice when people answer you.
-* Scoring Tips::             How to score effectively.
-* Reverse Scoring::          That problem child of old is not problem.
-* Global Score Files::       Earth-spanning, ear-splitting score files.
-* Kill Files::               They are still here, but they can be ignored.
-* Converting Kill Files::    Translating kill files to score files.
-* GroupLens::                Getting predictions on what you like to read.
-* Advanced Scoring::         Using logical expressions to build score rules.
-* Score Decays::             It can be useful to let scores wither away.
+* Summary Score Commands::      Adding score entries for the current group.
+* Group Score Commands::        General score commands.
+* Score Variables::             Customize your scoring.  (My, what terminology).
+* Score File Format::           What a score file may contain.
+* Score File Editing::          You can edit score files by hand as well.
+* Adaptive Scoring::            Big Sister Gnus knows what you read.
+* Home Score File::             How to say where new score entries are to go.
+* Followups To Yourself::       Having Gnus notice when people answer you.
+* Scoring On Other Headers::    Scoring on non-standard headers.
+* Scoring Tips::                How to score effectively.
+* Reverse Scoring::             That problem child of old is not problem.
+* Global Score Files::          Earth-spanning, ear-splitting score files.
+* Kill Files::                  They are still here, but they can be ignored.
+* Converting Kill Files::       Translating kill files to score files.
+* GroupLens::                   Getting predictions on what you like to read.
+* Advanced Scoring::            Using logical expressions to build score rules.
+* Score Decays::                It can be useful to let scores wither away.
 @end menu
 
 
@@ -14843,6 +17567,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
@@ -14939,9 +17668,14 @@ 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.
+the followups to this author.  (Using this key leads to the creation of
+@file{ADAPT} files.)
 
 @item b
 Score on the body.
@@ -14950,7 +17684,8 @@ Score on the body.
 Score on the head.
 
 @item t
-Score on thread.
+Score on thread.  (Using this key leads to the creation of @file{ADAPT}
+files.)
 
 @end table
 
@@ -15005,9 +17740,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
@@ -15020,6 +17756,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
@@ -15184,16 +17925,25 @@ file names---discarding the @samp{all} elements.
 @findex gnus-score-find-hierarchical
 Apply all score files from all the parent groups.  This means that you
 can't have score files like @file{all.SCORE}, but you can have
-@file{SCORE}, @file{comp.SCORE} and @file{comp.emacs.SCORE}.
+@file{SCORE}, @file{comp.SCORE} and @file{comp.emacs.SCORE} for each
+server.
 
 @end table
-This variable can also be a list of functions.  In that case, all these
-functions will be called, and all the returned lists of score files will
-be applied.  These functions can also return lists of score alists
-directly.  In that case, the functions that return these non-file score
-alists should probably be placed before the ``real'' score file
-functions, to ensure that the last score file returned is the local
-score file.  Phu.
+This variable can also be a list of functions.  In that case, all
+these functions will be called with the group name as argument, and
+all the returned lists of score files will be applied.  These
+functions can also return lists of lists of score alists directly.  In
+that case, the functions that return these non-file score alists
+should probably be placed before the ``real'' score file functions, to
+ensure that the last score file returned is the local score file.
+Phu.
+
+For example, to do hierarchical scoring but use a non-server-specific
+overall score file, you could use the value
+@example
+(list (lambda (group) ("all.SCORE"))
+      'gnus-score-find-hierarchical)
+@end example
 
 @item gnus-score-expiry-days
 @vindex gnus-score-expiry-days
@@ -15203,12 +17953,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
@@ -15328,6 +18078,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{<=}.
@@ -15351,7 +18113,7 @@ the match, we get the score added if the article has less than 4 lines.
 (It's easy to get confused and think it's the other way around.  But
 it's not.  I think.)
 
-When matching on @code{Lines}, be careful because some backends (like
+When matching on @code{Lines}, be careful because some back ends (like
 @code{nndir}) do not generate @code{Lines} header, so every article ends
 up being marked as having 0 lines.  This can lead to strange results if
 you happen to lower score of the articles with few lines.
@@ -15465,9 +18227,9 @@ interesting (with @kbd{I T} or @kbd{I S}), and ignore (@kbd{C y}) the
 rest.  Next time you enter the group, you will see new articles in the
 interesting threads, plus any new threads.
 
-I.e.---the orphan score atom is for high-volume groups where there
-exist a few interesting threads which can't be found automatically by
-ordinary scoring rules.
+I.e.---the orphan score atom is for high-volume groups where a few
+interesting threads which can't be found automatically by ordinary
+scoring rules exist.
 
 @item adapt
 This entry controls the adaptive scoring.  If it is @code{t}, the
@@ -15567,7 +18329,7 @@ the @code{gnus-default-adaptive-score-alist} variable.  For instance, it
 might look something like this:
 
 @lisp
-(defvar gnus-default-adaptive-score-alist
+(setq gnus-default-adaptive-score-alist
   '((gnus-unread-mark)
     (gnus-ticked-mark (from 4))
     (gnus-dormant-mark (from 5))
@@ -15614,13 +18376,6 @@ The headers you can score on are @code{from}, @code{subject},
 on the @code{References} header using the @code{Message-ID} of the
 current article, thereby matching the following thread.
 
-You can also score on @code{thread}, which will try to score all
-articles that appear in a thread.  @code{thread} matches uses a
-@code{Message-ID} to match on the @code{References} header of the
-article.  If the match is made, the @code{Message-ID} of the article is
-added to the @code{thread} rule.  (Think about it.  I'd recommend two
-aspirins afterwards.)
-
 If you use this scheme, you should set the score file atom @code{mark}
 to something small---like -300, perhaps, to avoid having small random
 changes result in articles getting marked as read.
@@ -15672,6 +18427,12 @@ Words that appear in the @code{gnus-default-ignored-adaptive-words} list
 will be ignored.  If you wish to add more words to be ignored, use the
 @code{gnus-ignored-adaptive-words} list instead.
 
+@vindex gnus-adaptive-word-length-limit
+Some may feel that short words shouldn't count when doing adaptive
+scoring.  If so, you may set @code{gnus-adaptive-word-length-limit} to
+an integer.  Words shorter than this number will be ignored.  This
+variable defaults to @code{nil}.
+
 @vindex gnus-adaptive-word-syntax-table
 When the scoring is done, @code{gnus-adaptive-word-syntax-table} is the
 syntax table in effect.  It is similar to the standard syntax table, but
@@ -15730,7 +18491,7 @@ A list.  The elements in this list can be:
 @enumerate
 @item
 @code{(@var{regexp} @var{file-name})}.  If the @var{regexp} matches the
-group name, the @var{file-name} will will be used as the home score file.
+group name, the @var{file-name} will be used as the home score file.
 
 @item
 A function.  If the function returns non-nil, the result will be used as
@@ -15822,7 +18583,11 @@ your own article.
 
 @vindex message-sent-hook
 These two functions are both primarily meant to be used in hooks like
-@code{message-sent-hook}.
+@code{message-sent-hook}, like this:
+@lisp
+(add-hook 'message-sent-hook 'gnus-score-followup-thread)
+@end lisp
+
 
 If you look closely at your own @code{Message-ID}, you'll notice that
 the first two or three characters are always the same.  Here's two of
@@ -15839,7 +18604,7 @@ myself:
 
 @lisp
 ("references"
- ("<x6[0-9a-z]+\\.fsf\\(_-_\\)?@@.*eyesore.no>"
+ ("<x6[0-9a-z]+\\.fsf\\(_-_\\)?@@.*eyesore\\.no>"
   1000 nil r))
 @end lisp
 
@@ -15847,6 +18612,39 @@ Whether it's the first two or first three characters that are ``yours''
 is system-dependent.
 
 
+@node Scoring On Other Headers
+@section Scoring On Other Headers
+@cindex scoring on other headers
+
+Gnus is quite fast when scoring the ``traditional''
+headers---@samp{From}, @samp{Subject} and so on.  However, scoring
+other headers requires writing a @code{head} scoring rule, which means
+that Gnus has to request every single article from the back end to find
+matches.  This takes a long time in big groups.
+
+Now, there's not much you can do about this for news groups, but for
+mail groups, you have greater control.  In the @pxref{To From
+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.
+
+@lisp
+(setq gnus-extra-headers '(To Cc Newsgroups Keywords)
+      nnmail-extra-headers gnus-extra-headers)
+@end lisp
+
+Restart Gnus and rebuild your @code{nnml} overview files with the
+@kbd{M-x nnml-generate-nov-databases} command.  This will take a long
+time if you have much mail.
+
+Now you can score on @samp{To} and @samp{Cc} as ``extra headers'' like
+so: @kbd{I e s p To RET <your name> RET}.
+
+See?  Simple.
+
+
 @node Scoring Tips
 @section Scoring Tips
 @cindex scoring tips
@@ -15866,7 +18664,9 @@ the @code{Xref} header.
 If you want to lower the score of articles that have been crossposted to
 more than, say, 3 groups:
 @lisp
-("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r))
+("xref"
+  ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+"
+   -1000 nil r))
 @end lisp
 
 @item Matching on the body
@@ -15932,9 +18732,10 @@ All you have to do to use other people's score files is to set the
 or each score file directory.  Gnus will decide by itself what score
 files are applicable to which group.
 
-Say you want to use the score file
+To use the score file
 @file{/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE} and
-all score files in the @file{/ftp@@ftp.some-where:/pub/score} directory:
+all score files in the @file{/ftp@@ftp.some-where:/pub/score} directory,
+say this:
 
 @lisp
 (setq gnus-global-score-files
@@ -15943,6 +18744,7 @@ all score files in the @file{/ftp@@ftp.some-where:/pub/score} directory:
 @end lisp
 
 @findex gnus-score-search-global-directories
+@noindent
 Simple, eh?  Directory names must end with a @samp{/}.  These
 directories are typically scanned only once during each Gnus session.
 If you feel the need to manually re-scan the remote directories, you can
@@ -16096,7 +18898,7 @@ by hand.
 
 The kill to score conversion package isn't included in Gnus by default.
 You can fetch it from
-@file{http://www.stud.ifi.uio.no/~larsi/ding-other/gnus-kill-to-score}.
+@uref{http://www.stud.ifi.uio.no/~larsi/ding-various/gnus-kill-to-score.el}.
 
 If your old kill files are very complex---if they contain more
 non-@code{gnus-kill} forms than not, you'll have to convert them by
@@ -16108,9 +18910,10 @@ before.
 @section GroupLens
 @cindex GroupLens
 
-GroupLens is a collaborative filtering system that helps you work
-together with other people to find the quality news articles out of the
-huge volume of news articles generated every day.
+GroupLens (@uref{http://www.cs.umn.edu/Research/GroupLens/}) is a
+collaborative filtering system that helps you work together with other
+people to find the quality news articles out of the huge volume of
+news articles generated every day.
 
 To accomplish this the GroupLens system combines your opinions about
 articles you have already read with the opinions of others who have done
@@ -16122,11 +18925,14 @@ of a prediction, what they thought of the article.  You can use this
 prediction to help you decide whether or not you want to read the
 article.
 
+@sc{Note:} Unfortunately the GroupLens system seems to have shut down,
+so this section is mostly of historical interest.
+
 @menu
-* Using GroupLens::          How to make Gnus use GroupLens.
-* Rating Articles::          Letting GroupLens know how you rate articles.
-* Displaying Predictions::   Displaying predictions given by GroupLens.
-* GroupLens Variables::      Customizing GroupLens.
+* Using GroupLens::             How to make Gnus use GroupLens.
+* Rating Articles::             Letting GroupLens know how you rate articles.
+* Displaying Predictions::      Displaying predictions given by GroupLens.
+* GroupLens Variables::         Customizing GroupLens.
 @end menu
 
 
@@ -16135,7 +18941,7 @@ article.
 
 To use GroupLens you must register a pseudonym with your local Better
 Bit Bureau (BBB).
-@samp{http://www.cs.umn.edu/Research/GroupLens/bbb.html} is the only
+@uref{http://www.cs.umn.edu/Research/GroupLens/bbb.html} is the only
 better bit in town at the moment.
 
 Once you have registered you'll need to set a couple of variables.
@@ -16278,7 +19084,7 @@ Prediction +/- confidence.
 @item gnus-summary-grouplens-line-format
 The summary line format used in GroupLens-enhanced summary buffers.  It
 accepts the same specs as the normal summary line format (@pxref{Summary
-Buffer Lines}).  The default is @samp{%U%R%z%l%I%(%[%4L: %-20,20n%]%)
+Buffer Lines}).  The default is @samp{%U%R%z%l%I%(%[%4L: %-23,23n%]%)
 %s\n}.
 
 @item grouplens-bbb-host
@@ -16372,6 +19178,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:
 
@@ -16525,29 +19335,42 @@ the new score, which should be an integer.
 Gnus will try to decay scores once a day.  If you haven't run Gnus for
 four days, Gnus will decay the scores four times, for instance.
 
+@iftex
+@iflatex
+@chapter Message
+@include message.texi
+@chapter Emacs MIME
+@include emacs-mime.texi
+@chapter Sieve
+@include sieve.texi
+@chapter PGG
+@include pgg.texi
+@end iflatex
+@end iftex
 
 @node Various
 @chapter Various
 
 @menu
-* Process/Prefix::             A convention used by many treatment commands.
-* Interactive::                Making Gnus ask you many questions.
-* Symbolic Prefixes::          How to supply some Gnus functions with options.
-* Formatting Variables::       You can specify what buffers should look like.
-* Windows Configuration::      Configuring the Gnus buffer windows.
-* Faces and Fonts::            How to change how faces look.
-* Compilation::                How to speed Gnus up.
-* Mode Lines::                 Displaying information in the mode lines.
-* Highlighting and Menus::     Making buffers look all nice and cozy.
-* Buttons::                    Get tendonitis in ten easy steps!
-* Daemons::                    Gnus can do things behind your back.
-* NoCeM::                      How to avoid spam and other fatty foods.
-* Undo::                       Some actions can be undone.
-* Moderation::                 What to do if you're a moderator.
-* XEmacs Enhancements::        There are more pictures and stuff under XEmacs.
-* 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.
+* Process/Prefix::              A convention used by many treatment commands.
+* Interactive::                 Making Gnus ask you many questions.
+* Symbolic Prefixes::           How to supply some Gnus functions with options.
+* Formatting Variables::        You can specify what buffers should look like.
+* Window Layout::               Configuring the Gnus buffer windows.
+* Faces and Fonts::             How to change how faces look.
+* Compilation::                 How to speed Gnus up.
+* Mode Lines::                  Displaying information in the mode lines.
+* Highlighting and Menus::      Making buffers look all nice and cozy.
+* Buttons::                     Get tendinitis in ten easy steps!
+* 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.
+* 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.
 @end menu
 
 
@@ -16657,9 +19480,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
@@ -16686,11 +19509,14 @@ Here's an example format spec (from the group buffer): @samp{%M%S%5y:
 lots of percentages everywhere.
 
 @menu
-* Formatting Basics::     A formatting variable is basically a format string.
-* Mode Line Formatting::  Some rules about mode line formatting variables.
-* Advanced Formatting::   Modifying output in various ways.
-* User-Defined Specs::    Having Gnus call your own functions.
-* Formatting Fonts::      Making the formatting look colorful and nice.
+* Formatting Basics::           A formatting variable is basically a format string.
+* Mode Line Formatting::        Some rules about mode line formatting variables.
+* Advanced Formatting::         Modifying output in various ways.
+* User-Defined Specs::          Having Gnus call your own functions.
+* Formatting Fonts::            Making the formatting look colorful and nice.
+* Positioning Point::           Moving point to a position after an operation.
+* Tabulation::                  Tabulating your output.
+* Wide Characters::             Dealing with wide characters.
 @end menu
 
 Currently Gnus uses the following formatting variables:
@@ -16733,6 +19559,9 @@ particularly wide values.  For that you can say @samp{%4,6y}, which
 means that the field will never be more than 6 characters wide and never
 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
@@ -16800,6 +19629,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
@@ -16832,6 +19668,9 @@ be inserted into the buffer just like information from any other
 specifier.  This function may also be called with dummy values, so it
 should protect against that.
 
+Also Gnus supports extended user-defined specs, such as @samp{%u&foo;}.
+Gnus will call the function @code{gnus-user-format-function-}@samp{foo}.
+
 You can also use tilde modifiers (@pxref{Advanced Formatting} to achieve
 much the same without defining new functions.  Here's an example:
 @samp{%~(form (count-lines (point-min) (point)))@@}.  The form
@@ -16855,14 +19694,16 @@ and so on.  Create as many faces as you wish.  The same goes for the
 @code{mouse-face} specs---you can say @samp{%3(hello%)} to have
 @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
 
-Text inside the @samp{%<} and @samp{%>} specifiers will get the special
-@code{balloon-help} property set to @code{gnus-balloon-face-0}.  If you
-say @samp{%1<}, you'll get @code{gnus-balloon-face-1} and so on.  The
-@code{gnus-balloon-face-*} variables should be either strings or symbols
-naming functions that return a string.  Under @code{balloon-help-mode},
-when the mouse passes over text with this property set, a balloon window
-will appear and display the string.  Please refer to the doc string of
-@code{balloon-help-mode} for more information on this.
+Text inside the @samp{%<<} and @samp{%>>} specifiers will get the
+special @code{balloon-help} property set to @code{gnus-balloon-face-0}.
+If you say @samp{%1<<}, you'll get @code{gnus-balloon-face-1} and so on.
+The @code{gnus-balloon-face-*} variables should be either strings or
+symbols naming functions that return a string.  When the mouse passes
+over text with this property set, a balloon window will appear and
+display the string.  Please refer to @ref{(emacs)Help Echo} (in GNU
+Emacs) or the doc string of @code{balloon-help-mode} (in XEmacs) for
+more information on this.  (For technical reasons, the guillemets have
+been approximated as @samp{<<} and @samp{>>} in this paragraph.)
 
 Here's an alternative recipe for the group buffer:
 
@@ -16890,29 +19731,85 @@ and extremely vulgar displays.  Have fun!
 Note that the @samp{%(} specs (and friends) do not make any sense on the
 mode-line variables.
 
+@node Positioning Point
+@subsection Positioning Point
 
-@node Windows Configuration
-@section Windows Configuration
-@cindex windows configuration
+Gnus usually moves point to a pre-defined place on each line in most
+buffers.  By default, point move to the first colon character on the
+line.  You can customize this behaviour in three different ways.
 
-No, there's nothing here about X, so be quiet.
+You can move the colon character to somewhere else on the line.
 
-@vindex gnus-use-full-window
-If @code{gnus-use-full-window} non-@code{nil}, Gnus will delete all
-other windows and occupy the entire Emacs screen by itself.  It is
-@code{t} by default.
+@findex gnus-goto-colon
+You can redefine the function that moves the point to the colon.  The
+function is called @code{gnus-goto-colon}.
 
-Setting this variable to @code{nil} kinda works, but there are
-glitches.  Use at your own peril.
+But perhaps the most convenient way to deal with this, if you don't want
+to have a colon in your line, is to use the @samp{%*} specifier.  If you
+put a @samp{%*} somewhere in your format line definition, Gnus will
+place point there.
 
-@vindex gnus-buffer-configuration
-@code{gnus-buffer-configuration} describes how much space each Gnus
-buffer should be given.  Here's an excerpt of this variable:
 
-@lisp
-((group (vertical 1.0 (group 1.0 point)
-                      (if gnus-carpal (group-carpal 4))))
- (article (vertical 1.0 (summary 0.25 point)
+@node Tabulation
+@subsection Tabulation
+
+You can usually line up your displays by padding and cutting your
+strings.  However, when combining various strings of different size, it
+can often be more convenient to just output the strings, and then worry
+about lining up the following text afterwards.
+
+To do that, Gnus supplies tabulator specs--@samp{%=}.  There are two
+different types---@dfn{hard tabulators} and @dfn{soft tabulators}.
+
+@samp{%50=} will insert space characters to pad the line up to column
+50.  If the text is already past column 50, nothing will be inserted.
+This is the soft tabulator.
+
+@samp{%-50=} will insert space characters to pad the line up to column
+50.  If the text is already past column 50, the excess text past column
+50 will be removed.  This is the hard tabulator.
+
+
+@node Wide Characters
+@subsection Wide Characters
+
+Proportional fonts in most countries have characters of the same width.
+Some countries, however, use Latin characters mixed with wider
+characters---most notable East Asian countries.
+
+The problem is that when formatting, Gnus assumes that if a string is 10
+characters wide, it'll be 10 Latin characters wide on the screen.  In
+these countries, that's not true.
+
+@vindex gnus-use-correct-string-widths
+To help fix this, you can set @code{gnus-use-correct-string-widths} to
+@code{t}.  This makes buffer generation slower, but the results will be
+prettier.  The default value under XEmacs is @code{t} but @code{nil}
+for Emacs.
+
+
+@node Window Layout
+@section Window Layout
+@cindex window layout
+
+No, there's nothing here about X, so be quiet.
+
+@vindex gnus-use-full-window
+If @code{gnus-use-full-window} non-@code{nil}, Gnus will delete all
+other windows and occupy the entire Emacs screen by itself.  It is
+@code{t} by default.
+
+Setting this variable to @code{nil} kinda works, but there are
+glitches.  Use at your own peril.
+
+@vindex gnus-buffer-configuration
+@code{gnus-buffer-configuration} describes how much space each Gnus
+buffer should be given.  Here's an excerpt of this variable:
+
+@lisp
+((group (vertical 1.0 (group 1.0 point)
+                      (if gnus-carpal (group-carpal 4))))
+ (article (vertical 1.0 (summary 0.25 point)
                         (article 1.0))))
 @end lisp
 
@@ -16994,13 +19891,13 @@ To be slightly more formal, here's a definition of what a valid split
 may look like:
 
 @example
-split       = frame | horizontal | vertical | buffer | form
-frame       = "(frame " size *split ")"
-horizontal  = "(horizontal " size *split ")"
-vertical    = "(vertical " size *split ")"
-buffer      = "(" buffer-name " " size *[ "point" ] *[ "frame-focus"] ")"
-size        = number | frame-params
-buffer-name = group | article | summary ...
+split      = frame | horizontal | vertical | buffer | form
+frame      = "(frame " size *split ")"
+horizontal = "(horizontal " size *split ")"
+vertical   = "(vertical " size *split ")"
+buffer     = "(" buf-name " " size *[ "point" ] *[ "frame-focus"] ")"
+size       = number | frame-params
+buf-name   = group | article | summary ...
 @end example
 
 The limitations are that the @code{frame} split can only appear as the
@@ -17088,7 +19985,7 @@ might be used:
                      (vertical 0.24
                                (if (buffer-live-p gnus-summary-buffer)
                                    '(summary 0.5))
-                               (group 1.0)))))
+                               (group 1.0))))
 @end lisp
 
 One common desire for a multiple frame split is to have a separate frame
@@ -17096,13 +19993,14 @@ for composing mail and news while leaving the original frame intact.  To
 accomplish that, something like the following can be done:
 
 @lisp
-(message (frame 1.0
-                (if (not (buffer-live-p gnus-summary-buffer))
-                    (car (cdr (assoc 'group gnus-buffer-configuration)))
-                  (car (cdr (assoc 'summary gnus-buffer-configuration))))
-                (vertical ((user-position . t) (top . 1) (left . 1)
-                           (name . "Message"))
-                          (message 1.0 point))))
+(message
+  (frame 1.0
+         (if (not (buffer-live-p gnus-summary-buffer))
+             (car (cdr (assoc 'group gnus-buffer-configuration)))
+           (car (cdr (assoc 'summary gnus-buffer-configuration))))
+         (vertical ((user-position . t) (top . 1) (left . 1)
+                    (name . "Message"))
+                   (message 1.0 point))))
 @end lisp
 
 @findex gnus-add-configuration
@@ -17134,6 +20032,43 @@ window is displayed vertically next to another window, you may also want
 to fiddle with @code{gnus-tree-minimize-window} to avoid having the
 windows resized.
 
+@subsection Example Window Configurations
+
+@itemize @bullet
+@item
+Narrow left hand side occupied by group buffer.  Right hand side split
+between summary buffer (top one-sixth) and article buffer (bottom).
+
+@ifinfo
+@example
++---+---------+
+| G | Summary |
+| r +---------+
+| o |         |
+| u | Article |
+| p |         |
++---+---------+
+@end example
+@end ifinfo
+
+@lisp
+(gnus-add-configuration
+ '(article
+   (horizontal 1.0
+               (vertical 25 (group 1.0))
+               (vertical 1.0
+                         (summary 0.16 point)
+                         (article 1.0)))))
+
+(gnus-add-configuration
+ '(summary
+   (horizontal 1.0
+               (vertical 25 (group 1.0))
+               (vertical 1.0 (summary 1.0 point)))))
+@end lisp
+
+@end itemize
+
 
 @node Faces and Fonts
 @section Faces and Fonts
@@ -17168,7 +20103,7 @@ satisfied.  This will result in the new specs being byte-compiled, and
 you'll get top speed again.  Gnus will save these compiled specs in the
 @file{.newsrc.eld} file.  (User-defined functions aren't compiled by
 this function, though---you should compile them yourself by sticking
-them into the @code{.gnus.el} file and byte-compiling that file.)
+them into the @file{.gnus.el} file and byte-compiling that file.)
 
 
 @node Mode Lines
@@ -17422,7 +20357,7 @@ seconds.  This is 60 by default.  If you change that variable,
 all the timings in the handlers will be affected.)
 
 So, if you want to add a handler, you could put something like this in
-your @file{.gnus} file:
+your @file{.gnus.el} file:
 
 @findex gnus-demon-add-handler
 @lisp
@@ -17439,7 +20374,7 @@ Some ready-made functions to do this have been created:
 @code{gnus-demon-add-nntp-close-connection},
 @code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, and
 @code{gnus-demon-add-scanmail}.  Just put those functions in your
-@file{.gnus} if you want those abilities.
+@file{.gnus.el} if you want those abilities.
 
 @findex gnus-demon-init
 @findex gnus-demon-cancel
@@ -17494,32 +20429,11 @@ default is @code{("news.lists.filters" "news.admin.net-abuse.bulletins"
 @vindex gnus-nocem-issuers
 There are many people issuing NoCeM messages.  This list says what
 people you want to listen to.  The default is @code{("Automoose-1"
-"rbraver@@ohww.norman.ok.us" "clewis@@ferret.ocunix.on.ca"
-"jem@@xpat.com" "snowhare@@xmission.com" "red@@redpoll.mrfs.oh.us
-(Richard E. Depew)")}; fine, upstanding citizens all of them.
+"clewis@@ferret.ocunix.on.ca" "cosmo.roadkill" "SpamHippo"
+"hweede@@snafu.de")}; fine, upstanding citizens all of them.
 
-Known despammers that you can put in this list include:
-
-@table @samp
-@item clewis@@ferret.ocunix.on.ca;
-@cindex Chris Lewis
-Chris Lewis---Major Canadian despammer who has probably canceled more
-usenet abuse than anybody else.
-
-@item Automoose-1
-@cindex CancelMoose[tm]
-The CancelMoose[tm] on autopilot.  The CancelMoose[tm] is reputed to be
-Norwegian, and was the person(s) who invented NoCeM.
-
-@item jem@@xpat.com;
-@cindex Jem
-John Milburn---despammer located in Korea who is getting very busy these
-days.
-
-@item red@@redpoll.mrfs.oh.us (Richard E. Depew)
-Richard E. Depew---lone American despammer.  He mostly cancels binary
-postings to non-binary groups and removes spews (regurgitated articles).
-@end table
+Known despammers that you can put in this list are listed at
+@uref{http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html}.
 
 You do not have to heed NoCeM messages from all these people---just the
 ones you want to listen to.  You also don't have to accept all NoCeM
@@ -17584,6 +20498,18 @@ The number of days before removing old NoCeM entries from the cache.
 The default is 15.  If you make it shorter Gnus will be faster, but you
 might then see old spam.
 
+@item gnus-nocem-check-from
+@vindex gnus-nocem-check-from
+Non-@code{nil} means check for valid issuers in message bodies.
+Otherwise don't bother fetching articles unless their author matches a
+valid issuer; that is much faster if you are selective about the
+issuers.
+
+@item gnus-nocem-check-article-limit
+@vindex gnus-nocem-check-article-limit
+If non-@code{nil}, the maximum number of articles to check in any NoCeM
+group.  NoCeM groups can be huge and very slow to process.
+
 @end table
 
 Using NoCeM could potentially be a memory hog.  If you have many living
@@ -17624,11 +20550,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} command
+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
@@ -17674,18 +20627,18 @@ 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.
-* Smileys::   Show all those happy faces the way they were meant to be shown.
-* Toolbar::   Click'n'drool.
-* XVarious::  Other XEmacsy Gnusey variables.
+* 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
 
 
@@ -17698,16 +20651,16 @@ advantage of that.
 @end iflatex
 @end iftex
 
-So...  You want to slow down your news reader even more!  This is a
+So@dots{}  You want to slow down your news reader even more!  This is a
 good way to do so.  Its also a great way to impress people staring
 over your shoulder as you read news.
 
 @menu
-* Picon Basics::           What are picons and How do I get them.
-* Picon Requirements::     Don't go further if you aren't using XEmacs.
-* Easy Picons::            Displaying Picons---the easy way.
-* Hard Picons::            The way you should do it.  You'll learn something.
-* Picon Useless Configuration:: Other variables you can trash/tweak/munge/play with.
+* Picon Basics::                What are picons and How do I get them.
+* Picon Requirements::          Don't go further if you aren't using XEmacs.
+* Easy Picons::                 Displaying Picons---the easy way.
+* Hard Picons::                 The way you should do it.  You'll learn something.
+* Picon Useless Configuration::  Other variables you can trash/tweak/munge/play with.
 @end menu
 
 
@@ -17736,33 +20689,33 @@ in either monochrome @code{XBM} format or color @code{XPM} and
 If you have a permanent connection to the Internet you can use Steve
 Kinzler's Picons Search engine by setting
 @code{gnus-picons-piconsearch-url} to the string @*
-@file{http://www.cs.indiana.edu/picons/search.html}.
+@uref{http://www.cs.indiana.edu/picons/search.html}.
 
 @vindex gnus-picons-database
 Otherwise you need a local copy of his database.  For instructions on
 obtaining and installing the picons databases, point your Web browser at @*
-@file{http://www.cs.indiana.edu/picons/ftp/index.html}.  Gnus expects
+@uref{http://www.cs.indiana.edu/picons/ftp/index.html}.  Gnus expects
 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
 
-To have Gnus display Picons for you, you must be running XEmacs
-19.13 or greater since all other versions of Emacs aren't yet able to
-display images.
-
-Additionally, you must have @code{x} support compiled into XEmacs.  To
-display color picons which are much nicer than the black & white one,
-you also need one of @code{xpm} or @code{gif} compiled into XEmacs.
+To have Gnus display Picons for you, you must have @code{x} support
+compiled into XEmacs.  To display color picons which are much nicer
+than the black & white one, you also need one of @code{xpm} or
+@code{gif} compiled into XEmacs.
 
 @vindex gnus-picons-convert-x-face
 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
@@ -17815,7 +20768,7 @@ subdirectories.  This is only useful if
 @item gnus-picons-piconsearch-url
 @vindex gnus-picons-piconsearch-url
 The URL for the web picons search engine.  The only currently known
-engine is @file{http://www.cs.indiana.edu:800/piconsearch}.  To
+engine is @uref{http://www.cs.indiana.edu:800/piconsearch}.  To
 workaround network delays, icons will be fetched in the background.  If
 this is @code{nil} 'the default), then picons are fetched from local
 database indicated by @code{gnus-picons-database}.
@@ -17827,7 +20780,7 @@ default (which by default maps to the buffer @samp{*Picons*}).  Other
 valid places could be @code{article}, @code{summary}, or
 @samp{*scratch*} for all I care.  Just make sure that you've made the
 buffer visible using the standard Gnus window configuration
-routines---@pxref{Windows Configuration}.
+routines---@pxref{Window Layout}.
 
 @item gnus-picons-group-excluded-groups
 @vindex gnus-picons-group-excluded-groups
@@ -17851,8 +20804,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
 
@@ -17896,11 +20850,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
@@ -17935,7 +20891,7 @@ Whether to move point to first empty line when displaying picons.  This
 has only an effect if `gnus-picons-display-where' has value `article'.
 
 If @code{nil}, display the picons in the @code{From} and
-@code{Newsgroups} lines.  This is the defailt.
+@code{Newsgroups} lines.  This is the default.
 
 @item gnus-picons-clear-cache-on-shutdown
 @vindex gnus-picons-clear-cache-on-shutdown
@@ -17960,7 +20916,7 @@ cleared every time you exit Gnus.  Defaults to @code{t}.
 
 @iftex
 @iflatex
-\gnusfig{-3cm}{0.5cm}{\epsfig{figure=tmp/BigFace.ps,height=20cm}}
+\gnusfig{-3cm}{0.5cm}{\epsfig{figure=ps/BigFace,height=20cm}}
 \input{smiley}
 @end iflatex
 @end iftex
@@ -18026,6 +20982,98 @@ 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.  It returns the X-Face
+header data as a string.
+
+@findex gnus-insert-random-x-face-header
+@code{gnus-insert-random-x-face-header} calls
+@code{gnus-random-x-face} and inserts a @samp{X-Face} header with the
+randomly generated data.
+
+@findex gnus-x-face-from-file
+@code{gnus-x-face-from-file} takes a GIF 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 first function.  Put something
+like the following 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 last 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
 
@@ -18138,16 +21186,100 @@ mail group, only to find two pyramid schemes, seven advertisements
 (``New!  Miracle tonic for growing full, lustrous hair on your toes!'')
 and one mail asking me to repent and find some god.
 
-This is annoying.
+This is annoying.  Here's what you can do about it.
+
+@menu
+* The problem of spam::         Some background, and some solutions
+* 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.
+* Filtering Spam Using The Spam ELisp Package::  
+* Filtering Spam Using Statistics with spam-stat::  
+@end menu
+
+@node The problem of spam
+@subsection The problem of spam
+@cindex email spam
+@cindex spam filtering approaches
+@cindex filtering approaches, spam
+@cindex UCE
+@cindex unsolicited commercial email
+
+First, some background on spam.
+
+If you have access to e-mail, you are familiar with spam (technically
+termed @acronym{UCE}, Unsolicited Commercial E-mail).  Simply put, it exists
+because e-mail delivery is very cheap compared to paper mail, so only
+a very small percentage of people need to respond to an UCE to make it
+worthwhile to the advertiser.  Ironically, one of the most common
+spams is the one offering a database of e-mail addresses for further
+spamming.  Senders of spam are usually called @emph{spammers}, but terms like
+@emph{vermin}, @emph{scum}, and @emph{morons} are in common use as well.
+
+Spam comes from a wide variety of sources.  It is simply impossible to
+dispose of all spam without discarding useful messages.  A good
+example is the TMDA system, which requires senders
+unknown to you to confirm themselves as legitimate senders before
+their e-mail can reach you.  Without getting into the technical side
+of TMDA, a downside is clearly that e-mail from legitimate sources may
+be discarded if those sources can't or won't confirm themselves
+through the TMDA system.  Another problem with TMDA is that it
+requires its users to have a basic understanding of e-mail delivery
+and processing.
+
+The simplest approach to filtering spam is filtering.  If you get 200
+spam messages per day from @email{random-address@@vmadmin.com}, you
+block @samp{vmadmin.com}.  If you get 200 messages about
+@samp{VIAGRA}, you discard all messages with @samp{VIAGRA} in the
+message.  This, unfortunately, is a great way to discard legitimate
+e-mail.  For instance, the very informative and useful RISKS digest
+has been blocked by overzealous mail filters because it
+@strong{contained} words that were common in spam messages.
+Nevertheless, in isolated cases, with great care, direct filtering of
+mail can be useful.
+
+Another approach to filtering e-mail is the distributed spam
+processing, for instance DCC implements such a system.  In essence,
+@code{N} systems around the world agree that a machine @samp{X} in
+China, Ghana, or California is sending out spam e-mail, and these
+@code{N} systems enter @samp{X} or the spam e-mail from @samp{X} into
+a database.  The criteria for spam detection vary - it may be the
+number of messages sent, the content of the messages, and so on.  When
+a user of the distributed processing system wants to find out if a
+message is spam, he consults one of those @code{N} systems.
+
+Distributed spam processing works very well against spammers that send
+a large number of messages at once, but it requires the user to set up
+fairly complicated checks.  There are commercial and free distributed
+spam processing systems.  Distributed spam processing has its risks as
+well.  For instance legitimate e-mail senders have been accused of
+sending spam, and their web sites have been shut down for some time
+because of the incident.
+
+The statistical approach to spam filtering is also popular.  It is
+based on a statistical analysis of previous spam messages.  Usually
+the analysis is a simple word frequency count, with perhaps pairs of
+words or 3-word combinations thrown into the mix.  Statistical
+analysis of spam works very well in most of the cases, but it can
+classify legitimate e-mail as spam in some cases.  It takes time to
+run the analysis, the full message must be analyzed, and the user has
+to store the database of spam analyses.
+
+@node Anti-Spam Basics
+@subsection Anti-Spam Basics
+@cindex email spam
+@cindex spam
+@cindex UCE
+@cindex unsolicited commercial email
 
-The way to deal with this is having Gnus split out all spam into a
+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
 put it in your @code{From} header of all your news articles.  (I've
 chosen @samp{larsi@@trym.ifi.uio.no}, but for many addresses on the form
 @samp{larsi+usenet@@ifi.uio.no} will be a better choice.  Ask your
-sysadm whether your sendmail installation accepts keywords in the local
+sysadmin whether your sendmail installation accepts keywords in the local
 part of the mail address.)
 
 @lisp
@@ -18174,7 +21306,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
@@ -18196,7 +21328,7 @@ each unsolicited commercial email---at your leisure.
 
 If you are also a lazy net citizen, you will probably prefer complaining
 automatically with the @file{gnus-junk.el} package, available FOR FREE
-at @* @file{<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html>}.
+at @* @uref{http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html}.
 Since most e-mail spam is sent automatically, this may reconcile the
 cosmic balance somewhat.
 
@@ -18206,2718 +21338,2531 @@ spam.  It's a win-win situation.  Forging @code{From} headers to point
 to non-existent domains is yucky, in my opinion.
 
 
-@node Various Various
-@section Various Various
-@cindex mode lines
-@cindex highlights
 
-@table @code
+@node SpamAssassin
+@subsection SpamAssassin, Vipul's Razor, DCC, etc
+@cindex SpamAssassin
+@cindex Vipul's Razor
+@cindex DCC
 
-@item gnus-home-directory
-All Gnus path variables will be initialized from this variable, which
-defaults to @file{~/}.
+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.
 
-@item gnus-directory
-@vindex gnus-directory
-Most Gnus storage path variables will be initialized from this variable,
-which defaults to the @samp{SAVEDIR} environment variable, or
-@file{~/News/} if that variable isn't set.
+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.
 
-Note that Gnus is mostly loaded when the @file{.gnus.el} file is read.
-This means that other directory variables that are initialized from this
-variable won't be set properly if you set this variable in
-@file{.gnus.el}.  Set this variable in @file{.emacs} instead.
+@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
 
-@item gnus-default-directory
-@vindex gnus-default-directory
-Not related to the above variable at all---this variable says what the
-default directory of all Gnus buffers should be.  If you issue commands
-like @kbd{C-x C-f}, the prompt you'll get starts in the current buffer's
-default directory.  If this variable is @code{nil} (which is the
-default), the default directory will be the default directory of the
-buffer you were in when you started Gnus.
+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}):
 
-@item gnus-verbose
-@vindex gnus-verbose
-This variable is an integer between zero and ten.  The higher the value,
-the more messages will be displayed.  If this variable is zero, Gnus
-will never flash any messages, if it is seven (which is the default),
-most important messages will be shown, and if it is ten, Gnus won't ever
-shut up, but will flash so many messages it will make your head swim.
+@lisp
+(setq nnmail-split-methods '(("spam"  "^X-Spam-Flag: YES")
+                             ...))
+@end lisp
 
-@item gnus-verbose-backends
-@vindex gnus-verbose-backends
-This variable works the same way as @code{gnus-verbose}, but it applies
-to the Gnus backends instead of Gnus proper.
+Or using fancy split methods (@pxref{Fancy Mail Splitting}):
 
-@item nnheader-max-head-length
-@vindex nnheader-max-head-length
-When the backends read straight heads of articles, they all try to read
-as little as possible.  This variable (default 4096) specifies
-the absolute max length the backends will try to read before giving up
-on finding a separator line between the head and the body.  If this
-variable is @code{nil}, there is no upper read bound.  If it is
-@code{t}, the backends won't try to read the articles piece by piece,
-but read the entire articles.  This makes sense with some versions of
-@code{ange-ftp} or @code{efs}.
+@lisp
+(setq nnmail-split-methods 'nnmail-split-fancy
+      nnmail-split-fancy '(| ("X-Spam-Flag" "YES" "spam")
+                             ...))
+@end lisp
 
-@item nnheader-head-chop-length
-@vindex nnheader-head-chop-length
-This variable (default 2048) says how big a piece of each article to
-read when doing the operation described above.
+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:
 
-@item nnheader-file-name-translation-alist
-@vindex nnheader-file-name-translation-alist
-@cindex file names
-@cindex invalid characters in file names
-@cindex characters in file names
-This is an alist that says how to translate characters in file names.
-For instance, if @samp{:} is invalid as a file character in file names
-on your system (you OS/2 user you), you could say something like:
+@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
-(setq nnheader-file-name-translation-alist
-      '((?: . ?_)))
+ (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
 
-In fact, this is the default value for this variable on OS/2 and MS
-Windows (phooey) systems.
+@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:
 
-@item gnus-hidden-properties
-@vindex gnus-hidden-properties
-This is a list of properties to use to hide ``invisible'' text.  It is
-@code{(invisible t intangible t)} by default on most systems, which
-makes invisible text invisible and intangible.
+@lisp
+(require 'hashcash)
+(add-hook 'message-send-hook 'mail-add-payment)
+@end lisp
 
-@item gnus-parse-headers-hook
-@vindex gnus-parse-headers-hook
-A hook called before parsing headers.  It can be used, for instance, to
-gather statistics on the headers fetched, or perhaps you'd like to prune
-some headers.  I don't see why you'd want that, though.
+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.
 
-@item gnus-shell-command-separator
-@vindex gnus-shell-command-separator
-String used to separate two shell commands.  The default is @samp{;}.
+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 The End
-@chapter The End
+@node Filtering Spam Using The Spam ELisp Package
+@subsection Filtering Spam Using The Spam ELisp Package
+@cindex spam filtering
+@cindex spam
 
-Well, that's the manual---you can get on with your life now.  Keep in
-touch.  Say hello to your cats from me.
+The idea behind @code{spam.el} is to have a control center for spam detection
+and filtering in Gnus.  To that end, @code{spam.el} does two things: it
+filters incoming mail, and it analyzes mail known to be spam or ham.
+@emph{Ham} is the name used throughout @code{spam.el} to indicate
+non-spam messages.
 
-My @strong{ghod}---I just can't stand goodbyes.  Sniffle.
+So, what happens when you load @code{spam.el}?  First of all, you get
+the following keyboard commands:
 
-Ol' Charles Reznikoff said it pretty well, so I leave the floor to him:
+@table @kbd
 
-@quotation
-@strong{Te Deum}
+@item M-d
+@itemx M s x
+@itemx S x
+@kindex M-d
+@kindex S x
+@kindex M s x
+@findex gnus-summary-mark-as-spam
+@code{gnus-summary-mark-as-spam}.
+
+Mark current article as spam, showing it with the @samp{H} mark.
+Whenever you see a spam article, make sure to mark its summary line
+with @kbd{M-d} before leaving the group.  This is done automatically
+for unread articles in @emph{spam} groups.
+
+@item M s t
+@itemx S t
+@kindex M s t
+@kindex S t
+@findex spam-bogofilter-score
+@code{spam-bogofilter-score}.
+
+You must have Bogofilter installed for that command to work properly.
+
+@xref{Bogofilter}.
 
-@sp 1
-Not because of victories @*
-I sing,@*
-having none,@*
-but for the common sunshine,@*
-the breeze,@*
-the largess of the spring.
+@end table
 
-@sp 1
-Not for victory@*
-but for the day's work done@*
-as well as I was able;@*
-not for a seat upon the dais@*
-but at the common table.@*
-@end quotation
+Also, when you load @code{spam.el}, you will be able to customize its
+variables.  Try @code{customize-group} on the @samp{spam} variable
+group.
 
+The concepts of ham processors and spam processors are very important.
+Ham processors and spam processors for a group can be set with the
+@code{spam-process} group parameter, or the
+@code{gnus-spam-process-newsgroups} variable.  Ham processors take
+mail known to be non-spam (@emph{ham}) and process it in some way so
+that later similar mail will also be considered non-spam.  Spam
+processors take mail known to be spam and process it so similar spam
+will be detected later.
+
+Gnus learns from the spam you get.  You have to collect your spam in
+one or more spam groups, and set or customize the variable
+@code{spam-junk-mailgroups} as appropriate.  You can also declare
+groups to contain spam by setting their group parameter
+@code{spam-contents} to @code{gnus-group-spam-classification-spam}, or
+by customizing the corresponding variable
+@code{gnus-spam-newsgroup-contents}.  The @code{spam-contents} group
+parameter and the @code{gnus-spam-newsgroup-contents} variable can
+also be used to declare groups as @emph{ham} groups if you set their
+classification to @code{gnus-group-spam-classification-ham}.  If
+groups are not classified by means of @code{spam-junk-mailgroups},
+@code{spam-contents}, or @code{gnus-spam-newsgroup-contents}, they are
+considered @emph{unclassified}.  All groups are unclassified by
+default.
 
-@node Appendices
-@chapter Appendices
+In spam groups, all messages are considered to be spam by default:
+they get the @samp{H} mark when you enter the group.  You must review
+these messages from time to time and remove the @samp{H} mark for
+every message that is not spam after all.  To remove the @samp{H}
+mark, you can use @kbd{M-u} to "unread" the article, or @kbd{d} for
+declaring it read the non-spam way.  When you leave a group, all
+spam-marked (@samp{H}) articles are sent to a spam processor which
+will study them as spam samples.
+
+Messages may also be deleted in various other ways, and unless
+@code{spam-ham-marks} gets overridden below, marks @samp{R} and
+@samp{r} for default read or explicit delete, marks @samp{X} and
+@samp{K} for automatic or explicit kills, as well as mark @samp{Y} for
+low scores, are all considered to be associated with articles which
+are not spam.  This assumption might be false, in particular if you
+use kill files or score files as means for detecting genuine spam, you
+should then adjust the @code{spam-ham-marks} variable.
+
+@defvar spam-ham-marks
+You can customize this variable to be the list of marks you want to
+consider ham.  By default, the list contains the deleted, read,
+killed, kill-filed, and low-score marks.
+@end defvar
+
+@defvar spam-spam-marks
+You can customize this variable to be the list of marks you want to
+consider spam.  By default, the list contains only the spam mark.
+@end defvar
+
+When you leave @emph{any} group, regardless of its
+@code{spam-contents} classification, all spam-marked articles are sent
+to a spam processor, which will study these as spam samples.  If you
+explicit kill a lot, you might sometimes end up with articles marked
+@samp{K} which you never saw, and which might accidentally contain
+spam.  Best is to make sure that real spam is marked with @samp{H},
+and nothing else.
+
+When you leave a @emph{spam} group, all spam-marked articles are
+marked as expired after processing with the spam processor.  This is
+not done for @emph{unclassified} or @emph{ham} groups.  Also, any
+@strong{ham} articles in a spam group will be moved to a location
+determined by either the @code{ham-process-destination} group
+parameter or a match in the @code{gnus-ham-process-destinations}
+variable, which is a list of regular expressions matched with group
+names (it's easiest to customize this variable with
+@code{customize-variable gnus-ham-process-destinations}).  The ultimate
+location is a group name.  If the @code{ham-process-destination}
+parameter is not set, spam articles are only expired.
+
+When you leave a @emph{ham} group, all ham-marked articles are sent to
+a ham processor, which will study these as non-spam samples.
+
+When you leave a @emph{ham} or @emph{unclassified} group, all
+@strong{spam} articles are moved to a location determined by either
+the @code{spam-process-destination} group parameter or a match in the
+@code{gnus-spam-process-destinations} variable, which is a list of
+regular expressions matched with group names (it's easiest to
+customize this variable with @code{customize-variable
+gnus-spam-process-destinations}).  The ultimate location is a group
+name.  If the @code{spam-process-destination} parameter is not set,
+the spam articles are only expired.
+
+To use the @code{spam.el} facilities for incoming mail filtering, you
+must add the following to your fancy split list
+@code{nnmail-split-fancy} or @code{nnimap-split-fancy}:
 
-@menu
-* 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.
-* Customization::                  Tailoring Gnus to your needs.
-* 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::     A question-and-answer session.
-@end menu
+@example
+(: spam-split)
+@end example
 
+Note that the fancy split may be called @code{nnmail-split-fancy} or
+@code{nnimap-split-fancy}, depending on whether you use the nnmail or
+nnimap back ends to retrieve your mail.
 
-@node History
-@section History
+The @code{spam-split} function will process incoming mail and send the
+mail considered to be spam into the group name given by the variable
+@code{spam-split-group}.  By default that group name is @samp{spam},
+but you can customize it.
 
-@cindex history
-@sc{gnus} was written by Masanobu @sc{Umeda}.  When autumn crept up in
-'94, Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.
+@emph{Note for IMAP users}
 
-If you want to investigate the person responsible for this outrage,
-you can point your (feh!) web browser to
-@file{http://quimby.gnus.org/~larsi/}.  This is also the primary
-distribution point for the new and spiffy versions of Gnus, and is
-known as The Site That Destroys Newsrcs And Drives People Mad.
+The boolean variable @code{nnimap-split-download-body} needs to be
+set, if you want to split based on the whole message instead of just
+the headers.  By default, the nnimap backend will only retrieve the
+message headers.  If you use spam-check-bogofilter, spam-check-ifile,
+or spam-check-stat (the splitters that can benefit from the full
+message body), you should set this variable.  It is not set by default
+because it will slow IMAP down.
 
-During the first extended alpha period of development, the new Gnus was
-called ``(ding) Gnus''.  @dfn{(ding)} is, of course, short for
-@dfn{ding is not Gnus}, which is a total and utter lie, but who cares?
-(Besides, the ``Gnus'' in this abbreviation should probably be
-pronounced ``news'' as @sc{Umeda} intended, which makes it a more
-appropriate name, don't you think?)
+@xref{Splitting in IMAP}.
 
-In any case, after spending all that energy on coming up with a new and
-spunky name, we decided that the name was @emph{too} spunky, so we
-renamed it back again to ``Gnus''.  But in mixed case.  ``Gnus'' vs.
-``@sc{gnus}''.  New vs. old.
+@emph{TODO: Currently, spam.el only supports insertion of articles
+into a backend.  There is no way to tell spam.el that an article is no
+longer spam or ham.}
+
+@emph{TODO: spam.el needs to provide a uniform way of training all the
+statistical databases.  Some have that functionality built-in, others
+don't.}
+
+The following are the methods you can use to control the behavior of
+@code{spam-split} and their corresponding spam and ham processors:
 
 @menu
-* Gnus Versions::       What Gnus versions have been released.
-* Other Gnus Versions:: Other Gnus versions that also have been released.
-* Why?::                What's the point of Gnus?
-* Compatibility::       Just how compatible is Gnus with @sc{gnus}?
-* Conformity::          Gnus tries to conform to all standards.
-* Emacsen::             Gnus can be run on a few modern Emacsen.
-* Gnus Development::    How Gnus is developed.
-* Contributors::        Oodles of people.
-* New Features::        Pointers to some of the new stuff in Gnus.
-* Newest Features::     Features so new that they haven't been written yet.
+* Blacklists and Whitelists::   
+* BBDB Whitelists::             
+* Blackholes::                  
+* Bogofilter::                  
+* ifile spam filtering::        
+* spam-stat spam filtering::    
+* Extending the spam elisp package::  
 @end menu
 
+@node Blacklists and Whitelists
+@subsubsection Blacklists and Whitelists
+@cindex spam filtering
+@cindex whitelists, spam filtering
+@cindex blacklists, spam filtering
+@cindex spam
 
-@node Gnus Versions
-@subsection Gnus Versions
-@cindex Pterodactyl Gnus
-@cindex ding Gnus
-@cindex September Gnus
-@cindex Quassia 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
-plus 15 Gnus 5.0 releases).
-
-In May 1996 the next Gnus generation (aka. ``September Gnus'' (after 99
-releases)) was released under the name ``Gnus 5.2'' (40 releases).
+@defvar spam-use-blacklist
+Set this variable to @code{t} if you want to use blacklists when
+splitting incoming mail.  Messages whose senders are in the blacklist
+will be sent to the @code{spam-split-group}.  This is an explicit
+filter, meaning that it acts only on mail senders @emph{declared} to
+be spammers.
+@end defvar
+
+@defvar spam-use-whitelist
+Set this variable to @code{t} if you want to use whitelists when
+splitting incoming mail.  Messages whose senders are not in the
+whitelist will be sent to the @code{spam-split-group}.  This is an
+implicit filter, meaning it believes everyone to be a spammer unless
+told otherwise.  Use with care.
+@end defvar
+
+@defvar gnus-group-spam-exit-processor-blacklist
+Add this symbol to a group's @code{spam-process} parameter by
+customizing the group parameters or the
+@code{gnus-spam-process-newsgroups} variable.  When this symbol is
+added to a group's @code{spam-process} parameter, the senders of
+spam-marked articles will be added to the blacklist.
+@end defvar
+
+@defvar gnus-group-ham-exit-processor-whitelist
+Add this symbol to a group's @code{spam-process} parameter by
+customizing the group parameters or the
+@code{gnus-spam-process-newsgroups} variable.  When this symbol is
+added to a group's @code{spam-process} parameter, the senders of
+ham-marked articles in @emph{ham} groups will be added to the
+whitelist.  Note that this ham processor has no effect in @emph{spam}
+or @emph{unclassified} groups.
+@end defvar
+
+Blacklists are lists of regular expressions matching addresses you
+consider to be spam senders.  For instance, to block mail from any
+sender at @samp{vmadmin.com}, you can put @samp{vmadmin.com} in your
+blacklist.  You start out with an empty blacklist.  Blacklist entries
+use the Emacs regular expression syntax.
+
+Conversely, whitelists tell Gnus what addresses are considered
+legitimate.  All non-whitelisted addresses are considered spammers.
+This option is probably not useful for most Gnus users unless the
+whitelists is very comprehensive or permissive.  Also see @ref{BBDB
+Whitelists}.  Whitelist entries use the Emacs regular expression
+syntax.
+
+The blacklist and whitelist file locations can be customized with the
+@code{spam-directory} variable (@file{~/News/spam} by default), or
+the @code{spam-whitelist} and @code{spam-blacklist} variables
+directly.  The whitelist and blacklist files will by default be in the
+@code{spam-directory} directory, named @file{whitelist} and
+@file{blacklist} respectively.
+
+@node BBDB Whitelists
+@subsubsection BBDB Whitelists
+@cindex spam filtering
+@cindex BBDB whitelists, spam filtering
+@cindex BBDB, spam filtering
+@cindex spam
 
-On July 28th 1996 work on Red Gnus was begun, and it was released on
-January 25th 1997 (after 84 releases) as ``Gnus 5.4'' (67 releases).
+@defvar spam-use-BBDB
+
+Analogous to @code{spam-use-whitelist} (@pxref{Blacklists and
+Whitelists}), but uses the BBDB as the source of whitelisted addresses,
+without regular expressions.  You must have the BBDB loaded for
+@code{spam-use-BBDB} to work properly.  Only addresses in the BBDB
+will be allowed through; all others will be classified as spam.
+
+@end defvar
+
+@defvar gnus-group-ham-exit-processor-BBDB
+Add this symbol to a group's @code{spam-process} parameter by
+customizing the group parameters or the
+@code{gnus-spam-process-newsgroups} variable.  When this symbol is
+added to a group's @code{spam-process} parameter, the senders of
+ham-marked articles in @emph{ham} groups will be added to the
+BBDB.  Note that this ham processor has no effect in @emph{spam}
+or @emph{unclassified} groups.
+@end defvar
+
+@node Blackholes
+@subsubsection Blackholes
+@cindex spam filtering
+@cindex blackholes, spam filtering
+@cindex spam
 
-On September 13th 1997, Quassia Gnus was started and lasted 37 releases.
-If was released as ``Gnus 5.6'' on March 8th 1998 (46 releases).
+@defvar spam-use-blackholes
 
-Gnus 5.6 begat Pterodactyl Gnus on August 29th 1998 and was released as
-``Gnus 5.8'' (after 99 releases and a CVS repository) on December 3rd
-1999. 
+This option is disabled by default.  You can let Gnus consult the
+blackhole-type distributed spam processing systems (DCC, for instance)
+when you set this option.  The variable @code{spam-blackhole-servers}
+holds the list of blackhole servers Gnus will consult.  The current
+list is fairly comprehensive, but make sure to let us know if it
+contains outdated servers.
 
-If you happen upon a version of Gnus that has a prefixed name --
-``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' --
-don't panic.  Don't let it know that you're frightened.  Back away.
-Slowly.  Whatever you do, don't run.  Walk away, calmly, until you're
-out of its reach.  Find a proper released version of Gnus and snuggle up
-to that instead.
+The blackhole check uses the @code{dig.el} package, but you can tell
+@code{spam.el} to use @code{dns.el} instead for better performance if
+you set @code{spam-use-dig} to nil.  It is not recommended at this
+time to set @code{spam-use-dig} to nil despite the possible
+performance improvements, because some users may be unable to use it,
+but you can try it and see if it works for you.
 
+@end defvar
 
-@node Other Gnus Versions
-@subsection Other Gnus Versions
-@cindex Semi-gnus
+@defvar spam-blackhole-servers
 
-In addition to the versions of Gnus which have had their releases
-coordinated by Lars, one major development has been Semi-gnus from
-Japan.  It's based on a library called @sc{semi}, which provides
-@sc{mime} capabilities.
+The list of servers to consult for blackhole checks.
 
-These Gnusae are based mainly on Gnus 5.6 and Pterodactyl Gnus.
-Collectively, they are called ``Semi-gnus'', and different strains are
-called T-gnus, ET-gnus, Nana-gnus and Chaos.  These provide powerful
-@sc{mime} and multilingualization things, especially important for
-Japanese users.
+@end defvar
 
+@defvar spam-use-dig
 
-@node Why?
-@subsection Why?
+Use the @code{dig.el} package instead of the @code{dns.el} package.
+The default setting of @code{t} is recommended.
 
-What's the point of Gnus?
+@end defvar
 
-I want to provide a ``rad'', ``happening'', ``way cool'' and ``hep''
-newsreader, that lets you do anything you can think of.  That was my
-original motivation, but while working on Gnus, it has become clear to
-me that this generation of newsreaders really belong in the stone age.
-Newsreaders haven't developed much since the infancy of the net.  If the
-volume continues to rise with the current rate of increase, all current
-newsreaders will be pretty much useless.  How do you deal with
-newsgroups that have thousands of new articles each day?  How do you
-keep track of millions of people who post?
+Blackhole checks are done only on incoming mail.  There is no spam or
+ham processor for blackholes.
 
-Gnus offers no real solutions to these questions, but I would very much
-like to see Gnus being used as a testing ground for new methods of
-reading and fetching news.  Expanding on @sc{Umeda}-san's wise decision
-to separate the newsreader from the backends, Gnus now offers a simple
-interface for anybody who wants to write new backends for fetching mail
-and news from different sources.  I have added hooks for customizations
-everywhere I could imagine it being useful.  By doing so, I'm inviting
-every one of you to explore and invent.
+@node Bogofilter
+@subsubsection Bogofilter
+@cindex spam filtering
+@cindex bogofilter, spam filtering
+@cindex spam
 
-May Gnus never be complete.  @kbd{C-u 100 M-x all-hail-emacs} and
-@kbd{C-u 100 M-x all-hail-xemacs}.
+@defvar spam-use-bogofilter
 
+Set this variable if you want @code{spam-split} to use Eric Raymond's
+speedy Bogofilter.
 
-@node Compatibility
-@subsection Compatibility
+With a minimum of care for associating the @samp{H} mark for spam
+articles only, Bogofilter training all gets fairly automatic.  You
+should do this until you get a few hundreds of articles in each
+category, spam or not.  The command @kbd{S t} in summary mode, either
+for debugging or for curiosity, shows the @emph{spamicity} score of
+the current article (between 0.0 and 1.0).
 
-@cindex compatibility
-Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
-bindings have been kept.  More key bindings have been added, of course,
-but only in one or two obscure cases have old bindings been changed.
+Bogofilter determines if a message is spam based on an internal
+threshold, set at compilation time.  That threshold can't be
+customized.
 
-Our motto is:
-@quotation
-@cartouche
-@center In a cloud bones of steel.
-@end cartouche
-@end quotation
+If the @code{bogofilter} executable is not in your path, Bogofilter
+processing will be turned off.
 
-All commands have kept their names.  Some internal functions have changed
-their names.
+You should not enable this if you use @code{spam-use-bogofilter-headers}.
 
-The @code{gnus-uu} package has changed drastically.  @xref{Decoding
-Articles}.
+@end defvar
 
-One major compatibility question is the presence of several summary
-buffers.  All variables relevant while reading a group are
-buffer-local to the summary buffer they belong in.  Although many
-important variables have their values copied into their global
-counterparts whenever a command is executed in the summary buffer, this
-change might lead to incorrect values being used unless you are careful.
+@defvar spam-use-bogofilter-headers
 
-All code that relies on knowledge of @sc{gnus} internals will probably
-fail.  To take two examples: Sorting @code{gnus-newsrc-alist} (or
-changing it in any way, as a matter of fact) is strictly verboten.  Gnus
-maintains a hash table that points to the entries in this alist (which
-speeds up many functions), and changing the alist directly will lead to
-peculiar results.
+Set this variable if you want @code{spam-split} to use Eric Raymond's
+speedy Bogofilter, looking only at the message headers.  It works
+similarly to @code{spam-use-bogofilter}, but the @code{X-Bogosity} header
+must be in the message already.  Normally you would do this with a
+procmail recipe or something similar; consult the Bogofilter
+installation documents for details.
 
-@cindex hilit19
-@cindex highlighting
-Old hilit19 code does not work at all.  In fact, you should probably
-remove all hilit code from all Gnus hooks
-(@code{gnus-group-prepare-hook} and @code{gnus-summary-prepare-hook}).
-Gnus provides various integrated functions for highlighting.  These are
-faster and more accurate.  To make life easier for everybody, Gnus will
-by default remove all hilit calls from all hilit hooks.  Uncleanliness!
-Away!
+You should not enable this if you use @code{spam-use-bogofilter}.
 
-Packages like @code{expire-kill} will no longer work.  As a matter of
-fact, you should probably remove all old @sc{gnus} packages (and other
-code) when you start using Gnus.  More likely than not, Gnus already
-does what you have written code to make @sc{gnus} do.  (Snicker.)
+@end defvar
 
-Even though old methods of doing things are still supported, only the
-new methods are documented in this manual.  If you detect a new method of
-doing something while reading this manual, that does not mean you have
-to stop doing it the old way.
+@defvar gnus-group-spam-exit-processor-bogofilter
+Add this symbol to a group's @code{spam-process} parameter by
+customizing the group parameters or the
+@code{gnus-spam-process-newsgroups} variable.  When this symbol is
+added to a group's @code{spam-process} parameter, spam-marked articles
+will be added to the Bogofilter spam database.
+@end defvar
 
-Gnus understands all @sc{gnus} startup files.
+@defvar gnus-group-ham-exit-processor-bogofilter
+Add this symbol to a group's @code{spam-process} parameter by
+customizing the group parameters or the
+@code{gnus-spam-process-newsgroups} variable.  When this symbol is
+added to a group's @code{spam-process} parameter, the ham-marked
+articles in @emph{ham} groups will be added to the Bogofilter database
+of non-spam messages.  Note that this ham processor has no effect in
+@emph{spam} or @emph{unclassified} groups.
+@end defvar
 
-@kindex M-x gnus-bug
-@findex gnus-bug
-@cindex reporting bugs
-@cindex bugs
-Overall, a casual user who hasn't written much code that depends on
-@sc{gnus} internals should suffer no problems.  If problems occur,
-please let me know by issuing that magic command @kbd{M-x gnus-bug}.
+@defvar spam-bogofilter-database-directory
 
-@vindex gnus-bug-create-help-buffer
-If you are in the habit of sending bug reports @emph{very} often, you
-may find the helpful help buffer annoying after a while.  If so, set
-@code{gnus-bug-create-help-buffer} to @code{nil} to avoid having it pop
-up at you.
+This is the directory where Bogofilter will store its databases.  It
+is not specified by default, so Bogofilter will use its own default
+database directory.
 
+@end defvar
 
-@node Conformity
-@subsection Conformity
+The Bogofilter mail classifier is similar to ifile in intent and
+purpose.  A ham and a spam processor are provided, plus the
+@code{spam-use-bogofilter} and @code{spam-use-bogofilter-headers}
+variables to indicate to spam-split that Bogofilter should either be
+used, or has already been used on the article.  The 0.9.2.1 version of
+Bogofilter was used to test this functionality.
 
-No rebels without a clue here, ma'am.  We conform to all standards known
-to (wo)man.  Except for those standards and/or conventions we disagree
-with, of course.
+@node ifile spam filtering
+@subsubsection ifile spam filtering
+@cindex spam filtering
+@cindex ifile, spam filtering
+@cindex spam
 
-@table @strong
+@defvar spam-use-ifile
 
-@item RFC 822
-@cindex RFC 822
-There are no known breaches of this standard.
+Enable this variable if you want @code{spam-split} to use ifile, a
+statistical analyzer similar to Bogofilter.
 
-@item RFC 1036
-@cindex RFC 1036
-There are no known breaches of this standard, either.
+@end defvar
 
-@item Son-of-RFC 1036
-@cindex Son-of-RFC 1036
-We do have some breaches to this one.
+@defvar spam-ifile-all-categories
 
-@table @emph
+Enable this variable if you want @code{spam-use-ifile} to give you all
+the ifile categories, not just spam/non-spam.  If you use this, make
+sure you train ifile as described in its documentation.
 
-@item X-Newsreader
-@itemx User-Agent
-These are considered to be ``vanity headers'', while I consider them
-to be consumer information.  After seeing so many badly formatted
-articles coming from @code{tin} and @code{Netscape} I know not to use
-either of those for posting articles.  I would not have known that if
-it wasn't for the @code{X-Newsreader} header.
-@end table
+@end defvar
 
-@item USEFOR
-@cindex USEFOR
-USEFOR is an IETF working group writing a successor to RFC 1036, based
-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.
+@defvar spam-ifile-spam-category
 
-@end table
+This is the category of spam messages as far as ifile is concerned.
+The actual string used is irrelevant, but you probably want to leave
+the default value of @samp{spam}.
+@end defvar
 
-If you ever notice Gnus acting non-compliant with regards to the texts
-mentioned above, don't hesitate to drop a note to Gnus Towers and let us
-know.
+@defvar spam-ifile-database-path
 
+This is the filename for the ifile database.  It is not specified by
+default, so ifile will use its own default database name.
 
-@node Emacsen
-@subsection Emacsen
-@cindex Emacsen
-@cindex XEmacs
-@cindex Mule
-@cindex Emacs
+@end defvar
 
-Gnus should work on :
+The ifile mail classifier is similar to Bogofilter in intent and
+purpose.  A ham and a spam processor are provided, plus the
+@code{spam-use-ifile} variable to indicate to spam-split that ifile
+should be used.  The 1.2.1 version of ifile was used to test this
+functionality.
 
-@itemize @bullet
+@node spam-stat spam filtering
+@subsubsection spam-stat spam filtering
+@cindex spam filtering
+@cindex spam-stat, spam filtering
+@cindex spam-stat
+@cindex spam
 
-@item
-Emacs 20.3 and up.
+@xref{Filtering Spam Using Statistics with spam-stat}.
 
-@item
-XEmacs 20.4 and up.
+@defvar spam-use-stat
 
-@end itemize
+Enable this variable if you want @code{spam-split} to use
+spam-stat.el, an Emacs Lisp statistical analyzer.
 
-This Gnus version will absolutely not work on any Emacsen older than
-that.  Not reliably, at least.  Older versions of Gnus may work on older
-Emacs versions.
+@end defvar
 
-There are some vague differences between Gnus on the various
-platforms---XEmacs features more graphics (a logo and a toolbar)---but
-other than that, things should look pretty much the same under all
-Emacsen.
+@defvar gnus-group-spam-exit-processor-stat
+Add this symbol to a group's @code{spam-process} parameter by
+customizing the group parameters or the
+@code{gnus-spam-process-newsgroups} variable.  When this symbol is
+added to a group's @code{spam-process} parameter, the spam-marked
+articles will be added to the spam-stat database of spam messages.
+@end defvar
 
+@defvar gnus-group-ham-exit-processor-stat
+Add this symbol to a group's @code{spam-process} parameter by
+customizing the group parameters or the
+@code{gnus-spam-process-newsgroups} variable.  When this symbol is
+added to a group's @code{spam-process} parameter, the ham-marked
+articles in @emph{ham} groups will be added to the spam-stat database
+of non-spam messages.  Note that this ham processor has no effect in
+@emph{spam} or @emph{unclassified} groups.
+@end defvar
 
-@node Gnus Development
-@subsection Gnus Development
+This enables spam.el to cooperate with spam-stat.el.  spam-stat.el
+provides an internal (Lisp-only) spam database, which unlike ifile or
+Bogofilter does not require external programs.  A spam and a ham
+processor, and the @code{spam-use-stat} variable for @code{spam-split}
+are provided.
 
-Gnus is developed in a two-phased cycle.  The first phase involves much
-discussion on the @samp{ding@@gnus.org} mailing list, where people
-propose changes and new features, post patches and new backends.  This
-phase is called the @dfn{alpha} phase, since the Gnusae released in this
-phase are @dfn{alpha releases}, or (perhaps more commonly in other
-circles) @dfn{snapshots}.  During this phase, Gnus is assumed to be
-unstable and should not be used by casual users.  Gnus alpha releases
-have names like ``Red Gnus'' and ``Quassia Gnus''.
+@node Extending the spam elisp package
+@subsubsection Extending the spam elisp package
+@cindex spam filtering
+@cindex spam elisp package, extending
+@cindex extending the spam elisp package
 
-After futzing around for 50-100 alpha releases, Gnus is declared
-@dfn{frozen}, and only bug fixes are applied.  Gnus loses the prefix,
-and is called things like ``Gnus 5.6.32'' instead.  Normal people are
-supposed to be able to use these, and these are mostly discussed on the
-@samp{gnu.emacs.gnus} newsgroup.
+Say you want to add a new back end called blackbox.  For filtering
+incoming mail, provide the following:
 
-@cindex Incoming*
-@vindex nnmail-delete-incoming
-Some variable defaults differ between alpha Gnusae and released Gnusae.
-In particular, @code{nnmail-delete-incoming} defaults to @code{nil} in
-alpha Gnusae and @code{t} in released Gnusae.  This is to prevent
-lossage of mail if an alpha release hiccups while handling the mail.
+@enumerate
 
-The division of discussion between the ding mailing list and the Gnus
-newsgroup is not purely based on publicity concerns.  It's true that
-having people write about the horrible things that an alpha Gnus release
-can do (sometimes) in a public forum may scare people off, but more
-importantly, talking about new experimental features that have been
-introduced may confuse casual users.  New features are frequently
-introduced, fiddled with, and judged to be found wanting, and then
-either discarded or totally rewritten.  People reading the mailing list
-usually keep up with these rapid changes, whille people on the newsgroup
-can't be assumed to do so.
+@item
+code
 
+@example
+(defvar spam-use-blackbox nil
+  "True if blackbox should be used.")
+@end example
 
+Add
+@example
+    (spam-use-blackbox  . spam-check-blackbox)
+@end example
+to @code{spam-list-of-checks}.
 
-@node Contributors
-@subsection Contributors
-@cindex contributors
+@item
+functionality
 
-The new Gnus version couldn't have been done without the help of all the
-people on the (ding) mailing list.  Every day for over a year I have
-gotten billions of nice bug reports from them, filling me with joy,
-every single one of them.  Smooches.  The people on the list have been
-tried beyond endurance, what with my ``oh, that's a neat idea <type
-type>, yup, I'll release it right away <ship off> no wait, that doesn't
-work at all <type type>, yup, I'll ship that one off right away <ship
-off> no, wait, that absolutely does not work'' policy for releases.
-Micro$oft---bah.  Amateurs.  I'm @emph{much} worse.  (Or is that
-``worser''? ``much worser''?  ``worsest''?)
+Write the @code{spam-check-blackbox} function.  It should return
+@samp{nil} or @code{spam-split-group}.  See the existing
+@code{spam-check-*} functions for examples of what you can do.
+@end enumerate
 
-I would like to take this opportunity to thank the Academy for...  oops,
-wrong show.
+For processing spam and ham messages, provide the following:
 
-@itemize @bullet
+@enumerate
 
 @item
-Masanobu @sc{Umeda}---the writer of the original @sc{gnus}.
+code 
 
-@item
-Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el, webmail.el,
-nnwarchive and many, many other things connected with @sc{mime} and
-other types of en/decoding, as well as general bug fixing, new
-functionality and stuff.
+Note you don't have to provide a spam or a ham processor.  Only
+provide them if Blackbox supports spam or ham processing.
 
-@item
-Per Abrahamsen---custom, scoring, highlighting and @sc{soup} code (as
-well as numerous other things).
+@example
+(defvar gnus-group-spam-exit-processor-blackbox "blackbox"
+  "The Blackbox summary exit spam processor.
+Only applicable to spam groups.")
 
-@item
-Luis Fernandes---design and graphics.
+(defvar gnus-group-ham-exit-processor-blackbox "blackbox"
+  "The whitelist summary exit ham processor.
+Only applicable to non-spam (unclassified and ham) groups.")
 
-@item
-Justin Sheehy--the FAQ maintainer.
+@end example
 
 @item
-Erik Naggum---help, ideas, support, code and stuff.
+functionality
 
-@item
-Wes Hardaker---@file{gnus-picon.el} and the manual section on
-@dfn{picons} (@pxref{Picons}).
+@example
+(defun spam-blackbox-register-spam-routine ()
+  (spam-generic-register-routine
+   ;; the spam function
+   (lambda (article)
+     (let ((from (spam-fetch-field-from-fast article)))
+       (when (stringp from)
+          (blackbox-do-something-with-this-spammer from))))
+   ;; the ham function
+   nil))
+
+(defun spam-blackbox-register-ham-routine ()
+  (spam-generic-register-routine
+   ;; the spam function
+   nil
+   ;; the ham function
+   (lambda (article)
+     (let ((from (spam-fetch-field-from-fast article)))
+       (when (stringp from)
+          (blackbox-do-something-with-this-ham-sender from))))))
+@end example
 
-@item
-Kim-Minh Kaplan---further work on the picon code.
+Write the @code{blackbox-do-something-with-this-ham-sender} and
+@code{blackbox-do-something-with-this-spammer} functions.  You can add
+more complex code than fetching the message sender, but keep in mind
+that retrieving the whole message takes significantly longer than the
+sender through @code{spam-fetch-field-from-fast}, because the message
+senders are kept in memory by Gnus.
 
-@item
-Brad Miller---@file{gnus-gl.el} and the GroupLens manual section
-(@pxref{GroupLens}).
+@end enumerate
 
-@item
-Sudish Joseph---innumerable bug fixes.
 
-@item
-Ilja Weis---@file{gnus-topic.el}.
+@node Filtering Spam Using Statistics with spam-stat
+@subsection Filtering Spam Using Statistics with spam-stat
+@cindex Paul Graham
+@cindex Graham, Paul
+@cindex naive Bayesian spam filtering
+@cindex Bayesian spam filtering, naive
+@cindex spam filtering, naive Bayesian
+
+Paul Graham has written an excellent essay about spam filtering using
+statistics: @uref{http://www.paulgraham.com/spam.html,A Plan for
+Spam}.  In it he describes the inherent deficiency of rule-based
+filtering as used by SpamAssassin, for example: Somebody has to write
+the rules, and everybody else has to install these rules.  You are
+always late.  It would be much better, he argues, to filter mail based
+on whether it somehow resembles spam or non-spam.  One way to measure
+this is word distribution.  He then goes on to describe a solution
+that checks whether a new mail resembles any of your other spam mails
+or not.
+
+The basic idea is this:  Create a two collections of your mail, one
+with spam, one with non-spam.  Count how often each word appears in
+either collection, weight this by the total number of mails in the
+collections, and store this information in a dictionary.  For every
+word in a new mail, determine its probability to belong to a spam or a
+non-spam mail.  Use the 15 most conspicuous words, compute the total
+probability of the mail being spam.  If this probability is higher
+than a certain threshold, the mail is considered to be spam.
+
+Gnus supports this kind of filtering.  But it needs some setting up.
+First, you need two collections of your mail, one with spam, one with
+non-spam.  Then you need to create a dictionary using these two
+collections, and save it.  And last but not least, you need to use
+this dictionary in your fancy mail splitting rules.
 
-@item
-Steven L. Baur---lots and lots and lots of bugs detections and fixes.
+@menu
+* Creating a spam-stat dictionary::  
+* Splitting mail using spam-stat::  
+* Low-level interface to the spam-stat dictionary::  
+@end menu
 
-@item
-Vladimir Alexiev---the refcard and reference booklets.
+@node Creating a spam-stat dictionary
+@subsubsection Creating a spam-stat dictionary
+
+Before you can begin to filter spam based on statistics, you must
+create these statistics based on two mail collections, one with spam,
+one with non-spam.  These statistics are then stored in a dictionary
+for later use.  In order for these statistics to be meaningful, you
+need several hundred emails in both collections.
+
+Gnus currently supports only the nnml back end for automated dictionary
+creation.  The nnml back end stores all mails in a directory, one file
+per mail.  Use the following:
+
+@defun spam-stat-process-spam-directory
+Create spam statistics for every file in this directory.  Every file
+is treated as one spam mail.
+@end defun
+
+@defun spam-stat-process-non-spam-directory
+Create non-spam statistics for every file in this directory.  Every
+file is treated as one non-spam mail.
+@end defun
+
+Usually you would call @code{spam-stat-process-spam-directory} on a
+directory such as @file{~/Mail/mail/spam} (this usually corresponds
+the the group @samp{nnml:mail.spam}), and you would call
+@code{spam-stat-process-non-spam-directory} on a directory such as
+@file{~/Mail/mail/misc} (this usually corresponds the the group
+@samp{nnml:mail.misc}).
+
+When you are using IMAP, you won't have the mails available locally,
+so that will not work.  One solution is to use the Gnus Agent to cache
+the articles.  Then you can use directories such as
+@file{"~/News/agent/nnimap/mail.yourisp.com/personal_spam"} for
+@code{spam-stat-process-spam-directory}.  @xref{Agent as Cache}.
+
+@defvar spam-stat
+This variable holds the hash-table with all the statistics -- the
+dictionary we have been talking about.  For every word in either
+collection, this hash-table stores a vector describing how often the
+word appeared in spam and often it appeared in non-spam mails.
+@end defvar
+
+If you want to regenerate the statistics from scratch, you need to
+reset the dictionary.
+
+@defun spam-stat-reset
+Reset the @code{spam-stat} hash-table, deleting all the statistics.
+@end defun
+
+When you are done, you must save the dictionary.  The dictionary may
+be rather large.  If you will not update the dictionary incrementally
+(instead, you will recreate it once a month, for example), then you
+can reduce the size of the dictionary by deleting all words that did
+not appear often enough or that do not clearly belong to only spam or
+only non-spam mails.
+
+@defun spam-stat-reduce-size
+Reduce the size of the dictionary.  Use this only if you do not want
+to update the dictionary incrementally.
+@end defun
+
+@defun spam-stat-save
+Save the dictionary.
+@end defun
+
+@defvar spam-stat-file
+The filename used to store the dictionary.  This defaults to
+@file{~/.spam-stat.el}.
+@end defvar
+
+@node Splitting mail using spam-stat
+@subsubsection Splitting mail using spam-stat
+
+In order to use @code{spam-stat} to split your mail, you need to add the
+following to your @file{~/.gnus} file:
 
-@item
-Felix Lee & Jamie Zawinski---I stole some pieces from the XGnus
-distribution by Felix Lee and JWZ.
-
-@item
-Scott Byer---@file{nnfolder.el} enhancements & rewrite.
-
-@item
-Peter Mutsaers---orphan article scoring code.
-
-@item
-Ken Raeburn---POP mail support.
-
-@item
-Hallvard B Furuseth---various bits and pieces, especially dealing with
-.newsrc files.
-
-@item
-Brian Edmonds---@file{gnus-bbdb.el}.
-
-@item
-David Moore---rewrite of @file{nnvirtual.el} and many other things.
-
-@item
-Kevin Davidson---came up with the name @dfn{ding}, so blame him.
-
-@item
-François Pinard---many, many interesting and thorough bug reports, as
-well as autoconf support.
-
-@end itemize
-
-This manual was proof-read by Adrian Aichner, with Ricardo Nassif, Mark
-Borges, and Jost Krieger proof-reading parts of the manual.
-
-The following people have contributed many patches and suggestions:
-
-Christopher Davis,
-Andrew Eskilsson,
-Kai Grossjohann,
-David KÃ¥gedal,
-Richard Pieri,
-Fabrice Popineau,
-Daniel Quinlan,
-Jason L. Tibbitts, III,
-and
-Jack Vinson.
-
-Also thanks to the following for patches and stuff:
-
-Jari Aalto,
-Adrian Aichner,
-Vladimir Alexiev,
-Russ Allbery,
-Peter Arius,
-Matt Armstrong,
-Marc Auslander,
-Miles Bader,
-Alexei V. Barantsev,
-Frank Bennett,
-Robert Bihlmeyer,
-Chris Bone,
-Mark Borges,
-Mark Boyns,
-Lance A. Brown,
-Rob Browning,
-Kees de Bruin,
-Martin Buchholz,
-Joe Buehler,
-Kevin Buhr,
-Alastair Burt,
-Joao Cachopo,
-Zlatko Calusic,
-Massimo Campostrini,
-Castor,
-David Charlap,
-Dan Christensen,
-Kevin Christian,
-Jae-you Chung, @c ?
-James H. Cloos, Jr.,
-Laura Conrad,
-Michael R. Cook,
-Glenn Coombs,
-Andrew J. Cosgriff,
-Neil Crellin,
-Frank D. Cringle,
-Geoffrey T. Dairiki,
-Andre Deparade,
-Ulrik Dickow,
-Dave Disser,
-Rui-Tao Dong, @c ?
-Joev Dubach,
-Michael Welsh Duggan,
-Dave Edmondson,
-Paul Eggert,
-Mark W. Eichin,
-Karl Eichwalder,
-Enami Tsugutomo, @c Enami
-Michael Ernst,
-Luc Van Eycken,
-Sam Falkner,
-Nelson Jose dos Santos Ferreira,
-Sigbjorn Finne,
-Sven Fischer,
-Paul Fisher,
-Decklin Foster,
-Gary D. Foster,
-Paul Franklin,
-Guy Geens,
-Arne Georg Gleditsch,
-David S. Goldberg,
-Michelangelo Grigni,
-Dale Hagglund,
-D. Hall,
-Magnus Hammerin,
-Kenichi Handa, @c Handa
-Raja R. Harinath,
-Yoshiki Hayashi, @c ?
-P. E. Jareth Hein,
-Hisashige Kenji, @c Hisashige
-Scott Hofmann,
-Marc Horowitz,
-Gunnar Horrigmo,
-Richard Hoskins,
-Brad Howes,
-Miguel de Icaza,
-François Felix Ingrand,
-Tatsuya Ichikawa, @c ?
-Ishikawa Ichiro, @c Ishikawa
-Lee Iverson,
-Iwamuro Motonori, @c Iwamuro
-Rajappa Iyer,
-Andreas Jaeger,
-Adam P. Jenkins,
-Randell Jesup,
-Fred Johansen,
-Gareth Jones,
-Simon Josefsson,
-Greg Klanderman,
-Karl Kleinpaste,
-Michael Klingbeil,
-Peter Skov Knudsen,
-Shuhei Kobayashi, @c Kobayashi
-Petr Konecny,
-Koseki Yoshinori, @c Koseki
-Thor Kristoffersen,
-Jens Lautenbacher,
-Martin Larose,
-Seokchan Lee, @c Lee
-Joerg Lenneis,
-Carsten Leonhardt,
-James LewisMoss,
-Christian Limpach,
-Markus Linnala,
-Dave Love,
-Mike McEwan,
-Tonny Madsen,
-Shlomo Mahlab,
-Nat Makarevitch,
-Istvan Marko,
-David Martin,
-Jason R. Mastaler,
-Gordon Matzigkeit,
-Timo Metzemakers,
-Richard Mlynarik,
-Lantz Moore,
-Morioka Tomohiko, @c Morioka
-Erik Toubro Nielsen,
-Hrvoje Niksic,
-Andy Norman,
-Fred Oberhauser,
-C. R. Oldham,
-Alexandre Oliva,
-Ken Olstad,
-Masaharu Onishi, @c Onishi
-Hideki Ono, @c Ono
-Ettore Perazzoli,
-William Perry,
-Stephen Peters,
-Jens-Ulrik Holger Petersen,
-Ulrich Pfeifer,
-Matt Pharr,
-Andy Piper,
-John McClary Prevost,
-Bill Pringlemeir,
-Mike Pullen,
-Jim Radford,
-Colin Rafferty,
-Lasse Rasinen,
-Lars Balker Rasmussen,
-Joe Reiss,
-Renaud Rioboo,
-Roland B. Roberts,
-Bart Robinson,
-Christian von Roques,
-Markus Rost,
-Jason Rumney,
-Wolfgang Rupprecht,
-Jay Sachs,
-Dewey M. Sasser,
-Conrad Sauerwald,
-Loren Schall,
-Dan Schmidt,
-Ralph Schleicher,
-Philippe Schnoebelen,
-Andreas Schwab,
-Randal L. Schwartz,
-Danny Siu,
-Matt Simmons,
-Paul D. Smith,
-Jeff Sparkes,
-Toby Speight,
-Michael Sperber,
-Darren Stalder,
-Richard Stallman,
-Greg Stark,
-Sam Steingold,
-Paul Stevenson,
-Jonas Steverud,
-Paul Stodghill,
-Kiyokazu Suto, @c Suto
-Kurt Swanson,
-Samuel Tardieu,
-Teddy,
-Chuck Thompson,
-Tozawa Akihiko, @c Tozawa
-Philippe Troin,
-James Troup,
-Trung Tran-Duc,
-Jack Twilley,
-Aaron M. Ucko,
-Aki Vehtari,
-Didier Verna,
-Vladimir Volovich,
-Jan Vroonhof,
-Stefan Waldherr,
-Pete Ware,
-Barry A. Warsaw,
-Christoph Wedler,
-Joe Wells,
-Lee Willis,
-Katsumi Yamaoka @c Yamaoka
-and
-Lloyd Zusman.
-
-
-For a full overview of what each person has done, the ChangeLogs
-included in the Gnus alpha distributions should give ample reading
-(550kB and counting).
-
-Apologies to everybody that I've forgotten, of which there are many, I'm
-sure.
-
-Gee, that's quite a list of people.  I guess that must mean that there
-actually are people who are using Gnus.  Who'd'a thunk it!
-
-
-@node New Features
-@subsection New Features
-@cindex new features
-
-@menu
-* ding Gnus::          New things in Gnus 5.0/5.1, the first new Gnus.
-* September Gnus::     The Thing Formally Known As Gnus 5.3/5.3.
-* Red Gnus::           Third time best---Gnus 5.4/5.5.
-* Quassia Gnus::       Two times two is four, or Gnus 5.6/5.7.
-@end menu
-
-These lists are, of course, just @emph{short} overviews of the
-@emph{most} important new features.  No, really.  There are tons more.
-Yes, we have feeping creaturism in full effect.
-
-
-@node ding Gnus
-@subsubsection (ding) Gnus
-
-New features in Gnus 5.0/5.1:
-
-@itemize @bullet
-
-@item
-The look of all buffers can be changed by setting format-like variables
-(@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}).
-
-@item
-Local spool and several @sc{nntp} servers can be used at once
-(@pxref{Select Methods}).
-
-@item
-You can combine groups into virtual groups (@pxref{Virtual Groups}).
-
-@item
-You can read a number of different mail formats (@pxref{Getting Mail}).
-All the mail backends implement a convenient mail expiry scheme
-(@pxref{Expiring Mail}).
-
-@item
-Gnus can use various strategies for gathering threads that have lost
-their roots (thereby gathering loose sub-threads into one thread) or it
-can go back and retrieve enough headers to build a complete thread
-(@pxref{Customizing Threading}).
-
-@item
-Killed groups can be displayed in the group buffer, and you can read
-them as well (@pxref{Listing Groups}).
-
-@item
-Gnus can do partial group updates---you do not have to retrieve the
-entire active file just to check for new articles in a few groups
-(@pxref{The Active File}).
-
-@item
-Gnus implements a sliding scale of subscribedness to groups
-(@pxref{Group Levels}).
-
-@item
-You can score articles according to any number of criteria
-(@pxref{Scoring}).  You can even get Gnus to find out how to score
-articles for you (@pxref{Adaptive Scoring}).
-
-@item
-Gnus maintains a dribble buffer that is auto-saved the normal Emacs
-manner, so it should be difficult to lose much data on what you have
-read if your machine should go down (@pxref{Auto Save}).
-
-@item
-Gnus now has its own startup file (@file{.gnus}) to avoid cluttering up
-the @file{.emacs} file.
-
-@item
-You can set the process mark on both groups and articles and perform
-operations on all the marked items (@pxref{Process/Prefix}).
-
-@item
-You can grep through a subset of groups and create a group from the
-results (@pxref{Kibozed Groups}).
-
-@item
-You can list subsets of groups according to, well, anything
-(@pxref{Listing Groups}).
-
-@item
-You can browse foreign servers and subscribe to groups from those
-servers (@pxref{Browse Foreign Server}).
-
-@item
-Gnus can fetch articles, asynchronously, on a second connection to the
-server (@pxref{Asynchronous Fetching}).
-
-@item
-You can cache articles locally (@pxref{Article Caching}).
-
-@item
-The uudecode functions have been expanded and generalized
-(@pxref{Decoding Articles}).
-
-@item
-You can still post uuencoded articles, which was a little-known feature
-of @sc{gnus}' past (@pxref{Uuencoding and Posting}).
-
-@item
-Fetching parents (and other articles) now actually works without
-glitches (@pxref{Finding the Parent}).
-
-@item
-Gnus can fetch FAQs and group descriptions (@pxref{Group Information}).
-
-@item
-Digests (and other files) can be used as the basis for groups
-(@pxref{Document Groups}).
-
-@item
-Articles can be highlighted and customized (@pxref{Customizing
-Articles}).
-
-@item
-URLs and other external references can be buttonized (@pxref{Article
-Buttons}).
-
-@item
-You can do lots of strange stuff with the Gnus window & frame
-configuration (@pxref{Windows Configuration}).
-
-@item
-You can click on buttons instead of using the keyboard
-(@pxref{Buttons}).
-
-@end itemize
-
-
-@node September Gnus
-@subsubsection September Gnus
-
-@iftex
-@iflatex
-\gnusfig{-28cm}{0cm}{\epsfig{figure=tmp/september.ps,height=20cm}}
-@end iflatex
-@end iftex
-
-New features in Gnus 5.2/5.3:
-
-@itemize @bullet
-
-@item
-A new message composition mode is used.  All old customization variables
-for @code{mail-mode}, @code{rnews-reply-mode} and @code{gnus-msg} are
-now obsolete.
-
-@item
-Gnus is now able to generate @dfn{sparse} threads---threads where
-missing articles are represented by empty nodes (@pxref{Customizing
-Threading}).
-
-@lisp
-(setq gnus-build-sparse-threads 'some)
-@end lisp
-
-@item
-Outgoing articles are stored on a special archive server
-(@pxref{Archived Messages}).
-
-@item
-Partial thread regeneration now happens when articles are
-referred.
-
-@item
-Gnus can make use of GroupLens predictions (@pxref{GroupLens}).
-
-@item
-Picons (personal icons) can be displayed under XEmacs (@pxref{Picons}).
-
-@item
-A @code{trn}-like tree buffer can be displayed (@pxref{Tree Display}).
-
-@lisp
-(setq gnus-use-trees t)
-@end lisp
-
-@item
-An @code{nn}-like pick-and-read minor mode is available for the summary
-buffers (@pxref{Pick and Read}).
-
-@lisp
-(add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
-@end lisp
-
-@item
-In binary groups you can use a special binary minor mode (@pxref{Binary
-Groups}).
-
-@item
-Groups can be grouped in a folding topic hierarchy (@pxref{Group
-Topics}).
-
-@lisp
-(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
-@end lisp
-
-@item
-Gnus can re-send and bounce mail (@pxref{Summary Mail Commands}).
-
-@item
-Groups can now have a score, and bubbling based on entry frequency
-is possible (@pxref{Group Score}).
-
-@lisp
-(add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)
-@end lisp
-
-@item
-Groups can be process-marked, and commands can be performed on
-groups of groups (@pxref{Marking Groups}).
-
-@item
-Caching is possible in virtual groups.
-
-@item
-@code{nndoc} now understands all kinds of digests, mail boxes, rnews
-news batches, ClariNet briefs collections, and just about everything
-else (@pxref{Document Groups}).
-
-@item
-Gnus has a new backend (@code{nnsoup}) to create/read SOUP packets
-(@pxref{SOUP}).
-
-@item
-The Gnus cache is much faster.
-
-@item
-Groups can be sorted according to many criteria (@pxref{Sorting
-Groups}).
-
-@item
-New group parameters have been introduced to set list-addresses and
-expiry times (@pxref{Group Parameters}).
-
-@item
-All formatting specs allow specifying faces to be used
-(@pxref{Formatting Fonts}).
-
-@item
-There are several more commands for setting/removing/acting on process
-marked articles on the @kbd{M P} submap (@pxref{Setting Process Marks}).
-
-@item
-The summary buffer can be limited to show parts of the available
-articles based on a wide range of criteria.  These commands have been
-bound to keys on the @kbd{/} submap (@pxref{Limiting}).
-
-@item
-Articles can be made persistent with the @kbd{*} command
-(@pxref{Persistent Articles}).
-
-@item
-All functions for hiding article elements are now toggles.
-
-@item
-Article headers can be buttonized (@pxref{Article Washing}).
+@example
+(require 'spam-stat)
+(spam-stat-load)
+@end example
 
-@item
-All mail backends support fetching articles by @code{Message-ID}.
+This will load the necessary Gnus code, and the dictionary you
+created.
 
-@item
-Duplicate mail can now be treated properly (@pxref{Duplicates}).
+Next, you need to adapt your fancy splitting rules:  You need to
+determine how to use @code{spam-stat}.  The following examples are for
+the nnml back end.  Using the nnimap back end works just as well.  Just
+use @code{nnimap-split-fancy} instead of @code{nnmail-split-fancy}.
 
-@item
-All summary mode commands are available directly from the article
-buffer (@pxref{Article Keymap}).
+In the simplest case, you only have two groups, @samp{mail.misc} and
+@samp{mail.spam}.  The following expression says that mail is either
+spam or it should go into @samp{mail.misc}.  If it is spam, then
+@code{spam-stat-split-fancy} will return @samp{mail.spam}.
 
-@item
-Frames can be part of @code{gnus-buffer-configuration} (@pxref{Windows
-Configuration}).
+@example
+(setq nnmail-split-fancy
+      `(| (: spam-stat-split-fancy)
+         "mail.misc"))
+@end example
 
-@item
-Mail can be re-scanned by a daemonic process (@pxref{Daemons}).
-@iftex
-@iflatex
-\marginpar[\mbox{}\hfill\epsfig{figure=tmp/fseptember.ps,height=5cm}]{\epsfig{figure=tmp/fseptember.ps,height=5cm}}
-@end iflatex
-@end iftex
+@defvar spam-stat-split-fancy-spam-group
+The group to use for spam.  Default is @samp{mail.spam}.
+@end defvar
 
-@item
-Gnus can make use of NoCeM files to weed out spam (@pxref{NoCeM}).
+If you also filter mail with specific subjects into other groups, use
+the following expression.  Only mails not matching the regular
+expression are considered potential spam.
 
-@lisp
-(setq gnus-use-nocem t)
-@end lisp
+@example
+(setq nnmail-split-fancy
+      `(| ("Subject" "\\bspam-stat\\b" "mail.emacs")
+         (: spam-stat-split-fancy)
+         "mail.misc"))
+@end example
 
-@item
-Groups can be made permanently visible (@pxref{Listing Groups}).
+If you want to filter for spam first, then you must be careful when
+creating the dictionary.  Note that @code{spam-stat-split-fancy} must
+consider both mails in @samp{mail.emacs} and in @samp{mail.misc} as
+non-spam, therefore both should be in your collection of non-spam
+mails, when creating the dictionary!
 
-@lisp
-(setq gnus-permanently-visible-groups "^nnml:")
-@end lisp
+@example
+(setq nnmail-split-fancy
+      `(| (: spam-stat-split-fancy)
+          ("Subject" "\\bspam-stat\\b" "mail.emacs")
+         "mail.misc"))
+@end example
 
-@item
-Many new hooks have been introduced to make customizing easier.
+You can combine this with traditional filtering.  Here, we move all
+HTML-only mails into the @samp{mail.spam.filtered} group.  Note that since
+@code{spam-stat-split-fancy} will never see them, the mails in
+@samp{mail.spam.filtered} should be neither in your collection of spam mails,
+nor in your collection of non-spam mails, when creating the
+dictionary!
 
-@item
-Gnus respects the @code{Mail-Copies-To} header.
+@example
+(setq nnmail-split-fancy
+      `(| ("Content-Type" "text/html" "mail.spam.filtered")
+         (: spam-stat-split-fancy)
+          ("Subject" "\\bspam-stat\\b" "mail.emacs")
+         "mail.misc"))
+@end example
 
-@item
-Threads can be gathered by looking at the @code{References} header
-(@pxref{Customizing Threading}).
 
-@lisp
-(setq gnus-summary-thread-gathering-function
-      'gnus-gather-threads-by-references)
-@end lisp
+@node Low-level interface to the spam-stat dictionary
+@subsubsection Low-level interface to the spam-stat dictionary
 
-@item
-Read articles can be stored in a special backlog buffer to avoid
-refetching (@pxref{Article Backlog}).
+The main interface to using @code{spam-stat}, are the following functions:
 
-@lisp
-(setq gnus-keep-backlog 50)
-@end lisp
+@defun spam-stat-buffer-is-spam
+Called in a buffer, that buffer is considered to be a new spam mail.
+Use this for new mail that has not been processed before.
+@end defun
 
-@item
-A clean copy of the current article is always stored in a separate
-buffer to allow easier treatment.
+@defun spam-stat-buffer-is-no-spam
+Called in a buffer, that buffer is considered to be a new non-spam
+mail.  Use this for new mail that has not been processed before.
+@end defun
 
-@item
-Gnus can suggest where to save articles (@pxref{Saving Articles}).
+@defun spam-stat-buffer-change-to-spam
+Called in a buffer, that buffer is no longer considered to be normal
+mail but spam.  Use this to change the status of a mail that has
+already been processed as non-spam.
+@end defun
 
-@item
-Gnus doesn't have to do as much prompting when saving (@pxref{Saving
-Articles}).
+@defun spam-stat-buffer-change-to-non-spam
+Called in a buffer, that buffer is no longer considered to be spam but
+normal mail.  Use this to change the status of a mail that has already
+been processed as spam.
+@end defun
 
-@lisp
-(setq gnus-prompt-before-saving t)
-@end lisp
+@defun spam-stat-save
+Save the hash table to the file.  The filename used is stored in the
+variable @code{spam-stat-file}.
+@end defun
 
-@item
-@code{gnus-uu} can view decoded files asynchronously while fetching
-articles (@pxref{Other Decode Variables}).
+@defun spam-stat-load
+Load the hash table from a file.  The filename used is stored in the
+variable @code{spam-stat-file}.
+@end defun
 
-@lisp
-(setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view)
-@end lisp
+@defun spam-stat-score-word
+Return the spam score for a word.
+@end defun
 
-@item
-Filling in the article buffer now works properly on cited text
-(@pxref{Article Washing}).
+@defun spam-stat-score-buffer
+Return the spam score for a buffer.
+@end defun
 
-@item
-Hiding cited text adds buttons to toggle hiding, and how much
-cited text to hide is now customizable (@pxref{Article Hiding}).
+@defun spam-stat-split-fancy
+Use this function for fancy mail splitting.  Add the rule @samp{(:
+spam-stat-split-fancy)} to @code{nnmail-split-fancy}
+@end defun
 
-@lisp
-(setq gnus-cited-lines-visible 2)
-@end lisp
+Make sure you load the dictionary before using it.  This requires the
+following in your @file{~/.gnus} file:
 
-@item
-Boring headers can be hidden (@pxref{Article Hiding}).
+@example
+(require 'spam-stat)
+(spam-stat-load)
+@end example
 
-@item
-Default scoring values can now be set from the menu bar.
+Typical test will involve calls to the following functions:
 
-@item
-Further syntax checking of outgoing articles have been added.
+@example
+Reset: (setq spam-stat (make-hash-table :test 'equal))
+Learn spam: (spam-stat-process-spam-directory "~/Mail/mail/spam")
+Learn non-spam: (spam-stat-process-non-spam-directory "~/Mail/mail/misc")
+Save table: (spam-stat-save)
+File size: (nth 7 (file-attributes spam-stat-file))
+Number of words: (hash-table-count spam-stat)
+Test spam: (spam-stat-test-directory "~/Mail/mail/spam")
+Test non-spam: (spam-stat-test-directory "~/Mail/mail/misc")
+Reduce table size: (spam-stat-reduce-size)
+Save table: (spam-stat-save)
+File size: (nth 7 (file-attributes spam-stat-file))
+Number of words: (hash-table-count spam-stat)
+Test spam: (spam-stat-test-directory "~/Mail/mail/spam")
+Test non-spam: (spam-stat-test-directory "~/Mail/mail/misc")
+@end example
 
-@end itemize
+Here is how you would create your dictionary:
 
+@example
+Reset: (setq spam-stat (make-hash-table :test 'equal))
+Learn spam: (spam-stat-process-spam-directory "~/Mail/mail/spam")
+Learn non-spam: (spam-stat-process-non-spam-directory "~/Mail/mail/misc")
+Repeat for any other non-spam group you need...
+Reduce table size: (spam-stat-reduce-size)
+Save table: (spam-stat-save)
+@end example
 
-@node Red Gnus
-@subsubsection Red Gnus
+@node Various Various
+@section Various Various
+@cindex mode lines
+@cindex highlights
 
-New features in Gnus 5.4/5.5:
+@table @code
 
-@iftex
-@iflatex
-\gnusfig{-5.5cm}{-4cm}{\epsfig{figure=tmp/red.ps,height=20cm}}
-@end iflatex
-@end iftex
+@item gnus-home-directory
+All Gnus file and directory variables will be initialized from this
+variable, which defaults to @file{~/}.
 
-@itemize @bullet
+@item gnus-directory
+@vindex gnus-directory
+Most Gnus storage file and directory variables will be initialized from
+this variable, which defaults to the @samp{SAVEDIR} environment
+variable, or @file{~/News/} if that variable isn't set.
 
-@item
-@file{nntp.el} has been totally rewritten in an asynchronous fashion.
+Note that Gnus is mostly loaded when the @file{.gnus.el} file is read.
+This means that other directory variables that are initialized from this
+variable won't be set properly if you set this variable in
+@file{.gnus.el}.  Set this variable in @file{.emacs} instead.
 
-@item
-Article prefetching functionality has been moved up into
-Gnus (@pxref{Asynchronous Fetching}).
+@item gnus-default-directory
+@vindex gnus-default-directory
+Not related to the above variable at all---this variable says what the
+default directory of all Gnus buffers should be.  If you issue commands
+like @kbd{C-x C-f}, the prompt you'll get starts in the current buffer's
+default directory.  If this variable is @code{nil} (which is the
+default), the default directory will be the default directory of the
+buffer you were in when you started Gnus.
 
-@item
-Scoring can now be performed with logical operators like @code{and},
-@code{or}, @code{not}, and parent redirection (@pxref{Advanced
-Scoring}).
+@item gnus-verbose
+@vindex gnus-verbose
+This variable is an integer between zero and ten.  The higher the value,
+the more messages will be displayed.  If this variable is zero, Gnus
+will never flash any messages, if it is seven (which is the default),
+most important messages will be shown, and if it is ten, Gnus won't ever
+shut up, but will flash so many messages it will make your head swim.
 
-@item
-Article washing status can be displayed in the
-article mode line (@pxref{Misc Article}).
+@item gnus-verbose-backends
+@vindex gnus-verbose-backends
+This variable works the same way as @code{gnus-verbose}, but it applies
+to the Gnus back ends instead of Gnus proper.
 
-@item
-@file{gnus.el} has been split into many smaller files.
+@item nnheader-max-head-length
+@vindex nnheader-max-head-length
+When the back ends read straight heads of articles, they all try to read
+as little as possible.  This variable (default 4096) specifies
+the absolute max length the back ends will try to read before giving up
+on finding a separator line between the head and the body.  If this
+variable is @code{nil}, there is no upper read bound.  If it is
+@code{t}, the back ends won't try to read the articles piece by piece,
+but read the entire articles.  This makes sense with some versions of
+@code{ange-ftp} or @code{efs}.
 
-@item
-Suppression of duplicate articles based on Message-ID can be done
-(@pxref{Duplicate Suppression}).
+@item nnheader-head-chop-length
+@vindex nnheader-head-chop-length
+This variable (default 2048) says how big a piece of each article to
+read when doing the operation described above.
+
+@item nnheader-file-name-translation-alist
+@vindex nnheader-file-name-translation-alist
+@cindex file names
+@cindex invalid characters in file names
+@cindex characters in file names
+This is an alist that says how to translate characters in file names.
+For instance, if @samp{:} is invalid as a file character in file names
+on your system (you OS/2 user you), you could say something like:
 
 @lisp
-(setq gnus-suppress-duplicates t)
+(setq nnheader-file-name-translation-alist
+      '((?: . ?_)))
 @end lisp
 
-@item
-New variables for specifying what score and adapt files are to be
-considered home score and adapt files (@pxref{Home Score File}) have
-been added.
+In fact, this is the default value for this variable on OS/2 and MS
+Windows (phooey) systems.
 
-@item
-@code{nndoc} was rewritten to be easily extendable (@pxref{Document
-Server Internals}).
+@item gnus-hidden-properties
+@vindex gnus-hidden-properties
+This is a list of properties to use to hide ``invisible'' text.  It is
+@code{(invisible t intangible t)} by default on most systems, which
+makes invisible text invisible and intangible.
 
-@item
-Groups can inherit group parameters from parent topics (@pxref{Topic
-Parameters}).
+@item gnus-parse-headers-hook
+@vindex gnus-parse-headers-hook
+A hook called before parsing headers.  It can be used, for instance, to
+gather statistics on the headers fetched, or perhaps you'd like to prune
+some headers.  I don't see why you'd want that, though.
 
-@item
-Article editing has been revamped and is now actually usable.
+@item gnus-shell-command-separator
+@vindex gnus-shell-command-separator
+String used to separate two shell commands.  The default is @samp{;}.
 
-@item
-Signatures can be recognized in more intelligent fashions
-(@pxref{Article Signature}).
+@item gnus-invalid-group-regexp
+@vindex gnus-invalid-group-regexp
 
-@item
-Summary pick mode has been made to look more @code{nn}-like.  Line
-numbers are displayed and the @kbd{.} command can be used to pick
-articles (@code{Pick and Read}).
+Regexp to match ``invalid'' group names when querying user for a group
+name.  The default value catches some @strong{really} invalid group
+names who could possibly mess up Gnus internally (like allowing
+@samp{:} in a group name, which is normally used to delimit method and
+group).
 
-@item
-Commands for moving the @file{.newsrc.eld} from one server to
-another have been added (@pxref{Changing Servers}).
+@sc{imap} users might want to allow @samp{/} in group names though.
 
-@item
-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-_}
-(@pxref{Undo}).
+@end table
 
-@item
-Scoring can be done on words using the new score type @code{w}
-(@pxref{Score File Format}).
+@node The End
+@chapter The End
 
-@item
-Adaptive scoring can be done on a Subject word-by-word basis
-(@pxref{Adaptive Scoring}).
+Well, that's the manual---you can get on with your life now.  Keep in
+touch.  Say hello to your cats from me.
 
-@lisp
-(setq gnus-use-adaptive-scoring '(word))
-@end lisp
+My @strong{ghod}---I just can't stand goodbyes.  Sniffle.
 
-@item
-Scores can be decayed (@pxref{Score Decays}).
+Ol' Charles Reznikoff said it pretty well, so I leave the floor to him:
 
-@lisp
-(setq gnus-decay-scores t)
-@end lisp
+@quotation
+@strong{Te Deum}
 
-@item
-Scoring can be performed using a regexp on the Date header.  The Date is
-normalized to compact ISO 8601 format first (@pxref{Score File Format}).
+@sp 1
+Not because of victories @*
+I sing,@*
+having none,@*
+but for the common sunshine,@*
+the breeze,@*
+the largess of the spring.
+
+@sp 1
+Not for victory@*
+but for the day's work done@*
+as well as I was able;@*
+not for a seat upon the dais@*
+but at the common table.@*
+@end quotation
 
-@item
-A new command has been added to remove all data on articles from
-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}
-(@pxref{Really Various Summary Commands}).
+@node Appendices
+@chapter Appendices
 
-@item
-Process mark sets can be pushed and popped (@pxref{Setting Process
-Marks}).
+@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.
+* Customization::               Tailoring Gnus to your needs.
+* 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::
+@end menu
 
-@item
-A new mail-to-news backend makes it possible to post even when the @sc{nntp}
-server doesn't allow posting (@pxref{Mail-To-News Gateways}).
 
-@item
-A new backend for reading searches from Web search engines
-(@dfn{DejaNews}, @dfn{Alta Vista}, @dfn{InReference}) has been added
-(@pxref{Web Searches}).
+@node XEmacs
+@section XEmacs
+@cindex XEmacs
+@cindex Installing under XEmacs
 
-@item
-Groups inside topics can now be sorted using the standard sorting
-functions, and each topic can be sorted independently (@pxref{Topic
-Sorting}).
+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}, @samp{sh-script} and @samp{fsf-compat}.  The
+@samp{misc-games} package is required for Morse decoding.
 
-@item
-Subsets of the groups can be sorted independently (@code{Sorting
-Groups}).
 
-@item
-Cached articles can be pulled into the groups (@pxref{Summary Generation
-Commands}).
-@iftex
-@iflatex
-\marginpar[\mbox{}\hfill\epsfig{figure=tmp/fred.ps,width=3cm}]{\epsfig{figure=tmp/fred.ps,width=3cm}}
-@end iflatex
-@end iftex
+@node History
+@section History
 
-@item
-Score files are now applied in a more reliable order (@pxref{Score
-Variables}).
+@cindex history
+@sc{gnus} was written by Masanobu @sc{Umeda}.  When autumn crept up in
+'94, Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.
 
-@item
-Reports on where mail messages end up can be generated (@pxref{Splitting
-Mail}).
+If you want to investigate the person responsible for this outrage,
+you can point your (feh!) web browser to
+@uref{http://quimby.gnus.org/}.  This is also the primary
+distribution point for the new and spiffy versions of Gnus, and is
+known as The Site That Destroys Newsrcs And Drives People Mad.
 
-@item
-More hooks and functions have been added to remove junk from incoming
-mail before saving the mail (@pxref{Washing Mail}).
+During the first extended alpha period of development, the new Gnus was
+called ``(ding) Gnus''.  @dfn{(ding)} is, of course, short for
+@dfn{ding is not Gnus}, which is a total and utter lie, but who cares?
+(Besides, the ``Gnus'' in this abbreviation should probably be
+pronounced ``news'' as @sc{Umeda} intended, which makes it a more
+appropriate name, don't you think?)
 
-@item
-Emphasized text can be properly fontisized:
+In any case, after spending all that energy on coming up with a new and
+spunky name, we decided that the name was @emph{too} spunky, so we
+renamed it back again to ``Gnus''.  But in mixed case.  ``Gnus'' vs.
+``@sc{gnus}''.  New vs. old.
 
-@end itemize
+@menu
+* Gnus Versions::               What Gnus versions have been released.
+* Other Gnus Versions::         Other Gnus versions that also have been released.
+* Why?::                        What's the point of Gnus?
+* Compatibility::               Just how compatible is Gnus with @sc{gnus}?
+* Conformity::                  Gnus tries to conform to all standards.
+* Emacsen::                     Gnus can be run on a few modern Emacsen.
+* Gnus Development::            How Gnus is developed.
+* Contributors::                Oodles of people.
+* New Features::                Pointers to some of the new stuff in Gnus.
+@end menu
 
 
-@node Quassia Gnus
-@subsubsection Quassia Gnus
+@node Gnus Versions
+@subsection Gnus Versions
+@cindex ding Gnus
+@cindex September Gnus
+@cindex Red Gnus
+@cindex Quassia Gnus
+@cindex Pterodactyl Gnus
+@cindex Oort Gnus
+@cindex No Gnus
 
-New features in Gnus 5.6:
+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
+plus 15 Gnus 5.0 releases).
 
-@itemize @bullet
+In May 1996 the next Gnus generation (aka. ``September Gnus'' (after 99
+releases)) was released under the name ``Gnus 5.2'' (40 releases).
 
-@item
-New functionality for using Gnus as an offline newsreader has been
-added.  A plethora of new commands and modes have been added.  See
-@pxref{Gnus Unplugged} for the full story.
+On July 28th 1996 work on Red Gnus was begun, and it was released on
+January 25th 1997 (after 84 releases) as ``Gnus 5.4'' (67 releases).
 
-@item
- The @code{nndraft} backend has returned, but works differently than
-before.  All Message buffers are now also articles in the @code{nndraft}
-group, which is created automatically.
+On September 13th 1997, Quassia Gnus was started and lasted 37 releases.
+If was released as ``Gnus 5.6'' on March 8th 1998 (46 releases).
 
-@item
-@code{gnus-alter-header-function} can now be used to alter header
-values.
+Gnus 5.6 begat Pterodactyl Gnus on August 29th 1998 and was released as
+``Gnus 5.8'' (after 99 releases and a CVS repository) on December 3rd
+1999.
 
-@item
- @code{gnus-summary-goto-article} now accept Message-ID's.
+On the 26th of October 2000, Oort Gnus was begun.
 
-@item
- A new Message command for deleting text in the body of a message
-outside the region: @kbd{C-c C-v}.
+If you happen upon a version of Gnus that has a prefixed name --
+``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'',
+``Pterodactyl Gnus'', ``Oort Gnus'' -- don't panic.  Don't let it know
+that you're frightened.  Back away.  Slowly.  Whatever you do, don't
+run.  Walk away, calmly, until you're out of its reach.  Find a proper
+released version of Gnus and snuggle up to that instead.
 
-@item
- You can now post to component group in @code{nnvirtual} groups with
-@kbd{C-u C-c C-c}.
 
-@item
- @code{nntp-rlogin-program}---new variable to ease customization.
+@node Other Gnus Versions
+@subsection Other Gnus Versions
+@cindex Semi-gnus
 
-@item
- @code{C-u C-c C-c} in @code{gnus-article-edit-mode} will now inhibit
-re-highlighting of the article buffer.
+In addition to the versions of Gnus which have had their releases
+coordinated by Lars, one major development has been Semi-gnus from
+Japan.  It's based on a library called @sc{semi}, which provides
+@sc{mime} capabilities.
 
-@item
- New element in @code{gnus-boring-article-headers}---@code{long-to}.
+These Gnusae are based mainly on Gnus 5.6 and Pterodactyl Gnus.
+Collectively, they are called ``Semi-gnus'', and different strains are
+called T-gnus, ET-gnus, Nana-gnus and Chaos.  These provide powerful
+@sc{mime} and multilingualization things, especially important for
+Japanese users.
 
-@item
- @kbd{M-i} symbolic prefix command.  See the section "Symbolic
-Prefixes" in the Gnus manual for details.
 
-@item
- @kbd{L} and @kbd{I} in the summary buffer now take the symbolic prefix
-@kbd{a} to add the score rule to the "all.SCORE" file.
+@node Why?
+@subsection Why?
 
-@item
- @code{gnus-simplify-subject-functions} variable to allow greater
-control over simplification.
+What's the point of Gnus?
 
-@item
- @kbd{A T}---new command for fetching the current thread.
+I want to provide a ``rad'', ``happening'', ``way cool'' and ``hep''
+newsreader, that lets you do anything you can think of.  That was my
+original motivation, but while working on Gnus, it has become clear to
+me that this generation of newsreaders really belong in the stone age.
+Newsreaders haven't developed much since the infancy of the net.  If the
+volume continues to rise with the current rate of increase, all current
+newsreaders will be pretty much useless.  How do you deal with
+newsgroups that have thousands of new articles each day?  How do you
+keep track of millions of people who post?
 
-@item
- @kbd{/ T}---new command for including the current thread in the
-limit.
+Gnus offers no real solutions to these questions, but I would very much
+like to see Gnus being used as a testing ground for new methods of
+reading and fetching news.  Expanding on @sc{Umeda}-san's wise decision
+to separate the newsreader from the back ends, Gnus now offers a simple
+interface for anybody who wants to write new back ends for fetching mail
+and news from different sources.  I have added hooks for customizations
+everywhere I could imagine it being useful.  By doing so, I'm inviting
+every one of you to explore and invent.
 
-@item
- @kbd{M-RET} is a new Message command for breaking cited text.
+May Gnus never be complete.  @kbd{C-u 100 M-x all-hail-emacs} and
+@kbd{C-u 100 M-x all-hail-xemacs}.
 
-@item
- @samp{\\1}-expressions are now valid in @code{nnmail-split-methods}.
 
-@item
- The @code{custom-face-lookup} function has been removed.
-If you used this function in your initialization files, you must
-rewrite them to use @code{face-spec-set} instead.
+@node Compatibility
+@subsection Compatibility
 
-@item
- Canceling now uses the current select method.  Symbolic prefix
-@kbd{a} forces normal posting method.
+@cindex compatibility
+Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
+bindings have been kept.  More key bindings have been added, of course,
+but only in one or two obscure cases have old bindings been changed.
 
-@item
- New command to translate M******** sm*rtq**t*s into proper
-text---@kbd{W d}.
+Our motto is:
+@quotation
+@cartouche
+@center In a cloud bones of steel.
+@end cartouche
+@end quotation
 
-@item
- For easier debugging of @code{nntp}, you can set
-@code{nntp-record-commands} to a non-@code{nil} value.
+All commands have kept their names.  Some internal functions have changed
+their names.
 
-@item
- @code{nntp} now uses @file{~/.authinfo}, a @file{.netrc}-like file, for
-controlling where and how to send @sc{authinfo} to @sc{nntp} servers.
+The @code{gnus-uu} package has changed drastically.  @xref{Decoding
+Articles}.
 
-@item
- A command for editing group parameters from the summary buffer
-has been added.
+One major compatibility question is the presence of several summary
+buffers.  All variables relevant while reading a group are
+buffer-local to the summary buffer they belong in.  Although many
+important variables have their values copied into their global
+counterparts whenever a command is executed in the summary buffer, this
+change might lead to incorrect values being used unless you are careful.
 
-@item
- A history of where mails have been split is available.
+All code that relies on knowledge of @sc{gnus} internals will probably
+fail.  To take two examples: Sorting @code{gnus-newsrc-alist} (or
+changing it in any way, as a matter of fact) is strictly verboten.  Gnus
+maintains a hash table that points to the entries in this alist (which
+speeds up many functions), and changing the alist directly will lead to
+peculiar results.
 
-@item
- A new article date command has been added---@code{article-date-iso8601}.
+@cindex hilit19
+@cindex highlighting
+Old hilit19 code does not work at all.  In fact, you should probably
+remove all hilit code from all Gnus hooks
+(@code{gnus-group-prepare-hook} and @code{gnus-summary-prepare-hook}).
+Gnus provides various integrated functions for highlighting.  These are
+faster and more accurate.  To make life easier for everybody, Gnus will
+by default remove all hilit calls from all hilit hooks.  Uncleanliness!
+Away!
 
-@item
- Subjects can be simplified when threading by setting
-@code{gnus-score-thread-simplify}.
+Packages like @code{expire-kill} will no longer work.  As a matter of
+fact, you should probably remove all old @sc{gnus} packages (and other
+code) when you start using Gnus.  More likely than not, Gnus already
+does what you have written code to make @sc{gnus} do.  (Snicker.)
 
-@item
- A new function for citing in Message has been
-added---@code{message-cite-original-without-signature}.
+Even though old methods of doing things are still supported, only the
+new methods are documented in this manual.  If you detect a new method of
+doing something while reading this manual, that does not mean you have
+to stop doing it the old way.
 
-@item
- @code{article-strip-all-blank-lines}---new article command.
+Gnus understands all @sc{gnus} startup files.
 
-@item
- A new Message command to kill to the end of the article has
-been added.
+@kindex M-x gnus-bug
+@findex gnus-bug
+@cindex reporting bugs
+@cindex bugs
+Overall, a casual user who hasn't written much code that depends on
+@sc{gnus} internals should suffer no problems.  If problems occur,
+please let me know by issuing that magic command @kbd{M-x gnus-bug}.
+
+@vindex gnus-bug-create-help-buffer
+If you are in the habit of sending bug reports @emph{very} often, you
+may find the helpful help buffer annoying after a while.  If so, set
+@code{gnus-bug-create-help-buffer} to @code{nil} to avoid having it pop
+up at you.
 
-@item
- A minimum adaptive score can be specified by using the
-@code{gnus-adaptive-word-minimum} variable.
 
-@item
- The "lapsed date" article header can be kept continually
-updated by the @code{gnus-start-date-timer} command.
+@node Conformity
+@subsection Conformity
 
-@item
- Web listserv archives can be read with the @code{nnlistserv} backend.
+No rebels without a clue here, ma'am.  We conform to all standards known
+to (wo)man.  Except for those standards and/or conventions we disagree
+with, of course.
 
-@item
- Old dejanews archives can now be read by @code{nnweb}.
+@table @strong
 
-@end itemize
+@item RFC (2)822
+@cindex RFC 822
+@cindex RFC 2822
+There are no known breaches of this standard.
 
+@item RFC 1036
+@cindex RFC 1036
+There are no known breaches of this standard, either.
 
-@node Newest Features
-@subsection Newest Features
-@cindex todo
+@item Son-of-RFC 1036
+@cindex Son-of-RFC 1036
+We do have some breaches to this one.
 
-Also known as the @dfn{todo list}.  Sure to be implemented before the
-next millennium.
+@table @emph
 
-Be afraid.  Be very afraid.
+@item X-Newsreader
+@itemx User-Agent
+These are considered to be ``vanity headers'', while I consider them
+to be consumer information.  After seeing so many badly formatted
+articles coming from @code{tin} and @code{Netscape} I know not to use
+either of those for posting articles.  I would not have known that if
+it wasn't for the @code{X-Newsreader} header.
+@end table
 
-(That a feature appears in this list doesn't necessarily mean that I've
-decided to actually implement it.  It just means that I think it sounds
-interesting.)
+@item USEFOR
+@cindex USEFOR
+USEFOR is an IETF working group writing a successor to RFC 1036, based
+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.
 
-(Yes, this is the actual, up-to-the-second todo list.)
+@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 (superseded 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}.
 
-@itemize @bullet
+@end table
 
-@item
- I would like the zombie-page to contain an URL to the source of the
-latest version of gnus or some explanation on where to find it.
+If you ever notice Gnus acting non-compliant with regards to the texts
+mentioned above, don't hesitate to drop a note to Gnus Towers and let us
+know.
 
-@item
- A way to continue editing the latest Message composition.
 
-@item
- http://www.sonicnet.com/feature/ari3/
+@node Emacsen
+@subsection Emacsen
+@cindex Emacsen
+@cindex XEmacs
+@cindex Mule
+@cindex Emacs
 
-@item
- facep is not declared.
+Gnus should work on :
 
-@item
- Include a section in the manual on why the number of articles
-isn't the same in the group buffer and on the SPC prompt.
+@itemize @bullet
 
 @item
- Interacting with rmail fcc isn't easy.
+Emacs 20.3 and up.
 
 @item
-@example
- Hypermail:
-<URL:http://www.falch.no/people/pepper/DSSSL-Lite/archives/>
-<URL:http://www.eit.com/software/hypermail/hypermail.html>
-<URL:http://homer.ncm.com/>
-<URL:http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/HTML_Converters/>
-http://www.uwsg.indiana.edu/hypermail/linux/kernel/9610/index.html
-<URL:http://union.ncsa.uiuc.edu/HyperNews/get/www/html/converters.html>
-http://www.miranova.com/gnus-list/
-
-@end example
+XEmacs 20.4 and up.
 
-@item
-@samp{^-- } is made into - in LaTeX.
+@end itemize
 
-@item
- gnus-kill is much slower than it was in GNUS 4.1.3.
+This Gnus version will absolutely not work on any Emacsen older than
+that.  Not reliably, at least.  Older versions of Gnus may work on older
+Emacs versions.
 
-@item
- when expunging articles on low score, the sparse nodes keep hanging on?
-@item
- starting the first time seems to hang Gnus on some systems.  Does
-NEWGROUPS answer too fast?
-@item
- nndir doesn't read gzipped files.
-@item
- FAQ doesn't have an up node?
-@item
- when moving mail from a procmail spool to the crash-box,
-the crash-box is only appropriate to one specific group.
-@item
- `t' `t' makes X-Faces disappear.
-@item
- nnmh-be-safe means that crossposted articles will
-be marked as unread.
-@item
- Orphan score entries don't show on "V t" score trace
-@item
- when clearing out data, the cache data should also be reset.
-@item
- rewrite gnus-summary-limit-children to be non-recursive
-to avoid exceeding lisp nesting on huge groups.
-@item
- expunged articles are counted when computing scores.
-@item
- implement gnus-batch-brew-soup
-@item
- ticked articles aren't easy to read in pick mode -- `n' and
-stuff just skips past them.  Read articles are the same.
-@item
- topics that contain just groups with ticked
-articles aren't displayed.
-@item
- nndoc should always allocate unique Message-IDs.
-@item
- If there are mail groups the first time you use Gnus, Gnus'll
-make the mail groups killed.
-@item
- no "no news is good news" when using topics.
-@item
- when doing crosspost marking, the cache has to be consulted
-and articles have to be removed.
-@item
- nnweb should fetch complete articles when they are split into several
-parts.
-@item
- scoring on head immediate doesn't work.
-@item
- finding short score file names takes forever.
-@item
- canceling articles in foreign groups.
-@item
- nntp-open-rlogin no longer works.
-@item
- C-u C-x C-s (Summary) switches to the group buffer.
-@item
- move nnmail-split-history out to the backends.
-@item
- nnweb doesn't work properly.
-@item
- using a virtual server name as `gnus-select-method' doesn't work?
-@item
- when killing/yanking a group from one topic to another in a slave, the
-master will yank it first to one topic and then add it to another.
-Perhaps.
+There are some vague differences between Gnus on the various
+platforms---XEmacs features more graphics (a logo and a toolbar)---but
+other than that, things should look pretty much the same under all
+Emacsen.
 
-@item
- warn user about `=' redirection of a group in the active file?
-@item
- take over the XEmacs menubar and offer a toggle between the XEmacs
-bar and the Gnus bar.
-@item
-@example
- push active file and NOV file parsing down into C code.
-`(canonize-message-id id)'
-`(mail-parent-message-id references n)'
-`(parse-news-nov-line &optional dependency-hashtb)'
-`(parse-news-nov-region beg end &optional dependency-hashtb fullp)'
-`(parse-news-active-region beg end hashtb)'
 
-@end example
+@node Gnus Development
+@subsection Gnus Development
+
+Gnus is developed in a two-phased cycle.  The first phase involves much
+discussion on the @samp{ding@@gnus.org} mailing list, where people
+propose changes and new features, post patches and new back ends.  This
+phase is called the @dfn{alpha} phase, since the Gnusae released in this
+phase are @dfn{alpha releases}, or (perhaps more commonly in other
+circles) @dfn{snapshots}.  During this phase, Gnus is assumed to be
+unstable and should not be used by casual users.  Gnus alpha releases
+have names like ``Red Gnus'' and ``Quassia Gnus''.
+
+After futzing around for 50-100 alpha releases, Gnus is declared
+@dfn{frozen}, and only bug fixes are applied.  Gnus loses the prefix,
+and is called things like ``Gnus 5.6.32'' instead.  Normal people are
+supposed to be able to use these, and these are mostly discussed on the
+@samp{gnu.emacs.gnus} newsgroup.
+
+@cindex Incoming*
+@vindex mail-source-delete-incoming
+Some variable defaults differ between alpha Gnusae and released Gnusae.
+In particular, @code{mail-source-delete-incoming} defaults to @code{nil} in
+alpha Gnusae and @code{t} in released Gnusae.  This is to prevent
+lossage of mail if an alpha release hiccups while handling the mail.
+
+The division of discussion between the ding mailing list and the Gnus
+newsgroup is not purely based on publicity concerns.  It's true that
+having people write about the horrible things that an alpha Gnus release
+can do (sometimes) in a public forum may scare people off, but more
+importantly, talking about new experimental features that have been
+introduced may confuse casual users.  New features are frequently
+introduced, fiddled with, and judged to be found wanting, and then
+either discarded or totally rewritten.  People reading the mailing list
+usually keep up with these rapid changes, while people on the newsgroup
+can't be assumed to do so.
+
+
+
+@node Contributors
+@subsection Contributors
+@cindex contributors
+
+The new Gnus version couldn't have been done without the help of all the
+people on the (ding) mailing list.  Every day for over a year I have
+gotten billions of nice bug reports from them, filling me with joy,
+every single one of them.  Smooches.  The people on the list have been
+tried beyond endurance, what with my ``oh, that's a neat idea <type
+type>, yup, I'll release it right away <ship off> no wait, that doesn't
+work at all <type type>, yup, I'll ship that one off right away <ship
+off> no, wait, that absolutely does not work'' policy for releases.
+Micro$oft---bah.  Amateurs.  I'm @emph{much} worse.  (Or is that
+``worser''? ``much worser''?  ``worsest''?)
+
+I would like to take this opportunity to thank the Academy for...  oops,
+wrong show.
+
+@itemize @bullet
 
 @item
- nnml .overview directory with splits.
-@item
- asynchronous cache
-@item
- postponed commands.
-@item
- the selected article show have its Subject displayed in its summary line.
-@item
- when entering groups, get the real number of unread articles from
-the server?
-@item
- sort after gathering threads -- make false roots have the
-headers of the oldest orphan with a 0 article number?
-@item
- nndoc groups should inherit the score files of their parents?  Also
-inherit copy prompts and save files.
-@item
- command to start up Gnus (if not running) and enter a mail mode buffer.
-@item
- allow editing the group description from the group buffer
-for backends that support that.
-@item
-gnus-hide,show-all-topics
-@item
- groups and sub-topics should be allowed to mingle inside each topic,
-and not just list all subtopics at the end.
-@item
- a command to remove all read articles that are not needed to connect
-threads -- `gnus-summary-limit-to-sparse-unread'?
-@item
- a variable to turn off limiting/cutting of threads in the tree buffer.
-@item
- a variable to limit how many files are uudecoded.
-@item
- add zombie groups to a special "New Groups" topic.
-@item
- server mode command: close/open all connections
-@item
- put a file date in gnus-score-alist and check whether the file
-has been changed before using it.
-@item
- on exit from a digest group, go to the next article in the parent group.
-@item
- hide (sub)threads with low score.
-@item
- when expiring, remove all marks from expired articles.
-@item
- gnus-summary-limit-to-body
-@item
- a regexp alist that says what level groups are to be subscribed
-on.  Eg. -- `(("nnml:" . 1))'.
-@item
- easier interface to nnkiboze to create ephemeral groups that
-contain groups that match a regexp.
-@item
- allow newlines in <URL:> urls, but remove them before using
-the URL.
-@item
- If there is no From line, the mail backends should fudge one from the
-"From " line.
-@item
- fuzzy simplifying should strip all non-alpha-numerical info
-from subject lines.
-@item
- gnus-soup-brew-soup-with-high-scores.
-@item
- nntp-ping-before-connect
-@item
- command to check whether NOV is evil.  "list overview.fmt".
-@item
- when entering a group, Gnus should look through the score
-files very early for `local' atoms and set those local variables.
-@item
- message annotations.
-@item
- topics are always yanked before groups, and that's not good.
-@item
- (set-extent-property extent 'help-echo "String to display in minibuf")
-to display help in the minibuffer on buttons under XEmacs.
-@item
- allow group line format spec to say how many articles there
-are in the cache.
-@item
- AUTHINFO GENERIC
-@item
- `run-with-idle-timer' in gnus-demon.
-@item
- stop using invisible text properties and start using overlays instead
-@item
- C-c C-f C-e to add an Expires header.
-@item
- go from one group to the next; everything is expunged; go to the
-next group instead of going to the group buffer.
-@item
- gnus-renumber-cache -- to renumber the cache using "low" numbers.
-@item
- record topic changes in the dribble buffer.
-@item
- `nnfolder-generate-active-file' should look at the folders it
-finds and generate proper active ranges.
-@item
- nneething-look-in-files-for-article-heads variable to control
-whether nneething should sniff all files in the directories.
-@item
- gnus-fetch-article -- start Gnus, enter group, display article
-@item
- gnus-dont-move-articles-to-same-group variable when respooling.
-@item
- when messages are crossposted between several auto-expirable groups,
-articles aren't properly marked as expirable.
-@item
- nneething should allow deletion/moving.
-@item
- TAB on the last button should go to the first button.
-@item
- if the car of an element in `mail-split-methods' is a function,
-and the function returns non-nil, use that as the name of the group(s) to
-save mail in.
-@item
- command for listing all score files that have been applied.
-@item
- a command in the article buffer to return to `summary' config.
-@item
- `gnus-always-post-using-current-server' -- variable to override
-`C-c C-c' when posting.
-@item
- nnmail-group-spool-alist -- says where each group should use
-as a spool file.
-@item
- when an article is crossposted to an auto-expirable group, the article
-should be marker as expirable.
-@item
- article mode command/menu for "send region as URL to browser".
-@item
- on errors, jump to info nodes that explain the error.  For instance,
-on invalid From headers, or on error messages from the nntp server.
-@item
- when gathering threads, make the article that has no "Re: " the parent.
-Also consult Date headers.
-@item
- a token in splits to call shrink-window-if-larger-than-buffer
-@item
- `1 0 A M' to do matches on the active hashtb.
-@item
- duplicates -- command to remove Gnus-Warning header, use the read
-Message-ID, delete the "original".
-@item
- when replying to several messages at once, put the "other" message-ids
-into a See-Also header.
-@item
- support setext: URL:http://www.bsdi.com/setext/
-@item
- support ProleText: <URL:http://proletext.clari.net/prole/proletext.html>
-@item
- when browsing a foreign server, the groups that are already subscribed
-should be listed as such and not as "K".
-@item
- generate font names dynamically.
-@item
- score file mode auto-alist.
-@item
- allow nndoc to change/add/delete things from documents.  Implement
-methods for each format for adding an article to the document.
-@item
- `gnus-fetch-old-headers' `all' value to incorporate
-absolutely all headers there is.
-@item
- function like `|', but concatenate all marked articles
-and pipe them to the process.
-@item
- cache the list of killed (or active) groups in a separate file.  Update
-the file whenever we read the active file or the list
-of killed groups in the .eld file reaches a certain length.
-@item
- function for starting to edit a file to put into
-the current mail group.
-@item
- score-find-trace should display the total score of the article.
-@item
- "ghettozie" -- score on Xref header and nix it out after using it
-to avoid marking as read in other groups it has been crossposted to.
-@item
- look at procmail splitting.  The backends should create
-the groups automatically if a spool file exists for that group.
-@item
- function for backends to register themselves with Gnus.
-@item
- when replying to several process-marked articles,
-have all the From end up in Cc headers?  Variable to toggle.
-@item
- command to delete a crossposted mail article from all
-groups it has been mailed to.
-@item
- `B c' and `B m' should be crosspost aware.
-@item
- hide-pgp should also hide PGP public key blocks.
-@item
- Command in the group buffer to respool process-marked groups.
-@item
- `gnus-summary-find-matching' should accept
-pseudo-"headers" like "body", "head" and "all"
-@item
- When buttifying <URL: > things, all white space (including
-newlines) should be ignored.
-@item
- Process-marking all groups in a topic should process-mark
-groups in subtopics as well.
-@item
- Add non-native groups to the list of killed groups when killing them.
-@item
- nntp-suggest-kewl-config to probe the nntp server and suggest
-variable settings.
-@item
- add edit and forward secondary marks.
-@item
- nnml shouldn't visit its .overview files.
-@item
- allow customizing sorting within gathered threads.
-@item
- `B q' shouldn't select the current article.
-@item
- nnmbox should support a newsgroups file for descriptions.
-@item
- allow fetching mail from several pop servers.
-@item
- Be able to specify whether the saving commands save the original
-or the formatted article.
-@item
- a command to reparent with the child process-marked (cf. `T ^'.).
-@item
- I think the possibility to send a password with nntp-open-rlogin
-should be a feature in Red Gnus.
-@item
- The `Z n' command should be possible to execute from a mouse click.
-@item
- more limiting functions -- date, etc.
-@item
- be able to limit on a random header; on body; using reverse matches.
-@item
- a group parameter (`absofucking-total-expiry') that will make Gnus expire
-even unread articles.
-@item
- a command to print the article buffer as postscript.
-@item
- variable to disable password fetching when opening by nntp-open-telnet.
-@item
- manual: more example servers -- nntp with rlogin, telnet
-@item
- checking for bogus groups should clean topic alists as well.
-@item
- canceling articles in foreign groups.
-@item
- article number in folded topics isn't properly updated by
-Xref handling.
-@item
- Movement in the group buffer to the next unread group should go to the
-next closed topic with unread messages if no group can be found.
-@item
- Extensive info pages generated on the fly with help everywhere --
-in the "*Gnus edit*" buffers, for instance.
-@item
- Topic movement commands -- like thread movement.  Up, down, forward, next.
-@item
- a way to tick/mark as read Gcc'd articles.
-@item
- a way to say that all groups within a specific topic comes
-from a particular server?  Hm.
-@item
- `gnus-article-fill-if-long-lines' -- a function to fill
-the article buffer if there are any looong lines there.
-@item
- `T h' should jump to the parent topic and fold it.
-@item
- a command to create an ephemeral nndoc group out of a file,
-and then splitting it/moving it to some other group/backend.
-@item
- a group parameter for nnkiboze groups that says that
-all kibozed articles should be entered into the cache.
-@item
- It should also probably be possible to delimit what
-`gnus-jog-cache' does -- for instance, work on just some groups, or on
-some levels, and entering just articles that have a score higher than
-a certain number.
-@item
- nnfolder should append to the folder instead of re-writing
-the entire folder to disk when accepting new messages.
-@item
- allow all backends to do the proper thing with .gz files.
-@item
- a backend for reading collections of babyl files nnbabylfolder?
-@item
- a command for making the native groups into foreign groups.
-@item
- server mode command for clearing read marks from all groups
-from a server.
-@item
- when following up multiple articles, include all To, Cc, etc headers
-from all articles.
-@item
- a command for deciding what the total score of the current
-thread is.  Also a way to highlight based on this.
-@item
- command to show and edit group scores
-@item
- a gnus-tree-minimize-horizontal to minimize tree buffers
-horizontally.
-@item
- command to generate nnml overview file for one group.
-@item
- `C-u C-u a' -- prompt for many crossposted groups.
-@item
- keep track of which mail groups have received new articles (in this session).
-Be able to generate a report and perhaps do some marking in the group
-buffer.
-@item
- gnus-build-sparse-threads to a number -- build only sparse threads
-that are of that length.
-@item
- have nnmh respect mh's unseen sequence in .mh_profile.
-@item
- cache the newsgroups descriptions locally.
-@item
- asynchronous posting under nntp.
-@item
- be able to control word adaptive scoring from the score files.
-@item
- a variable to make `C-c C-c' post using the "current" select method.
-@item
- `limit-exclude-low-scored-articles'.
-@item
- if `gnus-summary-show-thread' is a number, hide threads that have
-a score lower than this number.
-@item
- split newsgroup subscription variable up into "order" and "method".
-@item
- buttonize ange-ftp file names.
-@item
- a command to make a duplicate copy of the current article
-so that each copy can be edited separately.
-@item
- nnweb should allow fetching from the local nntp server.
-@item
- record the sorting done in the summary buffer so that
-it can be repeated when limiting/regenerating the buffer.
-@item
- nnml-generate-nov-databses should generate for
-all nnml servers.
-@item
- when the user does commands in the group buffer, check
-the modification time of the .newsrc.eld file and use
-ask-user-about-supersession-threat.  Also warn when trying
-to save .newsrc.eld and it has changed.
-@item
- M-g on a topic will display all groups with 0 articles in
-the topic.
-@item
- command to remove all topic stuff.
-@item
- allow exploding incoming digests when reading incoming mail
-and splitting the resulting digests.
-@item
- nnsoup shouldn't set the `message-' variables.
+Masanobu @sc{Umeda}---the writer of the original @sc{gnus}.
+
 @item
- command to nix out all nnoo state information.
+Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el, webmail.el,
+nnwarchive and many, many other things connected with @sc{mime} and
+other types of en/decoding, as well as general bug fixing, new
+functionality and stuff.
+
 @item
- nnmail-process-alist that calls functions if group names
-matches an alist -- before saving.
+Per Abrahamsen---custom, scoring, highlighting and @sc{soup} code (as
+well as numerous other things).
+
 @item
- use buffer-invisibility-spec everywhere for hiding text.
+Luis Fernandes---design and graphics.
+
 @item
- variable to activate each group before entering them
-to get the (new) number of articles.  `gnus-activate-before-entering'.
+Joe Reiss---creator of the smiley faces.
+
 @item
- command to fetch a Message-ID from any buffer, even
-starting Gnus first if necessary.
+Justin Sheehy--the FAQ maintainer.
+
 @item
- when posting and checking whether a group exists or not, just
-ask the nntp server instead of relying on the active hashtb.
+Erik Naggum---help, ideas, support, code and stuff.
+
 @item
- buttonize the output of `C-c C-a' in an apropos-like way.
+Wes Hardaker---@file{gnus-picon.el} and the manual section on
+@dfn{picons} (@pxref{Picons}).
+
 @item
- `G p' should understand process/prefix, and allow editing
-of several groups at once.
+Kim-Minh Kaplan---further work on the picon code.
+
 @item
- command to create an ephemeral nnvirtual group that
-matches some regexp(s).
+Brad Miller---@file{gnus-gl.el} and the GroupLens manual section
+(@pxref{GroupLens}).
+
 @item
- nndoc should understand "Content-Type: message/rfc822" forwarded messages.
+Sudish Joseph---innumerable bug fixes.
+
 @item
- it should be possible to score "thread" on the From header.
+Ilja Weis---@file{gnus-topic.el}.
+
 @item
- hitting RET on a "gnus-uu-archive" pseudo article should unpack it.
+Steven L. Baur---lots and lots and lots of bugs detections and fixes.
+
 @item
- `B i' should display the article at once in the summary buffer.
+Vladimir Alexiev---the refcard and reference booklets.
+
 @item
- remove the "*" mark at once when unticking an article.
+Felix Lee & Jamie Zawinski---I stole some pieces from the XGnus
+distribution by Felix Lee and JWZ.
+
 @item
- `M-s' should highlight the matching text.
+Scott Byer---@file{nnfolder.el} enhancements & rewrite.
+
 @item
- when checking for duplicated mails, use Resent-Message-ID if present.
+Peter Mutsaers---orphan article scoring code.
+
 @item
- killing and yanking groups in topics should be better.  If killing one copy
-of a group that exists in multiple topics, only that copy should
-be removed.  Yanking should insert the copy, and yanking topics
-should be possible to be interspersed with the other yankings.
+Ken Raeburn---POP mail support.
+
 @item
- command for enter a group just to read the cached articles.  A way to say
-"ignore the nntp connection; just read from the cache."
+Hallvard B Furuseth---various bits and pieces, especially dealing with
+.newsrc files.
+
 @item
- `X u' should decode base64 articles.
+Brian Edmonds---@file{gnus-bbdb.el}.
+
 @item
- a way to hide all "inner" cited text, leaving just the most
-recently cited text.
+David Moore---rewrite of @file{nnvirtual.el} and many other things.
+
 @item
- nnvirtual should be asynchronous.
+Kevin Davidson---came up with the name @dfn{ding}, so blame him.
+
 @item
- after editing an article, gnus-original-article-buffer should
-be invalidated.
+François Pinard---many, many interesting and thorough bug reports, as
+well as autoconf support.
+
+@end itemize
+
+This manual was proof-read by Adrian Aichner, with Ricardo Nassif, Mark
+Borges, and Jost Krieger proof-reading parts of the manual.
+
+The following people have contributed many patches and suggestions:
+
+Christopher Davis,
+Andrew Eskilsson,
+Kai Grossjohann,
+David KÃ¥gedal,
+Richard Pieri,
+Fabrice Popineau,
+Daniel Quinlan,
+Jason L. Tibbitts, III,
+and
+Jack Vinson.
+
+Also thanks to the following for patches and stuff:
+
+Jari Aalto,
+Adrian Aichner,
+Vladimir Alexiev,
+Russ Allbery,
+Peter Arius,
+Matt Armstrong,
+Marc Auslander,
+Miles Bader,
+Alexei V. Barantsev,
+Frank Bennett,
+Robert Bihlmeyer,
+Chris Bone,
+Mark Borges,
+Mark Boyns,
+Lance A. Brown,
+Rob Browning,
+Kees de Bruin,
+Martin Buchholz,
+Joe Buehler,
+Kevin Buhr,
+Alastair Burt,
+Joao Cachopo,
+Zlatko Calusic,
+Massimo Campostrini,
+Castor,
+David Charlap,
+Dan Christensen,
+Kevin Christian,
+Jae-you Chung, @c ?
+James H. Cloos, Jr.,
+Laura Conrad,
+Michael R. Cook,
+Glenn Coombs,
+Andrew J. Cosgriff,
+Neil Crellin,
+Frank D. Cringle,
+Geoffrey T. Dairiki,
+Andre Deparade,
+Ulrik Dickow,
+Dave Disser,
+Rui-Tao Dong, @c ?
+Joev Dubach,
+Michael Welsh Duggan,
+Dave Edmondson,
+Paul Eggert,
+Mark W. Eichin,
+Karl Eichwalder,
+Enami Tsugutomo, @c Enami
+Michael Ernst,
+Luc Van Eycken,
+Sam Falkner,
+Nelson Jose dos Santos Ferreira,
+Sigbjorn Finne,
+Sven Fischer,
+Paul Fisher,
+Decklin Foster,
+Gary D. Foster,
+Paul Franklin,
+Guy Geens,
+Arne Georg Gleditsch,
+David S. Goldberg,
+Michelangelo Grigni,
+Dale Hagglund,
+D. Hall,
+Magnus Hammerin,
+Kenichi Handa, @c Handa
+Raja R. Harinath,
+Yoshiki Hayashi, @c ?
+P. E. Jareth Hein,
+Hisashige Kenji, @c Hisashige
+Scott Hofmann,
+Marc Horowitz,
+Gunnar Horrigmo,
+Richard Hoskins,
+Brad Howes,
+Miguel de Icaza,
+François Felix Ingrand,
+Tatsuya Ichikawa, @c ?
+Ishikawa Ichiro, @c Ishikawa
+Lee Iverson,
+Iwamuro Motonori, @c Iwamuro
+Rajappa Iyer,
+Andreas Jaeger,
+Adam P. Jenkins,
+Randell Jesup,
+Fred Johansen,
+Gareth Jones,
+Simon Josefsson,
+Greg Klanderman,
+Karl Kleinpaste,
+Michael Klingbeil,
+Peter Skov Knudsen,
+Shuhei Kobayashi, @c Kobayashi
+Petr Konecny,
+Koseki Yoshinori, @c Koseki
+Thor Kristoffersen,
+Jens Lautenbacher,
+Martin Larose,
+Seokchan Lee, @c Lee
+Joerg Lenneis,
+Carsten Leonhardt,
+James LewisMoss,
+Christian Limpach,
+Markus Linnala,
+Dave Love,
+Mike McEwan,
+Tonny Madsen,
+Shlomo Mahlab,
+Nat Makarevitch,
+Istvan Marko,
+David Martin,
+Jason R. Mastaler,
+Gordon Matzigkeit,
+Timo Metzemakers,
+Richard Mlynarik,
+Lantz Moore,
+Morioka Tomohiko, @c Morioka
+Erik Toubro Nielsen,
+Hrvoje Niksic,
+Andy Norman,
+Fred Oberhauser,
+C. R. Oldham,
+Alexandre Oliva,
+Ken Olstad,
+Masaharu Onishi, @c Onishi
+Hideki Ono, @c Ono
+Ettore Perazzoli,
+William Perry,
+Stephen Peters,
+Jens-Ulrik Holger Petersen,
+Ulrich Pfeifer,
+Matt Pharr,
+Andy Piper,
+John McClary Prevost,
+Bill Pringlemeir,
+Mike Pullen,
+Jim Radford,
+Colin Rafferty,
+Lasse Rasinen,
+Lars Balker Rasmussen,
+Joe Reiss,
+Renaud Rioboo,
+Roland B. Roberts,
+Bart Robinson,
+Christian von Roques,
+Markus Rost,
+Jason Rumney,
+Wolfgang Rupprecht,
+Jay Sachs,
+Dewey M. Sasser,
+Conrad Sauerwald,
+Loren Schall,
+Dan Schmidt,
+Ralph Schleicher,
+Philippe Schnoebelen,
+Andreas Schwab,
+Randal L. Schwartz,
+Danny Siu,
+Matt Simmons,
+Paul D. Smith,
+Jeff Sparkes,
+Toby Speight,
+Michael Sperber,
+Darren Stalder,
+Richard Stallman,
+Greg Stark,
+Sam Steingold,
+Paul Stevenson,
+Jonas Steverud,
+Paul Stodghill,
+Kiyokazu Suto, @c Suto
+Kurt Swanson,
+Samuel Tardieu,
+Teddy,
+Chuck Thompson,
+Tozawa Akihiko, @c Tozawa
+Philippe Troin,
+James Troup,
+Trung Tran-Duc,
+Jack Twilley,
+Aaron M. Ucko,
+Aki Vehtari,
+Didier Verna,
+Vladimir Volovich,
+Jan Vroonhof,
+Stefan Waldherr,
+Pete Ware,
+Barry A. Warsaw,
+Christoph Wedler,
+Joe Wells,
+Lee Willis,
+Katsumi Yamaoka @c Yamaoka
+and
+Lloyd Zusman.
+
+
+For a full overview of what each person has done, the ChangeLogs
+included in the Gnus alpha distributions should give ample reading
+(550kB and counting).
+
+Apologies to everybody that I've forgotten, of which there are many, I'm
+sure.
+
+Gee, that's quite a list of people.  I guess that must mean that there
+actually are people who are using Gnus.  Who'd'a thunk it!
+
+
+@node New Features
+@subsection New Features
+@cindex new features
+
+@menu
+* ding Gnus::                   New things in Gnus 5.0/5.1, the first new Gnus.
+* September Gnus::              The Thing Formally Known As Gnus 5.2/5.3.
+* Red Gnus::                    Third time best---Gnus 5.4/5.5.
+* Quassia Gnus::                Two times two is four, or Gnus 5.6/5.7.
+* Pterodactyl Gnus::            Pentad also starts with P, AKA Gnus 5.8/5.9.
+@end menu
+
+These lists are, of course, just @emph{short} overviews of the
+@emph{most} important new features.  No, really.  There are tons more.
+Yes, we have feeping creaturism in full effect.
+
+@node ding Gnus
+@subsubsection (ding) Gnus
+
+New features in Gnus 5.0/5.1:
+
+@itemize @bullet
+
 @item
- there should probably be a way to make Gnus not connect to the
-server and just read the articles in the server
+The look of all buffers can be changed by setting format-like variables
+(@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}).
+
 @item
- allow a `set-default' (or something) to change the default
-value of nnoo variables.
+Local spool and several @sc{nntp} servers can be used at once
+(@pxref{Select Methods}).
+
 @item
- a command to import group infos from a .newsrc.eld file.
+You can combine groups into virtual groups (@pxref{Virtual Groups}).
+
 @item
- groups from secondary servers have the entire select method
-listed in each group info.
+You can read a number of different mail formats (@pxref{Getting Mail}).
+All the mail back ends implement a convenient mail expiry scheme
+(@pxref{Expiring Mail}).
+
 @item
- a command for just switching from the summary buffer to the group
-buffer.
+Gnus can use various strategies for gathering threads that have lost
+their roots (thereby gathering loose sub-threads into one thread) or it
+can go back and retrieve enough headers to build a complete thread
+(@pxref{Customizing Threading}).
+
 @item
- a way to specify that some incoming mail washing functions
-should only be applied to some groups.
+Killed groups can be displayed in the group buffer, and you can read
+them as well (@pxref{Listing Groups}).
+
 @item
- Message `C-f C-t' should ask the user whether to heed
-mail-copies-to: never.
+Gnus can do partial group updates---you do not have to retrieve the
+entire active file just to check for new articles in a few groups
+(@pxref{The Active File}).
+
 @item
- new group parameter -- `post-to-server' that says to post
-using the current server.  Also a variable to do the same.
+Gnus implements a sliding scale of subscribedness to groups
+(@pxref{Group Levels}).
+
 @item
- the slave dribble files should auto-save to the slave file names.
+You can score articles according to any number of criteria
+(@pxref{Scoring}).  You can even get Gnus to find out how to score
+articles for you (@pxref{Adaptive Scoring}).
+
 @item
- a group parameter that says what articles to display on group entry, based
-on article marks.
+Gnus maintains a dribble buffer that is auto-saved the normal Emacs
+manner, so it should be difficult to lose much data on what you have
+read if your machine should go down (@pxref{Auto Save}).
+
 @item
- a way to visually distinguish slave Gnusae from masters.  (Whip instead
-of normal logo?)
+Gnus now has its own startup file (@file{.gnus.el}) to avoid cluttering up
+the @file{.emacs} file.
+
 @item
- Use DJ Bernstein "From " quoting/dequoting, where applicable.
+You can set the process mark on both groups and articles and perform
+operations on all the marked items (@pxref{Process/Prefix}).
+
 @item
- Why is hide-citation-maybe and hide-citation different?  Also
-clear up info.
+You can grep through a subset of groups and create a group from the
+results (@pxref{Kibozed Groups}).
+
 @item
- group user-defined meta-parameters.
+You can list subsets of groups according to, well, anything
+(@pxref{Listing Groups}).
 
+@item
+You can browse foreign servers and subscribe to groups from those
+servers (@pxref{Browse Foreign Server}).
 
+@item
+Gnus can fetch articles, asynchronously, on a second connection to the
+server (@pxref{Asynchronous Fetching}).
 
-From: John Griffith <griffith@@sfs.nphil.uni-tuebingen.de>
 @item
- I like the option for trying to retrieve the FAQ for a group and I was
-thinking it would be great if for those newsgroups that had archives
-you could also try to read the archive for that group.  Part of the
-problem is that archives are spread all over the net, unlike FAQs.
-What would be best I suppose is to find the one closest to your site.
+You can cache articles locally (@pxref{Article Caching}).
 
-In any case, there is a list of general news group archives at @*
-ftp://ftp.neosoft.com/pub/users/claird/news.lists/newsgroup_archives.html
+@item
+The uudecode functions have been expanded and generalized
+(@pxref{Decoding Articles}).
 
+@item
+You can still post uuencoded articles, which was a little-known feature
+of @sc{gnus}' past (@pxref{Uuencoding and Posting}).
 
+@item
+Fetching parents (and other articles) now actually works without
+glitches (@pxref{Finding the Parent}).
 
+@item
+Gnus can fetch FAQs and group descriptions (@pxref{Group Information}).
 
 @item
-@example
-From: Jason L Tibbitts III <tibbs@@hpc.uh.edu>
-(add-hook 'gnus-select-group-hook
-  (lambda ()
-    (gnus-group-add-parameter group
-       (cons 'gnus-group-date-last-entered (list (current-time-string))))))
+Digests (and other files) can be used as the basis for groups
+(@pxref{Document Groups}).
 
-(defun gnus-user-format-function-d (headers)
-  "Return the date the group was last read."
-  (cond ((car (gnus-group-get-parameter gnus-tmp-group 'gnus-group-date-last-entered)))
-      (t "")))
-@end example
+@item
+Articles can be highlighted and customized (@pxref{Customizing
+Articles}).
 
 @item
- tanken var at nÃ¥r du bruker `gnus-startup-file' som prefix (FOO) til Ã¥ lete
-opp en fil FOO-SERVER, FOO-SERVER.el, FOO-SERVER.eld, kan du la den være en
-liste hvor du bruker hvert element i listen som FOO, istedet.  da kunne man
-hatt forskjellige serveres startup-filer forskjellige steder.
+URLs and other external references can be buttonized (@pxref{Article
+Buttons}).
 
+@item
+You can do lots of strange stuff with the Gnus window & frame
+configuration (@pxref{Window Layout}).
 
 @item
-LMI> Well, nnbabyl could alter the group info to heed labels like
-LMI> answered and read, I guess.
+You can click on buttons instead of using the keyboard
+(@pxref{Buttons}).
 
-It could also keep them updated (the same for the Status: header of
-unix mbox files).
+@end itemize
 
-They could be used like this:
 
+@node September Gnus
+@subsubsection September Gnus
 
-@example
-`M l <name> RET' add label <name> to current message.
-`M u <name> RET' remove label <name> from current message.
-`/ l <expr> RET' limit summary buffer according to <expr>.
+@iftex
+@iflatex
+\gnusfig{-28cm}{0cm}{\epsfig{figure=ps/september,height=20cm}}
+@end iflatex
+@end iftex
 
-<expr> would be a boolean expression on the labels, e.g.
+New features in Gnus 5.2/5.3:
 
-`/ l bug & !fixed RET'
-@end example
+@itemize @bullet
 
-would show all the messages which are labeled `bug' but not labeled
-`fixed'.
+@item
+A new message composition mode is used.  All old customization variables
+for @code{mail-mode}, @code{rnews-reply-mode} and @code{gnus-msg} are
+now obsolete.
 
-One could also imagine the labels being used for highlighting, or
-affect the summary line format.
+@item
+Gnus is now able to generate @dfn{sparse} threads---threads where
+missing articles are represented by empty nodes (@pxref{Customizing
+Threading}).
 
+@lisp
+(setq gnus-build-sparse-threads 'some)
+@end lisp
 
 @item
-Sender: abraham@@dina.kvl.dk
-
-I'd like a gnus-find-file which work like find file, except that it
-would recognize things that looks like messages or folders:
+Outgoing articles are stored on a special archive server
+(@pxref{Archived Messages}).
 
-- If it is a directory containing numbered files, create an nndir
-summary buffer.
+@item
+Partial thread regeneration now happens when articles are
+referred.
 
-- For other directories, create a nneething summary buffer.
+@item
+Gnus can make use of GroupLens predictions (@pxref{GroupLens}).
 
-- For files matching "\\`From ", create a nndoc/mbox summary.
+@item
+Picons (personal icons) can be displayed under XEmacs (@pxref{Picons}).
 
-- For files matching "\\`BABYL OPTIONS:", create a nndoc/baby summary.
+@item
+A @code{trn}-like tree buffer can be displayed (@pxref{Tree Display}).
 
-- For files matching "\\`[^ \t\n]+:", create an *Article* buffer.
+@lisp
+(setq gnus-use-trees t)
+@end lisp
 
-- For other files, just find them normally.
+@item
+An @code{nn}-like pick-and-read minor mode is available for the summary
+buffers (@pxref{Pick and Read}).
 
-I'd like `nneething' to use this function, so it would work on a
-directory potentially containing mboxes or babyl files.
+@lisp
+(add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
+@end lisp
 
 @item
-Please send a mail to bwarsaw@@cnri.reston.va.us (Barry A. Warsaw) and
-tell him what you are doing.
+In binary groups you can use a special binary minor mode (@pxref{Binary
+Groups}).
 
 @item
-Currently, I get prompted:
-
-decend into sci?
-- type y
-decend into sci.something ?
-- type n
-decend into ucd?
+Groups can be grouped in a folding topic hierarchy (@pxref{Group
+Topics}).
 
-The problem above is that since there is really only one subsection of
-science, shouldn't it prompt you for only descending sci.something?  If
-there was a sci.somethingelse group or section, then it should prompt
-for sci? first the sci.something? then sci.somethingelse?...
+@lisp
+(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
+@end lisp
 
 @item
-Ja, det burde være en mÃ¥te Ã¥ si slikt.  Kanskje en ny variabel?
-`gnus-use-few-score-files'?  SÃ¥ kunne score-regler legges til den
-"mest" lokale score-fila.  F. eks. ville no-gruppene betjenes av
-"no.all.SCORE", osv.
+Gnus can re-send and bounce mail (@pxref{Summary Mail Commands}).
 
 @item
-What i want is for Gnus to treat any sequence or combination of the following
-as a single spoiler warning and hide it all, replacing it with a "Next Page"
-button:
-
-
-^L's
-
-more than n blank lines
-
-more than m identical lines
-(which should be replaced with button to show them)
-
-any whitespace surrounding any of the above
+Groups can now have a score, and bubbling based on entry frequency
+is possible (@pxref{Group Score}).
 
+@lisp
+(add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)
+@end lisp
 
 @item
-Well, we could allow a new value to `gnus-thread-ignore-subject' --
-`spaces', or something.  (We could even default to that.)  And then
-subjects that differ in white space only could be considered the
-"same" subject for threading purposes.
+Groups can be process-marked, and commands can be performed on
+groups of groups (@pxref{Marking Groups}).
 
 @item
-Modes to preprocess the contents (e.g. jka-compr) use the second form
-"(REGEXP FUNCTION NON-NIL)" while ordinary modes (e.g. tex) use the first
-form "(REGEXP . FUNCTION)", so you could use it to distinguish between
-those two types of modes. (auto-modes-alist, insert-file-contents-literally.)
+Caching is possible in virtual groups.
 
 @item
- Under XEmacs -- do funny article marks:
-tick - thumb tack
-killed - skull
-soup - bowl of soup
-score below - dim light bulb
-score over - bright light bulb
+@code{nndoc} now understands all kinds of digests, mail boxes, rnews
+news batches, ClariNet briefs collections, and just about everything
+else (@pxref{Document Groups}).
 
 @item
-Yes. I think the algorithm is as follows:
-
-@example
-Group-mode
-
-   show-list-of-articles-in-group
-        if (key-pressed == SPACE)
-                if (no-more-articles-in-group-to-select)
-                        if (articles-selected)
-                                start-reading-selected-articles;
-                        junk-unread-articles;
-                        next-group;
-                 else
-                        show-next-page;
-
-         else if (key-pressed = '.')
-                if (consolidated-menus)         # same as hide-thread in Gnus
-                        select-thread-under-cursor;
-                else
-                        select-article-under-cursor;
-
-
-Article-mode
-        if (key-pressed == SPACE)
-                if (more-pages-in-article)
-                        next-page;
-                else if (more-selected-articles-to-read)
-                        next-article;
-                else
-                        next-group;
-@end example
+Gnus has a new back end (@code{nnsoup}) to create/read SOUP packets
+(@pxref{SOUP}).
 
 @item
-My precise need here would have been to limit files to Incoming*.
-One could think of some `nneething-only-files' variable, but I guess
-it would have been unacceptable if one was using many unrelated such
-nneething groups.
+The Gnus cache is much faster.
 
-A more useful approach would be to, in response to the `G D' prompt, be
-allowed to say something like: `~/.mail/Incoming*', somewhat limiting
-the top-level directory only (in case directories would be matched by
-the wildcard expression).
+@item
+Groups can be sorted according to many criteria (@pxref{Sorting
+Groups}).
 
 @item
-It would be nice if it also handled
+New group parameters have been introduced to set list-addresses and
+expiry times (@pxref{Group Parameters}).
 
-        <URL:news://sunsite.auc.dk/>
+@item
+All formatting specs allow specifying faces to be used
+(@pxref{Formatting Fonts}).
 
-which should correspond to `B nntp RET sunsite.auc.dk' in *Group*.
+@item
+There are several more commands for setting/removing/acting on process
+marked articles on the @kbd{M P} submap (@pxref{Setting Process Marks}).
 
+@item
+The summary buffer can be limited to show parts of the available
+articles based on a wide range of criteria.  These commands have been
+bound to keys on the @kbd{/} submap (@pxref{Limiting}).
 
 @item
+Articles can be made persistent with the @kbd{*} command
+(@pxref{Persistent Articles}).
 
-  Take a look at w3-menu.el in the Emacs-W3 distribution - this works out
-really well.  Each menu is 'named' by a symbol that would be on a
-gnus-*-menus (where * would be whatever, but at least group, summary, and
-article versions) variable.
+@item
+All functions for hiding article elements are now toggles.
 
-  So for gnus-summary-menus, I would set to '(sort mark dispose ...)
+@item
+Article headers can be buttonized (@pxref{Article Washing}).
 
-  A value of '1' would just put _all_ the menus in a single 'GNUS' menu in
-the main menubar.  This approach works really well for Emacs-W3 and VM.
+@item
+All mail back ends support fetching articles by @code{Message-ID}.
 
+@item
+Duplicate mail can now be treated properly (@pxref{Duplicates}).
 
 @item
- nndoc should take care to create unique Message-IDs for all its
-articles.
+All summary mode commands are available directly from the article
+buffer (@pxref{Article Keymap}).
+
 @item
- gnus-score-followup-article only works when you have a summary buffer
-active.  Make it work when posting from the group buffer as well.
-(message-sent-hook).
+Frames can be part of @code{gnus-buffer-configuration} (@pxref{Window
+Layout}).
+
 @item
- rewrite gnus-demon to use run-with-idle-timers.
+Mail can be re-scanned by a daemonic process (@pxref{Daemons}).
+@iftex
+@iflatex
+\marginpar[\mbox{}\hfill\epsfig{figure=ps/fseptember,height=5cm}]{\epsfig{figure=ps/fseptember,height=5cm}}
+@end iflatex
+@end iftex
 
 @item
- * Enhancements to Gnus:
+Gnus can make use of NoCeM files to weed out spam (@pxref{NoCeM}).
 
-  Add two commands:
+@lisp
+(setq gnus-use-nocem t)
+@end lisp
 
-  * gnus-servers (gnus-start-server-buffer?)--enters Gnus and goes
-    straight to the server buffer, without opening any connections to
-    servers first.
+@item
+Groups can be made permanently visible (@pxref{Listing Groups}).
 
-  * gnus-server-read-server-newsrc--produces a buffer very similar to
-    the group buffer, but with only groups from that server listed;
-    quitting this buffer returns to the server buffer.
+@lisp
+(setq gnus-permanently-visible-groups "^nnml:")
+@end lisp
 
 @item
- add a command to check the integrity of an nnfolder folder --
-go through the article numbers and see that there are no duplicates,
-and stuff.
+Many new hooks have been introduced to make customizing easier.
 
 @item
- `unsmileyfy-buffer' to undo smileification.
+Gnus respects the @code{Mail-Copies-To} header.
 
 @item
- a command to give all relevant info on an article, including all
-secondary marks.
+Threads can be gathered by looking at the @code{References} header
+(@pxref{Customizing Threading}).
+
+@lisp
+(setq gnus-summary-thread-gathering-function
+      'gnus-gather-threads-by-references)
+@end lisp
 
 @item
- when doing `-request-accept-article', the backends should do
-the nnmail duplicate checking.
+Read articles can be stored in a special backlog buffer to avoid
+refetching (@pxref{Article Backlog}).
+
+@lisp
+(setq gnus-keep-backlog 50)
+@end lisp
 
 @item
- allow `message-signature-file' to be a function to return the
-value of the signature file.
+A clean copy of the current article is always stored in a separate
+buffer to allow easier treatment.
 
 @item
- In addition, I would love it if I could configure message-tab so that it
-could call `bbdb-complete-name' in other headers.  So, some sort of
-interface like
+Gnus can suggest where to save articles (@pxref{Saving Articles}).
 
-(setq message-tab-alist
-      '((message-header-regexp message-expand-group)
-        ("^\\(To\\|[cC]c\\|[bB]cc\\)"  bbdb-complete-name)))
+@item
+Gnus doesn't have to do as much prompting when saving (@pxref{Saving
+Articles}).
 
-then you could run the relevant function to complete the information in
-the header
+@lisp
+(setq gnus-prompt-before-saving t)
+@end lisp
 
 @item
- cache the newsgroups file locally to avoid reloading it all the time.
+@code{gnus-uu} can view decoded files asynchronously while fetching
+articles (@pxref{Other Decode Variables}).
 
-@item
- a command to import a buffer into a group.
+@lisp
+(setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view)
+@end lisp
 
 @item
- nnweb should allow fetching by Message-ID from servers.
+Filling in the article buffer now works properly on cited text
+(@pxref{Article Washing}).
 
 @item
- point in the article buffer doesn't always go to the
-beginning of the buffer when selecting new articles.
+Hiding cited text adds buttons to toggle hiding, and how much
+cited text to hide is now customizable (@pxref{Article Hiding}).
 
-@item
- a command to process mark all unread articles.
+@lisp
+(setq gnus-cited-lines-visible 2)
+@end lisp
 
 @item
- `gnus-gather-threads-by-references-and-subject' -- first
-do gathering by references, and then go through the dummy roots and
-do more gathering by subject.
+Boring headers can be hidden (@pxref{Article Hiding}).
 
 @item
- gnus-uu-mark-in-numerical-order -- process mark articles in
-article numerical order.
+Default scoring values can now be set from the menu bar.
 
 @item
- (gnus-thread-total-score
- (gnus-id-to-thread (mail-header-id (gnus-summary-article-header))))
-bind to a key.
+Further syntax checking of outgoing articles have been added.
 
-@item
- sorting by score is wrong when using sparse threads.
+@end itemize
 
-@item
- a command to fetch an arbitrary article -- without having to be
-in the summary buffer.
 
-@item
- a new nncvs backend.  Each group would show an article, using
-version branches as threading, checkin date as the date, etc.
+@node Red Gnus
+@subsubsection Red Gnus
 
-@item
- http://www.dejanews.com/forms/dnsetfilter_exp.html ?
-This filter allows one to construct advance queries on the Dejanews
-database such as specifying start and end dates, subject, author,
-and/or newsgroup name.
+New features in Gnus 5.4/5.5:
 
-@item
- new Date header scoring type -- older, newer
+@iftex
+@iflatex
+\gnusfig{-5.5cm}{-4cm}{\epsfig{figure=ps/red,height=20cm}}
+@end iflatex
+@end iftex
 
-@item
- use the summary toolbar in the article buffer.
+@itemize @bullet
 
 @item
- a command to fetch all articles that are less than X days old.
+@file{nntp.el} has been totally rewritten in an asynchronous fashion.
 
 @item
- in pick mode, `q' should save the list of selected articles in the
-group info.  The next time the group is selected, these articles
-will automatically get the process mark.
+Article prefetching functionality has been moved up into
+Gnus (@pxref{Asynchronous Fetching}).
 
 @item
- Isn't it possible to (also?) allow M-^ to automatically try the
-default server if it fails on the current server?  (controlled by a
-user variable, (nil, t, 'ask)).
+Scoring can now be performed with logical operators like @code{and},
+@code{or}, @code{not}, and parent redirection (@pxref{Advanced
+Scoring}).
 
 @item
- make it possible to cancel articles using the select method for the
-current group.
+Article washing status can be displayed in the
+article mode line (@pxref{Misc Article}).
 
 @item
- `gnus-summary-select-article-on-entry' or something.  It'll default
-to t and will select whatever article decided by `gnus-auto-select-first'.
+@file{gnus.el} has been split into many smaller files.
 
 @item
- a new variable to control which selection commands should be unselecting.
-`first', `best', `next', `prev', `next-unread', `prev-unread' are
-candidates.
+Suppression of duplicate articles based on Message-ID can be done
+(@pxref{Duplicate Suppression}).
 
-@item
- be able to select groups that have no articles in them
-to be able to post in them (using the current select method).
+@lisp
+(setq gnus-suppress-duplicates t)
+@end lisp
 
 @item
- be able to post via DejaNews.
+New variables for specifying what score and adapt files are to be
+considered home score and adapt files (@pxref{Home Score File}) have
+been added.
 
 @item
- `x' should retain any sortings that have been performed.
+@code{nndoc} was rewritten to be easily extendable (@pxref{Document
+Server Internals}).
 
 @item
- allow the user to specify the precedence of the secondary marks.  Also
-allow them to be displayed separately.
+Groups can inherit group parameters from parent topics (@pxref{Topic
+Parameters}).
 
 @item
- gnus-summary-save-in-pipe should concatenate the results from
-the processes when doing a process marked pipe.
+Article editing has been revamped and is now actually usable.
 
 @item
- a new match type, like Followup, but which adds Thread matches on all
-articles that match a certain From header.
+Signatures can be recognized in more intelligent fashions
+(@pxref{Article Signature}).
 
 @item
- a function that can be read from kill-emacs-query-functions to offer
-saving living summary buffers.
+Summary pick mode has been made to look more @code{nn}-like.  Line
+numbers are displayed and the @kbd{.} command can be used to pick
+articles (@code{Pick and Read}).
 
 @item
- a function for selecting a particular group which will contain
-the articles listed in a list of article numbers/id's.
+Commands for moving the @file{.newsrc.eld} from one server to
+another have been added (@pxref{Changing Servers}).
 
 @item
- a battery of character translation functions to translate common
-Mac, MS (etc) characters into ISO 8859-1.
-
-@example
-(defun article-fix-m$word ()
-  "Fix M$Word smartquotes in an article."
-  (interactive)
-  (save-excursion
-    (let ((buffer-read-only nil))
-      (goto-char (point-min))
-      (while (search-forward "\221" nil t)
-        (replace-match "`" t t))
-      (goto-char (point-min))
-      (while (search-forward "\222" nil t)
-        (replace-match "'" t t))
-      (goto-char (point-min))
-      (while (search-forward "\223" nil t)
-        (replace-match "\"" t t))
-      (goto-char (point-min))
-      (while (search-forward "\224" nil t)
-        (replace-match "\"" t t)))))
-@end example
+There's a way now to specify that ``uninteresting'' fields be suppressed
+when generating lines in buffers (@pxref{Advanced Formatting}).
 
 @item
-@example
- (add-hook 'gnus-exit-query-functions
-'(lambda ()
-   (if (and (file-exists-p nnmail-spool-file)
-            (> (nnheader-file-size nnmail-spool-file) 0))
-       (yes-or-no-p "New mail has arrived.  Quit Gnus anyways? ")
-       (y-or-n-p "Are you sure you want to quit Gnus? "))))
-@end example
+Several commands in the group buffer can be undone with @kbd{C-M-_}
+(@pxref{Undo}).
 
 @item
- allow message-default-headers to be a function.
+Scoring can be done on words using the new score type @code{w}
+(@pxref{Score File Format}).
 
 @item
- new Date score match types -- < > = (etc) that take floating point
-numbers and match on the age of the article.
+Adaptive scoring can be done on a Subject word-by-word basis
+(@pxref{Adaptive Scoring}).
 
-@item
-@example
->  > > If so, I've got one gripe: It seems that when I fire up gnus 5.2.25
->  > > under xemacs-19.14, it's creating a new frame, but is erasing the
->  > > buffer in the frame that it was called from =:-O
->
->  > Hm.  How do you start up Gnus?  From the toolbar or with
->  > `M-x gnus-other-frame'?
->
->    I normally start it up from the toolbar; at
-> least that's the way I've caught it doing the
-> deed before.
-@end example
+@lisp
+(setq gnus-use-adaptive-scoring '(word))
+@end lisp
 
 @item
- all commands that react to the process mark should push
-the current process mark set onto the stack.
+Scores can be decayed (@pxref{Score Decays}).
 
-@item
- gnus-article-hide-pgp
-Selv ville jeg nok ha valgt Ã¥ slette den dersom teksten matcher
-@example
-"\\(This\s+\\)?[^ ]+ has been automatically signed by"
-@end example
-og det er maks hundre tegn mellom match-end og ----linja.  Men -det-
-er min type heuristikk og langt fra alles.
+@lisp
+(setq gnus-decay-scores t)
+@end lisp
 
 @item
- `gnus-subscribe-sorted' -- insert new groups where they would have been
-sorted to if `gnus-group-sort-function' were run.
+Scoring can be performed using a regexp on the Date header.  The Date is
+normalized to compact ISO 8601 format first (@pxref{Score File Format}).
 
 @item
- gnus-(group,summary)-highlight should respect any `face' text props set
-on the lines.
+A new command has been added to remove all data on articles from
+the native server (@pxref{Changing Servers}).
 
 @item
- use run-with-idle-timer for gnus-demon instead of the
-home-brewed stuff for better reliability.
+A new command for reading collections of documents
+(@code{nndoc} with @code{nnvirtual} on top) has been added---@kbd{C-M-d}
+(@pxref{Really Various Summary Commands}).
 
 @item
- add a way to select which NoCeM type to apply -- spam, troll, etc.
+Process mark sets can be pushed and popped (@pxref{Setting Process
+Marks}).
 
 @item
- nndraft-request-group should tally auto-save files.
+A new mail-to-news back end makes it possible to post even when the @sc{nntp}
+server doesn't allow posting (@pxref{Mail-To-News Gateways}).
 
 @item
- implement nntp-retry-on-break and nntp-command-timeout.
+A new back end for reading searches from Web search engines
+(@dfn{DejaNews}, @dfn{Alta Vista}, @dfn{InReference}) has been added
+(@pxref{Web Searches}).
 
 @item
- gnus-article-highlight-limit that says when not to highlight (long)
-articles.
+Groups inside topics can now be sorted using the standard sorting
+functions, and each topic can be sorted independently (@pxref{Topic
+Sorting}).
 
 @item
- (nnoo-set SERVER VARIABLE VALUE)
+Subsets of the groups can be sorted independently (@code{Sorting
+Groups}).
 
 @item
- nn*-spool-methods
+Cached articles can be pulled into the groups (@pxref{Summary Generation
+Commands}).
+@iftex
+@iflatex
+\marginpar[\mbox{}\hfill\epsfig{figure=ps/fred,width=3cm}]{\epsfig{figure=ps/fred,width=3cm}}
+@end iflatex
+@end iftex
 
 @item
- interrupitng agent fetching of articles should save articles.
+Score files are now applied in a more reliable order (@pxref{Score
+Variables}).
 
 @item
- command to open a digest group, and copy all the articles there to the
-current group.
+Reports on where mail messages end up can be generated (@pxref{Splitting
+Mail}).
 
 @item
- a variable to disable article body highlights if there's more than
-X characters in the body.
+More hooks and functions have been added to remove junk from incoming
+mail before saving the mail (@pxref{Washing Mail}).
 
 @item
- handle 480/381 authinfo requests separately.
+Emphasized text can be properly fontisized:
 
-@item
- include the texi/dir file in the distribution.
+@end itemize
 
-@item
- format spec to "tab" to a position.
 
-@item
- Move all prompting to the new `M-n' default style.
+@node Quassia Gnus
+@subsubsection Quassia Gnus
 
-@item
- command to display all dormant articles.
+New features in Gnus 5.6:
 
-@item
- gnus-auto-select-next makeover -- list of things it should do.
+@itemize @bullet
 
 @item
- a score match type that adds scores matching on From if From has replied
-to something someone else has said.
+New functionality for using Gnus as an offline newsreader has been
+added.  A plethora of new commands and modes have been added.  See
+@pxref{Gnus Unplugged} for the full story.
 
 @item
- Read Netscape discussion groups:
-snews://secnews.netscape.com/netscape.communicator.unix
+ The @code{nndraft} back end has returned, but works differently than
+before.  All Message buffers are now also articles in the @code{nndraft}
+group, which is created automatically.
 
 @item
-One command to edit the original version if an article, and one to edit
-the displayed version.
+@code{gnus-alter-header-function} can now be used to alter header
+values.
 
 @item
-@kbd{T v} -- make all process-marked articles the children of the
-current article.
+ @code{gnus-summary-goto-article} now accept Message-ID's.
 
 @item
-Switch from initial text to the new default text mechanism.
+ A new Message command for deleting text in the body of a message
+outside the region: @kbd{C-c C-v}.
 
 @item
-How about making it possible to expire local articles?  Will it be
-possible to make various constraints on when an article can be
-expired, e.g. (read), (age > 14 days), or the more interesting (read
-& age > 14 days)?
+ You can now post to component group in @code{nnvirtual} groups with
+@kbd{C-u C-c C-c}.
 
 @item
-New limit command---limit to articles that have a certain string
-in the head or body.
+ @code{nntp-rlogin-program}---new variable to ease customization.
 
 @item
-Allow breaking lengthy @sc{nntp} commands.
+ @code{C-u C-c C-c} in @code{gnus-article-edit-mode} will now inhibit
+re-highlighting of the article buffer.
 
 @item
-gnus-article-highlight-limit, to disable highlighting in big articles.
+ New element in @code{gnus-boring-article-headers}---@code{long-to}.
 
 @item
-Editing an article should put the article to be edited
-in a special, unique buffer.
+ @kbd{M-i} symbolic prefix command.  See the section "Symbolic
+Prefixes" in the Gnus manual for details.
 
 @item
-A command to send a mail to the admin-address group param.
+ @kbd{L} and @kbd{I} in the summary buffer now take the symbolic prefix
+@kbd{a} to add the score rule to the "all.SCORE" file.
 
 @item
-A Date scoring type that will match if the article
-is less than a certain number of days old.
+ @code{gnus-simplify-subject-functions} variable to allow greater
+control over simplification.
 
 @item
-New spec: %~(tab 56) to put point on column 56
+ @kbd{A T}---new command for fetching the current thread.
 
 @item
-Allow Gnus Agent scoring to use normal score files.
+ @kbd{/ T}---new command for including the current thread in the
+limit.
 
 @item
-Rething the Agent active file thing.  `M-g' doesn't update the active
-file, for instance.
+ @kbd{M-RET} is a new Message command for breaking cited text.
 
 @item
-With dummy roots, `^' and then selecing the first article
-in any other dummy thread will make Gnus highlight the
-dummy root instead of the first article.
+ @samp{\\1}-expressions are now valid in @code{nnmail-split-methods}.
 
 @item
-Propagate all group properties (marks, article numbers, etc) up to the
-topics for displaying.
+ The @code{custom-face-lookup} function has been removed.
+If you used this function in your initialization files, you must
+rewrite them to use @code{face-spec-set} instead.
 
 @item
-`n' in the group buffer with topics should go to the next group
-with unread articles, even if that group is hidden in a topic.
+ Canceling now uses the current select method.  Symbolic prefix
+@kbd{a} forces normal posting method.
 
 @item
-gnus-posting-styles doesn't work in drafts.
+ New command to translate M******** sm*rtq**t*s into proper
+text---@kbd{W d}.
 
 @item
-gnus-summary-limit-include-cached is slow when there are
-many articles in the cache, since it regenerates big parts of the
-summary buffer for each article.
+ For easier debugging of @code{nntp}, you can set
+@code{nntp-record-commands} to a non-@code{nil} value.
 
 @item
-Implement gnus-batch-brew-soup.
+ @code{nntp} now uses @file{~/.authinfo}, a @file{.netrc}-like file, for
+controlling where and how to send @sc{authinfo} to @sc{nntp} servers.
 
 @item
-Group parameters and summary commands for un/subscribing to mailing
-lists.
+ A command for editing group parameters from the summary buffer
+has been added.
 
 @item
-Introduce nnmail-home-directory.
+ A history of where mails have been split is available.
 
 @item
-gnus-fetch-group and friends should exit Gnus when the user
-exits the group.
+ A new article date command has been added---@code{article-date-iso8601}.
 
 @item
-The jingle is only played on the second invocation of Gnus.
+ Subjects can be simplified when threading by setting
+@code{gnus-score-thread-simplify}.
 
 @item
-Bouncing articles should do MIME.
+ A new function for citing in Message has been
+added---@code{message-cite-original-without-signature}.
 
 @item
-Crossposted articles should "inherit" the % or @ mark from the other
-groups it has been crossposted to, or something.  (Agent.)
+ @code{article-strip-all-blank-lines}---new article command.
 
 @item
-If point is on a group that appears multiple times in topics, and
-you press `l', point will move to the first instance of the group.
+ A new Message command to kill to the end of the article has
+been added.
 
 @item
-A spec for the group line format to display the number of
-agent-downloaded articles in the group.
+ A minimum adaptive score can be specified by using the
+@code{gnus-adaptive-word-minimum} variable.
 
 @item
-Some nntp servers never respond when posting, so there should be a
-timeout for all commands.
+ The "lapsed date" article header can be kept continually
+updated by the @code{gnus-start-date-timer} command.
 
 @item
-When stading on a topic line and `t'-ing, point goes to the last line.
-It should go somewhere else.
+ Web listserv archives can be read with the @code{nnlistserv} back end.
 
 @item
-I'm having trouble accessing a newsgroup with a "+" in its name with
-Gnus.  There is a new newsgroup on msnews.microsoft.com named
-"microsoft.public.multimedia.directx.html+time" that I'm trying to
-access as
-"nntp+msnews.microsoft.com:microsoft.public.multimedia.directx.html+time"
-but it gives an error that it cant access the group.
+ Old dejanews archives can now be read by @code{nnweb}.
 
-Is the "+" character illegal in newsgroup names?  Is there any way in
-Gnus to work around this?  (gnus 5.6.45 - XEmacs 20.4)
+@end itemize
 
-@item
+@node Pterodactyl Gnus
+@subsubsection Pterodactyl Gnus
 
-When `#F', do:
+New features in Gnus 5.8:
 
-@example
-Subject: Answer to your mails 01.01.1999-01.05.1999
- --text follows this line--
-Sorry I killfiled you...
-
-Under the subject "foo", you wrote on 01.01.1999:
-> bar
-Under the subject "foo1", you wrote on 01.01.1999:
-> bar 1
-@end example
+@itemize @bullet
 
 @item
-Allow "orphan" scores in the Agent scoring.
+The mail-fetching functions have changed.  See the manual for the
+many details.  In particular, all procmail fetching variables are gone.
 
-@item
-@example
-    - Edit article's summary line. 
-    - End edit
-    - Sort lines in buffer by subject
+If you used procmail like in
 
-    --> the old subject line appears in Summary buffer, not the one that was
-    just changed to.
-@end example
+@lisp
+(setq nnmail-use-procmail t)
+(setq nnmail-spool-file 'procmail)
+(setq nnmail-procmail-directory "~/mail/incoming/")
+(setq nnmail-procmail-suffix "\\.in")
+@end lisp
+
+this now has changed to
+
+@lisp
+(setq mail-sources
+      '((directory :path "~/mail/incoming/"
+                   :suffix ".in")))
+@end lisp
 
+More information is available in the info doc at Select Methods ->
+Getting Mail -> Mail Sources
 
 @item
-Remove list identifiers from the subject in the summary when doing `^'
-and the like.
+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
-Have the Agent write out articles, one by one, as it retrieves them,
-to avoid having to re-fetch them all if Emacs should crash while
-fetching. 
+Gnus has also been multilingualized.  This also affects too
+many parts of Gnus to summarize here, and adds many new variables.
 
 @item
-Be able to forward groups of messages as MIME digests.
+@code{gnus-auto-select-first} can now be a function to be
+called to position point.
 
 @item
-nnweb should include the "get whole article" article when getting articles. 
+The user can now decide which extra headers should be included in
+summary buffers and @sc{nov} files.
 
 @item
-When I type W W c (gnus-article-hide-citation) in the summary
-buffer, the citations are revealed, but the [+] buttons don't turn
-into [-] buttons.  (If I click on one of the [+] buttons, it does
-turn into a [-] button.)
+@code{gnus-article-display-hook} has been removed.  Instead, a number
+of variables starting with @code{gnus-treat-} have been added.
 
 @item
-Perhaps there should be a command to "attach" a buffer of comments to
-a message?  That is, `B WHATEVER', you're popped into a buffer, write
-something, end with `C-c C-c', and then the thing you've written gets
-to be the child of the message you're commenting.
+The Gnus posting styles have been redone again and now works in a
+subtly different manner.
 
 @item
-Handle external-body parts.
+New web-based back ends have been added: @code{nnslashdot},
+@code{nnwarchive} and @code{nnultimate}.  nnweb has been revamped,
+again, to keep up with ever-changing layouts.
 
 @item
-Solve the halting problem.
+Gnus can now read @sc{imap} mail via @code{nnimap}.
 
-@c TODO
 @end itemize
 
 @iftex
@@ -20991,16 +23936,16 @@ I guess most manuals are written after-the-fact; documenting a program
 that's already there.  This is not how this manual is written.  When
 implementing something, I write the manual entry for that something
 straight away.  I then see that it's difficult to explain the
-functionality, so I write how it's supposed to be, and then I change the 
+functionality, so I write how it's supposed to be, and then I change the
 implementation.  Writing the documentation and writing the code goes
 hand in hand.
 
 This, of course, means that this manual has no, or little, flow.  It
 documents absolutely everything in Gnus, but often not where you're
-looking for it.  It is a reference manual, and not a guide to how to get 
+looking for it.  It is a reference manual, and not a guide to how to get
 started with Gnus.
 
-That would be a totally different book, that should be written using the 
+That would be a totally different book, that should be written using the
 reference manual as source material.  It would look quite differently.
 
 
@@ -21035,26 +23980,48 @@ Send a mail to the person who has written what you are reading.
 Post an article to the current newsgroup responding to the article you
 are reading.
 
-@item backend
-@cindex backend
-Gnus gets fed articles from a number of backends, both news and mail
-backends.  Gnus does not handle the underlying media, so to speak---this
-is all done by the backends.
+@item back end
+@cindex back end
+Gnus considers mail and news to be mostly the same, really.  The only
+difference is how to access the actual articles.  News articles are
+commonly fetched via the protocol NNTP, whereas mail messages could be
+read from a file on the local disk.  The internal architecture of Gnus
+thus comprises a `front end' and a number of `back ends'.  Internally,
+when you enter a group (by hitting @key{RET}, say), you thereby invoke
+a function in the front end in Gnus.  The front end then `talks' to a
+back end and says things like ``Give me the list of articles in the foo
+group'' or ``Show me article number 4711''.
+
+So a back end mainly defines either a protocol (the @code{nntp} back end
+accesses news via NNTP, the @code{nnimap} back end accesses mail via
+IMAP) or a file format and directory layout (the @code{nnspool} back end
+accesses news via the common `spool directory' format, the @code{nnml}
+back end access mail via a file format and directory layout that's
+quite similar).
+
+Gnus does not handle the underlying media, so to speak---this is all
+done by the back ends.  A back end is a collection of functions to
+access the articles.
+
+However, sometimes the term `back end' is also used where `server'
+would have been more appropriate.  And then there is the term `select
+method' which can mean either.  The Gnus terminology can be quite
+confusing.
 
 @item native
 @cindex native
-Gnus will always use one method (and backend) as the @dfn{native}, or
+Gnus will always use one method (and back end) as the @dfn{native}, or
 default, way of getting news.
 
 @item foreign
 @cindex foreign
 You can also have any number of foreign groups active at the same time.
-These are groups that use non-native non-secondary backends for getting
+These are groups that use non-native non-secondary back ends for getting
 news.
 
 @item secondary
 @cindex secondary
-Secondary backends are somewhere half-way between being native and being
+Secondary back ends are somewhere half-way between being native and being
 foreign, but they mostly act like they are native.
 
 @item article
@@ -21090,7 +24057,7 @@ collection of @sc{nov} lines.
 
 @item @sc{nov}
 @cindex nov
-When Gnus enters a group, it asks the backend for the headers of all
+When Gnus enters a group, it asks the back end for the headers of all
 unread articles in the group.  Most servers support the News OverView
 format, which is more compact and much faster to read and parse than the
 normal @sc{head} format.
@@ -21137,7 +24104,7 @@ A machine one can connect to and get news (or mail) from.
 
 @item select method
 @cindex select method
-A structure that specifies the backend, the server and the virtual
+A structure that specifies the back end, the server and the virtual
 server settings.
 
 @item virtual server
@@ -21205,15 +24172,15 @@ section is designed to give general pointers on how to customize Gnus
 for some quite common situations.
 
 @menu
-* Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
-* Slow Terminal Connection::  You run a remote Emacs.
-* Little Disk Space::         You feel that having large setup files is icky.
-* Slow Machine::              You feel like buying a faster machine.
+* Slow/Expensive Connection::   You run a local Emacs and get the news elsewhere.
+* Slow Terminal Connection::    You run a remote Emacs.
+* Little Disk Space::           You feel that having large setup files is icky.
+* Slow Machine::                You feel like buying a faster machine.
 @end menu
 
 
 @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
@@ -21273,6 +24240,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.
@@ -21392,6 +24360,48 @@ it, copy the Emacs window to a file (with @code{xwd}, for instance), put
 it somewhere it can be reached, and include the URL of the picture in
 the bug report.
 
+@cindex patches
+If you would like to contribute a patch to fix bugs or make
+improvements, please produce the patch using @samp{diff -u}.
+
+@cindex edebug
+If you want to debug your problem further before reporting, possibly
+in order to solve the problem yourself and send a patch, you can use
+edebug.  Debugging lisp code is documented in the Elisp manual
+(@pxref{Debugging, , Debugging Lisp Programs, elisp, The GNU Emacs
+Lisp Reference Manual}).  To get you started with edebug, consider if
+you discover some weird behaviour when pressing @kbd{c}, the first
+step is to do @kbd{C-h k c} and click on the hyperlink (Emacs only) in
+the documentation buffer that leads you to the function definition,
+then press @kbd{M-x edebug-defun RET} with point inside that function,
+return to Gnus and press @kbd{c} to invoke the code.  You will be
+placed in the lisp buffer and can single step using @kbd{SPC} and
+evaluate expressions using @kbd{M-:} or inspect variables using
+@kbd{C-h v}, abort execution with @kbd{q}, and resume execution with
+@kbd{c} or @kbd{g}.
+
+@cindex elp
+@cindex profile
+@cindex slow
+Sometimes, a problem do not directly generate a elisp error but
+manifests itself by causing Gnus to be very slow.  In these cases, you
+can use @kbd{M-x toggle-debug-on-quit} and press C-j when things are
+slow, and then try to analyze the backtrace (repeating the procedure
+helps isolating the real problem areas).  A fancier approach is to use
+the elisp profiler, ELP.  The profiler is (or should be) fully
+documented elsewhere, but to get you started there are a few steps
+that need to be followed.  First, instrument the part of Gnus you are
+interested in for profiling, e.g. @kbd{M-x elp-instrument-package RET
+gnus} or @kbd{M-x elp-instrument-packagre RET message}.  Then perform
+the operation that is slow and press @kbd{M-x elp-results}.  You will
+then see which operations that takes time, and can debug them further.
+If the entire operation takes much longer than the time spent in the
+slowest function in the profiler output, you probably profiled the
+wrong part of Gnus.  To reset profiling statistics, use @kbd{M-x
+elp-reset-all}.  @kbd{M-x elp-restore-all} is supposed to remove
+profiling, but given the complexities and dynamic code generation in
+Gnus, it might not always work perfectly.
+
 If you just need help, you are better off asking on
 @samp{gnu.emacs.gnus}.  I'm not very helpful.
 
@@ -21413,20 +24423,20 @@ it.
 
 You can never expect the internals of a program not to change, but I
 will be defining (in some details) the interface between Gnus and its
-backends (this is written in stone), the format of the score files
+back ends (this is written in stone), the format of the score files
 (ditto), data structures (some are less likely to change than others)
 and general methods of operation.
 
 @menu
-* Gnus Utility Functions::   Common functions and variable to use.
-* Backend Interface::        How Gnus communicates with the servers.
-* Score File Syntax::        A BNF definition of the score file standard.
-* Headers::                  How Gnus stores headers internally.
-* Ranges::                   A handy format for storing mucho numbers.
-* Group Info::               The group info format.
-* Extended Interactive::     Symbolic prefixes and stuff.
-* Emacs/XEmacs Code::        Gnus can be run under all modern Emacsen.
-* Various File Formats::     Formats of files that Gnus use.
+* Gnus Utility Functions::      Common functions and variable to use.
+* Back End Interface::          How Gnus communicates with the servers.
+* Score File Syntax::           A BNF definition of the score file standard.
+* Headers::                     How Gnus stores headers internally.
+* Ranges::                      A handy format for storing mucho numbers.
+* Group Info::                  The group info format.
+* Extended Interactive::        Symbolic prefixes and stuff.
+* Emacs/XEmacs Code::           Gnus can be run under all modern Emacsen.
+* Various File Formats::        Formats of files that Gnus use.
 @end menu
 
 
@@ -21495,7 +24505,7 @@ Says whether @var{group} is read-only or not.
 
 @item gnus-news-group-p
 @findex gnus-news-group-p
-Says whether @var{group} came from a news backend.
+Says whether @var{group} came from a news back end.
 
 @item gnus-ephemeral-group-p
 @findex gnus-ephemeral-group-p
@@ -21536,7 +24546,7 @@ Narrows the current buffer to the body of the article.
 
 @item gnus-check-backend-function
 @findex gnus-check-backend-function
-Takes two parameters, @var{function} and @var{group}.  If the backend
+Takes two parameters, @var{function} and @var{group}.  If the back end
 @var{group} comes from supports @var{function}, return non-@code{nil}.
 
 @lisp
@@ -21551,19 +24561,19 @@ Prompts the user for a select method.
 @end table
 
 
-@node Backend Interface
-@subsection Backend Interface
+@node Back End Interface
+@subsection Back End Interface
 
 Gnus doesn't know anything about @sc{nntp}, spools, mail or virtual
 groups.  It only knows how to talk to @dfn{virtual servers}.  A virtual
-server is a @dfn{backend} and some @dfn{backend variables}.  As examples
+server is a @dfn{back end} and some @dfn{back end variables}.  As examples
 of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}.  As
 examples of the latter we have @code{nntp-port-number} and
 @code{nnmbox-directory}.
 
-When Gnus asks for information from a backend---say @code{nntp}---on
+When Gnus asks for information from a back end---say @code{nntp}---on
 something, it will normally include a virtual server name in the
-function parameters.  (If not, the backend should use the ``current''
+function parameters.  (If not, the back end should use the ``current''
 virtual server.)  For instance, @code{nntp-request-list} takes a virtual
 server as its only (optional) parameter.  If this virtual server hasn't
 been opened, the function should fail.
@@ -21580,8 +24590,8 @@ name.  Take this example:
 Here the virtual server name is @samp{odd-one} while the name of
 the physical server is @samp{ifi.uio.no}.
 
-The backends should be able to switch between several virtual servers.
-The standard backends implement this by keeping an alist of virtual
+The back ends should be able to switch between several virtual servers.
+The standard back ends implement this by keeping an alist of virtual
 server environments that they pull down/push up when needed.
 
 There are two groups of interface functions: @dfn{required functions},
@@ -21596,49 +24606,72 @@ talk about @dfn{return value}, I talk about the function value returned by
 the function call.  Functions that fail should return @code{nil} as the
 return value.
 
-Some backends could be said to be @dfn{server-forming} backends, and
-some might be said not to be.  The latter are backends that generally
+Some back ends could be said to be @dfn{server-forming} back ends, and
+some might be said not to be.  The latter are back ends that generally
 only operate on one group at a time, and have no concept of ``server''
 -- they have a group, and they deliver info on that group and nothing
 more.
 
-In the examples and definitions I will refer to the imaginary backend
+Gnus identifies each message by way of group name and article number.  A
+few remarks about these article numbers might be useful.  First of all,
+the numbers are positive integers.  Secondly, it is normally not
+possible for later articles to `re-use' older article numbers without
+confusing Gnus.  That is, if a group has ever contained a message
+numbered 42, then no other message may get that number, or Gnus will get
+mightily confused.@footnote{See the function
+@code{nnchoke-request-update-info}, @ref{Optional Back End Functions}.}
+Third, article numbers must be assigned in order of arrival in the
+group; this is not necessarily the same as the date of the message.
+
+The previous paragraph already mentions all the `hard' restrictions that
+article numbers must fulfill.  But it seems that it might be useful to
+assign @emph{consecutive} article numbers, for Gnus gets quite confused
+if there are holes in the article numbering sequence.  However, due to
+the `no-reuse' restriction, holes cannot be avoided altogether.  It's
+also useful for the article numbers to start at 1 to avoid running out
+of numbers as long as possible.
+
+Note that by convention, backends are named @code{nnsomething}, but
+Gnus also comes with some @code{nnnotbackends}, such as
+@file{nnheader.el}, @file{nnmail.el} and @file{nnoo.el}.
+
+In the examples and definitions I will refer to the imaginary back end
 @code{nnchoke}.
 
 @cindex @code{nnchoke}
 
 @menu
-* Required Backend Functions::        Functions that must be implemented.
-* Optional Backend Functions::        Functions that need not be implemented.
-* Error Messaging::                   How to get messages and report errors.
-* Writing New Backends::              Extending old backends.
-* Hooking New Backends Into Gnus::    What has to be done on the Gnus end.
-* Mail-like Backends::                Some tips on mail backends.
+* 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.
+* Mail-like Back Ends::         Some tips on mail back ends.
 @end menu
 
 
-@node Required Backend Functions
-@subsubsection Required Backend Functions
+@node Required Back End Functions
+@subsubsection Required Back End Functions
 
 @table @code
 
 @item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)
 
 @var{articles} is either a range of article numbers or a list of
-@code{Message-ID}s.  Current backends do not fully support either---only
-sequences (lists) of article numbers, and most backends do not support
+@code{Message-ID}s.  Current back ends do not fully support either---only
+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
 fetching (at most) @var{fetch-old} extra headers less than the smallest
 article number in @code{articles}, and filling the gaps as well.  The
-presence of this parameter can be ignored if the backend finds it
+presence of this parameter can be ignored if the back end finds it
 cumbersome to follow the request.  If this is non-@code{nil} and not a
 number, do maximum fetches.
 
@@ -21692,7 +24725,7 @@ For a closer look at what should be in those fields,
 @var{server} is here the virtual server name.  @var{definitions} is a
 list of @code{(VARIABLE VALUE)} pairs that define this virtual server.
 
-If the server can't be opened, no error should be signaled.  The backend
+If the server can't be opened, no error should be signaled.  The back end
 may then choose to refuse further attempts at connecting to this
 server.  In fact, it should do so.
 
@@ -21711,8 +24744,8 @@ There should be no data returned.
 
 @item (nnchoke-request-close)
 
-Close connection to all servers and free all resources that the backend
-have reserved.  All buffers that have been created by that backend
+Close connection to all servers and free all resources that the back end
+have reserved.  All buffers that have been created by that back end
 should be killed.  (Not the @code{nntp-server-buffer}, though.)  This
 function is generally only called when Gnus is shutting down.
 
@@ -21778,7 +24811,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
@@ -21790,7 +24825,7 @@ info         = "211 " 3* [ <number> " " ] <string>
 @item (nnchoke-close-group GROUP &optional SERVER)
 
 Close @var{group} and free any resources connected to it.  This will be
-a no-op on most backends.
+a no-op on most back ends.
 
 There should be no data returned.
 
@@ -21808,7 +24843,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
@@ -21836,8 +24873,8 @@ There should be no result data from this function.
 @end table
 
 
-@node Optional Backend Functions
-@subsubsection Optional Backend Functions
+@node Optional Back End Functions
+@subsubsection Optional Back End Functions
 
 @table @code
 
@@ -21860,11 +24897,11 @@ group-buffer = *active-line / *group-status
 
 @item (nnchoke-request-update-info GROUP INFO &optional SERVER)
 
-A Gnus group info (@pxref{Group Info}) is handed to the backend for
-alterations.  This comes in handy if the backend really carries all the
+A Gnus group info (@pxref{Group Info}) is handed to the back end for
+alterations.  This comes in handy if the back end really carries all the
 information (as is the case with virtual and imap groups).  This
 function should destructively alter the info to suit its needs, and
-should return the (altered) group info.
+should return a non-nil value.
 
 There should be no result data from this function.
 
@@ -21887,7 +24924,7 @@ There should be no result data from this function.
 
 Set/remove/add marks on articles.  Normally Gnus handles the article
 marks (such as read, ticked, expired etc) internally, and store them in
-@code{~/.newsrc.eld}.  Some backends (such as @sc{imap}) however carry
+@code{~/.newsrc.eld}.  Some back ends (such as @sc{imap}) however carry
 all information about the articles on the server, so Gnus need to
 propagate the mark information to the server.
 
@@ -21897,15 +24934,14 @@ ACTION is a list of mark setting requests, having this format:
 (RANGE ACTION MARK)
 @end example
 
-Range is a range of articles you wish to update marks on.  Action is
-@code{set}, @code{add} or @code{del}, respectively used for removing all
-existing marks and setting them as specified, adding (preserving the
-marks not mentioned) mark and removing (preserving the marks not
-mentioned) marks.  Mark is a list of marks; where each mark is a symbol.
-Currently used marks are @code{read}, @code{tick}, @code{reply},
-@code{expire}, @code{killed}, @code{dormant}, @code{save},
-@code{download} and @code{unsend}, but your backend should, if possible,
-not limit itself to these.
+RANGE is a range of articles you wish to update marks on.  ACTION is
+@code{add} or @code{del}, used to add marks or remove marks
+(preserving all marks not mentioned).  MARK is a list of marks; where
+each mark is a symbol.  Currently used marks are @code{read},
+@code{tick}, @code{reply}, @code{expire}, @code{killed},
+@code{dormant}, @code{save}, @code{download}, @code{unsend},
+@code{forward} and @code{recent}, but your back end should, if
+possible, not limit itself to these.
 
 Given contradictory actions, the last action in the list should be the
 effective one.  That is, if your action contains a request to add the
@@ -21927,10 +24963,10 @@ There should be no result data from this function.
 
 @item (nnchoke-request-update-mark GROUP ARTICLE MARK)
 
-If the user tries to set a mark that the backend doesn't like, this
+If the user tries to set a mark that the back end doesn't like, this
 function may change the mark.  Gnus will use whatever this function
 returns as the mark for @var{article} instead of the original
-@var{mark}.  If the backend doesn't care, it must return the original
+@var{mark}.  If the back end doesn't care, it must return the original
 @var{mark}, and not @code{nil} or any other type of garbage.
 
 The only use for this I can see is what @code{nnvirtual} does with
@@ -21944,10 +24980,10 @@ There should be no result data from this function.
 @item (nnchoke-request-scan &optional GROUP SERVER)
 
 This function may be called at any time (by Gnus or anything else) to
-request that the backend check for incoming articles, in one way or
-another.  A mail backend will typically read the spool file or query the
+request that the back end check for incoming articles, in one way or
+another.  A mail back end will typically read the spool file or query the
 POP server when this function is invoked.  The @var{group} doesn't have
-to be heeded---if the backend decides that it is too much work just
+to be heeded---if the back end decides that it is too much work just
 scanning for a single group, it may do a total scan of all groups.  It
 would be nice, however, to keep things local if that's practical.
 
@@ -21978,8 +25014,18 @@ description-buffer = *description-line
 @item (nnchoke-request-newgroups DATE &optional SERVER)
 
 The result data from this function should be all groups that were
-created after @samp{date}, which is in normal human-readable date
-format.  The data should be in the active buffer format.
+created after @samp{date}, which is in normal human-readable date format
+(i.e., the date format used in mail and news headers, and returned by
+the function @code{message-make-date} by default).  The data should be
+in the active buffer format.
+
+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 @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)
@@ -21993,7 +25039,7 @@ There should be no return data.
 
 This function should run the expiry process on all articles in the
 @var{articles} range (which is currently a simple list of article
-numbers.)  It is left up to the backend to decide how old articles
+numbers.)  It is left up to the back end to decide how old articles
 should be before they are removed by this function.  If @var{force} is
 non-@code{nil}, all @var{articles} should be deleted, no matter how new
 they are.
@@ -22036,6 +25082,9 @@ this function in short order.
 The function should return a cons where the @code{car} is the group name and
 the @code{cdr} is the article number that the article was entered as.
 
+The group should exist before the backend is asked to accept the
+article for that group.
+
 There should be no data returned.
 
 
@@ -22071,9 +25120,9 @@ There should be no data returned.
 
 @findex nnheader-report
 @findex nnheader-get-report
-The backends should use the function @code{nnheader-report} to report
+The back ends should use the function @code{nnheader-report} to report
 error conditions---they should not raise errors when they aren't able to
-perform a request.  The first argument to this function is the backend
+perform a request.  The first argument to this function is the back end
 symbol, and the rest are interpreted as arguments to @code{format} if
 there are multiple of them, or just a string if there is one of them.
 This function must always returns @code{nil}.
@@ -22086,18 +25135,18 @@ This function must always returns @code{nil}.
 
 Gnus, in turn, will call @code{nnheader-get-report} when it gets a
 @code{nil} back from a server, and this function returns the most
-recently reported message for the backend in question.  This function
+recently reported message for the back end in question.  This function
 takes one argument---the server symbol.
 
-Internally, these functions access @var{backend}@code{-status-string},
-so the @code{nnchoke} backend will have its error message stored in
+Internally, these functions access @var{back-end}@code{-status-string},
+so the @code{nnchoke} back end will have its error message stored in
 @code{nnchoke-status-string}.
 
 
-@node Writing New Backends
-@subsubsection Writing New Backends
+@node Writing New Back Ends
+@subsubsection Writing New Back Ends
 
-Many backends are quite similar.  @code{nnml} is just like
+Many back ends are quite similar.  @code{nnml} is just like
 @code{nnspool}, but it allows you to edit the articles on the server.
 @code{nnmh} is just like @code{nnml}, but it doesn't use an active file,
 and it doesn't maintain overview databases.  @code{nndir} is just like
@@ -22105,14 +25154,14 @@ and it doesn't maintain overview databases.  @code{nndir} is just like
 editing articles.
 
 It would make sense if it were possible to ``inherit'' functions from
-backends when writing new backends.  And, indeed, you can do that if you
+back ends when writing new back ends.  And, indeed, you can do that if you
 want to.  (You don't have to if you don't want to, of course.)
 
-All the backends declare their public variables and functions by using a
+All the back ends declare their public variables and functions by using a
 package called @code{nnoo}.
 
-To inherit functions from other backends (and allow other backends to
-inherit functions from the current backend), you should use the
+To inherit functions from other back ends (and allow other back ends to
+inherit functions from the current back end), you should use the
 following macros:
 
 @table @code
@@ -22135,8 +25184,8 @@ a public server variable.  Most state-oriented variables should be
 declared with @code{defvoo} instead of @code{defvar}.
 
 In addition to the normal @code{defvar} parameters, it takes a list of
-variables in the parent backends to map the variable to when executing
-a function in those backends.
+variables in the parent back ends to map the variable to when executing
+a function in those back ends.
 
 @lisp
 (defvoo nndir-directory nil
@@ -22149,7 +25198,7 @@ This means that @code{nnml-current-directory} will be set to
 of @code{nndir}.  (The same with @code{nnmh}.)
 
 @item nnoo-define-basics
-This macro defines some common functions that almost all backends should
+This macro defines some common functions that almost all back ends should
 have.
 
 @example
@@ -22159,11 +25208,11 @@ have.
 @item deffoo
 This macro is just like @code{defun} and takes the same parameters.  In
 addition to doing the normal @code{defun} things, it registers the
-function as being public so that other backends can inherit it.
+function as being public so that other back ends can inherit it.
 
 @item nnoo-map-functions
-This macro allows mapping of functions from the current backend to
-functions from the parent backends.
+This macro allows mapping of functions from the current back end to
+functions from the parent back ends.
 
 @example
 (nnoo-map-functions nndir
@@ -22177,7 +25226,7 @@ third, and fourth parameters will be passed on to
 value of @code{nndir-current-group}.
 
 @item nnoo-import
-This macro allows importing functions from backends.  It should be the
+This macro allows importing functions from back ends.  It should be the
 last thing in the source file, since it will only define functions that
 haven't already been defined.
 
@@ -22196,7 +25245,7 @@ defined now.
 
 @end table
 
-Below is a slightly shortened version of the @code{nndir} backend.
+Below is a slightly shortened version of the @code{nndir} back end.
 
 @lisp
 ;;; nndir.el --- single directory newsgroup access for Gnus
@@ -22221,7 +25270,9 @@ Below is a slightly shortened version of the @code{nndir} backend.
   "*Non-nil means that nndir will never retrieve NOV headers."
   nnml-nov-is-evil)
 
-(defvoo nndir-current-group "" nil nnml-current-group nnmh-current-group)
+(defvoo nndir-current-group ""
+  nil
+  nnml-current-group nnmh-current-group)
 (defvoo nndir-top-directory nil nil nnml-directory nnmh-directory)
 (defvoo nndir-get-new-mail nil nil nnml-get-new-mail nnmh-get-new-mail)
 
@@ -22239,7 +25290,8 @@ Below is a slightly shortened version of the @code{nndir} backend.
   (unless (assq 'nndir-directory defs)
     (push `(nndir-directory ,server) defs))
   (push `(nndir-current-group
-          ,(file-name-nondirectory (directory-file-name nndir-directory)))
+          ,(file-name-nondirectory
+            (directory-file-name nndir-directory)))
         defs)
   (push `(nndir-top-directory
           ,(file-name-directory (directory-file-name nndir-directory)))
@@ -22262,15 +25314,16 @@ Below is a slightly shortened version of the @code{nndir} backend.
 @end lisp
 
 
-@node Hooking New Backends Into Gnus
-@subsubsection Hooking New Backends Into Gnus
+@node Hooking New Back Ends Into Gnus
+@subsubsection Hooking New Back Ends Into Gnus
 
 @vindex gnus-valid-select-methods
-Having Gnus start using your new backend is rather easy---you just
+@findex gnus-declare-backend
+Having Gnus start using your new back end is rather easy---you just
 declare it with the @code{gnus-declare-backend} functions.  This will
-enter the backend into the @code{gnus-valid-select-methods} variable.
+enter the back end into the @code{gnus-valid-select-methods} variable.
 
-@code{gnus-declare-backend} takes two parameters---the backend name and
+@code{gnus-declare-backend} takes two parameters---the back end name and
 an arbitrary number of @dfn{abilities}.
 
 Here's an example:
@@ -22279,38 +25332,40 @@ Here's an example:
 (gnus-declare-backend "nnchoke" 'mail 'respool 'address)
 @end lisp
 
+The above line would then go in the @file{nnchoke.el} file.
+
 The abilities can be:
 
 @table @code
 @item mail
-This is a mailish backend---followups should (probably) go via mail.
+This is a mailish back end---followups should (probably) go via mail.
 @item post
-This is a newsish backend---followups should (probably) go via news.
+This is a newsish back end---followups should (probably) go via news.
 @item post-mail
-This backend supports both mail and news.
+This back end supports both mail and news.
 @item none
-This is neither a post nor mail backend---it's something completely
+This is neither a post nor mail back end---it's something completely
 different.
 @item respool
 It supports respooling---or rather, it is able to modify its source
 articles and groups.
 @item address
 The name of the server should be in the virtual server name.  This is
-true for almost all backends.
+true for almost all back ends.
 @item prompt-address
 The user should be prompted for an address when doing commands like
-@kbd{B} in the group buffer.  This is true for backends like
+@kbd{B} in the group buffer.  This is true for back ends like
 @code{nntp}, but not @code{nnmbox}, for instance.
 @end table
 
 
-@node Mail-like Backends
-@subsubsection Mail-like Backends
+@node Mail-like Back Ends
+@subsubsection Mail-like Back Ends
 
-One of the things that separate the mail backends from the rest of the
-backends is the heavy dependence by the mail backends on common
-functions in @file{nnmail.el}.  For instance, here's the definition of
-@code{nnml-request-scan}:
+One of the things that separate the mail back ends from the rest of the
+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)
@@ -22326,7 +25381,7 @@ This function takes four parameters.
 
 @table @var
 @item method
-This should be a symbol to designate which backend is responsible for
+This should be a symbol to designate which back end is responsible for
 the call.
 
 @item exit-function
@@ -22340,15 +25395,15 @@ This optional argument should be a group name if the splitting is to be
 performed for one group only.
 @end table
 
-@code{nnmail-get-new-mail} will call @var{backend}@code{-save-mail} to
-save each article.  @var{backend}@code{-active-number} will be called to
+@code{nnmail-get-new-mail} will call @var{back-end}@code{-save-mail} to
+save each article.  @var{back-end}@code{-active-number} will be called to
 find the article number assigned to this article.
 
 The function also uses the following variables:
-@var{backend}@code{-get-new-mail} (to see whether to get new mail for
-this backend); and @var{backend}@code{-group-alist} and
-@var{backend}@code{-active-file} to generate the new active file.
-@var{backend}@code{-group-alist} should be a group-active alist, like
+@var{back-end}@code{-get-new-mail} (to see whether to get new mail for
+this back end); and @var{back-end}@code{-group-alist} and
+@var{back-end}@code{-active-file} to generate the new active file.
+@var{back-end}@code{-group-alist} should be a group-active alist, like
 this:
 
 @example
@@ -22378,47 +25433,47 @@ Here's a typical score file:
 BNF definition of a score file:
 
 @example
-score-file       = "" / "(" *element ")"
-element          = rule / atom
-rule             = string-rule / number-rule / date-rule
-string-rule      = "(" quote string-header quote space *string-match ")"
-number-rule      = "(" quote number-header quote space *number-match ")"
-date-rule        = "(" quote date-header quote space *date-match ")"
-quote            = <ascii 34>
-string-header    = "subject" / "from" / "references" / "message-id" /
-                   "xref" / "body" / "head" / "all" / "followup"
-number-header    = "lines" / "chars"
-date-header      = "date"
-string-match     = "(" quote <string> quote [ "" / [ space score [ "" /
-                   space date [ "" / [ space string-match-t ] ] ] ] ] ")"
-score            = "nil" / <integer>
-date             = "nil" / <natural number>
-string-match-t   = "nil" / "s" / "substring" / "S" / "Substring" /
-                   "r" / "regex" / "R" / "Regex" /
-                   "e" / "exact" / "E" / "Exact" /
-                   "f" / "fuzzy" / "F" / "Fuzzy"
-number-match     = "(" <integer> [ "" / [ space score [ "" /
-                   space date [ "" / [ space number-match-t ] ] ] ] ] ")"
-number-match-t   = "nil" / "=" / "<" / ">" / ">=" / "<="
-date-match       = "(" quote <string> quote [ "" / [ space score [ "" /
-                   space date [ "" / [ space date-match-t ] ] ] ] ")"
-date-match-t     = "nil" / "at" / "before" / "after"
-atom             = "(" [ required-atom / optional-atom ] ")"
-required-atom    = mark / expunge / mark-and-expunge / files /
-                   exclude-files / read-only / touched
-optional-atom    = adapt / local / eval
-mark             = "mark" space nil-or-number
-nil-or-number    = "nil" / <integer>
-expunge          = "expunge" space nil-or-number
+score-file      = "" / "(" *element ")"
+element         = rule / atom
+rule            = string-rule / number-rule / date-rule
+string-rule     = "(" quote string-header quote space *string-match ")"
+number-rule     = "(" quote number-header quote space *number-match ")"
+date-rule       = "(" quote date-header quote space *date-match ")"
+quote           = <ascii 34>
+string-header   = "subject" / "from" / "references" / "message-id" /
+                  "xref" / "body" / "head" / "all" / "followup"
+number-header   = "lines" / "chars"
+date-header     = "date"
+string-match    = "(" quote <string> quote [ "" / [ space score [ "" /
+                  space date [ "" / [ space string-match-t ] ] ] ] ] ")"
+score           = "nil" / <integer>
+date            = "nil" / <natural number>
+string-match-t  = "nil" / "s" / "substring" / "S" / "Substring" /
+                  "r" / "regex" / "R" / "Regex" /
+                  "e" / "exact" / "E" / "Exact" /
+                  "f" / "fuzzy" / "F" / "Fuzzy"
+number-match    = "(" <integer> [ "" / [ space score [ "" /
+                  space date [ "" / [ space number-match-t ] ] ] ] ] ")"
+number-match-t  = "nil" / "=" / "<" / ">" / ">=" / "<="
+date-match      = "(" quote <string> quote [ "" / [ space score [ "" /
+                  space date [ "" / [ space date-match-t ] ] ] ] ")"
+date-match-t    = "nil" / "at" / "before" / "after"
+atom            = "(" [ required-atom / optional-atom ] ")"
+required-atom   = mark / expunge / mark-and-expunge / files /
+                  exclude-files / read-only / touched
+optional-atom   = adapt / local / eval
+mark            = "mark" space nil-or-number
+nil-or-number   = "nil" / <integer>
+expunge         = "expunge" space nil-or-number
 mark-and-expunge = "mark-and-expunge" space nil-or-number
-files            = "files" *[ space <string> ]
-exclude-files    = "exclude-files" *[ space <string> ]
-read-only        = "read-only" [ space "nil" / space "t" ]
-adapt            = "adapt" [ space "ignore" / space "t" / space adapt-rule ]
-adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
-local            = "local" *[ space "(" <string> space <form> ")" ]
-eval             = "eval" space <form>
-space            = *[ " " / <TAB> / <NEWLINE> ]
+files           = "files" *[ space <string> ]
+exclude-files   = "exclude-files" *[ space <string> ]
+read-only       = "read-only" [ space "nil" / space "t" ]
+adapt        = "adapt" [ space "ignore" / space "t" / space adapt-rule ]
+adapt-rule      = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
+local           = "local" *[ space "(" <string> space <form> ")" ]
+eval            = "eval" space <form>
+space           = *[ " " / <TAB> / <NEWLINE> ]
 @end example
 
 Any unrecognized elements in a score file should be ignored, but not
@@ -22759,8 +25814,8 @@ hit these indirections impose on Gnus under XEmacs should be slight.
 @subsection Various File Formats
 
 @menu
-* Active File Format::      Information on articles and groups available.
-* Newsgroups File Format::  Group descriptions.
+* Active File Format::          Information on articles and groups available.
+* Newsgroups File Format::      Group descriptions.
 @end menu
 
 
@@ -22785,9 +25840,9 @@ Here's a pseudo-BNF definition of this file:
 
 @example
 active      = *group-line
-group-line  = group space high-number space low-number space flag <NEWLINE>
+group-line  = group spc high-number spc low-number spc flag <NEWLINE>
 group       = <non-white-space string>
-space       = " "
+spc         = " "
 high-number = <non-negative integer>
 low-number  = <positive integer>
 flag        = "y" / "n" / "m" / "j" / "x" / "=" group
@@ -22823,7 +25878,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
@@ -22831,8 +25886,8 @@ you are already familiar with Emacs, just ignore this and go fondle your
 cat instead.
 
 @menu
-* Keystrokes::      Entering text and executing commands.
-* Emacs Lisp::      The built-in Emacs programming language.
+* Keystrokes::                  Entering text and executing commands.
+* Emacs Lisp::                  The built-in Emacs programming language.
 @end menu
 
 
@@ -22863,11 +25918,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
@@ -22905,10 +25960,10 @@ write the following:
 
 This function (really ``special form'') @code{setq} is the one that can
 set a variable to some value.  This is really all you need to know.  Now
-you can go and fill your @code{.emacs} file with lots of these to change
+you can go and fill your @file{.emacs} file with lots of these to change
 how Gnus works.
 
-If you have put that thing in your @code{.emacs} file, it will be read
+If you have put that thing in your @file{.emacs} file, it will be read
 and @code{eval}ed (which is lisp-ese for ``run'') the next time you
 start Emacs.  If you want to change the variable right away, simply say
 @kbd{C-x C-e} after the closing parenthesis.  That will @code{eval} the
@@ -22958,4 +26013,12 @@ 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
+% LocalWords:  nnmbox newusers Blllrph NEWGROUPS dingnusdingnusdingnus
+% LocalWords:  pre fab rec comp nnslashdot regex ga ga sci nnml nnbabyl nnmh
+% LocalWords:  nnfolder emph looong eld newsreaders defun init elc pxref