\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Gnus 5.4.49 Manual
+@settitle Gnus 5.6.33 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
+@c @direntry
+@c * Gnus: (gnus). The news reader Gnus.
+@c @end direntry
@iftex
@finalout
@end iftex
@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}
+\usepackage{pixidx}
\makeindex
\begin{document}
\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{pfu}\fontsize{10pt}{10}\selectfont #1}''}
\newcommand{\gnuslisp}[1]{\gnustt{#1}}
\newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
\newcommand{\gnusfile}[1]{`\gnustt{#1}'}
\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}}}
\newcommand{\gnustilde}{\symbol{"7E}}
\newcommand{\gnusless}{{$<$}}
\newcommand{\gnusgreater}{{$>$}}
+\newcommand{\gnusbraceleft}{{$>$}}
+\newcommand{\gnusbraceright}{{$>$}}
-\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=gnus-head.eps,height=1cm}}}
+\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/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]{
+\margindex{\epsfig{figure=#1,width=2cm}}
+}
+
+\newcommand{\gnusxface}[2]{
+\margindex{\epsfig{figure=#1,width=1cm}\epsfig{figure=#2,width=1cm}}
+}
+
+\newcommand{\gnussmiley}[2]{
+\margindex{\makebox[2cm]{\hfill\epsfig{figure=#1,width=0.5cm}\hfill\epsfig{figure=#2,width=0.5cm}\hfill}}
+}
+
\newcommand{\gnusitemx}[1]{\mbox{}\vspace*{-\itemsep}\vspace*{-\parsep}\item#1}
\newcommand{\gnussection}[1]{
}
{
\ifodd\count0
-\mbox{} \hfill
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\mbox{} \hfill
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\else
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\hfill \mbox{}
\fi
}
}
{
\ifodd\count0
-\mbox{} \hfill
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\mbox{} \hfill
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\else
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\hfill \mbox{}
\fi
}
{
\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
}
}
{
\ifodd\count0
-\mbox{} \hfill
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\mbox{} \hfill
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\else
-\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
\hfill \mbox{}
\fi
}
\gnustitle{\gnustitlename}\\
\rule{15cm}{1mm}\\
\vfill
-\hspace*{-1cm}\epsfig{figure=gnus-big-logo.eps,height=15cm}
+\hspace*{0cm}\epsfig{figure=ps/gnus-big-logo.eps,height=15cm}
\vfill
\rule{15cm}{1mm}\\
\gnusauthor{by Lars Magne Ingebrigtsen}
\thispagestyle{empty}
-Copyright \copyright{} 1995,96 Free Software Foundation, Inc.
+Copyright \copyright{} 1995,96,97 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@tex
@titlepage
-@title Gnus 5.4.49 Manual
+@title Gnus 5.6.33 Manual
@author by Lars Magne Ingebrigtsen
@page
@vskip 0pt plus 1filll
-Copyright @copyright{} 1995,96,97 Free Software Foundation, Inc.
+Copyright @copyright{} 1995,96,97 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
spool or your mbox file. All at the same time, if you want to push your
luck.
-This manual corresponds to Gnus 5.4.49.
+This manual corresponds to Gnus 5.6.33.
@end ifinfo
@end iflatex
Gnus is the advanced, self-documenting, customizable, extensible
-unreal-time newsreader for GNU Emacs.
+unreal-time newsreader for GNU Emacs.
Oops. That sounds oddly familiar, so let's start over again to avoid
being accused of plagiarism:
@findex gnus
If your system administrator has set things up properly, starting Gnus
and reading news is extremely easy---you just type @kbd{M-x gnus} in
-your Emacs.
+your Emacs.
@findex gnus-other-frame
@kindex M-x gnus-other-frame
@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.
+
+If you puzzle at any terms used in this manual, please refer to the
+terminology section (@pxref{Terminology}).
@menu
* Finding the News:: Choosing a method for getting news.
The @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
@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
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.
+help you with most common problems.
If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
use the normal functions for handling new groups, and not do anything
@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.
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.
groups altogether, so you may set @code{gnus-save-killed-list} to
@code{nil}, which will save time both at startup, at exit, and all over.
Saves disk space, too. Why isn't this the default, then?
-Unfortunately, not all servers support this command.
+Unfortunately, not all servers support this command.
I bet I know what you're thinking now: How do I find out whether my
server supports @code{ask-server}? No? Good, because I don't have a
@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 group 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
@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
mouthful.) If this variable is non-@code{nil}, Gnus will ask you in a
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.
+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.
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
Sometimes it is necessary to move from one @sc{nntp} server to another.
This happens very rarely, but perhaps you change jobs, or one server is
-very flaky and you want to use another.
+very flaky and you want to use another.
Changing the server is pretty easy, right? You just change
-@code{gnus-select-method} to point to the new server?
+@code{gnus-select-method} to point to the new server?
@emph{Wrong!}
@sc{nntp} servers, and the only way Gnus keeps track of what articles
you have read is by keeping track of article numbers. So when you
change @code{gnus-select-method}, your @file{.newsrc} file becomes
-worthless.
+worthless.
Gnus provides a few functions to attempt to translate a @file{.newsrc}
file from one server to another. They all have one thing in
That was kinda silly, so Gnus went one better: In addition to the
@file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
@file{.newsrc.eld}. It will read whichever of these files that are most
-recent, but it will never write a @file{.newsrc.el} file.
+recent, but it will never write a @file{.newsrc.el} file. You should
+never delete the @file{.newsrc.eld} file---it contains much information
+not stored in the @file{.newsrc} file.
@vindex gnus-save-newsrc-file
You can turn off writing the @file{.newsrc} file by setting
@code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
-the file and save some space, as well as making exit from Gnus faster.
+the file and save some space, as well as exiting from Gnus faster.
However, this will make it impossible to use other newsreaders than
Gnus. But hey, who would want to, right?
@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
@code{gnus-save-standard-newsrc-hook} is called just before saving the
@file{.newsrc} file. The latter two are commonly used to turn version
control on or off. Version control is on by default when saving the
-startup files. If you want to turn backup creation off, say something like:
+startup files. If you want to turn backup creation off, say something like:
@lisp
(defun turn-off-backup ()
normally the user's home directory.) The dribble file will get the same
file permissions as the @code{.newsrc} file.
+@vindex gnus-always-read-dribble-file
+If @code{gnus-always-read-dribble-file} is non-@code{nil}, Gnus will
+read the dribble file on startup without querying the user.
+
@node The Active File
@section The Active File
@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.
Note that if you subscribe to lots and lots of groups, setting this
variable to @code{nil} will probably make Gnus slower, not faster. At
present, having this variable @code{nil} will slow Gnus down
-considerably, unless you read news over a 2400 baud modem.
+considerably, unless you read news over a 2400 baud modem.
This variable can also have the value @code{some}. Gnus will then
attempt to read active info only on the subscribed groups. On some
@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
A hook that is run as the very last thing after starting up Gnus
successfully.
+@item gnus-started-hook
+@vindex gnus-started-hook
+A hook that is run after reading the @file{.newsrc} file(s), but before
+generating the group buffer.
+
@item gnus-check-bogus-newsgroups
@vindex gnus-check-bogus-newsgroups
If non-@code{nil}, Gnus will check for and delete all bogus groups at
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.
@node Group Buffer Format
@section Group Buffer Format
-@menu
+@menu
* Group Line Specification:: Deciding how the group buffer is to look.
* Group Modeline Specification:: The group buffer modeline.
* Group Highlighting:: Having nice colors in the group buffer.
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
@code{gnus-group-line-format} variable. This variable works along the
lines of a @code{format} specification, which is pretty much the same as
a @code{printf} specifications, for those of you who use (feh!) C.
-@xref{Formatting Variables}.
+@xref{Formatting Variables}.
@samp{%M%S%5y: %(%g%)\n} is the value that produced those lines above.
@table @samp
-@item M
+@item M
An asterisk if the group only has marked articles.
@item S
Whether the group is subscribed.
-@item L
+@item L
Level of subscribedness.
@item N
used.
@item P
-Indentation based on the level of the topic (@pxref{Group Topics}).
+Indentation based on the level of the topic (@pxref{Group Topics}).
@item c
@vindex gnus-group-uncollapsed-levels
@item d
A string that says when you last read the group (@pxref{Group
-Timestamp}).
+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
@vindex gnus-group-mode-line-format
The mode line can be changed by setting
-@code{gnus-group-mode-line-format} (@pxref{Formatting Variables}). It
+@code{gnus-group-mode-line-format} (@pxref{Mode Line Formatting}). It
doesn't understand that many format specifiers:
@table @samp
background is dark:
@lisp
+(face-spec-set 'my-group-face-1
+ '((t (:foreground "Red" :bold t))))
+(face-spec-set 'my-group-face-2
+ '((t (:foreground "SeaGreen" :bold t))))
+(face-spec-set 'my-group-face-3
+ '((t (:foreground "SpringGreen" :bold t))))
+(face-spec-set 'my-group-face-4
+ '((t (:foreground "SteelBlue" :bold t))))
+(face-spec-set 'my-group-face-5
+ '((t (:foreground "SkyBlue" :bold t))))
+
(setq gnus-group-highlight
- `(((> unread 200) .
- ,(custom-face-lookup "Red" nil nil t nil nil))
- ((and (< level 3) (zerop unread)) .
- ,(custom-face-lookup "SeaGreen" nil nil t nil nil))
- ((< level 3) .
- ,(custom-face-lookup "SpringGreen" nil nil t nil nil))
- ((zerop unread) .
- ,(custom-face-lookup "SteelBlue" nil nil t nil nil))
- (t .
- ,(custom-face-lookup "SkyBlue" nil nil t nil nil))))
+ '(((> unread 200) . my-group-face-1)
+ ((and (< level 3) (zerop unread)) . my-group-face-2)
+ ((< level 3) . my-group-face-3)
+ ((zerop unread) . my-group-face-4)
+ (t . my-group-face-5)))
@end lisp
+Also @pxref{Faces and Fonts}.
+
Variables that are dynamically bound when the forms are evaluated
include:
The level of the group.
@item score
The score of the group.
-@item ticked
+@item ticked
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.
@cindex group movement
All movement commands understand the numeric prefix and will behave as
-expected, hopefully.
+expected, hopefully.
@table @kbd
@findex gnus-group-prev-group
Go to the previous group (@code{gnus-group-prev-group}).
-@item M-p
-@kindex M-p (Group)
+@item M-n
+@kindex M-n (Group)
@findex gnus-group-next-unread-group-same-level
Go to the next unread group on the same (or lower) level
-(@code{gnus-group-next-unread-group-same-level}).
+(@code{gnus-group-next-unread-group-same-level}).
-@item M-n
-@kindex M-n (Group)
+@item M-p
+@kindex M-p (Group)
@findex gnus-group-prev-unread-group-same-level
Go to the previous unread group on the same (or lower) level
-(@code{gnus-group-prev-unread-group-same-level}).
+(@code{gnus-group-prev-unread-group-same-level}).
@end table
Three commands for jumping to groups:
@kindex , (Group)
@findex gnus-group-best-unread-group
Jump to the unread group with the lowest level
-(@code{gnus-group-best-unread-group}).
+(@code{gnus-group-best-unread-group}).
@item .
@kindex . (Group)
@findex gnus-group-first-unread-group
Jump to the first group with unread articles
-(@code{gnus-group-first-unread-group}).
+(@code{gnus-group-first-unread-group}).
@end table
@vindex gnus-group-goto-unread
(@code{gnus-group-select-group}). Takes the same arguments as
@code{gnus-group-read-group}---the only difference is that this command
does not display the first unread article automatically upon group
-entry.
+entry.
@item M-RET
@kindex M-RET (Group)
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)
full summary buffer.
@item t
-Select the first unread article when entering the group.
+Select the first unread article when entering the group.
@item best
-Select the most high-scored article in the group when entering the
-group.
+Select the highest scored article in the group when entering the
+group.
@end table
-
+
If you want to prevent automatic selection in some group (say, in a
binary group with Huge articles) you can set this variable to @code{nil}
in @code{gnus-select-group-hook}, which is called when a group is
@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}).
+(@code{gnus-group-unsubscribe-current-group}).
@item S s
@itemx U
@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
@kindex S w (Group)
@kindex C-w (Group)
@findex gnus-group-kill-region
-Kill all groups in the region (@code{gnus-group-kill-region}).
+Kill all groups in the region (@code{gnus-group-kill-region}).
@item S z
@kindex S z (Group)
really handy is when you have a @file{.newsrc} with lots of unsubscribed
groups that you want to get rid off. @kbd{S C-k} on level 7 will
kill off all unsubscribed groups that do not have message numbers in the
-@file{.newsrc} file.
+@file{.newsrc} file.
@end table
@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
@kindex C (Group)
@findex gnus-group-catchup-current-all
Mark all articles in this group, even the ticked ones, as read
-(@code{gnus-group-catchup-current-all}).
+(@code{gnus-group-catchup-current-all}).
@item M-c
@kindex M-c (Group)
If you have switched from one @sc{nntp} server to another, all your marks
and read ranges have become worthless. You can use this command to
clear out all data that you have on your native groups. Use with
-caution.
+caution.
@end table
(@pxref{Listing Groups}), or to just check for new articles in groups on
a given level or lower (@pxref{Scanning New Messages}).
-Remember: The higher the level of the group, the less important it is.
+Remember: The higher the level of the group, the less important it is.
@table @kbd
@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).
(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
If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
groups will be listed along with the unread groups. This variable is
@code{t} by default. If it is @code{nil}, inactive groups won't be
-listed.
+listed.
@vindex gnus-group-use-permanent-levels
If @code{gnus-group-use-permanent-levels} is non-@code{nil}, once you
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
@section Group Score
@cindex group score
+@cindex group rank
+@cindex rank
You would normally keep important groups on high levels, but that scheme
is somewhat restrictive. Don't you wish you could have Gnus sort the
group buffer according to how often you read groups, perhaps? Within
-reason?
+reason?
This is what @dfn{group score} is for. You can assign a score to each
group. You can then sort the group buffer based on this score.
@itemx M m
@kindex M m (Group)
@findex gnus-group-mark-group
-Set the mark on the current group (@code{gnus-group-mark-group}).
+Set the mark on the current group (@code{gnus-group-mark-group}).
@item M-#
@kindex M-# (Group)
@kindex M u (Group)
@findex gnus-group-unmark-group
Remove the mark from the current group
-(@code{gnus-group-unmark-group}).
+(@code{gnus-group-unmark-group}).
@item M U
@kindex M U (Group)
@findex gnus-group-unmark-all-groups
-Remove the mark from all groups (@code{gnus-group-unmark-all-groups}).
+Remove the mark from all groups (@code{gnus-group-unmark-all-groups}).
@item M w
@kindex M w (Group)
@findex gnus-group-mark-region
-Mark all groups between point and mark (@code{gnus-group-mark-region}).
+Mark all groups between point and mark (@code{gnus-group-mark-region}).
@item M b
@kindex M b (Group)
@findex gnus-group-mark-buffer
-Mark all groups in the buffer (@code{gnus-group-mark-buffer}).
+Mark all groups in the buffer (@code{gnus-group-mark-buffer}).
@item M r
@kindex M r (Group)
@findex gnus-group-mark-regexp
Mark all groups that match some regular expression
-(@code{gnus-group-mark-regexp}).
+(@code{gnus-group-mark-regexp}).
@end table
Also @pxref{Process/Prefix}.
@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.
@kindex G p (Group)
@findex gnus-group-edit-group-parameters
Enter a buffer where you can edit the group parameters
-(@code{gnus-group-edit-group-parameters}).
+(@code{gnus-group-edit-group-parameters}).
@item G E
@kindex G E (Group)
Make a directory group (@pxref{Directory Groups}). You will be prompted
for a directory name (@code{gnus-group-make-directory-group}).
-@item G h
+@item G h
@kindex G h (Group)
@cindex help group
@findex gnus-group-make-help-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}.
+@xref{Anything Groups}.
@item G f
@kindex G f (Group)
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}.
+If you use the @code{dejanews} search engine, you can limit the search
+to a particular group by using a match string like
+@samp{~g alt.sysadmin.recovery shaving}.
+
@item G DEL
@kindex G DEL (Group)
@findex gnus-group-delete-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)
@end table
@xref{Select Methods} for more information on the various select
-methods.
+methods.
@vindex gnus-activate-foreign-newsgroups
If @code{gnus-activate-foreign-newsgroups} is a positive number,
Gnus will check all foreign groups with this level or lower at startup.
This might take quite a while, especially if you subscribe to lots of
-groups from different @sc{nntp} servers.
+groups from different @sc{nntp} servers. Also @pxref{Group Levels};
+@code{gnus-activate-level} also affects activation of foreign
+newsgroups.
@node Group Parameters
@section Group Parameters
@cindex group parameters
-The group parameters store information local to a particular group:
+The group parameters store information local to a particular group.
+Here's an example group parameter list:
+
+@example
+((to-address . "ding@@gnus.org")
+ (auto-expire . t))
+@end example
+
+We see that each element consists of a "dotted pair"---the thing before
+the dot is the key, while the thing after the dot is the value. All the
+parameters have this form @emph{except} local variable specs, which are
+not dotted pairs, but proper lists.
+
+The following group parameters can be used:
@table @code
@item to-address
@cindex to-address
-If the group parameter list contains an element that looks like
-@code{(to-address . "some@@where.com")}, that address will be used by
-the backend when doing followups and posts. This is primarily useful in
-mail groups that represent closed mailing lists---mailing lists where
-it's expected that everybody that writes to the mailing list is
-subscribed to it. Since using this parameter ensures that the mail only
-goes to the mailing list itself, it means that members won't receive two
-copies of your followups.
+Address used by when doing followups and new posts.
+
+@example
+(to-address . "some@@where.com")
+@end example
+
+This is primarily useful in mail groups that represent closed mailing
+lists---mailing lists where it's expected that everybody that writes to
+the mailing list is subscribed to it. Since using this parameter
+ensures that the mail only goes to the mailing list itself, it means
+that members won't receive two copies of your followups.
Using @code{to-address} will actually work whether the group is foreign
or not. Let's say there's a group on the server that is called
@samp{fa.4ad-l}. This is a real newsgroup, but the server has gotten
the articles from a mail-to-news gateway. Posting directly to this
group is therefore impossible---you have to send mail to the mailing
-list address instead.
+list address instead.
@item to-list
@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
-followup---except that if it is present in a news group, you'll get mail
-group semantics when doing @kbd{f}.
+Address used when doing a @kbd{a} in that group.
+
+@example
+(to-list . "some@@where.com")
+@end example
+
+It is totally ignored
+when doing a followup---except that if it is present in a news group,
+you'll get mail group semantics when doing @kbd{f}.
+
+If you do an @kbd{a} command in a mail group and you have neither a
+@code{to-list} group parameter nor a @code{to-address} group parameter,
+then a @code{to-list} group parameter will be added automatically upon
+sending the message if @code{gnus-add-to-list} is set to @code{t}.
+@vindex gnus-add-to-list
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}
@item to-group
@cindex to-group
Elements like @code{(to-group . "some.group.name")} means that all
-posts in that group will be sent to @code{some.group.name}.
+posts in that group will be sent to @code{some.group.name}.
@item newsgroup
@cindex newsgroup
-If this symbol is present in the group parameter list, Gnus will treat
-all responses as if they were responses to news articles. This can be
-useful if you have a mail group that's really a mirror of a news group.
+If you have @code{(newsgroup . t)} in the group parameter list, Gnus
+will treat all responses as if they were responses to news articles.
+This can be 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
-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).
+If @code{(gcc-self . t)} is present in the group parameter list, newly
+composed messages will be @code{Gcc}'d to the current group. If
+@code{(gcc-self . none)} is present, no @code{Gcc:} header will be
+generated, if @code{(gcc-self . "string")} is present, this string will
+be inserted literally as a @code{gcc} header. This parameter takes
+precedence over any default @code{Gcc} rules as described later
+(@pxref{Archived Messages}).
@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
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
@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 score file for the group in question. All
+interactive score entries will be put into this file.
@item adapt-file
@cindex adapt file group parameter
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
Elements that look like @code{(comment . "This is a comment")}
are arbitrary comments on the group. They are currently ignored by
Gnus, but provide a place for you to store information on particular
-groups.
+groups.
@item @var{(variable form)}
You can use the group parameters to set variables local to the group you
@end table
-Use the @kbd{G p} command to edit group parameters of a group.
-
-Also @pxref{Topic Parameters}.
-
-Here's an example group parameter list:
-
-@example
-((to-address . "ding@@gnus.org")
- (auto-expiry . t))
-@end example
+Use the @kbd{G p} command to edit group parameters of a group. You
+might also be interested in reading about topic parameters (@pxref{Topic
+Parameters}).
@node Listing Groups
@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
@kindex A m (Group)
@findex gnus-group-list-matching
List all unread, subscribed groups with names that match a regexp
-(@code{gnus-group-list-matching}).
+(@code{gnus-group-list-matching}).
@item A M
@kindex A M (Group)
@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
The @kbd{C-c C-s} (@code{gnus-group-sort-groups}) command sorts the
group buffer according to the function(s) given by the
@code{gnus-group-sort-function} variable. Available sorting functions
-include:
+include:
@table @code
@item gnus-group-sort-by-score
@findex gnus-group-sort-by-score
-Sort by group score.
+Sort by group score. @xref{Group Score}.
@item gnus-group-sort-by-rank
@findex gnus-group-sort-by-rank
Sort by group score and then the group level. The level and the score
-are, when taken together, the group's @dfn{rank}.
+are, when taken together, the group's @dfn{rank}. @xref{Group Score}.
@item gnus-group-sort-by-unread
@findex gnus-group-sort-by-unread
@kindex G S a (Group)
@findex gnus-group-sort-groups-by-alphabet
Sort the group buffer alphabetically by group name
-(@code{gnus-group-sort-groups-by-alphabet}).
+(@code{gnus-group-sort-groups-by-alphabet}).
@item G S u
@kindex G S u (Group)
@kindex G S l (Group)
@findex gnus-group-sort-groups-by-level
Sort the group buffer by group level
-(@code{gnus-group-sort-groups-by-level}).
+(@code{gnus-group-sort-groups-by-level}).
@item G S v
@kindex G S v (Group)
@findex gnus-group-sort-groups-by-score
Sort the group buffer by group score
-(@code{gnus-group-sort-groups-by-score}).
+(@code{gnus-group-sort-groups-by-score}). @xref{Group Score}.
@item G S r
@kindex G S r (Group)
@findex gnus-group-sort-groups-by-rank
Sort the group buffer by group rank
-(@code{gnus-group-sort-groups-by-rank}).
+(@code{gnus-group-sort-groups-by-rank}). @xref{Group Score}.
@item G S m
@kindex G S m (Group)
@findex gnus-group-sort-groups-by-method
Sort the group buffer alphabetically by backend name
-(@code{gnus-group-sort-groups-by-method}).
+(@code{gnus-group-sort-groups-by-method}).
@end table
-When given a prefix, all these commands will sort in reverse order.
+When given a prefix, all these commands will sort in reverse order.
You can also sort a subset of the groups:
@kindex G P v (Group)
@findex gnus-group-sort-selected-groups-by-score
Sort the process/prefixed groups in the group buffer by group score
-(@code{gnus-group-sort-selected-groups-by-score}).
+(@code{gnus-group-sort-selected-groups-by-score}). @xref{Group Score}.
@item G P r
@kindex G P r (Group)
@findex gnus-group-sort-selected-groups-by-rank
Sort the process/prefixed groups in the group buffer by group rank
-(@code{gnus-group-sort-selected-groups-by-rank}).
+(@code{gnus-group-sort-selected-groups-by-rank}). @xref{Group Score}.
@item G P m
@kindex G P m (Group)
@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}).
+With 1 @kbd{C-u}, use the @code{ask-server} method to query the server
+for new groups. With 2 @kbd{C-u}'s, use most complete method possible
+to query the server for new groups, and subscribe the new groups as
+zombies.
@item C-c C-x
@kindex C-c C-x (Group)
@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:
@kindex SPACE (Browse)
@findex gnus-browse-read-group
Enter the current group and display the first article
-(@code{gnus-browse-read-group}).
+(@code{gnus-browse-read-group}).
@item RET
@kindex RET (Browse)
@findex gnus-browse-select-group
-Enter the current group (@code{gnus-browse-select-group}).
+Enter the current group (@code{gnus-browse-select-group}).
@item u
@kindex u (Browse)
@findex gnus-browse-unsubscribe-current-group
Unsubscribe to the current group, or, as will be the case here,
-subscribe to it (@code{gnus-browse-unsubscribe-current-group}).
+subscribe to it (@code{gnus-browse-unsubscribe-current-group}).
@item l
@itemx q
@item q
@kindex q (Group)
@findex gnus-group-exit
+@c @icon{gnus-group-exit}
Quit Gnus (@code{gnus-group-exit}).
@item Q
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
(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
@end lisp
-@menu
+@menu
* Topic Variables:: How to customize the topics the Lisp Way.
* Topic Commands:: Interactive E-Z commands.
* Topic Sorting:: Sorting each topic individually.
@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
Number of groups in the topic.
@item a
Number of unread articles in the topic.
-@item A
-Number of unread articles in the topic and all its subtopics.
+@item A
+Number of unread articles in the topic and all its subtopics.
@end table
@vindex gnus-topic-indent-level
The default is 2.
@vindex gnus-topic-mode-hook
-@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
+@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
@vindex gnus-topic-display-empty-topics
The @code{gnus-topic-display-empty-topics} says whether to display even
@item T n
@kindex T n (Topic)
@findex gnus-topic-create-topic
-Prompt for a new topic name and create it
-(@code{gnus-topic-create-topic}).
+Prompt for a new topic name and create it
+(@code{gnus-topic-create-topic}).
@item T m
@kindex T m (Topic)
@kindex T D (Topic)
@findex gnus-topic-remove-group
Remove a group from the current topic (@code{gnus-topic-remove-group}).
+This command is mainly useful if you have the same group in several
+topics and wish to remove it from one of the topics. You may also
+remove a group from all topics, but in that case, Gnus will add it to
+the root topic the next time you start Gnus. In fact, all new groups
+(which, naturally, don't belong to any topic) will show up in the root
+topic.
+
This command uses the process/prefix convention
(@pxref{Process/Prefix}).
@kindex T M (Topic)
@findex gnus-topic-move-matching
Move all groups that match some regular expression to a topic
-(@code{gnus-topic-move-matching}).
+(@code{gnus-topic-move-matching}).
@item T C
@kindex T C (Topic)
@findex gnus-topic-copy-matching
Copy all groups that match some regular expression to a topic
-(@code{gnus-topic-copy-matching}).
+(@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
Mark all groups in the current topic with the process mark
-(@code{gnus-topic-mark-topic}).
+(@code{gnus-topic-mark-topic}).
@item T M-#
@kindex T M-# (Topic)
@findex gnus-topic-unmark-topic
Remove the process mark from all groups in the current topic
-(@code{gnus-topic-unmark-topic}).
+(@code{gnus-topic-unmark-topic}).
@item RET
@kindex RET (Topic)
prefix, group on that level (and lower) will be displayed.
@item T TAB
+@itemx TAB
@kindex T TAB (Topic)
+@kindex TAB (Topic)
@findex gnus-topic-indent
``Indent'' the current topic so that it becomes a sub-topic of the
previous topic (@code{gnus-topic-indent}). If given a prefix,
``un-indent'' the topic instead.
+@item M-TAB
+@kindex M-TAB (Topic)
+@findex gnus-topic-unindent
+``Un-indent'' the current topic so that it becomes a sub-topic of the
+parent of its current parent (@code{gnus-topic-unindent}).
+
@item C-k
@kindex C-k (Topic)
@findex gnus-topic-kill-group
@findex gnus-topic-yank-group
Yank the previously killed group or topic
(@code{gnus-topic-yank-group}). Note that all topics will be yanked
-before all groups.
+before all groups.
@item T r
@kindex T r (Topic)
@findex gnus-topic-rename
-Rename a topic (@code{gnus-topic-rename}).
+Rename a topic (@code{gnus-topic-rename}).
@item T DEL
@kindex T DEL (Topic)
@findex gnus-topic-delete
-Delete an empty topic (@code{gnus-topic-delete}).
+Delete an empty topic (@code{gnus-topic-delete}).
@item A T
@kindex A T (Topic)
@cindex topic sorting
You can sort the groups in each topic individually with the following
-commands:
+commands:
@table @kbd
@kindex T S a (Topic)
@findex gnus-topic-sort-groups-by-alphabet
Sort the current topic alphabetically by group name
-(@code{gnus-topic-sort-groups-by-alphabet}).
+(@code{gnus-topic-sort-groups-by-alphabet}).
@item T S u
@kindex T S u (Topic)
@kindex T S l (Topic)
@findex gnus-topic-sort-groups-by-level
Sort the current topic by group level
-(@code{gnus-topic-sort-groups-by-level}).
+(@code{gnus-topic-sort-groups-by-level}).
@item T S v
@kindex T S v (Topic)
@findex gnus-topic-sort-groups-by-score
Sort the current topic by group score
-(@code{gnus-topic-sort-groups-by-score}).
+(@code{gnus-topic-sort-groups-by-score}). @xref{Group Score}.
@item T S r
@kindex T S r (Topic)
@findex gnus-topic-sort-groups-by-rank
Sort the current topic by group rank
-(@code{gnus-topic-sort-groups-by-rank}).
+(@code{gnus-topic-sort-groups-by-rank}). @xref{Group Score}.
@item T S m
@kindex T S m (Topic)
@findex gnus-topic-sort-groups-by-method
Sort the current topic alphabetically by backend name
-(@code{gnus-topic-sort-groups-by-method}).
+(@code{gnus-topic-sort-groups-by-method}).
@end table
-@xref{Sorting Groups} for more information about group sorting.
+@xref{Sorting Groups} for more information about group sorting.
@node Topic Topology
@lisp
(("Gnus" visible)
- (("Emacs -- I wuw it!" visible)
+ (("Emacs -- I wuw it!" visible)
(("Naughty Emacs" visible)))
(("Misc" visible)))
@end lisp
for the display above. That variable is saved in the @file{.newsrc.eld}
file, and shouldn't be messed with manually---unless you really want
to. Since this variable is read from the @file{.newsrc.eld} file,
-setting it in any other startup files will have no effect.
+setting it in any other startup files will have no effect.
This topology shows what topics are sub-topics of what topics (right),
and which topics are visible. Two settings are currently
@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
-parameters (@pxref{Group Parameters}).
+ancestor) topic parameters. All valid group parameters are valid topic
+parameters (@pxref{Group Parameters}).
Group parameters (of course) override topic parameters, and topic
parameters in sub-topics override topic parameters in super-topics. You
. "emacs.SCORE")}; the @samp{Relief} topic has the topic parameter
@code{(score-file . "relief.SCORE")}; and the @samp{Misc} topic has the
topic parameter @code{(score-file . "emacs.SCORE")}. In addition,
-@samp{alt.religion.emacs} has the group parameter @code{(score-file
+@* @samp{alt.religion.emacs} has the group parameter @code{(score-file
. "religion.SCORE")}.
Now, when you enter @samp{alt.sex.emacs} in the @samp{Relief} topic, you
@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)
@item gnus-group-mode-hook
@vindex gnus-group-mode-hook
-@code{gnus-group-mode-hook} is called after the group buffer has been
-created.
+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.
+@item gnus-group-prepared-hook
+@vindex gnus-group-prepare-hook
+is called as the very last thing after the group buffer has been
+generated. It may be used to move point around, for instance.
+
@item gnus-permanently-visible-groups
@vindex gnus-permanently-visible-groups
Groups matching this regexp will always be listed in the group buffer,
@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
@cindex activating groups
@item C-c M-g
@kindex C-c M-g (Group)
-Activate absolutely all groups (@code{gnus-activate-all-groups}).
+Activate absolutely all groups (@code{gnus-activate-all-groups}).
@item R
@kindex R (Group)
@end table
@vindex gnus-get-new-news-hook
-@code{gnus-get-new-news-hook} is run just before checking for new news.
+@code{gnus-get-new-news-hook} is run just before checking for new news.
@vindex gnus-after-getting-new-news-hook
@code{gnus-after-getting-new-news-hook} is run after checking for new
@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
use the @samp{%d} spec in the group line format:
@lisp
-(setq gnus-group-line-format
+(setq gnus-group-line-format
"%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")
@end lisp
something like:
@lisp
-(setq gnus-group-line-format
+(setq gnus-group-line-format
"%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
@end lisp
move around, read articles, post articles and reply to articles.
The most common way to a summary buffer is to select a group from the
-group buffer (@pxref{Selecting a Group}).
+group buffer (@pxref{Selecting a Group}).
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.
@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
@vindex gnus-summary-same-subject
@code{gnus-summary-same-subject} is a string indicating that the current
article has the same subject as the previous. This string will be used
-with those specs that require it. The default is @samp{}.
+with those specs that require it. The default is @code{""}.
@node Summary Buffer Lines
@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}.
The following format specification characters are understood:
@table @samp
-@item N
+@item N
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.
-(@code{gnus-summary-same-subject} defaults to @samp{}.)
+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 @code{""}.)
@item F
Full @code{From} header.
@item n
Twenty minus thread level spaces.
@item U
Unread.
+
@item R
-Replied.
+This misleadingly named specifier is the @dfn{secondary mark}. This
+mark will say whether the article has been replied to, has been cached,
+or has been saved.
+
@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
default level. If the difference between
-@code{gnus-summary-default-level} and the score is less than
+@code{gnus-summary-default-score} and the score is less than
@code{gnus-summary-zcore-fuzz}, this spec will not be used.
@item V
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
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
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.
@subsection Summary Buffer Mode Line
@vindex gnus-summary-mode-line-format
-You can also change the format of the summary mode bar. Set
-@code{gnus-summary-mode-line-format} to whatever you like. The default
-is @samp{Gnus: %%b [%A] %Z}.
+You can also change the format of the summary mode bar (@pxref{Mode Line
+Formatting}). Set @code{gnus-summary-mode-line-format} to whatever you
+like. The default is @samp{Gnus: %%b [%A] %Z}.
Here are the elements you can play with:
Unprefixed group name.
@item A
Current article number.
+@item z
+Current article score.
@item V
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
and no unselected ones.
@item g
Shortish group name. For instance, @samp{rec.arts.anime} will be
-shortened to @samp{r.a.anime}.
+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.
+Number of articles that have been marked as read in this session.
@item E
Number of articles expunged by the score files.
@end table
@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
@cindex summary movement
All the straight movement commands understand the numeric prefix and
-behave pretty much as you'd expect.
+behave pretty much as you'd expect.
None of these commands select articles.
@kindex G M-n (Summary)
@findex gnus-summary-next-unread-subject
Go to the next summary line of an unread article
-(@code{gnus-summary-next-unread-subject}).
+(@code{gnus-summary-next-unread-subject}).
@item G M-p
@itemx M-p
@kindex G M-p (Summary)
@findex gnus-summary-prev-unread-subject
Go to the previous summary line of an unread article
-(@code{gnus-summary-prev-unread-subject}).
+(@code{gnus-summary-prev-unread-subject}).
@item G j
@itemx j
@kindex j (Summary)
@kindex G j (Summary)
@findex gnus-summary-goto-article
-Ask for an article number 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
If non-@code{nil}, all the movement commands will try to go to the next
article with the same subject as the current. (@dfn{Same} here might
mean @dfn{roughly equal}. See @code{gnus-summary-gather-subject-limit}
-for details (@pxref{Customizing Threading}).) This variable is not
-particularly useful if you use a threaded display.
+for details (@pxref{Customizing Threading}).) If there are no more
+articles with the same subject, go to the first unread article.
+
+This variable is not particularly useful if you use a threaded display.
@item gnus-summary-check-current
@vindex gnus-summary-check-current
@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
@kindex G C-n (Summary)
@findex gnus-summary-next-same-subject
Go to the next article with the same subject
-(@code{gnus-summary-next-same-subject}).
+(@code{gnus-summary-next-same-subject}).
@item G C-p
@kindex G C-p (Summary)
@findex gnus-summary-prev-same-subject
Go to the previous article with the same subject
-(@code{gnus-summary-prev-same-subject}).
+(@code{gnus-summary-prev-same-subject}).
@item G f
@itemx .
@kindex , (Summary)
@findex gnus-summary-best-unread-article
Go to the article with the highest score
-(@code{gnus-summary-best-unread-article}).
+(@code{gnus-summary-best-unread-article}).
@item G l
@itemx l
@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, while @kbd{l} toggles the two last read articles.
+For a somewhat related issue (if you use these commands 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
@item DEL
@kindex DEL (Summary)
@findex gnus-summary-prev-page
-Scroll the current article back one page (@code{gnus-summary-prev-page}).
+Scroll the current article back one page (@code{gnus-summary-prev-page}).
@item RET
@kindex RET (Summary)
@findex gnus-summary-end-of-article
Scroll to the end of the article (@code{gnus-summary-end-of-article}).
-@item A s
+@item A s
@itemx s
@kindex A s (Summary)
@kindex s (Summary)
@findex gnus-summary-isearch-article
Perform an isearch in the article buffer
-(@code{gnus-summary-isearch-article}).
+(@code{gnus-summary-isearch-article}).
+
+@item h
+@kindex h (Summary)
+@findex gnus-summary-select-article-buffer
+Select the article buffer (@code{gnus-summary-select-article-buffer}).
@end table
@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}).
+(@code{gnus-summary-reply}).
@item S R
@itemx R
@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.
@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)
@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.
@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}).
@code{Resent-To}, @code{Resent-From} and so on will be added. This
means that you actually send a mail to someone that has a @code{To}
header that (probably) points to yourself. This will confuse people.
-So, natcherly you'll only do that if you're really eVIl.
+So, natcherly you'll only do that if you're really eVIl.
This command is mainly used if you have several accounts and want to
ship a mail to a different account of yours. (If you're both
@code{postmaster}. Ordnung muß sein!
This command understands the process/prefix convention
-(@pxref{Process/Prefix}).
+(@pxref{Process/Prefix}).
@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)
@cindex crossposting
@cindex excessive crossposting
Send a complaint about excessive crossposting to the author of the
-current article (@code{gnus-summary-mail-crosspost-complaint}).
+current article (@code{gnus-summary-mail-crosspost-complaint}).
@findex gnus-crosspost-complaint
-This command is provided as a way to fight back agains the current
+This command is provided as a way to fight back against the current
crossposting pandemic that's sweeping Usenet. It will compose a reply
using the @code{gnus-crosspost-complaint} variable as a preamble. This
command understands the process/prefix convention
@end table
+Also @pxref{(message)Header Commands} for more information.
+
@node Summary Post Commands
@subsection Summary Post Commands
@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}).
@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
Post a followup to the current article via news, even if you got the
message through mail (@code{gnus-summary-followup-to-mail}).
-@item S n
-@kindex S n (Summary)
-@findex gnus-summary-followup-to-mail
+@item S N
+@kindex S N (Summary)
+@findex gnus-summary-followup-to-mail-with-original
Post a followup to the current article via news, even if you got the
message through mail and include the original message
(@code{gnus-summary-followup-to-mail-with-original}). This command uses
@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}).
+(@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
@end table
+Also @pxref{(message)Header Commands} for more information.
+
@node Canceling and Superseding
@section Canceling Articles
@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
-canceled---machines all over the world will be deleting your article.
+canceled---machines all over the world will be deleting your article.
+This command uses the process/prefix convention (@pxref{Process/Prefix}).
Be aware, however, that not all sites honor cancels, so your article may
live on here and there, while most sites will delete the article in
question.
+Gnus will use the ``current'' select method when canceling. If you
+want to use the standard posting method, use the @samp{a} symbolic
+prefix (@pxref{Symbolic Prefixes}).
+
If you discover that you have made some mistakes and want to do some
corrections, you can post a @dfn{superseding} article that will replace
your original article.
@cindex article ticking
@cindex marks
-There are several marks you can set on an article.
+There are several marks you can set on an article.
You have marks that decide the @dfn{readedness} (whoo, neato-keano
neologism ohoy!) of the article. Alphabetic marks generally mean
reading it, or replying to it, until sometime later, you'd typically
tick it. However, articles can be expired, so if you want to keep an
article forever, you'll have to make it persistent (@pxref{Persistent
-Articles}).
+Articles}).
@item ?
@vindex gnus-dormant-mark
-Marked as dormant (@code{gnus-dormant-mark}).
+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
-Markes as unread (@code{gnus-unread-mark}).
+Marked as unread (@code{gnus-unread-mark}).
@dfn{Unread articles} are articles that haven't been read at all yet.
@end table
@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
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
@itemize @bullet
-@item
+@item
You can set a bookmark in the current article. Say you are reading a
long thesis on cats' urinary tracts, and have to go home for dinner
before you've finished reading the thesis. You can then set a bookmark
answered) will be marked with an @samp{A} in the second column
(@code{gnus-replied-mark}).
-@item
+@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
+@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
+@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
+@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
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 ?
@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
@kindex C-k (Summary)
@findex gnus-summary-kill-same-subject
Mark all articles that have the same subject as the current one as read
-(@code{gnus-summary-kill-same-subject}).
+(@code{gnus-summary-kill-same-subject}).
@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
@kindex M H (Summary)
@findex gnus-summary-catchup-to-here
Catchup the current group to point
-(@code{gnus-summary-catchup-to-here}).
+(@code{gnus-summary-catchup-to-here}).
@item C-w
@kindex C-w (Summary)
@findex gnus-summary-mark-region-as-read
Mark all articles between point and mark as read
-(@code{gnus-summary-mark-region-as-read}).
+(@code{gnus-summary-mark-region-as-read}).
@item M V k
@kindex M V k (Summary)
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)
@kindex M P p (Summary)
@findex gnus-summary-mark-as-processable
Mark the current article with the process mark
-(@code{gnus-summary-mark-as-processable}).
+(@code{gnus-summary-mark-as-processable}).
@findex gnus-summary-unmark-as-processable
-@item M P u
+@item M P u
@itemx M-#
@kindex M P u (Summary)
@kindex M-# (Summary)
@kindex M P U (Summary)
@findex gnus-summary-unmark-all-processable
Remove the process mark from all articles
-(@code{gnus-summary-unmark-all-processable}).
+(@code{gnus-summary-unmark-all-processable}).
@item M P i
@kindex M P i (Summary)
@findex gnus-uu-invert-processable
Invert the list of process marked articles
-(@code{gnus-uu-invert-processable}).
+(@code{gnus-uu-invert-processable}).
@item M P R
@kindex M P R (Summary)
@findex gnus-uu-mark-by-regexp
-Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}).
+Mark articles that have a @code{Subject} header that matches a regular
+expression (@code{gnus-uu-mark-by-regexp}).
@item M P r
@kindex M P r (Summary)
@kindex M P b (Summary)
@findex gnus-uu-mark-buffer
Mark all articles in the buffer in the order they appear
-(@code{gnus-uu-mark-buffer}).
+(@code{gnus-uu-mark-buffer}).
@item M P k
@kindex M P k (Summary)
It can be convenient to limit the summary buffer to just show some
subset of the articles currently in the group. The effect most limit
commands have is to remove a few (or many) articles from the summary
-buffer.
+buffer.
+
+All limiting commands work on subsets of the articles already fetched
+from the servers. None of these commands query the server for
+additional articles.
@table @kbd
@kindex / / (Summary)
@findex gnus-summary-limit-to-subject
Limit the summary buffer to articles that match some subject
-(@code{gnus-summary-limit-to-subject}).
+(@code{gnus-summary-limit-to-subject}).
@item / a
@kindex / a (Summary)
@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
@kindex / m (Summary)
@findex gnus-summary-limit-to-marks
-Ask for a mark and then limit to all articles that have not been marked
+Ask for a mark and then limit to all articles that have been marked
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)
@kindex M S (Summary)
@kindex / E (Summary)
@findex gnus-summary-limit-include-expunged
-Display all expunged articles
-(@code{gnus-summary-limit-include-expunged}).
+Include all expunged articles in the limit
+(@code{gnus-summary-limit-include-expunged}).
@item / D
@kindex / D (Summary)
@findex gnus-summary-limit-include-dormant
-Display all dormant articles (@code{gnus-summary-limit-include-dormant}).
+Include all dormant articles in the limit
+(@code{gnus-summary-limit-include-dormant}).
+
+@item / *
+@kindex / * (Summary)
+@findex gnus-summary-limit-include-cached
+Include all cached articles in the limit
+(@code{gnus-summary-limit-include-cached}).
@item / d
@kindex / d (Summary)
@findex gnus-summary-limit-exclude-dormant
-Hide all dormant articles (@code{gnus-summary-limit-exclude-dormant}).
+Exclude all dormant articles from the limit
+(@code{gnus-summary-limit-exclude-dormant}).
+
+@item / T
+@kindex / T (Summary)
+@findex gnus-summary-limit-include-thread
+Include all the articles in the current thread in the limit.
@item / c
@kindex / c (Summary)
@findex gnus-summary-limit-exclude-childless-dormant
-Hide all dormant articles that have no children
-(@code{gnus-summary-limit-exclude-childless-dormant}).
+Exclude all dormant articles that have no children from the limit
+(@code{gnus-summary-limit-exclude-childless-dormant}).
@item / C
@kindex / C (Summary)
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 propagation 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 typically 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.
@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
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
@cindex fuzzy article gathering
If you set this variable to the special value @code{fuzzy}, Gnus will
use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
-Matching}).
+Matching}).
@item gnus-simplify-subject-fuzzy-regexp
@vindex gnus-simplify-subject-fuzzy-regexp
@c Written by Michael Ernst <mernst@cs.rice.edu>
@lisp
(setq gnus-simplify-ignored-prefixes
- (concat
+ (concat
"\\`\\[?\\("
- (mapconcat
+ (mapconcat
'identity
'("looking"
"wanted" "followup" "summary\\( of\\)?"
- "help" "query" "problem" "question"
+ "help" "query" "problem" "question"
"answer" "reference" "announce"
"How can I" "How to" "Comparison of"
;; ...
@end lisp
All words that match this regexp will be removed before comparing two
-subjects.
+subjects.
+
+@item gnus-simplify-subject-functions
+@vindex gnus-simplify-subject-functions
+If non-@code{nil}, this variable overrides
+@code{gnus-summary-gather-subject-limit}. This variable should be a
+list of functions to apply to the @code{Subject} string iteratively to
+arrive at the simplified version of the string.
+
+Useful functions to put in this list include:
+
+@table @code
+@item gnus-simplify-subject-re
+@findex gnus-simplify-subject-re
+Strip the leading @samp{Re:}.
+
+@item gnus-simplify-subject-fuzzy
+@findex gnus-simplify-subject-fuzzy
+Simplify fuzzily.
+
+@item gnus-simplify-whitespace
+@findex gnus-simplify-whitespace
+Remove excessive whitespace.
+@end table
+
+You may also write your own functions, of course.
+
@item gnus-summary-gather-exclude-subject
@vindex gnus-summary-gather-exclude-subject
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
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:
'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 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}).)
+This variable can also be set to @code{invisible}. This won't have any
+visible effects, but is useful if you use the @kbd{A T} command a lot
+(@pxref{Finding the Parent}).
-@item none
-Don't make any article parent at all. Just gather the threads and
-display them after one another.
+@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 nil
-Don't gather loose threads.
@end table
+
+@node More Threading
+@subsubsection More Threading
+
+@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
If non-@code{nil}, all threads will be hidden when the summary buffer is
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
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
@kindex M-C-l (Summary)
@findex gnus-summary-lower-thread
Lower the score of the current (sub-)thread
-(@code{gnus-summary-lower-thread}).
+(@code{gnus-summary-lower-thread}).
@item T i
@kindex T i (Summary)
@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.
@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
Go to the top of the thread (@code{gnus-summary-top-thread}).
@end table
-@vindex gnus-thread-operation-ignore-subject
+@vindex gnus-thread-operation-ignore-subject
If you ignore subject while threading, you'll naturally end up with
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}).
@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
number, you could do something like:
@lisp
-(setq gnus-thread-sort-functions
+(setq gnus-thread-sort-functions
'(gnus-thread-sort-by-number
gnus-thread-sort-by-subject
gnus-thread-sort-by-total-score))
@lisp
(setq gnus-thread-sort-functions
- '((lambda (t1 t2)
+ '((lambda (t1 t2)
(not (gnus-thread-sort-by-number t1 t2)))
gnus-thread-sort-by-score))
@end lisp
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}.
say something like:
@lisp
-(setq gnus-article-sort-functions
+(setq gnus-article-sort-functions
'(gnus-article-sort-by-number
gnus-article-sort-by-subject))
@end lisp
while you are reading the previous one? Why not, indeed.
First, some caveats. There are some pitfalls to using asynchronous
-article fetching, especially the way Gnus does it.
+article fetching, especially the way Gnus does it.
Let's say you are reading article 1, which is short, and article 2 is
quite long, and you are not interested in reading that. Gnus does not
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)
@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
@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
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,
@item *
@kindex * (Summary)
@findex gnus-cache-enter-article
-Make the current article persistent (@code{gnus-cache-enter-article}).
+Make the current article persistent (@code{gnus-cache-enter-article}).
@item M-*
@kindex M-* (Summary)
@findex gnus-cache-remove-article
Remove the current article from the persistent articles
(@code{gnus-cache-remove-article}). This will normally delete the
-article.
+article.
@end table
-Both these commands understand the process/prefix convention.
+Both these commands understand the process/prefix convention.
To avoid having all ticked articles (and stuff) entered into the cache,
you should set @code{gnus-use-cache} to @code{passive} if you're just
variable is non-@code{nil} and is not a number, Gnus will store
@emph{all} read articles, which means that your Emacs will grow without
bound before exploding and taking your machine down with you. I put
-that in there just to keep y'all on your toes.
+that in there just to keep y'all on your toes.
This variable is @code{nil} by default.
@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}).
+(@code{gnus-summary-save-article}).
@item O m
@kindex O m (Summary)
@findex gnus-summary-save-article-mail
Save the current article in mail format
-(@code{gnus-summary-save-article-mail}).
+(@code{gnus-summary-save-article-mail}).
@item O r
@kindex O r (Summary)
@findex gnus-summary-save-article-rmail
Save the current article in rmail format
-(@code{gnus-summary-save-article-rmail}).
+(@code{gnus-summary-save-article-rmail}).
@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}).
+(@code{gnus-summary-save-article-file}).
@item O F
@kindex O F (Summary)
@findex gnus-summary-write-article-file
Write the current article in plain file format, overwriting any previous
-file contents (@code{gnus-summary-write-article-file}).
+file contents (@code{gnus-summary-write-article-file}).
@item O b
@kindex O b (Summary)
@findex gnus-summary-save-article-body-file
Save the current article body in plain file format
-(@code{gnus-summary-save-article-body-file}).
+(@code{gnus-summary-save-article-body-file}).
@item O h
@kindex O h (Summary)
@findex gnus-summary-save-article-folder
Save the current article in mh folder format
-(@code{gnus-summary-save-article-folder}).
+(@code{gnus-summary-save-article-folder}).
@item O v
@kindex O v (Summary)
have Gnus do all your thinking for you, you can even set this variable
to @code{nil}, which means that you will never be prompted for files to
save articles in. Gnus will simply save all the articles in the default
-files.
+files.
@vindex gnus-default-article-saver
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
All of these functions, except for the last one, will save the article
in the @code{gnus-article-save-directory}, which is initialized from the
@code{SAVEDIR} environment variable. This is @file{~/News/} by
-default.
+default.
As you can see above, the functions use different functions to find a
suitable name of a file to save the article in. Below is a list of
This variable is @code{((gnus-article-archive-name))} by default, which
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.
+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
(@samp{.}) in the group names with slashes (@samp{/})---which means that
the functions will generate hierarchies of directories instead of having
-all the files in the toplevel directory
+all the files in the top level directory
(@file{~/News/alt/andrea-dworkin} instead of
@file{~/News/alt.andrea-dworkin}.) This variable is @code{t} by default
on most systems. However, for historical reasons, this is @code{nil} on
@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
ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
-the toplevel directory as the argument (@file{~/News/}). Then just walk
+the top level directory as the argument (@file{~/News/}). Then just walk
around to the groups/directories with @code{nneething}.
Sometime users post articles (or series of articles) that have been
encoded in some way or other. Gnus can decode them for you.
-@menu
+@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
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]+).*$}.
+([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{#}.
@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
@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
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
@kindex X v S (Summary)
@findex gnus-uu-decode-unshar-and-save-view
Unshars, views and saves the current series
-(@code{gnus-uu-decode-unshar-and-save-view}).
+(@code{gnus-uu-decode-unshar-and-save-view}).
@end table
@kindex X v P (Summary)
@findex gnus-uu-decode-postscript-and-save-view
View and save the current PostScript series
-(@code{gnus-uu-decode-postscript-and-save-view}).
+(@code{gnus-uu-decode-postscript-and-save-view}).
+@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
Adjective, not verb.
-@menu
+@menu
* Rule Variables:: Variables that say how a file is to be viewed.
* Other Decode Variables:: Other decode variables.
* Uuencoding and Posting:: Variables for customizing uuencoding.
@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)
'(regexp2 command2)
@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:
@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
Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
uuencoded files that have had trailing spaces deleted.
+@item gnus-uu-pre-uudecode-hook
+@vindex gnus-uu-pre-uudecode-hook
+Hook run before sending a message to @code{uudecode}.
+
@item gnus-uu-view-with-metamail
@vindex gnus-uu-view-with-metamail
@cindex metamail
@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}.
immediately. If this variable is @code{not-confirm}, the user won't even
be asked for a confirmation before viewing is done.
-@vindex gnus-view-pseudos-separately
+@vindex gnus-view-pseudos-separately
If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
pseudo-article will be created for each file to be viewed. If
@code{nil}, all files that use the same viewing command will be given as
@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.
@menu
* Article Highlighting:: You want to make the article look like fruit salad.
-* Article Fontisizing:: Making emphasized text look niced.
+* Article Fontisizing:: Making emphasized text look nice.
* Article Hiding:: You also want to make certain info go away.
* Article Washing:: Lots of way-neat functions to make life better.
* Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
@node Article Highlighting
@subsection Article Highlighting
-@cindex highlight
+@cindex highlighting
Not only do you want your article buffer to look like fruit salad, but
-you want it to look like technicolor fruit salad.
+you want it to look like technicolor fruit salad.
@table @kbd
@item W H a
@kindex W H a (Summary)
@findex gnus-article-highlight
-Highlight the current article (@code{gnus-article-highlight}).
+@findex gnus-article-maybe-highlight
+Do much highlighting of the current article
+(@code{gnus-article-highlight}). This function highlights header, cited
+text, the signature, and adds buttons to the body and the head.
+
+Most users would prefer using @code{gnus-article-maybe-highlight} in
+@code{gnus-article-display-hook} (@pxref{Customizing Articles}) instead.
+This is a bit less agressive---it highlights only the headers, the
+signature and adds buttons.
@item W H h
@kindex W H h (Summary)
highlighting will be done according to the @code{gnus-header-face-alist}
variable, which is a list where each element has the form @var{(regexp
name content)}. @var{regexp} is a regular expression for matching the
-header, @var{name} is the face used for highlighting the header name and
-@var{content} is the face for highlighting the header value. The first
-match made will be used. Note that @var{regexp} shouldn't have @samp{^}
-prepended---Gnus will add one.
+header, @var{name} is the face used for highlighting the header name
+(@pxref{Faces and Fonts}) and @var{content} is the face for highlighting
+the header value. The first match made will be used. Note that
+@var{regexp} shouldn't have @samp{^} prepended---Gnus will add one.
@item W H c
@kindex W H c (Summary)
@findex gnus-article-highlight-citation
-Highlight cited text (@code{gnus-article-highlight-citation}).
+Highlight cited text (@code{gnus-article-highlight-citation}).
Some variables to customize the citation highlights:
@item gnus-cite-parse-max-size
If the article size if bigger than this variable (which is 25000 by
-default), no citation highlighting will be performed.
+default), no citation highlighting will be performed.
@item gnus-cite-prefix-regexp
@vindex gnus-cite-prefix-regexp
-Regexp matching the longest possible citation prefix on a line.
+Regexp matching the longest possible citation prefix on a line.
@item gnus-cite-max-prefix
@vindex gnus-cite-max-prefix
@item gnus-cite-face-list
@vindex gnus-cite-face-list
-List of faces used for highlighting citations. When there are citations
-from multiple articles in the same message, Gnus will try to give each
-citation from each article its own face. This should make it easier to
-see who wrote what.
+List of faces used for highlighting citations (@pxref{Faces and Fonts}).
+When there are citations from multiple articles in the same message,
+Gnus will try to give each citation from each article its own face.
+This should make it easier to see who wrote what.
@item gnus-supercite-regexp
@vindex gnus-supercite-regexp
-Regexp matching normal Supercite attribution lines.
+Regexp matching normal Supercite attribution lines.
@item gnus-supercite-secondary-regexp
@vindex gnus-supercite-secondary-regexp
@end table
+@xref{Customizing Articles} for how to highlight articles automatically.
+
@node Article Fontisizing
@subsection Article Fontisizing
running the article through the @kbd{W e}
(@code{gnus-article-emphasize}) command.
-@vindex gnus-article-emphasis
+@vindex gnus-emphasis-alist
How the emphasis is computed is controlled by the
-@code{gnus-article-emphasis} variable. This is an alist where the first
+@code{gnus-emphasis-alist} 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
@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-italic}.
+@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
customize}, or you can use @code{copy-face}. For instance, if you want
(copy-face 'red 'gnus-emphasis-italic)
@end lisp
+@xref{Customizing Articles} for how to fontize articles automatically.
+
@node Article Hiding
@subsection Article Hiding
@cindex article hiding
Or rather, hiding certain things in each article. There usually is much
-too much cruft in most articles.
+too much cruft in most articles.
@table @kbd
@item W W a
@kindex W W a (Summary)
@findex gnus-article-hide
-Do maximum hiding on the summary buffer (@kbd{gnus-article-hide}).
+Do quite a lot of hiding on the article buffer
+(@kbd{gnus-article-hide}). In particular, this function will hide
+headers, PGP, cited text and the signature.
@item W W h
@kindex W W h (Summary)
@findex gnus-article-hide-headers
Hide headers (@code{gnus-article-hide-headers}). @xref{Hiding
-Headers}.
+Headers}.
@item W W b
@kindex W W b (Summary)
@kindex W W s (Summary)
@findex gnus-article-hide-signature
Hide signature (@code{gnus-article-hide-signature}). @xref{Article
-Signature}.
+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
@table @code
-@item gnus-cite-hide-percentage
-@vindex gnus-cite-hide-percentage
-If the cited text is of a bigger percentage than this variable (default
-50), hide the cited text.
-
-@item gnus-cite-hide-absolute
-@vindex gnus-cite-hide-absolute
-The cited text must be 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
+@item gnus-cited-opened-text-button-line-format
+@itemx gnus-cited-closed-text-button-line-format
+@vindex gnus-cited-closed-text-button-line-format
+@vindex gnus-cited-opened-text-button-line-format
+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:
+by these format-like variable (@pxref{Formatting Variables}). These
+specs are valid:
@table @samp
@item b
@item gnus-cited-lines-visible
@vindex gnus-cited-lines-visible
-The number of lines at the beginning of the cited text to leave shown.
+The number of lines at the beginning of the cited text to leave shown.
+
+@end table
+
+@item W W C-c
+@kindex W W C-c (Summary)
+@findex gnus-article-hide-citation-maybe
+
+Hide citation (@code{gnus-article-hide-citation-maybe}) depending on the
+following two variables:
+
+@table @code
+@item gnus-cite-hide-percentage
+@vindex gnus-cite-hide-percentage
+If the cited text is of a bigger percentage than this variable (default
+50), hide the cited text.
+@item gnus-cite-hide-absolute
+@vindex gnus-cite-hide-absolute
+The cited text must have at least this length (default 10) before it
+is hidden.
@end table
@item W W C
Hide cited text in articles that aren't roots
(@code{gnus-article-hide-citation-in-followups}). This isn't very
useful as an interactive command, but might be a handy function to stick
-in @code{gnus-article-display-hook} (@pxref{Customizing Articles}).
+in @code{gnus-article-display-hook} (@pxref{Customizing Articles}).
@end table
Also @pxref{Article Highlighting} for further variables for
citation customization.
+@xref{Customizing Articles} for how to hide article elements
+automatically.
+
@node Article Washing
@subsection Article Washing
@kindex W l (Summary)
@findex gnus-summary-stop-page-breaking
Remove page breaks from the current article
-(@code{gnus-summary-stop-page-breaking}).
+(@code{gnus-summary-stop-page-breaking}). @xref{Misc Article} for page
+delimiters.
@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}).
+(@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) -> @samp{O} (letter
+#15). It is sometimes referred to as ``Caesar rotate'' because Caesar
+is rumored to have employed this form of, uh, somewhat weak encryption.
@item W t
@kindex W t (Summary)
@findex gnus-summary-toggle-header
Toggle whether to display all headers in the article buffer
-(@code{gnus-summary-toggle-header}).
+(@code{gnus-summary-toggle-header}).
@item W v
@kindex W v (Summary)
@findex gnus-article-treat-overstrike
Treat overstrike (@code{gnus-article-treat-overstrike}).
+@item W d
+@kindex W d (Summary)
+@findex gnus-article-treat-dumbquotes
+Treat M******** sm*rtq**t*s (@code{gnus-article-treat-dumbquotes}).
+
@item W w
@kindex W w (Summary)
@findex gnus-article-fill-cited-article
@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)
@findex gnus-article-x-face-command
@vindex gnus-article-x-face-command
@vindex gnus-article-x-face-too-ugly
+@iftex
+@iflatex
+\include{xface}
+@end iflatex
+@end iftex
Look for and display any X-Face headers
(@code{gnus-article-display-x-face}). The command executed by this
function is given by the @code{gnus-article-x-face-command} variable.
@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)
@findex gnus-article-add-buttons-to-head
Add clickable buttons to the article headers
-(@code{gnus-article-add-buttons-to-head}).
+(@code{gnus-article-add-buttons-to-head}).
@item W E l
@kindex W E l (Summary)
Do all the three commands above
(@code{gnus-article-strip-blank-lines}).
+@item W E A
+@kindex W E A (Summary)
+@findex gnus-article-strip-all-blank-lines
+Remove all blank lines
+(@code{gnus-article-strip-all-blank-lines}).
+
@item W E s
@kindex W E s (Summary)
@findex gnus-article-strip-leading-space
@end table
+@xref{Customizing Articles} for how to wash articles automatically.
+
@node Article Buttons
@subsection Article Buttons
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
@item regexp
All text that match this regular expression will be considered an
-external reference. Here's a typical regexp that match embedded URLs:
-@samp{<URL:\\([^\n\r>]*\\)>}.
+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
@item data-par
As with @var{button-par}, this is a sub-expression number, but this one
-says which part of the match is to be sent as data to @var{function}.
+says which part of the match is to be sent as data to @var{function}.
@end table
(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
@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
+@xref{Customizing Articles} for how to buttonize articles automatically.
+
@node Article Date
@subsection Article Date
@kindex W T u (Summary)
@findex gnus-article-date-ut
Display the date in UT (aka. GMT, aka ZULU)
-(@code{gnus-article-date-ut}).
+(@code{gnus-article-date-ut}).
+
+@item W T i
+@kindex W T i (Summary)
+@findex gnus-article-date-iso8601
+@cindex ISO 8601
+Display the date in international format, aka. ISO 8601
+(@code{gnus-article-date-iso8601}).
@item W T l
@kindex W T l (Summary)
(@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
-(@code{gnus-article-date-lapsed}).
+@findex gnus-start-date-timer
+@findex gnus-stop-date-timer
+Say how much time has elapsed between the article was posted and now
+(@code{gnus-article-date-lapsed}). If you want to have this line
+updated continually, you can put
+
+@lisp
+(gnus-start-date-timer)
+@end lisp
+
+in your @file{.gnus.el} file, or you can run it off of some hook. If
+you want to stop the timer, you can use the @code{gnus-stop-date-timer}
+command.
@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*
@end table
+@xref{Customizing Articles} for how to display the date in your
+preferred format automatically.
+
@node Article Signature
@subsection Article Signature
(setq gnus-signature-separator
'("^-- $" ; The standard
"^-- *$" ; A common mangling
- "^-------*$" ; Many people just use a looong
+ "^-------*$" ; Many people just use a looong
; line of dashes. Shame!
"^ *--------*$" ; Double-shame!
"^________*$" ; Underscores are also popular
@vindex gnus-signature-limit
@code{gnus-signature-limit} provides a limit to what is considered a
-signature.
+signature.
@enumerate
-@item
+@item
If it is an integer, no signature may be longer (in characters) than
that integer.
-@item
+@item
If it is a floating point number, no signature may be longer (in lines)
than that number.
-@item
+@item
If it is a function, the function will be called without any parameters,
and if it returns @code{nil}, there is no signature in the buffer.
@item
@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
@cindex printing
@kindex A P (Summary)
@vindex gnus-ps-print-hook
-@findex gnus-summary-print-article
+@findex gnus-summary-print-article
Generate and print a PostScript image of the article buffer
(@code{gnus-summary-print-article}). @code{gnus-ps-print-hook} will be
run just before printing the buffer.
@cindex parent articles
@cindex referring articles
-@findex gnus-summary-refer-parent-article
+@table @kbd
+@item ^
@kindex ^ (Summary)
+@findex gnus-summary-refer-parent-article
If you'd like to read the parent of the current article, and it is not
displayed in the summary buffer, you might still be able to. That is,
if the current group is fetched by @sc{nntp}, the parent hasn't expired
ancestor. So if you say @kbd{3 ^}, Gnus will fetch the parent, the
grandparent and the grandgrandparent of the current article. If you say
@kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current
-article.
+article.
+@item A R (Summary)
@findex gnus-summary-refer-references
@kindex A R (Summary)
-You can have Gnus fetch all articles mentioned in the @code{References}
-header of the article by pushing @kbd{A R}
-(@code{gnus-summary-refer-references}).
-
+Fetch all articles mentioned in the @code{References} header of the
+article (@code{gnus-summary-refer-references}).
+
+@item A T (Summary)
+@findex gnus-summary-refer-thread
+@kindex A T (Summary)
+Display the full thread where the current article appears
+(@code{gnus-summary-refer-thread}). This command has to fetch all the
+headers in the current group to work, so it usually takes a while. If
+you do it often, you may consider setting @code{gnus-fetch-old-headers}
+to @code{invisible} (@pxref{Filling In Threads}). This won't have any
+visible effects normally, but it'll make this command work a whole lot
+faster. Of course, it'll make group entry somewhat slow.
+
+@vindex gnus-refer-thread-limit
+The @code{gnus-refer-thread-limit} variable says how many old (i. e.,
+articles before the first displayed in the current group) headers to
+fetch when doing this command. The default is 200. If @code{t}, all
+the available headers will be fetched. This variable can be overridden
+by giving the @kbd{A T} command a numerical prefix.
+
+@item M-^ (Summary)
@findex gnus-summary-refer-article
@kindex M-^ (Summary)
@cindex Message-ID
@code{Message-ID}, which is one of those long, hard-to-read thingies
that look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}. You
have to get it all exactly right. No fuzzy searches, I'm afraid.
+@end table
The current select method will be used when fetching by
@code{Message-ID} from non-news select method, but you can override this
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
@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
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:
@table @kbd
@item .
@kindex . (Pick)
-@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.)
+@findex gnus-pick-article-or-thread
+Pick the article or thread on the current line
+(@code{gnus-pick-article-or-thread}). If the variable
+@code{gnus-thread-hide-subtree} is true, then this key selects the
+entire thread when used at the first article of the thread. Otherwise,
+it selects just the article. If given a numerical prefix, go to that
+thread or article and pick it. (The line number is normally displayed
+at the beginning of the summary pick lines.)
@item SPACE
@kindex SPACE (Pick)
@item u
@kindex u (Pick)
-@findex gnus-summary-unmark-as-processable
-Unpick the article (@code{gnus-summary-unmark-as-processable}).
-
-@item U
-@kindex U (Pick)
-@findex gnus-summary-unmark-all-processable
-Unpick all articles (@code{gnus-summary-unmark-all-processable}).
-
-@item t
-@kindex t (Pick)
-@findex gnus-uu-mark-thread
-Pick the thread (@code{gnus-uu-mark-thread}).
-
-@item T
-@kindex T (Pick)
-@findex gnus-uu-unmark-thread
-Unpick the thread (@code{gnus-uu-unmark-thread}).
-
-@item r
-@kindex r (Pick)
-@findex gnus-uu-mark-region
-Pick the region (@code{gnus-uu-mark-region}).
-
-@item R
-@kindex R (Pick)
-@findex gnus-uu-unmark-region
-Unpick the region (@code{gnus-uu-unmark-region}).
-
-@item e
-@kindex e (Pick)
-@findex gnus-uu-mark-by-regexp
-Pick articles that match a regexp (@code{gnus-uu-mark-by-regexp}).
-
-@item E
-@kindex E (Pick)
-@findex gnus-uu-unmark-by-regexp
-Unpick articles that match a regexp (@code{gnus-uu-unmark-by-regexp}).
-
-@item b
-@kindex b (Pick)
-@findex gnus-uu-mark-buffer
-Pick the buffer (@code{gnus-uu-mark-buffer}).
-
-@item B
-@kindex B (Pick)
-@findex gnus-uu-unmark-buffer
-Unpick the buffer (@code{gnus-uu-unmark-buffer}).
+@findex gnus-pick-unmark-article-or-thread.
+Unpick the thread or article
+(@code{gnus-pick-unmark-article-or-thread}). If the variable
+@code{gnus-thread-hide-subtree} is true, then this key unpicks the
+thread if used at the first article of the thread. Otherwise it unpicks
+just the article. You can give this key a numerical prefix to unpick
+the thread or article at that line.
@item RET
@kindex RET (Pick)
@end table
+All the normal summary mode commands are still available in the
+pick-mode, with the exception of @kbd{u}. However @kbd{!} is available
+which is mapped to the same function
+@code{gnus-summary-tick-article-forward}.
+
If this sounds like a good idea to you, you could say:
@lisp
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
Variables}). It accepts the same format specs that
-@code{gnus-summary-line-format} does (@pxref{Summary Buffer Lines}).
+@code{gnus-summary-line-format} does (@pxref{Summary Buffer Lines}).
@node Binary Groups
@kbd{X u}, @kbd{n}, @kbd{RET} all the time. @kbd{M-x gnus-binary-mode}
is a minor mode for summary buffers that makes all ordinary Gnus article
selection functions uudecode series of articles and display the result
-instead of just displaying the articles the normal way.
+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.
If you don't like the normal Gnus summary display, you might try setting
@code{gnus-use-trees} to @code{t}. This will create (by default) an
additional @dfn{tree buffer}. You can execute all summary mode commands
-in the tree buffer.
+in the tree buffer.
There are a few variables to customize the tree display, of course:
@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
-Buffer Mode Line}.
+A format string for the mode bar in the tree mode buffers (@pxref{Mode
+Line Formatting}). The default is @samp{Gnus: %%b %S %Z}. For a list
+of valid specs, @pxref{Summary Buffer Mode Line}.
@item gnus-selected-tree-face
@vindex gnus-selected-tree-face
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
The number of the article.
@item [
The opening bracket.
-@item ]
+@item ]
The closing bracket.
@item s
The subject.
This is used for differentiating between ``real'' articles and
``sparse'' articles. The format is @var{((real-open . real-close)
(sparse-open . sparse-close) (dummy-open . dummy-close))}, and the
-default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}))}.
+default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
@item gnus-tree-parent-child-edges
@vindex gnus-tree-parent-child-edges
This is a list that contains the characters used for connecting parent
-nodes to their children. The default is @code{(?- ?\\ ?|)}.
+nodes to their children. The default is @code{(?- ?\\ ?|)}.
@end table
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
@end table
-Here's and example from a horizontal tree buffer:
+Here's an example from a horizontal tree buffer:
@example
@{***@}-(***)-[odd]-[Gun]
[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}).
@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}).
@cindex move mail
@findex gnus-summary-move-article
Move the article from one mail group to another
-(@code{gnus-summary-move-article}).
+(@code{gnus-summary-move-article}).
@item B c
@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}).
-@item B C
-@kindex B C (Summary)
+@item B B
+@kindex B B (Summary)
@cindex crosspost mail
@findex gnus-summary-crosspost-article
Crosspost the current article to some other group
@kindex C-c C-c (Article)
Edit the current article (@code{gnus-summary-edit-article}). To finish
editing and make the changes permanent, type @kbd{C-c C-c}
-(@kbd{gnus-summary-edit-article-done}).
+(@kbd{gnus-summary-edit-article-done}). If you give a prefix to the
+@kbd{C-c C-c} command, Gnus won't re-highlight the article.
@item B q
@kindex B q (Summary)
@findex gnus-summary-respool-query
If you want to re-spool an article, you might be curious as to what group
the article will end up in before you do the re-spooling. This command
-will tell you (@code{gnus-summary-respool-query}).
+will tell you (@code{gnus-summary-respool-query}).
+
+@item B t
+@kindex B t (Summary)
+@findex gnus-summary-respool-trace
+Similarly, this command will display all fancy splitting patterns used
+when repooling, if any (@code{gnus-summary-respool-trace}).
@item B p
@kindex B p (Summary)
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.
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)
@kindex M-s (Summary)
@findex gnus-summary-search-article-forward
Search through all subsequent articles for a regexp
-(@code{gnus-summary-search-article-forward}).
+(@code{gnus-summary-search-article-forward}).
@item M-r
@kindex M-r (Summary)
@findex gnus-summary-search-article-backward
Search through all previous articles for a regexp
-(@code{gnus-summary-search-article-backward}).
+(@code{gnus-summary-search-article-backward}).
@item &
@kindex & (Summary)
@findex gnus-summary-execute-command
This command will prompt you for a header field, a regular expression to
match on this field, and a command to be executed if the match is made
-(@code{gnus-summary-execute-command}).
+(@code{gnus-summary-execute-command}). If given a prefix, search
+backward instead.
@item M-&
@kindex M-& (Summary)
@findex gnus-summary-prepare
Regenerate the current summary buffer (@code{gnus-summary-prepare}).
-@item Y c
+@item Y c
@kindex Y c (Summary)
@findex gnus-summary-insert-cached-articles
Pull all cached articles (for the current group) into the summary buffer
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.
@code{nndoc} groups for each document, and then opening an
@code{nnvirtual} group on top of these @code{nndoc} groups. This
command understands the process/prefix convention
-(@pxref{Process/Prefix}).
+(@pxref{Process/Prefix}).
@item C-t
@kindex C-t (Summary)
@kindex = (Summary)
@findex gnus-summary-expand-window
Expand the summary buffer window (@code{gnus-summary-expand-window}).
-If given a prefix, force an @code{article} window configuration.
+If given a prefix, force an @code{article} window configuration.
+
+@item M-C-e
+@kindex M-C-e (Summary)
+@findex gnus-summary-edit-parameters
+Edit the group parameters (@pxref{Group Parameters}) of the current
+group (@code{gnus-summary-edit-parameters}).
@end table
@cindex exiting groups
Exiting from the summary buffer will normally update all info on the
-group and return you to the group buffer.
+group and return you to the group buffer.
@table @kbd
@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.
@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}).
@kindex Z n (Summary)
@findex gnus-summary-catchup-and-goto-next-group
Mark all articles as read and go to the next group
-(@code{gnus-summary-catchup-and-goto-next-group}).
+(@code{gnus-summary-catchup-and-goto-next-group}).
@item Z R
@kindex Z R (Summary)
@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.
@kindex Z N (Summary)
@findex gnus-summary-next-group
Exit the group and go to the next group
-(@code{gnus-summary-next-group}).
+(@code{gnus-summary-next-group}).
@item Z P
@kindex Z P (Summary)
@findex gnus-summary-prev-group
Exit the group and go to the previous group
-(@code{gnus-summary-prev-group}).
+(@code{gnus-summary-prev-group}).
@item Z s
@kindex Z s (Summary)
@vindex gnus-exit-group-hook
@code{gnus-exit-group-hook} is called when you exit the current
-group.
+group.
@findex gnus-summary-wake-up-the-dead
@findex gnus-dead-summary-mode
called @code{gnus-dead-summary-mode}. Now, if you switch back to this
buffer, you'll find that all keys are mapped to a function called
@code{gnus-summary-wake-up-the-dead}. So tapping any keys in a dead
-summary buffer will result in a live, normal summary buffer.
+summary buffer will result in a live, normal summary buffer.
-There will never be more than one dead summary buffer at any one time.
+There will never be more than one dead summary buffer at any one time.
@vindex gnus-use-cross-reference
The data on the current group will be updated (which articles you have
several groups (not cross-posting) is called @dfn{spamming}, and you are
by law required to send nasty-grams to anyone who perpetrates such a
heinous crime. You may want to try NoCeM handling to filter out spam
-(@pxref{NoCeM}).
+(@pxref{NoCeM}).
Remember: Cross-posting is kinda ok, but posting the same article
separately to several groups is not. Massive cross-posting (aka.
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
-reasons.
+approach may not work satisfactory for some users for various
+reasons.
@enumerate
-@item
+@item
The @sc{nntp} server may fail to generate the @code{Xref} header. This
is evil and not very common.
-@item
+@item
The @sc{nntp} server may fail to include the @code{Xref} header in the
@file{.overview} data bases. This is evil and all too common, alas.
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
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
@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
-suppression list. The default is 10000.
+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
(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
(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
@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
@table @code
@item empty
Remove all empty headers.
-@item newsgroups
-Remove the @code{Newsgroups} header if it only contains the current group
-name.
@item followup-to
Remove the @code{Followup-To} header if it is identical to the
@code{Newsgroups} header.
@item reply-to
Remove the @code{Reply-To} header if it lists the same address as the
@code{From} header.
+@item newsgroups
+Remove the @code{Newsgroups} header if it only contains the current group
+name.
@item date
Remove the @code{Date} header if the article is less than three days
-old.
+old.
+@item long-to
+Remove the @code{To} header if it is very long.
+@item many-to
+Remove all @code{To} headers if there are more than one.
@end table
-To include the four first elements, you could say something like;
+To include the four three elements, you could say something like;
@lisp
-(setq gnus-boring-article-headers
- '(empty newsgroups followup-to reply-to))
+(setq gnus-boring-article-headers
+ '(empty followup-to reply-to))
@end lisp
This is also the default value for this variable.
@findex metamail-buffer
Gnus handles @sc{mime} by pushing the articles through
@code{gnus-show-mime-method}, which is @code{metamail-buffer} by
-default. Set @code{gnus-show-mime} to @code{t} if you want to use
+default. This function calls the external @code{metamail} program to
+actually do the work. One common problem with this program is that is
+thinks that it can't display 8-bit things in the Emacs buffer. To tell
+it the truth, put something like the following in your
+@file{.bash_profile} file. (You do use @code{bash}, don't you?)
+
+@example
+export MM_CHARSET="iso-8859-1"
+@end example
+
+For more information on @code{metamail}, see its manual page.
+
+Set @code{gnus-show-mime} to @code{t} if you want to use
@sc{mime} all the time. However, if @code{gnus-strict-mime} is
non-@code{nil}, the @sc{mime} method will only be used if there are
@sc{mime} headers in the article. If you have @code{gnus-show-mime}
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
@vindex gnus-article-display-hook
The @code{gnus-article-display-hook} is called after the article has
been inserted into the article buffer. It is meant to handle all
-treatment of the article before it is displayed.
+treatment of the article before it is displayed.
@findex gnus-article-maybe-highlight
-By default this hook just contains @code{gnus-article-hide-headers},
-@code{gnus-article-treat-overstrike}, and
-@code{gnus-article-maybe-highlight}, but there are thousands, nay
+@findex gnus-article-maybe-hide-headers
+By default this hook just contains
+@code{gnus-article-maybe-hide-headers},
+@code{gnus-hide-boring-headers}, @code{gnus-article-treat-overstrike},
+and @code{gnus-article-maybe-highlight} (and under XEmacs,
+@code{gnus-article-display-x-face}), but there are thousands, nay
millions, of functions you can put in this hook. For an overview of
functions @pxref{Article Highlighting}, @pxref{Article Hiding},
@pxref{Article Washing}, @pxref{Article Buttons} and @pxref{Article
Date}. Note that the order of functions in this hook might affect
-things, so you may have to fiddle a bit to get the desired results.
+things, so you may have to fiddle a bit to get the desired results.
You can, of course, write your own functions. The functions are called
from the article buffer, and you can do anything you like, pretty much.
@kindex C-c ^ (Article)
@findex gnus-article-refer-article
If point is in the neighborhood of a @code{Message-ID} and you press
-@kbd{r}, Gnus will try to get that article from the server
+@kbd{C-c ^}, Gnus will try to get that article from the server
(@code{gnus-article-refer-article}).
@item C-c C-m
@kindex ? (Article)
@findex gnus-article-describe-briefly
Give a very brief description of the available keystrokes
-(@code{gnus-article-describe-briefly}).
+(@code{gnus-article-describe-briefly}).
@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
@item gnus-article-mode-syntax-table
@vindex gnus-article-mode-syntax-table
Syntax table used in article buffers. It is initialized from
-@code{text-mode-syntax-table}.
+@code{text-mode-syntax-table}.
@vindex gnus-article-mode-line-format
@item gnus-article-mode-line-format
This variable is a format string along the same lines as
-@code{gnus-summary-mode-line-format}. It accepts the same
-format specifications as that variable, with one extension:
+@code{gnus-summary-mode-line-format} (@pxref{Mode Line Formatting}). It
+accepts the same format specifications as that variable, with one
+extension:
@table @samp
@item w
The @dfn{wash status} of the article. This is a short string with one
character for each possible article wash operation that may have been
-performed.
+performed.
@end table
@vindex gnus-break-pages
@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
@node Composing Messages
@chapter Composing Messages
+@cindex composing messages
+@cindex messages
+@cindex mail
+@cindex sending mail
@cindex reply
@cindex followup
@cindex post
article using the foreign server, you can give a prefix to @kbd{C-c C-c}
to make Gnus try to post using the foreign server.
-@menu
+@menu
* Mail:: Mailing and replying.
* Post:: Posting and following up.
* Posting Server:: What server should you post via?
* Mail and Post:: Mailing and posting at the same time.
* Archived Messages:: Where Gnus stores the messages you've sent.
-@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?
+* Posting Styles:: An easier way to specify who you are.
+* Drafts:: Postponing messages and rejected messages.
+* Rejected Articles:: What happens if the server doesn't like your article?
@end menu
Also see @pxref{Canceling and Superseding} for information on how to
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
the ``current'' server for posting.
If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command,
-Gnus will prompt you for what method to use for posting.
+Gnus will prompt you for what method to use for posting.
You can also set @code{gnus-post-method} to a list of select methods.
If that's the case, Gnus will always prompt you for what method to use
-for posting.
+for posting.
+
+Finally, if you want to always post using the same select method as
+you're reading from (which might be convenient if you're reading lots of
+groups from different private servers), you can set this variable to
+@code{current}.
@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
@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.
@cindex ispell
@findex ispell-message
@lisp
-(add-hook 'message-send-hook 'ispell-message)
+(add-hook 'message-send-hook 'ispell-message)
@end lisp
@lisp
(nnfolder "archive"
- (nnfolder-directory "~/Mail/archive/"))
+ (nnfolder-directory "~/Mail/archive")
+ (nnfolder-active-file "~/Mail/archive/active")
+ (nnfolder-get-new-mail nil)
+ (nnfolder-inhibit-expiry t))
@end lisp
You can, however, use any mail select method (@code{nnml},
@lisp
(setq gnus-message-archive-method
- '(nnfolder "archive"
+ '(nnfolder "archive"
(nnfolder-inhibit-expiry t)
(nnfolder-active-file "~/News/sent-mail/active")
(nnfolder-directory "~/News/sent-mail/")))
@cindex Gcc
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.
+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
Save to different groups based on what group you are in:
@lisp
-(setq gnus-message-archive-group
+(setq gnus-message-archive-group
'(("^alt" "sent-to-alt")
("mail" "sent-to-mail")
(".*" "sent-to-misc")))
More complex stuff:
@lisp
-(setq gnus-message-archive-group
+(setq gnus-message-archive-group
'((if (message-news-p)
- "misc-news"
+ "misc-news"
"misc-mail")))
-@end lisp
+@end lisp
How about storing all news messages in one file, but storing all mail
messages in one file per month:
@lisp
(setq gnus-message-archive-group
'((if (message-news-p)
- "misc-news"
- (concat "mail." (format-time-string
+ "misc-news"
+ (concat "mail." (format-time-string
"%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
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
+@item gnus-outgoing-message-group
+@vindex gnus-outgoing-message-group
All outgoing messages will be put in this group. If you want to store
all your outgoing mail and articles in the group @samp{nnml:archive},
you set this variable to that value. This variable can also be a list of
@end table
-@c @node Posting Styles
-@c @section Posting Styles
-@c @cindex posting styles
-@c @cindex styles
-@c
-@c All them variables, they make my head swim.
-@c
-@c So what if you want a different @code{Organization} and signature based
-@c on what groups you post to? And you post both from your home machine
-@c and your work machine, and you want different @code{From} lines, and so
-@c on?
-@c
-@c @vindex gnus-posting-styles
-@c One way to do stuff like that is to write clever hooks that change the
-@c variables you need to have changed. That's a bit boring, so somebody
-@c came up with the bright idea of letting the user specify these things in
-@c a handy alist. Here's an example of a @code{gnus-posting-styles}
-@c variable:
-@c
-@c @lisp
-@c ((".*"
-@c (signature . "Peace and happiness")
-@c (organization . "What me?"))
-@c ("^comp"
-@c (signature . "Death to everybody"))
-@c ("comp.emacs.i-love-it"
-@c (organization . "Emacs is it")))
-@c @end lisp
-@c
-@c As you might surmise from this example, this alist consists of several
-@c @dfn{styles}. Each style will be applicable if the first element
-@c ``matches'', in some form or other. The entire alist will be iterated
-@c over, from the beginning towards the end, and each match will be
-@c applied, which means that attributes in later styles that match override
-@c the same attributes in earlier matching styles. So
-@c @samp{comp.programming.literate} will have the @samp{Death to everybody}
-@c signature and the @samp{What me?} @code{Organization} header.
-@c
-@c The first element in each style is called the @code{match}. If it's a
-@c string, then Gnus will try to regexp match it against the group name.
-@c If it's a function symbol, that function will be called with no
-@c arguments. If it's a variable symbol, then the variable will be
-@c referenced. If it's a list, then that list will be @code{eval}ed. In
-@c any case, if this returns a non-@code{nil} value, then the style is said
-@c to @dfn{match}.
-@c
-@c Each style may contain a arbitrary amount of @dfn{attributes}. Each
-@c attribute consists of a @var{(name . value)} pair. The attribute name
-@c can be one of @code{signature}, @code{organization} or @code{from}. The
-@c attribute name can also be a string. In that case, this will be used as
-@c a header name, and the value will be inserted in the headers of the
-@c article.
-@c
-@c The attribute value can be a string (used verbatim), a function (the
-@c return value will be used), a variable (its value will be used) or a
-@c list (it will be @code{eval}ed and the return value will be used).
-@c
-@c So here's a new example:
-@c
-@c @lisp
-@c (setq gnus-posting-styles
-@c '((".*"
-@c (signature . "~/.signature")
-@c (from . "user@@foo (user)")
-@c ("X-Home-Page" . (getenv "WWW_HOME"))
-@c (organization . "People's Front Against MWM"))
-@c ("^rec.humor"
-@c (signature . my-funny-signature-randomizer))
-@c ((equal (system-name) "gnarly")
-@c (signature . my-quote-randomizer))
-@c (posting-from-work-p
-@c (signature . "~/.work-signature")
-@c (from . "user@@bar.foo (user)")
-@c (organization . "Important Work, Inc"))
-@c ("^nn.+:"
-@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 Posting Styles
+@section Posting Styles
+@cindex posting styles
+@cindex styles
+
+All them variables, they make my head swim.
+
+So what if you want a different @code{Organization} and signature based
+on what groups you post to? And you post both from your home machine
+and your work machine, and you want different @code{From} lines, and so
+on?
+
+@vindex gnus-posting-styles
+One way to do stuff like that is to write clever hooks that change the
+variables you need to have changed. That's a bit boring, so somebody
+came up with the bright idea of letting the user specify these things in
+a handy alist. Here's an example of a @code{gnus-posting-styles}
+variable:
+
+@lisp
+((".*"
+ (signature "Peace and happiness")
+ (organization "What me?"))
+ ("^comp"
+ (signature "Death to everybody"))
+ ("comp.emacs.i-love-it"
+ (organization "Emacs is it")))
+@end lisp
+
+As you might surmise from this example, this alist consists of several
+@dfn{styles}. Each style will be applicable if the first element
+``matches'', in some form or other. The entire alist will be iterated
+over, from the beginning towards the end, and each match will be
+applied, which means that attributes in later styles that match override
+the same attributes in earlier matching styles. So
+@samp{comp.programming.literate} will have the @samp{Death to everybody}
+signature and the @samp{What me?} @code{Organization} header.
+
+The first element in each style is called the @code{match}. If it's a
+string, then Gnus will try to regexp match it against the group name.
+If it's a function symbol, that function will be called with no
+arguments. If it's a variable symbol, then the variable will be
+referenced. If it's a list, then that list will be @code{eval}ed. In
+any case, if this returns a non-@code{nil} value, then the style is said
+to @dfn{match}.
+
+Each style may contain a arbitrary amount of @dfn{attributes}. Each
+attribute consists of a @var{(name . value)} pair. The attribute name
+can be one of @code{signature}, @code{signature-file},
+@code{organization}, @code{address} or @code{name}. The attribute name
+can also be a string. In that case, this will be used as a header name,
+and the value will be inserted in the headers of the article.
+
+The attribute value can be a string (used verbatim), a function (the
+return value will be used), a variable (its value will be used) or a
+list (it will be @code{eval}ed and the return value will be used).
+
+So here's a new example:
+
+@lisp
+(setq gnus-posting-styles
+ '((".*"
+ (signature-file "~/.signature")
+ (name "User Name")
+ ("X-Home-Page" (getenv "WWW_HOME"))
+ (organization "People's Front Against MWM"))
+ ("^rec.humor"
+ (signature my-funny-signature-randomizer))
+ ((equal (system-name) "gnarly")
+ (signature my-quote-randomizer))
+ (posting-from-work-p
+ (signature-file "~/.work-signature")
+ (address "user@@bar.foo")
+ (organization "Important Work, Inc"))
+ ("^nn.+:"
+ (signature-file "~/.mail-signature"))))
+@end lisp
+
+
+@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)
@c (@code{gnus-dissociate-buffer-from-draft}) command does that for you.
@c If you change your mind and want to turn the auto-saving back on again,
@c @kbd{C-c C-d} (@code{gnus-associate-buffer-with-draft} does that.
-@c
+@c
@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
+@c @code{gnus-use-draft} to @code{nil}. It is @code{t} by default.
+
+@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.
* 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
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.
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
@table @samp
-@item h
+@item h
How the news is fetched---the backend name.
@item n
@vindex gnus-server-mode-line-format
The mode line can also be customized by using the
-@code{gnus-server-mode-line-format} variable. The following specs are
-understood:
+@code{gnus-server-mode-line-format} variable (@pxref{Mode Line
+Formatting}). The following specs are understood:
@table @samp
@item S
@findex gnus-server-scan-server
Request that the server scan its sources for new articles
(@code{gnus-server-scan-server}). This is mainly sensible with mail
-servers.
+servers.
@item g
@kindex g (Server)
@node Example Methods
@subsection Example Methods
-Most select methods are pretty simple and self-explanatory:
+Most select methods are pretty simple and self-explanatory:
@lisp
(nntp "news.funet.fi")
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.
+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
@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/"))
Here's the method for a public spool:
@lisp
-(nnmh "public"
- (nnmh-directory "/usr/information/spool/")
+(nnmh "public"
+ (nnmh-directory "/usr/information/spool/")
(nnmh-get-new-mail nil))
@end lisp
("telnet" "the.real.nntp.host" "nntp")))
@end lisp
+If you want to use the wonderful @code{ssh} program to provide a
+compressed connection over the modem line, you could create a virtual
+server that would look something like this:
+
+@lisp
+(nntp "news"
+ (nntp-address "copper.uio.no")
+ (nntp-rlogin-program "ssh")
+ (nntp-open-connection-function nntp-open-rlogin)
+ (nntp-end-of-line "\n")
+ (nntp-rlogin-parameters
+ ("telnet" "news.uio.no" "nntp")))
+@end lisp
+
+This means that you have to have set up @code{ssh-agent} correctly to
+provide automatic authorization, of course. And to get a compressed
+connection, you have to have the @samp{Compression} option in the
+@code{ssh} @file{config} file.
@node Creating a Virtual Server
manual, but here's an example @code{nnml} definition:
@lisp
-(nnml "public"
+(nnml "public"
(nnml-directory "~/my-mail/")
(nnml-active-file "~/my-mail/active")
(nnml-newsgroups-file "~/my-mail/newsgroups"))
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''.
@kindex D (Server)
@findex gnus-server-deny-server
Mark the current server as unreachable
-(@code{gnus-server-deny-server}).
+(@code{gnus-server-deny-server}).
@item M-o
@kindex M-o (Server)
@findex gnus-server-open-all-servers
Open the connections to all servers in the buffer
-(@code{gnus-server-open-all-servers}).
+(@code{gnus-server-open-all-servers}).
@item M-c
@kindex M-c (Server)
@findex gnus-server-close-all-servers
Close the connections to all servers in the buffer
-(@code{gnus-server-close-all-servers}).
+(@code{gnus-server-close-all-servers}).
@item R
@kindex R (Server)
@findex gnus-server-remove-denials
-Remove all marks to whether Gnus was denied connection from all servers
-(@code{gnus-server-remove-denials}).
+Remove all marks to whether Gnus was denied connection from any servers
+(@code{gnus-server-remove-denials}).
@end table
you feel like. There will be no name collisions.
The following variables can be used to create a virtual @code{nntp}
-server:
+server:
@table @code
@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.
-
-@item nntp-authinfo-function
-@vindex nntp-authinfo-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
+@findex nntp-send-authinfo
+@vindex nntp-authinfo-file
This function will be used to send @samp{AUTHINFO} to the @sc{nntp}
-server. Available functions include:
+server. The default function is @code{nntp-send-authinfo}, which looks
+through your @file{~/.authinfo} (or whatever you've set the
+@code{nntp-authinfo-file} variable to) for applicable entries. If none
+are found, it will prompt you for a login name and a password. The
+format of the @file{~/.authinfo} file is (almost) the same as the
+@code{ftp} @file{~/.netrc} file, which is defined in the @code{ftp}
+manual page, but here are the salient facts:
-@table @code
-@item nntp-send-authinfo
-@findex nntp-send-authinfo
-This function will used you current login name as the user name and will
-prompt you for the password. This is the default.
+@enumerate
+@item
+The file contains one or more line, each of which define one server.
+
+@item
+Each line may contain an arbitrary number of token/value pairs. The
+valid tokens include @samp{machine}, @samp{login}, @samp{password},
+@samp{default} and @samp{force}. (The latter is not a valid
+@file{.netrc}/@code{ftp} token, which is the only way the
+@file{.authinfo} file format deviates from the @file{.netrc} file
+format.)
+
+@end enumerate
-@item nntp-send-nosy-authinfo
-@findex nntp-send-nosy-authinfo
-This function will prompt you for both user name and password.
+Here's an example file:
-@item nntp-send-authinfo-from-file
-@findex nntp-send-authinfo-from-file
-This function will use your current login name as the user name and will
-read the @sc{nntp} password from @file{~/.nntp-authinfo}.
-@end table
+@example
+machine news.uio.no login larsi password geheimnis
+machine nntp.ifi.uio.no login larsi force yes
+@end example
+
+The token/value pairs may appear in any order; @samp{machine} doesn't
+have to be first, for instance.
+
+In this example, both login name and password have been supplied for the
+former server, while the latter has only the login name listed, and the
+user will be prompted for the password. The latter also has the
+@samp{force} tag, which means that the authinfo will be sent to the
+@var{nntp} server upon connection; the default (i.e., when there is not
+@samp{force} tag) is to not send authinfo to the @var{nntp} server
+until the @var{nntp} server asks for it.
+
+You can also add @samp{default} lines that will apply to all servers
+that don't have matching @samp{machine} lines.
+
+@example
+default force yes
+@end example
-@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 will force sending @samp{AUTHINFO} commands to all servers not
+previously mentioned.
+
+Remember to not leave the @file{~/.authinfo} file world-readable.
+
+@item nntp-server-action-alist
+@vindex nntp-server-action-alist
+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:
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
-nntpd 1.5.11t, since that command chokes that server, I've been told.
+nntpd 1.5.11t, since that command chokes that server, I've been told.
@item nntp-maximum-request
@vindex nntp-maximum-request
by the @code{nntp-maximum-request} variable, and is 400 by default. If
your network is buggy, you should set this to 1.
-@item nntp-connection-timeout
-@vindex nntp-connection-timeout
-If you have lots of foreign @code{nntp} groups that you connect to
-regularly, you're sure to have problems with @sc{nntp} servers not
-responding properly, or being too loaded to reply within reasonable
-time. This is can lead to awkward problems, which can be helped
-somewhat by setting @code{nntp-connection-timeout}. This is an integer
-that says how many seconds the @code{nntp} backend should wait for a
-connection before giving up. If it is @code{nil}, which is the default,
-no timeouts are done.
-
-@item nntp-command-timeout
-@vindex nntp-command-timeout
-@cindex PPP connections
-@cindex dynamic IP addresses
-If you're running Gnus on a machine that has a dynamically assigned
-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
-the command. This should hopefully be transparent to the user. A
-likely number is 30 seconds.
-
-@item nntp-retry-on-break
-@vindex nntp-retry-on-break
-If this variable is non-@code{nil}, you can also @kbd{C-g} if Gnus
-hangs. This will have much the same effect as the command timeout
-described above.
+@c @item nntp-connection-timeout
+@c @vindex nntp-connection-timeout
+@c If you have lots of foreign @code{nntp} groups that you connect to
+@c regularly, you're sure to have problems with @sc{nntp} servers not
+@c responding properly, or being too loaded to reply within reasonable
+@c time. This is can lead to awkward problems, which can be helped
+@c somewhat by setting @code{nntp-connection-timeout}. This is an integer
+@c that says how many seconds the @code{nntp} backend should wait for a
+@c connection before giving up. If it is @code{nil}, which is the default,
+@c no timeouts are done.
+@c
+@c @item nntp-command-timeout
+@c @vindex nntp-command-timeout
+@c @cindex PPP connections
+@c @cindex dynamic IP addresses
+@c If you're running Gnus on a machine that has a dynamically assigned
+@c address, Gnus may become confused. If the address of your machine
+@c changes after connecting to the @sc{nntp} server, Gnus will simply sit
+@c waiting forever for replies from the server. To help with this
+@c unfortunate problem, you can set this command to a number. Gnus will
+@c then, if it sits waiting for a reply from the server longer than that
+@c number of seconds, shut down the connection, start a new one, and resend
+@c the command. This should hopefully be transparent to the user. A
+@c likely number is 30 seconds.
+@c
+@c @item nntp-retry-on-break
+@c @vindex nntp-retry-on-break
+@c If this variable is non-@code{nil}, you can also @kbd{C-g} if Gnus
+@c hangs. This will have much the same effect as the command timeout
+@c described above.
@item nntp-server-hook
@vindex nntp-server-hook
@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. 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
-two are @code{nntp-open-rlogin}, which does an @samp{rlogin} on the
+This function is used to connect to the remote system. Four pre-made
+functions are supplied:
+
+@table @code
+@item nntp-open-network-stream
+This is the default, and simply connects to some port or other on the
+remote system.
+
+@item nntp-open-rlogin
+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.
+available there.
@code{nntp-open-rlogin}-related variables:
@table @code
+@item nntp-rlogin-program
+@vindex nntp-rlogin-program
+Program used to log in on remote machines. The default is @samp{rsh},
+but @samp{ssh} is a popular alternative.
+
@item nntp-rlogin-parameters
@vindex nntp-rlogin-parameters
This list will be used as the parameter list given to @code{rsh}.
@end table
+@item nntp-open-telnet
+Does a @samp{telnet} to the remote system and then another @samp{telnet}
+to get to the @sc{nntp} server.
+
@code{nntp-open-telnet}-related variables:
@table @code
@item nntp-telnet-command
@vindex nntp-telnet-command
-Command used to start @samp{telnet}.
+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 telnet command.
+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 to log in on the remote system as.
+User name for log in on the remote system.
@item nntp-telnet-passwd
@vindex nntp-telnet-passwd
@item nntp-telnet-parameters
@vindex nntp-telnet-parameters
-A list of strings that will be executed as a command after logging in
-via telnet.
+A list of strings executed as a command after logging in
+via @code{telnet}.
+
+@item nntp-telnet-shell-prompt
+@vindex nntp-telnet-shell-prompt
+Regexp matching the shell prompt on the remote machine. The default is
+@samp{bash\\|\$ *\r?$\\|> *\r?}.
+
+@item nntp-open-telnet-envuser
+@vindex nntp-open-telnet-envuser
+If non-@code{nil}, the @code{telnet} session (client and server both)
+will support the @code{ENVIRON} option and not prompt for login name.
+This works for Solaris @code{telnet}, for instance.
+
+@end table
+
+@findex nntp-open-ssl-stream
+@item nntp-open-ssl-stream
+Opens a connection to a server over a @dfn{secure} channel. To use this
+you must have SSLay installed
+(@file{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}, and you also need
+@file{ssl.el} (from the W3 distributeion, for instance). You then
+define a server as follows:
+
+@lisp
+;; Type `C-c C-c' after you've finished editing.
+;;
+;; "snews" is port 563 and is predefined in our /etc/services
+;;
+(nntp "snews.bar.com"
+ (nntp-open-connection-function nntp-open-ssl-stream)
+ (nntp-port-number "snews")
+ (nntp-address "snews.bar.com"))
+@end lisp
@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.
@item nntp-rlogin-user-name
@vindex nntp-rlogin-user-name
User name on the remote system when using the @code{rlogin} connect
-function.
+function.
@item nntp-address
@vindex nntp-address
@vindex nntp-buggy-select
Set this to non-@code{nil} if your select routine is buggy.
-@item nntp-nov-is-evil
-@vindex nntp-nov-is-evil
+@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")}.
+"XOVERVIEW")}.
@item nntp-nov-gap
@vindex nntp-nov-gap
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
If this variable is non-@code{nil}, some noise will be made when a
server closes connection.
+@item nntp-record-commands
+@vindex nntp-record-commands
+If non-@code{nil}, @code{nntp} will log all commands it sends to the
+@sc{nntp} server (along with a timestep) in the @samp{*nntp-log*}
+buffer. This is useful if you are debugging a Gnus/@sc{nntp} connection
+that doesn't seem to work.
+
@end table
Subscribing to a foreign group from the local spool is extremely easy,
and might be useful, for instance, to speed up reading groups that
contain very big articles---@samp{alt.binaries.pictures.furniture}, for
-instance.
+instance.
-Anyways, you just specify @code{nnspool} as the method and @samp{} (or
+Anyways, you just specify @code{nnspool} as the method and @code{""} (or
anything else) as the address.
If you have access to a local spool, you should probably use that as the
@item nnspool-inews-switches
@vindex nnspool-inews-switches
-Parameters given to the inews program when posting an article.
+Parameters given to the inews program when posting an article.
@item nnspool-spool-directory
@vindex nnspool-spool-directory
Where @code{nnspool} looks for the articles. This is normally
@file{/usr/spool/news/}.
-@item nnspool-nov-directory
-@vindex nnspool-nov-directory
+@item nnspool-nov-directory
+@vindex nnspool-nov-directory
Where @code{nnspool} will look for @sc{nov} files. This is normally
@file{/usr/spool/news/over.view/}.
@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
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
@lisp
(setq nnmail-split-methods
'(("junk" "^From:.*Lars Ingebrigtsen")
- ("crazy" "^Subject:.*die\\|^Organization:.*flabby")
- ("other" "")))
+ ("crazy" "^Subject:.*die\\|^Organization:.*flabby")
+ ("other" "")))
@end lisp
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
these lists is the name of the mail group (they do not have to be called
something beginning with @samp{mail}, by the way), and the second
element is a regular expression used on the header of each mail to
-determine if it belongs in this mail group.
+determine if it belongs in this mail group. The first string may
+contain @samp{\\1} forms, like the ones used by @code{replace-match} to
+insert sub-expressions from the matched text. For instance:
-If the first element is the special symbol @code{junk}, then messages
-that match the regexp will disappear into the aether. Use with
-extreme caution.
+@lisp
+("list.\\1" "From:.*\\(.*\\)-list@@majordomo.com")
+@end lisp
The second element can also be a function. In that case, it will be
called narrowed to the headers with the first element of the rule as the
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.
@cindex crosspost
@cindex links
@code{nnmh} and @code{nnml} makes crossposts by creating hard links to
-