Synch to No Gnus 200411260034.
[elisp/gnus.git-] / texi / gnus.texi
index a232f7b..a367034 100644 (file)
@@ -653,6 +653,7 @@ Getting News
 * Direct Functions::            Connecting directly to the server.
 * Indirect Functions::          Connecting indirectly to the server.
 * Common Variables::            Understood by several connection functions.
+* NNTP marks::                  Storing marks for @acronym{NNTP} servers.
 
 Getting Mail
 
@@ -845,7 +846,7 @@ Filtering Spam Using The Spam ELisp Package
 * Blackholes::                  
 * Regular Expressions Header Matching::  
 * Bogofilter::                  
-* SpamAssassin backend::        
+* SpamAssassin back end::        
 * ifile spam filtering::        
 * spam-stat spam filtering::    
 * SpamOracle::                  
@@ -888,7 +889,7 @@ New Features
 * 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.
-* Oort Gnus::                   It's big.  It's far out.  Gnus 5.10.
+* Oort Gnus::                   It's big.  It's far out.  Gnus 5.10/5.11.
 * No Gnus::                     Lars, FIXME!
 
 Customization
@@ -1050,6 +1051,11 @@ you would typically set this variable to
 (setq gnus-secondary-select-methods '((nnmbox "")))
 @end lisp
 
+Note: the @acronym{NNTP} back end stores marks in marks files
+(@pxref{NNTP marks}).  This feature makes it easy to share marks between
+several Gnus installations, but may slow down things a bit when fetching
+new articles.  @xref{NNTP marks}, for more information.
+
 
 @node The First Time
 @section The First Time
@@ -9373,12 +9379,13 @@ If displaying "text/html" is discouraged, see
 @code{mm-discouraged-alternatives} in @ref{Display Customization,
 Display Customization, , emacs-mime, Emacs-Mime Manual}.  Images or
 other material inside a "multipart/related" part might be overlooked
-when this variable is nil.
+when this variable is @code{nil}.
 
 @vindex gnus-mime-display-multipart-as-mixed
 @item gnus-mime-display-multipart-as-mixed
-Display "multipart" parts as "multipart/mixed".  If t, it overrides nil
-values of @code{gnus-mime-display-multipart-alternative-as-mixed} and
+Display "multipart" parts as "multipart/mixed".  If @code{t}, it
+overrides @code{nil} values of
+@code{gnus-mime-display-multipart-alternative-as-mixed} and
 @code{gnus-mime-display-multipart-related-as-mixed}.
 
 @vindex mm-file-name-rewrite-functions
@@ -12789,6 +12796,7 @@ command.  You may use it as a server variable as follows:
 * Direct Functions::            Connecting directly to the server.
 * Indirect Functions::          Connecting indirectly to the server.
 * Common Variables::            Understood by several connection functions.
+* NNTP marks::                  Storing marks for @acronym{NNTP} servers.
 @end menu
 
 
@@ -13036,6 +13044,52 @@ is @samp{("-8")}.
 
 @end table
 
+@node NNTP marks
+@subsubsection NNTP marks
+@cindex storing NNTP marks
+
+Gnus stores marks (@pxref{Marking Articles}) for @acronym{NNTP}
+servers in marks files.  A marks file records what marks you have set
+in a group and each file is specific to the corresponding server.
+Marks files are stored in @file{~/News/marks}
+(@code{nntp-marks-directory}) under a classic hierarchy resembling
+that of a news server, for example marks for the group
+@samp{gmane.discuss} on the news.gmane.org server will be stored in
+the file @file{~/News/marks/news.gmane.org/gmane/discuss/.marks}.
+
+Marks files are useful because you can copy the @file{~/News/marks}
+directory (using rsync, scp or whatever) to another Gnus installation,
+and it will realize what articles you have read and marked.  The data
+in @file{~/News/marks} has priority over the same data in
+@file{~/.newsrc.eld}.
+
+Note that marks files are very much server-specific: Gnus remembers
+the article numbers so if you don't use the same servers on both
+installations things are most likely to break (most @acronym{NNTP}
+servers do not use the same article numbers as any other server).
+However, if you use servers A, B, C on one installation and servers A,
+D, E on the other, you can sync the marks files for A and then you'll
+get synchronization for that server between the two installations.
+
+Using @acronym{NNTP} marks can possibly incur a performance penalty so
+if Gnus feels sluggish, try setting the @code{nntp-marks-is-evil}
+variable to @code{t}.  Marks will then be stored in @file{~/.newsrc.eld}.
+
+Related variables:
+
+@table @code
+
+@item nntp-marks-is-evil
+@vindex nntp-marks-is-evil
+If non-@code{nil}, this back end will ignore any marks files.  The
+default is @code{nil}.
+
+@item nntp-marks-directory
+@vindex nntp-marks-directory
+The directory where marks for nntp groups will be stored.
+
+@end table
+
 
 @node News Spool
 @subsection News Spool
@@ -13593,10 +13647,16 @@ message retrieval.  The default is @code{nil}.
 
 @end table
 
+@vindex pop3-movemail
+@vindex pop3-leave-mail-on-server
 If the @code{:program} and @code{:function} keywords aren't specified,
 @code{pop3-movemail} will be used.  If the
 @code{pop3-leave-mail-on-server} is non-@code{nil} the mail is to be
-left on the POP server after fetching.
+left on the @acronym{POP} server after fetching when using
+@code{pop3-movemail}.  Note that POP servers maintain no state
+information between sessions, so what the client believes is there and
+what is actually there may not match up.  If they do not, then the whole
+thing can fall apart and leave you with a corrupt mailbox.
 
 Here are some examples.  Fetch from the default @acronym{POP} server,
 using the default user name, and default fetcher:
@@ -14112,7 +14172,7 @@ body of the messages:
 The buffer is narrowed to the message in question when @var{function}
 is run.  That's why @code{(widen)} needs to be called after
 @code{save-excursion} and @code{save-restriction} in the example
-above.  Also note that with the nnimap backend, message bodies will
+above.  Also note that with the nnimap back end, message bodies will
 not be downloaded by default.  You need to set
 @code{nnimap-split-download-body} to @code{t} to do that
 (@pxref{Splitting in IMAP}).
@@ -18588,8 +18648,8 @@ ask you to confirm your action (see
 @vindex gnus-agent
 Is the agent enabled?  The default is @code{t}.  When first enabled,
 the agent will use @code{gnus-agent-auto-agentize-methods} to
-automatically mark some backends as agentized.  You may change which
-backends are agentized using the agent commands in the server buffer.
+automatically mark some back ends as agentized.  You may change which
+back ends are agentized using the agent commands in the server buffer.
 
 To enter the server buffer, use the @kbd{^}
 (@code{gnus-group-enter-server-mode}) command in the group buffer.
@@ -18707,8 +18767,8 @@ prompt you to confirm that you really wish to proceed if you hit
 If you have never used the Agent before (or more technically, if
 @file{~/News/agent/lib/servers} does not exist), Gnus will
 automatically agentize a few servers for you.  This variable control
-which backends should be auto-agentized.  It is typically only useful
-to agentize remote backends.  The auto-agentizing has the same effect
+which back ends should be auto-agentized.  It is typically only useful
+to agentize remote back ends.  The auto-agentizing has the same effect
 as running @kbd{J a} on the servers (@pxref{Server Agent Commands}).
 If the file exist, you must manage the servers manually by adding or
 removing them, this variable is only applicable the first time you
@@ -22450,7 +22510,7 @@ call the external tools during splitting.  Example fancy split method:
           "spam"))))
 @end lisp
 
-Note that with the nnimap backend, message bodies will not be
+Note that with the nnimap back end, message bodies will not be
 downloaded by default.  You need to set
 @code{nnimap-split-download-body} to @code{t} to do that
 (@pxref{Splitting in IMAP}).
@@ -22492,11 +22552,11 @@ 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/}.
+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.hashcash.org/}.  Even more information can be found
+at @uref{http://www.camram.org/}.
 
 If you wish to generate hashcash for each message you send, you can
 customize @code{message-generate-hashcash} (@pxref{Mail Headers, ,Mail
@@ -22513,8 +22573,8 @@ You will need to set up some additional variables as well:
 @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 10, which is a rather low
-value.  Suggested useful values include 17 to 29.
+should consist of.  By default this is 20.  Suggested useful values
+include 17 to 29.
 
 @item hashcash-payment-alist
 @vindex hashcash-payment-alist
@@ -22529,7 +22589,7 @@ that is needed.  It can also contain @samp{(@var{addr} @var{string}
 @item hashcash-path
 @vindex hashcash-path
 Where the @code{hashcash} binary is installed.  This variable should
-be automatically set by @code{executable-find}, but if it's nil
+be automatically set by @code{executable-find}, but if it's @code{nil}
 (usually because the @code{hashcash} binary is not in your path)
 you'll get a warning when you check hashcash payments and an error
 when you generate hashcash payments.
@@ -22540,21 +22600,25 @@ Gnus can verify hashcash cookies, although this can also be done by
 hand customized mail filtering scripts.  To verify a hashcash cookie
 in a message, use the @code{mail-check-payment} function in the
 @code{hashcash.el} library.  You can also use the @code{spam.el}
-package with the @code{spam-use-hashcash} backend to validate hashcash
-cookies in incoming mail and filter mail accordingly.
+package with the @code{spam-use-hashcash} back end to validate hashcash
+cookies in incoming mail and filter mail accordingly (@pxref{Anti-spam
+Hashcash Payments}).
 
 @node Filtering Spam Using The Spam ELisp Package
 @subsection Filtering Spam Using The Spam ELisp Package
 @cindex spam filtering
 @cindex spam
 
-The idea behind @file{spam.el} is to have a control center for spam detection
-and filtering in Gnus.  To that end, @file{spam.el} does two things: it
+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 new mail, and it analyzes mail known to be spam or ham.
-@dfn{Ham} is the name used throughout @file{spam.el} to indicate
+@dfn{Ham} is the name used throughout @code{spam.el} to indicate
 non-spam messages.
 
-First of all, you @strong{must} run the function
+Make sure you read the section on the @code{spam.el} sequence of
+events.  See @xref{Spam ELisp Package Sequence of Events}.
+
+To use @code{spam.el}, you @strong{must} run the function
 @code{spam-initialize} to autoload @code{spam.el} and to install the
 @code{spam.el} hooks.  There is one exception: if you use the
 @code{spam-use-stat} (@pxref{spam-stat spam filtering}) setting, you
@@ -22565,7 +22629,7 @@ should turn it on before @code{spam-initialize}:
 (spam-initialize)
 @end example
 
-So, what happens when you load @file{spam.el}?
+So, what happens when you load @code{spam.el}?
 
 First, some hooks will get installed by @code{spam-initialize}.  There
 are some hooks for @code{spam-stat} so it can save its databases, and
@@ -22604,7 +22668,7 @@ You must have Bogofilter installed for that command to work properly.
 
 @end table
 
-Also, when you load @file{spam.el}, you will be able to customize its
+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.
 
@@ -22612,6 +22676,7 @@ group.
 * Spam ELisp Package Sequence of Events::  
 * Spam ELisp Package Filtering of Incoming Mail::  
 * Spam ELisp Package Global Variables::  
+* Spam ELisp Package Sorting and Score Display in Summary Buffer::  
 * Spam ELisp Package Configuration Examples::  
 * Blacklists and Whitelists::   
 * BBDB Whitelists::             
@@ -22620,7 +22685,7 @@ group.
 * Blackholes::                  
 * Regular Expressions Header Matching::  
 * Bogofilter::                  
-* SpamAssassin backend::        
+* SpamAssassin back end::        
 * ifile spam filtering::        
 * spam-stat spam filtering::    
 * SpamOracle::                  
@@ -22632,7 +22697,6 @@ group.
 @cindex spam filtering
 @cindex spam filtering sequence of events
 @cindex spam
-
 You must read this section to understand how @code{spam.el} works.
 Do not skip, speed-read, or glance through this section.
 
@@ -22640,20 +22704,20 @@ There are two @emph{contact points}, if you will, between
 @code{spam.el} and the rest of Gnus: checking new mail for spam, and
 leaving a group.
 
-Getting new mail is done in one of two ways.  You can either split
-your incoming mail or you can classify new articles as ham or spam
-when you enter the group.
+Getting new mail in Gnus is done in one of two ways.  You can either
+split your incoming mail or you can classify new articles as ham or
+spam when you enter the group.
 
-Splitting incoming mail is better suited to mail backends such as
+Splitting incoming mail is better suited to mail back ends such as
 @code{nnml} or @code{nnimap} where new mail appears in a single file
 called a @dfn{Spool File}.  See @xref{Spam ELisp Package Filtering of
 Incoming Mail}.
 
 @vindex gnus-spam-autodetect
 @vindex gnus-spam-autodetect-methods
-For backends such as @code{nntp} there is no incoming mail spool, so
+For back ends such as @code{nntp} there is no incoming mail spool, so
 an alternate mechanism must be used.  This may also happen for
-backends where the server is in charge of splitting incoming mail, and
+back ends where the server is in charge of splitting incoming mail, and
 Gnus does not do further splitting.  The @code{spam-autodetect} and
 @code{spam-autodetect-methods} group parameters (accessible with
 @kbd{G c} and @kbd{G p} as usual), and the corresponding variables
@@ -22661,12 +22725,14 @@ Gnus does not do further splitting.  The @code{spam-autodetect} and
 (accessible with @kbd{M-x customize-variable} as usual) can help.
 
 When @code{spam-autodetect} is used (you can turn it on for a
-group/topic or wholesale by regex, as needed), it hooks into the
-process of entering a group.  Thus, entering a group with unseen or
-unread articles becomes the substitute for checking incoming mail.
-Whether only unseen articles or all unread articles will be processed
-is determined by the @code{spam-autodetect-recheck-messages}.  When
-set to @code{t}, unread messages will be rechecked.
+group/topic or wholesale by regular expression matches, as needed), it
+hooks into the process of entering a group.  Thus, entering a group
+with unseen or unread articles becomes the substitute for checking
+incoming mail.  Whether only unseen articles or all unread articles
+will be processed is determined by the
+@code{spam-autodetect-recheck-messages}.  When set to @code{t}, unread
+messages will be rechecked.  You should probably stick with the
+default of only checking unseen messages.
 
 @code{spam-autodetect} grants the user at once more and less control
 of spam filtering.  The user will have more control over each group's
@@ -22689,8 +22755,8 @@ articles (depending on the @code{spam-mark-only-unseen-as-spam}
 variable) will be marked as spam.  Thus, mail split into a spam group
 gets automatically marked as spam when you enter the group.
 
-So, when you exit a group, the @code{spam-processors} are applied, if
-any are set, and the processed mail is moved to the
+Thus, when you exit a group, the @code{spam-processors} are applied,
+if any are set, and the processed mail is moved to the
 @code{ham-process-destination} or the @code{spam-process-destination}
 depending on the article's classification.  If the
 @code{ham-process-destination} or the @code{spam-process-destination},
@@ -22710,7 +22776,7 @@ which is what most people want.  If the
 @code{spam-process-destination} is @code{nil}, the spam is marked as
 expired, which is usually the right thing to do.
 
-If spam can not be moved---because of a read-only backend such as
+If spam can not be moved---because of a read-only back end such as
 @acronym{NNTP}, for example, it will be copied.
 
 If a ham mail is found in a ham group, as determined by the
@@ -22725,7 +22791,7 @@ no more than once.  Thus, ham is detected and processed only when
 necessary, which is what most people want.  More on this in
 @xref{Spam ELisp Package Configuration Examples}.
 
-If ham can not be moved---because of a read-only backend such as
+If ham can not be moved---because of a read-only back end such as
 @acronym{NNTP}, for example, it will be copied.
 
 If all this seems confusing, don't worry.  Soon it will be as natural
@@ -22738,7 +22804,7 @@ as typing Lisp one-liners on a neural interface@dots{} err, sorry, that's
 @cindex spam filtering incoming mail
 @cindex spam
 
-To use the @file{spam.el} facilities for incoming mail filtering, you
+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}:
 
@@ -22813,7 +22879,7 @@ spam checks for your nnmail split vs. your nnimap split.  Go crazy.
 You should still have specific checks such as
 @code{spam-use-regex-headers} set to @code{t}, even if you
 specifically invoke @code{spam-split} with the check.  The reason is
-that when loading @file{spam.el}, some conditional loading is done
+that when loading @code{spam.el}, some conditional loading is done
 depending on what @code{spam-use-xyz} variables you have set.  This
 is usually not critical, though.
 
@@ -22822,18 +22888,15 @@ is usually not critical, though.
 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 back end will only retrieve the
-message headers.  If you use @code{spam-check-bogofilter},
-@code{spam-check-ifile}, or @code{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 @acronym{IMAP} down, and
-that is not an appropriate decision to make on behalf of the user.
+message headers.  If you use a @emph{statistical} filter,
+e.g. @code{spam-check-bogofilter}, @code{spam-check-ifile}, or
+@code{spam-check-stat} (the splitters that can benefit from the full
+message body), this variable will be set automatically.  It is not set
+for non-statistical back ends by default because it will slow
+@acronym{IMAP} down.
 
 @xref{Splitting in IMAP}.
 
-@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.}
-
 @node Spam ELisp Package Global Variables
 @subsubsection Spam ELisp Package Global Variables
 @cindex spam filtering
@@ -22938,7 +23001,7 @@ parameter is not set, ham articles are left in place.  If the
 @code{spam-mark-ham-unread-before-move-from-spam-group} parameter is
 set, the ham articles are marked as unread before being moved.
 
-If ham can not be moved---because of a read-only backend such as
+If ham can not be moved---because of a read-only back end such as
 @acronym{NNTP}, for example, it will be copied.
 
 Note that you can use multiples destinations per group or regular
@@ -22975,7 +23038,7 @@ articles are only expired.  The group name is fully qualified, meaning
 that if you see @samp{nntp:servername} before the group name in the
 group buffer then you need it here as well.
 
-If spam can not be moved---because of a read-only backend such as
+If spam can not be moved---because of a read-only back end such as
 @acronym{NNTP}, for example, it will be copied.
 
 Note that you can use multiples destinations per group or regular
@@ -23007,6 +23070,55 @@ When autodetecting spam, this variable tells @code{spam.el} whether
 only unseen articles or all unread articles should be checked for
 spam.  It is recommended that you leave it off.
 
+@node Spam ELisp Package Sorting and Score Display in Summary Buffer
+@subsubsection Spam ELisp Package Sorting and Score Display in Summary Buffer
+@cindex spam scoring
+@cindex spam sorting
+@cindex spam score summary buffer
+@cindex spam sort summary buffer
+@cindex spam
+
+You can display the spam score of articles in your summary buffer, and
+you can sort articles by their spam score.
+
+First you need to decide which back end you will be using.  If you use
+the @code{spam-use-spamassassin},
+@code{spam-use-spamassassin-headers}, or @code{spam-use-regex-headers}
+back end, the @code{X-Spam-Status} header will be used.  If you use
+@code{spam-use-bogofilter}, the @code{X-Bogosity} header will be used.
+If you use @code{spam-use-crm114}, any header that matches the CRM114
+score format will be used.  As long as you set the appropriate back end
+variable to t @emph{before} you load @code{spam.el}, you will be
+fine.  @code{spam.el} will automatically add the right header to the
+internal Gnus list of required headers.
+
+To show the spam score in your summary buffer, add this line to your
+@code{gnus.el} file (note @code{spam.el} does not do that by default
+so it won't override any existing @code{S} formats you may have).
+
+@lisp
+(defalias 'gnus-user-format-function-S 'spam-user-format-function-S)
+@end lisp
+
+Now just set your summary line format to use @code{%uS}.  Here's an
+example that formats the spam score in a 5-character field:
+
+@lisp
+(setq gnus-summary-line-format 
+ "%U%R %10&user-date; $%5uS %6k  %B %(%4L: %*%-25,25a%) %s \n")
+@end lisp
+
+Finally, to sort by spam status, either do it globally:
+
+@lisp
+(setq
+ gnus-show-threads nil
+ gnus-article-sort-functions
+  '(spam-article-sort-by-spam-status))
+@end lisp
+
+or per group (@pxref{Sorting the Summary Buffer}).
+
 @node Spam ELisp Package Configuration Examples
 @subsubsection Spam ELisp Package Configuration Examples
 @cindex spam filtering
@@ -23097,7 +23209,7 @@ From Ted Zlatanov <tzz@@lifelogs.com>.
 
 @end example
 
-@subsubheading Using @file{spam.el} on an IMAP server with a statistical filter on the server
+@subsubheading Using @code{spam.el} on an IMAP server with a statistical filter on the server
 From Reiner Steib <reiner.steib@@gmx.de>.
 
 My provider has set up bogofilter (in combination with @acronym{DCC}) on
@@ -23288,6 +23400,12 @@ unless the sender is in the BBDB.  Use with care.  Only sender
 addresses in the BBDB will be allowed through; all others will be
 classified as spammers.
 
+While @code{spam-use-BBDB-exclusive} @emph{can} be used as an alias
+for @code{spam-use-BBDB} as far as @code{spam.el} is concerned, it is
+@emph{not} a separate back end.  If you set
+@code{spam-use-BBDB-exclusive} to t, @emph{all} your BBDB splitting
+will be exclusive.
+
 @end defvar
 
 @defvar gnus-group-ham-exit-processor-BBDB
@@ -23356,12 +23474,10 @@ Gmane provides.
 
 Similar to @code{spam-use-whitelist} (@pxref{Blacklists and
 Whitelists}), but uses hashcash tokens for whitelisting messages
-instead of the sender address.  You must have the @code{hashcash.el}
-package loaded for @code{spam-use-hashcash} to work properly.
-Messages without a hashcash payment token will be sent to the next
-spam-split rule.  This is an explicit filter, meaning that unless a
-hashcash token is found, the messages are not assumed to be spam or
-ham.
+instead of the sender address.  Messages without a hashcash payment
+token will be sent to the next spam-split rule.  This is an explicit
+filter, meaning that unless a hashcash token is found, the messages
+are not assumed to be spam or ham.
 
 @end defvar
 
@@ -23381,7 +23497,7 @@ list is fairly comprehensive, but make sure to let us know if it
 contains outdated servers.
 
 The blackhole check uses the @code{dig.el} package, but you can tell
-@file{spam.el} to use @code{dns.el} instead for better performance if
+@code{spam.el} to use @code{dns.el} instead for better performance if
 you set @code{spam-use-dig} to @code{nil}.  It is not recommended at
 this time to set @code{spam-use-dig} to @code{nil} despite the
 possible performance improvements, because some users may be unable to
@@ -23534,8 +23650,8 @@ variables to indicate to spam-split that Bogofilter should either be
 used, or has already been used on the article.  The 0.9.2.1 version of
 Bogofilter was used to test this functionality.
 
-@node SpamAssassin backend
-@subsubsection SpamAssassin backend
+@node SpamAssassin back end
+@subsubsection SpamAssassin back end
 @cindex spam filtering
 @cindex spamassassin, spam filtering
 @cindex spam
@@ -23675,7 +23791,7 @@ that you use @code{'(ham spam-use-stat)}.  Everything will work
 the same way, we promise.
 @end defvar
 
-This enables @file{spam.el} to cooperate with @file{spam-stat.el}.
+This enables @code{spam.el} to cooperate with @file{spam-stat.el}.
 @file{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
@@ -23700,11 +23816,11 @@ One possibility is to run SpamOracle as a @code{:prescript} from the
 @xref{Mail Source Specifiers}, (@pxref{SpamAssassin}).  This method has
 the advantage that the user can see the @emph{X-Spam} headers.
 
-The easiest method is to make @file{spam.el} (@pxref{Filtering Spam
+The easiest method is to make @code{spam.el} (@pxref{Filtering Spam
 Using The Spam ELisp Package}) call SpamOracle.
 
 @vindex spam-use-spamoracle
-To enable SpamOracle usage by @file{spam.el}, set the variable
+To enable SpamOracle usage by @code{spam.el}, set the variable
 @code{spam-use-spamoracle} to @code{t} and configure the
 @code{nnmail-split-fancy} or @code{nnimap-split-fancy} as described in
 the section @xref{Filtering Spam Using The Spam ELisp Package}.  In
@@ -23747,7 +23863,7 @@ false hits or misses, SpamOracle needs training.  SpamOracle learns the
 characteristics of your spam mails.  Using the @emph{add} mode
 (training mode) one has to feed good (ham) and spam mails to
 SpamOracle.  This can be done by pressing @kbd{|} in the Summary buffer
-and pipe the mail to a SpamOracle process or using @file{spam.el}'s
+and pipe the mail to a SpamOracle process or using @code{spam.el}'s
 spam- and ham-processors, which is much more convenient.  For a
 detailed description of spam- and ham-processors, @xref{Filtering Spam
 Using The Spam ELisp Package}.
@@ -23817,45 +23933,22 @@ Code
   "True if blackbox should be used.")
 @end lisp
 
-Add
-@lisp
-(spam-use-blackbox   . spam-check-blackbox)
-@end lisp
-to @code{spam-list-of-checks}.
-
-Add
-@lisp
-(gnus-group-ham-exit-processor-blackbox  ham spam-use-blackbox)
-(gnus-group-spam-exit-processor-blackbox spam spam-use-blackbox)
-@end lisp
-
-to @code{spam-list-of-processors}.
-
-Add
-@lisp
-(spam-use-blackbox spam-blackbox-register-routine
-                   nil
-                   spam-blackbox-unregister-routine
-                   nil)
-@end lisp
+Write @code{spam-check-blackbox} if Blackbox can check incoming mail.
 
-to @code{spam-registration-functions}.  Write the register/unregister
-routines using the bogofilter register/unregister routines as a
-start, or other restister/unregister routines more appropriate to
-Blackbox.
+Write @code{spam-blackbox-register-routine} and
+@code{spam-blackbox-unregister-routine} using the bogofilter
+register/unregister routines as a start, or other restister/unregister
+routines more appropriate to Blackbox, if Blackbox can
+register/unregister spam and ham.
 
 @item
 Functionality
 
-Write the @code{spam-check-blackbox} function.  It should return
-@samp{nil} or @code{spam-split-group}, observing the other
-conventions.  See the existing @code{spam-check-*} functions for
-examples of what you can do, and stick to the template unless you
-fully understand the reasons why you aren't.
-
-Make sure to add @code{spam-use-blackbox} to
-@code{spam-list-of-statistical-checks} if Blackbox is a statistical
-mail analyzer that needs the full message body to operate.
+The @code{spam-check-blackbox} function should return @samp{nil} or
+@code{spam-split-group}, observing the other conventions.  See the
+existing @code{spam-check-*} functions for examples of what you can
+do, and stick to the template unless you fully understand the reasons
+why you aren't.
 
 @end enumerate
 
@@ -23902,7 +23995,64 @@ Add
 (variable-item spam-use-blackbox)
 @end lisp
 to the @code{spam-autodetect-methods} group parameter in
-@code{gnus.el}.
+@code{gnus.el} if Blackbox can check incoming mail for spam contents.
+
+Finally, use the appropriate @code{spam-install-*-backend} function in
+@code{spam.el}.  Here are the available functions.
+
+
+@enumerate
+
+@item
+@code{spam-install-backend-alias}
+
+This function will simply install an alias for a back end that does
+everything like the original back end.  It is currently only used to
+make @code{spam-use-BBDB-exclusive} act like @code{spam-use-BBDB}.
+
+@item
+@code{spam-install-nocheck-backend}
+
+This function installs a back end that has no check function, but can
+register/unregister ham or spam.  The @code{spam-use-gmane} back end is
+such a back end.
+
+@item
+@code{spam-install-checkonly-backend}
+
+This function will install a back end that can only check incoming mail
+for spam contents.  It can't register or unregister messages.
+@code{spam-use-blackholes} and @code{spam-use-hashcash} are such
+back ends.
+
+@item
+@code{spam-install-statistical-checkonly-backend}
+
+This function installs a statistical back end (one which requires the
+full body of a message to check it) that can only check incoming mail
+for contents.  @code{spam-use-regex-body} is such a filter.
+
+@item
+@code{spam-install-statistical-backend}
+
+This function install a statistical back end with incoming checks and
+registration/unregistration routines.  @code{spam-use-bogofilter} is
+set up this way.
+
+@item
+@code{spam-install-backend}
+
+This is the most normal back end installation, where a back end that can
+check and register/unregister messages is set up without statistical
+abilities.  The @code{spam-use-BBDB} is such a back end.
+
+@item
+@code{spam-install-mover-backend}
+
+Mover back ends are internal to @code{spam.el} and specifically move
+articles around when the summary is exited.  You will very probably
+never install such a back end.
+@end enumerate
 
 @end enumerate
 
@@ -25061,7 +25211,7 @@ actually are people who are using Gnus.  Who'd'a thunk it!
 * 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.
-* Oort Gnus::                   It's big.  It's far out.  Gnus 5.10.
+* Oort Gnus::                   It's big.  It's far out.  Gnus 5.10/5.11.
 * No Gnus::                     Lars, FIXME!
 @end menu