*** empty log message ***
[gnus] / texi / gnus.texi
index ca74658..ec316b9 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Gnus 5.4.46 Manual
+@settitle Quassia Gnus 0.6 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
 
 @iftex
 @iflatex
-\documentclass[twoside,a4paper,openright]{book}
+\documentclass[twoside,a4paper,openright,11pt]{book}
 \usepackage[latin1]{inputenc}
 \usepackage{pagestyle}
 \usepackage{epsfig}
-\fontfamily{bembo}\selectfont
+\usepackage{bembo}
 
 \makeindex
 \begin{document}
@@ -32,9 +32,9 @@
 \newcommand{\gnuskindex}[1]{\index{#1}}
 \newcommand{\gnusindex}[1]{\index{#1}}
 
-\newcommand{\gnustt}[1]{{\textbf{\textsf{#1}}}}
+\newcommand{\gnustt}[1]{{\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}}
 \newcommand{\gnuscode}[1]{\gnustt{#1}}
-\newcommand{\gnussamp}[1]{``\gnustt{#1}''}
+\newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\fontfamily{pcr}\fontsize{10pt}{10}\selectfont #1}''}
 \newcommand{\gnuslisp}[1]{\gnustt{#1}}
 \newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
 \newcommand{\gnusfile}[1]{`\gnustt{#1}'}
@@ -42,7 +42,7 @@
 \newcommand{\gnusi}[1]{\textit{#1}}
 \newcommand{\gnusstrong}[1]{\textbf{#1}}
 \newcommand{\gnusemph}[1]{\textit{#1}}
-\newcommand{\gnusvar}[1]{\textsl{\textsf{#1}}}
+\newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}}
 \newcommand{\gnussc}[1]{\textsc{#1}}
 \newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
 \newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
@@ -61,7 +61,7 @@
 
 \newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=gnus-head.eps,height=1cm}}}
 \newcommand{\gnusinteresting}{
-\marginpar[\hspace{2.5cm}\gnushead]{\gnushead}
+\marginpar[\mbox{}\hfill\gnushead]{\gnushead}
 }
 
 \newcommand{\gnuscleardoublepage}{\ifodd\count0\mbox{}\clearpage\thispagestyle{empty}\mbox{}\clearpage\else\clearpage\fi}
 \thispagestyle{empty}
 \hspace*{-2cm}
 \begin{picture}(500,500)(0,0)
-\put(0,0){\makebox(480,350)[tr]{#1}}
+\put(480,350){\makebox(0,0)[tr]{#1}}
 \put(40,300){\makebox(500,50)[bl]{{\Huge\bf{#2}}}}
 \end{picture}
 \clearpage
 }
 
+\newcommand{\gnusfigure}[3]{
+\begin{figure}
+\mbox{}\ifodd\count0\hspace*{-0.8cm}\else\hspace*{-3cm}\fi\begin{picture}(440,#2)
+#3
+\end{picture}
+\caption{#1}
+\end{figure}
+}
+
+\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}}}
+}
+
+\newcommand{\gnuspicon}[1]{
+\marginpar[\mbox{}\hfill\epsfig{figure=#1,height=1.5cm}]{\epsfig{figure=#1,height=1.5cm}}
+}
+
+\newcommand{\gnusxface}[1]{
+\marginpar[\mbox{}\hfill\epsfig{figure=#1,height=1cm}]{\epsfig{figure=#1,height=1cm}}
+}
+
+
 \newcommand{\gnusitemx}[1]{\mbox{}\vspace*{-\itemsep}\vspace*{-\parsep}\item#1}
 
 \newcommand{\gnussection}[1]{
 {
 \ifodd\count0
 {
-\hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{chapter}.\arabic{section}} \textbf{\gnussectionname\hfill\arabic{page}}}}
+\makebox[12cm]{\hspace*{3.1cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{chapter}.\arabic{section}} \textbf{\gnussectionname\hfill\arabic{page}}}}}
 }
 \else
 {
-\hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}
+\makebox[12cm]{\hspace*{-2.95cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}}
 }
 \fi
 }
 \gnustitle{\gnustitlename}\\
 \rule{15cm}{1mm}\\
 \vfill
-\hspace*{-1cm}\epsfig{figure=gnus-big-logo.eps,height=15cm}
+\hspace*{0cm}\epsfig{figure=gnus-big-logo.eps,height=15cm}
 \vfill
 \rule{15cm}{1mm}\\
 \gnusauthor{by Lars Magne Ingebrigtsen}
@@ -287,7 +309,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Gnus 5.4.46 Manual
+@title Quassia Gnus 0.6 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -323,7 +345,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.46.
+This manual corresponds to Quassia Gnus 0.6.
 
 @end ifinfo
 
@@ -386,7 +408,8 @@ If you want to start Gnus in a different frame, you can use the command
 @kbd{M-x gnus-other-frame} instead.
 
 If things do not go smoothly at startup, you have to twiddle some
-variables. 
+variables in your @file{~/.gnus} file.  This file is similar to
+@file{~/.emacs}, but is read when gnus starts.
 
 @menu
 * Finding the News::    Choosing a method for getting news.
@@ -412,7 +435,7 @@ variables.
 The @code{gnus-select-method} variable says where Gnus should look for
 news.  This variable should be a list where the first element says
 @dfn{how} and the second element says @dfn{where}.  This method is your
-native method.  All groups that are not fetched with this method are
+native method.  All groups not fetched with this method are
 foreign groups.
 
 For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where
@@ -438,8 +461,7 @@ If this variable is not set, Gnus will take a look at the
 @code{NNTPSERVER} environment variable.  If that variable isn't set,
 Gnus will see whether @code{gnus-nntpserver-file}
 (@file{/etc/nntpserver} by default) has any opinions on the matter.  If
-that fails as well, Gnus will will try to use the machine that is
-running Emacs as an @sc{nntp} server.  That's a long shot, though.
+that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server.  That's a long shot, though.
 
 @vindex gnus-nntp-server
 If @code{gnus-nntp-server} is set, this variable will override
@@ -494,8 +516,8 @@ killed.  Your system administrator should have set this variable to
 something useful.
 
 Since she hasn't, Gnus will just subscribe you to a few arbitrarily
-picked groups (i.e., @samp{*.newusers}).  (@dfn{Arbitrary} is here
-defined as @dfn{whatever Lars thinks you should read}.)
+picked groups (i.e., @samp{*.newusers}).  (@dfn{Arbitrary} is defined
+here as @dfn{whatever Lars thinks you should read}.)
 
 You'll also be subscribed to the Gnus documentation group, which should
 help you with most common problems.  
@@ -571,7 +593,7 @@ information in the normal (i.e., master) @code{.newsrc} file.
 @cindex fetching a group
 
 @findex gnus-fetch-group
-It it sometimes convenient to be able to just say ``I want to read this
+It is sometimes convenient to be able to just say ``I want to read this
 group and I don't care whether Gnus has been started or not''.  This is
 perhaps more useful for people who write code than for users, but the
 command @code{gnus-fetch-group} provides this functionality in any case.
@@ -589,9 +611,9 @@ you can set @code{gnus-check-new-newsgroups} to @code{nil}.  This will
 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{t} by default.  If you set this variable to @code{always}, then
-Gnus will query the backends for new groups even when you do the @kbd{g}
-command (@pxref{Scanning New Messages}).
+is @code{ask-server} by default.  If you set this variable to
+@code{always}, then Gnus will query the backends for new groups even
+when you do the @kbd{g} command (@pxref{Scanning New Messages}).
 
 @menu
 * Checking New Groups::      Determining what groups are new.
@@ -656,11 +678,12 @@ zombies later (with @kbd{A z}) and either kill them all off properly
 
 @item gnus-subscribe-randomly
 @vindex gnus-subscribe-randomly
-Subscribe all new groups randomly.
+Subscribe all new groups in arbitrary order.  This really means that all
+new groups will be added at ``the top'' of the grop buffer.
 
 @item gnus-subscribe-alphabetically
 @vindex gnus-subscribe-alphabetically
-Subscribe all new groups alphabetically.
+Subscribe all new groups in alphabetical order.
 
 @item gnus-subscribe-hierarchically
 @vindex gnus-subscribe-hierarchically
@@ -675,7 +698,8 @@ up.  Or something like that.
 @item gnus-subscribe-interactively
 @vindex gnus-subscribe-interactively
 Subscribe new groups interactively.  This means that Gnus will ask
-you about @strong{all} new groups.
+you about @strong{all} new groups.  The groups you choose to subscribe
+to will be subscribed hierarchically.
 
 @item gnus-subscribe-killed
 @vindex gnus-subscribe-killed
@@ -691,7 +715,8 @@ hierarchical fashion whether to subscribe to new groups or not.  Gnus
 will ask you for each sub-hierarchy whether you want to descend the
 hierarchy or not.  
 
-One common mistake is to set the variable a few paragraphs above to
+One common mistake is to set the variable a few paragraphs above
+(@code{gnus-subscribe-newsgroup-method}) to
 @code{gnus-subscribe-hierarchical-interactive}.  This is an error.  This
 will not work.  This is ga-ga.  So don't do it.
 
@@ -723,7 +748,7 @@ If you don't want to mess with your @file{.newsrc} file, you can just
 set the two variables @code{gnus-options-subscribe} and
 @code{gnus-options-not-subscribe}.  These two variables do exactly the
 same as the @file{.newsrc} @samp{options -n} trick.  Both are regexps,
-and if the the new group matches the former, it will be unconditionally
+and if the new group matches the former, it will be unconditionally
 subscribed, and if it matches the latter, it will be ignored.
 
 @vindex gnus-auto-subscribed-groups
@@ -833,7 +858,7 @@ several servers where not all servers support @code{ask-server}.
 @vindex gnus-startup-file
 The @code{gnus-startup-file} variable says where the startup files are.
 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
-file being whatever that one is with a @samp{.eld} appended.
+file being whatever that one is, with a @samp{.eld} appended.
 
 @vindex gnus-save-newsrc-hook
 @vindex gnus-save-quick-newsrc-hook
@@ -920,7 +945,7 @@ Groups} for an overview of other variables that can be used instead.
 @c @head
 The active file can be rather Huge, so if you have a slow network, you
 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
-reading the active file.  This variable is @code{t} by default.
+reading the active file.  This variable is @code{some} by default.
 
 Gnus will try to make do by getting information just on the groups that
 you actually subscribe to.
@@ -958,13 +983,17 @@ secondary select methods.
 
 @item gnus-load-hook
 @vindex gnus-load-hook
-A hook that is run while Gnus is being loaded.  Note that this hook will
+A hook run while Gnus is being loaded.  Note that this hook will
 normally be run just once in each Emacs session, no matter how many
 times you start Gnus.
 
+@item gnus-before-startup-hook
+@vindex gnus-before-startup-hook
+A hook run after starting up Gnus successfully.
+
 @item gnus-startup-hook
 @vindex gnus-startup-hook
-A hook that is run after starting up Gnus successfully.
+A hook run as the very last thing after starting up Gnus
 
 @item gnus-started-hook
 @vindex gnus-started-hook
@@ -1011,6 +1040,20 @@ 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.
 
+@iftex
+@iflatex
+\gnusfigure{The Group Buffer}{320}{
+\put(75,50){\epsfig{figure=tmp/group.ps,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}}
+\put(40,58){\vector(1,0){30}}
+\put(200,28){\makebox(0,0)[t]{Native select method}}
+\put(200,26){\vector(-1,2){15}}
+}
+@end iflatex
+@end iftex
+
 @menu
 * Group Buffer Format::    Information listed and how you can change it.
 * Group Maneuvering::      Commands for moving in the group buffer.
@@ -1061,7 +1104,7 @@ Quite simple, huh?
 You can see that there are 25 unread articles in
 @samp{news.announce.newusers}.  There are no unread articles, but some
 ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
-asterisk at the beginning of the line?)
+asterisk at the beginning of the line?).
 
 @vindex gnus-group-line-format
 You can change that format to whatever you want by fiddling with the
@@ -1164,7 +1207,7 @@ Timestamp}).
 
 @item u
 User defined specifier.  The next character in the format string should
-be a letter.  @sc{gnus} will call the function
+be a letter.  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
 parameter as argument.  The function should return a string, which will
@@ -1243,7 +1286,7 @@ The score of the group.
 The number of ticked articles in the group.
 @item total
 The total number of articles in the group.  Or rather, MAX-NUMBER minus
-MIN-NUMBER.
+MIN-NUMBER plus one.
 @item topic
 When using the topic minor mode, this variable is bound to the current
 topic being inserted.
@@ -1372,9 +1415,9 @@ minimum amount of fuzz (@code{gnus-group-quick-select-group}).  No
 scoring/killing will be performed, there will be no highlights and no
 expunging.  This might be useful if you're in a real hurry and have to
 enter some humongous group.  If you give a 0 prefix to this command
-(i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer.
-This might be useful if you want to toggle threading before entering the
-group.
+(i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer,
+which is useful if you want to toggle threading before generating the
+summary buffer (@pxref{Summary Generation Commands}).
 
 @item M-SPACE
 @kindex M-SPACE (Group)
@@ -1440,6 +1483,7 @@ selected.
 @kindex S t (Group)
 @kindex u (Group)
 @findex gnus-group-unsubscribe-current-group
+@c @icon{gnus-group-unsubscribe}
 Toggle subscription to the current group
 (@code{gnus-group-unsubscribe-current-group}).  
 
@@ -1457,6 +1501,7 @@ subscribed already, unsubscribe it instead
 @kindex S k (Group)
 @kindex C-k (Group)
 @findex gnus-group-kill-group
+@c @icon{gnus-group-kill-group}
 Kill the current group (@code{gnus-group-kill-group}).
 
 @item S y
@@ -1510,6 +1555,7 @@ Also @pxref{Group Levels}.
 @kindex c (Group)
 @findex gnus-group-catchup-current
 @vindex gnus-group-catchup-group-hook
+@c @icon{gnus-group-catchup-current}
 Mark all unticked articles in this group as read
 (@code{gnus-group-catchup-current}).
 @code{gnus-group-catchup-group-hook} is called when catching up a group from
@@ -1565,17 +1611,17 @@ prompted for a level.
 @vindex gnus-level-zombie
 @vindex gnus-level-unsubscribed
 @vindex gnus-level-subscribed
-Gnus considers groups on between levels 1 and
+Gnus considers groups from levels 1 to
 @code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
 @code{gnus-level-subscribed} (exclusive) and
 @code{gnus-level-unsubscribed} (inclusive) (default 7) to be
 unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
-(default 8) and @code{gnus-level-killed} to be killed (default 9),
-completely dead.  Gnus treats subscribed and unsubscribed groups exactly
-the same, but zombie and killed groups have no information on what
-articles you have read, etc, stored.  This distinction between dead and
-living groups isn't done because it is nice or clever, it is done purely
-for reasons of efficiency.
+(default 8) and @code{gnus-level-killed} to be killed (completely dead)
+(default 9).  Gnus treats subscribed and unsubscribed groups exactly the
+same, but zombie and killed groups have no information on what articles
+you have read, etc, stored.  This distinction between dead and living
+groups isn't done because it is nice or clever, it is done purely for
+reasons of efficiency.
 
 It is recommended that you keep all your mail groups (if any) on quite
 low levels (e.g. 1 or 2).
@@ -1590,11 +1636,11 @@ Two closely related variables are @code{gnus-level-default-subscribed}
 (default 3) and @code{gnus-level-default-unsubscribed} (default 6),
 which are the levels that new groups will be put on if they are
 (un)subscribed.  These two variables should, of course, be inside the
-relevant legal ranges.
+relevant valid ranges.
 
 @vindex gnus-keep-same-level
 If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
-will only move to groups that are of the same level (or lower).  In
+will only move to groups of the same level (or lower).  In
 particular, going from the last article in one group to the next group
 will go to the next group of the same level (or lower).  This might be
 handy if you want to read the most important groups before you read the
@@ -1617,10 +1663,10 @@ give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
 use this level as the ``work'' level.
 
 @vindex gnus-activate-level
-Gnus will normally just activate groups that are on level
-@code{gnus-activate-level} or less.  If you don't want to activate
-unsubscribed groups, for instance, you might set this variable to
-5.  The default is 6.
+Gnus will normally just activate (i. e., query the server about) groups
+on level @code{gnus-activate-level} or less.  If you don't want to
+activate unsubscribed groups, for instance, you might set this variable
+to 5.  The default is 6.
 
 
 @node Group Score
@@ -1737,7 +1783,7 @@ to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}.
 @findex gnus-group-rename-group
 @cindex renaming groups
 Rename the current group to something else
-(@code{gnus-group-rename-group}).  This is legal only on some
+(@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.
 
@@ -1804,7 +1850,7 @@ strings to match on headers (@code{gnus-group-make-kiboze-group}).
 @kindex G D (Group)
 @findex gnus-group-enter-directory
 @cindex nneething
-Read an arbitrary directory as if with were a newsgroup with the
+Read an arbitrary directory as if it were a newsgroup with the
 @code{nneething} backend (@code{gnus-group-enter-directory}).
 @xref{Anything Groups}. 
 
@@ -1832,7 +1878,7 @@ this command without a prefix, Gnus will guess at the file type.
 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.  Legal search engine types
+search engine type and the search string.  Valid search engine types
 include @code{dejanews}, @code{altavista} and @code{reference}.
 @xref{Web Searches}.
 
@@ -1843,7 +1889,8 @@ This function will delete the current group
 (@code{gnus-group-delete-group}).  If given a prefix, this function will
 actually delete all the articles in the group, and forcibly remove the
 group itself from the face of the Earth.  Use a prefix only if you are
-absolutely sure of what you are doing.
+absolutely sure of what you are doing.  This command can't be used on
+read-only groups (like @code{nntp} group), though.
 
 @item G V
 @kindex G V (Group)
@@ -1897,7 +1944,7 @@ list address instead.
 @cindex to-list
 If the group parameter list has an element that looks like
 @code{(to-list . "some@@where.com")}, that address will be used when
-doing a @kbd{a} in any group.  It is totally ignored when doing a
+doing a @kbd{a} in that 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}.
 
@@ -1905,6 +1952,12 @@ 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 visible
+@cindex visible
+If the group parameter list has the element @code{(visible . t)},
+that group will always be visible in the Group buffer, regardless
+of whether it has any unread articles.
+
 @item broken-reply-to
 @cindex broken-reply-to
 Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
@@ -1927,16 +1980,17 @@ useful if you have a mail group that's really a mirror of a news group.
 @item gcc-self
 @cindex gcc-self
 If this symbol is present in the group parameter list and set to
-@code{t}, new composed messages will be @code{Gcc}'d to the current
+@code{t}, newly composed messages will be @code{Gcc}'d to the current
 group. If it is present and set to @code{none}, no @code{Gcc:} header
 will be generated, if it is present and a string, this string will be
-inserted literally as a @code{gcc} header (this symbol takes precedence over
-any default @code{Gcc} rules as described later).
+inserted literally as a @code{gcc} header (this symbol takes precedence
+over any default @code{Gcc} rules as described later).  @xref{Archived
+Messages}
 
 @item auto-expire
 @cindex auto-expire
 If the group parameter has an element that looks like @code{(auto-expire
-. t)}, , all articles that are read will be marked as expirable.  For an
+. t)}, all articles read will be marked as expirable.  For an
 alternative approach, @pxref{Expiring Mail}.
 
 @item total-expire
@@ -1944,7 +1998,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
@@ -1958,8 +2013,8 @@ the symbols @code{never} or @code{immediate}.
 @item score-file
 @cindex score file group parameter
 Elements that look like @code{(score-file . "file")} will make
-@file{file} into the current score file for the group in question.  This
-means that all score commands you issue will end up in that file. 
+@file{file} into the current adaptive score file for the group in
+question.  All adaptive score entries will be put into this file.
 
 @item adapt-file
 @cindex adapt file group parameter
@@ -1968,14 +2023,14 @@ Elements that look like @code{(adapt-file . "file")} will make
 All adaptive score entries will be put into this file.
 
 @item admin-address
-When unsubscribing to a mailing list you should never send the
+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
-Elements that look like @code{(display . MODE)} says which articles to
-display on entering the group.  Legal values are:
+Elements that look like @code{(display . MODE)} say which articles to
+display on entering the group.  Valid values are:
 
 @table @code
 @item all
@@ -2010,7 +2065,7 @@ group.  @code{dummy-variable} will be set to the result of the
 
 Use the @kbd{G p} command to edit group parameters of a group.
 
-Also @pxref{Topic Parameters}.
+@pxref{Topic Parameters}.
 
 Here's an example group parameter list:
 
@@ -2024,7 +2079,7 @@ Here's an example group parameter list:
 @section Listing Groups
 @cindex group listing
 
-These commands all list various slices of the groups that are available.
+These commands all list various slices of the groups available.
 
 @table @kbd
 
@@ -2085,12 +2140,12 @@ List groups that match a regexp (@code{gnus-group-list-all-matching}).
 @item A A
 @kindex A A (Group)
 @findex gnus-group-list-active
-List absolutely all groups that are in the active file(s) of the
+List absolutely all groups in the active file(s) of the
 server(s) you are connected to (@code{gnus-group-list-active}).  This
 might very well take quite a while.  It might actually be a better idea
 to do a @kbd{A M} to list all matching, and just give @samp{.} as the
-thing to match on.  Also note that this command may list group that
-don't exist (yet)---these will be listed as if they are killed groups.
+thing to match on.  Also note that this command may list groups that
+don't exist (yet)---these will be listed as if they were killed groups.
 Take the output with some grains of salt.
 
 @item A a
@@ -2272,10 +2327,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)
@@ -2308,7 +2363,7 @@ then attempt to contact this server and let you browse the groups there
 
 @findex gnus-browse-mode
 A new buffer with a list of available groups will appear.  This buffer
-will be use the @code{gnus-browse-mode}.  This buffer looks a bit (well,
+will use the @code{gnus-browse-mode}.  This buffer looks a bit (well,
 a lot) like a normal group buffer.
 
 Here's a list of keystrokes available in the browse mode:
@@ -2373,6 +2428,7 @@ is a gain, but then who am I to judge?
 @item q
 @kindex q (Group)
 @findex gnus-group-exit
+@c @icon{gnus-group-exit}
 Quit Gnus (@code{gnus-group-exit}).
 
 @item Q
@@ -2416,6 +2472,14 @@ you put in some misc section that you never bother with anyway.  You can
 even group the Emacs sex groups as a sub-topic to either the Emacs
 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}}
+}
+@end iflatex
+@end iftex
+
 Here's an example:
 
 @example
@@ -2463,13 +2527,13 @@ the hook for the group mode:
 @subsection Topic Variables
 @cindex topic variables
 
-Now, if you select a topic, if will fold/unfold that topic, which is
+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}).
-Legal elements are:
+Valid elements are:
 
 @table @samp
 @item i
@@ -2550,6 +2614,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
@@ -2720,7 +2790,7 @@ allowed---@code{visible} and @code{invisible}.
 @cindex topic parameters
 
 All groups in a topic will inherit group parameters from the parent (and
-ancestor) topic parameters.  All legal group parameters are legal topic
+ancestor) topic parameters.  All valid group parameters are valid topic
 parameters (@pxref{Group Parameters}).  
 
 Group parameters (of course) override topic parameters, and topic
@@ -2787,8 +2857,8 @@ Enter the server buffer (@code{gnus-group-enter-server-mode}).
 @item a
 @kindex a (Group)
 @findex gnus-group-post-news
-Post an article to a group (@code{gnus-group-post-news}).  The current
-group name will be used as the default.
+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.
 
 @item m
 @kindex m (Group)
@@ -2803,12 +2873,12 @@ Variables for the group buffer:
 
 @item gnus-group-mode-hook
 @vindex gnus-group-mode-hook
-@code{gnus-group-mode-hook} is called after the group buffer has been
+is called after the group buffer has been
 created. 
 
 @item gnus-group-prepare-hook
 @vindex gnus-group-prepare-hook
-@code{gnus-group-prepare-hook} is called after the group buffer is
+is called after the group buffer is
 generated.  It may be used to modify the buffer in some strange,
 unnatural way.
 
@@ -2830,16 +2900,18 @@ whether they are empty or not.
 @item g
 @kindex g (Group)
 @findex gnus-group-get-new-news
+@c @icon{gnus-group-get-new-news}
 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 rereading of the active file(s) from the
+command will force a total re-reading of the active file(s) from the
 backend(s).
 
 @item M-g
 @kindex M-g (Group)
 @findex gnus-group-get-new-news-this-group
 @vindex gnus-goto-next-group-when-activating
+@c @icon{gnus-group-get-new-news-this-group}
 Check whether new articles have arrived in the current group
 (@code{gnus-group-get-new-news-this-group}).
 @code{gnus-goto-next-group-when-activating} says whether this command is
@@ -2896,6 +2968,7 @@ through @code{gnus-group-faq-directory} and try to open them one by one.
 
 @item H d
 @itemx C-c C-d
+@c @icon{gnus-group-describe-group}
 @kindex H d (Group)
 @kindex C-c C-d (Group)
 @cindex describing groups
@@ -3049,6 +3122,15 @@ You can have as many summary buffers open as you wish.
 @section Summary Buffer Format
 @cindex summary buffer format
 
+@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}}}
+}
+@end iflatex
+@end iftex
+
 @menu
 * Summary Buffer Lines::     You can specify how summary lines should look.
 * Summary Buffer Mode Line:: You can say how the mode line should look.
@@ -3060,7 +3142,7 @@ You can have as many summary buffers open as you wish.
 @vindex gnus-extract-address-components
 Gnus will use the value of the @code{gnus-extract-address-components}
 variable as a function for getting the name and address parts of a
-@code{From} header.  Two pre-defined function exist:
+@code{From} header.  Two pre-defined functions exist:
 @code{gnus-extract-address-components}, which is the default, quite
 fast, and too simplistic solution; and
 @code{mail-extract-address-components}, which works very nicely, but is
@@ -3079,7 +3161,7 @@ with those specs that require it.  The default is @samp{}.
 @vindex gnus-summary-line-format
 You can change the format of the lines in the summary buffer by changing
 the @code{gnus-summary-line-format} variable.  It works along the same
-lines a a normal @code{format} string, with some extensions
+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}.
@@ -3092,8 +3174,8 @@ Article number.
 @item S
 Subject string.
 @item s
-Subject if the article is the root or the previous article had a
-different subject, @code{gnus-summary-same-subject} otherwise.
+Subject if the article is the root of the thread or the previous article
+had a different subject, @code{gnus-summary-same-subject} otherwise.
 (@code{gnus-summary-same-subject} defaults to @samp{}.)
 @item F
 Full @code{From} header.
@@ -3131,7 +3213,7 @@ Unread.
 @item R
 Replied.
 @item i
-Score as a number.
+Score as a number (@pxref{Scoring}).
 @item z
 @vindex gnus-summary-zcore-fuzz
 Zcore, @samp{+} if above the default level and @samp{-} if below the
@@ -3147,7 +3229,7 @@ Total thread score.
 @item d
 The @code{Date} in @code{DD-MMM} format.
 @item o
-The @code{Date} in @code{YYYYMMDDTHHMMSS} format.
+The @code{Date} in @var{YYYYMMDD}@code{T}@var{HHMMSS} format.
 @item M
 @code{Message-ID}.
 @item r
@@ -3160,9 +3242,11 @@ An @samp{=} (@code{gnus-not-empty-thread-mark}) will be displayed if the
 article has any children.
 @item P
 The line number.
+@item O
+Download mark.
 @item u
 User defined specifier.  The next character in the format string should
-be a letter.  @sc{gnus} will call the function
+be a letter.  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 the current header as
 argument.  The function should return a string, which will be inserted
@@ -3172,7 +3256,7 @@ into the summary just like information from any other summary specifier.
 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''
-that.  This means that it is illegal to have these specs after a
+that.  This means that it is invalid to have these specs after a
 variable-length spec.  Well, you might not be arrested, but your summary
 buffer will look strange, which is bad enough.
 
@@ -3204,7 +3288,8 @@ Gnus version.
 @item U
 Number of unread articles in this group.
 @item e
-Number of unselected articles in this group.
+Number of unread articles in this group that aren't displayed in the
+summary buffer.
 @item Z
 A string with the number of unread and unselected articles represented
 either as @samp{<%U(+%e) more>} if there are both unread and unselected
@@ -3216,13 +3301,13 @@ shortened to @samp{r.a.anime}.
 @item S
 Subject of the current article.
 @item u
-User-defined spec.
+User-defined spec (@pxref{User-Defined Specs}).
 @item s
-Name of the current score file.
+Name of the current score file (@pxref{Scoring}).
 @item d
-Number of dormant articles.
+Number of dormant articles (@pxref{Unread Articles}).
 @item t
-Number of ticked articles.
+Number of ticked articles (@pxref{Unread Articles}).
 @item r
 Number of articles that have been marked as read in this session. 
 @item E
@@ -3248,13 +3333,13 @@ This hook is called when a summary line is changed.  It is not run if
 
 @item gnus-summary-selected-face
 @vindex gnus-summary-selected-face
-This is the face (or @dfn{font} as some people call it) that is used to
+This is the face (or @dfn{font} as some people call it) used to
 highlight the current article in the summary buffer.
 
 @item gnus-summary-highlight
 @vindex gnus-summary-highlight
 Summary lines are highlighted according to this variable, which is a
-list where the elements are on the format @var{(FORM . FACE)}.  If you
+list where the elements are of the format @var{(FORM . FACE)}.  If you
 would, for instance, like ticked articles to be italic and high-scored
 articles to be bold, you could set this variable to something like
 @lisp
@@ -3297,13 +3382,13 @@ Go to the previous summary line of an unread article
 @kindex j (Summary)
 @kindex G j (Summary)
 @findex gnus-summary-goto-article
-Ask for an article number and then go to that article
-(@code{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
-Ask for an article number and then go the summary line of that article
+Ask for an article number and then go to the summary line of that article
 without displaying the article (@code{gnus-summary-goto-subject}).
 @end table
 
@@ -3386,12 +3471,14 @@ unread article (@code{gnus-summary-next-page}).
 @kindex n (Summary)
 @kindex G n (Summary)
 @findex gnus-summary-next-unread-article
+@c @icon{gnus-summary-next-unread}
 Go to next unread article (@code{gnus-summary-next-unread-article}).
 
 @item G p
 @itemx p
 @kindex p (Summary)
 @findex gnus-summary-prev-unread-article
+@c @icon{gnus-summary-prev-unread}
 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
 
 @item G N
@@ -3443,20 +3530,23 @@ Go to the article with the highest score
 @findex gnus-summary-goto-last-article
 Go to the previous article read (@code{gnus-summary-goto-last-article}).
 
-@item G p
-@kindex G p (Summary)
+@item G o
+@kindex G o (Summary)
 @findex gnus-summary-pop-article
+@cindex history
+@cindex article history
 Pop an article off the summary history and go to this article
 (@code{gnus-summary-pop-article}).  This command differs from the
 command above in that you can pop as many previous articles off the
-history as you like.
+history as you like.  For a somewhat related issue (if you use this
+command a lot), @pxref{Article Backlog}.
 @end table
 
 
 @node Choosing Variables
 @subsection Choosing Variables
 
-Some variables that are relevant for moving and selecting articles:
+Some variables relevant for moving and selecting articles:
 
 @table @code
 @item gnus-auto-extend-newsgroup
@@ -3572,6 +3662,8 @@ Commands for composing a mail message:
 @kindex S r (Summary)
 @kindex r (Summary)
 @findex gnus-summary-reply
+@c @icon{gnus-summary-mail-reply}
+@c @icon{gnus-summary-reply}
 Mail a reply to the author of the current article
 (@code{gnus-summary-reply}). 
 
@@ -3580,6 +3672,7 @@ Mail a reply to the author of the current article
 @kindex R (Summary)
 @kindex S R (Summary)
 @findex gnus-summary-reply-with-original
+@c @icon{gnus-summary-reply-with-original}
 Mail a reply to the author of the current article and include the
 original message (@code{gnus-summary-reply-with-original}).  This
 command uses the process/prefix convention.
@@ -3588,7 +3681,9 @@ command uses the process/prefix convention.
 @kindex S w (Summary)
 @findex gnus-summary-wide-reply
 Mail a wide reply to the author of the current article
-(@code{gnus-summary-wide-reply}). 
+(@code{gnus-summary-wide-reply}).  A @dfn{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.
 
 @item S W
 @kindex S W (Summary)
@@ -3600,6 +3695,7 @@ the process/prefix convention.
 @item S o m
 @kindex S o m (Summary)
 @findex gnus-summary-mail-forward
+@c @icon{gnus-summary-mail-forward}
 Forward the current article to some other person
 (@code{gnus-summary-mail-forward}).  If given a prefix, include the full
 headers of the forwarded article.
@@ -3609,6 +3705,7 @@ headers of the forwarded article.
 @kindex m (Summary)
 @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}).
 
@@ -3649,9 +3746,9 @@ This command understands the process/prefix convention
 @item S O m
 @kindex S O m (Summary)
 @findex gnus-uu-digest-mail-forward
-Digest the current series and forward the result using mail
-(@code{gnus-uu-digest-mail-forward}).  This command uses the
-process/prefix convention (@pxref{Process/Prefix}). 
+Digest the current series (@pxref{Decoding Articles}) and forward the
+result using mail (@code{gnus-uu-digest-mail-forward}).  This command
+uses the process/prefix convention (@pxref{Process/Prefix}).
 
 @item S M-c
 @kindex S M-c (Summary)
@@ -3684,6 +3781,7 @@ Commands for posting a news article:
 @kindex a (Summary)
 @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}).
 
@@ -3692,12 +3790,14 @@ Post an article to the current group
 @kindex f (Summary)
 @kindex S f (Summary)
 @findex gnus-summary-followup
+@c @icon{gnus-summary-followup}
 Post a followup to the current article (@code{gnus-summary-followup}).
 
 @item S F
 @itemx F
 @kindex S F (Summary)
 @kindex F (Summary)
+@c @icon{gnus-summary-followup-with-original}
 @findex gnus-summary-followup-with-original
 Post a followup to the current article and include the original message
 (@code{gnus-summary-followup-with-original}).   This command uses the
@@ -3736,6 +3836,7 @@ process/prefix convention.
 @item S u
 @kindex S u (Summary)
 @findex gnus-uu-post-news
+@c @icon{gnus-uu-post-news}
 Uuencode a file, split it into parts, and post it as a series
 (@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}). 
 @end table
@@ -3753,6 +3854,7 @@ Well, you can't cancel mail, but you can cancel posts.
 
 @findex gnus-summary-cancel-article
 @kindex C (Summary)
+@c @icon{gnus-summary-cancel-article}
 Find the article you wish to cancel (you can only cancel your own
 articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
 c} (@code{gnus-summary-cancel-article}).  Your article will be
@@ -3844,7 +3946,8 @@ Articles}).
 Marked as dormant (@code{gnus-dormant-mark}).  
 
 @dfn{Dormant articles} will only appear in the summary buffer if there
-are followups to it.
+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}).
 
 @item SPACE
 @vindex gnus-unread-mark
@@ -3886,7 +3989,7 @@ Marked as killed by kill files (@code{gnus-kill-file-mark}).
 
 @item Y
 @vindex gnus-low-score-mark
-Marked as read by having a too low score (@code{gnus-low-score-mark}).
+Marked as read by having too low a score (@code{gnus-low-score-mark}).
 
 @item C
 @vindex gnus-catchup-mark
@@ -3924,8 +4027,8 @@ Marked as expirable (@code{gnus-expirable-mark}).
 
 Marking articles as @dfn{expirable} (or have them marked as such
 automatically) doesn't make much sense in normal groups---a user doesn't
-control the expiring of news articles, but in mail groups, for instance,
-articles that are marked as @dfn{expirable} can be deleted by Gnus at
+control expiring of news articles, but in mail groups, for instance,
+articles marked as @dfn{expirable} can be deleted by Gnus at
 any time.
 @end table
 
@@ -3955,25 +4058,25 @@ answered) will be marked with an @samp{A} in the second column
 
 @item 
 @vindex gnus-cached-mark
-Articles that are stored in the article cache will be marked with an
-@samp{*} in the second column (@code{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}
 
 @item 
 @vindex gnus-saved-mark
-Articles that are ``saved'' (in some manner or other; not necessarily
+Articles ``saved'' (in some manner or other; not necessarily
 religiously) are marked with an @samp{S} in the second column
-(@code{gnus-saved-mark}.
+(@code{gnus-saved-mark}).
 
 @item 
 @vindex gnus-not-empty-thread-mark
 @vindex gnus-empty-thread-mark
-It the @samp{%e} spec is used, the presence of threads or not will be
+If the @samp{%e} spec is used, the presence of threads or not will be
 marked with @code{gnus-not-empty-thread-mark} and
 @code{gnus-empty-thread-mark} in the third column, respectively.
 
 @item 
 @vindex gnus-process-mark
-Finally we have the @dfn{process mark} (@code{gnus-process-mark}.  A
+Finally we have the @dfn{process mark} (@code{gnus-process-mark}).  A
 variety of commands react to the presence of the process mark.  For
 instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
 all articles that have been marked with the process mark.  Articles
@@ -3997,12 +4100,23 @@ you'll only see the cache mark and not the replied mark.
 All the marking commands understand the numeric prefix.
 
 @table @kbd
+@item M c
+@itemx M-u
+@kindex M c (Summary)
+@kindex M-u (Summary)
+@findex gnus-summary-clear-mark-forward
+@cindex mark as unread
+Clear all readedness-marks from the current article
+(@code{gnus-summary-clear-mark-forward}).  In other words, mark the
+article as unread.
+
 @item M t
 @itemx !
 @kindex ! (Summary)
 @kindex M t (Summary)
 @findex gnus-summary-tick-article-forward
 Tick the current article (@code{gnus-summary-tick-article-forward}).
+@xref{Article Caching} 
 
 @item M ?
 @itemx ?
@@ -4010,7 +4124,7 @@ Tick the current article (@code{gnus-summary-tick-article-forward}).
 @kindex M ? (Summary)
 @findex gnus-summary-mark-as-dormant
 Mark the current article as dormant
-(@code{gnus-summary-mark-as-dormant}).
+(@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching} 
 
 @item M d
 @itemx d
@@ -4046,6 +4160,7 @@ Mark all articles that have the same subject as the current one as read
 @item M C
 @kindex M C (Summary)
 @findex gnus-summary-catchup
+@c @icon{gnus-summary-catchup}
 Mark all unread articles as read (@code{gnus-summary-catchup}).
 
 @item M C-c
@@ -4072,14 +4187,6 @@ Mark all articles between point and mark as read
 Kill all articles with scores below the default score (or below the
 numeric prefix) (@code{gnus-summary-kill-below}).
 
-@item M c
-@itemx M-u
-@kindex M c (Summary)
-@kindex M-u (Summary)
-@findex gnus-summary-clear-mark-forward
-Clear all readedness-marks from the current article
-(@code{gnus-summary-clear-mark-forward}).
-
 @item M e
 @itemx E
 @kindex M e (Summary)
@@ -4264,9 +4371,9 @@ Limit the summary buffer to articles that match some author
 @kindex / u (Summary)
 @kindex x (Summary)
 @findex gnus-summary-limit-to-unread
-Limit the summary buffer to articles that are not marked as read
+Limit the summary buffer to articles not marked as read
 (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
-buffer to articles that are strictly unread.  This means that ticked and
+buffer to articles strictly unread.  This means that ticked and
 dormant articles will also be excluded.
 
 @item / m
@@ -4278,10 +4385,9 @@ with that mark (@code{gnus-summary-limit-to-marks}).
 @item / t
 @kindex / t (Summary)
 @findex gnus-summary-limit-to-age
-Ask for a number and then limit the summary buffer to articles that are
-older than (or equal to) that number of days
+Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days
 (@code{gnus-summary-limit-to-marks}).  If given a prefix, limit to
-articles that are younger than that number of days.
+articles younger than that number of days.
 
 @item / n
 @kindex / n (Summary)
@@ -4346,6 +4452,43 @@ Gnus threads articles by default.  @dfn{To thread} is to put responses
 to articles directly after the articles they respond to---in a
 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 propagration excarcerbates 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}. 
+
+First, a quick overview of the concepts:
+
+@table @dfn
+@item root
+The top-most article in a thread; the first article in the thread.
+
+@item thread
+A tree-like article structure.
+
+@item sub-thread
+A small(er) section of this tree-like structure.
+
+@item loose threads
+Threads often lose their roots due to article expiry, or due to the root
+already having been read in a previous session, and not displayed in the
+summary buffer.  We then typicall have many sub-threads that really
+belong to one thread, but are without connecting roots.  These are
+called loose threads.
+
+@item thread gathering
+An attempt to gather loose threads into bigger threads.
+
+@item sparse threads
+A thread where the missing articles have been ``guessed'' at, and are
+displayed as empty lines in the summary buffer.
+
+@end table
+
+
 @menu
 * Customizing Threading::     Variables you can change to affect the threading.
 * Thread Commands::           Thread based commands in the summary buffer.
@@ -4355,45 +4498,76 @@ hierarchical fashion.
 @node Customizing Threading
 @subsection Customizing Threading
 @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!
+@end menu
+
+
+@node Loose Threads
+@subsubsection Loose Threads
 @cindex <
 @cindex >
+@cindex loose threads
 
 @table @code
+@item gnus-summary-make-false-root
+@vindex gnus-summary-make-false-root
+If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
+and create a dummy root at the top.  (Wait a minute.  Root at the top?
+Yup.)  Loose subtrees occur when the real root has expired, or you've
+read or killed the root in a previous session.
 
-@item gnus-show-threads
-@vindex gnus-show-threads
-If this variable is @code{nil}, no threading will be done, and all of
-the rest of the variables here will have no effect.  Turning threading
-off will speed group selection up a bit, but it is sure to make reading
-slower and more awkward.
+When there is no real root of a thread, Gnus will have to fudge
+something.  This variable says what fudging method Gnus should use.
+There are four possible values:
 
-@item gnus-fetch-old-headers
-@vindex gnus-fetch-old-headers
-If non-@code{nil}, Gnus will attempt to build old threads by fetching
-more old headers---headers to articles that are marked as read.  If you
-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.
+@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}}}
+}
+@end iflatex
+@end iftex
 
-@item gnus-build-sparse-threads
-@vindex gnus-build-sparse-threads
-Fetching old headers can be slow.  A low-rent similar effect can be
-gotten by setting this variable to @code{some}.  Gnus will then look at
-the complete @code{References} headers of all articles and try to string
-articles that belong in the same thread together.  This will leave
-@dfn{gaps} in the threading display where Gnus guesses that an article
-is missing from the thread.  (These gaps appear like normal summary
-lines.  If you select a gap, Gnus will try to fetch the article in
-question.)  If this variable is @code{t}, Gnus will display all these
-``gaps'' without regard for whether they are useful for completing the
-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.
+@cindex adopting articles
+
+@table @code
+
+@item adopt
+Gnus will make the first of the orphaned articles the parent.  This
+parent will adopt all the other articles.  The adopted articles will be
+marked as such by pointy brackets (@samp{<>}) instead of the standard
+square brackets (@samp{[]}).  This is the default method.
+
+@item dummy
+@vindex gnus-summary-dummy-line-format
+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}.
+
+@item empty
+Gnus won't actually make any article the parent, but simply leave the
+subject field of all orphans except the first empty.  (Actually, it will
+use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
+Buffer Format}).)
+
+@item none
+Don't make any article parent at all.  Just gather the threads and
+display them after one another.
+
+@item nil
+Don't gather loose threads.
+@end table
 
 @item gnus-summary-gather-subject-limit
 @vindex gnus-summary-gather-subject-limit
@@ -4401,7 +4575,7 @@ Loose threads are gathered by comparing subjects of articles.  If this
 variable is @code{nil}, Gnus requires an exact match between the
 subjects of the loose threads before gathering them into one big
 super-thread.  This might be too strict a requirement, what with the
-presence of stupid newsreaders that chop off long subjects lines.  If
+presence of stupid newsreaders that chop off long subject lines.  If
 you think so, set this variable to, say, 20 to require that only the
 first 20 characters of the subjects have to match.  If you set this
 variable to a really low number, you'll find that Gnus will gather
@@ -4454,8 +4628,8 @@ Since loose thread gathering is done on subjects only, that might lead
 to many false hits, especially with certain common subjects like
 @samp{} and @samp{(none)}.  To make the situation slightly better,
 you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
-what subjects should be excluded from the gathering process.  The
-default is @samp{^ *$\\|^(none)$}.  
+what subjects should be excluded from the gathering process.@*
+The default is @samp{^ *$\\|^(none)$}.  
 
 @item gnus-summary-thread-gathering-function
 @vindex gnus-summary-thread-gathering-function
@@ -4463,8 +4637,8 @@ Gnus gathers threads by looking at @code{Subject} headers.  This means
 that totally unrelated articles may end up in the same ``thread'', which
 is confusing.  An alternate approach is to look at all the
 @code{Message-ID}s in all the @code{References} headers to find matches.
-This will ensure that no gathered threads ever includes unrelated
-articles, but it's also means that people who have posted with broken
+This will ensure that no gathered threads ever include unrelated
+articles, but it also means that people who have posted with broken
 newsreaders won't be gathered properly.  The choice is yours---plague or
 cholera:
 
@@ -4487,49 +4661,54 @@ something like:
       'gnus-gather-threads-by-references)
 @end lisp
 
-@item gnus-summary-make-false-root
-@vindex gnus-summary-make-false-root
-If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
-and create a dummy root at the top.  (Wait a minute.  Root at the top?
-Yup.)  Loose subtrees occur when the real root has expired, or you've
-read or killed the root in a previous session.
+@end table
 
-When there is no real root of a thread, Gnus will have to fudge
-something.  This variable says what fudging method Gnus should use.
-There are four possible values:
 
-@cindex adopting articles
+@node Filling In Threads
+@subsubsection Filling In Threads
 
 @table @code
+@item gnus-fetch-old-headers
+@vindex gnus-fetch-old-headers
+If non-@code{nil}, Gnus will attempt to build old threads by fetching
+more old headers---headers to articles marked as read.  If you
+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.
 
-@item adopt
-Gnus will make the first of the orphaned articles the parent.  This
-parent will adopt all the other articles.  The adopted articles will be
-marked as such by pointy brackets (@samp{<>}) instead of the standard
-square brackets (@samp{[]}).  This is the default method.
+@item gnus-build-sparse-threads
+@vindex gnus-build-sparse-threads
+Fetching old headers can be slow.  A low-rent similar effect can be
+gotten by setting this variable to @code{some}.  Gnus will then look at
+the complete @code{References} headers of all articles and try to string
+together articles that belong in the same thread.  This will leave
+@dfn{gaps} in the threading display where Gnus guesses that an article
+is missing from the thread.  (These gaps appear like normal summary
+lines.  If you select a gap, Gnus will try to fetch the article in
+question.)  If this variable is @code{t}, Gnus will display all these
+``gaps'' without regard for whether they are useful for completing the
+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 dummy
-@vindex gnus-summary-dummy-line-format
-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}.
+@end table
 
-@item empty
-Gnus won't actually make any article the parent, but simply leave the
-subject field of all orphans except the first empty.  (Actually, it will
-use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
-Buffer Format}).)
 
-@item none
-Don't make any article parent at all.  Just gather the threads and
-display them after one another.
+@node More Threading
+@subsubsection More Threading
 
-@item nil
-Don't gather loose threads.
-@end table
+@table @code
+@item gnus-show-threads
+@vindex gnus-show-threads
+If this variable is @code{nil}, no threading will be done, and all of
+the rest of the variables here will have no effect.  Turning threading
+off will speed group selection up a bit, but it is sure to make reading
+slower and more awkward.
 
 @item gnus-thread-hide-subtree
 @vindex gnus-thread-hide-subtree
@@ -4560,6 +4739,14 @@ in a new thread.
 This is a number that says how much each sub-thread should be indented.
 The default is 4.
 
+@end table
+
+
+@node Low-Level Threading
+@subsubsection Low-Level Threading
+
+@table @code
+
 @item gnus-parse-headers-hook
 @vindex gnus-parse-headers-hook
 Hook run before parsing any headers.  The default value is
@@ -4567,6 +4754,28 @@ Hook run before parsing any headers.  The default value is
 slightly decoded in a hackish way.  This is likely to change in the
 future when Gnus becomes @sc{MIME}ified.
 
+@item gnus-alter-header-function
+@vindex gnus-alter-header-function
+If non-@code{nil}, this function will be called to allow alteration of
+article header structures.  The function is called with one parameter,
+the article header vector, which it may alter in any way.  For instance,
+if you have a mail-to-news gateway which alters the @code{Message-ID}s
+in systematic ways (by adding prefixes and such), you can use this
+variable to un-scramble the @code{Message-ID}s so that they are more
+meaningful.  Here's one example:
+
+@lisp
+(setq gnus-alter-header-function 'my-alter-message-id)
+
+(defun my-alter-message-id (header)
+  (let ((id (mail-header-id header)))
+    (when (string-match
+           "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
+      (mail-header-set-id
+       (concat (match-string 1 id) "@@" (match-string 2 id))
+       header))))
+@end lisp
+
 @end table
 
 
@@ -4641,7 +4850,7 @@ Hide all threads (@code{gnus-summary-hide-all-threads}).
 @item T t
 @kindex T t (Summary)
 @findex gnus-summary-rethread-current
-Re-thread the thread the current article is part of
+Re-thread the current article's thread
 (@code{gnus-summary-rethread-current}).  This works even when the
 summary buffer is otherwise unthreaded.
 
@@ -4649,7 +4858,7 @@ summary buffer is otherwise unthreaded.
 @kindex T ^ (Summary)
 @findex gnus-summary-reparent-thread
 Make the current article the child of the marked (or previous) article
-(@code{gnus-summary-reparent-thread}.
+(@code{gnus-summary-reparent-thread}).
 
 @end table
 
@@ -4690,12 +4899,12 @@ threads that have several different subjects in them.  If you then issue
 a command like `T k' (@code{gnus-summary-kill-thread}) you might not
 wish to kill the entire thread, but just those parts of the thread that
 have the same subject as the current article.  If you like this idea,
-you can fiddle with @code{gnus-thread-operation-ignore-subject}.  If is
+you can fiddle with @code{gnus-thread-operation-ignore-subject}.  If it
 is non-@code{nil} (which it is by default), subjects will be ignored
 when doing thread commands.  If this variable is @code{nil}, articles in
 the same thread with different subjects will not be included in the
 operation in question.  If this variable is @code{fuzzy}, only articles
-that have subjects that are fuzzily equal will be included (@pxref{Fuzzy
+that have subjects fuzzily equal will be included (@pxref{Fuzzy
 Matching}).
 
 
@@ -4717,7 +4926,7 @@ predicate functions include @code{gnus-thread-sort-by-number},
 @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
 @code{gnus-thread-sort-by-total-score}.
 
-Each function takes two threads and return non-@code{nil} if the first
+Each function takes two threads and returns non-@code{nil} if the first
 thread should be sorted before the other.  Note that sorting really is
 normally done by looking only at the roots of each thread.  If you use
 more than one function, the primary sort key should be the last function
@@ -4749,7 +4958,7 @@ say something like:
 @lisp
 (setq gnus-thread-sort-functions
       '((lambda (t1 t2) 
-          (not (gnus-thread-sort-by-number t1 t2)))
+          (not (gnus-thread-sort-by-number t2 t1)))
         gnus-thread-sort-by-score))
 @end lisp
 
@@ -4768,7 +4977,7 @@ tickles your fancy.
 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
-is uses slightly different functions for article comparison.  Available
+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}.
@@ -4824,25 +5033,23 @@ Here's how:  Set @code{gnus-asynchronous} to @code{t}.  The rest should
 happen automatically.
 
 @vindex gnus-use-article-prefetch
-You can control how many articles that are to be pre-fetched by setting
+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
-pre-fetch all the articles that it can without bound.  If it is
-@code{nil}, no pre-fetching will be made.
+pre-fetch all the articles it can without bound.  If it is
+@code{nil}, no pre-fetching will be done.
 
 @vindex gnus-async-prefetch-article-p
 @findex gnus-async-read-p
 There are probably some articles that you don't want to pre-fetch---read
-articles, for instance.  Which articles to pre-fetch is controlled by
-the @code{gnus-async-prefetch-article-p} variable.  This function should
+articles, for instance.  The @code{gnus-async-prefetch-article-p} variable controls whether an article is to be pre-fetched.  This function should
 return non-@code{nil} when the article in question is to be
 pre-fetched.  The default is @code{gnus-async-read-p}, which returns
 @code{nil} on read articles.  The function is called with an article
 data structure as the only parameter.
 
-If, for instance, you wish to pre-fetch only unread articles that are
-shorter than 100 lines, you could say something like:
+If, for instance, you wish to pre-fetch only unread articles shorter than 100 lines, you could say something like:
 
 @lisp
 (defun my-async-short-unread-p (data)
@@ -4855,8 +5062,8 @@ shorter than 100 lines, you could say something like:
 @end lisp
 
 These functions will be called many, many times, so they should
-preferrably be short and sweet to avoid slowing down Gnus too much.
-It's also probably a good idea to byte-compile things like this.
+preferably be short and sweet to avoid slowing down Gnus too much.
+It's probably a good idea to byte-compile things like this.
 
 @vindex gnus-prefetched-article-deletion-strategy
 Articles have to be removed from the asynch buffer sooner or later.  The
@@ -4895,12 +5102,12 @@ Used carefully, though, it could be just an easier way to save articles.
 @vindex gnus-cache-directory
 @vindex gnus-use-cache
 To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
-all articles that are ticked or marked as dormant will then be copied
+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
 @code{gnus-use-long-file-name} variable, as usual.
 
-When re-select a ticked or dormant article, it will be fetched from the
+When re-selecting a ticked or dormant article, it will be fetched from the
 cache instead of from the server.  As articles in your cache will never
 expire, this might serve as a method of saving articles while still
 keeping them where they belong.  Just mark all articles you want to save
@@ -4915,17 +5122,20 @@ The entering/removal of articles from the cache is controlled by the
 variables.  Both are lists of symbols.  The first is @code{(ticked
 dormant)} by default, meaning that ticked and dormant articles will be
 put in the cache.  The latter is @code{(read)} by default, meaning that
-articles that are marked as read are removed from the cache.  Possibly
+articles marked as read are removed from the cache.  Possibly
 symbols in these two lists are @code{ticked}, @code{dormant},
 @code{unread} and @code{read}.
 
 @findex gnus-jog-cache
 So where does the massive article-fetching and storing come into the
 picture?  The @code{gnus-jog-cache} command will go through all
-subscribed newsgroups, request all unread articles, and store them in
-the cache.  You should only ever, ever ever ever, use this command if 1)
-your connection to the @sc{nntp} server is really, really, really slow
-and 2) you have a really, really, really huge disk.  Seriously.
+subscribed newsgroups, request all unread articles, score them, and
+store them in the cache.  You should only ever, ever ever ever, use this
+command if 1) your connection to the @sc{nntp} server is really, really,
+really slow and 2) you have a really, really, really huge disk.
+Seriously.  One way to cut down on the number of articles downloaded is
+to score unwanted articles down and have them marked as read.  They will
+not then be downloaded by this command.
 
 @vindex gnus-uncacheable-groups
 It is likely that you do not want caching on some groups.  For instance,
@@ -5044,6 +5254,7 @@ deleted before saving.
 @kindex O o (Summary)
 @kindex o (Summary)
 @findex gnus-summary-save-article
+@c @icon{gnus-summary-save-article}
 Save the current article using the default article saver
 (@code{gnus-summary-save-article}). 
 
@@ -5062,6 +5273,7 @@ Save the current article in rmail format
 @item O f
 @kindex O f (Summary)
 @findex gnus-summary-save-article-file
+@c @icon{gnus-summary-save-article-file}
 Save the current article in plain file format
 (@code{gnus-summary-save-article-file}). 
 
@@ -5158,8 +5370,7 @@ Save the article to an MH folder using @code{rcvstore} from the MH
 library.  Uses the function in the @code{gnus-folder-save-name} variable
 to get a file name to save the article in.  The default is
 @code{gnus-folder-save-name}, but you can also use
-@code{gnus-Folder-save-name}.  The former creates capitalized names, and
-the latter does not.
+@code{gnus-Folder-save-name}, which creates capitalized names.
 
 @item gnus-summary-save-in-vm
 @findex gnus-summary-save-in-vm
@@ -5230,6 +5441,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 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
@@ -5253,7 +5481,7 @@ a spool, you could
 
 @lisp
 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
-(setq gnus-default-article-save '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
@@ -5271,12 +5499,15 @@ encoded in some way or other.  Gnus can decode them for you.
 
 @menu 
 * Uuencoded Articles::    Uudecode articles.
-* Shared Articles::       Unshar 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
+@cindex article series
 All these functions use the process/prefix convention
 (@pxref{Process/Prefix}) for finding out what articles to work on, with
 the extension that a ``single article'' means ``a single series''.  Gnus
@@ -5291,7 +5522,7 @@ For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
 will find all the articles that match the regexp @samp{^cat.gif
 ([0-9]+/[0-9]+).*$}.  
 
-Subjects that are nonstandard, like @samp{cat.gif (2/3) Part 6 of a
+Subjects that are non-standard, like @samp{cat.gif (2/3) Part 6 of a
 series}, will not be properly recognized by any of the automatic viewing
 commands, and you have to mark the articles manually with @kbd{#}.
 
@@ -5306,6 +5537,7 @@ commands, and you have to mark the articles manually with @kbd{#}.
 @item X u
 @kindex X u (Summary)
 @findex gnus-uu-decode-uu
+@c @icon{gnus-uu-decode-uu}
 Uudecodes the current series (@code{gnus-uu-decode-uu}).
 
 @item X U
@@ -5323,7 +5555,8 @@ Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
 @kindex X v U (Summary)
 @findex gnus-uu-decode-uu-and-save-view
 Uudecodes, views and saves the current series
-(@code{gnus-uu-decode-uu-and-save-view}). 
+(@code{gnus-uu-decode-uu-and-save-view}).
+
 @end table
 
 Remember that these all react to the presence of articles marked with
@@ -5347,11 +5580,16 @@ you have just viewed the file in question.  This feature can't be turned
 off.
 
 
-@node Shared Articles
-@subsection Shared Articles
+@node Shell Archives
+@subsection Shell Archives
 @cindex unshar
+@cindex shell archives
 @cindex shared articles
 
+Shell archives (``shar files'') used to be a popular way to distribute
+sources, but it isn't used all that much today.  In any case, we have
+some commands to deal with these:
+
 @table @kbd
 
 @item X s
@@ -5408,6 +5646,24 @@ View and save the current PostScript series
 @end table
 
 
+@node Other Files
+@subsection Other Files
+
+@table @kbd
+@item X o
+@kindex X o (Summary)
+@findex gnus-uu-decode-save
+Save the current series
+(@code{gnus-uu-decode-save}).
+
+@item X b
+@kindex X b (Summary)
+@findex gnus-uu-decode-binhex
+Unbinhex the current series (@code{gnus-uu-decode-binhex}).  This
+doesn't really work yet.
+@end table
+
+
 @node Decoding Variables
 @subsection Decoding Variables
 
@@ -5425,7 +5681,7 @@ Adjective, not verb.
 @cindex rule variables
 
 Gnus uses @dfn{rule variables} to decide how to view a file.  All these
-variables are on the form
+variables are of the form
   
 @lisp
       (list '(regexp1 command2)
@@ -5465,7 +5721,7 @@ archives.
 @vindex gnus-uu-grabbed-file-functions
 
 @item gnus-uu-grabbed-file-functions
-All functions in this list will be called right each file has been
+All functions in this list will be called right after each file has been
 successfully decoded---so that you can move or view files right away,
 and don't have to wait for all files to be decoded before you can do
 anything.  Ready-made functions you can put in this list are:
@@ -5530,8 +5786,8 @@ from articles.
 
 @item gnus-uu-unmark-articles-not-decoded
 @vindex gnus-uu-unmark-articles-not-decoded
-Non-@code{nil} means that @code{gnus-uu} will mark articles that were
-unsuccessfully decoded as unread.
+Non-@code{nil} means that @code{gnus-uu} will mark unsuccessfully
+decoded articles as unread.
 
 @item gnus-uu-correct-stripped-uucode
 @vindex gnus-uu-correct-stripped-uucode
@@ -5578,7 +5834,7 @@ many articles it takes to post the entire file.
 @item gnus-uu-post-threaded
 @vindex gnus-uu-post-threaded
 Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
-thread.  This may not be smart, as no other decoder I have seen are able
+thread.  This may not be smart, as no other decoder I have seen is able
 to follow threads when collecting uuencoded articles.  (Well, I have
 seen one package that does that---@code{gnus-uu}, but somehow, I don't
 think that counts...) Default is @code{nil}.
@@ -5641,7 +5897,7 @@ Why isn't anything real anymore? How did we get here?
 @section Article Treatment
 
 Reading through this huge manual, you may have quite forgotten that the
-object of newsreaders are to actually, like, read what people have
+object of newsreaders is to actually, like, read what people have
 written.  Reading articles.  Unfortunately, people are quite bad at
 writing, so there are tons of functions and variables to make reading
 these articles easier.
@@ -5772,7 +6028,7 @@ running the article through the @kbd{W e}
 How the emphasis is computed is controlled by the
 @code{gnus-article-emphasis} variable.  This is an alist where the first
 element is a regular expression to be matched.  The second is a number
-that says what regular expression grouping used to find the entire
+that says what regular expression grouping is used to find the entire
 emphasized word.  The third is a number that says what regexp grouping
 should be displayed and highlighted.  (The text between these two
 groupings will be hidden.)  The fourth is the face used for
@@ -5795,7 +6051,7 @@ By default, there are seven rules, and they use the following faces:
 @code{gnus-emphasis-bold}, @code{gnus-emphasis-italic},
 @code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic},
 @code{gnus-emphasis-underline-italic},
-@code{gnus-emphasis-undeline-bold}, and
+@code{gnus-emphasis-underline-bold}, and
 @code{gnus-emphasis-underline-bold-italic}.  
 
 If you want to change these faces, you can either use @kbd{M-x
@@ -5843,12 +6099,15 @@ 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)
 @findex gnus-article-hide-pem
-Hide @sc{pem} (privacy enhanced messages) gruft
+Hide @sc{pem} (privacy enhanced messages) cruft
 (@code{gnus-article-hide-pem}).
 
 @item W W c
@@ -5866,15 +6125,15 @@ If the cited text is of a bigger percentage than this variable (default
 
 @item gnus-cite-hide-absolute
 @vindex gnus-cite-hide-absolute
-The cited text must be have at least this length (default 10) before it
+The cited text must have at least this length (default 10) before it
 is hidden.
 
 @item gnus-cited-text-button-line-format
 @vindex gnus-cited-text-button-line-format
-Gnus adds buttons show where the cited text has been hidden, and to
+Gnus adds buttons to show where the cited text has been hidden, and to
 allow toggle hiding the text.  The format of the variable is specified
 by this format-like variable (@pxref{Formatting Variables}).  These
-specs are legal:
+specs are valid:
 
 @table @samp
 @item b
@@ -5932,8 +6191,16 @@ Remove page breaks from the current article
 @item W r
 @kindex W r (Summary)
 @findex gnus-summary-caesar-message
+@c @icon{gnus-summary-caesar-message}
 Do a Caesar rotate (rot13) on the article buffer
 (@code{gnus-summary-caesar-message}). 
+Unreadable articles that tell you to read them with Caesar rotate or rot13.
+(Typically offensive jokes and such.)
+
+It's commonly called ``rot13'' because each letter is rotated 13
+positions in the alphabet, e. g. @samp{B} (letter #2) -> @sam{O} (letter
+#15).  It is sometimes referred to as ``Caesar rotate'' because Caesar
+is rumoured to have employed this form of, uh, somewhat weak encryption.
 
 @item W t
 @kindex W t (Summary)
@@ -5971,12 +6238,17 @@ when filling.
 @item W c
 @kindex W c (Summary)
 @findex gnus-article-remove-cr
-Remove CR (@code{gnus-article-remove-cr}).
+Remove CR (i. e., @samp{^M}s on the end of the lines)
+(@code{gnus-article-remove-cr}).
 
 @item W q
 @kindex W q (Summary)
 @findex gnus-article-de-quoted-unreadable
 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.
 
 @item W f
 @kindex W f (Summary)
@@ -5985,6 +6257,13 @@ Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
 @findex gnus-article-x-face-command
 @vindex gnus-article-x-face-command
 @vindex gnus-article-x-face-too-ugly
+@iftex
+@iflatex
+\gnusxface{tmp/xface-karlheg.ps}
+\gnusxface{tmp/xface-kyle.ps}
+\gnusxface{tmp/xface-smb.ps}
+@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.
@@ -6004,7 +6283,8 @@ last.
 @item W b
 @kindex W b (Summary)
 @findex gnus-article-add-buttons
-Add clickable buttons to the article (@code{gnus-article-add-buttons}). 
+Add clickable buttons to the article (@code{gnus-article-add-buttons}).
+@xref{Article Buttons}
 
 @item W B
 @kindex W B (Summary)
@@ -6052,7 +6332,8 @@ body (@code{gnus-article-strip-leading-space}).
 
 People often include references to other stuff in articles, and it would
 be nice if Gnus could just fetch whatever it is that people talk about
-with the minimum of fuzz.
+with the minimum of fuzz when you hit @kbd{RET} or use the middle mouse
+button on these references.
 
 Gnus adds @dfn{buttons} to certain standard references by default:
 Well-formed URLs, mail addresses and Message-IDs.  This is controlled by
@@ -6073,12 +6354,12 @@ This is an alist where each entry has this form:
 
 @item regexp
 All text that match this regular expression will be considered an
-external reference.  Here's a typical regexp that match embedded URLs:
+external reference.  Here's a typical regexp that matches embedded URLs:
 @samp{<URL:\\([^\n\r>]*\\)>}. 
 
 @item button-par
-Gnus has to know which parts of the match is to be highlighted.  This is
-a number that says what sub-expression of the regexp that is to be
+Gnus has to know which parts of the matches is to be highlighted.  This
+is a number that says what sub-expression of the regexp is to be
 highlighted.  If you want it all highlighted, you use 0 here.
 
 @item use-p
@@ -6111,7 +6392,7 @@ used to say what headers to apply the buttonize coding to:
 (HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
 @end lisp
 
-@var{header} is a regular expression.
+@var{HEADER} is a regular expression.
 
 @item gnus-button-url-regexp
 @vindex gnus-button-url-regexp
@@ -6124,7 +6405,7 @@ Face used on buttons.
 
 @item gnus-article-mouse-face
 @vindex gnus-article-mouse-face
-Face is used when the mouse cursor is over a button.
+Face used when the mouse cursor is over a button.
 
 @end table
 
@@ -6158,19 +6439,19 @@ Display the date using a user-defined format
 (@code{gnus-article-date-user}).  The format is specified by the
 @code{gnus-article-time-format} variable, and is a string that's passed
 to @code{format-time-string}.  See the documentation of that variable
-for a list possible format specs.
+for a list of possible format specs.
 
 @item W T e
 @kindex W T e (Summary)
 @findex gnus-article-date-lapsed
-Say how much time has (e)lapsed between the article was posted and now
+Say how much time has elapsed between the article was posted and now
 (@code{gnus-article-date-lapsed}).
 
 @item W T o
 @kindex W T o (Summary)
 @findex gnus-article-date-original
 Display the original date (@code{gnus-article-date-original}).  This can
-be useful if you normally use some other conversion function and is
+be useful if you normally use some other conversion function and are
 worried that it might be doing something totally wrong.  Say, claiming
 that the article was posted in 1854.  Although something like that is
 @emph{totally} impossible.  Don't you trust me? *titter*
@@ -6227,7 +6508,17 @@ in question is not a signature.
 @end enumerate
 
 This variable can also be a list where the elements may be of the types
-listed above.  
+listed above.  Here's an example:
+
+@lisp
+(setq gnus-signature-limit
+      '(200.0 "^---*Forwarded article"))
+@end lisp
+
+This means that if there are more than 200 lines after the signature
+separator, or the text after the signature separator is matched by
+the regular expression @samp{^---*Forwarded article}, then it isn't a
+signature after all.
 
 
 @node Article Commands
@@ -6344,12 +6635,12 @@ by giving this command a prefix.
 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}),
 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 same
-as the one that keeps the spool you are reading from updated, but that's
-not really necessary.
+would, perhaps, be best if the @sc{nntp} server you consult is the one
+updating the spool you are reading from, but that's not really
+necessary.
 
 Most of the mail backends support fetching by @code{Message-ID}, but do
-not do a particularly excellent job of it.  That is, @code{nnmbox} and
+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
@@ -6373,8 +6664,8 @@ Gnus, we offer a small selection of minor modes for the summary buffers.
 @cindex pick and read
 
 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
+a two-phased reading interface.  The user first marks in a summary
+buffer the articles she wants to read.  Then she starts reading the
 articles with just an article buffer displayed.
 
 @findex gnus-pick-mode
@@ -6382,8 +6673,7 @@ articles with just an article buffer displayed.
 Gnus provides a summary buffer minor mode that allows
 this---@code{gnus-pick-mode}.  This basically means that a few process
 mark commands become one-keystroke commands to allow easy marking, and
-it makes one additional command for switching to the summary buffer
-available. 
+it provides one additional command for switching to the summary buffer.
 
 Here are the available keystrokes when using pick mode:
 
@@ -6393,8 +6683,8 @@ Here are the available keystrokes when using pick mode:
 @findex gnus-summary-mark-as-processable
 Pick the article on the current line
 (@code{gnus-summary-mark-as-processable}).  If given a numerical prefix,
-go to the article on that line and pick that article.  (The line number
-is normally displayed on the beginning of the summary pick lines.)
+go to that article and pick it.  (The line number is normally displayed
+at the beginning of the summary pick lines.)
 
 @item SPACE
 @kindex SPACE (Pick)
@@ -6477,7 +6767,7 @@ If @code{gnus-mark-unpicked-articles-as-read} is non-@code{nil}, mark
 all unpicked articles as read.  The default is @code{nil}.
 
 @vindex gnus-summary-pick-line-format
-The summary line format in pick mode is slightly different than the
+The summary line format in pick mode is slightly different from the
 standard format.  At the beginning of each line the line number is
 displayed.  The pick mode line format is controlled by the
 @code{gnus-summary-pick-line-format} variable (@pxref{Formatting
@@ -6499,8 +6789,9 @@ instead of just displaying the articles the normal way.
 
 @kindex g (Binary)
 @findex gnus-binary-show-article
-In fact, the only way to see the actual articles if you have turned this
-mode on is the @kbd{g} command (@code{gnus-binary-show-article}). 
+The only way, in fact, to see the actual articles is the @kbd{g}
+command, when you have turned on this mode
+(@code{gnus-binary-show-article}).
 
 @vindex gnus-binary-mode-hook
 @code{gnus-binary-mode-hook} is called in binary minor mode buffers.
@@ -6526,7 +6817,7 @@ A hook called in all tree mode buffers.
 @item gnus-tree-mode-line-format
 @vindex gnus-tree-mode-line-format
 A format string for the mode bar in the tree mode buffers.  The default
-is @samp{Gnus: %%b [%A] %Z}.  For a list of legal specs, @pxref{Summary
+is @samp{Gnus: %%b [%A] %Z}.  For a list of valid specs, @pxref{Summary
 Buffer Mode Line}. 
 
 @item gnus-selected-tree-face
@@ -6542,7 +6833,7 @@ is @samp{%(%[%3,3n%]%)}, which displays the first three characters of
 the name of the poster.  It is vital that all nodes are of the same
 length, so you @emph{must} use @samp{%4,4n}-like specifiers.
 
-Legal specs are:
+Valid specs are:
 
 @table @samp
 @item n
@@ -6586,7 +6877,7 @@ windows.  If this variable is a number, the tree buffer will never be
 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.
+other windows displayed next to it.
 
 @item gnus-generate-tree-function
 @vindex gnus-generate-tree-function
@@ -6598,7 +6889,7 @@ functions are available: @code{gnus-generate-horizontal-tree} and
 
 @end table
 
-Here's and example from a horizontal tree buffer:
+Here's an example from a horizontal tree buffer:
 
 @example
 @{***@}-(***)-[odd]-[Gun]
@@ -6625,13 +6916,32 @@ Here's the same thread displayed in a vertical tree buffer:
                         [Paa]
 @end example
 
+If you're using horizontal trees, it might be nice to display the trees
+side-by-side with the summary buffer.  You could add something like the
+following to your @file{.gnus.el} file:
+
+@lisp
+(setq gnus-use-trees t
+      gnus-generate-tree-function 'gnus-generate-horizontal-tree
+      gnus-tree-minimize-window nil)
+(gnus-add-configuration
+ '(article
+   (vertical 1.0
+             (horizontal 0.25
+                         (summary 0.75 point)
+                         (tree 1.0))
+             (article 1.0))))
+@end lisp
+
+@xref{Windows Configuration}.
+
 
 @node Mail Group Commands
 @section Mail Group Commands
 @cindex mail group commands
 
 Some commands only make sense in mail groups.  If these commands are
-illegal in the current group, they will raise a hell and let you know.
+invalid in the current group, they will raise a hell and let you know.
 
 All these commands (except the expiry and edit commands) use the
 process/prefix convention (@pxref{Process/Prefix}).
@@ -6649,12 +6959,13 @@ Expire all expirable articles in the group
 @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}
-articles that are eligible for expiry in the current group will
+articles eligible for expiry in the current group will
 disappear forever into that big @file{/dev/null} in the sky.
 
 @item B DEL
 @kindex B DEL (Summary)
 @findex gnus-summary-delete-article
+@c @icon{gnus-summary-mail-delete}
 Delete the mail article.  This is ``delete'' as in ``delete it from your
 disk forever and ever, never to return again.'' Use with caution.
 (@code{gnus-summary-delete-article}).
@@ -6670,6 +6981,7 @@ Move the article from one mail group to another
 @kindex B c (Summary)
 @cindex copy mail
 @findex gnus-summary-copy-article
+@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}).
 
@@ -6767,11 +7079,11 @@ This is called as the last thing before doing the threading and the
 generation of the summary buffer.  It's quite convenient for customizing
 the threading variables based on what data the newsgroup has.  This hook
 is called from the summary buffer after most summary buffer variables
-has been set.
+have been set.
 
 @vindex gnus-summary-prepare-hook
 @item gnus-summary-prepare-hook
-Is is called after the summary buffer has been generated.  You might use
+It 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.
 
@@ -6803,8 +7115,8 @@ current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
 FAQ from @code{gnus-group-faq-directory}, which is usually a directory
 on a remote machine.  This variable can also be a list of directories.
 In that case, giving a prefix to this command will allow you to choose
-between the various sites.  @code{ange-ftp} probably will be used for
-fetching the file.
+between the various sites.  @code{ange-ftp} or @code{efs} will probably
+be used for fetching the file.
 
 @item H d
 @kindex H d (Summary)
@@ -6848,7 +7160,8 @@ Search through all previous articles for a regexp
 @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}).
+(@code{gnus-summary-execute-command}).  If given a prefix, search
+backward instead.
 
 @item M-&
 @kindex M-& (Summary)
@@ -6889,7 +7202,7 @@ a digest), you might use this command to enter a group based on the that
 article (@code{gnus-summary-enter-digest-group}).  Gnus will try to
 guess what article type is currently displayed unless you give a prefix
 to this command, which forces a ``digest'' interpretation.  Basically,
-whenever you see a message that is a collection of other messages on
+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.
 
@@ -6938,11 +7251,12 @@ group and return you to the group buffer.
 @findex gnus-summary-exit
 @vindex gnus-summary-exit-hook
 @vindex gnus-summary-prepare-exit-hook
+@c @icon{gnus-summary-exit}
 Exit the current group and update all information on the group
 (@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
-called before doing much of the exiting, and calls
+called before doing much of the exiting, which calls
 @code{gnus-summary-expire-articles} by default.
-@code{gnus-summary-exit-hook} is called after finishing the exiting
+@code{gnus-summary-exit-hook} is called after finishing the exit
 process.  @code{gnus-group-no-more-groups-hook} is run when returning to
 group mode having no more (unread) groups.
 
@@ -6959,6 +7273,7 @@ Exit the current group without updating any information on the group
 @kindex Z c (Summary)
 @kindex c (Summary)
 @findex gnus-summary-catchup-and-exit
+@c @icon{gnus-summary-catchup-and-exit}
 Mark all unticked articles in the group as read and then exit
 (@code{gnus-summary-catchup-and-exit}).
 
@@ -6986,6 +7301,7 @@ all articles, both read and unread.
 @kindex Z G (Summary)
 @kindex M-g (Summary)
 @findex gnus-summary-rescan-group
+@c @icon{gnus-summary-mail-get}
 Exit the group, check for new articles in the group, and select the
 group (@code{gnus-summary-rescan-group}).  If given a prefix, select all
 articles, both read and unread.
@@ -7100,7 +7416,7 @@ For an alternative approach, @pxref{Duplicate Suppression}.
 By default, Gnus tries to make sure that you don't have to read the same
 article more than once by utilizing the crossposting mechanism
 (@pxref{Crosspost Handling}).  However, that simple and efficient
-approach may not work satisfactorily for some users for various
+approach may not work satisfactory for some users for various
 reasons.  
 
 @enumerate
@@ -7120,7 +7436,7 @@ different @sc{nntp} servers.
 You may be getting mail that duplicates articles posted to groups.
 @end enumerate
 
-I'm sure there are other situations that @code{Xref} handling fails as
+I'm sure there are other situations where @code{Xref} handling fails as
 well, but these four are the most common situations.
 
 If, and only if, @code{Xref} handling fails for you, then you may
@@ -7136,7 +7452,7 @@ Duplicate suppression is not a very subtle instrument.  It's more like a
 sledge hammer than anything else.  It works in a very simple
 fashion---if you have marked an article as read, it adds this Message-ID
 to a cache.  The next time it sees this Message-ID, it will mark the
-article as read the the @samp{M} mark.  It doesn't care what group it
+article as read with the @samp{M} mark.  It doesn't care what group it
 saw the article in.
 
 @table @code
@@ -7148,17 +7464,17 @@ If non-@code{nil}, suppress duplicates.
 @vindex gnus-save-duplicate-list
 If non-@code{nil}, save the list of duplicates to a file.  This will
 make startup and shutdown take longer, so the default is @code{nil}.
-However, this means that only duplicate articles that is read in a
-single Gnus session are suppressed.  
+However, this means that only duplicate articles read in a single Gnus
+session are suppressed.
 
 @item gnus-duplicate-list-length
 @vindex gnus-duplicate-list-length
-This variables says how many @code{Message-ID}s to keep in the duplicate
+This variable says how many @code{Message-ID}s to keep in the duplicate
 suppression list.  The default is 10000.  
 
 @item gnus-duplicate-file
 @vindex gnus-duplicate-file
-The name of the file to store the duplicate suppression list.  The
+The name of the file to store the duplicate suppression list in.  The
 default is @file{~/News/suppression}.
 @end table
 
@@ -7223,7 +7539,7 @@ the article and the subject, you'd say:
 (setq gnus-visible-headers "^From:\\|^Subject:")
 @end lisp
 
-This variable can also be a list of regexps to match headers that are to
+This variable can also be a list of regexps to match headers to
 remain visible.
 
 @item gnus-ignored-headers
@@ -7240,7 +7556,7 @@ and the @code{Xref} line, you might say:
 (setq gnus-ignored-headers "^References:\\|^Xref:")
 @end lisp
 
-This variable can also be a list of regexps to match headers that are to
+This variable can also be a list of regexps to match headers to
 be removed.
 
 Note that if @code{gnus-visible-headers} is non-@code{nil}, this
@@ -7262,8 +7578,7 @@ and then the subject, you might say something like:
 @end lisp
 
 Any headers that are to remain visible, but are not listed in this
-variable, will be displayed in random order after all the headers that
-are listed in this variable.
+variable, will be displayed in random order after all the headers listed in this variable.
 
 @findex gnus-article-hide-boring-headers
 @vindex gnus-article-display-hook
@@ -7334,7 +7649,7 @@ It might be best to just use the toggling functions from the summary
 buffer to avoid getting nasty surprises. (For instance, you enter the
 group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has
 decoded the sound file in the article and some horrible sing-a-long song
-comes streaming out out your speakers, and you can't find the volume
+comes screaming out your speakers, and you can't find the volume
 button, because there isn't one, and people are starting to look at you,
 and you try to stop the program, but you can't, and you can't find the
 program to control the volume, and everybody else in the room suddenly
@@ -7420,13 +7735,13 @@ Give a very brief description of the available keystrokes
 @item TAB
 @kindex TAB (Article)
 @findex gnus-article-next-button
-Go to the next button, if any (@code{gnus-article-next-button}.  This
+Go to the next button, if any (@code{gnus-article-next-button}).  This
 only makes sense if you have buttonizing turned on.
 
 @item M-TAB
 @kindex M-TAB (Article)
 @findex gnus-article-prev-button
-Go to the previous button, if any (@code{gnus-article-prev-button}.  
+Go to the previous button, if any (@code{gnus-article-prev-button}).  
 
 @end table
 
@@ -7488,7 +7803,7 @@ paging will not be done.
 @item gnus-page-delimiter
 @vindex gnus-page-delimiter
 This is the delimiter mentioned above.  By default, it is @samp{^L}
-(form linefeed).
+(formfeed).
 @end table
 
 
@@ -7512,9 +7827,8 @@ to make Gnus try to post using the foreign server.
 * 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.
-@c * Posting Styles::       An easier way to configure some key elements.
-@c * Drafts::               Postponing messages and rejected messages.
-@c * Rejected Articles::    What happens if the server doesn't like your article?
+* Drafts::               Postponing messages and rejected messages.
+* Rejected Articles::    What happens if the server doesn't like your article?
 @end menu
 
 Also see @pxref{Canceling and Superseding} for information on how to
@@ -7551,7 +7865,7 @@ Variables for composing news articles:
 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 sent the
+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
@@ -7601,7 +7915,7 @@ for posting.
 @node Mail and Post
 @section Mail and Post
 
-Here's a list of variables that are relevant to both mailing and
+Here's a list of variables relevant to both mailing and
 posting:
 
 @table @code
@@ -7609,12 +7923,12 @@ posting:
 @findex gnus-mailing-list-groups
 @cindex mailing lists
 
-If your news server offers groups that are really mailing lists that are
+If your news server offers groups that are really mailing lists
 gatewayed to the @sc{nntp} server, you can read those groups without
 problems, but you can't post/followup to them without some difficulty.
 One solution is to add a @code{to-address} to the group parameters
 (@pxref{Group Parameters}).  An easier thing to do is set the
-@code{gnus-mailing-list-groups} to a regexp that match the groups that
+@code{gnus-mailing-list-groups} to a regexp that matches the groups that
 really are mailing lists.  Then, at least, followups to the mailing
 lists will work most of the time.  Posting to these groups (@kbd{a}) is
 still a pain, though.
@@ -7671,7 +7985,7 @@ Gnus will insert @code{Gcc} headers in all outgoing messages that point
 to one or more group(s) on that server.  Which group to use is
 determined by the @code{gnus-message-archive-group} variable.  
 
-This variable can be:
+This variable can be used to do the following:
 
 @itemize @bullet
 @item a string
@@ -7723,6 +8037,9 @@ messages in one file per month:
                            "%Y-%m" (current-time))))))
 @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.)
+
 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,
 you can just remove the @code{Gcc} header that has been inserted.)  The
@@ -7734,14 +8051,11 @@ if (using @kbd{G r} in the group buffer) to something
 nice---@samp{misc-mail-september-1995}, or whatever.  New messages will
 continue to be stored in the old (now empty) group.
 
-That's the default method of archiving sent messages.  Gnus also a
+That's the default method of archiving sent messages.  Gnus offers a
 different way for the people who don't like the default method.  In that
 case you should set @code{gnus-message-archive-group} to @code{nil};
 this will disable archiving.
 
-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.
-
 @table @code
 @item gnus-outgoing-message-group 
 @vindex gnus-outgoing-message-group 
@@ -7838,36 +8152,36 @@ but the latter is the preferred method.
 @c           (signature . "~/.mail-signature"))))
 @c @end lisp
 
-@c @node Drafts
-@c @section Drafts
-@c @cindex drafts
-@c 
-@c If you are writing a message (mail or news) and suddenly remember that
-@c you have a steak in the oven (or some pesto in the food processor, you
-@c craazy vegetarians), you'll probably wish there was a method to save the
-@c message you are writing so that you can continue editing it some other
-@c day, and send it when you feel its finished.
-@c 
-@c Well, don't worry about it.  Whenever you start composing a message of
-@c some sort using the Gnus mail and post commands, the buffer you get will
-@c automatically associate to an article in a special @dfn{draft} group.
-@c If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
-@c article will be saved there.  (Auto-save files also go to the draft
-@c group.) 
-@c 
-@c @cindex nndraft
-@c @vindex gnus-draft-group-directory
-@c The draft group is a special group (which is implemented as an
-@c @code{nndraft} group, if you absolutely have to know) called
-@c @samp{nndraft:drafts}.  The variable @code{gnus-draft-group-directory}
-@c controls both the name of the group and the location---the leaf element
-@c in the path will be used as the name of the group.  What makes this
-@c group special is that you can't tick any articles in it or mark any
-@c articles as read---all articles in the group are permanently unread.
-@c 
-@c If the group doesn't exist, it will be created and you'll be subscribed
-@c to it.
-@c 
+@node Drafts
+@section Drafts
+@cindex drafts
+
+If you are writing a message (mail or news) and suddenly remember that
+you have a steak in the oven (or some pesto in the food processor, you
+craaazy vegetarians), you'll probably wish there was a method to save
+the message you are writing so that you can continue editing it some
+other day, and send it when you feel its finished.
+
+Well, don't worry about it.  Whenever you start composing a message of
+some sort using the Gnus mail and post commands, the buffer you get will
+automatically associate to an article in a special @dfn{draft} group.
+If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
+article will be saved there.  (Auto-save files also go to the draft
+group.) 
+
+@cindex nndraft
+@vindex nndraft-directory
+The draft group is a special group (which is implemented as an
+@code{nndraft} group, if you absolutely have to know) called
+@samp{nndraft:drafts}.  The variable @code{nndraft-directory} says where
+@code{nndraft} is to store its files.  What makes this group special is
+that you can't tick any articles in it or mark any articles as
+read---all articles in the group are permanently unread.
+
+If the group doesn't exist, it will be created and you'll be subscribed
+to it.  The only way to make it disappear from the Group buffer is to
+unsubscribe it. 
+
 @c @findex gnus-dissociate-buffer-from-draft
 @c @kindex C-c M-d (Mail)
 @c @kindex C-c M-d (Post)
@@ -7886,49 +8200,56 @@ but the latter is the preferred method.
 @c @vindex gnus-use-draft
 @c To leave association with the draft group off by default, set
 @c @code{gnus-use-draft} to @code{nil}.  It is @code{t} by default. 
-@c 
-@c @findex gnus-summary-send-draft
-@c @kindex S D c (Summary)
-@c When you want to continue editing the article, you simply enter the
-@c draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do
-@c that.  You will be placed in a buffer where you left off.
-@c 
-@c Rejected articles will also be put in this draft group (@pxref{Rejected
-@c Articles}).
-@c 
-@c @findex gnus-summary-send-all-drafts
-@c If you have lots of rejected messages you want to post (or mail) without
-@c doing further editing, you can use the @kbd{S D a} command
-@c (@code{gnus-summary-send-all-drafts}).  This command understands the
-@c process/prefix convention (@pxref{Process/Prefix}).  
-@c 
-@c 
-@c @node Rejected Articles
-@c @section Rejected Articles
-@c @cindex rejected articles
-@c 
-@c Sometimes a news server will reject an article.  Perhaps the server
-@c doesn't like your face.  Perhaps it just feels miserable.  Perhaps
-@c @emph{there be demons}.  Perhaps you have included too much cited text.
-@c Perhaps the disk is full.  Perhaps the server is down.
-@c 
-@c These situations are, of course, totally beyond the control of Gnus.
-@c (Gnus, of course, loves the way you look, always feels great, has angels
-@c fluttering around inside of it, doesn't care about how much cited text
-@c you include, never runs full and never goes down.)  So Gnus saves these
-@c articles until some later time when the server feels better.
-@c 
-@c The rejected articles will automatically be put in a special draft group
-@c (@pxref{Drafts}).  When the server comes back up again, you'd then
-@c typically enter that group and send all the articles off.
-@c 
+
+@findex gnus-draft-edit-message
+@kindex D e (Draft)
+When you want to continue editing the article, you simply enter the
+draft group and push @kbd{D e} (@code{gnus-draft-edit-message}) to do
+that.  You will be placed in a buffer where you left off.
+
+Rejected articles will also be put in this draft group (@pxref{Rejected
+Articles}).
+
+@findex gnus-draft-send-all-messages
+@findex gnus-draft-send-message
+If you have lots of rejected messages you want to post (or mail) without
+doing further editing, you can use the @kbd{D s} command
+(@code{gnus-draft-send-message}).  This command understands the
+process/prefix convention (@pxref{Process/Prefix}).  The @kbd{D S}
+command (@code{gnus-draft-send-all-messages}) will ship off all messages
+in the buffer.
+
+If you have some messages that you wish not to send, you can use the
+@kbd{D t} (@code{gnus-draft-toggle-sending}) command to mark the message
+as unsendable.  This is a toggling command.
+
+
+@node Rejected Articles
+@section Rejected Articles
+@cindex rejected articles
+
+Sometimes a news server will reject an article.  Perhaps the server
+doesn't like your face.  Perhaps it just feels miserable.  Perhaps
+@emph{there be demons}.  Perhaps you have included too much cited text.
+Perhaps the disk is full.  Perhaps the server is down.
+
+These situations are, of course, totally beyond the control of Gnus.
+(Gnus, of course, loves the way you look, always feels great, has angels
+fluttering around inside of it, doesn't care about how much cited text
+you include, never runs full and never goes down.)  So Gnus saves these
+articles until some later time when the server feels better.
+
+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 Select Methods
 @chapter Select Methods
 @cindex foreign groups
 @cindex select methods
 
-A @dfn{foreign group} is a group that is not read by the usual (or
+A @dfn{foreign group} is a group not read by the usual (or
 default) means.  It could be, for instance, a group from a different
 @sc{nntp} server, it could be a virtual group, or it could be your own
 personal mail group.
@@ -7960,6 +8281,7 @@ The different methods all have their peculiarities, of course.
 * Getting Mail::          Reading your personal mail with Gnus.
 * Other Sources::         Reading directories, files, SOUP packets.
 * Combined Groups::       Combining groups into one group.
+* Gnus Unplugged::        Reading news and mail offline.
 @end menu
 
 
@@ -7978,7 +8300,7 @@ different actual @sc{nntp} servers, or, perhaps, to many different ports
 on the same actual @sc{nntp} server.  You tell Gnus which backend to
 use, and what parameters to set by specifying a @dfn{select method}.
 
-These select methods specifications can sometimes become quite
+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.
@@ -7986,7 +8308,7 @@ Anyways, 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.
 
-To enter the server buffer, user the @kbd{^}
+To enter the server buffer, use the @kbd{^}
 (@code{gnus-group-enter-server-mode}) command in the group buffer.
 
 @menu
@@ -8125,11 +8447,11 @@ 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
 will. 
 
-After these two elements, there may be a arbitrary number of
+After these two elements, there may be an arbitrary number of
 @var{(variable form)} pairs.
 
 To go back to the first example---imagine that you want to read from
-port 15 from that machine.  This is what the select method should
+port 15 on that machine.  This is what the select method should
 look like then:
 
 @lisp
@@ -8137,12 +8459,12 @@ look like then:
 @end lisp
 
 You should read the documentation to each backend to find out what
-variables are relevant, but here's an @code{nnmh} example
+variables are relevant, but here's an @code{nnmh} example:
 
 @code{nnmh} is a mail backend 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
-you private mail:
+your private mail:
 
 @lisp
 (nnmh "private" (nnmh-directory "~/private/mail/"))
@@ -8258,10 +8580,10 @@ will tell you, without making the least effort to see whether that is
 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
+Let's say you have 10 groups subscribed to on server
 @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
+to find out that it refuses connection to 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''.
@@ -8307,7 +8629,7 @@ Close the connections to all servers in the buffer
 @item R
 @kindex R (Server)
 @findex gnus-server-remove-denials
-Remove all marks to whether Gnus was denied connection from all servers
+Remove all marks to whether Gnus was denied connection from any servers
 (@code{gnus-server-remove-denials}). 
 
 @end table
@@ -8358,10 +8680,11 @@ server:
 @cindex nntp authentification
 @findex nntp-send-authinfo
 @findex nntp-send-mode-reader
-@code{nntp-server-opened-hook} is run after a connection has been made.
-It can be used to send commands to the @sc{nntp} server after it has
-been contacted.  By default is sends the command @code{MODE READER} to
-the server with the @code{nntp-send-mode-reader} function. 
+is run after a connection has been made.  It can be used to send
+commands to the @sc{nntp} server after it has been contacted.  By
+default it sends the command @code{MODE READER} to the server with the
+@code{nntp-send-mode-reader} function.  This function should always be
+present in this hook.
 
 @item nntp-authinfo-function 
 @vindex nntp-authinfo-function 
@@ -8371,7 +8694,7 @@ server.  Available functions include:
 @table @code
 @item nntp-send-authinfo
 @findex nntp-send-authinfo
-This function will used you current login name as the user name and will
+This function will use your current login name as the user name and will
 prompt you for the password.  This is the default.
 
 @item nntp-send-nosy-authinfo
@@ -8386,7 +8709,7 @@ read the @sc{nntp} password from @file{~/.nntp-authinfo}.
 
 @item nntp-server-action-alist 
 @vindex nntp-server-action-alist 
-This is an list of regexps to match on server types and actions to be
+This is a list of regexps to match on server types and actions to be
 taken when matches are made.  For instance, if you want Gnus to beep
 every time you connect to innd, you could say something like:
 
@@ -8400,8 +8723,8 @@ You probably don't want to do that, though.
 The default value is
 
 @lisp
-  '(("nntpd 1\\.5\\.11t" 
-     (remove-hook 'nntp-server-opened-hook nntp-send-mode-reader)))
+'(("nntpd 1\\.5\\.11t" 
+   (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
@@ -8436,10 +8759,10 @@ address, Gnus may become confused.  If the address of your machine
 changes after connecting to the @sc{nntp} server, Gnus will simply sit
 waiting forever for replies from the server.  To help with this
 unfortunate problem, you can set this command to a number.  Gnus will
-then, if it sits waiting longer than that number of seconds for a reply
-from the server, shut down the connection, start a new one, and resend
+then, if it sits waiting for a reply from the server longer than that
+number of seconds, shut down the connection, start a new one, and resend
 the command.  This should hopefully be transparent to the user.  A
-likely number is 30 seconds. 
+likely number is 30 seconds.
 
 @item nntp-retry-on-break
 @vindex nntp-retry-on-break
@@ -8453,24 +8776,62 @@ 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 @code{telnet}.
+
+@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.
+
+@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 executed as a command after logging in
+via @code{telnet}.
+
+@end table
 
 @item nntp-end-of-line
 @vindex nntp-end-of-line
-String to use as end-of-line markers when talking to the @sc{nntp}
+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.
 
@@ -8495,14 +8856,14 @@ Set this to non-@code{nil} if your select routine is buggy.
 @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 whether @sc{nov}
-can be used automatically.
+variable to @code{t}, but @code{nntp} usually checks automatically whether @sc{nov}
+can be used.
 
 @item nntp-xover-commands
 @vindex nntp-xover-commands
 @cindex nov
 @cindex XOVER
-List of strings that are used as commands to fetch @sc{nov} lines from a
+List of strings used as commands to fetch @sc{nov} lines from a
 server.  The default value of this variable is @code{("XOVER"
 "XOVERVIEW")}. 
 
@@ -8512,12 +8873,12 @@ server.  The default value of this variable is @code{("XOVER"
 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 do not want, and will not use.  This variable says how
+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.
+@code{nntp} will never split requests.  The default is 5.
 
 @item nntp-prepare-server-hook
 @vindex nntp-prepare-server-hook
@@ -8575,19 +8936,19 @@ Where the news lib dir is (@file{/usr/lib/news/} by default).
 
 @item nnspool-active-file
 @vindex nnspool-active-file
-The path of the active file.
+The path to the active file.
 
 @item nnspool-newsgroups-file
 @vindex nnspool-newsgroups-file
-The path of the group descriptions file.
+The path to the group descriptions file.
 
 @item nnspool-history-file
 @vindex nnspool-history-file
-The path of the news history file.
+The path to the news history file.
 
 @item nnspool-active-times-file
 @vindex nnspool-active-times-file
-The path of the active date file.
+The path to the active date file.
 
 @item nnspool-nov-is-evil
 @vindex nnspool-nov-is-evil
@@ -8634,8 +8995,8 @@ 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},
 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:
+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:
 
 @lisp
 (setq gnus-secondary-select-methods
@@ -8660,11 +9021,11 @@ You will probably want to split the mail into several groups, though:
 This will result in three new @code{nnml} mail groups being created:
 @samp{nnml:junk}, @samp{nnml:crazy}, and @samp{nnml:other}.  All the
 mail that doesn't fit into the first two groups will be placed in the
-latter group.
+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}. 
+give the other sections in this part of the manual a perusal, though.
+Especially @pxref{Choosing a Mail Backend} and @pxref{Expiring Mail}. 
 
 
 @node Splitting Mail
@@ -8708,10 +9069,10 @@ In that case, all matching rules will "win".)
 If you like to tinker with this yourself, you can set this variable to a
 function of your choice.  This function will be called without any
 arguments in a buffer narrowed to the headers of an incoming mail
-message.  The function should return a list of groups names that it
+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 backends 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.
@@ -8726,7 +9087,7 @@ that no articles are crossposted to the general (@samp{}) group.
 @cindex crosspost
 @cindex links
 @code{nnmh} and @code{nnml} makes crossposts by creating hard links to
-the crossposted articles.  However, not all files systems support hard
+the crossposted articles.  However, not all file systems support hard
 links.  If that's the case for you, set
 @code{nnmail-crosspost-link-function} to @code{copy-file}.  (This
 variable is @code{add-name-to-file} by default.)  
@@ -8804,7 +9165,7 @@ mail.
 
 @vindex nnmail-crash-box
 @item nnmail-crash-box
-When the mail backends read a spool file, it is first moved to this
+When a mail backend reads a spool file, mail is first moved to this
 file, which is @file{~/.gnus-crash-box} by default.  If this file
 already exists, it will always be read (and incorporated) before any
 other spool files.
@@ -8846,9 +9207,9 @@ default file modes the new mail files get:
 
 @item nnmail-tmp-directory
 @vindex nnmail-tmp-directory
-This variable says where to move the incoming mail to while processing
+This variable says where to move incoming mail to -- while processing
 it.  This is usually done in the same directory that the mail backend
-inhabits (i.e., @file{~/Mail/}), but if this variable is non-@code{nil},
+inhabits (e.g., @file{~/Mail/}), but if this variable is non-@code{nil},
 it will be used instead.
 
 @item nnmail-movemail-program
@@ -8874,18 +9235,19 @@ default.
 @c Since Red Gnus is an alpha release, it is to be expected to lose mail.
 (No Gnus release since (ding) Gnus 0.10 (or something like that) have
 lost mail, I think, but that's not the point.  (Except certain versions
-of Red Gnus.))  By not deleting the Incoming* files, one can be sure to
-not lose mail -- if Gnus totally whacks out, one can always recover what
+of Red Gnus.))  By not deleting the Incoming* files, one can be sure not
+to lose mail -- if Gnus totally whacks out, one can always recover what
 was lost.
 
-Delete the @file{Incoming*} files at will.
+You may delete the @file{Incoming*} files at will.
 
 @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
-names.  Groups like @samp{mail.misc} will end up in directories like
-@file{mail.misc/}.  If it is @code{nil}, the same group will end up in
-@file{mail/misc/}.
+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},
+the same group will end up in @file{mail/misc}.
 
 @item nnmail-delete-file-function
 @vindex nnmail-delete-file-function
@@ -8945,10 +9307,9 @@ the five possible split syntaxes:
 @samp{group}: If the split is a string, that will be taken as a group name. 
 
 @item
-@var{(FIELD VALUE SPLIT)}: If the split is a list, and the first
-element is a string, then that means that if header FIELD (a regexp)
-contains VALUE (also a regexp), then store the message as specified by
-SPLIT.
+@var{(FIELD VALUE SPLIT)}: If the split is a list, the first element of
+which is a string, then store the message as specified by SPLIT, if
+header FIELD (a regexp) contains VALUE (also a regexp).
 
 @item
 @var{(| SPLIT...)}: If the split is a list, and the first element is
@@ -8982,22 +9343,21 @@ field names or words.  In other words, all @var{VALUE}'s are wrapped in
 @var{FIELD} and @var{VALUE} can also be lisp symbols, in that case they
 are expanded as specified by the variable
 @code{nnmail-split-abbrev-alist}.  This is an alist of cons cells, where
-the car of the cells contains the key, and the cdr contains a string.
+the @code{car} of a cell contains the key, and the @code{cdr} contains the associated
+value.
 
 @vindex nnmail-split-fancy-syntax-table
 @code{nnmail-split-fancy-syntax-table} is the syntax table in effect
 when all this splitting is performed.
 
 If you want to have Gnus create groups dynamically based on some
-information in the headers, you can say things like:
+information in the headers (i.e., do @code{replace-match}-like
+substitions in the group names), you can say things like:
 
 @example
 (any "debian-\(\\w*\\)@@lists.debian.org" "mail.debian.\\1")
 @end example
 
-That is, do @code{replace-match}-like substitions in the group names. 
-
-
 @node Mail and Procmail
 @subsection Mail and Procmail
 @cindex procmail
@@ -9016,15 +9376,15 @@ side effects.
 
 When a mail backend is queried for what groups it carries, it replies
 with the contents of that variable, along with any groups it has figured
-out that it carries by other means.  None of the backends (except
-@code{nnmh}) actually go out to the disk and check what groups actually
+out that it carries by other means.  None of the backendsexcept
+@code{nnmh}, actually go out to the disk and check what groups actually
 exist.  (It's not trivial to distinguish between what the user thinks is
 a basis for a newsgroup and what is just a plain old file or directory.)
 
-This means that you have to tell Gnus (and the backends) what groups
-exist by hand.
+This means that you have to tell Gnus (and the backends) by hand what
+groups exist.
 
-Let's take the @code{nnmh} backend as an example
+Let's take the @code{nnmh} backend as an example:
 
 The folders are located in @code{nnmh-directory}, say, @file{~/Mail/}.
 There are three folders, @file{foo}, @file{bar} and @file{mail.baz}.
@@ -9053,14 +9413,14 @@ Gnus to split the mail the normal way, you could set
 @code{nnmail-resplit-incoming} to @code{t}.
 
 @vindex nnmail-keep-last-article
-If you use @code{procmail} to split things directory into an @code{nnmh}
+If you use @code{procmail} to split things directly into an @code{nnmh}
 directory (which you shouldn't do), you should set
 @code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from
-ever expiring the final article (i. e., the article with the highest
+ever expiring the final article (i.e., the article with the highest
 article number) in a mail newsgroup.  This is quite, quite important.
 
 Here's an example setup:  The incoming spools are located in
-@file{~/incoming/} and have @samp{""} as suffixes (i. e., the incoming
+@file{~/incoming/} and have @samp{""} as suffixes (i.e., the incoming
 spool files have the same names as the equivalent groups).  The
 @code{nnfolder} backend is to be used as the mail interface, and the
 @code{nnfolder} directory is @file{~/fMail/}.
@@ -9097,15 +9457,15 @@ Here's how:
 Go to the group buffer.
 
 @item 
-Type `G f' and give the path of the mbox file when prompted to create an
+Type `G f' and give the path 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.
 
 @item
-Type `M P b' to process-mark all articles in this group (@pxref{Setting
-Process Marks}).
+Type `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
@@ -9152,12 +9512,25 @@ NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
 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 that are marked as expirable have an @samp{E} in the first
+articles marked as expirable have an @samp{E} in the first
 column in the summary buffer.
 
-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
+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 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
 mark the articles as expirable in auto-expirable groups.
 
@@ -9174,7 +9547,7 @@ Another way to have auto-expiry happen is to have the element
 
 If you use adaptive scoring (@pxref{Adaptive Scoring}) and
 auto-expiring, you'll have problems.  Auto-expiring and adaptive scoring
-doesn't really mix very well.  
+don't really mix very well.  
 
 @vindex nnmail-expiry-wait
 The @code{nnmail-expiry-wait} variable supplies the default time an
@@ -9202,13 +9575,13 @@ everywhere else:
                6))))
 @end lisp
 
-The group names that this function is fed are ``unadorned'' group
+The group names this function is fed are ``unadorned'' group
 names---no @samp{nnml:} prefixes and the like.
 
 The @code{nnmail-expiry-wait} variable and
-@code{nnmail-expiry-wait-function} function can be either a number (not
-necessarily an integer) or the symbols @code{immediate} or
-@code{never}.  
+@code{nnmail-expiry-wait-function} function can either be a number (not
+necessarily an integer) or one of the symbols @code{immediate} or
+@code{never}.
 
 You can also use the @code{expiry-wait} group parameter to selectively
 change the expiry period (@pxref{Group Parameters}).
@@ -9219,8 +9592,8 @@ expire the final article in a mail newsgroup.  This is to make life
 easier for procmail users.
 
 @vindex gnus-total-expirable-newsgroups
-By the way, that line up there about Gnus never expiring non-expirable
-articles is a lie.  If you put @code{total-expire} in the group
+By the way: That line up there, about Gnus never expiring non-expirable
+articles, is a lie.  If you put @code{total-expire} in the group
 parameters, articles will not be marked as expirable, but all read
 articles will be put through the expiry process.  Use with extreme
 caution.  Even more dangerous is the
@@ -9282,7 +9655,7 @@ cleaning up the headers.  Functions that can be used include:
 @item nnmail-remove-leading-whitespace
 @findex nnmail-remove-leading-whitespace
 Clear leading white space that ``helpful'' listservs have added to the
-headers too make them look nice.  Aaah.  
+headers to make them look nice.  Aaah.  
 
 @item nnmail-remove-list-identifiers
 @findex nnmail-remove-list-identifiers
@@ -9327,7 +9700,7 @@ Decode Quoted Readable encoding.
 @vindex nnmail-message-id-cache-length
 @vindex nnmail-message-id-cache-file
 @cindex duplicate mails
-If you are a member of a couple of mailing list, you will sometime
+If you are a member of a couple of mailing lists, you will sometimes
 receive two copies of the same mail.  This can be quite annoying, so
 @code{nnmail} checks for and treats any duplicates it might find.  To do
 this, it keeps a cache of old @code{Message-ID}s---
@@ -9487,8 +9860,8 @@ 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;
-one file for each mail, and put the articles into the correct
+If you use this backend, 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/}.
 
@@ -9506,7 +9879,7 @@ 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
 splitting.  It has to create lots of files, and it also generates
-@sc{nov} databases for the incoming mails.  This makes is the fastest
+@sc{nov} databases for the incoming mails.  This makes it the fastest
 backend when it comes to reading mail.
 
 Virtual server settings:
@@ -9650,15 +10023,16 @@ 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.
 
-This might be an opportune moment to mention @code{ange-ftp}, 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.
+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.
 
 @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 the directory name,
-@code{ange-ftp} will actually allow you to read this directory over at
-@samp{sina} as a newsgroup.  Distributed news ahoy!
+@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!
 
 @code{nndir} will use @sc{nov} files if they are present.
 
@@ -9804,14 +10178,14 @@ 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{rfc822-forward},
-@code{news}, @code{rnews}, @code{mime-digest}, @code{clari-briefs}, or
-@code{guess}.
+@code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
+@code{rfc822-forward}, @code{mime-digest}, @code{standard-digest},
+@code{slack-digest}, @code{clari-briefs} or @code{guess}.
 
 @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 legal values:  @code{mail} (the default)
+a mail group.  There are two valid values:  @code{mail} (the default)
 and @code{news}.
 @end table
 
@@ -9878,7 +10252,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. 
 
@@ -9898,7 +10272,7 @@ document has encoded some parts of its contents.
 
 @item article-transform-function
 If present, this function is called when requesting an article.  It's
-meant to be used how more wide-ranging transformation of both head and
+meant to be used for more wide-ranging transformation of both head and
 body of the article.
 
 @item generate-head-function
@@ -9934,13 +10308,12 @@ 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 each
-type.  So @code{nndoc-mmdf-type-p} is called to see whether a document
+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 legal number.
+low probability with @samp{0} being the lowest valid number.
 
 
 @node SOUP
@@ -9983,7 +10356,7 @@ of packets:
 
 @table @dfn
 @item message packets
-These are packets made at the server, and typically contains lots of
+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.
 
@@ -10154,7 +10527,7 @@ The default is @file{~/SOUP/}.
 
 @item nnsoup-replies-directory 
 @vindex nnsoup-replies-directory 
-All replies will stored in this directory before being packed into a
+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
@@ -10165,8 +10538,8 @@ 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 is @samp{?n}, which means
-``none''.  Don't fiddle with this one either!
+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
@@ -10247,13 +10620,13 @@ Groups}) will do this in an easy-to-use fashion.
 groups---they have a very fleeting idea of article numbers.  In fact,
 each time you enter an @code{nnweb} group (not even changing the search
 pattern), you are likely to get the articles ordered in a different
-manner.  Not even using duplicate suppression (@code{Duplicate
+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
 of which articles you've read is by scoring on the @code{Date}
-header---mark all articles that were posted before the last date you
-read the group as read.
+header---mark all articles posted before the last date you read the
+group as read.
 
 If the search engine changes its output substantially, @code{nnweb}
 won't be able to parse it and will fail.  One could hardly fault the Web
@@ -10332,7 +10705,7 @@ This is the address of the mail-to-news gateway.
 
 @item nngateway-header-transformation
 @vindex nngateway-header-transformation
-News headers have often have to be transformed in some odd way or other
+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
@@ -10340,8 +10713,8 @@ 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---an article with this
-@code{Newsgroups} header:
+@code{Newsgroups} header and the gateway address.
+For instance, an article with this @code{Newsgroups} header:
 
 @example
 Newsgroups: alt.religion.emacs
@@ -10382,7 +10755,7 @@ groups.
 An @dfn{nnvirtual group} is really nothing more than a collection of
 other groups.
 
-For instance, if you are tired of reading many small group, you can
+For instance, if you are tired of reading many small groups, you can
 put them all in one big group, and then grow tired of reading one
 big, unwieldy group.  The joys of computing!
 
@@ -10418,10 +10791,10 @@ This should work kinda smoothly---all articles from both groups should
 end up in this one, and there should be no duplicates.  Threading (and
 the rest) will still work as usual, but there might be problems with the
 sequence of articles.  Sorting on date might be an option here
-(@pxref{Selecting a Group}.
+(@pxref{Selecting a Group}).
 
-One limitation, however---all groups that are included in a virtual
-group has to be alive (i.e., subscribed or unsubscribed).  Killed or
+One limitation, however---all groups included in a virtual
+group have to be alive (i.e., subscribed or unsubscribed).  Killed or
 zombie groups can't be component groups for @code{nnvirtual} groups.
 
 @vindex nnvirtual-always-rescan
@@ -10431,8 +10804,8 @@ entering a virtual group.  If this variable is @code{nil} (which is the
 default) and you read articles in a component group after the virtual
 group has been activated, the read articles from the component group
 will show up when you enter the virtual group.  You'll also see this
-effect if you have two virtual groups that contain the same component
-group.  If that's the case, you should set this variable to @code{t}.
+effect if you have two virtual groups that have a component group in
+common.  If that's the case, you should set this variable to @code{t}.
 Or you can just tap @code{M-g} on the virtual group every time before
 you enter it---it'll have much the same effect.
 
@@ -10453,11 +10826,11 @@ buffer.
 
 The address field of the @code{nnkiboze} method is, as with
 @code{nnvirtual}, a regexp to match groups to be ``included'' in the
-@code{nnkiboze} group.  There most similarities between @code{nnkiboze}
-and @code{nnvirtual} ends.
+@code{nnkiboze} group.  That's where most similarities between @code{nnkiboze}
+and @code{nnvirtual} end.
 
 In addition to this regexp detailing component groups, an @code{nnkiboze} group
-must have a score file to say what articles that are to be included in
+must have a score file to say what articles are to be included in
 the group (@pxref{Scoring}).
 
 @kindex M-x nnkiboze-generate-groups
@@ -10465,7 +10838,7 @@ the group (@pxref{Scoring}).
 You must run @kbd{M-x nnkiboze-generate-groups} after creating the
 @code{nnkiboze} groups you want to have.  This command will take time.  Lots of
 time.  Oodles and oodles of time.  Gnus has to fetch the headers from
-all the articles in all the components groups and run them through the
+all the articles in all the component groups and run them through the
 scoring process to determine if there are any articles in the groups
 that are to be part of the @code{nnkiboze} groups.
 
@@ -10482,11 +10855,526 @@ The generation of an @code{nnkiboze} group means writing two files in
 @code{nnkiboze-directory}, which is @file{~/News/} by default.  One
 contains the @sc{nov} header lines for all the articles in the group,
 and the other is an additional @file{.newsrc} file to store information
-on what groups that have been searched through to find component
-articles.
+on what groups have been searched through to find component articles.
+
+Articles marked as read in the @code{nnkiboze} group will have
+their @sc{nov} lines removed from the @sc{nov} file.
+
+
+@node Gnus Unplugged
+@section Gnus Unplugged
+@cindex offline
+@cindex unplugged
+@cindex Agent
+@cindex Gnus Agent
+@cindex Gnus Unplugged
+
+In olden times (ca. February '88), people used to run their newsreaders
+on big machines with permanent connections to the net.  News transport
+was dealt with by news servers, and all the newsreaders had to do was to
+read news.  Believe it or not.
+
+Nowadays most people read news and mail at home, and use some sort of
+modem to connect to the net.  To avoid running up huge phone bills, it
+would be nice to have a way to slurp down all the news and mail, hang up
+the phone, read for several hours, and then upload any responses you
+have to make.  And then you repeat the procedure.
+
+Of course, you can use news servers for doing this as well.  I've used
+@code{inn} together with @code{slurp}, @code{pop} and @code{sendmail}
+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 ut 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.
+
+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.
+* 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.
+@end menu
+
+
+@node Agent Basics
+@subsection Agent Basics
+
+First, let's get some terminilogy out of the way.
+
+The Gnus Agent is said to be @dfn{unplugged} when you have severed the
+connection to the net (and notified the Agent that this is the case).
+When the connection to the net is up again (and Gnus knows this), the
+Agent is @dfn{plugged}.
+
+The @dfn{local} machine is the one you're running on, and which isn't
+connected to the net continously.
+
+@dfn{Downloading} means fetching things from the net to your local
+machine.  @dfn{Uploading} is doing the opposite.
+
+Let's take a typical Gnus session using the Agent.
+
+@itemize @bullet
+
+@item
+You start Gnus with @code{gnus-unplugged}.  This brings up the Gnus
+Agent in a disconnected state.  You can read all the news that you have
+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}.
+
+@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
+s} to fetch all the eligible articles in all the groups.  (To let Gnus
+know which articles you want to download, @pxref{Agent Categories}.)
+
+@item
+After fetching the articles, you press @kbd{J j} to make Gnus become
+unplugged again, and you shut down the PPP thing (or whatever).  And
+then you read the news offline.
+
+@item
+And then you go to step 2.
+@end itemize
+
+Here are some things you should do the first time (or so) that you use
+the Agent.
+
+@itemize @bullet
+
+@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
+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.
+
+@item
+Decide on download policy.  @xref{Agent Categories}
+
+@item
+Uhm... that's it.
+@end itemize
+
+
+@node Agent Categories
+@subsection Agent Categories
+
+On of the main reasons to integrate the news transport layer into the
+newsreader is to allow greater control over what articles to download.
+There's not much point in downloading huge amounts of articles, just to
+find out that you're not interested in reading any of them.  It's better
+to be somewhat more conservative in choosing what to download, and then
+mark the articles for downloading manually if it should turn out that
+you're interested in the articles anyway.
+
+The main way to control what is to be downloaded is to create a
+@dfn{category} and then assign some (or all) groups to this category. 
+Gnus has its own buffer for creating and managing categories.
+
+@menu
+* Category Syntax::       What a category looks like.
+* The Category Buffer::   A buffer for maintaining categories.
+* Category Variables::    Customize'r'Us.
+@end menu
+
+
+@node Category Syntax
+@subsubsection Category Syntax
+
+A category consists of two things.
+
+@enumerate
+@item
+A predicate which (generally) gives a rough outline of which articles
+are eligible for downloading; and
+
+@item
+a score rule which (generally) gives you a finer granularity when
+deciding what articles to download.  (Note that this @dfn{download
+score} is wholly unrelated to normal scores.)
+@end enumerate
+
+A predicate consists of predicates with logical operators sprinkled in
+between.
+
+Perhaps some examples are in order.
+
+Here's a simple predicate.  (It's the default predicate, in fact, used
+for all groups that don't belong to any other category.)
+
+@lisp
+short
+@end lisp
+
+Quite simple, eh?  This predicate is true if and only if the article is
+short (for some value of ``short'').
+
+Here's a more complex predicate:
+
+@lisp
+(or high
+    (and
+     (not low)
+     (not long)))
+@end lisp
+
+This means that an article should be downloaded if it has a high score,
+or if the score is not low and the article is not long.  You get the
+drift.
+
+The available logical operators are @code{or}, @code{and} and
+@code{not}.  (If you prefer, you can use the more ``C''-ish operators
+@samp{|}, @code{&} and @code{!} instead.)
+
+The following predicates are pre-defined, but if none of these fit what
+you want to do, you can write your own.
+
+@table @code
+@item short
+True iff the article is shorter than @code{gnus-agent-short-article}
+lines; default 100.
+
+@item long
+True iff the article is longer than @code{gnus-agent-long-article}
+lines; default 200.
+
+@item low
+True iff the article has a download score less than
+@code{gnus-agent-low-score}; default 0.
+
+@item high
+True iff the article has a download score greater than
+@code{gnus-agent-high-score}; default 0.
+
+@item spam
+True iff the Gnus Agent guesses that the article is spam.  The
+heuristics may change over time, but at present it just computes a
+checksum and see whether articles match.
+
+@item true
+Always true.
+
+@item false
+Always false.
+@end table
+
+If you want to create your own predicate function, here's what you have
+to know:  The functions are called with no parameters, but the
+@code{gnus-headers} and @code{gnus-score} dynamic variables are bound to
+useful values.
+
+Now, the syntax of the download score is the same as the syntax of
+normal score files, except that all elements that require actually
+seeing the article itself is verboten.  This means that only the
+following headers can be scored on: @code{From}, @code{Subject},
+@code{Date}, @code{Xref}, @code{Lines}, @code{Chars}, @code{Message-ID},
+and @code{References}.
+
+
+@node The Category Buffer
+@subsubsection The 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
+the group buffer), you'll only see the @code{default} category.
+
+The following commands are available in this buffer:
+
+@table @kbd
+@item q
+@kindex q (Category)
+@findex gnus-category-exit
+Return to the group buffer (@code{gnus-category-exit}).
+
+@item k
+@kindex k (Category)
+@findex gnus-category-kill
+Kill the current category (@code{gnus-category-kill}).
+
+@item c
+@kindex c (Category)
+@findex gnus-category-copy
+Copy the current category (@code{gnus-category-copy}).
+
+@item a
+@kindex a (Category)
+@findex gnus-category-add
+Add a new category (@code{gnus-category-add}).
+
+@item p
+@kindex p (Category)
+@findex gnus-category-edit-predicate
+Edit the predicate of the current category
+(@code{gnus-category-edit-predicate}).
+
+@item g
+@kindex g (Category)
+@findex gnus-category-edit-groups
+Edit the list of groups belonging to the current category
+(@code{gnus-category-edit-groups}).
+
+@item s
+@kindex s (Category)
+@findex gnus-category-edit-score
+Edit the download score rule of the current category
+(@code{gnus-category-edit-score}).
+
+@item l
+@kindex l (Category)
+@findex gnus-category-list
+List all the categories (@code{gnus-category-list}).
+@end table
+
+
+@node Category Variables
+@subsubsection Category Variables
+
+@table @code
+@item gnus-category-mode-hook
+@vindex gnus-category-mode-hook
+Hook run in category buffers.
+
+@item gnus-category-line-format
+@vindex gnus-category-line-format
+Format of the lines in the category buffer (@pxref{Formatting
+Variables}).  Legal elements are:
+
+@table @samp
+@item c
+The name of the category.
+
+@item g
+The number of groups in the category.
+@end table
+
+@item gnus-category-mode-line-format
+@vindex gnus-category-mode-line-format
+Format of the category mode line.
+
+@item gnus-agent-short-article 
+@vindex gnus-agent-short-article 
+Articles that have fewer lines than this are short.  Default 100.
+
+@item gnus-agent-long-article 
+@vindex gnus-agent-long-article 
+Articles that have more lines than this are long.  Default 200.
+
+@item gnus-agent-low-score 
+@vindex gnus-agent-low-score 
+Articles that have a score lower than this have a low score.  Default
+0. 
+
+@item gnus-agent-high-score 
+@vindex gnus-agent-high-score 
+Articles that have a score higher than this have a high score.  Default
+0. 
+
+@end table
+
+
+@node Agent Commands
+@subsection Agent Commands
+
+All the Gnus Agent commands is on the @kbd{J} submap.  The @kbd{J j}
+(@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::
+@end menu
+
+
+@node Group Agent Commands
+@subsubsection Group Agent Commands
+
+@table @kbd
+@item J u 
+@kindex J u (Agent Group)
+@findex gnus-agent-fetch-group
+Fetch all eligible articles in the current group
+(@code{gnus-agent-fetch-group}).
+
+@item J c
+@kindex J c (Agent Group)
+@findex gnus-enter-category-buffer
+Enter the Agent category buffer (@code{gnus-enter-category-buffer}).
+
+@item J s
+@kindex J s (Agent Group)
+@findex gnus-agent-fetch-session
+Fetch all eligible articles in all groups
+(@code{gnus-agent-fetch-session}).
+
+@item J S
+@kindex J S (Agent Group)
+@findex gnus-group-send-drafts
+Send all sendable messages in the draft group
+(@code{gnus-agent-fetch-session}).  @xref{Drafts}
+
+@item J a
+@kindex J a (Agent Group)
+@findex gnus-agent-add-group
+Add the current group to an Agent category
+(@code{gnus-agent-add-group}).
+
+@end table
+
+
+@node Summary Agent Commands
+@subsubsection Summary Agent Commands
+
+@table @kbd
+@item J #
+@kindex J # (Agent Summary)
+@findex gnus-agent-mark-article
+Mark the article for downloading (@code{gnus-agent-mark-article}).
+
+@item J M-#
+@kindex J M-# (Agent Summary)
+@findex gnus-agent-unmark-article
+Remove the downloading mark from the article
+(@code{gnus-agent-unmark-article}).
+
+@item @@
+@kindex @@ (Agent Summary)
+@findex gnus-agent-toggle-mark
+Toggle whether to download the article (@code{gnus-agent-toggle-mark}).
+
+@item J c
+@kindex J c (Agent Summary)
+@findex gnus-agent-catchup
+Mark all undownloaded articles as read (@code{gnus-agent-catchup}).
+
+@end table
+
+
+@node Server Agent Commands
+@subsubsection Server Agent Commands
+
+@table @kbd
+@item J a
+@kindex J a (Agent Server)
+@findex gnus-agent-add-server
+Add the current server to the list of servers covered by the Gnus Agent
+(@code{gnus-agent-add-server}).
+
+@item J r
+@kindex J r (Agent Server)
+@findex gnus-agent-remove-server
+Remove the current server from the list of servers covered by the Gnus
+Agent (@code{gnus-agent-remove-server}).
+
+@end table
+
+
+@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.
+
+When Gnus is plugged again, you can send the messages either from the
+draft group with the special commands available there, or you can use
+the @kbd{J S} command in the group buffer to send all the sendable
+messages in the draft group.
+
+
+
+@node Agent Variables
+@subsection Agent Variables
+
+@table @code
+@item gnus-agent-directory
+@vindex gnus-agent-directory
+Where the Gnus Agent will store its files.  The default is
+@file{~/News/agent/}.
+
+@item gnus-agent-plugged-hook
+@vindex gnus-agent-plugged-hook
+Hook run when connecting to the network.
+
+@item gnus-agent-unplugged-hook
+@vindex gnus-agent-unplugged-hook
+Hook run when disconnecting from the network.
+
+@end table
+
+
+@node Example Setup
+@subsection Example Setup
+
+If you don't want to read this manual, and you have a fairly standard
+setup, you may be able to use something like the following as your
+@file{.gnus.el} file to get started.
+
+@lisp
+;;; Define how Gnus is to fetch news.  We do this over NNTP
+;;; from your ISP's server.
+(setq gnus-select-method '(nntp "nntp.your-isp.com"))
+
+;;; Define how Gnus is to read your mail.  We read mail from
+;;; your ISP's POP server.
+(setenv "MAILSERVER" "pop.your-isp.com")
+(setq nnmail-spool-file "po:username")
+
+;;; Say how Gnus is to store the mail.  We use nnml groups.
+(setq gnus-secondary-select-methods '((nnml "")))
+
+;;; Make Gnus into an offline newsreader.
+(gnus-agentize)
+@end lisp
+
+That should be it, basically.  Put that in your @file{~/.gnus.el} file,
+edit to suit your needs, start up PPP (or whatever), and type @kbd{M-x
+gnus}.
+
+If this is the first time you've run Gnus, you will be subscribed
+automatically to a few default newsgroups.  You'll probably want to
+subscribe to more groups, and to do that, you have to query the
+@sc{nntp} server for a complete list of groups with the @kbd{A A}
+command.  This usually takes quite a while, but you only have to do it
+once.
 
-Articles that are marked as read in the @code{nnkiboze} group will have their
-@sc{nov} lines removed from the @sc{nov} file.
+After reading and parsing a while, you'll be presented with a list of
+groups.  Subscribe to the ones you want to read with the @kbd{u}
+command.  @kbd{l} to make all the killed groups disappear after you've
+subscribe to all the groups you want to read.  (@kbd{A k} will bring
+back all the killed groups.)
+
+You can now read the groups at once, or you can download the articles
+with the @kbd{J s} command.  And then read the rest of this manual to
+find out which of the other gazillion things you want to customize.
 
 
 @node Scoring
@@ -10617,17 +11505,6 @@ after editing score files.
 Customize a score file in a visually pleasing manner
 (@code{gnus-score-customize}). 
 
-@item I C-i
-@kindex I C-i (Summary)
-@findex gnus-summary-raise-score
-Increase the score of the current article
-(@code{gnus-summary-raise-score}).
-
-@item L C-l
-@kindex L C-l (Summary)
-@findex gnus-summary-lower-score
-Lower the score of the current article
-(@code{gnus-summary-lower-score}). 
 @end table
 
 The rest of these commands modify the local score file.
@@ -10693,7 +11570,7 @@ Score on the head.
 @end table
 
 @item
-The third key is the match type.  Which match types are legal depends on
+The third key is the match type.  Which match types are valid depends on
 what headers you are scoring on.
 
 @table @code
@@ -10830,8 +11707,7 @@ Suffix to add to the group name to arrive at the score file name
 @cindex score cache
 All score files are normally cached to avoid excessive re-loading of
 score files.  However, if this might make you Emacs grow big and
-bloated, so this regexp can be used to weed out score files that are
-unlikely to be needed again.  It would be a bad idea to deny caching of
+bloated, so this regexp can be used to weed out score files unlikely to be needed again.  It would be a bad idea to deny caching of
 @file{all.SCORE}, while it might be a good idea to not cache
 @file{comp.infosystems.www.authoring.misc.ADAPT}.  In fact, this
 variable is @samp{ADAPT$} by default, so no adaptive score files will
@@ -10967,15 +11843,16 @@ Anyway, if you'd like to dig into it yourself, here's an example:
  (files "/hom/larsi/News/gnu.SCORE")
  (exclude-files "all.SCORE")
  (local (gnus-newsgroup-auto-expire t)
-        (gnus-summary-make-false-root 'empty))
+        (gnus-summary-make-false-root empty))
  (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
-has to be legal syntactically, if not semantically.
+has to be valid syntactically, if not semantically.
 
 Six keys are supported by this alist:
 
@@ -11059,13 +11936,13 @@ quote, ``found this function indispensable'', however.)
 @cindex date
 A more useful match type is @code{regexp}.  With it, you can match the
 date string using a regular expression.  The date is normalized to
-ISO8601 compact format first---@samp{YYYYMMDDTHHMMSS}.  If you want to
-match all articles that have been posted on April 1st in every year, you
-could use @samp{....0401.........} as a match string, for instance.
-(Note that the date is kept in its original time zone, so this will
-match articles that were posted when it was April 1st where the article
-was posted from.  Time zones are such wholesome fun for the whole
-family, eh?)
+ISO8601 compact format first---@var{YYYYMMDD}@code{T}@var{HHMMSS}.  If
+you want to match all articles that have been posted on April 1st in
+every year, you could use @samp{....0401.........} as a match string,
+for instance.  (Note that the date is kept in its original time zone, so
+this will match articles that were posted when it was April 1st where
+the article was posted from.  Time zones are such wholesome fun for the
+whole family, eh?)
 
 @item Head, Body, All
 These three match keys use the same match types as the @code{From} (etc)
@@ -11078,22 +11955,24 @@ 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
-key.  If you say that you want to score on a (sub-)thread that is
-started by an article with a @code{Message-ID} @var{X}, then you add a
+key.  If you say that you want to score on a (sub-)thread started by an article with a @code{Message-ID} @var{X}, then you add a
 @samp{thread} match.  This will add a new @samp{thread} match for each
 article that has @var{X} in its @code{References} header.  (These new
 @samp{thread} matches will use the @code{Message-ID}s of these matching
 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
 
+@cindex Score File Atoms
 @item mark
 The value of this entry should be a number.  Any articles with a score
 lower than this number will be marked as read.
@@ -11180,7 +12059,7 @@ The value of this entry should be a list of @code{(VAR VALUE)} pairs.
 Each @var{var} will be made buffer-local to the current summary buffer,
 and set to the value specified.  This is a convenient, if somewhat
 strange, way of setting variables in some groups if you don't like hooks
-much.
+much.  Note that the @var{value} won't be evaluated.
 @end table
 
 
@@ -11347,7 +12226,7 @@ each instance of a word should add given a mark.
 @end lisp
 
 This is the default value.  If you have adaption on words enabled, every
-word that appears in subjects of articles that are marked with
+word that appears in subjects of articles marked with
 @code{gnus-read-mark} will result in a score rule that increase the
 score with 30 points.
 
@@ -11503,7 +12382,8 @@ myself:
 
 @lisp
 ("references"
- ("<x6[0-9a-z]+\\.fsf@@.*eyesore.no>" 1000 nil r))
+ ("<x6[0-9a-z]+\\.fsf\\(_-_\\)?@@.*eyesore.no>"
+  1000 nil r))
 @end lisp
 
 Whether it's the first two or first three characters that are ``yours''
@@ -11627,7 +12507,7 @@ head:
 @itemize @bullet
 
 @item 
-Articles that are heavily crossposted are probably junk. 
+Articles heavily crossposted are probably junk. 
 @item
 To lower a single inappropriate article, lower by @code{Message-ID}.
 @item
@@ -11676,8 +12556,8 @@ Normal kill files look like this:
 (gnus-expunge "X")
 @end lisp
 
-This will mark every article written by me as read, and remove them from
-the summary buffer.  Very useful, you'll agree.
+This will mark every article written by me as read, and remove the
+marked articles from the summary buffer.  Very useful, you'll agree.
 
 Other programs use a totally different kill file syntax.  If Gnus
 encounters what looks like a @code{rn} kill file, it will take a stab at
@@ -11722,7 +12602,7 @@ A kill file for the group @samp{soc.motss} is normally called
 @file{soc.motss.KILL}.  The suffix appended to the group name to get
 this file name is detailed by the @code{gnus-kill-file-name} variable.
 The ``global'' kill file (not in the score file sense of ``global'', of
-course) is called just @file{KILL}.
+course) is just called @file{KILL}.
 
 @vindex gnus-kill-save-kill-file
 @item gnus-kill-save-kill-file
@@ -11780,9 +12660,9 @@ articles you have already read with the opinions of others who have done
 likewise and gives you a personalized prediction for each unread news
 article.  Think of GroupLens as a matchmaker.  GroupLens watches how you
 rate articles, and finds other people that rate articles the same way.
-Once it has found for you some people you agree with it tells you, in
-the form of a prediction, what they thought of the article.  You can use
-this prediction to help you decide whether or not you want to read the
+Once it has found some people you agree with it tells you, in the form
+of a prediction, what they thought of the article.  You can use this
+prediction to help you decide whether or not you want to read the
 article.
 
 @menu
@@ -11799,7 +12679,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
-better bit in town is at the moment.
+better bit in town at the moment.
 
 Once you have registered you'll need to set a couple of variables.
 
@@ -11821,7 +12701,7 @@ A list of groups that you want to get GroupLens predictions for.
 
 @end table
 
-Thats the minimum of what you need to get up and running with GroupLens.
+That's the minimum of what you need to get up and running with GroupLens.
 Once you've registered, GroupLens will start giving you scores for
 articles based on the average of what other people think.  But, to get
 the real benefit of GroupLens you need to start rating articles
@@ -11905,7 +12785,7 @@ In either case, GroupLens gives you a few choices for how you would like
 to see your predictions displayed.  The display of predictions is
 controlled by the @code{grouplens-prediction-display} variable.
 
-The following are legal values for that variable.
+The following are valid values for that variable.
 
 @table @code
 @item prediction-spot
@@ -11928,7 +12808,7 @@ The spot gets bigger with more confidence.
 Plain-old numeric value.
 
 @item confidence-plus-minus
-Prediction +/i confidence.
+Prediction +/- confidence.
 
 @end table
 
@@ -11939,10 +12819,10 @@ Prediction +/i confidence.
 @table @code
 
 @item gnus-summary-grouplens-line-format
-The summary line format used in summary buffers that are GroupLens
-enhanced.  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%]%) %s\n}.
+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%]%)
+%s\n}.
 
 @item grouplens-bbb-host
 Host running the bbbd server.  @samp{grouplens.cs.umn.edu} is the
@@ -11968,7 +12848,7 @@ The scale factor is applied after the offset.  The default is 1.
 
 Scoring on Subjects and From headers is nice enough, but what if you're
 really interested in what a person has to say only when she's talking
-about a particular subject?  Or what about if you really don't want to
+about a particular subject?  Or what if you really don't want to
 read what person A has to say when she's following up to person B, but
 want to read what she says when she's following up to person C?
 
@@ -12013,16 +12893,16 @@ then this operator will return @code{false}.
 @itemx not
 @itemx Â¬
 This logical operator only takes a single argument.  It returns the
-inverse of the value of its argument.
+logical negation of the value of its argument.
 
 @end table
 
 There is an @dfn{indirection operator} that will make its arguments
 apply to the ancestors of the current article being scored.  For
 instance, @code{1-} will make score rules apply to the parent of the
-current article.  @code{2-} will make score fules apply to the
+current article.  @code{2-} will make score rules apply to the
 grandparent of the current article.  Alternatively, you can write
-@code{^^}, where the number of @code{^}s (carets) say how far back into
+@code{^^}, where the number of @code{^}s (carets) says how far back into
 the ancestry you want to go.
 
 Finally, we have the match operators.  These are the ones that do the
@@ -12095,7 +12975,7 @@ That is, they stop processing their arguments when it's clear what the
 result of the operation will be.  For instance, if one of the arguments
 of an @code{&} evaluates to @code{false}, there's no point in evaluating
 the rest of the arguments.  This means that you should put slow matches
-(@samp{body}, @code{header}) last and quick matches (@samp{from},
+(@samp{body}, @samp{header}) last and quick matches (@samp{from},
 @samp{subject}) first.
 
 The indirection arguments (@code{1-} and so on) will make their
@@ -12152,10 +13032,11 @@ definition of that function:
 
 @lisp
 (defun gnus-decay-score (score)
+  "Decay SCORE according to `gnus-score-decay-constant' and `gnus-score-decay-scale'."
   (floor
    (- score
       (* (if (< score 0) 1 -1)
-         (min score
+         (min (abs score)
               (max gnus-score-decay-constant
                    (* (abs score)
                       gnus-score-decay-scale)))))))
@@ -12200,7 +13081,6 @@ four days, Gnus will decay the scores four times, for instance.
 * Buttons::                    Get tendonitis in ten easy steps!
 * Daemons::                    Gnus can do things behind your back.
 * NoCeM::                      How to avoid spam and other fatty foods.
-* Picons::                     How to display pictures of what your reading.
 * 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.
@@ -12217,7 +13097,7 @@ four days, Gnus will decay the scores four times, for instance.
 Many functions, among them functions for moving, decoding and saving
 articles, use what is known as the @dfn{Process/Prefix convention}.
 
-This is a method for figuring out what articles that the user wants the
+This is a method for figuring out what articles the user wants the
 command to be performed on.
 
 It goes like this:
@@ -12232,7 +13112,7 @@ If @code{transient-mark-mode} in non-@code{nil} and the region is
 active, all articles in the region will be worked upon.
 
 If there is no numeric prefix, but some articles are marked with the
-process mark, perform the operation on the articles that are marked with
+process mark, perform the operation on the articles marked with
 the process mark.
 
 If there is neither a numeric prefix nor any articles marked with the
@@ -12292,8 +13172,7 @@ default.
 @section Formatting Variables
 @cindex formatting variables
 
-Throughout this manual you've probably noticed lots of variables that
-are called things like @code{gnus-group-line-format} and
+Throughout this manual you've probably noticed lots of variables called things like @code{gnus-group-line-format} and
 @code{gnus-summary-mode-line-format}.  These control how Gnus is to
 output lines in the various buffers.  There's quite a lot of them.
 Fortunately, they all use the same syntax, so there's not that much to
@@ -12359,7 +13238,7 @@ Padding, limiting, cutting off parts and suppressing certain values can
 be achieved by using @dfn{tilde modifiers}.  A typical tilde spec might
 look like @samp{%~(cut 3)~(ignore "0")y}.
 
-These are the legal modifiers:
+These are the valid modifiers:
 
 @table @code
 @item pad
@@ -12442,9 +13321,9 @@ over it.
 
 Text inside the @samp{%[} and @samp{%]} specifiers will have their
 normal faces set using @code{gnus-face-0}, which is @code{bold} by
-default.  If you say @samp{%1[} instead, you'll get @code{gnus-face-1}
-instead, 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
+default.  If you say @samp{%1[}, you'll get @code{gnus-face-1} instead,
+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}.
 
 Here's an alternative recipe for the group buffer:
@@ -12567,7 +13446,7 @@ For each split, there @emph{must} be one element that has the 100% tag.
 The splitting is never accurate, and this buffer will eat any leftover
 lines from the splits.
 
-To be slightly more formal, here's a definition of what a legal split
+To be slightly more formal, here's a definition of what a valid split
 may look like:
 
 @example
@@ -12648,7 +13527,9 @@ frame will be created where picons will be shown.  As you can see,
 instead of the normal @code{1.0} top-level spec, each additional split
 should have a frame parameter alist as the size spec.
 @xref{Frame Parameters, , Frame Parameters, elisp, The GNU Emacs Lisp
-Reference Manual}.
+Reference Manual}.  Under XEmacs, a frame property list will be
+accepted, too---for instance, @code{(height 5 width 15 left -1 top 1)}
+is such a plist.
 
 Here's a list of all possible keys for
 @code{gnus-buffer-configuration}:
@@ -12658,7 +13539,7 @@ Here's a list of all possible keys for
 @code{summary-faq}, @code{edit-group}, @code{edit-server},
 @code{edit-score}, @code{post}, @code{reply}, @code{forward},
 @code{reply-yank}, @code{mail-bounce}, @code{draft}, @code{pipe},
-@code{bug}, @code{compose-bounce}.
+@code{bug}, @code{compose-bounce}, and @code{score-trace}.
 
 Note that the @code{message} key is used for both
 @code{gnus-group-mail} and @code{gnus-summary-mail-other-window}.  If
@@ -12759,11 +13640,10 @@ this variable:
 @end lisp
 
 If this variable is @code{nil} (which is the default), the mode line
-strings won't be chopped off, and they won't be padded either.
-Note that the default is unlikely to be desirable, as even the
-percentage complete in the buffer may be crowded off the mode line;
-the user should configure this variable appropriately for their
-configuration.
+strings won't be chopped off, and they won't be padded either.  Note
+that the default is unlikely to be desirable, as even the percentage
+complete in the buffer may be crowded off the mode line; the user should
+configure this variable appropriately for her configuration.
 
 
 @node Highlighting and Menus
@@ -12773,13 +13653,13 @@ configuration.
 @cindex menus
 
 @vindex gnus-visual
-The @code{gnus-visual} variable controls most of the prettifying Gnus
+The @code{gnus-visual} variable controls most of the Gnus-prettifying
 aspects.  If @code{nil}, Gnus won't attempt to create menus or use fancy
 colors or fonts.  This will also inhibit loading the @file{gnus-vis.el}
 file.
 
 This variable can be a list of visual properties that are enabled.  The
-following elements are legal, and are all included by default:
+following elements are valid, and are all included by default:
 
 @table @code
 @item group-highlight
@@ -12813,7 +13693,7 @@ buffers, you could say something like:
 (setq gnus-visual '(article-highlight menu))
 @end lisp
 
-If you want only highlighting and no menus whatsoever, you'd say:
+If you want highlighting only and no menus whatsoever, you'd say:
 
 @lisp
 (setq gnus-visual '(highlight))
@@ -12915,8 +13795,8 @@ Buttons in the browse buffer.
 @end table
 
 All the @code{buttons} variables are lists.  The elements in these list
-is either a cons cell where the car contains a text to be displayed and
-the cdr contains a function symbol, or a simple string.
+are either cons cells where the @code{car} contains a text to be displayed and
+the @code{cdr} contains a function symbol, or a simple string.
 
 
 @node Daemons
@@ -12948,7 +13828,7 @@ idle:
 (gnus-demon-scan-pgp 60 t)
 @end lisp
 
-This @var{time} parameter and than @var{idle} parameter works together
+This @var{time} parameter and than @var{idle} parameter work together
 in a strange, but wonderful fashion.  Basically, if @var{idle} is
 @code{nil}, then the function will be called every @var{time} minutes.
 
@@ -12983,17 +13863,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:
+Some ready-made functions to do this have 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
@@ -13114,9 +13996,128 @@ 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 Undo
+@section Undo
+@cindex undo
+
+It is very useful to be able to undo actions one has done.  In normal
+Emacs buffers, it's easy enough---you just push the @code{undo} button.
+In Gnus buffers, however, it isn't that simple.
+
+The things Gnus displays in its buffer is of no value whatsoever to
+Gnus---it's all just data designed to look nice to the user.
+Killing a group in the group buffer with @kbd{C-k} makes the line
+disappear, but that's just a side-effect of the real action---the
+removal of the group in question from the internal Gnus structures.
+Undoing something like that can't be done by the normal Emacs
+@code{undo} function.
+
+Gnus tries to remedy this somewhat by keeping track of what the user
+does and coming up with actions that would reverse the actions the user
+takes.  When the user then presses the @code{undo} key, Gnus will run
+the code to reverse the previous action, or the previous actions.
+However, not all actions are easily reversible, so Gnus currently offers
+a few key functions to be undoable.  These include killing groups,
+yanking groups, and changing the list of read articles of groups.
+That's it, really.  More functions may be added in the future, but each
+added function means an increase in data to be stored, so Gnus will
+never be totally undoable.
+
+@findex gnus-undo-mode
+@vindex gnus-use-undo
+@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
+command, which should feel kinda like the normal Emacs @code{undo}
+command. 
+
+
+@node Moderation
+@section Moderation
+@cindex moderation
+
+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@@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
+buffers.  Put
+
+@lisp
+(add-hook 'gnus-summary-mode-hook 'gnus-moderate)
+@end lisp
+
+in your @file{.gnus.el} file.
+
+If you are the moderator of @samp{rec.zoofle}, this is how it's
+supposed to work:
+
+@enumerate
+@item 
+You split your incoming mail by matching on
+@samp{Newsgroups:.*rec.zoofle}, which will put all the to-be-posted
+articles in some mail group---for instance, @samp{nnml:rec.zoofle}.
+
+@item
+You enter that group once in a while and post articles using the @kbd{e}
+(edit-and-post) or @kbd{s} (just send unedited) commands.
+
+@item
+If, while reading the @samp{rec.zoofle} newsgroup, you happen upon some
+articles that weren't approved by you, you can cancel them with the
+@kbd{c} command.
+@end enumerate
+
+To use moderation mode in these two groups, say:
+
+@lisp
+(setq gnus-moderated-list
+      "^nnml:rec.zoofle$\\|^rec.zoofle$")
+@end lisp
+
+
+@node XEmacs Enhancements
+@section XEmacs Enhancements
+@cindex XEmacs
+
+XEmacs 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.
+@end menu
+
 
 @node Picons
-@section Picons
+@subsection Picons
+
+@iftex
+@iflatex
+\gnuspicon{tmp/picons-att.ps}
+\gnuspicon{tmp/picons-berkeley.ps}
+\gnuspicon{tmp/picons-caltech.ps}
+\gnuspicon{tmp/picons-canada.ps}
+\gnuspicon{tmp/picons-cr.ps}
+\gnuspicon{tmp/picons-cygnus.ps}
+\gnuspicon{tmp/picons-gov.ps}
+\gnuspicon{tmp/picons-mit.ps}
+\gnuspicon{tmp/picons-nasa.ps}
+\gnuspicon{tmp/picons-qmw.ps}
+\gnuspicon{tmp/picons-rms.ps}
+\gnuspicon{tmp/picons-ruu.ps}
+@end iflatex
+@end iftex
 
 So...  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
@@ -13132,7 +14133,7 @@ over your shoulder as you read news.
 
 
 @node Picon Basics
-@subsection Picon Basics
+@subsubsection Picon Basics
 
 What are Picons?  To quote directly from the Picons Web site:
 
@@ -13156,9 +14157,9 @@ Gnus expects picons to be installed into a location pointed to by
 
 
 @node Picon Requirements
-@subsection Picon Requirements
+@subsubsection Picon Requirements
 
-To use have Gnus display Picons for you, you must be running XEmacs
+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.
 
@@ -13171,7 +14172,7 @@ the @code{netpbm} utilities installed, or munge the
 
 
 @node Easy Picons
-@subsection Easy Picons
+@subsubsection Easy Picons
 
 To enable displaying picons, simply put the following line in your
 @file{~/.gnus} file and start Gnus.
@@ -13185,7 +14186,7 @@ To enable displaying picons, simply put the following line in your
 
 
 @node Hard Picons
-@subsection Hard Picons 
+@subsubsection Hard Picons 
 
 Gnus can display picons for you as you enter and leave groups and
 articles.  It knows how to interact with three sections of the picons
@@ -13206,6 +14207,20 @@ routines---@pxref{Windows Configuration}.
 
 @end table
 
+@iftex
+@iflatex
+\gnuspicon{tmp/picons-seuu.ps}
+\gnuspicon{tmp/picons-stanford.ps}
+\gnuspicon{tmp/picons-sun.ps}
+\gnuspicon{tmp/picons-ubc.ps}
+\gnuspicon{tmp/picons-ufl.ps}
+\gnuspicon{tmp/picons-uio.ps}
+\gnuspicon{tmp/picons-unit.ps}
+\gnuspicon{tmp/picons-upenn.ps}
+\gnuspicon{tmp/picons-wesleyan.ps}
+@end iflatex
+@end iftex
+
 Note: If you set @code{gnus-use-picons} to @code{t}, it will set up your
 window configuration for you to include the @code{picons} buffer.
 
@@ -13218,9 +14233,9 @@ displayed at the right time.
 @table @code
 @item gnus-article-display-picons
 @findex gnus-article-display-picons
-Looks up and display the picons for the author and the author's domain
-in the @code{gnus-picons-display-where} buffer.  Should be added to
-the @code{gnus-article-display-hook}.
+Looks up and displays the picons for the author and the author's domain
+in the @code{gnus-picons-display-where} buffer.  Should be added to the
+@code{gnus-article-display-hook}.
 
 @item gnus-group-display-picons
 @findex gnus-article-display-picons
@@ -13237,7 +14252,7 @@ should be added to @code{gnus-article-display-hook}.
 @end table
 
 Note:  You must append them to the hook, so make sure to specify 't'
-to the append flag of @code{add-hook}:
+for the append flag of @code{add-hook}:
 
 @lisp
 (add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)
@@ -13245,7 +14260,7 @@ to the append flag of @code{add-hook}:
 
 
 @node Picon Configuration
-@subsection Picon Configuration
+@subsubsection Picon Configuration
 
 The following variables offer further control over how things are
 done, where things are located, and other useless stuff you really
@@ -13266,7 +14281,7 @@ newsgroups.
 @item gnus-picons-user-directories
 @vindex gnus-picons-user-directories
 List of subdirectories to search in @code{gnus-picons-database} for user
-faces.  @code{("local" "users" "usenix" "misc/MISC")} is the default.
+faces.  @code{("local" "users" "usenix" "misc")} is the default.
 
 @item gnus-picons-domain-directories
 @vindex gnus-picons-domain-directories
@@ -13293,114 +14308,98 @@ The name of the buffer that @code{picons} points to.  Defaults to
 
 @end table
 
+@node Smileys
+@subsection Smileys
+@cindex smileys
 
-@node Undo
-@section Undo
-@cindex undo
+@dfn{Smiley} is a package separate from Gnus, but since Gnus is
+currently the only package that uses Smiley, it is documented here.
 
-It is very useful to be able to undo actions one has done.  In normal
-Emacs buffers, it's easy enough---you just push the @code{undo} button.
-In Gnus buffers, however, it isn't that simple.
+In short---to use Smiley in Gnus, put the following in your
+@file{.gnus.el} file:
 
-The things Gnus displays in its buffer is of no value whatsoever to
-Gnus---it's all just data that is designed to look nice to the user.
-Killing a group in the group buffer with @kbd{C-k} makes the line
-disappear, but that's just a side-effect of the real action---the
-removal of the group in question from the internal Gnus structures.
-Undoing something like that can't be done by the normal Emacs
-@code{undo} function.
+@lisp
+(add-hook 'gnus-article-display-hook 'gnus-smiley-display t)
+@end lisp
 
-Gnus tries to remedy this somewhat by keeping track of what the user
-does and coming up with actions that would reverse the actions the user
-takes.  When the user then presses the @code{undo} key, Gnus will run
-the code to reverse the previous action, or the previous actions.
-However, not all actions are easily reversible, so Gnus currently offers
-a few key functions to be undoable.  These include killing groups,
-yanking groups, and changing the list of read articles of groups.
-That's it, really.  More functions may be added in the future, but each
-added function means an increase in data to be stored, so Gnus will
-never be totally undoable.
-
-@findex gnus-undo-mode
-@vindex gnus-use-undo
-@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
-command, which should feel kinda like the normal Emacs @code{undo}
-command. 
+Smiley maps text smiley faces---@samp{:-)}, @samp{:-=}, @samp{:-(} and
+the like---to pictures and displays those instead of the text smiley
+faces.  The conversion is controlled by a list of regexps that matches
+text and maps that to file names.
 
+@vindex smiley-nosey-regexp-alist
+@vindex smiley-deformed-regexp-alist
+Smiley supplies two example conversion alists by default:
+@code{smiley-deformed-regexp-alist} (which matches @samp{:)}, @samp{:(}
+and so on), and @code{smiley-nosey-regexp-alist} (which matches
+@samp{:-)}, @samp{:-(} and so on).
 
-@node Moderation
-@section Moderation
-@cindex moderation
+The alist used is specified by the @code{smiley-regexp-alist} variable,
+which defaults to the value of @code{smiley-deformed-regexp-alist}.
 
-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@@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
-buffers.  Put
+Here's the default value of @code{smiley-smiley-regexp-alist}:
 
 @lisp
-(add-hook 'gnus-summary-mode-hook 'gnus-moderate)
+(setq smiley-nosey-regexp-alist
+      '(("\\(:-+[<«]+\\)\\W" 1 "FaceAngry.xpm")
+        ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
+        ("\\(:-+D\\)\\W" 1 "FaceGrinning.xpm")
+        ("\\(:-+[@}»]+\\)\\W" 1 "FaceHappy.xpm")
+        ("\\(:-*)+\\)\\W" 1 "FaceHappy.xpm")        
+        ("\\(:-+[/\\\"]+\\)\\W" 1 "FaceIronic.xpm")
+        ("\\([8|]-+[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
+        ("\\([:|]-+#+\\)\\W" 1 "FaceNyah.xpm")
+        ("\\(:-+[(@{]+\\)\\W" 1 "FaceSad.xpm")
+        ("\\(:-+[Oo\*]\\)\\W" 1 "FaceStartled.xpm")
+        ("\\(:-+|\\)\\W" 1 "FaceStraight.xpm")
+        ("\\(:-+p\\)\\W" 1 "FaceTalking.xpm")
+        ("\\(:-+d\\)\\W" 1 "FaceTasty.xpm")
+        ("\\(;-+[>)@}»]+\\)\\W" 1 "FaceWinking.xpm")
+        ("\\(:-+[Vvµ]\\)\\W" 1 "FaceWry.xpm")
+        ("\\(][:8B]-[)>]\\)\\W" 1 "FaceDevilish.xpm")
+        ("\\([:|]-+P\\)\\W" 1 "FaceYukky.xpm")))
 @end lisp
 
-in your @file{.gnus.el} file.
+The first item in each element is the regexp to be matched; the second
+element is the regexp match group that is to be replaced by the picture;
+and the third element is the name of the file to be displayed.
 
-If you are the moderation of @samp{rec.zoofle}, this is how it's
-supposed to work:
+The following variables customize where Smiley will look for these
+files, as well as the color to be used and stuff:
 
-@enumerate
-@item 
-You split your incoming mail by matching on
-@samp{Newsgroups:.*rec.zoofle}, which will put all the to-be-posted
-articles in some mail group---for instance, @samp{nnml:rec.zoofle}.
+@table @code
 
-@item
-You enter that group once in a while and post articles using the @kbd{e}
-(edit-and-post) or @kbd{s} (just send unedited) commands.
+@item smiley-data-directory
+@vindex smiley-data-directory
+Where Smiley will look for smiley faces files.
 
-@item
-If, while reading the @samp{rec.zoofle} newsgroup, you happen upon some
-articles that weren't approved by you, you can cancel them with the
-@kbd{c} command.
-@end enumerate
+@item smiley-flesh-color
+@vindex smiley-flesh-color
+Skin color.  The default is @samp{yellow}, which is really racist.
 
-To use moderation mode in these two groups, say:
+@item smiley-features-color
+@vindex smiley-features-color
+Color of the features of the face.  The default is @samp{black}.
 
-@lisp
-(setq gnus-moderated-list
-      "^nnml:rec.zoofle$\\|^rec.zoofle$")
-@end lisp
+@item smiley-tongue-color
+@vindex smiley-tongue-color
+Color of the tongue.  The default is @samp{red}.
 
+@item smiley-circle-color
+@vindex smiley-circle-color
+Color of the circle around the face.  The default is @samp{black}.
 
-@node XEmacs Enhancements
-@section XEmacs Enhancements
-@cindex XEmacs
+@item smiley-mouse-face
+@vindex smiley-mouse-face
+Face used for mouse highlighting over the smiley face.
 
-XEmacs is able to display pictures and stuff, so Gnus has taken
-advantage of that.  Relevant variables include:
+@end table
 
-@table @code
-@item gnus-xmas-glyph-directory
-@vindex gnus-xmas-glyph-directory
-This is where Gnus will look for pictures.  Gnus will normally
-auto-detect this directory, but you may set it manually if you have an
-unusual directory structure.
 
-@item gnus-xmas-logo-color-alist
-@vindex gnus-xmas-logo-color-alist
-This is an alist where the key is a type symbol and the values are the
-foreground and background color of the splash page glyph.
+@node Toolbar
+@subsection Toolbar
 
-@item gnus-xmas-logo-color-style
-@vindex gnus-xmas-logo-color-style
-This is the key used to look up the color in the alist described above.
-Legal values include @code{flame}, @code{pine}, @code{moss},
-@code{irish}, @code{sky}, @code{tin}, @code{velvet}, @code{grape},
-@code{labia}, @code{berry}, @code{neutral}, and @code{september}.
+@table @code
 
 @item gnus-use-toolbar
 @vindex gnus-use-toolbar
@@ -13420,6 +14419,31 @@ The toolbar in the summary buffer.
 @vindex gnus-summary-mail-toolbar
 The toolbar in the summary buffer of mail groups.
 
+@end table
+
+
+@node XVarious
+@subsection Various XEmacs Variables
+
+@table @code
+@item gnus-xmas-glyph-directory
+@vindex gnus-xmas-glyph-directory
+This is where Gnus will look for pictures.  Gnus will normally
+auto-detect this directory, but you may set it manually if you have an
+unusual directory structure.
+
+@item gnus-xmas-logo-color-alist
+@vindex gnus-xmas-logo-color-alist
+This is an alist where the key is a type symbol and the values are the
+foreground and background color of the splash page glyph.
+
+@item gnus-xmas-logo-color-style
+@vindex gnus-xmas-logo-color-style
+This is the key used to look up the color in the alist described above.
+Legal values include @code{flame}, @code{pine}, @code{moss},
+@code{irish}, @code{sky}, @code{tin}, @code{velvet}, @code{grape},
+@code{labia}, @code{berry}, @code{neutral}, and @code{september}.
+
 @item gnus-xmas-modeline-glyph
 @vindex gnus-xmas-modeline-glyph
 A glyph displayed in all Gnus mode lines.  It is a tiny gnu head by
@@ -13428,6 +14452,8 @@ default.
 @end table
 
 
+
+
 @node Fuzzy Matching
 @section Fuzzy Matching
 @cindex fuzzy matching
@@ -13465,7 +14491,7 @@ 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
+have 10 new emails.  I say ``Golly gee!  Happy is me!'' and select 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.
@@ -13475,7 +14501,7 @@ 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
+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
@@ -13586,20 +14612,20 @@ 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}. 
+@code{ange-ftp} or @code{efs}
 
 @item nnheader-head-chop-length
 @vindex nnheader-head-chop-length
-This variable says how big a piece of each article to read when doing
-the operation described above.
+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 illegal characters in 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 illegal as a file character 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
@@ -13624,7 +14650,7 @@ some headers.  I don't see why you'd want that, though.
 
 @item gnus-shell-command-separator
 @vindex gnus-shell-command-separator
-String used to separate to shell commands.  The default is @samp{;}. 
+String used to separate two shell commands.  The default is @samp{;}. 
 
 
 @end table
@@ -13709,7 +14735,7 @@ releases)) was released under the name ``Gnus 5.2'' (40 releases).
 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''.
 
-If you happen upon a version of Gnus that has a name that is prefixed --
+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
@@ -13748,10 +14774,11 @@ 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 useful.  By doing so, I'm inviting every one
-of you to explore and invent.
+everywhere I could imagine it being useful.  By doing so, I'm inviting
+every one of you to explore and invent.
 
-May Gnus never be complete. @kbd{C-u 100 M-x hail-emacs}. 
+May Gnus never be complete. @kbd{C-u 100 M-x all-hail-emacs} and
+@kbd{C-u 100 M-x all-hail-xemacs}.
 
 
 @node Compatibility
@@ -13772,11 +14799,11 @@ Our motto is:
 All commands have kept their names.  Some internal functions have changed
 their names.
 
-The @code{gnus-uu} package has changed drastically. @pxref{Decoding
+The @code{gnus-uu} package has changed drastically. @xref{Decoding
 Articles}. 
 
 One major compatibility question is the presence of several summary
-buffers.  All variables that are relevant while reading a group are
+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
@@ -13862,7 +14889,7 @@ for the @code{X-Newsreader} header.
 
 @end table
 
-If you ever notice Gnus acting non-compliantly with regards to the texts
+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.
 
@@ -13935,6 +14962,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}).
@@ -13974,9 +15004,6 @@ Brian Edmonds---@file{gnus-bbdb.el}.
 @item
 David Moore---rewrite of @file{nnvirtual.el} and many other things. 
 
-@item 
-Ricardo Nassif, Mark Borges, and Jost Krieger---proof-reading.
-
 @item 
 Kevin Davidson---came up with the name @dfn{ding}, so blame him.
 
@@ -13985,6 +15012,9 @@ Fran
 
 @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,
@@ -14014,6 +15044,7 @@ Alastair Burt,
 Joao Cachopo,
 Zlatko Calusic,
 Massimo Campostrini,
+Dan Christensen,
 Michael R. Cook,
 Glenn Coombs, 
 Frank D. Cringle, 
@@ -14028,6 +15059,8 @@ Michael Ernst,
 Luc Van Eycken,
 Sam Falkner,
 Paul Franklin, 
+Guy Geens,
+Arne Georg Gleditsch,
 David S. Goldberg,
 D. Hall, 
 Magnus Hammerin,
@@ -14035,13 +15068,13 @@ Raja R. Harinath,
 Hisashige Kenji, @c Hisashige
 Marc Horowitz,
 Gunnar Horrigmo,
+Brad Howes,
 François Felix Ingrand,
 Ishikawa Ichiro, @c Ishikawa
 Lee Iverson, 
 Rajappa Iyer,
 Randell Jesup,
 Fred Johansen, 
-Kim-Minh Kaplan,
 Greg Klanderman,
 Karl Kleinpaste,
 Peter Skov Knudsen,
@@ -14088,6 +15121,7 @@ Paul D. Smith,
 Jeff Sparkes,
 Toby Speight,
 Michael Sperber,
+Darren Stalder,
 Richard Stallman,
 Greg Stark, 
 Paul Stodghill,
@@ -14096,6 +15130,7 @@ Samuel Tardieu,
 Teddy,
 Chuck Thompson,
 Philippe Troin,
+Aaron M. Ucko,
 Jan Vroonhof,
 Barry A. Warsaw,
 Christoph Wedler,
@@ -14202,7 +15237,7 @@ 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
+Gnus can fetch articles, asynchronously, on a second connection to the
 server (@pxref{Asynchronous Fetching}).
 
 @item 
@@ -14282,7 +15317,7 @@ Gnus can make use of GroupLens predictions (@pxref{GroupLens}).
 Picons (personal icons) can be displayed under XEmacs (@pxref{Picons}). 
 
 @item
-A @code{trn}-line tree buffer can be displayed (@pxref{Tree Display}).
+A @code{trn}-like tree buffer can be displayed (@pxref{Tree Display}).
 
 @lisp
 (setq gnus-use-trees t)
@@ -14343,7 +15378,7 @@ Groups can be sorted according to many criteria (@pxref{Sorting
 Groups}).
 
 @item
-New group parameters have been introduced to set list-address and
+New group parameters have been introduced to set list-addresses and
 expiry times (@pxref{Group Parameters}).
 
 @item
@@ -14516,7 +15551,8 @@ Suppression of duplicate articles based on Message-ID can be done
 
 @item
 New variables for specifying what score and adapt files are to be
-considered home score and adapt files (@pxref{Home Score File}).
+considered home score and adapt files (@pxref{Home Score File}) have
+been added.
 
 @item
 @code{nndoc} was rewritten to be easily extendable (@pxref{Document
@@ -14543,8 +15579,8 @@ Commands for moving the @file{.newsrc.eld} from one server to
 another have been added (@pxref{Changing Servers}).
 
 @item
-A way to specify that ``uninteresting'' fields be suppressed when
-generating lines in buffers (@pxref{Advanced Formatting}).
+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-_}
@@ -14760,7 +15796,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
@@ -14786,7 +15823,7 @@ put.
 
 @item body
 @cindex body
-The rest of an article.  Everything that is not in the head is in the
+The rest of an article.  Everything not in the head is in the
 body. 
 
 @item header
@@ -14837,17 +15874,17 @@ This means that the group probably doesn't exist (any more).
 
 @item server 
 @cindex server
-A machine than one can connect to and get news (or mail) from.
+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
-server parameters.
+server settings.
 
 @item virtual server
 @cindex virtual server
-A named select method.  Since a select methods defines all there is to
-know about connecting to a (physical) server, taking the things as a
+A named select method.  Since a select method defines all there is to
+know about connecting to a (physical) server, taking the thing as a
 whole is a virtual server.
 
 @item washing
@@ -14872,6 +15909,30 @@ group buffer are solid groups.
 These are article placeholders shown in the summary buffer when
 @code{gnus-build-sparse-threads} has been switched on.
 
+@item threading
+@cindex threading
+To put responses to articles directly after the articles they respond
+to---in a hierarchical fashion.
+
+@item root
+@cindex root
+@cindex thread root
+The first article in a thread is the root.  It is the ancestor of all
+articles in the thread.
+
+@item parent
+@cindex parent
+An article that has responses.
+
+@item child
+@cindex child
+An article that responds to a different article---its parent.
+
+@item digest
+@cindex digest
+A collection of messages in one file.  The most common digest format is
+specified by RFC1153.
+
 @end table
 
 
@@ -14917,9 +15978,9 @@ support @sc{xover}; Gnus will detect this by itself.
 @node Slow Terminal Connection
 @subsection Slow Terminal Connection
 
-Let's say you use your home computer for dialing up the system that
-runs Emacs and Gnus.  If your modem is slow, you want to reduce the
-amount of data that is sent over the wires as much as possible.
+Let's say you use your home computer for dialing up the system that runs
+Emacs and Gnus.  If your modem is slow, you want to reduce (as much as
+possible) the amount of data sent over the wires.
 
 @table @code
 
@@ -14930,7 +15991,7 @@ re-centering.  If it is neither @code{nil} nor @code{vertical}, do both
 horizontal and vertical recentering.
 
 @item gnus-visible-headers
-Cut down on the headers that are included in the articles to the
+Cut down on the headers included in the articles to the
 minimum.  You can, in fact, make do without them altogether---most of the
 useful data is in the summary buffer, anyway.  Set this variable to
 @samp{^NEVVVVER} or @samp{From:}, or whatever you feel you need.
@@ -14990,7 +16051,7 @@ variable to @code{nil}.  This variable is @code{t} by default.
 If you have a slow machine, or are just really impatient, there are a
 few things you can do to make Gnus run faster.
 
-Set@code{gnus-check-new-newsgroups} and
+Set @code{gnus-check-new-newsgroups} and
 @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster.
 
 Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
@@ -15057,8 +16118,8 @@ environment 500 times before.  I don't care.  I want the full info each
 time.  
 
 It is also important to remember that I have no memory whatsoever.  If
-you send a bug report, and I send you a reply, and then you send back
-just ``No, it's not! Moron!'', I will have no idea what you are
+you send a bug report, and I send you a reply, and then you just send
+back ``No, it's not! Moron!'', I will have no idea what you are
 insulting me about.  Always over-explain everything.  It's much easier
 for all of us---if I don't have all the information I need, I will just
 mail you and ask for more info, and everything takes more time.
@@ -15090,7 +16151,7 @@ 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
 (ditto), data structures (some are less likely to change than others)
-and general method of operations.
+and general methods of operation.
 
 @menu 
 * Gnus Utility Functions::   Common functions and variable to use.
@@ -15137,55 +16198,55 @@ Takes an unprefixed group name and a select method, and returns the full
 
 @item gnus-get-info
 @findex gnus-get-info
-Return the group info list for @var{group}.
+Returns 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
+Adds 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
+Takes 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.
+Says 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.
+Says 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.
+Says 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}.
+Returns the select method corresponding to @var{server}.
 
 @item gnus-server-equal
 @findex gnus-server-equal
-Say whether two virtual servers are equal.
+Says whether two virtual servers are equal.
 
 @item gnus-group-native-p
 @findex gnus-group-native-p
-Say whether @var{group} is native or not.
+Says 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.
+Says 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.
+Says 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}.
+Returns the parameter list of @var{group}.  If given a second parameter,
+returns the value of that parameter for @var{group}.
 
 @item gnus-group-set-parameter
 @findex gnus-group-set-parameter
@@ -15193,7 +16254,7 @@ 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.
+Narrows the current buffer to the body of the article.
 
 @item gnus-check-backend-function
 @findex gnus-check-backend-function
@@ -15207,7 +16268,7 @@ Takes two parameters, @var{function} and @var{group}.  If the backend
 
 @item gnus-read-method
 @findex gnus-read-method
-Prompt the user for a select method.
+Prompts the user for a select method.
 
 @end table
 
@@ -15243,11 +16304,11 @@ 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
-server environments that it pulls down/pushes up when needed.  
+server environments that they pull down/push up when needed.  
 
 There are two groups of interface functions: @dfn{required functions},
 which must be present, and @dfn{optional functions}, which Gnus will
-always check whether are present before attempting to call.
+always check for presence before attempting to call 'em.
 
 All these functions are expected to return data in the buffer
 @code{nntp-server-buffer} (@samp{ *nntpd*}), which is somewhat
@@ -15258,7 +16319,7 @@ 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 to not be.  The latter are backends that generally
+some might be said not to be.  The latter are backends 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.
@@ -15295,10 +16356,10 @@ 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.  
 
-If @var{fetch-old} is non-@code{nil} it says to try to fetch "extra
-headers, in some meaning of the word.  This is generally done by
+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 fill in the gaps as well.  The
+article number in @code{articles}, and filling the gaps as well.  The
 presence of this parameter can be ignored if the backend finds it
 cumbersome to follow the request.  If this is non-@code{nil} and not a
 number, do maximum fetches.
@@ -15344,14 +16405,14 @@ nov-line   = 8*9 [ field <TAB> ] eol
 field      = <text except TAB>
 @end example
 
-For a closer explanation what should be in those fields,
+For a closer look at what should be in those fields,
 @pxref{Headers}. 
 
 
 @item (nnchoke-open-server SERVER &optional DEFINITIONS)
 
 @var{server} is here the virtual server name.  @var{definitions} is a
-list of @code{(VARIABLE VALUE)} pairs that defines this virtual server. 
+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
 may then choose to refuse further attempts at connecting to this
@@ -15385,7 +16446,7 @@ There should be no data returned.
 If @var{server} is the current virtual server, and the connection to the
 physical server is alive, then this function should return a
 non-@code{nil} vlue.  This function should under no circumstances
-attempt to reconnect to a server that is has lost connection to.
+attempt to reconnect to a server we have lost connection to.
 
 There should be no data returned.
 
@@ -15407,15 +16468,15 @@ it would be nice if that were possible.
 If @var{to-buffer} is non-@code{nil}, the result data should be returned
 in this buffer instead of the normal data buffer.  This is to make it
 possible to avoid copying large amounts of data from one buffer to
-another, and Gnus mainly request articles to be inserted directly into
-its article buffer.
+another, while Gnus mainly requests articles to be inserted directly
+into its article buffer.
 
 If it is at all possible, this function should return a cons cell where
-the car is the group name the article was fetched from, and the cdr is
+the @code{car} is the group name the article was fetched from, and the @code{cdr} is
 the article number.  This will enable Gnus to find out what the real
 group and article numbers are when fetching articles by
 @code{Message-ID}.  If this isn't possible, @code{t} should be returned
-on successful article retrievement.
+on successful article retrieval.
 
 
 @item (nnchoke-request-group GROUP &optional SERVER FAST)
@@ -15480,7 +16541,7 @@ flags       = "n" / "y" / "m" / "x" / "j" / "=" name
 
 The flag says whether the group is read-only (@samp{n}), is moderated
 (@samp{m}), is dead (@samp{x}), is aliased to some other group
-(@samp{=other-group} or none of the above (@samp{y}). 
+(@samp{=other-group}) or none of the above (@samp{y}). 
 
 
 @item (nnchoke-request-post &optional SERVER)
@@ -15534,7 +16595,7 @@ There should be no result data from this function.
 
 When the user issues commands for ``sending news'' (@kbd{F} in the
 summary buffer, for instance), Gnus has to know whether the article the
-user is following up is news or mail.  This function should return
+user is following up on is news or mail.  This function should return
 @code{news} if @var{article} in @var{group} is news, @code{mail} if it
 is mail and @code{unknown} if the type can't be decided.  (The
 @var{article} parameter is necessary in @code{nnvirtual} groups which
@@ -15552,7 +16613,7 @@ 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}, and not @code{nil} or any other type of garbage.  
 
-The only use for this that I can see is what @code{nnvirtual} does with
+The only use for this I can see is what @code{nnvirtual} does with
 it---if a component group is auto-expirable, marking an article as read
 in the virtual group should result in the article being marked as
 expirable. 
@@ -15640,8 +16701,8 @@ If @var{last} is @code{nil}, that means that there is a high likelihood
 that there will be more requests issued shortly, so that allows some
 optimizations. 
 
-The function should return a cons where the car is the group name and
-the cdr is the article number that the article was entered as.
+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.
 
 There should be no data returned. 
 
@@ -15652,8 +16713,8 @@ This function takes the current buffer and inserts it into @var{group}.
 If @var{last} in @code{nil}, that means that there will be more calls to
 this function in short order.
 
-The function should return a cons where the car is the group name and
-the cdr is the article number that the article was entered as.
+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.
 
 There should be no data returned.
 
@@ -15678,7 +16739,7 @@ There should be no data returned.
 @item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER)
 
 This function should rename @var{group} into @var{new-name}.  All
-articles that are in @var{group} should move to @var{new-name}.
+articles in @var{group} should move to @var{new-name}.
 
 There should be no data returned.
 
@@ -15694,8 +16755,8 @@ The backends 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
 symbol, and the rest are interpreted as arguments to @code{format} if
-there are many of them, or just a string if there is one of them.
-This function always returns @code{nil}.
+there are multiple of them, or just a string if there is one of them.
+This function must always returns @code{nil}.
 
 @lisp
 (nnheader-report 'nnchoke "You did something totally bogus")
@@ -15708,9 +16769,9 @@ Gnus, in turn, will call @code{nnheader-get-report} when it gets a
 recently reported message for the backend in question.  This function
 takes one argument---the server symbol.
 
-Internally, these function access @var{backend}@code{-status-string}, so
-the @code{nnchoke} backend will have its error message stored in
-@code{nnchoke-status-string}. 
+Internally, these functions access @var{backend}@code{-status-string},
+so the @code{nnchoke} backend will have its error message stored in
+@code{nnchoke-status-string}.
 
 
 @node Writing New Backends
@@ -15733,7 +16794,6 @@ 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
 following macros:
-following. 
 
 @table @code
 
@@ -15746,7 +16806,7 @@ parameters.  For instance:
   nnml nnmh)
 @end lisp
 
-@code{nndir} has here declared that it intends to inherit functions from
+@code{nndir} has declared here that it intends to inherit functions from
 both @code{nnml} and @code{nnmh}.
 
 @item defvoo
@@ -15909,7 +16969,7 @@ This is a newsish backend---followups should (probably) go via news.
 @item post-mail
 This backend supports both mail and news.
 @item none
-This is neither a post or mail backend---it's something completely
+This is neither a post nor mail backend---it's something completely
 different. 
 @item respool
 It supports respooling---or rather, it is able to modify its source
@@ -15938,7 +16998,7 @@ functions in @file{nnmail.el}.  For instance, here's the definition of
   (nnmail-get-new-mail 'nnml 'nnml-save-nov nnml-directory group))
 @end lisp
 
-It simply just calls @code{nnmail-get-new-mail} will a few parameters,
+It simply calls @code{nnmail-get-new-mail} with a few parameters,
 and @code{nnmail} takes care of all the moving and splitting of the
 mail.  
 
@@ -16050,13 +17110,13 @@ left up to the programmer---if it's simpler to just spew it all out on
 one looong line, then that's ok.
 
 The meaning of the various atoms are explained elsewhere in this
-manual
+manual (@pxref{Score File Format}).
 
 
 @node Headers
 @subsection Headers
 
-Gnus uses internally a format for storing article headers that
+Internally Gnus uses a format for storing article headers that
 corresponds to the @sc{nov} format in a mysterious fashion.  One could
 almost suspect that the author looked at the @sc{nov} specification and
 just shamelessly @emph{stole} the entire thing, and one would be right.
@@ -16130,7 +17190,7 @@ are equal.  In fact, any non-descending list is a range:
 @end example
 
 is a perfectly valid range, although a pretty long-winded one.  This is
-also legal:
+also valid:
 
 @example
 (1 . 5)
@@ -16308,10 +17368,9 @@ 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.
+In the cases where 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
@@ -16330,7 +17389,7 @@ hit these indirections impose on Gnus under XEmacs should be slight.
 @node Active File Format
 @subsubsection Active File Format
 
-The active file lists all groups that are available on the server in
+The active file lists all groups available on the server in
 question.  It also lists the highest and lowest current article numbers
 in each group.  
 
@@ -16413,15 +17472,15 @@ of it.  Just give up and submit.  Emacs really does stand for
 ``Escape-Meta-Alt-Control-Shift'', and not ``Editing Macros'', as you
 may have heard from other disreputable sources (like the Emacs author).
 
-The shift key is normally located near your pinky fingers, and are
+The shift keys are normally located near your pinky fingers, and are
 normally used to get capital letters and stuff.  You probably use it all
 the time.  The control key is normally marked ``CTRL'' or something like
 that.  The meta key is, funnily enough, never marked as such on any
-keyboards.  The one I'm currently at has a key that's marked ``Alt'',
+keyboard.  The one I'm currently at has a key that's marked ``Alt'',
 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 doesn't say ``press the meta-control-m key'',
+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}
 key''.  @kbd{M-} is the prefix that means ``meta'' and ``C-'' is the
 prefix that means ``control''.  So ``press @kbd{C-k}'' means ``press
@@ -16471,7 +17530,7 @@ If you have put that thing in your @code{.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
-previous ``form'', which here is a simple @code{setq} statement.
+previous ``form'', which is a simple @code{setq} statement here.
 
 Go ahead---just try it, if you're located at your Emacs.  After you
 @kbd{C-x C-e}, you will see @samp{4} appear in the echo area, which