*** empty log message ***
[gnus] / texi / gnus.texi
index a029d60..00d057d 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Gnus 5.4 Manual
+@settitle Gnus 5.4.55 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -287,13 +287,13 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Gnus 5.4 Manual
+@title Gnus 5.4.55 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1995,96 Free Software Foundation, Inc. 
+Copyright @copyright{} 1995,96,97 Free Software Foundation, Inc. 
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -323,7 +323,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.4.
+This manual corresponds to Gnus 5.4.55.
 
 @end ifinfo
 
@@ -641,8 +641,10 @@ Use the mantra ``dingnusdingnusdingnus'' to achieve permanent bliss.
 What Gnus does when it encounters a new group is determined by the
 @code{gnus-subscribe-newsgroup-method} variable.
 
-This variable should contain a function.  Some handy pre-fab values
-are:
+This variable should contain a function.  This function will be called
+with the name of the new group as the only parameter.
+
+Some handy pre-fab functions are:
 
 @table @code
 
@@ -1165,7 +1167,7 @@ User defined specifier.  The next character in the format string should
 be a letter.  @sc{gnus} will call the function
 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
 following @samp{%u}.  The function will be passed a single dummy
-paratere as argument.  The function should return a string, which will
+parameter as argument.  The function should return a string, which will
 be inserted into the buffer just like information from any other
 specifier.
 @end table
@@ -1816,8 +1818,9 @@ Make a group based on some file or other
 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} and @code{forward}.  If you run this command without a
-prefix, Gnus will guess at the file type.  @xref{Document Groups}.
+@code{rfc934}, @code{rfc822-forward}, and @code{forward}.  If you run
+this command without a prefix, Gnus will guess at the file type.
+@xref{Document Groups}.
 
 @item G w
 @kindex G w (Group)
@@ -1898,6 +1901,10 @@ doing a @kbd{a} in any group.  It is totally ignored when doing a
 followup---except that if it is present in a news group, you'll get mail
 group semantics when doing @kbd{f}.
 
+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.
+
 @item broken-reply-to
 @cindex broken-reply-to
 Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
@@ -1937,7 +1944,8 @@ alternative approach, @pxref{Expiring Mail}.
 If the group parameter has an element that looks like
 @code{(total-expire . t)}, all read articles will be put through the
 expiry process, even if they are not marked as expirable.  Use with
-caution.
+caution.  Unread, ticked and dormant articles are not eligible for
+expiry.
 
 @item expiry-wait
 @cindex expiry-wait
@@ -2005,6 +2013,13 @@ Use the @kbd{G p} command to edit group parameters of a group.
 
 Also @pxref{Topic Parameters}.
 
+Here's an example group parameter list:
+
+@example
+((to-address . "ding@@gnus.org")
+ (auto-expiry . t))
+@end example
+
 
 @node Listing Groups
 @section Listing Groups
@@ -2258,10 +2273,10 @@ Find bogus groups and delete them
 
 @item F
 @kindex F (Group)
-@findex gnus-find-new-newsgroups
-Find new groups and process them (@code{gnus-find-new-newsgroups}).  If
-given a prefix, use the @code{ask-server} method to query the server for
-new groups.
+@findex gnus-group-find-new-groups
+Find new groups and process them (@code{gnus-group-find-new-groups}).
+If given a prefix, use the @code{ask-server} method to query the server
+for new groups.
 
 @item C-c C-x
 @kindex C-c C-x (Group)
@@ -2536,6 +2551,12 @@ Move all groups that match some regular expression to a topic
 Copy all groups that match some regular expression to a topic
 (@code{gnus-topic-copy-matching}). 
 
+@item T h
+@kindex T h (Topic)
+@findex gnus-topic-toggle-display-empty-topics
+Toggle hiding empty topics
+(@code{gnus-topic-toggle-display-empty-topics}). 
+
 @item T #
 @kindex T # (Topic)
 @findex gnus-topic-mark-topic
@@ -2896,8 +2917,10 @@ a prefix, force Gnus to re-read the description from the server.
 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
 prefix, force Gnus to re-read the description file from the server.
 
-@item V
+@item H v
+@itemx V
 @kindex V (Group)
+@kindex H v (Group)
 @cindex version
 @findex gnus-version
 Display current Gnus version numbers (@code{gnus-version}).
@@ -3711,8 +3734,11 @@ headers of the forwarded article.
 @item S O p
 @kindex S O p (Summary)
 @findex gnus-uu-digest-post-forward
+@cindex digests
+@cindex making digests
 Digest the current series and forward the result to a newsgroup
-(@code{gnus-uu-digest-mail-forward}).  
+(@code{gnus-uu-digest-mail-forward}).  This command uses the
+process/prefix convention.
 
 @item S u
 @kindex S u (Summary)
@@ -4715,7 +4741,7 @@ number, you could do something like:
 (setq gnus-thread-sort-functions 
       '(gnus-thread-sort-by-number
         gnus-thread-sort-by-subject
-        gnus-thread-sort-by-score))
+        gnus-thread-sort-by-total-score))
 @end lisp
 
 The threads that have highest score will be displayed first in the
@@ -5211,6 +5237,23 @@ means that Gnus will look at the articles it saves for an
 @code{Archive-name} line and use that as a suggestion for the file
 name. 
 
+Here's an example function to clean up file names somewhat.  If you have
+lots of mail groups that are called things like
+@samp{nnml:mail.whatever}, you may want to chop off the beginning of
+these group names before creating the file name to save to.  The
+following will do just that:
+
+@lisp
+(defun my-save-name (group)
+  (when (string-match "^nnml:mail." group)
+    (substring group (match-end 0))))
+
+(setq gnus-split-methods
+      '((gnus-article-archive-name)
+        (my-save-name)))
+@end lisp
+
+
 @vindex gnus-use-long-file-name
 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
 @code{nil}, all the preceding functions will replace all periods
@@ -5824,7 +5867,10 @@ Signature}.
 @item W W p
 @kindex W W p (Summary)
 @findex gnus-article-hide-pgp
-Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}). 
+@vindex gnus-article-hide-pgp-hook
+Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}).  The
+@code{gnus-article-hide-pgp-hook} hook will be run after a @sc{pgp}
+signature has been hidden.
 
 @item W W P
 @kindex W W P (Summary)
@@ -6018,6 +6064,12 @@ Remove all blank lines at the end of the article
 Do all the three commands above
 (@code{gnus-article-strip-blank-lines}).
 
+@item W E s
+@kindex W E s (Summary)
+@findex gnus-article-strip-leading-space
+Remove all white space from the beginning of all lines of the article
+body (@code{gnus-article-strip-leading-space}).
+
 @end table
 
 
@@ -6311,6 +6363,10 @@ matter what group it belongs to.  @kbd{M-^}
 that look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You
 have to get it all exactly right.  No fuzzy searches, I'm afraid.
 
+The current select method will be used when fetching by
+@code{Message-ID} from non-news select method, but you can override this
+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
 support fetching by @code{Message-ID} very well (like @code{nnspool}),
@@ -6343,10 +6399,10 @@ Gnus, we offer a small selection of minor modes for the summary buffers.
 @subsection Pick and Read
 @cindex pick and read
 
-Some newsreaders (like @code{nn} and, uhm, @code{nn}) use a two-phased
-reading interface.  The user first marks the articles she wants to read
-from a summary buffer.  Then she starts reading the articles with just
-an article buffer displayed.
+Some newsreaders (like @code{nn} and, uhm, @code{Netnews} on VM/CMS) use
+a two-phased reading interface.  The user first marks the articles she
+wants to read from a summary buffer.  Then she starts reading the
+articles with just an article buffer displayed.
 
 @findex gnus-pick-mode
 @kindex M-x gnus-pick-mode
@@ -6554,7 +6610,10 @@ nodes to their children.  The default is @code{(?- ?\\ ?|)}.
 If this variable is non-@code{nil}, Gnus will try to keep the tree
 buffer as small as possible to allow more room for the other Gnus
 windows.  If this variable is a number, the tree buffer will never be
-higher than that number.  The default is @code{t}.
+higher than that number.  The default is @code{t}.  Note that if you
+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 that are displayed next to it.
 
 @item gnus-generate-tree-function
 @vindex gnus-generate-tree-function
@@ -6743,6 +6802,17 @@ Is is called after the summary buffer has been generated.  You might use
 it to, for instance, highlight lines or modify the look of the buffer in
 some other ungodly manner.  I don't care.
 
+@vindex gnus-summary-ignore-duplicates
+@item gnus-summary-ignore-duplicates
+When Gnus discovers two articles that have the same @code{Message-ID},
+it has to do something drastic.  No articles are allowed to have the
+same @code{Message-ID}, but this may happen when reading mail from some
+sources.  Gnus allows you to customize what happens with this variable.
+If it is @code{nil} (which is the default), Gnus will rename the
+@code{Message-ID} (for display purposes only) and display the article as
+any other article.  If this variable is @code{t}, it won't display the
+article---it'll be as if it never existed.
+
 @end table
 
 
@@ -7489,6 +7559,11 @@ Variables for customizing outgoing mail:
 List of regexps to match headers included in digested messages.  The
 headers will be included in the sequence they are matched.
 
+@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}.
+
 @end table
 
 
@@ -8211,12 +8286,12 @@ actually the case or not.
 
 That might seem quite naughty, but it does make sense most of the time.
 Let's say you have 10 groups subscribed to the server
-@samp{nepholococcygia.com}.  This server is located somewhere quite far
-away from you, the machine is quite, so it takes 1 minute just to find
-out that it refuses connection from you today.  If Gnus were to attempt
-to do that 10 times, you'd be quite annoyed, so Gnus won't attempt to do
-that.  Once it has gotten a single ``connection refused'', it will
-regard that server as ``down''.
+@samp{nephelococcygia.com}.  This server is located somewhere quite far
+away from you and the machine is quite slow, so it takes 1 minute just
+to find out that it refuses connection from you today.  If Gnus were to
+attempt to do that 10 times, you'd be quite annoyed, so Gnus won't
+attempt to do that.  Once it has gotten a single ``connection refused'',
+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?
@@ -8405,20 +8480,58 @@ 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.  Two pre-made
+This function is used to connect to the remote system.  Three pre-made
 functions are @code{nntp-open-network-stream}, which is the default, and
 simply connects to some port or other on the remote system.  The other
-is @code{nntp-open-rlogin}, which does an rlogin on the remote system,
-and then does a telnet to the @sc{nntp} server available there.
+two are @code{nntp-open-rlogin}, which does an @samp{rlogin} on the
+remote system, and then does a @samp{telnet} to the @sc{nntp} server
+available there, and @code{nntp-open-telnet}, which does a @samp{telnet}
+to the remote system and then another @samp{telnet} to get to the
+@sc{nntp} server.
+
+@code{nntp-open-rlogin}-related variables:
+
+@table @code
 
 @item nntp-rlogin-parameters
 @vindex nntp-rlogin-parameters
-If you use @code{nntp-open-rlogin} as the
-@code{nntp-open-connection-function}, this list will be used as the
-parameter list given to @code{rsh}.
+This list will be used as the parameter list given to @code{rsh}.
+
+@item nntp-rlogin-user-name
+@vindex nntp-rlogin-user-name
+User name on the remote system.
+
+@end table
+
+@code{nntp-open-telnet}-related variables:
+
+@table @code
+@item nntp-telnet-command
+@vindex nntp-telnet-command
+Command used to start @samp{telnet}.
+
+@item nntp-telnet-switches
+@vindex nntp-telnet-switches
+List of strings to be used as the switches to the telnet command.
+
+@item nntp-telnet-user-name
+@vindex nntp-telnet-user-name
+User name to log in on the remote system as.
+
+@item nntp-telnet-passwd
+@vindex nntp-telnet-passwd
+Password to use when logging in.
+
+@item nntp-telnet-parameters
+@vindex nntp-telnet-parameters
+A list of strings that will be executed as a command after logging in
+via telnet.
+
+@end table
 
 @item nntp-end-of-line
 @vindex nntp-end-of-line
@@ -8844,6 +8957,12 @@ names.  Groups like @samp{mail.misc} will end up in directories like
 @findex delete-file
 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
+discovery cache.  The default is @code{nil}.
+
 @end table
 
 
@@ -8876,7 +8995,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")
       ;; People...
-      (any "larsi@@ifi\\.uio\\.no" "people.Lars Magne Ingebrigtsen"))
+      (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
    ;; Unmatched mail goes to the catch all group.
    "misc.misc")
 @end lisp
@@ -9101,6 +9220,19 @@ have all articles that you read marked as expirable automatically.  All
 articles that are 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:
+
+@vindex gnus-mark-article-hook
+@lisp
+(remove-hook 'gnus-mark-article-hook                                
+             'gnus-summary-mark-read-and-unread-as-read)            
+(add-hook 'gnus-mark-article-hook 'gnus-summary-mark-unread-as-read)
+@end lisp
+
 Note that making a group auto-expirable don't mean that all read
 articles are expired---only the articles that are marked as expirable
 will be expired.  Also note the using the @kbd{d} command won't make
@@ -9124,7 +9256,9 @@ doesn't really mix very well.
 
 @vindex nnmail-expiry-wait
 The @code{nnmail-expiry-wait} variable supplies the default time an
-expirable article has to live.  The default is seven days.  
+expirable article has to live.  Gnus starts counting days from when the
+message @emph{arrived}, not from when it was sent.  The default is seven
+days.
 
 Gnus also supplies a function that lets you fine-tune how long articles
 are to live, based on what group they are in.  Let's say you want to
@@ -9282,9 +9416,8 @@ variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
 stored.) If all this sounds scary to you, you can set
 @code{nnmail-treat-duplicates} to @code{warn} (which is what it is by
 default), and @code{nnmail} won't delete duplicate mails.  Instead it
-will generate a brand new @code{Message-ID} for the mail and insert a
-warning into the head of the mail saying that it thinks that this is a
-duplicate of a different message.  
+will insert a warning into the head of the mail saying that it thinks
+that this is a duplicate of a different message.
 
 This variable can also be a function.  If that's the case, the function
 will be called from a buffer narrowed to the message in question with
@@ -9749,8 +9882,9 @@ Virtual server variables:
 @item nndoc-article-type
 @vindex nndoc-article-type
 This should be one of @code{mbox}, @code{babyl}, @code{digest},
-@code{mmdf}, @code{forward}, @code{rfc934}, @code{news}, @code{rnews},
-@code{mime-digest}, @code{clari-briefs}, or @code{guess}.
+@code{mmdf}, @code{forward}, @code{rfc934}, @code{rfc822-forward},
+@code{news}, @code{rnews}, @code{mime-digest}, @code{clari-briefs}, or
+@code{guess}.
 
 @item nndoc-post-type
 @vindex nndoc-post-type
@@ -9822,7 +9956,7 @@ the article.
 @item body-end
 If present, this should match the end of the body of the article.
 
-@item nndoc-file-end
+@item file-end
 If present, this should match the end of the file.  All text after this
 regexp will be totally ignored. 
 
@@ -10915,7 +11049,8 @@ Anyway, if you'd like to dig into it yourself, here's an example:
  (eval (ding)))
 @end lisp
 
-This example demonstrates absolutely everything about a score file. 
+This example demonstrates most score file elements.  For a different
+approach, see @pxref{Advanced Scoring}.
 
 Even though this looks much like lisp code, nothing here is actually
 @code{eval}ed.  The lisp reader is used to read this form, though, so it
@@ -11022,7 +11157,8 @@ articles, but also all followups to the matching articles.  This allows
 you e.g. increase the score of followups to your own articles, or
 decrease the score of followups to the articles of some known
 trouble-maker.  Uses the same match types as the @code{From} header
-uses.
+uses.  (Using this match key will lead to creation of @file{ADAPT}
+files.) 
 
 @item Thread
 This match key works along the same lines as the @code{Followup} match
@@ -11034,7 +11170,8 @@ article that has @var{X} in its @code{References} header.  (These new
 articles.)  This will ensure that you can raise/lower the score of an
 entire thread, even though some articles in the thread may not have
 complete @code{References} headers.  Note that using this may lead to
-undeterministic scores of the articles in the thread.
+undeterministic scores of the articles in the thread.  (Using this match
+key will lead to creation of @file{ADAPT} files.)
 @end table
 @end enumerate
 
@@ -11540,12 +11677,12 @@ 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
-@file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE} and
+@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:
 
 @lisp
 (setq gnus-global-score-files
-      '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE"
+      '("/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE"
         "/ftp@@ftp.some-where:/pub/score/"))
 @end lisp
 
@@ -12149,6 +12286,7 @@ four days, Gnus will decay the scores four times, for instance.
 * 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 unsolited commercial email.
 * Various Various::            Things that are really various.
 @end menu
 
@@ -12926,17 +13064,19 @@ your @file{.gnus} file:
 
 @findex gnus-demon-add-handler
 @lisp
-(gnus-demon-add-handler 'gnus-demon-close-connections nil 30)
+(gnus-demon-add-handler 'gnus-demon-close-connections 30 t)
 @end lisp
 
 @findex gnus-demon-add-nocem
 @findex gnus-demon-add-scanmail
 @findex gnus-demon-add-rescan
+@findex gnus-demon-add-scan-timestamps
 @findex gnus-demon-add-disconnection
 Some ready-made functions to do this has been created:
 @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection},
-@code{gnus-demon-add-rescan}, and @code{gnus-demon-add-scanmail}.  Just
-put those functions in your @file{.gnus} if you want those abilities.
+@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.
 
 @findex gnus-demon-init
 @findex gnus-demon-cancel
@@ -12948,7 +13088,7 @@ daemons, you can use the @code{gnus-demon-cancel} function.
 Note that adding daemons can be pretty naughty if you overdo it.  Adding
 functions that scan all news and mail from all servers every two seconds
 is a sure-fire way of getting booted off any respectable system.  So
-behave. 
+behave.
 
 
 @node NoCeM
@@ -13028,6 +13168,22 @@ says she is.  The default is @code{mc-verify}, which is a Mailcrypt
 function.  If this is too slow and you don't care for verification
 (which may be dangerous), you can set this variable to @code{nil}.
 
+If you want signed NoCeM messages to be verified and unsigned messages
+not to be verified (but used anyway), you could do something like:
+
+@lisp
+(setq gnus-nocem-verifyer 'my-gnus-mc-verify)
+
+(defun my-gnus-mc-verify ()
+  (not (eq 'forged
+           (ignore-errors
+             (if (mc-verify)
+                 t
+               'forged)))))
+@end lisp
+
+This might be dangerous, though.
+
 @item gnus-nocem-directory
 @vindex gnus-nocem-directory
 This is where Gnus will store its NoCeM cache files.  The default is
@@ -13041,6 +13197,11 @@ might then see old spam.
 
 @end table
 
+Using NoCeM could potentially be a memory hog.  If you have many living
+(i. e., subscribed or unsubscribed groups), your Emacs process will grow
+big.  If this is a problem, you should kill off all (or most) of your
+unsubscribed groups (@pxref{Subscription Commands}).
+
 
 @node Picons
 @section Picons
@@ -13264,7 +13425,7 @@ command.
 
 If you are a moderator, you can use the @file{gnus-mdrtn.el} package.
 It is not included in the standard Gnus package.  Write a mail to
-@samp{larsi@@ifi.uio.no} and state what group you moderate, and you'll
+@samp{larsi@@gnus.org} and state what group you moderate, and you'll
 get a copy.
 
 The moderation package is implemented as a minor mode for summary
@@ -13373,6 +13534,98 @@ adequate results---even when faced with strings generated by text
 manglers masquerading as newsreaders.
 
 
+@node Thwarting Email Spam
+@section Thwarting Email Spam
+@cindex email spam
+@cindex spam
+@cindex UCE
+@cindex unsolicited commercial email
+
+In these last days of the Usenet, commercial vultures are hanging about
+and grepping through news like crazy to find email addresses they can
+foist off their scams and products to.  As a reaction to this, many
+people have started putting nonsense addresses into their @code{From}
+lines.  I think this is counterproductive---it makes it difficult for
+people to send you legitimate mail in response to things you write, as
+well as making it difficult to see who wrote what.  This rewriting may
+perhaps be a bigger menace than the unsolicited commercial email itself
+in the end.
+
+The biggest problem I have with email spam is that it comes in under
+false pretenses.  I press @kbd{g} and Gnus merrily informs me that I
+have 10 new emails.  I say ``Golly gee!  Happy is me!'' and selects the
+mail group, only to find two pyramid schemes, seven advertisements
+(``New!  Miracle tonic for growing full, lustrouos hair on your toes!'')
+and one mail asking me to repent and find some god.
+
+This is annoying.
+
+The way to deal with this is having Gnus split out all spam into a
+@samp{spam} mail group (@pxref{Splitting Mail}).
+
+First, pick one (1) legal 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
+part of the mail address.)
+
+@lisp
+(setq message-default-news-headers
+      "From: Lars Magne Ingebrigtsen <larsi@@trym.ifi.uio.no>\n")
+@end lisp
+
+Then put the following split rule in @code{nnmail-split-fancy}
+(@pxref{Fancy Mail Splitting}):
+
+@lisp
+(
+ ...
+ (to "larsi@@trym.ifi.uio.no"
+      (| ("subject" "re:.*" "misc")
+         ("references" ".*@@.*" "misc")
+         "spam"))
+ ...
+)
+@end lisp
+
+This says that all mail to this address is suspect, but if it has a
+@code{Subject} that starts with a @samp{Re:} or has a @code{References}
+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
+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
+twarting scheme?  In any case, this is trivial to deal with---you just
+put anything not addressed to you in the @samp{spam} group by ending
+your fancy split rule in this way:
+
+@lisp
+(
+ ...
+ (to "larsi" "misc")
+ "spam")
+@end lisp
+
+In my experience, this will sort virtually everything into the right
+group.  You still have to check the @samp{spam} group from time to time to
+check for legitimate mail, though.  If you feel like being a good net
+citizen, you can even send off complaints to the proper authorities on
+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, availiable FOR FREE
+at @file{<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html>}.
+Since most e-mail spam is sent automatically, this may reconcile the
+cosmic balance somewhat.
+
+This works for me.  It allows people an easy way to contact me (they can
+just press @kbd{r} in the usual way), and I'm not bothered at all with
+spam.  It's a win-win situation.  Forging @code{From} headers to point
+to non-existant domains is yucky, in my opinion.
+
+
 @node Various Various
 @section Various Various
 @cindex mode lines
@@ -13380,11 +13633,15 @@ manglers masquerading as newsreaders.
 
 @table @code
 
+@item gnus-home-directory
+All Gnus path variables will be initialized from this variable, which
+defaults to @file{~/}.
+
 @item gnus-directory
 @vindex gnus-directory
-All Gnus directories will be initialized from this variable, which
-defaults to the @samp{SAVEDIR} environment variable, or @file{~/News/}
-if that variable isn't set.
+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.
 
 @item gnus-default-directory
 @vindex gnus-default-directory
@@ -13766,6 +14023,9 @@ Erik Naggum---help, ideas, support, code and stuff.
 Wes Hardaker---@file{gnus-picon.el} and the manual section on
 @dfn{picons} (@pxref{Picons}).
 
+@item
+Kim-Minh Kaplan---further work on the picon code.
+
 @item 
 Brad Miller---@file{gnus-gl.el} and the GroupLens manual section
 (@pxref{GroupLens}).
@@ -13833,6 +14093,7 @@ Also thanks to the following for patches and stuff:
 
 Adrian Aichner,
 Peter Arius, 
+Matt Armstrong,
 Marc Auslander,
 Chris Bone,
 Mark Borges,
@@ -13844,6 +14105,7 @@ Alastair Burt,
 Joao Cachopo,
 Zlatko Calusic,
 Massimo Campostrini,
+Dan Christensen,
 Michael R. Cook,
 Glenn Coombs, 
 Frank D. Cringle, 
@@ -13852,17 +14114,21 @@ Andre Deparade,
 Ulrik Dickow,
 Dave Disser,
 Joev Dubach,
+Michael Welsh Duggan,
 Paul Eggert,
 Michael Ernst,
 Luc Van Eycken,
 Sam Falkner,
 Paul Franklin, 
+Arne Georg Gleditsch,
 David S. Goldberg,
 D. Hall, 
 Magnus Hammerin,
 Raja R. Harinath,
 Hisashige Kenji, @c Hisashige
 Marc Horowitz,
+Gunnar Horrigmo,
+Brad Howes,
 François Felix Ingrand,
 Ishikawa Ichiro, @c Ishikawa
 Lee Iverson, 
@@ -13884,6 +14150,7 @@ Tonny Madsen,
 Shlomo Mahlab,
 Nat Makarevitch,
 David Martin,
+Gordon Matzigkeit,
 Timo Metzemakers,
 Richard Mlynarik,
 Lantz Moore,
@@ -13903,13 +14170,16 @@ John McClary Prevost,
 Colin Rafferty,
 Bart Robinson,
 Jason Rumney,
+Dewey M. Sasser,
 Loren Schall,
 Dan Schmidt,
 Ralph Schleicher,
+Philippe Schnoebelen,
 Randal L. Schwartz,
 Danny Siu, 
 Paul D. Smith,
 Jeff Sparkes,
+Toby Speight,
 Michael Sperber,
 Richard Stallman,
 Greg Stark, 
@@ -13919,6 +14189,7 @@ Samuel Tardieu,
 Teddy,
 Chuck Thompson,
 Philippe Troin,
+Aaron M. Ucko,
 Jan Vroonhof,
 Barry A. Warsaw,
 Christoph Wedler,
@@ -14583,7 +14854,8 @@ 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 different backends for getting news.
+These are groups that use non-native non-secondary backends for getting
+news.
 
 @item secondary
 @cindex secondary
@@ -14896,8 +15168,8 @@ If you just need help, you are better off asking on
 
 @cindex gnu.emacs.gnus
 @cindex ding mailing list
-You can also ask on the ding mailing list---@samp{ding@@ifi.uio.no}.
-Write to @samp{ding-request@@ifi.uio.no} to subscribe.
+You can also ask on the ding mailing list---@samp{ding@@gnus.org}.
+Write to @samp{ding-request@@gnus.org} to subscribe.
 
 
 @node A Programmers Guide to Gnus
@@ -14916,6 +15188,7 @@ backends (this is written in stone), the format of the score files
 and general method of operations.
 
 @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.
@@ -14926,6 +15199,114 @@ and general method of operations.
 @end menu
 
 
+@node Gnus Utility Functions
+@subsection Gnus Utility Functions
+@cindex Gnus utility functions
+@cindex utility functions
+@cindex functions
+@cindex internal variables
+
+When writing small functions to be run from hooks (and stuff), it's
+vital to have access to the Gnus internal functions and variables.
+Below is a list of the most common ones.
+
+@table @code
+
+@item gnus-newsgroup-name
+@vindex gnus-newsgroup-name
+This variable holds the name of the current newsgroup.
+
+@item gnus-find-method-for-group
+@findex gnus-find-method-for-group
+A function that returns the select method for @var{group}.
+
+@item gnus-group-real-name
+@findex gnus-group-real-name
+Takes a full (prefixed) Gnus group name, and returns the unprefixed
+name.
+
+@item gnus-group-prefixed-name
+@findex gnus-group-prefixed-name
+Takes an unprefixed group name and a select method, and returns the full
+(prefixed) Gnus group name.
+
+@item gnus-get-info
+@findex gnus-get-info
+Return the group info list for @var{group}.
+
+@item gnus-add-current-to-buffer-list
+@findex gnus-add-current-to-buffer-list
+Add the current buffer to the list of buffers to be killed on Gnus
+exit.
+
+@item gnus-continuum-version
+@findex gnus-continuum-version
+Take a Gnus version string as a parameter and returns a floating point
+number.  Earlier versions will always get a lower number than later
+versions.
+
+@item gnus-group-read-only-p
+@findex gnus-group-read-only-p
+Say whether @var{group} is read-only or not.
+
+@item gnus-news-group-p
+@findex gnus-news-group-p
+Say whether @var{group} came from a news backend.
+
+@item gnus-ephemeral-group-p
+@findex gnus-ephemeral-group-p
+Say whether @var{group} is ephemeral or not.
+
+@item gnus-server-to-method
+@findex gnus-server-to-method
+Return the select method corresponding to @var{server}.
+
+@item gnus-server-equal
+@findex gnus-server-equal
+Say whether two virtual servers are equal.
+
+@item gnus-group-native-p
+@findex gnus-group-native-p
+Say whether @var{group} is native or not.
+
+@item gnus-group-secondary-p
+@findex gnus-group-secondary-p
+Say whether @var{group} is secondary or not.
+
+@item gnus-group-foreign-p
+@findex gnus-group-foreign-p
+Say whether @var{group} is foreign or not.
+
+@item group-group-find-parameter
+@findex group-group-find-parameter
+Return the parameter list of @var{group}.  If given a second parameter,
+return the value of that parameter for @var{group}.
+
+@item gnus-group-set-parameter
+@findex gnus-group-set-parameter
+Takes three parameters; @var{group}, @var{parameter} and @var{value}.
+
+@item gnus-narrow-to-body
+@findex gnus-narrow-to-body
+Narrow 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
+@var{group} comes from supports @var{function}, return non-@code{nil}.
+
+@lisp
+(gnus-check-backend-function "request-scan" "nnml:misc")
+=> t
+@end lisp
+
+@item gnus-read-method
+@findex gnus-read-method
+Prompt the user for a select method.
+
+@end table
+
+
 @node Backend Interface
 @subsection Backend Interface
 
@@ -15748,7 +16129,7 @@ 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 "nil" / space "t" / space adapt-rule ]
+adapt            = "adapt" [ space "ignore" / space "t" / space adapt-rule ]
 adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
 local            = "local" *[ space "(" <string> space <form> ")" ]
 eval             = "eval" space <form>
@@ -15889,7 +16270,7 @@ second is a more complex one:
 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
                 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
                 (nnml "")
-                (auto-expire (to-address "ding@@ifi.uio.no")))
+                (auto-expire (to-address "ding@@gnus.org")))
 @end example
 
 The first element is the @dfn{group name}---as Gnus knows the group,
@@ -15923,6 +16304,67 @@ Actually that @samp{marks} rule is a fib.  A @samp{marks} is a
 @samp{<string>} consed on to a @samp{range}, but that's a bitch to say
 in pseudo-BNF.
 
+If you have a Gnus info and want to access the elements, Gnus offers a
+series of macros for getting/setting these elements.
+
+@table @code
+@item gnus-info-group
+@itemx gnus-info-set-group
+@findex gnus-info-group
+@findex gnus-info-set-group
+Get/set the group name.
+
+@item gnus-info-rank
+@itemx gnus-info-set-rank
+@findex gnus-info-rank
+@findex gnus-info-set-rank
+Get/set the group rank.
+
+@item gnus-info-level
+@itemx gnus-info-set-level
+@findex gnus-info-level
+@findex gnus-info-set-level
+Get/set the group level.
+
+@item gnus-info-score
+@itemx gnus-info-set-score
+@findex gnus-info-score
+@findex gnus-info-set-score
+Get/set the group score.
+
+@item gnus-info-read
+@itemx gnus-info-set-read
+@findex gnus-info-read
+@findex gnus-info-set-read
+Get/set the ranges of read articles.
+
+@item gnus-info-marks
+@itemx gnus-info-set-marks
+@findex gnus-info-marks
+@findex gnus-info-set-marks
+Get/set the lists of ranges of marked articles.
+
+@item gnus-info-method
+@itemx gnus-info-set-method
+@findex gnus-info-method
+@findex gnus-info-set-method
+Get/set the group select method.
+
+@item gnus-info-params
+@itemx gnus-info-set-params
+@findex gnus-info-params
+@findex gnus-info-set-params
+Get/set the group parameters.
+@end table
+
+All the getter functions take one parameter---the info list.  The setter
+functions take two parameters---the info list and the new value.
+
+The last three elements in the group info aren't mandatory, so it may be
+necessary to extend the group info before setting the element.  If this
+is necessary, you can just pass on a non-@code{nil} third parameter to
+the three final setter functions to have this happen automatically.
+
 
 @node Emacs/XEmacs Code
 @subsection Emacs/XEmacs Code
@@ -15961,6 +16403,11 @@ not redefine any native Emacs functions while running under XEmacs---it
 does this @code{defalias} thing with Gnus equivalents instead.  Cleaner
 all over.
 
+In the cases when the XEmacs function interface was obviously
+cleaner, I used it instead.  For example @code{gnus-region-active-p}
+is an alias for @code{region-active-p} in XEmacs, whereas in Emacs
+it is a function.
+
 Of course, I could have chosen XEmacs as my native platform and done
 mapping functions the other way around.  But I didn't.  The performance
 hit these indirections impose on Gnus under XEmacs should be slight.