*** empty log message ***
[gnus] / texi / gnus.texi
1 \input texinfo                  @c -*-texinfo-*-
2
3 @setfilename gnus
4 @settitle Gnus 5.6.42 Manual
5 @synindex fn cp
6 @synindex vr cp
7 @synindex pg cp
8 @c @direntry
9 @c * Gnus: (gnus).         The newsreader Gnus.
10 @c @end direntry
11 @iftex
12 @finalout
13 @end iftex
14 @setchapternewpage odd
15
16 @iftex
17 @iflatex
18 \documentclass[twoside,a4paper,openright,11pt]{book}
19 \usepackage[latin1]{inputenc}
20 \usepackage{pagestyle}
21 \usepackage{epsfig}
22 \usepackage{bembo}
23 \usepackage{pixidx}
24
25 \makeindex
26 \begin{document}
27
28 \newcommand{\gnuschaptername}{}
29 \newcommand{\gnussectionname}{}
30
31 \newcommand{\gnusbackslash}{/}
32
33 \newcommand{\gnusxref}[1]{See ``#1'' on page \pageref{#1}}
34 \newcommand{\gnuspxref}[1]{see ``#1'' on page \pageref{#1}}
35
36 \newcommand{\gnuskindex}[1]{\index{#1}}
37 \newcommand{\gnusindex}[1]{\index{#1}}
38
39 \newcommand{\gnustt}[1]{{\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}}
40 \newcommand{\gnuscode}[1]{\gnustt{#1}}
41 \newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}''}
42 \newcommand{\gnuslisp}[1]{\gnustt{#1}}
43 \newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
44 \newcommand{\gnusfile}[1]{`\gnustt{#1}'}
45 \newcommand{\gnusdfn}[1]{\textit{#1}}
46 \newcommand{\gnusi}[1]{\textit{#1}}
47 \newcommand{\gnusstrong}[1]{\textbf{#1}}
48 \newcommand{\gnusemph}[1]{\textit{#1}}
49 \newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}}
50 \newcommand{\gnussc}[1]{\textsc{#1}}
51 \newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
52 \newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
53
54 \newcommand{\gnusbullet}{{${\bullet}$}}
55 \newcommand{\gnusdollar}{\$}
56 \newcommand{\gnusampersand}{\&}
57 \newcommand{\gnuspercent}{\%}
58 \newcommand{\gnushash}{\#}
59 \newcommand{\gnushat}{\symbol{"5E}}
60 \newcommand{\gnusunderline}{\symbol{"5F}}
61 \newcommand{\gnusnot}{$\neg$}
62 \newcommand{\gnustilde}{\symbol{"7E}}
63 \newcommand{\gnusless}{{$<$}}
64 \newcommand{\gnusgreater}{{$>$}}
65 \newcommand{\gnusbraceleft}{{$>$}}
66 \newcommand{\gnusbraceright}{{$>$}}
67
68 \newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head.eps,height=1cm}}}
69 \newcommand{\gnusinteresting}{
70 \marginpar[\mbox{}\hfill\gnushead]{\gnushead}
71 }
72
73 \newcommand{\gnuscleardoublepage}{\ifodd\count0\mbox{}\clearpage\thispagestyle{empty}\mbox{}\clearpage\else\clearpage\fi}
74
75 \newcommand{\gnuspagechapter}[1]{
76 {\mbox{}}
77 }
78
79 \newdimen{\gnusdimen}
80 \gnusdimen 0pt
81
82 \newcommand{\gnuschapter}[2]{
83 \gnuscleardoublepage
84 \ifdim \gnusdimen = 0pt\setcounter{page}{1}\pagestyle{gnus}\pagenumbering{arabic} \gnusdimen 1pt\fi
85 \chapter{#2}
86 \renewcommand{\gnussectionname}{}
87 \renewcommand{\gnuschaptername}{#2}
88 \thispagestyle{empty}
89 \hspace*{-2cm}
90 \begin{picture}(500,500)(0,0)
91 \put(480,350){\makebox(0,0)[tr]{#1}}
92 \put(40,300){\makebox(500,50)[bl]{{\Huge\bf{#2}}}}
93 \end{picture}
94 \clearpage
95 }
96
97 \newcommand{\gnusfigure}[3]{
98 \begin{figure}
99 \mbox{}\ifodd\count0\hspace*{-0.8cm}\else\hspace*{-3cm}\fi\begin{picture}(440,#2)
100 #3
101 \end{picture}
102 \caption{#1}
103 \end{figure}
104 }
105
106 \newcommand{\gnusicon}[1]{
107 \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}}}
108 }
109
110 \newcommand{\gnuspicon}[1]{
111 \margindex{\epsfig{figure=#1,width=2cm}}
112 }
113
114 \newcommand{\gnusxface}[2]{
115 \margindex{\epsfig{figure=#1,width=1cm}\epsfig{figure=#2,width=1cm}}
116 }
117
118 \newcommand{\gnussmiley}[2]{
119 \margindex{\makebox[2cm]{\hfill\epsfig{figure=#1,width=0.5cm}\hfill\epsfig{figure=#2,width=0.5cm}\hfill}}
120 }
121
122 \newcommand{\gnusitemx}[1]{\mbox{}\vspace*{-\itemsep}\vspace*{-\parsep}\item#1}
123
124 \newcommand{\gnussection}[1]{
125 \renewcommand{\gnussectionname}{#1}
126 \section{#1}
127 }
128
129 \newenvironment{codelist}%
130 {\begin{list}{}{
131 }
132 }{\end{list}}
133
134 \newenvironment{kbdlist}%
135 {\begin{list}{}{
136 \labelwidth=0cm
137 }
138 }{\end{list}}
139
140 \newenvironment{dfnlist}%
141 {\begin{list}{}{
142 }
143 }{\end{list}}
144
145 \newenvironment{stronglist}%
146 {\begin{list}{}{
147 }
148 }{\end{list}}
149
150 \newenvironment{samplist}%
151 {\begin{list}{}{
152 }
153 }{\end{list}}
154
155 \newenvironment{varlist}%
156 {\begin{list}{}{
157 }
158 }{\end{list}}
159
160 \newenvironment{emphlist}%
161 {\begin{list}{}{
162 }
163 }{\end{list}}
164
165 \newlength\gnusheadtextwidth
166 \setlength{\gnusheadtextwidth}{\headtextwidth}
167 \addtolength{\gnusheadtextwidth}{1cm}
168
169 \newpagestyle{gnuspreamble}%
170 {
171 {
172 \ifodd\count0
173 {
174 \hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\mbox{}}\textbf{\hfill\roman{page}}}
175 }
176 \else
177 {
178 \hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\roman{page}\hfill\mbox{}}}
179 }
180 }
181 \fi
182 }
183 }
184 {
185 \ifodd\count0
186 \mbox{} \hfill
187 \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
188 \else
189 \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
190 \hfill \mbox{}
191 \fi
192 }
193
194 \newpagestyle{gnusindex}%
195 {
196 {
197 \ifodd\count0
198 {
199 \hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\gnuschaptername\hfill\arabic{page}}}}
200 }
201 \else
202 {
203 \hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}
204 }
205 \fi
206 }
207 }
208 {
209 \ifodd\count0
210 \mbox{} \hfill
211 \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
212 \else
213 \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
214 \hfill \mbox{}
215 \fi
216 }
217
218 \newpagestyle{gnus}%
219 {
220 {
221 \ifodd\count0
222 {
223 \makebox[12cm]{\hspace*{3.1cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{chapter}.\arabic{section}} \textbf{\gnussectionname\hfill\arabic{page}}}}}
224 }
225 \else
226 {
227 \makebox[12cm]{\hspace*{-2.95cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}}
228 }
229 \fi
230 }
231 }
232 {
233 \ifodd\count0
234 \mbox{} \hfill
235 \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
236 \else
237 \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
238 \hfill \mbox{}
239 \fi
240 }
241
242 \pagenumbering{roman}
243 \pagestyle{gnuspreamble}
244
245 @end iflatex
246 @end iftex
247
248 @iftex
249 @iflatex
250 \begin{titlepage}
251 {
252
253 %\addtolength{\oddsidemargin}{-5cm}
254 %\addtolength{\evensidemargin}{-5cm}
255 \parindent=0cm
256 \addtolength{\textheight}{2cm}
257
258 \gnustitle{\gnustitlename}\\
259 \rule{15cm}{1mm}\\
260 \vfill
261 \hspace*{0cm}\epsfig{figure=ps/gnus-big-logo.eps,height=15cm}
262 \vfill
263 \rule{15cm}{1mm}\\
264 \gnusauthor{by Lars Magne Ingebrigtsen}
265 \newpage
266 }
267
268 \mbox{}
269 \vfill
270
271 \thispagestyle{empty}
272
273 Copyright \copyright{} 1995,96,97 Free Software Foundation, Inc.
274
275 Permission is granted to make and distribute verbatim copies of
276 this manual provided the copyright notice and this permission notice
277 are preserved on all copies.
278
279 Permission is granted to copy and distribute modified versions of this
280 manual under the conditions for verbatim copying, provided that the
281 entire resulting derived work is distributed under the terms of a
282 permission notice identical to this one.
283
284 Permission is granted to copy and distribute translations of this manual
285 into another language, under the above conditions for modified versions.
286
287 \newpage
288 \end{titlepage}
289 @end iflatex
290 @end iftex
291
292 @ifinfo
293
294 This file documents Gnus, the GNU Emacs newsreader.
295
296 Copyright (C) 1995,96 Free Software Foundation, Inc.
297
298 Permission is granted to make and distribute verbatim copies of
299 this manual provided the copyright notice and this permission notice
300 are preserved on all copies.
301
302 @ignore
303 Permission is granted to process this file through Tex and print the
304 results, provided the printed document carries copying permission
305 notice identical to this one except for the removal of this paragraph
306 (this paragraph not being relevant to the printed manual).
307
308 @end ignore
309 Permission is granted to copy and distribute modified versions of this
310 manual under the conditions for verbatim copying, provided also that the
311 entire resulting derived work is distributed under the terms of a
312 permission notice identical to this one.
313
314 Permission is granted to copy and distribute translations of this manual
315 into another language, under the above conditions for modified versions.
316 @end ifinfo
317
318 @tex
319
320 @titlepage
321 @title Gnus 5.6.42 Manual
322
323 @author by Lars Magne Ingebrigtsen
324 @page
325
326 @vskip 0pt plus 1filll
327 Copyright @copyright{} 1995,96,97 Free Software Foundation, Inc.
328
329 Permission is granted to make and distribute verbatim copies of
330 this manual provided the copyright notice and this permission notice
331 are preserved on all copies.
332
333 Permission is granted to copy and distribute modified versions of this
334 manual under the conditions for verbatim copying, provided that the
335 entire resulting derived work is distributed under the terms of a
336 permission notice identical to this one.
337
338 Permission is granted to copy and distribute translations of this manual
339 into another language, under the above conditions for modified versions.
340
341 @end titlepage
342 @page
343
344 @end tex
345
346
347 @node Top
348 @top The Gnus Newsreader
349
350 @ifinfo
351
352 You can read news (and mail) from within Emacs by using Gnus.  The news
353 can be gotten by any nefarious means you can think of---@sc{nntp}, local
354 spool or your mbox file.  All at the same time, if you want to push your
355 luck.
356
357 This manual corresponds to Gnus 5.6.42.
358
359 @end ifinfo
360
361 @iftex
362
363 @iflatex
364 \tableofcontents
365 \gnuscleardoublepage
366 @end iflatex
367
368 Gnus is the advanced, self-documenting, customizable, extensible
369 unreal-time newsreader for GNU Emacs.
370
371 Oops.  That sounds oddly familiar, so let's start over again to avoid
372 being accused of plagiarism:
373
374 Gnus is a message-reading laboratory.  It will let you look at just
375 about anything as if it were a newsgroup.  You can read mail with it,
376 you can browse directories with it, you can @code{ftp} with it---you can
377 even read news with it!
378
379 Gnus tries to empower people who read news the same way Emacs empowers
380 people who edit text.  Gnus sets no limits to what the user should be
381 allowed to do.  Users are encouraged to extend Gnus to make it behave
382 like they want it to behave.  A program should not control people;
383 people should be empowered to do what they want by using (or abusing)
384 the program.
385
386 @end iftex
387
388
389 @menu
390 * Starting Up::           Finding news can be a pain.
391 * The Group Buffer::      Selecting, subscribing and killing groups.
392 * The Summary Buffer::    Reading, saving and posting articles.
393 * The Article Buffer::    Displaying and handling articles.
394 * Composing Messages::    Information on sending mail and news.
395 * Select Methods::        Gnus reads all messages from various select methods.
396 * Scoring::               Assigning values to articles.
397 * Various::               General purpose settings.
398 * The End::               Farewell and goodbye.
399 * Appendices::            Terminology, Emacs intro, FAQ, History, Internals.
400 * Index::                 Variable, function and concept index.
401 * Key Index::             Key Index.
402 @end menu
403
404 @node Starting Up
405 @chapter Starting Gnus
406 @cindex starting up
407
408 @kindex M-x gnus
409 @findex gnus
410 If your system administrator has set things up properly, starting Gnus
411 and reading news is extremely easy---you just type @kbd{M-x gnus} in
412 your Emacs.
413
414 @findex gnus-other-frame
415 @kindex M-x gnus-other-frame
416 If you want to start Gnus in a different frame, you can use the command
417 @kbd{M-x gnus-other-frame} instead.
418
419 If things do not go smoothly at startup, you have to twiddle some
420 variables in your @file{~/.gnus} file.  This file is similar to
421 @file{~/.emacs}, but is read when gnus starts.
422
423 If you puzzle at any terms used in this manual, please refer to the
424 terminology section (@pxref{Terminology}).
425
426 @menu
427 * Finding the News::    Choosing a method for getting news.
428 * The First Time::      What does Gnus do the first time you start it?
429 * The Server is Down::  How can I read my mail then?
430 * Slave Gnusae::        You can have more than one Gnus active at a time.
431 * Fetching a Group::    Starting Gnus just to read a group.
432 * New Groups::          What is Gnus supposed to do with new groups?
433 * Startup Files::       Those pesky startup files---@file{.newsrc}.
434 * Auto Save::           Recovering from a crash.
435 * The Active File::     Reading the active file over a slow line Takes Time.
436 * Changing Servers::    You may want to move from one server to another.
437 * Startup Variables::   Other variables you might change.
438 @end menu
439
440
441 @node Finding the News
442 @section Finding the News
443 @cindex finding news
444
445 @vindex gnus-select-method
446 @c @head
447 The @code{gnus-select-method} variable says where Gnus should look for
448 news.  This variable should be a list where the first element says
449 @dfn{how} and the second element says @dfn{where}.  This method is your
450 native method.  All groups not fetched with this method are
451 foreign groups.
452
453 For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where
454 you want to get your daily dosage of news from, you'd say:
455
456 @lisp
457 (setq gnus-select-method '(nntp "news.somewhere.edu"))
458 @end lisp
459
460 If you want to read directly from the local spool, say:
461
462 @lisp
463 (setq gnus-select-method '(nnspool ""))
464 @end lisp
465
466 If you can use a local spool, you probably should, as it will almost
467 certainly be much faster.
468
469 @vindex gnus-nntpserver-file
470 @cindex NNTPSERVER
471 @cindex @sc{nntp} server
472 If this variable is not set, Gnus will take a look at the
473 @code{NNTPSERVER} environment variable.  If that variable isn't set,
474 Gnus will see whether @code{gnus-nntpserver-file}
475 (@file{/etc/nntpserver} by default) has any opinions on the matter.  If
476 that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server.  That's a long shot, though.
477
478 @vindex gnus-nntp-server
479 If @code{gnus-nntp-server} is set, this variable will override
480 @code{gnus-select-method}.  You should therefore set
481 @code{gnus-nntp-server} to @code{nil}, which is what it is by default.
482
483 @vindex gnus-secondary-servers
484 You can also make Gnus prompt you interactively for the name of an
485 @sc{nntp} server.  If you give a non-numerical prefix to @code{gnus}
486 (i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
487 in the @code{gnus-secondary-servers} list (if any).  You can also just
488 type in the name of any server you feel like visiting.
489
490 @findex gnus-group-browse-foreign-server
491 @kindex B (Group)
492 However, if you use one @sc{nntp} server regularly and are just
493 interested in a couple of groups from a different server, you would be
494 better served by using the @kbd{B} command in the group buffer.  It will
495 let you have a look at what groups are available, and you can subscribe
496 to any of the groups you want to.  This also makes @file{.newsrc}
497 maintenance much tidier.  @xref{Foreign Groups}.
498
499 @vindex gnus-secondary-select-methods
500 @c @head
501 A slightly different approach to foreign groups is to set the
502 @code{gnus-secondary-select-methods} variable.  The select methods
503 listed in this variable are in many ways just as native as the
504 @code{gnus-select-method} server.  They will also be queried for active
505 files during startup (if that's required), and new newsgroups that
506 appear on these servers will be subscribed (or not) just as native
507 groups are.
508
509 For instance, if you use the @code{nnmbox} backend to read your mail, you
510 would typically set this variable to
511
512 @lisp
513 (setq gnus-secondary-select-methods '((nnmbox "")))
514 @end lisp
515
516
517 @node The First Time
518 @section The First Time
519 @cindex first time usage
520
521 If no startup files exist, Gnus will try to determine what groups should
522 be subscribed by default.
523
524 @vindex gnus-default-subscribed-newsgroups
525 If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
526 will subscribe you to just those groups in that list, leaving the rest
527 killed.  Your system administrator should have set this variable to
528 something useful.
529
530 Since she hasn't, Gnus will just subscribe you to a few arbitrarily
531 picked groups (i.e., @samp{*.newusers}).  (@dfn{Arbitrary} is defined
532 here as @dfn{whatever Lars thinks you should read}.)
533
534 You'll also be subscribed to the Gnus documentation group, which should
535 help you with most common problems.
536
537 If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
538 use the normal functions for handling new groups, and not do anything
539 special.
540
541
542 @node The Server is Down
543 @section The Server is Down
544 @cindex server errors
545
546 If the default server is down, Gnus will understandably have some
547 problems starting.  However, if you have some mail groups in addition to
548 the news groups, you may want to start Gnus anyway.
549
550 Gnus, being the trusting sort of program, will ask whether to proceed
551 without a native select method if that server can't be contacted.  This
552 will happen whether the server doesn't actually exist (i.e., you have
553 given the wrong address) or the server has just momentarily taken ill
554 for some reason or other.  If you decide to continue and have no foreign
555 groups, you'll find it difficult to actually do anything in the group
556 buffer.  But, hey, that's your problem.  Blllrph!
557
558 @findex gnus-no-server
559 @kindex M-x gnus-no-server
560 @c @head
561 If you know that the server is definitely down, or you just want to read
562 your mail without bothering with the server at all, you can use the
563 @code{gnus-no-server} command to start Gnus.  That might come in handy
564 if you're in a hurry as well.  This command will not attempt to contact
565 your primary server---instead, it will just activate all groups on level
566 1 and 2.  (You should preferably keep no native groups on those two
567 levels.)
568
569
570 @node Slave Gnusae
571 @section Slave Gnusae
572 @cindex slave
573
574 You might want to run more than one Emacs with more than one Gnus at the
575 same time.  If you are using different @file{.newsrc} files (e.g., if you
576 are using the two different Gnusae to read from two different servers),
577 that is no problem whatsoever.  You just do it.
578
579 The problem appears when you want to run two Gnusae that use the same
580 @code{.newsrc} file.
581
582 To work around that problem some, we here at the Think-Tank at the Gnus
583 Towers have come up with a new concept: @dfn{Masters} and
584 @dfn{slaves}.  (We have applied for a patent on this concept, and have
585 taken out a copyright on those words.  If you wish to use those words in
586 conjunction with each other, you have to send $1 per usage instance to
587 me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
588 Applications}) will be much more expensive, of course.)
589
590 Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
591 however you do it).  Each subsequent slave Gnusae should be started with
592 @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
593 files, but instead save @dfn{slave files} that contain information only
594 on what groups have been read in the slave session.  When a master Gnus
595 starts, it will read (and delete) these slave files, incorporating all
596 information from them.  (The slave files will be read in the sequence
597 they were created, so the latest changes will have precedence.)
598
599 Information from the slave files has, of course, precedence over the
600 information in the normal (i.e., master) @code{.newsrc} file.
601
602
603 @node Fetching a Group
604 @section Fetching a Group
605 @cindex fetching a group
606
607 @findex gnus-fetch-group
608 It is sometimes convenient to be able to just say ``I want to read this
609 group and I don't care whether Gnus has been started or not''.  This is
610 perhaps more useful for people who write code than for users, but the
611 command @code{gnus-fetch-group} provides this functionality in any case.
612 It takes the group name as a parameter.
613
614
615 @node New Groups
616 @section New Groups
617 @cindex new groups
618 @cindex subscription
619
620 @vindex gnus-check-new-newsgroups
621 If you are satisfied that you really never want to see any new groups,
622 you can set @code{gnus-check-new-newsgroups} to @code{nil}.  This will
623 also save you some time at startup.  Even if this variable is
624 @code{nil}, you can always subscribe to the new groups just by pressing
625 @kbd{U} in the group buffer (@pxref{Group Maintenance}).  This variable
626 is @code{ask-server} by default.  If you set this variable to
627 @code{always}, then Gnus will query the backends for new groups even
628 when you do the @kbd{g} command (@pxref{Scanning New Messages}).
629
630 @menu
631 * Checking New Groups::      Determining what groups are new.
632 * Subscription Methods::     What Gnus should do with new groups.
633 * Filtering New Groups::     Making Gnus ignore certain new groups.
634 @end menu
635
636
637 @node Checking New Groups
638 @subsection Checking New Groups
639
640 Gnus normally determines whether a group is new or not by comparing the
641 list of groups from the active file(s) with the lists of subscribed and
642 dead groups.  This isn't a particularly fast method.  If
643 @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
644 server for new groups since the last time.  This is both faster and
645 cheaper.  This also means that you can get rid of the list of killed
646 groups altogether, so you may set @code{gnus-save-killed-list} to
647 @code{nil}, which will save time both at startup, at exit, and all over.
648 Saves disk space, too.  Why isn't this the default, then?
649 Unfortunately, not all servers support this command.
650
651 I bet I know what you're thinking now: How do I find out whether my
652 server supports @code{ask-server}?  No?  Good, because I don't have a
653 fail-safe answer.  I would suggest just setting this variable to
654 @code{ask-server} and see whether any new groups appear within the next
655 few days.  If any do, then it works.  If none do, then it doesn't
656 work.  I could write a function to make Gnus guess whether the server
657 supports @code{ask-server}, but it would just be a guess.  So I won't.
658 You could @code{telnet} to the server and say @code{HELP} and see
659 whether it lists @samp{NEWGROUPS} among the commands it understands.  If
660 it does, then it might work.  (But there are servers that lists
661 @samp{NEWGROUPS} without supporting the function properly.)
662
663 This variable can also be a list of select methods.  If so, Gnus will
664 issue an @code{ask-server} command to each of the select methods, and
665 subscribe them (or not) using the normal methods.  This might be handy
666 if you are monitoring a few servers for new groups.  A side effect is
667 that startup will take much longer, so you can meditate while waiting.
668 Use the mantra ``dingnusdingnusdingnus'' to achieve permanent bliss.
669
670
671 @node Subscription Methods
672 @subsection Subscription Methods
673
674 @vindex gnus-subscribe-newsgroup-method
675 What Gnus does when it encounters a new group is determined by the
676 @code{gnus-subscribe-newsgroup-method} variable.
677
678 This variable should contain a function.  This function will be called
679 with the name of the new group as the only parameter.
680
681 Some handy pre-fab functions are:
682
683 @table @code
684
685 @item gnus-subscribe-zombies
686 @vindex gnus-subscribe-zombies
687 Make all new groups zombies.  This is the default.  You can browse the
688 zombies later (with @kbd{A z}) and either kill them all off properly
689 (with @kbd{S z}), or subscribe to them (with @kbd{u}).
690
691 @item gnus-subscribe-randomly
692 @vindex gnus-subscribe-randomly
693 Subscribe all new groups in arbitrary order.  This really means that all
694 new groups will be added at ``the top'' of the group buffer.
695
696 @item gnus-subscribe-alphabetically
697 @vindex gnus-subscribe-alphabetically
698 Subscribe all new groups in alphabetical order.
699
700 @item gnus-subscribe-hierarchically
701 @vindex gnus-subscribe-hierarchically
702 Subscribe all new groups hierarchically.  The difference between this
703 function and @code{gnus-subscribe-alphabetically} is slight.
704 @code{gnus-subscribe-alphabetically} will subscribe new groups in a strictly
705 alphabetical fashion, while this function will enter groups into it's
706 hierarchy.  So if you want to have the @samp{rec} hierarchy before the
707 @samp{comp} hierarchy, this function will not mess that configuration
708 up.  Or something like that.
709
710 @item gnus-subscribe-interactively
711 @vindex gnus-subscribe-interactively
712 Subscribe new groups interactively.  This means that Gnus will ask
713 you about @strong{all} new groups.  The groups you choose to subscribe
714 to will be subscribed hierarchically.
715
716 @item gnus-subscribe-killed
717 @vindex gnus-subscribe-killed
718 Kill all new groups.
719
720 @end table
721
722 @vindex gnus-subscribe-hierarchical-interactive
723 A closely related variable is
724 @code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
725 mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
726 hierarchical fashion whether to subscribe to new groups or not.  Gnus
727 will ask you for each sub-hierarchy whether you want to descend the
728 hierarchy or not.
729
730 One common mistake is to set the variable a few paragraphs above
731 (@code{gnus-subscribe-newsgroup-method}) to
732 @code{gnus-subscribe-hierarchical-interactive}.  This is an error.  This
733 will not work.  This is ga-ga.  So don't do it.
734
735
736 @node Filtering New Groups
737 @subsection Filtering New Groups
738
739 A nice and portable way to control which new newsgroups should be
740 subscribed (or ignored) is to put an @dfn{options} line at the start of
741 the @file{.newsrc} file.  Here's an example:
742
743 @example
744 options -n !alt.all !rec.all sci.all
745 @end example
746
747 @vindex gnus-subscribe-options-newsgroup-method
748 This line obviously belongs to a serious-minded intellectual scientific
749 person (or she may just be plain old boring), because it says that all
750 groups that have names beginning with @samp{alt} and @samp{rec} should
751 be ignored, and all groups with names beginning with @samp{sci} should
752 be subscribed.  Gnus will not use the normal subscription method for
753 subscribing these groups.
754 @code{gnus-subscribe-options-newsgroup-method} is used instead.  This
755 variable defaults to @code{gnus-subscribe-alphabetically}.
756
757 @vindex gnus-options-not-subscribe
758 @vindex gnus-options-subscribe
759 If you don't want to mess with your @file{.newsrc} file, you can just
760 set the two variables @code{gnus-options-subscribe} and
761 @code{gnus-options-not-subscribe}.  These two variables do exactly the
762 same as the @file{.newsrc} @samp{options -n} trick.  Both are regexps,
763 and if the new group matches the former, it will be unconditionally
764 subscribed, and if it matches the latter, it will be ignored.
765
766 @vindex gnus-auto-subscribed-groups
767 Yet another variable that meddles here is
768 @code{gnus-auto-subscribed-groups}.  It works exactly like
769 @code{gnus-options-subscribe}, and is therefore really superfluous, but I
770 thought it would be nice to have two of these.  This variable is more
771 meant for setting some ground rules, while the other variable is used
772 more for user fiddling.  By default this variable makes all new groups
773 that come from mail backends (@code{nnml}, @code{nnbabyl},
774 @code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed.  If you
775 don't like that, just set this variable to @code{nil}.
776
777 New groups that match this regexp are subscribed using
778 @code{gnus-subscribe-options-newsgroup-method}.
779
780
781 @node Changing Servers
782 @section Changing Servers
783 @cindex changing servers
784
785 Sometimes it is necessary to move from one @sc{nntp} server to another.
786 This happens very rarely, but perhaps you change jobs, or one server is
787 very flaky and you want to use another.
788
789 Changing the server is pretty easy, right?  You just change
790 @code{gnus-select-method} to point to the new server?
791
792 @emph{Wrong!}
793
794 Article numbers are not (in any way) kept synchronized between different
795 @sc{nntp} servers, and the only way Gnus keeps track of what articles
796 you have read is by keeping track of article numbers.  So when you
797 change @code{gnus-select-method}, your @file{.newsrc} file becomes
798 worthless.
799
800 Gnus provides a few functions to attempt to translate a @file{.newsrc}
801 file from one server to another.  They all have one thing in
802 common---they take a looong time to run.  You don't want to use these
803 functions more than absolutely necessary.
804
805 @kindex M-x gnus-change-server
806 @findex gnus-change-server
807 If you have access to both servers, Gnus can request the headers for all
808 the articles you have read and compare @code{Message-ID}s and map the
809 article numbers of the read articles and article marks.  The @kbd{M-x
810 gnus-change-server} command will do this for all your native groups.  It
811 will prompt for the method you want to move to.
812
813 @kindex M-x gnus-group-move-group-to-server
814 @findex gnus-group-move-group-to-server
815 You can also move individual groups with the @kbd{M-x
816 gnus-group-move-group-to-server} command.  This is useful if you want to
817 move a (foreign) group from one server to another.
818
819 @kindex M-x gnus-group-clear-data-on-native-groups
820 @findex gnus-group-clear-data-on-native-groups
821 If you don't have access to both the old and new server, all your marks
822 and read ranges have become worthless.  You can use the @kbd{M-x
823 gnus-group-clear-data-on-native-groups} command to clear out all data
824 that you have on your native groups.  Use with caution.
825
826
827 @node Startup Files
828 @section Startup Files
829 @cindex startup files
830 @cindex .newsrc
831 @cindex .newsrc.el
832 @cindex .newsrc.eld
833
834 Now, you all know about the @file{.newsrc} file.  All subscription
835 information is traditionally stored in this file.
836
837 Things got a bit more complicated with @sc{gnus}.  In addition to
838 keeping the @file{.newsrc} file updated, it also used a file called
839 @file{.newsrc.el} for storing all the information that didn't fit into
840 the @file{.newsrc} file.  (Actually, it also duplicated everything in
841 the @file{.newsrc} file.)  @sc{gnus} would read whichever one of these
842 files was the most recently saved, which enabled people to swap between
843 @sc{gnus} and other newsreaders.
844
845 That was kinda silly, so Gnus went one better: In addition to the
846 @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
847 @file{.newsrc.eld}.  It will read whichever of these files that are most
848 recent, but it will never write a @file{.newsrc.el} file.  You should
849 never delete the @file{.newsrc.eld} file---it contains much information
850 not stored in the @file{.newsrc} file.
851
852 @vindex gnus-save-newsrc-file
853 You can turn off writing the @file{.newsrc} file by setting
854 @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
855 the file and save some space, as well as exiting from Gnus faster.
856 However, this will make it impossible to use other newsreaders than
857 Gnus.  But hey, who would want to, right?
858
859 @vindex gnus-save-killed-list
860 If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus
861 will not save the list of killed groups to the startup file.  This will
862 save both time (when starting and quitting) and space (on disk).  It
863 will also mean that Gnus has no record of what groups are new or old,
864 so the automatic new groups subscription methods become meaningless.
865 You should always set @code{gnus-check-new-newsgroups} to @code{nil} or
866 @code{ask-server} if you set this variable to @code{nil} (@pxref{New
867 Groups}).  This variable can also be a regular expression.  If that's
868 the case, remove all groups that do not match this regexp before
869 saving.  This can be useful in certain obscure situations that involve
870 several servers where not all servers support @code{ask-server}.
871
872 @vindex gnus-startup-file
873 The @code{gnus-startup-file} variable says where the startup files are.
874 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
875 file being whatever that one is, with a @samp{.eld} appended.
876
877 @vindex gnus-save-newsrc-hook
878 @vindex gnus-save-quick-newsrc-hook
879 @vindex gnus-save-standard-newsrc-hook
880 @code{gnus-save-newsrc-hook} is called before saving any of the newsrc
881 files, while @code{gnus-save-quick-newsrc-hook} is called just before
882 saving the @file{.newsrc.eld} file, and
883 @code{gnus-save-standard-newsrc-hook} is called just before saving the
884 @file{.newsrc} file.  The latter two are commonly used to turn version
885 control on or off.  Version control is on by default when saving the
886 startup files.  If you want to turn backup creation off, say something like:
887
888 @lisp
889 (defun turn-off-backup ()
890   (set (make-local-variable 'backup-inhibited) t))
891
892 (add-hook 'gnus-save-quick-newsrc-hook 'turn-off-backup)
893 (add-hook 'gnus-save-standard-newsrc-hook 'turn-off-backup)
894 @end lisp
895
896 @vindex gnus-init-file
897 When Gnus starts, it will read the @code{gnus-site-init-file}
898 (@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
899 (@file{~/.gnus} by default) files.  These are normal Emacs Lisp files
900 and can be used to avoid cluttering your @file{~/.emacs} and
901 @file{site-init} files with Gnus stuff.  Gnus will also check for files
902 with the same names as these, but with @file{.elc} and @file{.el}
903 suffixes.  In other words, if you have set @code{gnus-init-file} to
904 @file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
905 and finally @file{~/.gnus} (in this order).
906
907
908
909 @node Auto Save
910 @section Auto Save
911 @cindex dribble file
912 @cindex auto-save
913
914 Whenever you do something that changes the Gnus data (reading articles,
915 catching up, killing/subscribing groups), the change is added to a
916 special @dfn{dribble buffer}.  This buffer is auto-saved the normal
917 Emacs way.  If your Emacs should crash before you have saved the
918 @file{.newsrc} files, all changes you have made can be recovered from
919 this file.
920
921 If Gnus detects this file at startup, it will ask the user whether to
922 read it.  The auto save file is deleted whenever the real startup file is
923 saved.
924
925 @vindex gnus-use-dribble-file
926 If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
927 maintain a dribble buffer.  The default is @code{t}.
928
929 @vindex gnus-dribble-directory
930 Gnus will put the dribble file(s) in @code{gnus-dribble-directory}.  If
931 this variable is @code{nil}, which it is by default, Gnus will dribble
932 into the directory where the @file{.newsrc} file is located.  (This is
933 normally the user's home directory.)  The dribble file will get the same
934 file permissions as the @code{.newsrc} file.
935
936 @vindex gnus-always-read-dribble-file
937 If @code{gnus-always-read-dribble-file} is non-@code{nil}, Gnus will
938 read the dribble file on startup without querying the user.
939
940
941 @node The Active File
942 @section The Active File
943 @cindex active file
944 @cindex ignored groups
945
946 When Gnus starts, or indeed whenever it tries to determine whether new
947 articles have arrived, it reads the active file.  This is a very large
948 file that lists all the active groups and articles on the server.
949
950 @vindex gnus-ignored-newsgroups
951 Before examining the active file, Gnus deletes all lines that match the
952 regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
953 any groups with bogus names, but you can use this variable to make Gnus
954 ignore hierarchies you aren't ever interested in.  However, this is not
955 recommended.  In fact, it's highly discouraged.  Instead, @pxref{New
956 Groups} for an overview of other variables that can be used instead.
957
958 @c This variable is
959 @c @code{nil} by default, and will slow down active file handling somewhat
960 @c if you set it to anything else.
961
962 @vindex gnus-read-active-file
963 @c @head
964 The active file can be rather Huge, so if you have a slow network, you
965 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
966 reading the active file.  This variable is @code{some} by default.
967
968 Gnus will try to make do by getting information just on the groups that
969 you actually subscribe to.
970
971 Note that if you subscribe to lots and lots of groups, setting this
972 variable to @code{nil} will probably make Gnus slower, not faster.  At
973 present, having this variable @code{nil} will slow Gnus down
974 considerably, unless you read news over a 2400 baud modem.
975
976 This variable can also have the value @code{some}.  Gnus will then
977 attempt to read active info only on the subscribed groups.  On some
978 servers this is quite fast (on sparkling, brand new INN servers that
979 support the @code{LIST ACTIVE group} command), on others this isn't fast
980 at all.  In any case, @code{some} should be faster than @code{nil}, and
981 is certainly faster than @code{t} over slow lines.
982
983 If this variable is @code{nil}, Gnus will ask for group info in total
984 lock-step, which isn't very fast.  If it is @code{some} and you use an
985 @sc{nntp} server, Gnus will pump out commands as fast as it can, and
986 read all the replies in one swoop.  This will normally result in better
987 performance, but if the server does not support the aforementioned
988 @code{LIST ACTIVE group} command, this isn't very nice to the server.
989
990 In any case, if you use @code{some} or @code{nil}, you should definitely
991 kill all groups that you aren't interested in to speed things up.
992
993 Note that this variable also affects active file retrieval from
994 secondary select methods.
995
996
997 @node Startup Variables
998 @section Startup Variables
999
1000 @table @code
1001
1002 @item gnus-load-hook
1003 @vindex gnus-load-hook
1004 A hook run while Gnus is being loaded.  Note that this hook will
1005 normally be run just once in each Emacs session, no matter how many
1006 times you start Gnus.
1007
1008 @item gnus-before-startup-hook
1009 @vindex gnus-before-startup-hook
1010 A hook run after starting up Gnus successfully.
1011
1012 @item gnus-startup-hook
1013 @vindex gnus-startup-hook
1014 A hook run as the very last thing after starting up Gnus
1015
1016 @item gnus-started-hook
1017 @vindex gnus-started-hook
1018 A hook that is run as the very last thing after starting up Gnus
1019 successfully.
1020
1021 @item gnus-started-hook
1022 @vindex gnus-started-hook
1023 A hook that is run after reading the @file{.newsrc} file(s), but before
1024 generating the group buffer.
1025
1026 @item gnus-check-bogus-newsgroups
1027 @vindex gnus-check-bogus-newsgroups
1028 If non-@code{nil}, Gnus will check for and delete all bogus groups at
1029 startup.  A @dfn{bogus group} is a group that you have in your
1030 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
1031 bogus groups can take quite a while, so to save time and resources it's
1032 best to leave this option off, and do the checking for bogus groups once
1033 in a while from the group buffer instead (@pxref{Group Maintenance}).
1034
1035 @item gnus-inhibit-startup-message
1036 @vindex gnus-inhibit-startup-message
1037 If non-@code{nil}, the startup message won't be displayed.  That way,
1038 your boss might not notice as easily that you are reading news instead
1039 of doing your job.  Note that this variable is used before
1040 @file{.gnus.el} is loaded, so it should be set in @code{.emacs} instead.
1041
1042 @item gnus-no-groups-message
1043 @vindex gnus-no-groups-message
1044 Message displayed by Gnus when no groups are available.
1045
1046 @item gnus-play-startup-jingle
1047 @vindex gnus-play-startup-jingle
1048 If non-@code{nil}, play the Gnus jingle at startup.
1049
1050 @item gnus-startup-jingle
1051 @vindex gnus-startup-jingle
1052 Jingle to be played if the above variable is non-@code{nil}.  The
1053 default is @samp{Tuxedomoon.Jingle4.au}.
1054
1055 @end table
1056
1057
1058 @node The Group Buffer
1059 @chapter The Group Buffer
1060 @cindex group buffer
1061
1062 The @dfn{group buffer} lists all (or parts) of the available groups.  It
1063 is the first buffer shown when Gnus starts, and will never be killed as
1064 long as Gnus is active.
1065
1066 @iftex
1067 @iflatex
1068 \gnusfigure{The Group Buffer}{320}{
1069 \put(75,50){\epsfig{figure=tmp/group.ps,height=9cm}}
1070 \put(120,37){\makebox(0,0)[t]{Buffer name}}
1071 \put(120,38){\vector(1,2){10}}
1072 \put(40,60){\makebox(0,0)[r]{Mode line}}
1073 \put(40,58){\vector(1,0){30}}
1074 \put(200,28){\makebox(0,0)[t]{Native select method}}
1075 \put(200,26){\vector(-1,2){15}}
1076 }
1077 @end iflatex
1078 @end iftex
1079
1080 @menu
1081 * Group Buffer Format::    Information listed and how you can change it.
1082 * Group Maneuvering::      Commands for moving in the group buffer.
1083 * Selecting a Group::      Actually reading news.
1084 * Group Data::             Changing the info for a group.
1085 * Subscription Commands::  Unsubscribing, killing, subscribing.
1086 * Group Levels::           Levels? What are those, then?
1087 * Group Score::            A mechanism for finding out what groups you like.
1088 * Marking Groups::         You can mark groups for later processing.
1089 * Foreign Groups::         Creating and editing groups.
1090 * Group Parameters::       Each group may have different parameters set.
1091 * Listing Groups::         Gnus can list various subsets of the groups.
1092 * Sorting Groups::         Re-arrange the group order.
1093 * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
1094 * Browse Foreign Server::  You can browse a server.  See what it has to offer.
1095 * Exiting Gnus::           Stop reading news and get some work done.
1096 * Group Topics::           A folding group mode divided into topics.
1097 * Misc Group Stuff::       Other stuff that you can to do.
1098 @end menu
1099
1100
1101 @node Group Buffer Format
1102 @section Group Buffer Format
1103
1104 @menu
1105 * Group Line Specification::       Deciding how the group buffer is to look.
1106 * Group Modeline Specification::   The group buffer modeline.
1107 * Group Highlighting::             Having nice colors in the group buffer.
1108 @end menu
1109
1110
1111 @node Group Line Specification
1112 @subsection Group Line Specification
1113 @cindex group buffer format
1114
1115 The default format of the group buffer is nice and dull, but you can
1116 make it as exciting and ugly as you feel like.
1117
1118 Here's a couple of example group lines:
1119
1120 @example
1121      25: news.announce.newusers
1122  *    0: alt.fan.andrea-dworkin
1123 @end example
1124
1125 Quite simple, huh?
1126
1127 You can see that there are 25 unread articles in
1128 @samp{news.announce.newusers}.  There are no unread articles, but some
1129 ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
1130 asterisk at the beginning of the line?).
1131
1132 @vindex gnus-group-line-format
1133 You can change that format to whatever you want by fiddling with the
1134 @code{gnus-group-line-format} variable.  This variable works along the
1135 lines of a @code{format} specification, which is pretty much the same as
1136 a @code{printf} specifications, for those of you who use (feh!) C.
1137 @xref{Formatting Variables}.
1138
1139 @samp{%M%S%5y: %(%g%)\n} is the value that produced those lines above.
1140
1141 There should always be a colon on the line; the cursor always moves to
1142 the colon after performing an operation.  Nothing else is required---not
1143 even the group name.  All displayed text is just window dressing, and is
1144 never examined by Gnus.  Gnus stores all real information it needs using
1145 text properties.
1146
1147 (Note that if you make a really strange, wonderful, spreadsheet-like
1148 layout, everybody will believe you are hard at work with the accounting
1149 instead of wasting time reading news.)
1150
1151 Here's a list of all available format characters:
1152
1153 @table @samp
1154
1155 @item M
1156 An asterisk if the group only has marked articles.
1157
1158 @item S
1159 Whether the group is subscribed.
1160
1161 @item L
1162 Level of subscribedness.
1163
1164 @item N
1165 Number of unread articles.
1166
1167 @item I
1168 Number of dormant articles.
1169
1170 @item T
1171 Number of ticked articles.
1172
1173 @item R
1174 Number of read articles.
1175
1176 @item t
1177 Estimated total number of articles.  (This is really @var{max-number}
1178 minus @var{min-number} plus 1.)
1179
1180 @item y
1181 Number of unread, unticked, non-dormant articles.
1182
1183 @item i
1184 Number of ticked and dormant articles.
1185
1186 @item g
1187 Full group name.
1188
1189 @item G
1190 Group name.
1191
1192 @item D
1193 Newsgroup description.
1194
1195 @item o
1196 @samp{m} if moderated.
1197
1198 @item O
1199 @samp{(m)} if moderated.
1200
1201 @item s
1202 Select method.
1203
1204 @item n
1205 Select from where.
1206
1207 @item z
1208 A string that looks like @samp{<%s:%n>} if a foreign select method is
1209 used.
1210
1211 @item P
1212 Indentation based on the level of the topic (@pxref{Group Topics}).
1213
1214 @item c
1215 @vindex gnus-group-uncollapsed-levels
1216 Short (collapsed) group name.  The @code{gnus-group-uncollapsed-levels}
1217 variable says how many levels to leave at the end of the group name.
1218 The default is 1---this will mean that group names like
1219 @samp{gnu.emacs.gnus} will be shortened to @samp{g.emacs.gnus}.
1220
1221 @item m
1222 @vindex gnus-new-mail-mark
1223 @cindex %
1224 @samp{%} (@code{gnus-new-mail-mark}) if there has arrived new mail to
1225 the group lately.
1226
1227 @item d
1228 A string that says when you last read the group (@pxref{Group
1229 Timestamp}).
1230
1231 @item u
1232 User defined specifier.  The next character in the format string should
1233 be a letter.  Gnus will call the function
1234 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1235 following @samp{%u}.  The function will be passed a single dummy
1236 parameter as argument.  The function should return a string, which will
1237 be inserted into the buffer just like information from any other
1238 specifier.
1239 @end table
1240
1241 @cindex *
1242 All the ``number-of'' specs will be filled with an asterisk (@samp{*})
1243 if no info is available---for instance, if it is a non-activated foreign
1244 group, or a bogus native group.
1245
1246
1247 @node Group Modeline Specification
1248 @subsection Group Modeline Specification
1249 @cindex group modeline
1250
1251 @vindex gnus-group-mode-line-format
1252 The mode line can be changed by setting
1253 @code{gnus-group-mode-line-format} (@pxref{Mode Line Formatting}).  It
1254 doesn't understand that many format specifiers:
1255
1256 @table @samp
1257 @item S
1258 The native news server.
1259 @item M
1260 The native select method.
1261 @end table
1262
1263
1264 @node Group Highlighting
1265 @subsection Group Highlighting
1266 @cindex highlighting
1267 @cindex group highlighting
1268
1269 @vindex gnus-group-highlight
1270 Highlighting in the group buffer is controlled by the
1271 @code{gnus-group-highlight} variable.  This is an alist with elements
1272 that look like @var{(form . face)}.  If @var{form} evaluates to
1273 something non-@code{nil}, the @var{face} will be used on the line.
1274
1275 Here's an example value for this variable that might look nice if the
1276 background is dark:
1277
1278 @lisp
1279 (face-spec-set 'my-group-face-1
1280                '((t (:foreground "Red" :bold t))))
1281 (face-spec-set 'my-group-face-2
1282                '((t (:foreground "SeaGreen" :bold t))))
1283 (face-spec-set 'my-group-face-3
1284                '((t (:foreground "SpringGreen" :bold t))))
1285 (face-spec-set 'my-group-face-4
1286                '((t (:foreground "SteelBlue" :bold t))))
1287 (face-spec-set 'my-group-face-5
1288                '((t (:foreground "SkyBlue" :bold t))))
1289
1290 (setq gnus-group-highlight
1291       '(((> unread 200) . my-group-face-1)
1292         ((and (< level 3) (zerop unread)) . my-group-face-2)
1293         ((< level 3) . my-group-face-3)
1294         ((zerop unread) . my-group-face-4)
1295         (t . my-group-face-5)))
1296 @end lisp
1297
1298 Also @pxref{Faces and Fonts}.
1299
1300 Variables that are dynamically bound when the forms are evaluated
1301 include:
1302
1303 @table @code
1304 @item group
1305 The group name.
1306 @item unread
1307 The number of unread articles in the group.
1308 @item method
1309 The select method.
1310 @item mailp
1311 Whether the group is a mail group.
1312 @item level
1313 The level of the group.
1314 @item score
1315 The score of the group.
1316 @item ticked
1317 The number of ticked articles in the group.
1318 @item total
1319 The total number of articles in the group.  Or rather, MAX-NUMBER minus
1320 MIN-NUMBER plus one.
1321 @item topic
1322 When using the topic minor mode, this variable is bound to the current
1323 topic being inserted.
1324 @end table
1325
1326 When the forms are @code{eval}ed, point is at the beginning of the line
1327 of the group in question, so you can use many of the normal Gnus
1328 functions for snarfing info on the group.
1329
1330 @vindex gnus-group-update-hook
1331 @findex gnus-group-highlight-line
1332 @code{gnus-group-update-hook} is called when a group line is changed.
1333 It will not be called when @code{gnus-visual} is @code{nil}.  This hook
1334 calls @code{gnus-group-highlight-line} by default.
1335
1336
1337 @node Group Maneuvering
1338 @section Group Maneuvering
1339 @cindex group movement
1340
1341 All movement commands understand the numeric prefix and will behave as
1342 expected, hopefully.
1343
1344 @table @kbd
1345
1346 @item n
1347 @kindex n (Group)
1348 @findex gnus-group-next-unread-group
1349 Go to the next group that has unread articles
1350 (@code{gnus-group-next-unread-group}).
1351
1352 @item p
1353 @itemx DEL
1354 @kindex DEL (Group)
1355 @kindex p (Group)
1356 @findex gnus-group-prev-unread-group
1357 Go to the previous group that has unread articles
1358 (@code{gnus-group-prev-unread-group}).
1359
1360 @item N
1361 @kindex N (Group)
1362 @findex gnus-group-next-group
1363 Go to the next group (@code{gnus-group-next-group}).
1364
1365 @item P
1366 @kindex P (Group)
1367 @findex gnus-group-prev-group
1368 Go to the previous group (@code{gnus-group-prev-group}).
1369
1370 @item M-n
1371 @kindex M-n (Group)
1372 @findex gnus-group-next-unread-group-same-level
1373 Go to the next unread group on the same (or lower) level
1374 (@code{gnus-group-next-unread-group-same-level}).
1375
1376 @item M-p
1377 @kindex M-p (Group)
1378 @findex gnus-group-prev-unread-group-same-level
1379 Go to the previous unread group on the same (or lower) level
1380 (@code{gnus-group-prev-unread-group-same-level}).
1381 @end table
1382
1383 Three commands for jumping to groups:
1384
1385 @table @kbd
1386
1387 @item j
1388 @kindex j (Group)
1389 @findex gnus-group-jump-to-group
1390 Jump to a group (and make it visible if it isn't already)
1391 (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
1392 like living groups.
1393
1394 @item ,
1395 @kindex , (Group)
1396 @findex gnus-group-best-unread-group
1397 Jump to the unread group with the lowest level
1398 (@code{gnus-group-best-unread-group}).
1399
1400 @item .
1401 @kindex . (Group)
1402 @findex gnus-group-first-unread-group
1403 Jump to the first group with unread articles
1404 (@code{gnus-group-first-unread-group}).
1405 @end table
1406
1407 @vindex gnus-group-goto-unread
1408 If @code{gnus-group-goto-unread} is @code{nil}, all the movement
1409 commands will move to the next group, not the next unread group.  Even
1410 the commands that say they move to the next unread group.  The default
1411 is @code{t}.
1412
1413
1414 @node Selecting a Group
1415 @section Selecting a Group
1416 @cindex group selection
1417
1418 @table @kbd
1419
1420 @item SPACE
1421 @kindex SPACE (Group)
1422 @findex gnus-group-read-group
1423 Select the current group, switch to the summary buffer and display the
1424 first unread article (@code{gnus-group-read-group}).  If there are no
1425 unread articles in the group, or if you give a non-numerical prefix to
1426 this command, Gnus will offer to fetch all the old articles in this
1427 group from the server.  If you give a numerical prefix @var{N}, @var{N}
1428 determines the number of articles Gnus will fetch.  If @var{N} is
1429 positive, Gnus fetches the @var{N} newest articles, if @var{N} is
1430 negative, Gnus fetches the @var{abs(N)} oldest articles.
1431
1432 @item RET
1433 @kindex RET (Group)
1434 @findex gnus-group-select-group
1435 Select the current group and switch to the summary buffer
1436 (@code{gnus-group-select-group}).  Takes the same arguments as
1437 @code{gnus-group-read-group}---the only difference is that this command
1438 does not display the first unread article automatically upon group
1439 entry.
1440
1441 @item M-RET
1442 @kindex M-RET (Group)
1443 @findex gnus-group-quick-select-group
1444 This does the same as the command above, but tries to do it with the
1445 minimum amount of fuzz (@code{gnus-group-quick-select-group}).  No
1446 scoring/killing will be performed, there will be no highlights and no
1447 expunging.  This might be useful if you're in a real hurry and have to
1448 enter some humongous group.  If you give a 0 prefix to this command
1449 (i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer,
1450 which is useful if you want to toggle threading before generating the
1451 summary buffer (@pxref{Summary Generation Commands}).
1452
1453 @item M-SPACE
1454 @kindex M-SPACE (Group)
1455 @findex gnus-group-visible-select-group
1456 This is yet one more command that does the same as the @kbd{RET}
1457 command, but this one does it without expunging and hiding dormants
1458 (@code{gnus-group-visible-select-group}).
1459
1460 @item M-C-RET
1461 @kindex M-C-RET (Group)
1462 @findex gnus-group-select-group-ephemerally
1463 Finally, this command selects the current group ephemerally without
1464 doing any processing of its contents
1465 (@code{gnus-group-select-group-ephemerally}).  Even threading has been
1466 turned off.  Everything you do in the group after selecting it in this
1467 manner will have no permanent effects.
1468
1469 @end table
1470
1471 @vindex gnus-large-newsgroup
1472 The @code{gnus-large-newsgroup} variable says what Gnus should consider
1473 to be a big group.  This is 200 by default.  If the group has more
1474 (unread and/or ticked) articles than this, Gnus will query the user
1475 before entering the group.  The user can then specify how many articles
1476 should be fetched from the server.  If the user specifies a negative
1477 number (@code{-n}), the @code{n} oldest articles will be fetched.  If it
1478 is positive, the @code{n} articles that have arrived most recently will
1479 be fetched.
1480
1481 @vindex gnus-select-group-hook
1482 @vindex gnus-auto-select-first
1483 @code{gnus-auto-select-first} control whether any articles are selected
1484 automatically when entering a group with the @kbd{SPACE} command.
1485
1486 @table @code
1487
1488 @item nil
1489 Don't select any articles when entering the group.  Just display the
1490 full summary buffer.
1491
1492 @item t
1493 Select the first unread article when entering the group.
1494
1495 @item best
1496 Select the highest scored article in the group when entering the
1497 group.
1498 @end table
1499
1500 If you want to prevent automatic selection in some group (say, in a
1501 binary group with Huge articles) you can set this variable to @code{nil}
1502 in @code{gnus-select-group-hook}, which is called when a group is
1503 selected.
1504
1505
1506 @node Subscription Commands
1507 @section Subscription Commands
1508 @cindex subscription
1509
1510 @table @kbd
1511
1512 @item S t
1513 @itemx u
1514 @kindex S t (Group)
1515 @kindex u (Group)
1516 @findex gnus-group-unsubscribe-current-group
1517 @c @icon{gnus-group-unsubscribe}
1518 Toggle subscription to the current group
1519 (@code{gnus-group-unsubscribe-current-group}).
1520
1521 @item S s
1522 @itemx U
1523 @kindex S s (Group)
1524 @kindex U (Group)
1525 @findex gnus-group-unsubscribe-group
1526 Prompt for a group to subscribe, and then subscribe it.  If it was
1527 subscribed already, unsubscribe it instead
1528 (@code{gnus-group-unsubscribe-group}).
1529
1530 @item S k
1531 @itemx C-k
1532 @kindex S k (Group)
1533 @kindex C-k (Group)
1534 @findex gnus-group-kill-group
1535 @c @icon{gnus-group-kill-group}
1536 Kill the current group (@code{gnus-group-kill-group}).
1537
1538 @item S y
1539 @itemx C-y
1540 @kindex S y (Group)
1541 @kindex C-y (Group)
1542 @findex gnus-group-yank-group
1543 Yank the last killed group (@code{gnus-group-yank-group}).
1544
1545 @item C-x C-t
1546 @kindex C-x C-t (Group)
1547 @findex gnus-group-transpose-groups
1548 Transpose two groups (@code{gnus-group-transpose-groups}).  This isn't
1549 really a subscription command, but you can use it instead of a
1550 kill-and-yank sequence sometimes.
1551
1552 @item S w
1553 @itemx C-w
1554 @kindex S w (Group)
1555 @kindex C-w (Group)
1556 @findex gnus-group-kill-region
1557 Kill all groups in the region (@code{gnus-group-kill-region}).
1558
1559 @item S z
1560 @kindex S z (Group)
1561 @findex gnus-group-kill-all-zombies
1562 Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
1563
1564 @item S C-k
1565 @kindex S C-k (Group)
1566 @findex gnus-group-kill-level
1567 Kill all groups on a certain level (@code{gnus-group-kill-level}).
1568 These groups can't be yanked back after killing, so this command should
1569 be used with some caution.  The only time where this command comes in
1570 really handy is when you have a @file{.newsrc} with lots of unsubscribed
1571 groups that you want to get rid off.  @kbd{S C-k} on level 7 will
1572 kill off all unsubscribed groups that do not have message numbers in the
1573 @file{.newsrc} file.
1574
1575 @end table
1576
1577 Also @pxref{Group Levels}.
1578
1579
1580 @node Group Data
1581 @section Group Data
1582
1583 @table @kbd
1584
1585 @item c
1586 @kindex c (Group)
1587 @findex gnus-group-catchup-current
1588 @vindex gnus-group-catchup-group-hook
1589 @c @icon{gnus-group-catchup-current}
1590 Mark all unticked articles in this group as read
1591 (@code{gnus-group-catchup-current}).
1592 @code{gnus-group-catchup-group-hook} is called when catching up a group from
1593 the group buffer.
1594
1595 @item C
1596 @kindex C (Group)
1597 @findex gnus-group-catchup-current-all
1598 Mark all articles in this group, even the ticked ones, as read
1599 (@code{gnus-group-catchup-current-all}).
1600
1601 @item M-c
1602 @kindex M-c (Group)
1603 @findex gnus-group-clear-data
1604 Clear the data from the current group---nix out marks and the list of
1605 read articles (@code{gnus-group-clear-data}).
1606
1607 @item M-x gnus-group-clear-data-on-native-groups
1608 @kindex M-x gnus-group-clear-data-on-native-groups
1609 @findex gnus-group-clear-data-on-native-groups
1610 If you have switched from one @sc{nntp} server to another, all your marks
1611 and read ranges have become worthless.  You can use this command to
1612 clear out all data that you have on your native groups.  Use with
1613 caution.
1614
1615 @end table
1616
1617
1618 @node Group Levels
1619 @section Group Levels
1620 @cindex group level
1621 @cindex level
1622
1623 All groups have a level of @dfn{subscribedness}.  For instance, if a
1624 group is on level 2, it is more subscribed than a group on level 5.  You
1625 can ask Gnus to just list groups on a given level or lower
1626 (@pxref{Listing Groups}), or to just check for new articles in groups on
1627 a given level or lower (@pxref{Scanning New Messages}).
1628
1629 Remember:  The higher the level of the group, the less important it is.
1630
1631 @table @kbd
1632
1633 @item S l
1634 @kindex S l (Group)
1635 @findex gnus-group-set-current-level
1636 Set the level of the current group.  If a numeric prefix is given, the
1637 next @var{n} groups will have their levels set.  The user will be
1638 prompted for a level.
1639 @end table
1640
1641 @vindex gnus-level-killed
1642 @vindex gnus-level-zombie
1643 @vindex gnus-level-unsubscribed
1644 @vindex gnus-level-subscribed
1645 Gnus considers groups from levels 1 to
1646 @code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
1647 @code{gnus-level-subscribed} (exclusive) and
1648 @code{gnus-level-unsubscribed} (inclusive) (default 7) to be
1649 unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
1650 (default 8) and @code{gnus-level-killed} to be killed (completely dead)
1651 (default 9).  Gnus treats subscribed and unsubscribed groups exactly the
1652 same, but zombie and killed groups have no information on what articles
1653 you have read, etc, stored.  This distinction between dead and living
1654 groups isn't done because it is nice or clever, it is done purely for
1655 reasons of efficiency.
1656
1657 It is recommended that you keep all your mail groups (if any) on quite
1658 low levels (e.g. 1 or 2).
1659
1660 If you want to play with the level variables, you should show some care.
1661 Set them once, and don't touch them ever again.  Better yet, don't touch
1662 them at all unless you know exactly what you're doing.
1663
1664 @vindex gnus-level-default-unsubscribed
1665 @vindex gnus-level-default-subscribed
1666 Two closely related variables are @code{gnus-level-default-subscribed}
1667 (default 3) and @code{gnus-level-default-unsubscribed} (default 6),
1668 which are the levels that new groups will be put on if they are
1669 (un)subscribed.  These two variables should, of course, be inside the
1670 relevant valid ranges.
1671
1672 @vindex gnus-keep-same-level
1673 If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
1674 will only move to groups of the same level (or lower).  In
1675 particular, going from the last article in one group to the next group
1676 will go to the next group of the same level (or lower).  This might be
1677 handy if you want to read the most important groups before you read the
1678 rest.
1679
1680 @vindex gnus-group-default-list-level
1681 All groups with a level less than or equal to
1682 @code{gnus-group-default-list-level} will be listed in the group buffer
1683 by default.
1684
1685 @vindex gnus-group-list-inactive-groups
1686 If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
1687 groups will be listed along with the unread groups.  This variable is
1688 @code{t} by default.  If it is @code{nil}, inactive groups won't be
1689 listed.
1690
1691 @vindex gnus-group-use-permanent-levels
1692 If @code{gnus-group-use-permanent-levels} is non-@code{nil}, once you
1693 give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
1694 use this level as the ``work'' level.
1695
1696 @vindex gnus-activate-level
1697 Gnus will normally just activate (i. e., query the server about) groups
1698 on level @code{gnus-activate-level} or less.  If you don't want to
1699 activate unsubscribed groups, for instance, you might set this variable
1700 to 5.  The default is 6.
1701
1702
1703 @node Group Score
1704 @section Group Score
1705 @cindex group score
1706 @cindex group rank
1707 @cindex rank
1708
1709 You would normally keep important groups on high levels, but that scheme
1710 is somewhat restrictive.  Don't you wish you could have Gnus sort the
1711 group buffer according to how often you read groups, perhaps?  Within
1712 reason?
1713
1714 This is what @dfn{group score} is for.  You can assign a score to each
1715 group.  You can then sort the group buffer based on this score.
1716 Alternatively, you can sort on score and then level.  (Taken together,
1717 the level and the score is called the @dfn{rank} of the group.  A group
1718 that is on level 4 and has a score of 1 has a higher rank than a group
1719 on level 5 that has a score of 300.  (The level is the most significant
1720 part and the score is the least significant part.))
1721
1722 @findex gnus-summary-bubble-group
1723 If you want groups you read often to get higher scores than groups you
1724 read seldom you can add the @code{gnus-summary-bubble-group} function to
1725 the @code{gnus-summary-exit-hook} hook.  This will result (after
1726 sorting) in a bubbling sort of action.  If you want to see that in
1727 action after each summary exit, you can add
1728 @code{gnus-group-sort-groups-by-rank} or
1729 @code{gnus-group-sort-groups-by-score} to the same hook, but that will
1730 slow things down somewhat.
1731
1732
1733 @node Marking Groups
1734 @section Marking Groups
1735 @cindex marking groups
1736
1737 If you want to perform some command on several groups, and they appear
1738 subsequently in the group buffer, you would normally just give a
1739 numerical prefix to the command.  Most group commands will then do your
1740 bidding on those groups.
1741
1742 However, if the groups are not in sequential order, you can still
1743 perform a command on several groups.  You simply mark the groups first
1744 with the process mark and then execute the command.
1745
1746 @table @kbd
1747
1748 @item #
1749 @kindex # (Group)
1750 @itemx M m
1751 @kindex M m (Group)
1752 @findex gnus-group-mark-group
1753 Set the mark on the current group (@code{gnus-group-mark-group}).
1754
1755 @item M-#
1756 @kindex M-# (Group)
1757 @itemx M u
1758 @kindex M u (Group)
1759 @findex gnus-group-unmark-group
1760 Remove the mark from the current group
1761 (@code{gnus-group-unmark-group}).
1762
1763 @item M U
1764 @kindex M U (Group)
1765 @findex gnus-group-unmark-all-groups
1766 Remove the mark from all groups (@code{gnus-group-unmark-all-groups}).
1767
1768 @item M w
1769 @kindex M w (Group)
1770 @findex gnus-group-mark-region
1771 Mark all groups between point and mark (@code{gnus-group-mark-region}).
1772
1773 @item M b
1774 @kindex M b (Group)
1775 @findex gnus-group-mark-buffer
1776 Mark all groups in the buffer (@code{gnus-group-mark-buffer}).
1777
1778 @item M r
1779 @kindex M r (Group)
1780 @findex gnus-group-mark-regexp
1781 Mark all groups that match some regular expression
1782 (@code{gnus-group-mark-regexp}).
1783 @end table
1784
1785 Also @pxref{Process/Prefix}.
1786
1787 @findex gnus-group-universal-argument
1788 If you want to execute some command on all groups that have been marked
1789 with the process mark, you can use the @kbd{M-&}
1790 (@code{gnus-group-universal-argument}) command.  It will prompt you for
1791 the command to be executed.
1792
1793
1794 @node Foreign Groups
1795 @section Foreign Groups
1796 @cindex foreign groups
1797
1798 Below are some group mode commands for making and editing general foreign
1799 groups, as well as commands to ease the creation of a few
1800 special-purpose groups.  All these commands insert the newly created
1801 groups under point---@code{gnus-subscribe-newsgroup-method} is not
1802 consulted.
1803
1804 @table @kbd
1805
1806 @item G m
1807 @kindex G m (Group)
1808 @findex gnus-group-make-group
1809 @cindex making groups
1810 Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you
1811 for a name, a method and possibly an @dfn{address}.  For an easier way
1812 to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}.
1813
1814 @item G r
1815 @kindex G r (Group)
1816 @findex gnus-group-rename-group
1817 @cindex renaming groups
1818 Rename the current group to something else
1819 (@code{gnus-group-rename-group}).  This is valid only on some
1820 groups---mail groups mostly.  This command might very well be quite slow
1821 on some backends.
1822
1823 @item G c
1824 @kindex G c (Group)
1825 @cindex customizing
1826 @findex gnus-group-customize
1827 Customize the group parameters (@code{gnus-group-customize}).
1828
1829 @item G e
1830 @kindex G e (Group)
1831 @findex gnus-group-edit-group-method
1832 @cindex renaming groups
1833 Enter a buffer where you can edit the select method of the current
1834 group (@code{gnus-group-edit-group-method}).
1835
1836 @item G p
1837 @kindex G p (Group)
1838 @findex gnus-group-edit-group-parameters
1839 Enter a buffer where you can edit the group parameters
1840 (@code{gnus-group-edit-group-parameters}).
1841
1842 @item G E
1843 @kindex G E (Group)
1844 @findex gnus-group-edit-group
1845 Enter a buffer where you can edit the group info
1846 (@code{gnus-group-edit-group}).
1847
1848 @item G d
1849 @kindex G d (Group)
1850 @findex gnus-group-make-directory-group
1851 @cindex nndir
1852 Make a directory group (@pxref{Directory Groups}).  You will be prompted
1853 for a directory name (@code{gnus-group-make-directory-group}).
1854
1855 @item G h
1856 @kindex G h (Group)
1857 @cindex help group
1858 @findex gnus-group-make-help-group
1859 Make the Gnus help group (@code{gnus-group-make-help-group}).
1860
1861 @item G a
1862 @kindex G a (Group)
1863 @cindex (ding) archive
1864 @cindex archive group
1865 @findex gnus-group-make-archive-group
1866 @vindex gnus-group-archive-directory
1867 @vindex gnus-group-recent-archive-directory
1868 Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
1869 default a group pointing to the most recent articles will be created
1870 (@code{gnus-group-recent-archive-directory}), but given a prefix, a full
1871 group will be created from @code{gnus-group-archive-directory}.
1872
1873 @item G k
1874 @kindex G k (Group)
1875 @findex gnus-group-make-kiboze-group
1876 @cindex nnkiboze
1877 Make a kiboze group.  You will be prompted for a name, for a regexp to
1878 match groups to be ``included'' in the kiboze group, and a series of
1879 strings to match on headers (@code{gnus-group-make-kiboze-group}).
1880 @xref{Kibozed Groups}.
1881
1882 @item G D
1883 @kindex G D (Group)
1884 @findex gnus-group-enter-directory
1885 @cindex nneething
1886 Read an arbitrary directory as if it were a newsgroup with the
1887 @code{nneething} backend (@code{gnus-group-enter-directory}).
1888 @xref{Anything Groups}.
1889
1890 @item G f
1891 @kindex G f (Group)
1892 @findex gnus-group-make-doc-group
1893 @cindex ClariNet Briefs
1894 @cindex nndoc
1895 Make a group based on some file or other
1896 (@code{gnus-group-make-doc-group}).  If you give a prefix to this
1897 command, you will be prompted for a file name and a file type.
1898 Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
1899 @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs},
1900 @code{rfc934}, @code{rfc822-forward}, and @code{forward}.  If you run
1901 this command without a prefix, Gnus will guess at the file type.
1902 @xref{Document Groups}.
1903
1904 @item G u
1905 @kindex G u (Group)
1906 @vindex gnus-useful-groups
1907 @findex gnus-group-make-useful-group
1908 Create one of the groups mentioned in @code{gnus-useful-groups}
1909 (@code{gnus-group-make-useful-group}).
1910
1911 @item G w
1912 @kindex G w (Group)
1913 @findex gnus-group-make-web-group
1914 @cindex DejaNews
1915 @cindex Alta Vista
1916 @cindex InReference
1917 @cindex nnweb
1918 Make an ephemeral group based on a web search
1919 (@code{gnus-group-make-web-group}).  If you give a prefix to this
1920 command, make a solid group instead.  You will be prompted for the
1921 search engine type and the search string.  Valid search engine types
1922 include @code{dejanews}, @code{altavista} and @code{reference}.
1923 @xref{Web Searches}.
1924
1925 If you use the @code{dejanews} search engine, you can limit the search
1926 to a particular group by using a match string like
1927 @samp{~g alt.sysadmin.recovery shaving}.
1928
1929 @item G DEL
1930 @kindex G DEL (Group)
1931 @findex gnus-group-delete-group
1932 This function will delete the current group
1933 (@code{gnus-group-delete-group}).  If given a prefix, this function will
1934 actually delete all the articles in the group, and forcibly remove the
1935 group itself from the face of the Earth.  Use a prefix only if you are
1936 absolutely sure of what you are doing.  This command can't be used on
1937 read-only groups (like @code{nntp} group), though.
1938
1939 @item G V
1940 @kindex G V (Group)
1941 @findex gnus-group-make-empty-virtual
1942 Make a new, fresh, empty @code{nnvirtual} group
1943 (@code{gnus-group-make-empty-virtual}).  @xref{Virtual Groups}.
1944
1945 @item G v
1946 @kindex G v (Group)
1947 @findex gnus-group-add-to-virtual
1948 Add the current group to an @code{nnvirtual} group
1949 (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
1950 @end table
1951
1952 @xref{Select Methods} for more information on the various select
1953 methods.
1954
1955 @vindex gnus-activate-foreign-newsgroups
1956 If @code{gnus-activate-foreign-newsgroups} is a positive number,
1957 Gnus will check all foreign groups with this level or lower at startup.
1958 This might take quite a while, especially if you subscribe to lots of
1959 groups from different @sc{nntp} servers.  Also @pxref{Group Levels};
1960 @code{gnus-activate-level} also affects activation of foreign
1961 newsgroups. 
1962
1963
1964 @node Group Parameters
1965 @section Group Parameters
1966 @cindex group parameters
1967
1968 The group parameters store information local to a particular group.
1969 Here's an example group parameter list:
1970
1971 @example
1972 ((to-address . "ding@@gnus.org")
1973  (auto-expire . t))
1974 @end example
1975
1976 We see that each element consists of a "dotted pair"---the thing before
1977 the dot is the key, while the thing after the dot is the value.  All the
1978 parameters have this form @emph{except} local variable specs, which are
1979 not dotted pairs, but proper lists.
1980
1981 The following group parameters can be used:
1982
1983 @table @code
1984 @item to-address
1985 @cindex to-address
1986 Address used by when doing followups and new posts.
1987
1988 @example
1989 (to-address .  "some@@where.com")
1990 @end example
1991
1992 This is primarily useful in mail groups that represent closed mailing
1993 lists---mailing lists where it's expected that everybody that writes to
1994 the mailing list is subscribed to it.  Since using this parameter
1995 ensures that the mail only goes to the mailing list itself, it means
1996 that members won't receive two copies of your followups.
1997
1998 Using @code{to-address} will actually work whether the group is foreign
1999 or not.  Let's say there's a group on the server that is called
2000 @samp{fa.4ad-l}.  This is a real newsgroup, but the server has gotten
2001 the articles from a mail-to-news gateway.  Posting directly to this
2002 group is therefore impossible---you have to send mail to the mailing
2003 list address instead.
2004
2005 @item to-list
2006 @cindex to-list
2007 Address used when doing a @kbd{a} in that group.
2008
2009 @example
2010 (to-list . "some@@where.com")
2011 @end example
2012
2013 It is totally ignored
2014 when doing a followup---except that if it is present in a news group,
2015 you'll get mail group semantics when doing @kbd{f}.
2016
2017 If you do an @kbd{a} command in a mail group and you have neither a
2018 @code{to-list} group parameter nor a @code{to-address} group parameter,
2019 then a @code{to-list} group parameter will be added automatically upon
2020 sending the message if @code{gnus-add-to-list} is set to @code{t}.
2021 @vindex gnus-add-to-list
2022
2023 If you do an @kbd{a} command in a mail group and you don't have a
2024 @code{to-list} group parameter, one will be added automatically upon
2025 sending the message.
2026
2027 @item visible
2028 @cindex visible
2029 If the group parameter list has the element @code{(visible . t)},
2030 that group will always be visible in the Group buffer, regardless
2031 of whether it has any unread articles.
2032
2033 @item broken-reply-to
2034 @cindex broken-reply-to
2035 Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
2036 headers in this group are to be ignored.  This can be useful if you're
2037 reading a mailing list group where the listserv has inserted
2038 @code{Reply-To} headers that point back to the listserv itself.  This is
2039 broken behavior.  So there!
2040
2041 @item to-group
2042 @cindex to-group
2043 Elements like @code{(to-group . "some.group.name")} means that all
2044 posts in that group will be sent to @code{some.group.name}.
2045
2046 @item newsgroup
2047 @cindex newsgroup
2048 If you have @code{(newsgroup . t)} in the group parameter list, Gnus
2049 will treat all responses as if they were responses to news articles.
2050 This can be useful if you have a mail group that's really a mirror of a
2051 news group.
2052
2053 @item gcc-self
2054 @cindex gcc-self
2055 If @code{(gcc-self . t)} is present in the group parameter list, newly
2056 composed messages will be @code{Gcc}'d to the current group. If
2057 @code{(gcc-self . none)} is present, no @code{Gcc:} header will be
2058 generated, if @code{(gcc-self . "string")} is present, this string will
2059 be inserted literally as a @code{gcc} header.  This parameter takes
2060 precedence over any default @code{Gcc} rules as described later
2061 (@pxref{Archived Messages}).
2062
2063 @item auto-expire
2064 @cindex auto-expire
2065 If the group parameter has an element that looks like @code{(auto-expire
2066 . t)}, all articles read will be marked as expirable.  For an
2067 alternative approach, @pxref{Expiring Mail}.
2068
2069 @item total-expire
2070 @cindex total-expire
2071 If the group parameter has an element that looks like
2072 @code{(total-expire . t)}, all read articles will be put through the
2073 expiry process, even if they are not marked as expirable.  Use with
2074 caution.  Unread, ticked and dormant articles are not eligible for
2075 expiry.
2076
2077 @item expiry-wait
2078 @cindex expiry-wait
2079 @vindex nnmail-expiry-wait-function
2080 If the group parameter has an element that looks like @code{(expiry-wait
2081 . 10)}, this value will override any @code{nnmail-expiry-wait} and
2082 @code{nnmail-expiry-wait-function} when expiring expirable messages.
2083 The value can either be a number of days (not necessarily an integer) or
2084 the symbols @code{never} or @code{immediate}.
2085
2086 @item score-file
2087 @cindex score file group parameter
2088 Elements that look like @code{(score-file . "file")} will make
2089 @file{file} into the current score file for the group in question.  All
2090 interactive score entries will be put into this file.
2091
2092 @item adapt-file
2093 @cindex adapt file group parameter
2094 Elements that look like @code{(adapt-file . "file")} will make
2095 @file{file} into the current adaptive file for the group in question.
2096 All adaptive score entries will be put into this file.
2097
2098 @item admin-address
2099 When unsubscribing from a mailing list you should never send the
2100 unsubscription notice to the mailing list itself.  Instead, you'd send
2101 messages to the administrative address.  This parameter allows you to
2102 put the admin address somewhere convenient.
2103
2104 @item display
2105 Elements that look like @code{(display . MODE)} say which articles to
2106 display on entering the group.  Valid values are:
2107
2108 @table @code
2109 @item all
2110 Display all articles, both read and unread.
2111
2112 @item default
2113 Display the default visible articles, which normally includes unread and
2114 ticked articles.
2115 @end table
2116
2117 @item comment
2118 Elements that look like @code{(comment . "This is a comment")}
2119 are arbitrary comments on the group.  They are currently ignored by
2120 Gnus, but provide a place for you to store information on particular
2121 groups.
2122
2123 @item @var{(variable form)}
2124 You can use the group parameters to set variables local to the group you
2125 are entering.  If you want to turn threading off in @samp{news.answers},
2126 you could put @code{(gnus-show-threads nil)} in the group parameters of
2127 that group.  @code{gnus-show-threads} will be made into a local variable
2128 in the summary buffer you enter, and the form @code{nil} will be
2129 @code{eval}ed there.
2130
2131 This can also be used as a group-specific hook function, if you'd like.
2132 If you want to hear a beep when you enter a group, you could put
2133 something like @code{(dummy-variable (ding))} in the parameters of that
2134 group.  @code{dummy-variable} will be set to the result of the
2135 @code{(ding)} form, but who cares?
2136
2137 @end table
2138
2139 Use the @kbd{G p} command to edit group parameters of a group.  You
2140 might also be interested in reading about topic parameters (@pxref{Topic
2141 Parameters}).
2142
2143
2144 @node Listing Groups
2145 @section Listing Groups
2146 @cindex group listing
2147
2148 These commands all list various slices of the groups available.
2149
2150 @table @kbd
2151
2152 @item l
2153 @itemx A s
2154 @kindex A s (Group)
2155 @kindex l (Group)
2156 @findex gnus-group-list-groups
2157 List all groups that have unread articles
2158 (@code{gnus-group-list-groups}).  If the numeric prefix is used, this
2159 command will list only groups of level ARG and lower.  By default, it
2160 only lists groups of level five (i. e.,
2161 @code{gnus-group-default-list-level}) or lower (i.e., just subscribed
2162 groups).
2163
2164 @item L
2165 @itemx A u
2166 @kindex A u (Group)
2167 @kindex L (Group)
2168 @findex gnus-group-list-all-groups
2169 List all groups, whether they have unread articles or not
2170 (@code{gnus-group-list-all-groups}).  If the numeric prefix is used,
2171 this command will list only groups of level ARG and lower.  By default,
2172 it lists groups of level seven or lower (i.e., just subscribed and
2173 unsubscribed groups).
2174
2175 @item A l
2176 @kindex A l (Group)
2177 @findex gnus-group-list-level
2178 List all unread groups on a specific level
2179 (@code{gnus-group-list-level}).  If given a prefix, also list the groups
2180 with no unread articles.
2181
2182 @item A k
2183 @kindex A k (Group)
2184 @findex gnus-group-list-killed
2185 List all killed groups (@code{gnus-group-list-killed}).  If given a
2186 prefix argument, really list all groups that are available, but aren't
2187 currently (un)subscribed.  This could entail reading the active file
2188 from the server.
2189
2190 @item A z
2191 @kindex A z (Group)
2192 @findex gnus-group-list-zombies
2193 List all zombie groups (@code{gnus-group-list-zombies}).
2194
2195 @item A m
2196 @kindex A m (Group)
2197 @findex gnus-group-list-matching
2198 List all unread, subscribed groups with names that match a regexp
2199 (@code{gnus-group-list-matching}).
2200
2201 @item A M
2202 @kindex A M (Group)
2203 @findex gnus-group-list-all-matching
2204 List groups that match a regexp (@code{gnus-group-list-all-matching}).
2205
2206 @item A A
2207 @kindex A A (Group)
2208 @findex gnus-group-list-active
2209 List absolutely all groups in the active file(s) of the
2210 server(s) you are connected to (@code{gnus-group-list-active}).  This
2211 might very well take quite a while.  It might actually be a better idea
2212 to do a @kbd{A M} to list all matching, and just give @samp{.} as the
2213 thing to match on.  Also note that this command may list groups that
2214 don't exist (yet)---these will be listed as if they were killed groups.
2215 Take the output with some grains of salt.
2216
2217 @item A a
2218 @kindex A a (Group)
2219 @findex gnus-group-apropos
2220 List all groups that have names that match a regexp
2221 (@code{gnus-group-apropos}).
2222
2223 @item A d
2224 @kindex A d (Group)
2225 @findex gnus-group-description-apropos
2226 List all groups that have names or descriptions that match a regexp
2227 (@code{gnus-group-description-apropos}).
2228
2229 @end table
2230
2231 @vindex gnus-permanently-visible-groups
2232 @cindex visible group parameter
2233 Groups that match the @code{gnus-permanently-visible-groups} regexp will
2234 always be shown, whether they have unread articles or not.  You can also
2235 add the @code{visible} element to the group parameters in question to
2236 get the same effect.
2237
2238 @vindex gnus-list-groups-with-ticked-articles
2239 Groups that have just ticked articles in it are normally listed in the
2240 group buffer.  If @code{gnus-list-groups-with-ticked-articles} is
2241 @code{nil}, these groups will be treated just like totally empty
2242 groups.  It is @code{t} by default.
2243
2244
2245 @node Sorting Groups
2246 @section Sorting Groups
2247 @cindex sorting groups
2248
2249 @kindex C-c C-s (Group)
2250 @findex gnus-group-sort-groups
2251 @vindex gnus-group-sort-function
2252 The @kbd{C-c C-s} (@code{gnus-group-sort-groups}) command sorts the
2253 group buffer according to the function(s) given by the
2254 @code{gnus-group-sort-function} variable.  Available sorting functions
2255 include:
2256
2257 @table @code
2258
2259 @item gnus-group-sort-by-alphabet
2260 @findex gnus-group-sort-by-alphabet
2261 Sort the group names alphabetically.  This is the default.
2262
2263 @item gnus-group-sort-by-real-name
2264 @findex gnus-group-sort-by-real-name
2265 Sort the group alphabetically on the real (unprefixed) group names.
2266
2267 @item gnus-group-sort-by-level
2268 @findex gnus-group-sort-by-level
2269 Sort by group level.
2270
2271 @item gnus-group-sort-by-score
2272 @findex gnus-group-sort-by-score
2273 Sort by group score.  @xref{Group Score}.
2274
2275 @item gnus-group-sort-by-rank
2276 @findex gnus-group-sort-by-rank
2277 Sort by group score and then the group level.  The level and the score
2278 are, when taken together, the group's @dfn{rank}.  @xref{Group Score}.
2279
2280 @item gnus-group-sort-by-unread
2281 @findex gnus-group-sort-by-unread
2282 Sort by number of unread articles.
2283
2284 @item gnus-group-sort-by-method
2285 @findex gnus-group-sort-by-method
2286 Sort alphabetically on the select method.
2287
2288
2289 @end table
2290
2291 @code{gnus-group-sort-function} can also be a list of sorting
2292 functions.  In that case, the most significant sort key function must be
2293 the last one.
2294
2295
2296 There are also a number of commands for sorting directly according to
2297 some sorting criteria:
2298
2299 @table @kbd
2300 @item G S a
2301 @kindex G S a (Group)
2302 @findex gnus-group-sort-groups-by-alphabet
2303 Sort the group buffer alphabetically by group name
2304 (@code{gnus-group-sort-groups-by-alphabet}).
2305
2306 @item G S u
2307 @kindex G S u (Group)
2308 @findex gnus-group-sort-groups-by-unread
2309 Sort the group buffer by the number of unread articles
2310 (@code{gnus-group-sort-groups-by-unread}).
2311
2312 @item G S l
2313 @kindex G S l (Group)
2314 @findex gnus-group-sort-groups-by-level
2315 Sort the group buffer by group level
2316 (@code{gnus-group-sort-groups-by-level}).
2317
2318 @item G S v
2319 @kindex G S v (Group)
2320 @findex gnus-group-sort-groups-by-score
2321 Sort the group buffer by group score
2322 (@code{gnus-group-sort-groups-by-score}).  @xref{Group Score}.
2323
2324 @item G S r
2325 @kindex G S r (Group)
2326 @findex gnus-group-sort-groups-by-rank
2327 Sort the group buffer by group rank
2328 (@code{gnus-group-sort-groups-by-rank}).  @xref{Group Score}.
2329
2330 @item G S m
2331 @kindex G S m (Group)
2332 @findex gnus-group-sort-groups-by-method
2333 Sort the group buffer alphabetically by backend name
2334 (@code{gnus-group-sort-groups-by-method}).
2335
2336 @end table
2337
2338 When given a prefix, all these commands will sort in reverse order.
2339
2340 You can also sort a subset of the groups:
2341
2342 @table @kbd
2343 @item G P a
2344 @kindex G P a (Group)
2345 @findex gnus-group-sort-selected-groups-by-alphabet
2346 Sort the process/prefixed groups in the group buffer alphabetically by
2347 group name (@code{gnus-group-sort-selected-groups-by-alphabet}).
2348
2349 @item G P u
2350 @kindex G P u (Group)
2351 @findex gnus-group-sort-selected-groups-by-unread
2352 Sort the process/prefixed groups in the group buffer by the number of
2353 unread articles (@code{gnus-group-sort-selected-groups-by-unread}).
2354
2355 @item G P l
2356 @kindex G P l (Group)
2357 @findex gnus-group-sort-selected-groups-by-level
2358 Sort the process/prefixed groups in the group buffer by group level
2359 (@code{gnus-group-sort-selected-groups-by-level}).
2360
2361 @item G P v
2362 @kindex G P v (Group)
2363 @findex gnus-group-sort-selected-groups-by-score
2364 Sort the process/prefixed groups in the group buffer by group score
2365 (@code{gnus-group-sort-selected-groups-by-score}).  @xref{Group Score}.
2366
2367 @item G P r
2368 @kindex G P r (Group)
2369 @findex gnus-group-sort-selected-groups-by-rank
2370 Sort the process/prefixed groups in the group buffer by group rank
2371 (@code{gnus-group-sort-selected-groups-by-rank}).  @xref{Group Score}.
2372
2373 @item G P m
2374 @kindex G P m (Group)
2375 @findex gnus-group-sort-selected-groups-by-method
2376 Sort the process/prefixed groups in the group buffer alphabetically by
2377 backend name (@code{gnus-group-sort-selected-groups-by-method}).
2378
2379 @end table
2380
2381
2382
2383 @node Group Maintenance
2384 @section Group Maintenance
2385 @cindex bogus groups
2386
2387 @table @kbd
2388 @item b
2389 @kindex b (Group)
2390 @findex gnus-group-check-bogus-groups
2391 Find bogus groups and delete them
2392 (@code{gnus-group-check-bogus-groups}).
2393
2394 @item F
2395 @kindex F (Group)
2396 @findex gnus-group-find-new-groups
2397 Find new groups and process them (@code{gnus-group-find-new-groups}).
2398 With 1 @kbd{C-u}, use the @code{ask-server} method to query the server
2399 for new groups.  With 2 @kbd{C-u}'s, use most complete method possible
2400 to query the server for new groups, and subscribe the new groups as
2401 zombies.
2402
2403 @item C-c C-x
2404 @kindex C-c C-x (Group)
2405 @findex gnus-group-expire-articles
2406 Run all expirable articles in the current group through the expiry
2407 process (if any) (@code{gnus-group-expire-articles}).
2408
2409 @item C-c M-C-x
2410 @kindex C-c M-C-x (Group)
2411 @findex gnus-group-expire-all-groups
2412 Run all articles in all groups through the expiry process
2413 (@code{gnus-group-expire-all-groups}).
2414
2415 @end table
2416
2417
2418 @node Browse Foreign Server
2419 @section Browse Foreign Server
2420 @cindex foreign servers
2421 @cindex browsing servers
2422
2423 @table @kbd
2424 @item B
2425 @kindex B (Group)
2426 @findex gnus-group-browse-foreign-server
2427 You will be queried for a select method and a server name.  Gnus will
2428 then attempt to contact this server and let you browse the groups there
2429 (@code{gnus-group-browse-foreign-server}).
2430 @end table
2431
2432 @findex gnus-browse-mode
2433 A new buffer with a list of available groups will appear.  This buffer
2434 will use the @code{gnus-browse-mode}.  This buffer looks a bit (well,
2435 a lot) like a normal group buffer.
2436
2437 Here's a list of keystrokes available in the browse mode:
2438
2439 @table @kbd
2440 @item n
2441 @kindex n (Browse)
2442 @findex gnus-group-next-group
2443 Go to the next group (@code{gnus-group-next-group}).
2444
2445 @item p
2446 @kindex p (Browse)
2447 @findex gnus-group-prev-group
2448 Go to the previous group (@code{gnus-group-prev-group}).
2449
2450 @item SPACE
2451 @kindex SPACE (Browse)
2452 @findex gnus-browse-read-group
2453 Enter the current group and display the first article
2454 (@code{gnus-browse-read-group}).
2455
2456 @item RET
2457 @kindex RET (Browse)
2458 @findex gnus-browse-select-group
2459 Enter the current group (@code{gnus-browse-select-group}).
2460
2461 @item u
2462 @kindex u (Browse)
2463 @findex gnus-browse-unsubscribe-current-group
2464 Unsubscribe to the current group, or, as will be the case here,
2465 subscribe to it (@code{gnus-browse-unsubscribe-current-group}).
2466
2467 @item l
2468 @itemx q
2469 @kindex q (Browse)
2470 @kindex l (Browse)
2471 @findex gnus-browse-exit
2472 Exit browse mode (@code{gnus-browse-exit}).
2473
2474 @item ?
2475 @kindex ? (Browse)
2476 @findex gnus-browse-describe-briefly
2477 Describe browse mode briefly (well, there's not much to describe, is
2478 there) (@code{gnus-browse-describe-briefly}).
2479 @end table
2480
2481
2482 @node Exiting Gnus
2483 @section Exiting Gnus
2484 @cindex exiting Gnus
2485
2486 Yes, Gnus is ex(c)iting.
2487
2488 @table @kbd
2489 @item z
2490 @kindex z (Group)
2491 @findex gnus-group-suspend
2492 Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
2493 but it kills all buffers except the Group buffer.  I'm not sure why this
2494 is a gain, but then who am I to judge?
2495
2496 @item q
2497 @kindex q (Group)
2498 @findex gnus-group-exit
2499 @c @icon{gnus-group-exit}
2500 Quit Gnus (@code{gnus-group-exit}).
2501
2502 @item Q
2503 @kindex Q (Group)
2504 @findex gnus-group-quit
2505 Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}).
2506 The dribble file will be saved, though (@pxref{Auto Save}).
2507 @end table
2508
2509 @vindex gnus-exit-gnus-hook
2510 @vindex gnus-suspend-gnus-hook
2511 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
2512 @code{gnus-exit-gnus-hook} is called when you quit Gnus, while
2513 @code{gnus-after-exiting-gnus-hook} is called as the final item when
2514 exiting Gnus.
2515
2516 @findex gnus-unload
2517 @cindex unloading
2518 If you wish to completely unload Gnus and all its adherents, you can use
2519 the @code{gnus-unload} command.  This command is also very handy when
2520 trying to customize meta-variables.
2521
2522 Note:
2523
2524 @quotation
2525 Miss Lisa Cannifax, while sitting in English class, felt her feet go
2526 numbly heavy and herself fall into a hazy trance as the boy sitting
2527 behind her drew repeated lines with his pencil across the back of her
2528 plastic chair.
2529 @end quotation
2530
2531
2532 @node Group Topics
2533 @section Group Topics
2534 @cindex topics
2535
2536 If you read lots and lots of groups, it might be convenient to group
2537 them hierarchically according to topics.  You put your Emacs groups over
2538 here, your sex groups over there, and the rest (what, two groups or so?)
2539 you put in some misc section that you never bother with anyway.  You can
2540 even group the Emacs sex groups as a sub-topic to either the Emacs
2541 groups or the sex groups---or both!  Go wild!
2542
2543 @iftex
2544 @iflatex
2545 \gnusfigure{Group Topics}{400}{
2546 \put(75,50){\epsfig{figure=tmp/group-topic.ps,height=9cm}}
2547 }
2548 @end iflatex
2549 @end iftex
2550
2551 Here's an example:
2552
2553 @example
2554 Gnus
2555   Emacs -- I wuw it!
2556      3: comp.emacs
2557      2: alt.religion.emacs
2558     Naughty Emacs
2559      452: alt.sex.emacs
2560        0: comp.talk.emacs.recovery
2561   Misc
2562      8: comp.binaries.fractals
2563     13: comp.sources.unix
2564 @end example
2565
2566 @findex gnus-topic-mode
2567 @kindex t (Group)
2568 To get this @emph{fab} functionality you simply turn on (ooh!) the
2569 @code{gnus-topic} minor mode---type @kbd{t} in the group buffer.  (This
2570 is a toggling command.)
2571
2572 Go ahead, just try it.  I'll still be here when you get back.  La de
2573 dum...  Nice tune, that...  la la la...  What, you're back? Yes, and now
2574 press @kbd{l}.  There.  All your groups are now listed under
2575 @samp{misc}.  Doesn't that make you feel all warm and fuzzy?  Hot and
2576 bothered?
2577
2578 If you want this permanently enabled, you should add that minor mode to
2579 the hook for the group mode:
2580
2581 @lisp
2582 (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
2583 @end lisp
2584
2585 @menu
2586 * Topic Variables::    How to customize the topics the Lisp Way.
2587 * Topic Commands::     Interactive E-Z commands.
2588 * Topic Sorting::      Sorting each topic individually.
2589 * Topic Topology::     A map of the world.
2590 * Topic Parameters::   Parameters that apply to all groups in a topic.
2591 @end menu
2592
2593
2594 @node Topic Variables
2595 @subsection Topic Variables
2596 @cindex topic variables
2597
2598 Now, if you select a topic, it will fold/unfold that topic, which is
2599 really neat, I think.
2600
2601 @vindex gnus-topic-line-format
2602 The topic lines themselves are created according to the
2603 @code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
2604 Valid elements are:
2605
2606 @table @samp
2607 @item i
2608 Indentation.
2609 @item n
2610 Topic name.
2611 @item v
2612 Visibility.
2613 @item l
2614 Level.
2615 @item g
2616 Number of groups in the topic.
2617 @item a
2618 Number of unread articles in the topic.
2619 @item A
2620 Number of unread articles in the topic and all its subtopics.
2621 @end table
2622
2623 @vindex gnus-topic-indent-level
2624 Each sub-topic (and the groups in the sub-topics) will be indented with
2625 @code{gnus-topic-indent-level} times the topic level number of spaces.
2626 The default is 2.
2627
2628 @vindex gnus-topic-mode-hook
2629 @code{gnus-topic-mode-hook} is called in topic minor mode buffers.
2630
2631 @vindex gnus-topic-display-empty-topics
2632 The @code{gnus-topic-display-empty-topics} says whether to display even
2633 topics that have no unread articles in them.  The default is @code{t}.
2634
2635
2636 @node Topic Commands
2637 @subsection Topic Commands
2638 @cindex topic commands
2639
2640 When the topic minor mode is turned on, a new @kbd{T} submap will be
2641 available.  In addition, a few of the standard keys change their
2642 definitions slightly.
2643
2644 @table @kbd
2645
2646 @item T n
2647 @kindex T n (Topic)
2648 @findex gnus-topic-create-topic
2649 Prompt for a new topic name and create it
2650 (@code{gnus-topic-create-topic}).
2651
2652 @item T m
2653 @kindex T m (Topic)
2654 @findex gnus-topic-move-group
2655 Move the current group to some other topic
2656 (@code{gnus-topic-move-group}).  This command uses the process/prefix
2657 convention (@pxref{Process/Prefix}).
2658
2659 @item T c
2660 @kindex T c (Topic)
2661 @findex gnus-topic-copy-group
2662 Copy the current group to some other topic
2663 (@code{gnus-topic-copy-group}).  This command uses the process/prefix
2664 convention (@pxref{Process/Prefix}).
2665
2666 @item T D
2667 @kindex T D (Topic)
2668 @findex gnus-topic-remove-group
2669 Remove a group from the current topic (@code{gnus-topic-remove-group}).
2670 This command is mainly useful if you have the same group in several
2671 topics and wish to remove it from one of the topics.  You may also
2672 remove a group from all topics, but in that case, Gnus will add it to
2673 the root topic the next time you start Gnus.  In fact, all new groups
2674 (which, naturally, don't belong to any topic) will show up in the root
2675 topic. 
2676
2677 This command uses the process/prefix convention
2678 (@pxref{Process/Prefix}).
2679
2680 @item T M
2681 @kindex T M (Topic)
2682 @findex gnus-topic-move-matching
2683 Move all groups that match some regular expression to a topic
2684 (@code{gnus-topic-move-matching}).
2685
2686 @item T C
2687 @kindex T C (Topic)
2688 @findex gnus-topic-copy-matching
2689 Copy all groups that match some regular expression to a topic
2690 (@code{gnus-topic-copy-matching}).
2691
2692 @item T H
2693 @kindex T H (Topic)
2694 @findex gnus-topic-toggle-display-empty-topics
2695 Toggle hiding empty topics
2696 (@code{gnus-topic-toggle-display-empty-topics}).
2697
2698 @item T #
2699 @kindex T # (Topic)
2700 @findex gnus-topic-mark-topic
2701 Mark all groups in the current topic with the process mark
2702 (@code{gnus-topic-mark-topic}).
2703
2704 @item T M-#
2705 @kindex T M-# (Topic)
2706 @findex gnus-topic-unmark-topic
2707 Remove the process mark from all groups in the current topic
2708 (@code{gnus-topic-unmark-topic}).
2709
2710 @item RET
2711 @kindex RET (Topic)
2712 @findex gnus-topic-select-group
2713 @itemx SPACE
2714 Either select a group or fold a topic (@code{gnus-topic-select-group}).
2715 When you perform this command on a group, you'll enter the group, as
2716 usual.  When done on a topic line, the topic will be folded (if it was
2717 visible) or unfolded (if it was folded already).  So it's basically a
2718 toggling command on topics.  In addition, if you give a numerical
2719 prefix, group on that level (and lower) will be displayed.
2720
2721 @item T TAB
2722 @itemx TAB
2723 @kindex T TAB (Topic)
2724 @kindex TAB (Topic)
2725 @findex gnus-topic-indent
2726 ``Indent'' the current topic so that it becomes a sub-topic of the
2727 previous topic (@code{gnus-topic-indent}).  If given a prefix,
2728 ``un-indent'' the topic instead.
2729
2730 @item M-TAB
2731 @kindex M-TAB (Topic)
2732 @findex gnus-topic-unindent
2733 ``Un-indent'' the current topic so that it becomes a sub-topic of the
2734 parent of its current parent (@code{gnus-topic-unindent}).  
2735
2736 @item C-k
2737 @kindex C-k (Topic)
2738 @findex gnus-topic-kill-group
2739 Kill a group or topic (@code{gnus-topic-kill-group}).  All groups in the
2740 topic will be removed along with the topic.
2741
2742 @item C-y
2743 @kindex C-y (Topic)
2744 @findex gnus-topic-yank-group
2745 Yank the previously killed group or topic
2746 (@code{gnus-topic-yank-group}).  Note that all topics will be yanked
2747 before all groups.
2748
2749 @item T r
2750 @kindex T r (Topic)
2751 @findex gnus-topic-rename
2752 Rename a topic (@code{gnus-topic-rename}).
2753
2754 @item T DEL
2755 @kindex T DEL (Topic)
2756 @findex gnus-topic-delete
2757 Delete an empty topic (@code{gnus-topic-delete}).
2758
2759 @item A T
2760 @kindex A T (Topic)
2761 @findex gnus-topic-list-active
2762 List all groups that Gnus knows about in a topics-ified way
2763 (@code{gnus-topic-list-active}).
2764
2765 @item G p
2766 @kindex G p (Topic)
2767 @findex gnus-topic-edit-parameters
2768 @cindex group parameters
2769 @cindex topic parameters
2770 @cindex parameters
2771 Edit the topic parameters (@code{gnus-topic-edit-parameters}).
2772 @xref{Topic Parameters}.
2773
2774 @end table
2775
2776
2777 @node Topic Sorting
2778 @subsection Topic Sorting
2779 @cindex topic sorting
2780
2781 You can sort the groups in each topic individually with the following
2782 commands:
2783
2784
2785 @table @kbd
2786 @item T S a
2787 @kindex T S a (Topic)
2788 @findex gnus-topic-sort-groups-by-alphabet
2789 Sort the current topic alphabetically by group name
2790 (@code{gnus-topic-sort-groups-by-alphabet}).
2791
2792 @item T S u
2793 @kindex T S u (Topic)
2794 @findex gnus-topic-sort-groups-by-unread
2795 Sort the current topic by the number of unread articles
2796 (@code{gnus-topic-sort-groups-by-unread}).
2797
2798 @item T S l
2799 @kindex T S l (Topic)
2800 @findex gnus-topic-sort-groups-by-level
2801 Sort the current topic by group level
2802 (@code{gnus-topic-sort-groups-by-level}).
2803
2804 @item T S v
2805 @kindex T S v (Topic)
2806 @findex gnus-topic-sort-groups-by-score
2807 Sort the current topic by group score
2808 (@code{gnus-topic-sort-groups-by-score}).  @xref{Group Score}.
2809
2810 @item T S r
2811 @kindex T S r (Topic)
2812 @findex gnus-topic-sort-groups-by-rank
2813 Sort the current topic by group rank
2814 (@code{gnus-topic-sort-groups-by-rank}).  @xref{Group Score}.
2815
2816 @item T S m
2817 @kindex T S m (Topic)
2818 @findex gnus-topic-sort-groups-by-method
2819 Sort the current topic alphabetically by backend name
2820 (@code{gnus-topic-sort-groups-by-method}).
2821
2822 @end table
2823
2824 @xref{Sorting Groups} for more information about group sorting.
2825
2826
2827 @node Topic Topology
2828 @subsection Topic Topology
2829 @cindex topic topology
2830 @cindex topology
2831
2832 So, let's have a look at an example group buffer:
2833
2834 @example
2835 Gnus
2836   Emacs -- I wuw it!
2837      3: comp.emacs
2838      2: alt.religion.emacs
2839     Naughty Emacs
2840      452: alt.sex.emacs
2841        0: comp.talk.emacs.recovery
2842   Misc
2843      8: comp.binaries.fractals
2844     13: comp.sources.unix
2845 @end example
2846
2847 So, here we have one top-level topic (@samp{Gnus}), two topics under
2848 that, and one sub-topic under one of the sub-topics.  (There is always
2849 just one (1) top-level topic).  This topology can be expressed as
2850 follows:
2851
2852 @lisp
2853 (("Gnus" visible)
2854  (("Emacs -- I wuw it!" visible)
2855   (("Naughty Emacs" visible)))
2856  (("Misc" visible)))
2857 @end lisp
2858
2859 @vindex gnus-topic-topology
2860 This is in fact how the variable @code{gnus-topic-topology} would look
2861 for the display above.  That variable is saved in the @file{.newsrc.eld}
2862 file, and shouldn't be messed with manually---unless you really want
2863 to.  Since this variable is read from the @file{.newsrc.eld} file,
2864 setting it in any other startup files will have no effect.
2865
2866 This topology shows what topics are sub-topics of what topics (right),
2867 and which topics are visible.  Two settings are currently
2868 allowed---@code{visible} and @code{invisible}.
2869
2870
2871 @node Topic Parameters
2872 @subsection Topic Parameters
2873 @cindex topic parameters
2874
2875 All groups in a topic will inherit group parameters from the parent (and
2876 ancestor) topic parameters.  All valid group parameters are valid topic
2877 parameters (@pxref{Group Parameters}).
2878
2879 Group parameters (of course) override topic parameters, and topic
2880 parameters in sub-topics override topic parameters in super-topics.  You
2881 know.  Normal inheritance rules.  (@dfn{Rules} is here a noun, not a
2882 verb, although you may feel free to disagree with me here.)
2883
2884 @example
2885 Gnus
2886   Emacs
2887      3: comp.emacs
2888      2: alt.religion.emacs
2889    452: alt.sex.emacs
2890     Relief
2891      452: alt.sex.emacs
2892        0: comp.talk.emacs.recovery
2893   Misc
2894      8: comp.binaries.fractals
2895     13: comp.sources.unix
2896    452: alt.sex.emacs
2897 @end example
2898
2899 The @samp{Emacs} topic has the topic parameter @code{(score-file
2900 . "emacs.SCORE")}; the @samp{Relief} topic has the topic parameter
2901 @code{(score-file . "relief.SCORE")}; and the @samp{Misc} topic has the
2902 topic parameter @code{(score-file . "emacs.SCORE")}.  In addition,
2903 @* @samp{alt.religion.emacs} has the group parameter @code{(score-file
2904 . "religion.SCORE")}.
2905
2906 Now, when you enter @samp{alt.sex.emacs} in the @samp{Relief} topic, you
2907 will get the @file{relief.SCORE} home score file.  If you enter the same
2908 group in the @samp{Emacs} topic, you'll get the @file{emacs.SCORE} home
2909 score file.  If you enter the group @samp{alt.religion.emacs}, you'll
2910 get the @file{religion.SCORE} home score file.
2911
2912 This seems rather simple and self-evident, doesn't it?  Well, yes.  But
2913 there are some problems, especially with the @code{total-expiry}
2914 parameter.  Say you have a mail group in two topics; one with
2915 @code{total-expiry} and one without.  What happens when you do @kbd{M-x
2916 gnus-expire-all-expirable-groups}?  Gnus has no way of telling which one
2917 of these topics you mean to expire articles from, so anything may
2918 happen.  In fact, I hereby declare that it is @dfn{undefined} what
2919 happens.  You just have to be careful if you do stuff like that.
2920
2921
2922 @node Misc Group Stuff
2923 @section Misc Group Stuff
2924
2925 @menu
2926 * Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
2927 * Group Information::     Information and help on groups and Gnus.
2928 * Group Timestamp::       Making Gnus keep track of when you last read a group.
2929 * File Commands::         Reading and writing the Gnus files.
2930 @end menu
2931
2932 @table @kbd
2933
2934 @item ^
2935 @kindex ^ (Group)
2936 @findex gnus-group-enter-server-mode
2937 Enter the server buffer (@code{gnus-group-enter-server-mode}).
2938 @xref{The Server Buffer}.
2939
2940 @item a
2941 @kindex a (Group)
2942 @findex gnus-group-post-news
2943 Post an article to a group (@code{gnus-group-post-news}).  If given a
2944 prefix, the current group name will be used as the default.
2945
2946 @item m
2947 @kindex m (Group)
2948 @findex gnus-group-mail
2949 Mail a message somewhere (@code{gnus-group-mail}).
2950
2951 @end table
2952
2953 Variables for the group buffer:
2954
2955 @table @code
2956
2957 @item gnus-group-mode-hook
2958 @vindex gnus-group-mode-hook
2959 is called after the group buffer has been
2960 created.
2961
2962 @item gnus-group-prepare-hook
2963 @vindex gnus-group-prepare-hook
2964 is called after the group buffer is
2965 generated.  It may be used to modify the buffer in some strange,
2966 unnatural way.
2967
2968 @item gnus-group-prepared-hook
2969 @vindex gnus-group-prepare-hook
2970 is called as the very last thing after the group buffer has been
2971 generated.  It may be used to move point around, for instance.
2972
2973 @item gnus-permanently-visible-groups
2974 @vindex gnus-permanently-visible-groups
2975 Groups matching this regexp will always be listed in the group buffer,
2976 whether they are empty or not.
2977
2978 @end table
2979
2980
2981 @node Scanning New Messages
2982 @subsection Scanning New Messages
2983 @cindex new messages
2984 @cindex scanning new news
2985
2986 @table @kbd
2987
2988 @item g
2989 @kindex g (Group)
2990 @findex gnus-group-get-new-news
2991 @c @icon{gnus-group-get-new-news}
2992 Check the server(s) for new articles.  If the numerical prefix is used,
2993 this command will check only groups of level @var{arg} and lower
2994 (@code{gnus-group-get-new-news}).  If given a non-numerical prefix, this
2995 command will force a total re-reading of the active file(s) from the
2996 backend(s).
2997
2998 @item M-g
2999 @kindex M-g (Group)
3000 @findex gnus-group-get-new-news-this-group
3001 @vindex gnus-goto-next-group-when-activating
3002 @c @icon{gnus-group-get-new-news-this-group}
3003 Check whether new articles have arrived in the current group
3004 (@code{gnus-group-get-new-news-this-group}).
3005 @code{gnus-goto-next-group-when-activating} says whether this command is
3006 to move point to the next group or not.  It is @code{t} by default.
3007
3008 @findex gnus-activate-all-groups
3009 @cindex activating groups
3010 @item C-c M-g
3011 @kindex C-c M-g (Group)
3012 Activate absolutely all groups (@code{gnus-activate-all-groups}).
3013
3014 @item R
3015 @kindex R (Group)
3016 @cindex restarting
3017 @findex gnus-group-restart
3018 Restart Gnus (@code{gnus-group-restart}).  This saves the @file{.newsrc}
3019 file(s), closes the connection to all servers, clears up all run-time
3020 Gnus variables, and then starts Gnus all over again.
3021
3022 @end table
3023
3024 @vindex gnus-get-new-news-hook
3025 @code{gnus-get-new-news-hook} is run just before checking for new news.
3026
3027 @vindex gnus-after-getting-new-news-hook
3028 @code{gnus-after-getting-new-news-hook} is run after checking for new
3029 news.
3030
3031
3032 @node Group Information
3033 @subsection Group Information
3034 @cindex group information
3035 @cindex information on groups
3036
3037 @table @kbd
3038
3039
3040 @item H f
3041 @kindex H f (Group)
3042 @findex gnus-group-fetch-faq
3043 @vindex gnus-group-faq-directory
3044 @cindex FAQ
3045 @cindex ange-ftp
3046 Try to fetch the FAQ for the current group
3047 (@code{gnus-group-fetch-faq}).  Gnus will try to get the FAQ from
3048 @code{gnus-group-faq-directory}, which is usually a directory on a
3049 remote machine.  This variable can also be a list of directories.  In
3050 that case, giving a prefix to this command will allow you to choose
3051 between the various sites.  @code{ange-ftp} (or @code{efs}) will be used
3052 for fetching the file.
3053
3054 If fetching from the first site is unsuccessful, Gnus will attempt to go
3055 through @code{gnus-group-faq-directory} and try to open them one by one.
3056
3057 @item H d
3058 @itemx C-c C-d
3059 @c @icon{gnus-group-describe-group}
3060 @kindex H d (Group)
3061 @kindex C-c C-d (Group)
3062 @cindex describing groups
3063 @cindex group description
3064 @findex gnus-group-describe-group
3065 Describe the current group (@code{gnus-group-describe-group}).  If given
3066 a prefix, force Gnus to re-read the description from the server.
3067
3068 @item M-d
3069 @kindex M-d (Group)
3070 @findex gnus-group-describe-all-groups
3071 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
3072 prefix, force Gnus to re-read the description file from the server.
3073
3074 @item H v
3075 @itemx V
3076 @kindex V (Group)
3077 @kindex H v (Group)
3078 @cindex version
3079 @findex gnus-version
3080 Display current Gnus version numbers (@code{gnus-version}).
3081
3082 @item ?
3083 @kindex ? (Group)
3084 @findex gnus-group-describe-briefly
3085 Give a very short help message (@code{gnus-group-describe-briefly}).
3086
3087 @item C-c C-i
3088 @kindex C-c C-i (Group)
3089 @cindex info
3090 @cindex manual
3091 @findex gnus-info-find-node
3092 Go to the Gnus info node (@code{gnus-info-find-node}).
3093 @end table
3094
3095
3096 @node Group Timestamp
3097 @subsection Group Timestamp
3098 @cindex timestamps
3099 @cindex group timestamps
3100
3101 It can be convenient to let Gnus keep track of when you last read a
3102 group.  To set the ball rolling, you should add
3103 @code{gnus-group-set-timestamp} to @code{gnus-select-group-hook}:
3104
3105 @lisp
3106 (add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
3107 @end lisp
3108
3109 After doing this, each time you enter a group, it'll be recorded.
3110
3111 This information can be displayed in various ways---the easiest is to
3112 use the @samp{%d} spec in the group line format:
3113
3114 @lisp
3115 (setq gnus-group-line-format
3116       "%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")
3117 @end lisp
3118
3119 This will result in lines looking like:
3120
3121 @example
3122 *        0: mail.ding                                19961002T012943
3123          0: custom                                   19961002T012713
3124 @end example
3125
3126 As you can see, the date is displayed in compact ISO 8601 format.  This
3127 may be a bit too much, so to just display the date, you could say
3128 something like:
3129
3130 @lisp
3131 (setq gnus-group-line-format
3132       "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
3133 @end lisp
3134
3135
3136 @node File Commands
3137 @subsection File Commands
3138 @cindex file commands
3139
3140 @table @kbd
3141
3142 @item r
3143 @kindex r (Group)
3144 @findex gnus-group-read-init-file
3145 @vindex gnus-init-file
3146 @cindex reading init file
3147 Re-read the init file (@code{gnus-init-file}, which defaults to
3148 @file{~/.gnus}) (@code{gnus-group-read-init-file}).
3149
3150 @item s
3151 @kindex s (Group)
3152 @findex gnus-group-save-newsrc
3153 @cindex saving .newsrc
3154 Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
3155 (@code{gnus-group-save-newsrc}).  If given a prefix, force saving the
3156 file(s) whether Gnus thinks it is necessary or not.
3157
3158 @c @item Z
3159 @c @kindex Z (Group)
3160 @c @findex gnus-group-clear-dribble
3161 @c Clear the dribble buffer (@code{gnus-group-clear-dribble}).
3162
3163 @end table
3164
3165
3166 @node The Summary Buffer
3167 @chapter The Summary Buffer
3168 @cindex summary buffer
3169
3170 A line for each article is displayed in the summary buffer.  You can
3171 move around, read articles, post articles and reply to articles.
3172
3173 The most common way to a summary buffer is to select a group from the
3174 group buffer (@pxref{Selecting a Group}).
3175
3176 You can have as many summary buffers open as you wish.
3177
3178 @menu
3179 * Summary Buffer Format::       Deciding how the summary buffer is to look.
3180 * Summary Maneuvering::         Moving around the summary buffer.
3181 * Choosing Articles::           Reading articles.
3182 * Paging the Article::          Scrolling the current article.
3183 * Reply Followup and Post::     Posting articles.
3184 * Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''
3185 * Marking Articles::            Marking articles as read, expirable, etc.
3186 * Limiting::                    You can limit the summary buffer.
3187 * Threading::                   How threads are made.
3188 * Sorting::                     How articles and threads are sorted.
3189 * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
3190 * Article Caching::             You may store articles in a cache.
3191 * Persistent Articles::         Making articles expiry-resistant.
3192 * Article Backlog::             Having already read articles hang around.
3193 * Saving Articles::             Ways of customizing article saving.
3194 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
3195 * Article Treatment::           The article buffer can be mangled at will.
3196 * Article Commands::            Doing various things with the article buffer.
3197 * Summary Sorting::             Sorting the summary buffer in various ways.
3198 * Finding the Parent::          No child support? Get the parent.
3199 * Alternative Approaches::      Reading using non-default summaries.
3200 * Tree Display::                A more visual display of threads.
3201 * Mail Group Commands::         Some commands can only be used in mail groups.
3202 * Various Summary Stuff::       What didn't fit anywhere else.
3203 * Exiting the Summary Buffer::  Returning to the Group buffer.
3204 * Crosspost Handling::          How crossposted articles are dealt with.
3205 * Duplicate Suppression::       An alternative when crosspost handling fails.
3206 @end menu
3207
3208
3209 @node Summary Buffer Format
3210 @section Summary Buffer Format
3211 @cindex summary buffer format
3212
3213 @iftex
3214 @iflatex
3215 \gnusfigure{The Summary Buffer}{180}{
3216 \put(0,0){\epsfig{figure=tmp/summary.ps,width=7.5cm}}
3217 \put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-article.ps,width=7.5cm}}}
3218 }
3219 @end iflatex
3220 @end iftex
3221
3222 @menu
3223 * Summary Buffer Lines::     You can specify how summary lines should look.
3224 * Summary Buffer Mode Line:: You can say how the mode line should look.
3225 * Summary Highlighting::     Making the summary buffer all pretty and nice.
3226 @end menu
3227
3228 @findex mail-extract-address-components
3229 @findex gnus-extract-address-components
3230 @vindex gnus-extract-address-components
3231 Gnus will use the value of the @code{gnus-extract-address-components}
3232 variable as a function for getting the name and address parts of a
3233 @code{From} header.  Two pre-defined functions exist:
3234 @code{gnus-extract-address-components}, which is the default, quite
3235 fast, and too simplistic solution; and
3236 @code{mail-extract-address-components}, which works very nicely, but is
3237 slower.  The default function will return the wrong answer in 5% of the
3238 cases.  If this is unacceptable to you, use the other function instead.
3239
3240 @vindex gnus-summary-same-subject
3241 @code{gnus-summary-same-subject} is a string indicating that the current
3242 article has the same subject as the previous.  This string will be used
3243 with those specs that require it.  The default is @code{""}.
3244
3245
3246 @node Summary Buffer Lines
3247 @subsection Summary Buffer Lines
3248
3249 @vindex gnus-summary-line-format
3250 You can change the format of the lines in the summary buffer by changing
3251 the @code{gnus-summary-line-format} variable.  It works along the same
3252 lines as a normal @code{format} string, with some extensions
3253 (@pxref{Formatting Variables}).
3254
3255 The default string is @samp{%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n}.
3256
3257 The following format specification characters are understood:
3258
3259 @table @samp
3260 @item N
3261 Article number.
3262 @item S
3263 Subject string.
3264 @item s
3265 Subject if the article is the root of the thread or the previous article
3266 had a different subject, @code{gnus-summary-same-subject} otherwise.
3267 (@code{gnus-summary-same-subject} defaults to @code{""}.)
3268 @item F
3269 Full @code{From} header.
3270 @item n
3271 The name (from the @code{From} header).
3272 @item a
3273 The name (from the @code{From} header).  This differs from the @code{n}
3274 spec in that it uses the function designated by the
3275 @code{gnus-extract-address-components} variable, which is slower, but
3276 may be more thorough.
3277 @item A
3278 The address (from the @code{From} header).  This works the same way as
3279 the @code{a} spec.
3280 @item L
3281 Number of lines in the article.
3282 @item c
3283 Number of characters in the article.
3284 @item I
3285 Indentation based on thread level (@pxref{Customizing Threading}).
3286 @item T
3287 Nothing if the article is a root and lots of spaces if it isn't (it
3288 pushes everything after it off the screen).
3289 @item [
3290 Opening bracket, which is normally @samp{[}, but can also be @samp{<}
3291 for adopted articles (@pxref{Customizing Threading}).
3292 @item ]
3293 Closing bracket, which is normally @samp{]}, but can also be @samp{>}
3294 for adopted articles.
3295 @item >
3296 One space for each thread level.
3297 @item <
3298 Twenty minus thread level spaces.
3299 @item U
3300 Unread.
3301
3302 @item R
3303 This misleadingly named specifier is the @dfn{secondary mark}.  This
3304 mark will say whether the article has been replied to, has been cached,
3305 or has been saved.  
3306
3307 @item i
3308 Score as a number (@pxref{Scoring}).
3309 @item z
3310 @vindex gnus-summary-zcore-fuzz
3311 Zcore, @samp{+} if above the default level and @samp{-} if below the
3312 default level.  If the difference between
3313 @code{gnus-summary-default-score} and the score is less than
3314 @code{gnus-summary-zcore-fuzz}, this spec will not be used.
3315 @item V
3316 Total thread score.
3317 @item x
3318 @code{Xref}.
3319 @item D
3320 @code{Date}.
3321 @item d
3322 The @code{Date} in @code{DD-MMM} format.
3323 @item o
3324 The @code{Date} in @var{YYYYMMDD}@code{T}@var{HHMMSS} format.
3325 @item M
3326 @code{Message-ID}.
3327 @item r
3328 @code{References}.
3329 @item t
3330 Number of articles in the current sub-thread.  Using this spec will slow
3331 down summary buffer generation somewhat.
3332 @item e
3333 An @samp{=} (@code{gnus-not-empty-thread-mark}) will be displayed if the
3334 article has any children.
3335 @item P
3336 The line number.
3337 @item O
3338 Download mark.
3339 @item u
3340 User defined specifier.  The next character in the format string should
3341 be a letter.  Gnus will call the function
3342 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
3343 following @samp{%u}.  The function will be passed the current header as
3344 argument.  The function should return a string, which will be inserted
3345 into the summary just like information from any other summary specifier.
3346 @end table
3347
3348 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
3349 have to be handled with care.  For reasons of efficiency, Gnus will
3350 compute what column these characters will end up in, and ``hard-code''
3351 that.  This means that it is invalid to have these specs after a
3352 variable-length spec.  Well, you might not be arrested, but your summary
3353 buffer will look strange, which is bad enough.
3354
3355 The smart choice is to have these specs as far to the left as possible.
3356 (Isn't that the case with everything, though?  But I digress.)
3357
3358 This restriction may disappear in later versions of Gnus.
3359
3360
3361 @node Summary Buffer Mode Line
3362 @subsection Summary Buffer Mode Line
3363
3364 @vindex gnus-summary-mode-line-format
3365 You can also change the format of the summary mode bar (@pxref{Mode Line
3366 Formatting}).  Set @code{gnus-summary-mode-line-format} to whatever you
3367 like.  The default is @samp{Gnus: %%b [%A] %Z}.
3368
3369 Here are the elements you can play with:
3370
3371 @table @samp
3372 @item G
3373 Group name.
3374 @item p
3375 Unprefixed group name.
3376 @item A
3377 Current article number.
3378 @item z
3379 Current article score.
3380 @item V
3381 Gnus version.
3382 @item U
3383 Number of unread articles in this group.
3384 @item e
3385 Number of unread articles in this group that aren't displayed in the
3386 summary buffer.
3387 @item Z
3388 A string with the number of unread and unselected articles represented
3389 either as @samp{<%U(+%e) more>} if there are both unread and unselected
3390 articles, and just as @samp{<%U more>} if there are just unread articles
3391 and no unselected ones.
3392 @item g
3393 Shortish group name.  For instance, @samp{rec.arts.anime} will be
3394 shortened to @samp{r.a.anime}.
3395 @item S
3396 Subject of the current article.
3397 @item u
3398 User-defined spec (@pxref{User-Defined Specs}).
3399 @item s
3400 Name of the current score file (@pxref{Scoring}).
3401 @item d
3402 Number of dormant articles (@pxref{Unread Articles}).
3403 @item t
3404 Number of ticked articles (@pxref{Unread Articles}).
3405 @item r
3406 Number of articles that have been marked as read in this session.
3407 @item E
3408 Number of articles expunged by the score files.
3409 @end table
3410
3411
3412 @node Summary Highlighting
3413 @subsection Summary Highlighting
3414
3415 @table @code
3416
3417 @item gnus-visual-mark-article-hook
3418 @vindex gnus-visual-mark-article-hook
3419 This hook is run after selecting an article.  It is meant to be used for
3420 highlighting the article in some way.  It is not run if
3421 @code{gnus-visual} is @code{nil}.
3422
3423 @item gnus-summary-update-hook
3424 @vindex gnus-summary-update-hook
3425 This hook is called when a summary line is changed.  It is not run if
3426 @code{gnus-visual} is @code{nil}.
3427
3428 @item gnus-summary-selected-face
3429 @vindex gnus-summary-selected-face
3430 This is the face (or @dfn{font} as some people call it) used to
3431 highlight the current article in the summary buffer.
3432
3433 @item gnus-summary-highlight
3434 @vindex gnus-summary-highlight
3435 Summary lines are highlighted according to this variable, which is a
3436 list where the elements are of the format @var{(FORM . FACE)}.  If you
3437 would, for instance, like ticked articles to be italic and high-scored
3438 articles to be bold, you could set this variable to something like
3439 @lisp
3440 (((eq mark gnus-ticked-mark) . italic)
3441  ((> score default) . bold))
3442 @end lisp
3443 As you may have guessed, if @var{FORM} returns a non-@code{nil} value,
3444 @var{FACE} will be applied to the line.
3445 @end table
3446
3447
3448 @node Summary Maneuvering
3449 @section Summary Maneuvering
3450 @cindex summary movement
3451
3452 All the straight movement commands understand the numeric prefix and
3453 behave pretty much as you'd expect.
3454
3455 None of these commands select articles.
3456
3457 @table @kbd
3458 @item G M-n
3459 @itemx M-n
3460 @kindex M-n (Summary)
3461 @kindex G M-n (Summary)
3462 @findex gnus-summary-next-unread-subject
3463 Go to the next summary line of an unread article
3464 (@code{gnus-summary-next-unread-subject}).
3465
3466 @item G M-p
3467 @itemx M-p
3468 @kindex M-p (Summary)
3469 @kindex G M-p (Summary)
3470 @findex gnus-summary-prev-unread-subject
3471 Go to the previous summary line of an unread article
3472 (@code{gnus-summary-prev-unread-subject}).
3473
3474 @item G j
3475 @itemx j
3476 @kindex j (Summary)
3477 @kindex G j (Summary)
3478 @findex gnus-summary-goto-article
3479 Ask for an article number or @code{Message-ID}, and then go to that
3480 article (@code{gnus-summary-goto-article}).
3481
3482 @item G g
3483 @kindex G g (Summary)
3484 @findex gnus-summary-goto-subject
3485 Ask for an article number and then go to the summary line of that article
3486 without displaying the article (@code{gnus-summary-goto-subject}).
3487 @end table
3488
3489 If Gnus asks you to press a key to confirm going to the next group, you
3490 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
3491 buffer, searching for the next group to read without actually returning
3492 to the group buffer.
3493
3494 Variables related to summary movement:
3495
3496 @table @code
3497
3498 @vindex gnus-auto-select-next
3499 @item gnus-auto-select-next
3500 If you issue one of the movement commands (like @kbd{n}) and there are
3501 no more unread articles after the current one, Gnus will offer to go to
3502 the next group.  If this variable is @code{t} and the next group is
3503 empty, Gnus will exit summary mode and return to the group buffer.  If
3504 this variable is neither @code{t} nor @code{nil}, Gnus will select the
3505 next group, no matter whether it has any unread articles or not.  As a
3506 special case, if this variable is @code{quietly}, Gnus will select the
3507 next group without asking for confirmation.  If this variable is
3508 @code{almost-quietly}, the same will happen only if you are located on
3509 the last article in the group.  Finally, if this variable is
3510 @code{slightly-quietly}, the @kbd{Z n} command will go to the next group
3511 without confirmation.  Also @pxref{Group Levels}.
3512
3513 @item gnus-auto-select-same
3514 @vindex gnus-auto-select-same
3515 If non-@code{nil}, all the movement commands will try to go to the next
3516 article with the same subject as the current.  (@dfn{Same} here might
3517 mean @dfn{roughly equal}.  See @code{gnus-summary-gather-subject-limit}
3518 for details (@pxref{Customizing Threading}).)  If there are no more
3519 articles with the same subject, go to the first unread article.
3520
3521 This variable is not particularly useful if you use a threaded display.
3522
3523 @item gnus-summary-check-current
3524 @vindex gnus-summary-check-current
3525 If non-@code{nil}, all the ``unread'' movement commands will not proceed
3526 to the next (or previous) article if the current article is unread.
3527 Instead, they will choose the current article.
3528
3529 @item gnus-auto-center-summary
3530 @vindex gnus-auto-center-summary
3531 If non-@code{nil}, Gnus will keep the point in the summary buffer
3532 centered at all times.  This makes things quite tidy, but if you have a
3533 slow network connection, or simply do not like this un-Emacsism, you can
3534 set this variable to @code{nil} to get the normal Emacs scrolling
3535 action.  This will also inhibit horizontal re-centering of the summary
3536 buffer, which might make it more inconvenient to read extremely long
3537 threads.
3538
3539 @end table
3540
3541
3542 @node Choosing Articles
3543 @section Choosing Articles
3544 @cindex selecting articles
3545
3546 @menu
3547 * Choosing Commands::        Commands for choosing articles.
3548 * Choosing Variables::       Variables that influence these commands.
3549 @end menu
3550
3551
3552 @node Choosing Commands
3553 @subsection Choosing Commands
3554
3555 None of the following movement commands understand the numeric prefix,
3556 and they all select and display an article.
3557
3558 @table @kbd
3559 @item SPACE
3560 @kindex SPACE (Summary)
3561 @findex gnus-summary-next-page
3562 Select the current article, or, if that one's read already, the next
3563 unread article (@code{gnus-summary-next-page}).
3564
3565 @item G n
3566 @itemx n
3567 @kindex n (Summary)
3568 @kindex G n (Summary)
3569 @findex gnus-summary-next-unread-article
3570 @c @icon{gnus-summary-next-unread}
3571 Go to next unread article (@code{gnus-summary-next-unread-article}).
3572
3573 @item G p
3574 @itemx p
3575 @kindex p (Summary)
3576 @findex gnus-summary-prev-unread-article
3577 @c @icon{gnus-summary-prev-unread}
3578 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
3579
3580 @item G N
3581 @itemx N
3582 @kindex N (Summary)
3583 @kindex G N (Summary)
3584 @findex gnus-summary-next-article
3585 Go to the next article (@code{gnus-summary-next-article}).
3586
3587 @item G P
3588 @itemx P
3589 @kindex P (Summary)
3590 @kindex G P (Summary)
3591 @findex gnus-summary-prev-article
3592 Go to the previous article (@code{gnus-summary-prev-article}).
3593
3594 @item G C-n
3595 @kindex G C-n (Summary)
3596 @findex gnus-summary-next-same-subject
3597 Go to the next article with the same subject
3598 (@code{gnus-summary-next-same-subject}).
3599
3600 @item G C-p
3601 @kindex G C-p (Summary)
3602 @findex gnus-summary-prev-same-subject
3603 Go to the previous article with the same subject
3604 (@code{gnus-summary-prev-same-subject}).
3605
3606 @item G f
3607 @itemx .
3608 @kindex G f  (Summary)
3609 @kindex .  (Summary)
3610 @findex gnus-summary-first-unread-article
3611 Go to the first unread article
3612 (@code{gnus-summary-first-unread-article}).
3613
3614 @item G b
3615 @itemx ,
3616 @kindex G b (Summary)
3617 @kindex , (Summary)
3618 @findex gnus-summary-best-unread-article
3619 Go to the article with the highest score
3620 (@code{gnus-summary-best-unread-article}).
3621
3622 @item G l
3623 @itemx l
3624 @kindex l (Summary)
3625 @kindex G l (Summary)
3626 @findex gnus-summary-goto-last-article
3627 Go to the previous article read (@code{gnus-summary-goto-last-article}).
3628
3629 @item G o
3630 @kindex G o (Summary)
3631 @findex gnus-summary-pop-article
3632 @cindex history
3633 @cindex article history
3634 Pop an article off the summary history and go to this article
3635 (@code{gnus-summary-pop-article}).  This command differs from the
3636 command above in that you can pop as many previous articles off the
3637 history as you like, while @kbd{l} toggles the two last read articles.
3638 For a somewhat related issue (if you use these commands a lot),
3639 @pxref{Article Backlog}.
3640 @end table
3641
3642
3643 @node Choosing Variables
3644 @subsection Choosing Variables
3645
3646 Some variables relevant for moving and selecting articles:
3647
3648 @table @code
3649 @item gnus-auto-extend-newsgroup
3650 @vindex gnus-auto-extend-newsgroup
3651 All the movement commands will try to go to the previous (or next)
3652 article, even if that article isn't displayed in the Summary buffer if
3653 this variable is non-@code{nil}.  Gnus will then fetch the article from
3654 the server and display it in the article buffer.
3655
3656 @item gnus-select-article-hook
3657 @vindex gnus-select-article-hook
3658 This hook is called whenever an article is selected.  By default it
3659 exposes any threads hidden under the selected article.
3660
3661 @item gnus-mark-article-hook
3662 @vindex gnus-mark-article-hook
3663 @findex gnus-summary-mark-unread-as-read
3664 @findex gnus-summary-mark-read-and-unread-as-read
3665 @findex gnus-unread-mark
3666 This hook is called whenever an article is selected.  It is intended to
3667 be used for marking articles as read.  The default value is
3668 @code{gnus-summary-mark-read-and-unread-as-read}, and will change the
3669 mark of almost any article you read to @code{gnus-unread-mark}.  The
3670 only articles not affected by this function are ticked, dormant, and
3671 expirable articles.  If you'd instead like to just have unread articles
3672 marked as read, you can use @code{gnus-summary-mark-unread-as-read}
3673 instead.  It will leave marks like @code{gnus-low-score-mark},
3674 @code{gnus-del-mark} (and so on) alone.
3675
3676 @end table
3677
3678
3679 @node Paging the Article
3680 @section Scrolling the Article
3681 @cindex article scrolling
3682
3683 @table @kbd
3684
3685 @item SPACE
3686 @kindex SPACE (Summary)
3687 @findex gnus-summary-next-page
3688 Pressing @kbd{SPACE} will scroll the current article forward one page,
3689 or, if you have come to the end of the current article, will choose the
3690 next article (@code{gnus-summary-next-page}).
3691
3692 @item DEL
3693 @kindex DEL (Summary)
3694 @findex gnus-summary-prev-page
3695 Scroll the current article back one page (@code{gnus-summary-prev-page}).
3696
3697 @item RET
3698 @kindex RET (Summary)
3699 @findex gnus-summary-scroll-up
3700 Scroll the current article one line forward
3701 (@code{gnus-summary-scroll-up}).
3702
3703 @item M-RET
3704 @kindex M-RET (Summary)
3705 @findex gnus-summary-scroll-down
3706 Scroll the current article one line backward
3707 (@code{gnus-summary-scroll-down}).
3708
3709 @item A g
3710 @itemx g
3711 @kindex A g (Summary)
3712 @kindex g (Summary)
3713 @findex gnus-summary-show-article
3714 (Re)fetch the current article (@code{gnus-summary-show-article}).  If
3715 given a prefix, fetch the current article, but don't run any of the
3716 article treatment functions.  This will give you a ``raw'' article, just
3717 the way it came from the server.
3718
3719 @item A <
3720 @itemx <
3721 @kindex < (Summary)
3722 @kindex A < (Summary)
3723 @findex gnus-summary-beginning-of-article
3724 Scroll to the beginning of the article
3725 (@code{gnus-summary-beginning-of-article}).
3726
3727 @item A >
3728 @itemx >
3729 @kindex > (Summary)
3730 @kindex A > (Summary)
3731 @findex gnus-summary-end-of-article
3732 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
3733
3734 @item A s
3735 @itemx s
3736 @kindex A s (Summary)
3737 @kindex s (Summary)
3738 @findex gnus-summary-isearch-article
3739 Perform an isearch in the article buffer
3740 (@code{gnus-summary-isearch-article}).
3741
3742 @item h
3743 @kindex h (Summary)
3744 @findex gnus-summary-select-article-buffer
3745 Select the article buffer (@code{gnus-summary-select-article-buffer}).
3746
3747 @end table
3748
3749
3750 @node Reply Followup and Post
3751 @section Reply, Followup and Post
3752
3753 @menu
3754 * Summary Mail Commands::            Sending mail.
3755 * Summary Post Commands::            Sending news.
3756 @end menu
3757
3758
3759 @node Summary Mail Commands
3760 @subsection Summary Mail Commands
3761 @cindex mail
3762 @cindex composing mail
3763
3764 Commands for composing a mail message:
3765
3766 @table @kbd
3767
3768 @item S r
3769 @itemx r
3770 @kindex S r (Summary)
3771 @kindex r (Summary)
3772 @findex gnus-summary-reply
3773 @c @icon{gnus-summary-mail-reply}
3774 @c @icon{gnus-summary-reply}
3775 Mail a reply to the author of the current article
3776 (@code{gnus-summary-reply}).
3777
3778 @item S R
3779 @itemx R
3780 @kindex R (Summary)
3781 @kindex S R (Summary)
3782 @findex gnus-summary-reply-with-original
3783 @c @icon{gnus-summary-reply-with-original}
3784 Mail a reply to the author of the current article and include the
3785 original message (@code{gnus-summary-reply-with-original}).  This
3786 command uses the process/prefix convention.
3787
3788 @item S w
3789 @kindex S w (Summary)
3790 @findex gnus-summary-wide-reply
3791 Mail a wide reply to the author of the current article
3792 (@code{gnus-summary-wide-reply}).  A @dfn{wide reply} is a reply that
3793 goes out to all people listed in the @code{To}, @code{From} (or
3794 @code{Reply-to}) and @code{Cc} headers.
3795
3796 @item S W
3797 @kindex S W (Summary)
3798 @findex gnus-summary-wide-reply-with-original
3799 Mail a wide reply to the current article and include the original
3800 message (@code{gnus-summary-reply-with-original}).  This command uses
3801 the process/prefix convention.
3802
3803 @item S o m
3804 @kindex S o m (Summary)
3805 @findex gnus-summary-mail-forward
3806 @c @icon{gnus-summary-mail-forward}
3807 Forward the current article to some other person
3808 (@code{gnus-summary-mail-forward}).  If given a prefix, include the full
3809 headers of the forwarded article.
3810
3811 @item S m
3812 @itemx m
3813 @kindex m (Summary)
3814 @kindex S m (Summary)
3815 @findex gnus-summary-mail-other-window
3816 @c @icon{gnus-summary-mail-originate}
3817 Send a mail to some other person
3818 (@code{gnus-summary-mail-other-window}).
3819
3820 @item S D b
3821 @kindex S D b (Summary)
3822 @findex gnus-summary-resend-bounced-mail
3823 @cindex bouncing mail
3824 If you have sent a mail, but the mail was bounced back to you for some
3825 reason (wrong address, transient failure), you can use this command to
3826 resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
3827 will be popped into a mail buffer where you can edit the headers before
3828 sending the mail off again.  If you give a prefix to this command, and
3829 the bounced mail is a reply to some other mail, Gnus will try to fetch
3830 that mail and display it for easy perusal of its headers.  This might
3831 very well fail, though.
3832
3833 @item S D r
3834 @kindex S D r (Summary)
3835 @findex gnus-summary-resend-message
3836 Not to be confused with the previous command,
3837 @code{gnus-summary-resend-message} will prompt you for an address to
3838 send the current message off to, and then send it to that place.  The
3839 headers of the message won't be altered---but lots of headers that say
3840 @code{Resent-To}, @code{Resent-From} and so on will be added.  This
3841 means that you actually send a mail to someone that has a @code{To}
3842 header that (probably) points to yourself.  This will confuse people.
3843 So, natcherly you'll only do that if you're really eVIl.
3844
3845 This command is mainly used if you have several accounts and want to
3846 ship a mail to a different account of yours.  (If you're both
3847 @code{root} and @code{postmaster} and get a mail for @code{postmaster}
3848 to the @code{root} account, you may want to resend it to
3849 @code{postmaster}.  Ordnung muß sein!
3850
3851 This command understands the process/prefix convention
3852 (@pxref{Process/Prefix}).
3853
3854 @item S O m
3855 @kindex S O m (Summary)
3856 @findex gnus-uu-digest-mail-forward
3857 Digest the current series (@pxref{Decoding Articles}) and forward the
3858 result using mail (@code{gnus-uu-digest-mail-forward}).  This command
3859 uses the process/prefix convention (@pxref{Process/Prefix}).
3860
3861 @item S M-c
3862 @kindex S M-c (Summary)
3863 @findex gnus-summary-mail-crosspost-complaint
3864 @cindex crossposting
3865 @cindex excessive crossposting
3866 Send a complaint about excessive crossposting to the author of the
3867 current article (@code{gnus-summary-mail-crosspost-complaint}).
3868
3869 @findex gnus-crosspost-complaint
3870 This command is provided as a way to fight back against the current
3871 crossposting pandemic that's sweeping Usenet.  It will compose a reply
3872 using the @code{gnus-crosspost-complaint} variable as a preamble.  This
3873 command understands the process/prefix convention
3874 (@pxref{Process/Prefix}) and will prompt you before sending each mail.
3875
3876 @end table
3877
3878 Also @pxref{(message)Header Commands} for more information.
3879
3880
3881 @node Summary Post Commands
3882 @subsection Summary Post Commands
3883 @cindex post
3884 @cindex composing news
3885
3886 Commands for posting a news article:
3887
3888 @table @kbd
3889 @item S p
3890 @itemx a
3891 @kindex a (Summary)
3892 @kindex S p (Summary)
3893 @findex gnus-summary-post-news
3894 @c @icon{gnus-summary-post-news}
3895 Post an article to the current group
3896 (@code{gnus-summary-post-news}).
3897
3898 @item S f
3899 @itemx f
3900 @kindex f (Summary)
3901 @kindex S f (Summary)
3902 @findex gnus-summary-followup
3903 @c @icon{gnus-summary-followup}
3904 Post a followup to the current article (@code{gnus-summary-followup}).
3905
3906 @item S F
3907 @itemx F
3908 @kindex S F (Summary)
3909 @kindex F (Summary)
3910 @c @icon{gnus-summary-followup-with-original}
3911 @findex gnus-summary-followup-with-original
3912 Post a followup to the current article and include the original message
3913 (@code{gnus-summary-followup-with-original}).   This command uses the
3914 process/prefix convention.
3915
3916 @item S n
3917 @kindex S n (Summary)
3918 @findex gnus-summary-followup-to-mail
3919 Post a followup to the current article via news, even if you got the
3920 message through mail (@code{gnus-summary-followup-to-mail}).
3921
3922 @item S N
3923 @kindex S N (Summary)
3924 @findex gnus-summary-followup-to-mail-with-original
3925 Post a followup to the current article via news, even if you got the
3926 message through mail and include the original message
3927 (@code{gnus-summary-followup-to-mail-with-original}).  This command uses
3928 the process/prefix convention.
3929
3930 @item S o p
3931 @kindex S o p (Summary)
3932 @findex gnus-summary-post-forward
3933 Forward the current article to a newsgroup
3934 (@code{gnus-summary-post-forward}).  If given a prefix, include the full
3935 headers of the forwarded article.
3936
3937 @item S O p
3938 @kindex S O p (Summary)
3939 @findex gnus-uu-digest-post-forward
3940 @cindex digests
3941 @cindex making digests
3942 Digest the current series and forward the result to a newsgroup
3943 (@code{gnus-uu-digest-mail-forward}).  This command uses the
3944 process/prefix convention.
3945
3946 @item S u
3947 @kindex S u (Summary)
3948 @findex gnus-uu-post-news
3949 @c @icon{gnus-uu-post-news}
3950 Uuencode a file, split it into parts, and post it as a series
3951 (@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
3952 @end table
3953
3954 Also @pxref{(message)Header Commands} for more information.
3955
3956
3957 @node Canceling and Superseding
3958 @section Canceling Articles
3959 @cindex canceling articles
3960 @cindex superseding articles
3961
3962 Have you ever written something, and then decided that you really,
3963 really, really wish you hadn't posted that?
3964
3965 Well, you can't cancel mail, but you can cancel posts.
3966
3967 @findex gnus-summary-cancel-article
3968 @kindex C (Summary)
3969 @c @icon{gnus-summary-cancel-article}
3970 Find the article you wish to cancel (you can only cancel your own
3971 articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
3972 c} (@code{gnus-summary-cancel-article}).  Your article will be
3973 canceled---machines all over the world will be deleting your article.
3974 This command uses the process/prefix convention (@pxref{Process/Prefix}).
3975
3976 Be aware, however, that not all sites honor cancels, so your article may
3977 live on here and there, while most sites will delete the article in
3978 question.
3979
3980 Gnus will use the ``current'' select method when canceling.  If you
3981 want to use the standard posting method, use the @samp{a} symbolic
3982 prefix (@pxref{Symbolic Prefixes}).
3983
3984 If you discover that you have made some mistakes and want to do some
3985 corrections, you can post a @dfn{superseding} article that will replace
3986 your original article.
3987
3988 @findex gnus-summary-supersede-article
3989 @kindex S (Summary)
3990 Go to the original article and press @kbd{S s}
3991 (@code{gnus-summary-supersede-article}).  You will be put in a buffer
3992 where you can edit the article all you want before sending it off the
3993 usual way.
3994
3995 The same goes for superseding as for canceling, only more so: Some
3996 sites do not honor superseding.  On those sites, it will appear that you
3997 have posted almost the same article twice.
3998
3999 If you have just posted the article, and change your mind right away,
4000 there is a trick you can use to cancel/supersede the article without
4001 waiting for the article to appear on your site first.  You simply return
4002 to the post buffer (which is called @code{*sent ...*}).  There you will
4003 find the article you just posted, with all the headers intact.  Change
4004 the @code{Message-ID} header to a @code{Cancel} or @code{Supersedes}
4005 header by substituting one of those words for the word
4006 @code{Message-ID}.  Then just press @kbd{C-c C-c} to send the article as
4007 you would do normally.  The previous article will be
4008 canceled/superseded.
4009
4010 Just remember, kids: There is no 'c' in 'supersede'.
4011
4012
4013 @node Marking Articles
4014 @section Marking Articles
4015 @cindex article marking
4016 @cindex article ticking
4017 @cindex marks
4018
4019 There are several marks you can set on an article.
4020
4021 You have marks that decide the @dfn{readedness} (whoo, neato-keano
4022 neologism ohoy!) of the article.  Alphabetic marks generally mean
4023 @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
4024
4025 In addition, you also have marks that do not affect readedness.
4026
4027 @menu
4028 * Unread Articles::      Marks for unread articles.
4029 * Read Articles::        Marks for read articles.
4030 * Other Marks::          Marks that do not affect readedness.
4031 @end menu
4032
4033 @ifinfo
4034 There's a plethora of commands for manipulating these marks:
4035 @end ifinfo
4036
4037 @menu
4038 * Setting Marks::           How to set and remove marks.
4039 * Setting Process Marks::   How to mark articles for later processing.
4040 @end menu
4041
4042
4043 @node Unread Articles
4044 @subsection Unread Articles
4045
4046 The following marks mark articles as (kinda) unread, in one form or
4047 other.
4048
4049 @table @samp
4050 @item !
4051 @vindex gnus-ticked-mark
4052 Marked as ticked (@code{gnus-ticked-mark}).
4053
4054 @dfn{Ticked articles} are articles that will remain visible always.  If
4055 you see an article that you find interesting, or you want to put off
4056 reading it, or replying to it, until sometime later, you'd typically
4057 tick it.  However, articles can be expired, so if you want to keep an
4058 article forever, you'll have to make it persistent (@pxref{Persistent
4059 Articles}).
4060
4061 @item ?
4062 @vindex gnus-dormant-mark
4063 Marked as dormant (@code{gnus-dormant-mark}).
4064
4065 @dfn{Dormant articles} will only appear in the summary buffer if there
4066 are followups to it.  If you want to see them even if they don't have
4067 followups, you can use the @kbd{/ D} command (@pxref{Limiting}).
4068
4069 @item SPACE
4070 @vindex gnus-unread-mark
4071 Marked as unread (@code{gnus-unread-mark}).
4072
4073 @dfn{Unread articles} are articles that haven't been read at all yet.
4074 @end table
4075
4076
4077 @node Read Articles
4078 @subsection Read Articles
4079 @cindex expirable mark
4080
4081 All the following marks mark articles as read.
4082
4083 @table @samp
4084
4085 @item r
4086 @vindex gnus-del-mark
4087 These are articles that the user has marked as read with the @kbd{d}
4088 command manually, more or less (@code{gnus-del-mark}).
4089
4090 @item R
4091 @vindex gnus-read-mark
4092 Articles that have actually been read (@code{gnus-read-mark}).
4093
4094 @item O
4095 @vindex gnus-ancient-mark
4096 Articles that were marked as read in previous sessions and are now
4097 @dfn{old} (@code{gnus-ancient-mark}).
4098
4099 @item K
4100 @vindex gnus-killed-mark
4101 Marked as killed (@code{gnus-killed-mark}).
4102
4103 @item X
4104 @vindex gnus-kill-file-mark
4105 Marked as killed by kill files (@code{gnus-kill-file-mark}).
4106
4107 @item Y
4108 @vindex gnus-low-score-mark
4109 Marked as read by having too low a score (@code{gnus-low-score-mark}).
4110
4111 @item C
4112 @vindex gnus-catchup-mark
4113 Marked as read by a catchup (@code{gnus-catchup-mark}).
4114
4115 @item G
4116 @vindex gnus-canceled-mark
4117 Canceled article (@code{gnus-canceled-mark})
4118
4119 @item F
4120 @vindex gnus-souped-mark
4121 @sc{SOUP}ed article (@code{gnus-souped-mark}).  @xref{SOUP}.
4122
4123 @item Q
4124 @vindex gnus-sparse-mark
4125 Sparsely reffed article (@code{gnus-sparse-mark}).  @xref{Customizing
4126 Threading}.
4127
4128 @item M
4129 @vindex gnus-duplicate-mark
4130 Article marked as read by duplicate suppression
4131 (@code{gnus-duplicated-mark}).  @xref{Duplicate Suppression}.
4132
4133 @end table
4134
4135 All these marks just mean that the article is marked as read, really.
4136 They are interpreted differently when doing adaptive scoring, though.
4137
4138 One more special mark, though:
4139
4140 @table @samp
4141 @item E
4142 @vindex gnus-expirable-mark
4143 Marked as expirable (@code{gnus-expirable-mark}).
4144
4145 Marking articles as @dfn{expirable} (or have them marked as such
4146 automatically) doesn't make much sense in normal groups---a user doesn't
4147 control expiring of news articles, but in mail groups, for instance,
4148 articles marked as @dfn{expirable} can be deleted by Gnus at
4149 any time.
4150 @end table
4151
4152
4153 @node Other Marks
4154 @subsection Other Marks
4155 @cindex process mark
4156 @cindex bookmarks
4157
4158 There are some marks that have nothing to do with whether the article is
4159 read or not.
4160
4161 @itemize @bullet
4162
4163 @item
4164 You can set a bookmark in the current article.  Say you are reading a
4165 long thesis on cats' urinary tracts, and have to go home for dinner
4166 before you've finished reading the thesis.  You can then set a bookmark
4167 in the article, and Gnus will jump to this bookmark the next time it
4168 encounters the article.  @xref{Setting Marks}
4169
4170 @item
4171 @vindex gnus-replied-mark
4172 All articles that you have replied to or made a followup to (i.e., have
4173 answered) will be marked with an @samp{A} in the second column
4174 (@code{gnus-replied-mark}).
4175
4176 @item
4177 @vindex gnus-cached-mark
4178 Articles stored in the article cache will be marked with an @samp{*} in
4179 the second column (@code{gnus-cached-mark}).  @xref{Article Caching}
4180
4181 @item
4182 @vindex gnus-saved-mark
4183 Articles ``saved'' (in some manner or other; not necessarily
4184 religiously) are marked with an @samp{S} in the second column
4185 (@code{gnus-saved-mark}).
4186
4187 @item
4188 @vindex gnus-not-empty-thread-mark
4189 @vindex gnus-empty-thread-mark
4190 If the @samp{%e} spec is used, the presence of threads or not will be
4191 marked with @code{gnus-not-empty-thread-mark} and
4192 @code{gnus-empty-thread-mark} in the third column, respectively.
4193
4194 @item
4195 @vindex gnus-process-mark
4196 Finally we have the @dfn{process mark} (@code{gnus-process-mark}).  A
4197 variety of commands react to the presence of the process mark.  For
4198 instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
4199 all articles that have been marked with the process mark.  Articles
4200 marked with the process mark have a @samp{#} in the second column.
4201
4202 @end itemize
4203
4204 You might have noticed that most of these ``non-readedness'' marks
4205 appear in the second column by default.  So if you have a cached, saved,
4206 replied article that you have process-marked, what will that look like?
4207
4208 Nothing much.  The precedence rules go as follows: process -> cache ->
4209 replied -> saved.  So if the article is in the cache and is replied,
4210 you'll only see the cache mark and not the replied mark.
4211
4212
4213 @node Setting Marks
4214 @subsection Setting Marks
4215 @cindex setting marks
4216
4217 All the marking commands understand the numeric prefix.
4218
4219 @table @kbd
4220 @item M c
4221 @itemx M-u
4222 @kindex M c (Summary)
4223 @kindex M-u (Summary)
4224 @findex gnus-summary-clear-mark-forward
4225 @cindex mark as unread
4226 Clear all readedness-marks from the current article
4227 (@code{gnus-summary-clear-mark-forward}).  In other words, mark the
4228 article as unread.
4229
4230 @item M t
4231 @itemx !
4232 @kindex ! (Summary)
4233 @kindex M t (Summary)
4234 @findex gnus-summary-tick-article-forward
4235 Tick the current article (@code{gnus-summary-tick-article-forward}).
4236 @xref{Article Caching}
4237
4238 @item M ?
4239 @itemx ?
4240 @kindex ? (Summary)
4241 @kindex M ? (Summary)
4242 @findex gnus-summary-mark-as-dormant
4243 Mark the current article as dormant
4244 (@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching}
4245
4246 @item M d
4247 @itemx d
4248 @kindex M d (Summary)
4249 @kindex d (Summary)
4250 @findex gnus-summary-mark-as-read-forward
4251 Mark the current article as read
4252 (@code{gnus-summary-mark-as-read-forward}).
4253
4254 @item D
4255 @kindex D (Summary)
4256 @findex gnus-summary-mark-as-read-backward
4257 Mark the current article as read and move point to the previous line
4258 (@code{gnus-summary-mark-as-read-backward}).
4259
4260 @item M k
4261 @itemx k
4262 @kindex k (Summary)
4263 @kindex M k (Summary)
4264 @findex gnus-summary-kill-same-subject-and-select
4265 Mark all articles that have the same subject as the current one as read,
4266 and then select the next unread article
4267 (@code{gnus-summary-kill-same-subject-and-select}).
4268
4269 @item M K
4270 @itemx C-k
4271 @kindex M K (Summary)
4272 @kindex C-k (Summary)
4273 @findex gnus-summary-kill-same-subject
4274 Mark all articles that have the same subject as the current one as read
4275 (@code{gnus-summary-kill-same-subject}).
4276
4277 @item M C
4278 @kindex M C (Summary)
4279 @findex gnus-summary-catchup
4280 @c @icon{gnus-summary-catchup}
4281 Mark all unread articles as read (@code{gnus-summary-catchup}).
4282
4283 @item M C-c
4284 @kindex M C-c (Summary)
4285 @findex gnus-summary-catchup-all
4286 Mark all articles in the group as read---even the ticked and dormant
4287 articles (@code{gnus-summary-catchup-all}).
4288
4289 @item M H
4290 @kindex M H (Summary)
4291 @findex gnus-summary-catchup-to-here
4292 Catchup the current group to point
4293 (@code{gnus-summary-catchup-to-here}).
4294
4295 @item C-w
4296 @kindex C-w (Summary)
4297 @findex gnus-summary-mark-region-as-read
4298 Mark all articles between point and mark as read
4299 (@code{gnus-summary-mark-region-as-read}).
4300
4301 @item M V k
4302 @kindex M V k (Summary)
4303 @findex gnus-summary-kill-below
4304 Kill all articles with scores below the default score (or below the
4305 numeric prefix) (@code{gnus-summary-kill-below}).
4306
4307 @item M e
4308 @itemx E
4309 @kindex M e (Summary)
4310 @kindex E (Summary)
4311 @findex gnus-summary-mark-as-expirable
4312 Mark the current article as expirable
4313 (@code{gnus-summary-mark-as-expirable}).
4314
4315 @item M b
4316 @kindex M b (Summary)
4317 @findex gnus-summary-set-bookmark
4318 Set a bookmark in the current article
4319 (@code{gnus-summary-set-bookmark}).
4320
4321 @item M B
4322 @kindex M B (Summary)
4323 @findex gnus-summary-remove-bookmark
4324 Remove the bookmark from the current article
4325 (@code{gnus-summary-remove-bookmark}).
4326
4327 @item M V c
4328 @kindex M V c (Summary)
4329 @findex gnus-summary-clear-above
4330 Clear all marks from articles with scores over the default score (or
4331 over the numeric prefix) (@code{gnus-summary-clear-above}).
4332
4333 @item M V u
4334 @kindex M V u (Summary)
4335 @findex gnus-summary-tick-above
4336 Tick all articles with scores over the default score (or over the
4337 numeric prefix) (@code{gnus-summary-tick-above}).
4338
4339 @item M V m
4340 @kindex M V m (Summary)
4341 @findex gnus-summary-mark-above
4342 Prompt for a mark, and mark all articles with scores over the default
4343 score (or over the numeric prefix) with this mark
4344 (@code{gnus-summary-clear-above}).
4345 @end table
4346
4347 @vindex gnus-summary-goto-unread
4348 The @code{gnus-summary-goto-unread} variable controls what action should
4349 be taken after setting a mark.  If non-@code{nil}, point will move to
4350 the next/previous unread article.  If @code{nil}, point will just move
4351 one line up or down.  As a special case, if this variable is
4352 @code{never}, all the marking commands as well as other commands (like
4353 @kbd{SPACE}) will move to the next article, whether it is unread or not.
4354 The default is @code{t}.
4355
4356
4357 @node Setting Process Marks
4358 @subsection Setting Process Marks
4359 @cindex setting process marks
4360
4361 @table @kbd
4362
4363 @item M P p
4364 @itemx #
4365 @kindex # (Summary)
4366 @kindex M P p (Summary)
4367 @findex gnus-summary-mark-as-processable
4368 Mark the current article with the process mark
4369 (@code{gnus-summary-mark-as-processable}).
4370 @findex gnus-summary-unmark-as-processable
4371
4372 @item M P u
4373 @itemx M-#
4374 @kindex M P u (Summary)
4375 @kindex M-# (Summary)
4376 Remove the process mark, if any, from the current article
4377 (@code{gnus-summary-unmark-as-processable}).
4378
4379 @item M P U
4380 @kindex M P U (Summary)
4381 @findex gnus-summary-unmark-all-processable
4382 Remove the process mark from all articles
4383 (@code{gnus-summary-unmark-all-processable}).
4384
4385 @item M P i
4386 @kindex M P i (Summary)
4387 @findex gnus-uu-invert-processable
4388 Invert the list of process marked articles
4389 (@code{gnus-uu-invert-processable}).
4390
4391 @item M P R
4392 @kindex M P R (Summary)
4393 @findex gnus-uu-mark-by-regexp
4394 Mark articles that have a @code{Subject} header that matches a regular
4395 expression (@code{gnus-uu-mark-by-regexp}).
4396
4397 @item M P r
4398 @kindex M P r (Summary)
4399 @findex gnus-uu-mark-region
4400 Mark articles in region (@code{gnus-uu-mark-region}).
4401
4402 @item M P t
4403 @kindex M P t (Summary)
4404 @findex gnus-uu-mark-thread
4405 Mark all articles in the current (sub)thread
4406 (@code{gnus-uu-mark-thread}).
4407
4408 @item M P T
4409 @kindex M P T (Summary)
4410 @findex gnus-uu-unmark-thread
4411 Unmark all articles in the current (sub)thread
4412 (@code{gnus-uu-unmark-thread}).
4413
4414 @item M P v
4415 @kindex M P v (Summary)
4416 @findex gnus-uu-mark-over
4417 Mark all articles that have a score above the prefix argument
4418 (@code{gnus-uu-mark-over}).
4419
4420 @item M P s
4421 @kindex M P s (Summary)
4422 @findex gnus-uu-mark-series
4423 Mark all articles in the current series (@code{gnus-uu-mark-series}).
4424
4425 @item M P S
4426 @kindex M P S (Summary)
4427 @findex gnus-uu-mark-sparse
4428 Mark all series that have already had some articles marked
4429 (@code{gnus-uu-mark-sparse}).
4430
4431 @item M P a
4432 @kindex M P a (Summary)
4433 @findex gnus-uu-mark-all
4434 Mark all articles in series order (@code{gnus-uu-mark-series}).
4435
4436 @item M P b
4437 @kindex M P b (Summary)
4438 @findex gnus-uu-mark-buffer
4439 Mark all articles in the buffer in the order they appear
4440 (@code{gnus-uu-mark-buffer}).
4441
4442 @item M P k
4443 @kindex M P k (Summary)
4444 @findex gnus-summary-kill-process-mark
4445 Push the current process mark set onto the stack and unmark all articles
4446 (@code{gnus-summary-kill-process-mark}).
4447
4448 @item M P y
4449 @kindex M P y (Summary)
4450 @findex gnus-summary-yank-process-mark
4451 Pop the previous process mark set from the stack and restore it
4452 (@code{gnus-summary-yank-process-mark}).
4453
4454 @item M P w
4455 @kindex M P w (Summary)
4456 @findex gnus-summary-save-process-mark
4457 Push the current process mark set onto the stack
4458 (@code{gnus-summary-save-process-mark}).
4459
4460 @end table
4461
4462
4463 @node Limiting
4464 @section Limiting
4465 @cindex limiting
4466
4467 It can be convenient to limit the summary buffer to just show some
4468 subset of the articles currently in the group.  The effect most limit
4469 commands have is to remove a few (or many) articles from the summary
4470 buffer.
4471
4472 All limiting commands work on subsets of the articles already fetched
4473 from the servers.  None of these commands query the server for
4474 additional articles.
4475
4476 @table @kbd
4477
4478 @item / /
4479 @itemx / s
4480 @kindex / / (Summary)
4481 @findex gnus-summary-limit-to-subject
4482 Limit the summary buffer to articles that match some subject
4483 (@code{gnus-summary-limit-to-subject}).
4484
4485 @item / a
4486 @kindex / a (Summary)
4487 @findex gnus-summary-limit-to-author
4488 Limit the summary buffer to articles that match some author
4489 (@code{gnus-summary-limit-to-author}).
4490
4491 @item / u
4492 @itemx x
4493 @kindex / u (Summary)
4494 @kindex x (Summary)
4495 @findex gnus-summary-limit-to-unread
4496 Limit the summary buffer to articles not marked as read
4497 (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
4498 buffer to articles strictly unread.  This means that ticked and
4499 dormant articles will also be excluded.
4500
4501 @item / m
4502 @kindex / m (Summary)
4503 @findex gnus-summary-limit-to-marks
4504 Ask for a mark and then limit to all articles that have been marked
4505 with that mark (@code{gnus-summary-limit-to-marks}).
4506
4507 @item / t
4508 @kindex / t (Summary)
4509 @findex gnus-summary-limit-to-age
4510 Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days
4511 (@code{gnus-summary-limit-to-marks}).  If given a prefix, limit to
4512 articles younger than that number of days.
4513
4514 @item / n
4515 @kindex / n (Summary)
4516 @findex gnus-summary-limit-to-articles
4517 Limit the summary buffer to the current article
4518 (@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
4519 convention (@pxref{Process/Prefix}).
4520
4521 @item / w
4522 @kindex / w (Summary)
4523 @findex gnus-summary-pop-limit
4524 Pop the previous limit off the stack and restore it
4525 (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
4526 the stack.
4527
4528 @item / v
4529 @kindex / v (Summary)
4530 @findex gnus-summary-limit-to-score
4531 Limit the summary buffer to articles that have a score at or above some
4532 score (@code{gnus-summary-limit-to-score}).
4533
4534 @item / E
4535 @itemx M S
4536 @kindex M S (Summary)
4537 @kindex / E (Summary)
4538 @findex gnus-summary-limit-include-expunged
4539 Include all expunged articles in the limit
4540 (@code{gnus-summary-limit-include-expunged}).
4541
4542 @item / D
4543 @kindex / D (Summary)
4544 @findex gnus-summary-limit-include-dormant
4545 Include all dormant articles in the limit
4546 (@code{gnus-summary-limit-include-dormant}).
4547
4548 @item / *
4549 @kindex / * (Summary)
4550 @findex gnus-summary-limit-include-cached
4551 Include all cached articles in the limit
4552 (@code{gnus-summary-limit-include-cached}).
4553
4554 @item / d
4555 @kindex / d (Summary)
4556 @findex gnus-summary-limit-exclude-dormant
4557 Exclude all dormant articles from the limit
4558 (@code{gnus-summary-limit-exclude-dormant}).
4559
4560 @item / T
4561 @kindex / T (Summary)
4562 @findex gnus-summary-limit-include-thread
4563 Include all the articles in the current thread in the limit.
4564
4565 @item / c
4566 @kindex / c (Summary)
4567 @findex gnus-summary-limit-exclude-childless-dormant
4568 Exclude all dormant articles that have no children from the limit
4569 (@code{gnus-summary-limit-exclude-childless-dormant}).
4570
4571 @item / C
4572 @kindex / C (Summary)
4573 @findex gnus-summary-limit-mark-excluded-as-read
4574 Mark all excluded unread articles as read
4575 (@code{gnus-summary-limit-mark-excluded-as-read}).   If given a prefix,
4576 also mark excluded ticked and dormant articles as read.
4577
4578 @end table
4579
4580
4581 @node Threading
4582 @section Threading
4583 @cindex threading
4584 @cindex article threading
4585
4586 Gnus threads articles by default.  @dfn{To thread} is to put responses
4587 to articles directly after the articles they respond to---in a
4588 hierarchical fashion.
4589
4590 Threading is done by looking at the @code{References} headers of the
4591 articles.  In a perfect world, this would be enough to build pretty
4592 trees, but unfortunately, the @code{References} header is often broken
4593 or simply missing.  Weird news propagation excarcerbates the problem,
4594 so one has to employ other heuristics to get pleasing results.  A
4595 plethora of approaches exists, as detailed in horrible detail in
4596 @pxref{Customizing Threading}.
4597
4598 First, a quick overview of the concepts:
4599
4600 @table @dfn
4601 @item root
4602 The top-most article in a thread; the first article in the thread.
4603
4604 @item thread
4605 A tree-like article structure.
4606
4607 @item sub-thread
4608 A small(er) section of this tree-like structure.
4609
4610 @item loose threads
4611 Threads often lose their roots due to article expiry, or due to the root
4612 already having been read in a previous session, and not displayed in the
4613 summary buffer.  We then typically have many sub-threads that really
4614 belong to one thread, but are without connecting roots.  These are
4615 called loose threads.
4616
4617 @item thread gathering
4618 An attempt to gather loose threads into bigger threads.
4619
4620 @item sparse threads
4621 A thread where the missing articles have been ``guessed'' at, and are
4622 displayed as empty lines in the summary buffer.
4623
4624 @end table
4625
4626
4627 @menu
4628 * Customizing Threading::     Variables you can change to affect the threading.
4629 * Thread Commands::           Thread based commands in the summary buffer.
4630 @end menu
4631
4632
4633 @node Customizing Threading
4634 @subsection Customizing Threading
4635 @cindex customizing threading
4636
4637 @menu
4638 * Loose Threads::        How Gnus gathers loose threads into bigger threads.
4639 * Filling In Threads::   Making the threads displayed look fuller.
4640 * More Threading::       Even more variables for fiddling with threads.
4641 * Low-Level Threading::  You thought it was over... but you were wrong!
4642 @end menu
4643
4644
4645 @node Loose Threads
4646 @subsubsection Loose Threads
4647 @cindex <
4648 @cindex >
4649 @cindex loose threads
4650
4651 @table @code
4652 @item gnus-summary-make-false-root
4653 @vindex gnus-summary-make-false-root
4654 If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
4655 and create a dummy root at the top.  (Wait a minute.  Root at the top?
4656 Yup.)  Loose subtrees occur when the real root has expired, or you've
4657 read or killed the root in a previous session.
4658
4659 When there is no real root of a thread, Gnus will have to fudge
4660 something.  This variable says what fudging method Gnus should use.
4661 There are four possible values:
4662
4663 @iftex
4664 @iflatex
4665 \gnusfigure{The Summary Buffer}{390}{
4666 \put(0,0){\epsfig{figure=tmp/summary-adopt.ps,width=7.5cm}}
4667 \put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-empty.ps,width=7.5cm}}}
4668 \put(0,400){\makebox(0,0)[tl]{\epsfig{figure=tmp/summary-none.ps,width=7.5cm}}}
4669 \put(445,400){\makebox(0,0)[tr]{\epsfig{figure=tmp/summary-dummy.ps,width=7.5cm}}}
4670 }
4671 @end iflatex
4672 @end iftex
4673
4674 @cindex adopting articles
4675
4676 @table @code
4677
4678 @item adopt
4679 Gnus will make the first of the orphaned articles the parent.  This
4680 parent will adopt all the other articles.  The adopted articles will be
4681 marked as such by pointy brackets (@samp{<>}) instead of the standard
4682 square brackets (@samp{[]}).  This is the default method.
4683
4684 @item dummy
4685 @vindex gnus-summary-dummy-line-format
4686 Gnus will create a dummy summary line that will pretend to be the
4687 parent.  This dummy line does not correspond to any real article, so
4688 selecting it will just select the first real article after the dummy
4689 article.  @code{gnus-summary-dummy-line-format} is used to specify the
4690 format of the dummy roots.  It accepts only one format spec:  @samp{S},
4691 which is the subject of the article.  @xref{Formatting Variables}.
4692
4693 @item empty
4694 Gnus won't actually make any article the parent, but simply leave the
4695 subject field of all orphans except the first empty.  (Actually, it will
4696 use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
4697 Buffer Format}).)
4698
4699 @item none
4700 Don't make any article parent at all.  Just gather the threads and
4701 display them after one another.
4702
4703 @item nil
4704 Don't gather loose threads.
4705 @end table
4706
4707 @item gnus-summary-gather-subject-limit
4708 @vindex gnus-summary-gather-subject-limit
4709 Loose threads are gathered by comparing subjects of articles.  If this
4710 variable is @code{nil}, Gnus requires an exact match between the
4711 subjects of the loose threads before gathering them into one big
4712 super-thread.  This might be too strict a requirement, what with the
4713 presence of stupid newsreaders that chop off long subject lines.  If
4714 you think so, set this variable to, say, 20 to require that only the
4715 first 20 characters of the subjects have to match.  If you set this
4716 variable to a really low number, you'll find that Gnus will gather
4717 everything in sight into one thread, which isn't very helpful.
4718
4719 @cindex fuzzy article gathering
4720 If you set this variable to the special value @code{fuzzy}, Gnus will
4721 use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
4722 Matching}).
4723
4724 @item gnus-simplify-subject-fuzzy-regexp
4725 @vindex gnus-simplify-subject-fuzzy-regexp
4726 This can either be a regular expression or list of regular expressions
4727 that match strings that will be removed from subjects if fuzzy subject
4728 simplification is used.
4729
4730 @item gnus-simplify-ignored-prefixes
4731 @vindex gnus-simplify-ignored-prefixes
4732 If you set @code{gnus-summary-gather-subject-limit} to something as low
4733 as 10, you might consider setting this variable to something sensible:
4734
4735 @c Written by Michael Ernst <mernst@cs.rice.edu>
4736 @lisp
4737 (setq gnus-simplify-ignored-prefixes
4738       (concat
4739        "\\`\\[?\\("
4740        (mapconcat
4741         'identity
4742         '("looking"
4743           "wanted" "followup" "summary\\( of\\)?"
4744           "help" "query" "problem" "question"
4745           "answer" "reference" "announce"
4746           "How can I" "How to" "Comparison of"
4747           ;; ...
4748           )
4749         "\\|")
4750        "\\)\\s *\\("
4751        (mapconcat 'identity
4752                   '("for" "for reference" "with" "about")
4753                   "\\|")
4754        "\\)?\\]?:?[ \t]*"))
4755 @end lisp
4756
4757 All words that match this regexp will be removed before comparing two
4758 subjects.
4759
4760 @item gnus-simplify-subject-functions
4761 @vindex gnus-simplify-subject-functions
4762 If non-@code{nil}, this variable overrides
4763 @code{gnus-summary-gather-subject-limit}.  This variable should be a
4764 list of functions to apply to the @code{Subject} string iteratively to
4765 arrive at the simplified version of the string.
4766
4767 Useful functions to put in this list include:
4768
4769 @table @code
4770 @item gnus-simplify-subject-re
4771 @findex gnus-simplify-subject-re
4772 Strip the leading @samp{Re:}.
4773
4774 @item gnus-simplify-subject-fuzzy
4775 @findex gnus-simplify-subject-fuzzy
4776 Simplify fuzzily.
4777
4778 @item gnus-simplify-whitespace
4779 @findex gnus-simplify-whitespace
4780 Remove excessive whitespace.
4781 @end table
4782
4783 You may also write your own functions, of course.
4784
4785
4786 @item gnus-summary-gather-exclude-subject
4787 @vindex gnus-summary-gather-exclude-subject
4788 Since loose thread gathering is done on subjects only, that might lead
4789 to many false hits, especially with certain common subjects like
4790 @samp{} and @samp{(none)}.  To make the situation slightly better,
4791 you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
4792 what subjects should be excluded from the gathering process.@*
4793 The default is @samp{^ *$\\|^(none)$}.
4794
4795 @item gnus-summary-thread-gathering-function
4796 @vindex gnus-summary-thread-gathering-function
4797 Gnus gathers threads by looking at @code{Subject} headers.  This means
4798 that totally unrelated articles may end up in the same ``thread'', which
4799 is confusing.  An alternate approach is to look at all the
4800 @code{Message-ID}s in all the @code{References} headers to find matches.
4801 This will ensure that no gathered threads ever include unrelated
4802 articles, but it also means that people who have posted with broken
4803 newsreaders won't be gathered properly.  The choice is yours---plague or
4804 cholera:
4805
4806 @table @code
4807 @item gnus-gather-threads-by-subject
4808 @findex gnus-gather-threads-by-subject
4809 This function is the default gathering function and looks at
4810 @code{Subject}s exclusively.
4811
4812 @item gnus-gather-threads-by-references
4813 @findex gnus-gather-threads-by-references
4814 This function looks at @code{References} headers exclusively.
4815 @end table
4816
4817 If you want to test gathering by @code{References}, you could say
4818 something like:
4819
4820 @lisp
4821 (setq gnus-summary-thread-gathering-function
4822       'gnus-gather-threads-by-references)
4823 @end lisp
4824
4825 @end table
4826
4827
4828 @node Filling In Threads
4829 @subsubsection Filling In Threads
4830
4831 @table @code
4832 @item gnus-fetch-old-headers
4833 @vindex gnus-fetch-old-headers
4834 If non-@code{nil}, Gnus will attempt to build old threads by fetching
4835 more old headers---headers to articles marked as read.  If you
4836 would like to display as few summary lines as possible, but still
4837 connect as many loose threads as possible, you should set this variable
4838 to @code{some} or a number.  If you set it to a number, no more than
4839 that number of extra old headers will be fetched.  In either case,
4840 fetching old headers only works if the backend you are using carries
4841 overview files---this would normally be @code{nntp}, @code{nnspool} and
4842 @code{nnml}.  Also remember that if the root of the thread has been
4843 expired by the server, there's not much Gnus can do about that.
4844
4845 This variable can also be set to @code{invisible}.  This won't have any
4846 visible effects, but is useful if you use the @kbd{A T} command a lot
4847 (@pxref{Finding the Parent}).
4848
4849 @item gnus-build-sparse-threads
4850 @vindex gnus-build-sparse-threads
4851 Fetching old headers can be slow.  A low-rent similar effect can be
4852 gotten by setting this variable to @code{some}.  Gnus will then look at
4853 the complete @code{References} headers of all articles and try to string
4854 together articles that belong in the same thread.  This will leave
4855 @dfn{gaps} in the threading display where Gnus guesses that an article
4856 is missing from the thread.  (These gaps appear like normal summary
4857 lines.  If you select a gap, Gnus will try to fetch the article in
4858 question.)  If this variable is @code{t}, Gnus will display all these
4859 ``gaps'' without regard for whether they are useful for completing the
4860 thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
4861 off sparse leaf nodes that don't lead anywhere.  This variable is
4862 @code{nil} by default.
4863
4864 @end table
4865
4866
4867 @node More Threading
4868 @subsubsection More Threading
4869
4870 @table @code
4871 @item gnus-show-threads
4872 @vindex gnus-show-threads
4873 If this variable is @code{nil}, no threading will be done, and all of
4874 the rest of the variables here will have no effect.  Turning threading
4875 off will speed group selection up a bit, but it is sure to make reading
4876 slower and more awkward.
4877
4878 @item gnus-thread-hide-subtree
4879 @vindex gnus-thread-hide-subtree
4880 If non-@code{nil}, all threads will be hidden when the summary buffer is
4881 generated.
4882
4883 @item gnus-thread-expunge-below
4884 @vindex gnus-thread-expunge-below
4885 All threads that have a total score (as defined by
4886 @code{gnus-thread-score-function}) less than this number will be
4887 expunged.  This variable is @code{nil} by default, which means that no
4888 threads are expunged.
4889
4890 @item gnus-thread-hide-killed
4891 @vindex gnus-thread-hide-killed
4892 if you kill a thread and this variable is non-@code{nil}, the subtree
4893 will be hidden.
4894
4895 @item gnus-thread-ignore-subject
4896 @vindex gnus-thread-ignore-subject
4897 Sometimes somebody changes the subject in the middle of a thread.  If
4898 this variable is non-@code{nil}, the subject change is ignored.  If it
4899 is @code{nil}, which is the default, a change in the subject will result
4900 in a new thread.
4901
4902 @item gnus-thread-indent-level
4903 @vindex gnus-thread-indent-level
4904 This is a number that says how much each sub-thread should be indented.
4905 The default is 4.
4906
4907 @end table
4908
4909
4910 @node Low-Level Threading
4911 @subsubsection Low-Level Threading
4912
4913 @table @code
4914
4915 @item gnus-parse-headers-hook
4916 @vindex gnus-parse-headers-hook
4917 Hook run before parsing any headers.  The default value is
4918 @code{(gnus-decode-rfc1522)}, which means that QPized headers will be
4919 slightly decoded in a hackish way.  This is likely to change in the
4920 future when Gnus becomes @sc{MIME}ified.
4921
4922 @item gnus-alter-header-function
4923 @vindex gnus-alter-header-function
4924 If non-@code{nil}, this function will be called to allow alteration of
4925 article header structures.  The function is called with one parameter,
4926 the article header vector, which it may alter in any way.  For instance,
4927 if you have a mail-to-news gateway which alters the @code{Message-ID}s
4928 in systematic ways (by adding prefixes and such), you can use this
4929 variable to un-scramble the @code{Message-ID}s so that they are more
4930 meaningful.  Here's one example:
4931
4932 @lisp
4933 (setq gnus-alter-header-function 'my-alter-message-id)
4934
4935 (defun my-alter-message-id (header)
4936   (let ((id (mail-header-id header)))
4937     (when (string-match
4938            "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
4939       (mail-header-set-id
4940        (concat (match-string 1 id) "@@" (match-string 2 id))
4941        header))))
4942 @end lisp
4943
4944 @end table
4945
4946
4947 @node Thread Commands
4948 @subsection Thread Commands
4949 @cindex thread commands
4950
4951 @table @kbd
4952
4953 @item T k
4954 @itemx M-C-k
4955 @kindex T k (Summary)
4956 @kindex M-C-k (Summary)
4957 @findex gnus-summary-kill-thread
4958 Mark all articles in the current (sub-)thread as read
4959 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
4960 remove all marks instead.  If the prefix argument is negative, tick
4961 articles instead.
4962
4963 @item T l
4964 @itemx M-C-l
4965 @kindex T l (Summary)
4966 @kindex M-C-l (Summary)
4967 @findex gnus-summary-lower-thread
4968 Lower the score of the current (sub-)thread
4969 (@code{gnus-summary-lower-thread}).
4970
4971 @item T i
4972 @kindex T i (Summary)
4973 @findex gnus-summary-raise-thread
4974 Increase the score of the current (sub-)thread
4975 (@code{gnus-summary-raise-thread}).
4976
4977 @item T #
4978 @kindex T # (Summary)
4979 @findex gnus-uu-mark-thread
4980 Set the process mark on the current (sub-)thread
4981 (@code{gnus-uu-mark-thread}).
4982
4983 @item T M-#
4984 @kindex T M-# (Summary)
4985 @findex gnus-uu-unmark-thread
4986 Remove the process mark from the current (sub-)thread
4987 (@code{gnus-uu-unmark-thread}).
4988
4989 @item T T
4990 @kindex T T (Summary)
4991 @findex gnus-summary-toggle-threads
4992 Toggle threading (@code{gnus-summary-toggle-threads}).
4993
4994 @item T s
4995 @kindex T s (Summary)
4996 @findex gnus-summary-show-thread
4997 Expose the (sub-)thread hidden under the current article, if any
4998 (@code{gnus-summary-show-thread}).
4999
5000 @item T h
5001 @kindex T h (Summary)
5002 @findex gnus-summary-hide-thread
5003 Hide the current (sub-)thread (@code{gnus-summary-hide-thread}).
5004
5005 @item T S
5006 @kindex T S (Summary)
5007 @findex gnus-summary-show-all-threads
5008 Expose all hidden threads (@code{gnus-summary-show-all-threads}).
5009
5010 @item T H
5011 @kindex T H (Summary)
5012 @findex gnus-summary-hide-all-threads
5013 Hide all threads (@code{gnus-summary-hide-all-threads}).
5014
5015 @item T t
5016 @kindex T t (Summary)
5017 @findex gnus-summary-rethread-current
5018 Re-thread the current article's thread
5019 (@code{gnus-summary-rethread-current}).  This works even when the
5020 summary buffer is otherwise unthreaded.
5021
5022 @item T ^
5023 @kindex T ^ (Summary)
5024 @findex gnus-summary-reparent-thread
5025 Make the current article the child of the marked (or previous) article
5026 (@code{gnus-summary-reparent-thread}).
5027
5028 @end table
5029
5030 The following commands are thread movement commands.  They all
5031 understand the numeric prefix.
5032
5033 @table @kbd
5034
5035 @item T n
5036 @kindex T n (Summary)
5037 @findex gnus-summary-next-thread
5038 Go to the next thread (@code{gnus-summary-next-thread}).
5039
5040 @item T p
5041 @kindex T p (Summary)
5042 @findex gnus-summary-prev-thread
5043 Go to the previous thread (@code{gnus-summary-prev-thread}).
5044
5045 @item T d
5046 @kindex T d (Summary)
5047 @findex gnus-summary-down-thread
5048 Descend the thread (@code{gnus-summary-down-thread}).
5049
5050 @item T u
5051 @kindex T u (Summary)
5052 @findex gnus-summary-up-thread
5053 Ascend the thread (@code{gnus-summary-up-thread}).
5054
5055 @item T o
5056 @kindex T o (Summary)
5057 @findex gnus-summary-top-thread
5058 Go to the top of the thread (@code{gnus-summary-top-thread}).
5059 @end table
5060
5061 @vindex gnus-thread-operation-ignore-subject
5062 If you ignore subject while threading, you'll naturally end up with
5063 threads that have several different subjects in them.  If you then issue
5064 a command like `T k' (@code{gnus-summary-kill-thread}) you might not
5065 wish to kill the entire thread, but just those parts of the thread that
5066 have the same subject as the current article.  If you like this idea,
5067 you can fiddle with @code{gnus-thread-operation-ignore-subject}.  If it
5068 is non-@code{nil} (which it is by default), subjects will be ignored
5069 when doing thread commands.  If this variable is @code{nil}, articles in
5070 the same thread with different subjects will not be included in the
5071 operation in question.  If this variable is @code{fuzzy}, only articles
5072 that have subjects fuzzily equal will be included (@pxref{Fuzzy
5073 Matching}).
5074
5075
5076 @node Sorting
5077 @section Sorting
5078
5079 @findex gnus-thread-sort-by-total-score
5080 @findex gnus-thread-sort-by-date
5081 @findex gnus-thread-sort-by-score
5082 @findex gnus-thread-sort-by-subject
5083 @findex gnus-thread-sort-by-author
5084 @findex gnus-thread-sort-by-number
5085 @vindex gnus-thread-sort-functions
5086 If you are using a threaded summary display, you can sort the threads by
5087 setting @code{gnus-thread-sort-functions}, which is a list of functions.
5088 By default, sorting is done on article numbers.  Ready-made sorting
5089 predicate functions include @code{gnus-thread-sort-by-number},
5090 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
5091 @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
5092 @code{gnus-thread-sort-by-total-score}.
5093
5094 Each function takes two threads and returns non-@code{nil} if the first
5095 thread should be sorted before the other.  Note that sorting really is
5096 normally done by looking only at the roots of each thread.  If you use
5097 more than one function, the primary sort key should be the last function
5098 in the list.  You should probably always include
5099 @code{gnus-thread-sort-by-number} in the list of sorting
5100 functions---preferably first.  This will ensure that threads that are
5101 equal with respect to the other sort criteria will be displayed in
5102 ascending article order.
5103
5104 If you would like to sort by score, then by subject, and finally by
5105 number, you could do something like:
5106
5107 @lisp
5108 (setq gnus-thread-sort-functions
5109       '(gnus-thread-sort-by-number
5110         gnus-thread-sort-by-subject
5111         gnus-thread-sort-by-total-score))
5112 @end lisp
5113
5114 The threads that have highest score will be displayed first in the
5115 summary buffer.  When threads have the same score, they will be sorted
5116 alphabetically.  The threads that have the same score and the same
5117 subject will be sorted by number, which is (normally) the sequence in
5118 which the articles arrived.
5119
5120 If you want to sort by score and then reverse arrival order, you could
5121 say something like:
5122
5123 @lisp
5124 (setq gnus-thread-sort-functions
5125       '((lambda (t1 t2)
5126           (not (gnus-thread-sort-by-number t1 t2)))
5127         gnus-thread-sort-by-score))
5128 @end lisp
5129
5130 @vindex gnus-thread-score-function
5131 The function in the @code{gnus-thread-score-function} variable (default
5132 @code{+}) is used for calculating the total score of a thread.  Useful
5133 functions might be @code{max}, @code{min}, or squared means, or whatever
5134 tickles your fancy.
5135
5136 @findex gnus-article-sort-functions
5137 @findex gnus-article-sort-by-date
5138 @findex gnus-article-sort-by-score
5139 @findex gnus-article-sort-by-subject
5140 @findex gnus-article-sort-by-author
5141 @findex gnus-article-sort-by-number
5142 If you are using an unthreaded display for some strange reason or other,
5143 you have to fiddle with the @code{gnus-article-sort-functions} variable.
5144 It is very similar to the @code{gnus-thread-sort-functions}, except that
5145 it uses slightly different functions for article comparison.  Available
5146 sorting predicate functions are @code{gnus-article-sort-by-number},
5147 @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject},
5148 @code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}.
5149
5150 If you want to sort an unthreaded summary display by subject, you could
5151 say something like:
5152
5153 @lisp
5154 (setq gnus-article-sort-functions
5155       '(gnus-article-sort-by-number
5156         gnus-article-sort-by-subject))
5157 @end lisp
5158
5159
5160
5161 @node Asynchronous Fetching
5162 @section Asynchronous Article Fetching
5163 @cindex asynchronous article fetching
5164 @cindex article pre-fetch
5165 @cindex pre-fetch
5166
5167 If you read your news from an @sc{nntp} server that's far away, the
5168 network latencies may make reading articles a chore.  You have to wait
5169 for a while after pressing @kbd{n} to go to the next article before the
5170 article appears.  Why can't Gnus just go ahead and fetch the article
5171 while you are reading the previous one?  Why not, indeed.
5172
5173 First, some caveats.  There are some pitfalls to using asynchronous
5174 article fetching, especially the way Gnus does it.
5175
5176 Let's say you are reading article 1, which is short, and article 2 is
5177 quite long, and you are not interested in reading that.  Gnus does not
5178 know this, so it goes ahead and fetches article 2.  You decide to read
5179 article 3, but since Gnus is in the process of fetching article 2, the
5180 connection is blocked.
5181
5182 To avoid these situations, Gnus will open two (count 'em two)
5183 connections to the server.  Some people may think this isn't a very nice
5184 thing to do, but I don't see any real alternatives.  Setting up that
5185 extra connection takes some time, so Gnus startup will be slower.
5186
5187 Gnus will fetch more articles than you will read.  This will mean that
5188 the link between your machine and the @sc{nntp} server will become more
5189 loaded than if you didn't use article pre-fetch.  The server itself will
5190 also become more loaded---both with the extra article requests, and the
5191 extra connection.
5192
5193 Ok, so now you know that you shouldn't really use this thing...  unless
5194 you really want to.
5195
5196 @vindex gnus-asynchronous
5197 Here's how:  Set @code{gnus-asynchronous} to @code{t}.  The rest should
5198 happen automatically.
5199
5200 @vindex gnus-use-article-prefetch
5201 You can control how many articles are to be pre-fetched by setting
5202 @code{gnus-use-article-prefetch}.  This is 30 by default, which means
5203 that when you read an article in the group, the backend will pre-fetch
5204 the next 30 articles.  If this variable is @code{t}, the backend will
5205 pre-fetch all the articles it can without bound.  If it is
5206 @code{nil}, no pre-fetching will be done.
5207
5208 @vindex gnus-async-prefetch-article-p
5209 @findex gnus-async-read-p
5210 There are probably some articles that you don't want to pre-fetch---read
5211 articles, for instance.  The @code{gnus-async-prefetch-article-p} variable controls whether an article is to be pre-fetched.  This function should
5212 return non-@code{nil} when the article in question is to be
5213 pre-fetched.  The default is @code{gnus-async-read-p}, which returns
5214 @code{nil} on read articles.  The function is called with an article
5215 data structure as the only parameter.
5216
5217 If, for instance, you wish to pre-fetch only unread articles shorter than 100 lines, you could say something like:
5218
5219 @lisp
5220 (defun my-async-short-unread-p (data)
5221   "Return non-nil for short, unread articles."
5222   (and (gnus-data-unread-p data)
5223        (< (mail-header-lines (gnus-data-header data))
5224           100)))
5225
5226 (setq gnus-async-prefetch-article-p 'my-async-short-unread-p)
5227 @end lisp
5228
5229 These functions will be called many, many times, so they should
5230 preferably be short and sweet to avoid slowing down Gnus too much.
5231 It's probably a good idea to byte-compile things like this.
5232
5233 @vindex gnus-prefetched-article-deletion-strategy
5234 Articles have to be removed from the asynch buffer sooner or later.  The
5235 @code{gnus-prefetched-article-deletion-strategy} says when to remove
5236 articles.  This is a list that may contain the following elements:
5237
5238 @table @code
5239 @item read
5240 Remove articles when they are read.
5241
5242 @item exit
5243 Remove articles when exiting the group.
5244 @end table
5245
5246 The default value is @code{(read exit)}.
5247
5248 @c @vindex gnus-use-header-prefetch
5249 @c If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles
5250 @c from the next group.
5251
5252
5253 @node Article Caching
5254 @section Article Caching
5255 @cindex article caching
5256 @cindex caching
5257
5258 If you have an @emph{extremely} slow @sc{nntp} connection, you may
5259 consider turning article caching on.  Each article will then be stored
5260 locally under your home directory.  As you may surmise, this could
5261 potentially use @emph{huge} amounts of disk space, as well as eat up all
5262 your inodes so fast it will make your head swim.  In vodka.
5263
5264 Used carefully, though, it could be just an easier way to save articles.
5265
5266 @vindex gnus-use-long-file-name
5267 @vindex gnus-cache-directory
5268 @vindex gnus-use-cache
5269 To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
5270 all articles ticked or marked as dormant will then be copied
5271 over to your local cache (@code{gnus-cache-directory}).  Whether this
5272 cache is flat or hierarchal is controlled by the
5273 @code{gnus-use-long-file-name} variable, as usual.
5274
5275 When re-selecting a ticked or dormant article, it will be fetched from the
5276 cache instead of from the server.  As articles in your cache will never
5277 expire, this might serve as a method of saving articles while still
5278 keeping them where they belong.  Just mark all articles you want to save
5279 as dormant, and don't worry.
5280
5281 When an article is marked as read, is it removed from the cache.
5282
5283 @vindex gnus-cache-remove-articles
5284 @vindex gnus-cache-enter-articles
5285 The entering/removal of articles from the cache is controlled by the
5286 @code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
5287 variables.  Both are lists of symbols.  The first is @code{(ticked
5288 dormant)} by default, meaning that ticked and dormant articles will be
5289 put in the cache.  The latter is @code{(read)} by default, meaning that
5290 articles marked as read are removed from the cache.  Possibly
5291 symbols in these two lists are @code{ticked}, @code{dormant},
5292 @code{unread} and @code{read}.
5293
5294 @findex gnus-jog-cache
5295 So where does the massive article-fetching and storing come into the
5296 picture?  The @code{gnus-jog-cache} command will go through all
5297 subscribed newsgroups, request all unread articles, score them, and
5298 store them in the cache.  You should only ever, ever ever ever, use this
5299 command if 1) your connection to the @sc{nntp} server is really, really,
5300 really slow and 2) you have a really, really, really huge disk.
5301 Seriously.  One way to cut down on the number of articles downloaded is
5302 to score unwanted articles down and have them marked as read.  They will
5303 not then be downloaded by this command.
5304
5305 @vindex gnus-uncacheable-groups
5306 @vindex gnus-cacheable-groups
5307 It is likely that you do not want caching on all groups.  For instance,
5308 if your @code{nnml} mail is located under your home directory, it makes no
5309 sense to cache it somewhere else under your home directory.  Unless you
5310 feel that it's neat to use twice as much space.  
5311
5312 To limit the caching, you could set @code{gnus-cacheable-groups} to a
5313 regexp of groups to cache, @samp{^nntp} for instance, or set the
5314 @code{gnus-uncacheable-groups} regexp to @samp{^nnml}, for instance.
5315 Both variables are @code{nil} by default. If a group matches both
5316 variables, the group is not cached.
5317
5318 @findex gnus-cache-generate-nov-databases
5319 @findex gnus-cache-generate-active
5320 @vindex gnus-cache-active-file
5321 The cache stores information on what articles it contains in its active
5322 file (@code{gnus-cache-active-file}).  If this file (or any other parts
5323 of the cache) becomes all messed up for some reason or other, Gnus
5324 offers two functions that will try to set things right.  @kbd{M-x
5325 gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
5326 files, and @kbd{gnus-cache-generate-active} will (re)generate the active
5327 file.
5328
5329
5330 @node Persistent Articles
5331 @section Persistent Articles
5332 @cindex persistent articles
5333
5334 Closely related to article caching, we have @dfn{persistent articles}.
5335 In fact, it's just a different way of looking at caching, and much more
5336 useful in my opinion.
5337
5338 Say you're reading a newsgroup, and you happen on to some valuable gem
5339 that you want to keep and treasure forever.  You'd normally just save it
5340 (using one of the many saving commands) in some file.  The problem with
5341 that is that it's just, well, yucky.  Ideally you'd prefer just having
5342 the article remain in the group where you found it forever; untouched by
5343 the expiry going on at the news server.
5344
5345 This is what a @dfn{persistent article} is---an article that just won't
5346 be deleted.  It's implemented using the normal cache functions, but
5347 you use two explicit commands for managing persistent articles:
5348
5349 @table @kbd
5350
5351 @item *
5352 @kindex * (Summary)
5353 @findex gnus-cache-enter-article
5354 Make the current article persistent (@code{gnus-cache-enter-article}).
5355
5356 @item M-*
5357 @kindex M-* (Summary)
5358 @findex gnus-cache-remove-article
5359 Remove the current article from the persistent articles
5360 (@code{gnus-cache-remove-article}).  This will normally delete the
5361 article.
5362 @end table
5363
5364 Both these commands understand the process/prefix convention.
5365
5366 To avoid having all ticked articles (and stuff) entered into the cache,
5367 you should set @code{gnus-use-cache} to @code{passive} if you're just
5368 interested in persistent articles:
5369
5370 @lisp
5371 (setq gnus-use-cache 'passive)
5372 @end lisp
5373
5374
5375 @node Article Backlog
5376 @section Article Backlog
5377 @cindex backlog
5378 @cindex article backlog
5379
5380 If you have a slow connection, but the idea of using caching seems
5381 unappealing to you (and it is, really), you can help the situation some
5382 by switching on the @dfn{backlog}.  This is where Gnus will buffer
5383 already read articles so that it doesn't have to re-fetch articles
5384 you've already read.  This only helps if you are in the habit of
5385 re-selecting articles you've recently read, of course.  If you never do
5386 that, turning the backlog on will slow Gnus down a little bit, and
5387 increase memory usage some.
5388
5389 @vindex gnus-keep-backlog
5390 If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
5391 at most @var{n} old articles in a buffer for later re-fetching.  If this
5392 variable is non-@code{nil} and is not a number, Gnus will store
5393 @emph{all} read articles, which means that your Emacs will grow without
5394 bound before exploding and taking your machine down with you.  I put
5395 that in there just to keep y'all on your toes.
5396
5397 This variable is @code{nil} by default.
5398
5399
5400 @node Saving Articles
5401 @section Saving Articles
5402 @cindex saving articles
5403
5404 Gnus can save articles in a number of ways.  Below is the documentation
5405 for saving articles in a fairly straight-forward fashion (i.e., little
5406 processing of the article is done before it is saved).  For a different
5407 approach (uudecoding, unsharing) you should use @code{gnus-uu}
5408 (@pxref{Decoding Articles}).
5409
5410 @vindex gnus-save-all-headers
5411 If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
5412 unwanted headers before saving the article.
5413
5414 @vindex gnus-saved-headers
5415 If the preceding variable is @code{nil}, all headers that match the
5416 @code{gnus-saved-headers} regexp will be kept, while the rest will be
5417 deleted before saving.
5418
5419 @table @kbd
5420
5421 @item O o
5422 @itemx o
5423 @kindex O o (Summary)
5424 @kindex o (Summary)
5425 @findex gnus-summary-save-article
5426 @c @icon{gnus-summary-save-article}
5427 Save the current article using the default article saver
5428 (@code{gnus-summary-save-article}).
5429
5430 @item O m
5431 @kindex O m (Summary)
5432 @findex gnus-summary-save-article-mail
5433 Save the current article in mail format
5434 (@code{gnus-summary-save-article-mail}).
5435
5436 @item O r
5437 @kindex O r (Summary)
5438 @findex gnus-summary-save-article-rmail
5439 Save the current article in rmail format
5440 (@code{gnus-summary-save-article-rmail}).
5441
5442 @item O f
5443 @kindex O f (Summary)
5444 @findex gnus-summary-save-article-file
5445 @c @icon{gnus-summary-save-article-file}
5446 Save the current article in plain file format
5447 (@code{gnus-summary-save-article-file}).
5448
5449 @item O F
5450 @kindex O F (Summary)
5451 @findex gnus-summary-write-article-file
5452 Write the current article in plain file format, overwriting any previous
5453 file contents (@code{gnus-summary-write-article-file}).
5454
5455 @item O b
5456 @kindex O b (Summary)
5457 @findex gnus-summary-save-article-body-file
5458 Save the current article body in plain file format
5459 (@code{gnus-summary-save-article-body-file}).
5460
5461 @item O h
5462 @kindex O h (Summary)
5463 @findex gnus-summary-save-article-folder
5464 Save the current article in mh folder format
5465 (@code{gnus-summary-save-article-folder}).
5466
5467 @item O v
5468 @kindex O v (Summary)
5469 @findex gnus-summary-save-article-vm
5470 Save the current article in a VM folder
5471 (@code{gnus-summary-save-article-vm}).
5472
5473 @item O p
5474 @kindex O p (Summary)
5475 @findex gnus-summary-pipe-output
5476 Save the current article in a pipe.  Uhm, like, what I mean is---Pipe
5477 the current article to a process (@code{gnus-summary-pipe-output}).
5478 @end table
5479
5480 @vindex gnus-prompt-before-saving
5481 All these commands use the process/prefix convention
5482 (@pxref{Process/Prefix}).  If you save bunches of articles using these
5483 functions, you might get tired of being prompted for files to save each
5484 and every article in.  The prompting action is controlled by
5485 the @code{gnus-prompt-before-saving} variable, which is @code{always} by
5486 default, giving you that excessive prompting action you know and
5487 loathe.  If you set this variable to @code{t} instead, you'll be prompted
5488 just once for each series of articles you save.  If you like to really
5489 have Gnus do all your thinking for you, you can even set this variable
5490 to @code{nil}, which means that you will never be prompted for files to
5491 save articles in.  Gnus will simply save all the articles in the default
5492 files.
5493
5494
5495 @vindex gnus-default-article-saver
5496 You can customize the @code{gnus-default-article-saver} variable to make
5497 Gnus do what you want it to.  You can use any of the four ready-made
5498 functions below, or you can create your own.
5499
5500 @table @code
5501
5502 @item gnus-summary-save-in-rmail
5503 @findex gnus-summary-save-in-rmail
5504 @vindex gnus-rmail-save-name
5505 @findex gnus-plain-save-name
5506 This is the default format, @dfn{babyl}.  Uses the function in the
5507 @code{gnus-rmail-save-name} variable to get a file name to save the
5508 article in.  The default is @code{gnus-plain-save-name}.
5509
5510 @item gnus-summary-save-in-mail
5511 @findex gnus-summary-save-in-mail
5512 @vindex gnus-mail-save-name
5513 Save in a Unix mail (mbox) file.  Uses the function in the
5514 @code{gnus-mail-save-name} variable to get a file name to save the
5515 article in.  The default is @code{gnus-plain-save-name}.
5516
5517 @item gnus-summary-save-in-file
5518 @findex gnus-summary-save-in-file
5519 @vindex gnus-file-save-name
5520 @findex gnus-numeric-save-name
5521 Append the article straight to an ordinary file.  Uses the function in
5522 the @code{gnus-file-save-name} variable to get a file name to save the
5523 article in.  The default is @code{gnus-numeric-save-name}.
5524
5525 @item gnus-summary-save-body-in-file
5526 @findex gnus-summary-save-body-in-file
5527 Append the article body to an ordinary file.  Uses the function in the
5528 @code{gnus-file-save-name} variable to get a file name to save the
5529 article in.  The default is @code{gnus-numeric-save-name}.
5530
5531 @item gnus-summary-save-in-folder
5532 @findex gnus-summary-save-in-folder
5533 @findex gnus-folder-save-name
5534 @findex gnus-Folder-save-name
5535 @vindex gnus-folder-save-name
5536 @cindex rcvstore
5537 @cindex MH folders
5538 Save the article to an MH folder using @code{rcvstore} from the MH
5539 library.  Uses the function in the @code{gnus-folder-save-name} variable
5540 to get a file name to save the article in.  The default is
5541 @code{gnus-folder-save-name}, but you can also use
5542 @code{gnus-Folder-save-name}, which creates capitalized names.
5543
5544 @item gnus-summary-save-in-vm
5545 @findex gnus-summary-save-in-vm
5546 Save the article in a VM folder.  You have to have the VM mail
5547 reader to use this setting.
5548 @end table
5549
5550 @vindex gnus-article-save-directory
5551 All of these functions, except for the last one, will save the article
5552 in the @code{gnus-article-save-directory}, which is initialized from the
5553 @code{SAVEDIR} environment variable.  This is @file{~/News/} by
5554 default.
5555
5556 As you can see above, the functions use different functions to find a
5557 suitable name of a file to save the article in.  Below is a list of
5558 available functions that generate names:
5559
5560 @table @code
5561
5562 @item gnus-Numeric-save-name
5563 @findex gnus-Numeric-save-name
5564 File names like @file{~/News/Alt.andrea-dworkin/45}.
5565
5566 @item gnus-numeric-save-name
5567 @findex gnus-numeric-save-name
5568 File names like @file{~/News/alt.andrea-dworkin/45}.
5569
5570 @item gnus-Plain-save-name
5571 @findex gnus-Plain-save-name
5572 File names like @file{~/News/Alt.andrea-dworkin}.
5573
5574 @item gnus-plain-save-name
5575 @findex gnus-plain-save-name
5576 File names like @file{~/News/alt.andrea-dworkin}.
5577 @end table
5578
5579 @vindex gnus-split-methods
5580 You can have Gnus suggest where to save articles by plonking a regexp into
5581 the @code{gnus-split-methods} alist.  For instance, if you would like to
5582 save articles related to Gnus in the file @file{gnus-stuff}, and articles
5583 related to VM in @code{vm-stuff}, you could set this variable to something
5584 like:
5585
5586 @lisp
5587 (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
5588  ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
5589  (my-choosing-function "../other-dir/my-stuff")
5590  ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
5591 @end lisp
5592
5593 We see that this is a list where each element is a list that has two
5594 elements---the @dfn{match} and the @dfn{file}.  The match can either be
5595 a string (in which case it is used as a regexp to match on the article
5596 head); it can be a symbol (which will be called as a function with the
5597 group name as a parameter); or it can be a list (which will be
5598 @code{eval}ed).  If any of these actions have a non-@code{nil} result,
5599 the @dfn{file} will be used as a default prompt.  In addition, the
5600 result of the operation itself will be used if the function or form
5601 called returns a string or a list of strings.
5602
5603 You basically end up with a list of file names that might be used when
5604 saving the current article.  (All ``matches'' will be used.)  You will
5605 then be prompted for what you really want to use as a name, with file
5606 name completion over the results from applying this variable.
5607
5608 This variable is @code{((gnus-article-archive-name))} by default, which
5609 means that Gnus will look at the articles it saves for an
5610 @code{Archive-name} line and use that as a suggestion for the file
5611 name.
5612
5613 Here's an example function to clean up file names somewhat.  If you have
5614 lots of mail groups called things like
5615 @samp{nnml:mail.whatever}, you may want to chop off the beginning of
5616 these group names before creating the file name to save to.  The
5617 following will do just that:
5618
5619 @lisp
5620 (defun my-save-name (group)
5621   (when (string-match "^nnml:mail." group)
5622     (substring group (match-end 0))))
5623
5624 (setq gnus-split-methods
5625       '((gnus-article-archive-name)
5626         (my-save-name)))
5627 @end lisp
5628
5629
5630 @vindex gnus-use-long-file-name
5631 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
5632 @code{nil}, all the preceding functions will replace all periods
5633 (@samp{.}) in the group names with slashes (@samp{/})---which means that
5634 the functions will generate hierarchies of directories instead of having
5635 all the files in the top level directory
5636 (@file{~/News/alt/andrea-dworkin} instead of
5637 @file{~/News/alt.andrea-dworkin}.)  This variable is @code{t} by default
5638 on most systems.  However, for historical reasons, this is @code{nil} on
5639 Xenix and usg-unix-v machines by default.
5640
5641 This function also affects kill and score file names.  If this variable
5642 is a list, and the list contains the element @code{not-score}, long file
5643 names will not be used for score files, if it contains the element
5644 @code{not-save}, long file names will not be used for saving, and if it
5645 contains the element @code{not-kill}, long file names will not be used
5646 for kill files.
5647
5648 If you'd like to save articles in a hierarchy that looks something like
5649 a spool, you could
5650
5651 @lisp
5652 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
5653 (setq gnus-default-article-saver 'gnus-summary-save-in-file) ; no encoding
5654 @end lisp
5655
5656 Then just save with @kbd{o}.  You'd then read this hierarchy with
5657 ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
5658 the top level directory as the argument (@file{~/News/}).  Then just walk
5659 around to the groups/directories with @code{nneething}.
5660
5661
5662 @node Decoding Articles
5663 @section Decoding Articles
5664 @cindex decoding articles
5665
5666 Sometime users post articles (or series of articles) that have been
5667 encoded in some way or other.  Gnus can decode them for you.
5668
5669 @menu
5670 * Uuencoded Articles::    Uudecode articles.
5671 * Shell Archives::        Unshar articles.
5672 * PostScript Files::      Split PostScript.
5673 * Other Files::           Plain save and binhex.
5674 * Decoding Variables::    Variables for a happy decoding.
5675 * Viewing Files::         You want to look at the result of the decoding?
5676 @end menu
5677
5678 @cindex series
5679 @cindex article series
5680 All these functions use the process/prefix convention
5681 (@pxref{Process/Prefix}) for finding out what articles to work on, with
5682 the extension that a ``single article'' means ``a single series''.  Gnus
5683 can find out by itself what articles belong to a series, decode all the
5684 articles and unpack/view/save the resulting file(s).
5685
5686 Gnus guesses what articles are in the series according to the following
5687 simplish rule: The subjects must be (nearly) identical, except for the
5688 last two numbers of the line.  (Spaces are largely ignored, however.)
5689
5690 For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
5691 will find all the articles that match the regexp @samp{^cat.gif
5692 ([0-9]+/[0-9]+).*$}.
5693
5694 Subjects that are non-standard, like @samp{cat.gif (2/3) Part 6 of a
5695 series}, will not be properly recognized by any of the automatic viewing
5696 commands, and you have to mark the articles manually with @kbd{#}.
5697
5698
5699 @node Uuencoded Articles
5700 @subsection Uuencoded Articles
5701 @cindex uudecode
5702 @cindex uuencoded articles
5703
5704 @table @kbd
5705
5706 @item X u
5707 @kindex X u (Summary)
5708 @findex gnus-uu-decode-uu
5709 @c @icon{gnus-uu-decode-uu}
5710 Uudecodes the current series (@code{gnus-uu-decode-uu}).
5711
5712 @item X U
5713 @kindex X U (Summary)
5714 @findex gnus-uu-decode-uu-and-save
5715 Uudecodes and saves the current series
5716 (@code{gnus-uu-decode-uu-and-save}).
5717
5718 @item X v u
5719 @kindex X v u (Summary)
5720 @findex gnus-uu-decode-uu-view
5721 Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
5722
5723 @item X v U
5724 @kindex X v U (Summary)
5725 @findex gnus-uu-decode-uu-and-save-view
5726 Uudecodes, views and saves the current series
5727 (@code{gnus-uu-decode-uu-and-save-view}).
5728
5729 @end table
5730
5731 Remember that these all react to the presence of articles marked with
5732 the process mark.  If, for instance, you'd like to decode and save an
5733 entire newsgroup, you'd typically do @kbd{M P a}
5734 (@code{gnus-uu-mark-all}) and then @kbd{X U}
5735 (@code{gnus-uu-decode-uu-and-save}).
5736
5737 All this is very much different from how @code{gnus-uu} worked with
5738 @sc{gnus 4.1}, where you had explicit keystrokes for everything under
5739 the sun.  This version of @code{gnus-uu} generally assumes that you mark
5740 articles in some way (@pxref{Setting Process Marks}) and then press
5741 @kbd{X u}.
5742
5743 @vindex gnus-uu-notify-files
5744 Note: When trying to decode articles that have names matching
5745 @code{gnus-uu-notify-files}, which is hard-coded to
5746 @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
5747 automatically post an article on @samp{comp.unix.wizards} saying that
5748 you have just viewed the file in question.  This feature can't be turned
5749 off.
5750
5751
5752 @node Shell Archives
5753 @subsection Shell Archives
5754 @cindex unshar
5755 @cindex shell archives
5756 @cindex shared articles
5757
5758 Shell archives (``shar files'') used to be a popular way to distribute
5759 sources, but it isn't used all that much today.  In any case, we have
5760 some commands to deal with these:
5761
5762 @table @kbd
5763
5764 @item X s
5765 @kindex X s (Summary)
5766 @findex gnus-uu-decode-unshar
5767 Unshars the current series (@code{gnus-uu-decode-unshar}).
5768
5769 @item X S
5770 @kindex X S (Summary)
5771 @findex gnus-uu-decode-unshar-and-save
5772 Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
5773
5774 @item X v s
5775 @kindex X v s (Summary)
5776 @findex gnus-uu-decode-unshar-view
5777 Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
5778
5779 @item X v S
5780 @kindex X v S (Summary)
5781 @findex gnus-uu-decode-unshar-and-save-view
5782 Unshars, views and saves the current series
5783 (@code{gnus-uu-decode-unshar-and-save-view}).
5784 @end table
5785
5786
5787 @node PostScript Files
5788 @subsection PostScript Files
5789 @cindex PostScript
5790
5791 @table @kbd
5792
5793 @item X p
5794 @kindex X p (Summary)
5795 @findex gnus-uu-decode-postscript
5796 Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
5797
5798 @item X P
5799 @kindex X P (Summary)
5800 @findex gnus-uu-decode-postscript-and-save
5801 Unpack and save the current PostScript series
5802 (@code{gnus-uu-decode-postscript-and-save}).
5803
5804 @item X v p
5805 @kindex X v p (Summary)
5806 @findex gnus-uu-decode-postscript-view
5807 View the current PostScript series
5808 (@code{gnus-uu-decode-postscript-view}).
5809
5810 @item X v P
5811 @kindex X v P (Summary)
5812 @findex gnus-uu-decode-postscript-and-save-view
5813 View and save the current PostScript series
5814 (@code{gnus-uu-decode-postscript-and-save-view}).
5815 @end table
5816
5817
5818 @node Other Files
5819 @subsection Other Files
5820
5821 @table @kbd
5822 @item X o
5823 @kindex X o (Summary)
5824 @findex gnus-uu-decode-save
5825 Save the current series
5826 (@code{gnus-uu-decode-save}).
5827
5828 @item X b
5829 @kindex X b (Summary)
5830 @findex gnus-uu-decode-binhex
5831 Unbinhex the current series (@code{gnus-uu-decode-binhex}).  This
5832 doesn't really work yet.
5833 @end table
5834
5835
5836 @node Decoding Variables
5837 @subsection Decoding Variables
5838
5839 Adjective, not verb.
5840
5841 @menu
5842 * Rule Variables::          Variables that say how a file is to be viewed.
5843 * Other Decode Variables::  Other decode variables.
5844 * Uuencoding and Posting::  Variables for customizing uuencoding.
5845 @end menu
5846
5847
5848 @node Rule Variables
5849 @subsubsection Rule Variables
5850 @cindex rule variables
5851
5852 Gnus uses @dfn{rule variables} to decide how to view a file.  All these
5853 variables are of the form
5854
5855 @lisp
5856       (list '(regexp1 command2)
5857             '(regexp2 command2)
5858             ...)
5859 @end lisp
5860
5861 @table @code
5862
5863 @item gnus-uu-user-view-rules
5864 @vindex gnus-uu-user-view-rules
5865 @cindex sox
5866 This variable is consulted first when viewing files.  If you wish to use,
5867 for instance, @code{sox} to convert an @samp{.au} sound file, you could
5868 say something like:
5869 @lisp
5870 (setq gnus-uu-user-view-rules
5871       (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
5872 @end lisp
5873
5874 @item gnus-uu-user-view-rules-end
5875 @vindex gnus-uu-user-view-rules-end
5876 This variable is consulted if Gnus couldn't make any matches from the
5877 user and default view rules.
5878
5879 @item gnus-uu-user-archive-rules
5880 @vindex gnus-uu-user-archive-rules
5881 This variable can be used to say what commands should be used to unpack
5882 archives.
5883 @end table
5884
5885
5886 @node Other Decode Variables
5887 @subsubsection Other Decode Variables
5888
5889 @table @code
5890 @vindex gnus-uu-grabbed-file-functions
5891
5892 @item gnus-uu-grabbed-file-functions
5893 All functions in this list will be called right after each file has been
5894 successfully decoded---so that you can move or view files right away,
5895 and don't have to wait for all files to be decoded before you can do
5896 anything.  Ready-made functions you can put in this list are:
5897
5898 @table @code
5899
5900 @item gnus-uu-grab-view
5901 @findex gnus-uu-grab-view
5902 View the file.
5903
5904 @item gnus-uu-grab-move
5905 @findex gnus-uu-grab-move
5906 Move the file (if you're using a saving function.)
5907 @end table
5908
5909 @item gnus-uu-be-dangerous
5910 @vindex gnus-uu-be-dangerous
5911 Specifies what to do if unusual situations arise during decoding.  If
5912 @code{nil}, be as conservative as possible.  If @code{t}, ignore things
5913 that didn't work, and overwrite existing files.  Otherwise, ask each
5914 time.
5915
5916 @item gnus-uu-ignore-files-by-name
5917 @vindex gnus-uu-ignore-files-by-name
5918 Files with name matching this regular expression won't be viewed.
5919
5920 @item gnus-uu-ignore-files-by-type
5921 @vindex gnus-uu-ignore-files-by-type
5922 Files with a @sc{mime} type matching this variable won't be viewed.
5923 Note that Gnus tries to guess what type the file is based on the name.
5924 @code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly
5925 kludgey.
5926
5927 @item gnus-uu-tmp-dir
5928 @vindex gnus-uu-tmp-dir
5929 Where @code{gnus-uu} does its work.
5930
5931 @item gnus-uu-do-not-unpack-archives
5932 @vindex gnus-uu-do-not-unpack-archives
5933 Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
5934 looking for files to display.
5935
5936 @item gnus-uu-view-and-save
5937 @vindex gnus-uu-view-and-save
5938 Non-@code{nil} means that the user will always be asked to save a file
5939 after viewing it.
5940
5941 @item gnus-uu-ignore-default-view-rules
5942 @vindex gnus-uu-ignore-default-view-rules
5943 Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
5944 rules.
5945
5946 @item gnus-uu-ignore-default-archive-rules
5947 @vindex gnus-uu-ignore-default-archive-rules
5948 Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
5949 unpacking commands.
5950
5951 @item gnus-uu-kill-carriage-return
5952 @vindex gnus-uu-kill-carriage-return
5953 Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
5954 from articles.
5955
5956 @item gnus-uu-unmark-articles-not-decoded
5957 @vindex gnus-uu-unmark-articles-not-decoded
5958 Non-@code{nil} means that @code{gnus-uu} will mark unsuccessfully
5959 decoded articles as unread.
5960
5961 @item gnus-uu-correct-stripped-uucode
5962 @vindex gnus-uu-correct-stripped-uucode
5963 Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
5964 uuencoded files that have had trailing spaces deleted.
5965
5966 @item gnus-uu-pre-uudecode-hook
5967 @vindex gnus-uu-pre-uudecode-hook
5968 Hook run before sending a message to @code{uudecode}.
5969
5970 @item gnus-uu-view-with-metamail
5971 @vindex gnus-uu-view-with-metamail
5972 @cindex metamail
5973 Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
5974 commands defined by the rule variables and just fudge a @sc{mime}
5975 content type based on the file name.  The result will be fed to
5976 @code{metamail} for viewing.
5977
5978 @item gnus-uu-save-in-digest
5979 @vindex gnus-uu-save-in-digest
5980 Non-@code{nil} means that @code{gnus-uu}, when asked to save without
5981 decoding, will save in digests.  If this variable is @code{nil},
5982 @code{gnus-uu} will just save everything in a file without any
5983 embellishments.  The digesting almost conforms to RFC1153---no easy way
5984 to specify any meaningful volume and issue numbers were found, so I
5985 simply dropped them.
5986
5987 @end table
5988
5989
5990 @node Uuencoding and Posting
5991 @subsubsection Uuencoding and Posting
5992
5993 @table @code
5994
5995 @item gnus-uu-post-include-before-composing
5996 @vindex gnus-uu-post-include-before-composing
5997 Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
5998 before you compose the article.  If this variable is @code{t}, you can
5999 either include an encoded file with @kbd{C-c C-i} or have one included
6000 for you when you post the article.
6001
6002 @item gnus-uu-post-length
6003 @vindex gnus-uu-post-length
6004 Maximum length of an article.  The encoded file will be split into how
6005 many articles it takes to post the entire file.
6006
6007 @item gnus-uu-post-threaded
6008 @vindex gnus-uu-post-threaded
6009 Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
6010 thread.  This may not be smart, as no other decoder I have seen is able
6011 to follow threads when collecting uuencoded articles.  (Well, I have
6012 seen one package that does that---@code{gnus-uu}, but somehow, I don't
6013 think that counts...) Default is @code{nil}.
6014
6015 @item gnus-uu-post-separate-description
6016 @vindex gnus-uu-post-separate-description
6017 Non-@code{nil} means that the description will be posted in a separate
6018 article.  The first article will typically be numbered (0/x).  If this
6019 variable is @code{nil}, the description the user enters will be included
6020 at the beginning of the first article, which will be numbered (1/x).
6021 Default is @code{t}.
6022
6023 @end table
6024
6025
6026 @node Viewing Files
6027 @subsection Viewing Files
6028 @cindex viewing files
6029 @cindex pseudo-articles
6030
6031 After decoding, if the file is some sort of archive, Gnus will attempt
6032 to unpack the archive and see if any of the files in the archive can be
6033 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
6034 containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
6035 uncompress and de-tar the main file, and then view the two pictures.
6036 This unpacking process is recursive, so if the archive contains archives
6037 of archives, it'll all be unpacked.
6038
6039 Finally, Gnus will normally insert a @dfn{pseudo-article} for each
6040 extracted file into the summary buffer.  If you go to these
6041 ``articles'', you will be prompted for a command to run (usually Gnus
6042 will make a suggestion), and then the command will be run.
6043
6044 @vindex gnus-view-pseudo-asynchronously
6045 If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
6046 until the viewing is done before proceeding.
6047
6048 @vindex gnus-view-pseudos
6049 If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
6050 the pseudo-articles into the summary buffer, but view them
6051 immediately.  If this variable is @code{not-confirm}, the user won't even
6052 be asked for a confirmation before viewing is done.
6053
6054 @vindex gnus-view-pseudos-separately
6055 If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
6056 pseudo-article will be created for each file to be viewed.  If
6057 @code{nil}, all files that use the same viewing command will be given as
6058 a list of parameters to that command.
6059
6060 @vindex gnus-insert-pseudo-articles
6061 If @code{gnus-insert-pseudo-articles} is non-@code{nil}, insert
6062 pseudo-articles when decoding.  It is @code{t} by default.
6063
6064 So; there you are, reading your @emph{pseudo-articles} in your
6065 @emph{virtual newsgroup} from the @emph{virtual server}; and you think:
6066 Why isn't anything real anymore? How did we get here?
6067
6068
6069 @node Article Treatment
6070 @section Article Treatment
6071
6072 Reading through this huge manual, you may have quite forgotten that the
6073 object of newsreaders is to actually, like, read what people have
6074 written.  Reading articles.  Unfortunately, people are quite bad at
6075 writing, so there are tons of functions and variables to make reading
6076 these articles easier.
6077
6078 @menu
6079 * Article Highlighting::    You want to make the article look like fruit salad.
6080 * Article Fontisizing::     Making emphasized text look nice.
6081 * Article Hiding::          You also want to make certain info go away.
6082 * Article Washing::         Lots of way-neat functions to make life better.
6083 * Article Buttons::         Click on URLs, Message-IDs, addresses and the like.
6084 * Article Date::            Grumble, UT!
6085 * Article Signature::       What is a signature?
6086 @end menu
6087
6088
6089 @node Article Highlighting
6090 @subsection Article Highlighting
6091 @cindex highlighting
6092
6093 Not only do you want your article buffer to look like fruit salad, but
6094 you want it to look like technicolor fruit salad.  
6095
6096 @table @kbd
6097
6098 @item W H a
6099 @kindex W H a (Summary)
6100 @findex gnus-article-highlight
6101 @findex gnus-article-maybe-highlight
6102 Do much highlighting of the current article
6103 (@code{gnus-article-highlight}).  This function highlights header, cited
6104 text, the signature, and adds buttons to the body and the head.
6105
6106 Most users would prefer using @code{gnus-article-maybe-highlight} in
6107 @code{gnus-article-display-hook} (@pxref{Customizing Articles}) instead.
6108 This is a bit less agressive---it highlights only the headers, the
6109 signature and adds buttons.
6110
6111 @item W H h
6112 @kindex W H h (Summary)
6113 @findex gnus-article-highlight-headers
6114 @vindex gnus-header-face-alist
6115 Highlight the headers (@code{gnus-article-highlight-headers}).  The
6116 highlighting will be done according to the @code{gnus-header-face-alist}
6117 variable, which is a list where each element has the form @var{(regexp
6118 name content)}.  @var{regexp} is a regular expression for matching the
6119 header, @var{name} is the face used for highlighting the header name
6120 (@pxref{Faces and Fonts}) and @var{content} is the face for highlighting
6121 the header value.  The first match made will be used.  Note that
6122 @var{regexp} shouldn't have @samp{^} prepended---Gnus will add one.
6123
6124 @item W H c
6125 @kindex W H c (Summary)
6126 @findex gnus-article-highlight-citation
6127 Highlight cited text (@code{gnus-article-highlight-citation}).
6128
6129 Some variables to customize the citation highlights:
6130
6131 @table @code
6132 @vindex gnus-cite-parse-max-size
6133
6134 @item gnus-cite-parse-max-size
6135 If the article size if bigger than this variable (which is 25000 by
6136 default), no citation highlighting will be performed.
6137
6138 @item gnus-cite-prefix-regexp
6139 @vindex gnus-cite-prefix-regexp
6140 Regexp matching the longest possible citation prefix on a line.
6141
6142 @item gnus-cite-max-prefix
6143 @vindex gnus-cite-max-prefix
6144 Maximum possible length for a citation prefix (default 20).
6145
6146 @item gnus-cite-face-list
6147 @vindex gnus-cite-face-list
6148 List of faces used for highlighting citations (@pxref{Faces and Fonts}).
6149 When there are citations from multiple articles in the same message,
6150 Gnus will try to give each citation from each article its own face.
6151 This should make it easier to see who wrote what.
6152
6153 @item gnus-supercite-regexp
6154 @vindex gnus-supercite-regexp
6155 Regexp matching normal Supercite attribution lines.
6156
6157 @item gnus-supercite-secondary-regexp
6158 @vindex gnus-supercite-secondary-regexp
6159 Regexp matching mangled Supercite attribution lines.
6160
6161 @item gnus-cite-minimum-match-count
6162 @vindex gnus-cite-minimum-match-count
6163 Minimum number of identical prefixes we have to see before we believe
6164 that it's a citation.
6165
6166 @item gnus-cite-attribution-prefix
6167 @vindex gnus-cite-attribution-prefix
6168 Regexp matching the beginning of an attribution line.
6169
6170 @item gnus-cite-attribution-suffix
6171 @vindex gnus-cite-attribution-suffix
6172 Regexp matching the end of an attribution line.
6173
6174 @item gnus-cite-attribution-face
6175 @vindex gnus-cite-attribution-face
6176 Face used for attribution lines.  It is merged with the face for the
6177 cited text belonging to the attribution.
6178
6179 @end table
6180
6181
6182 @item W H s
6183 @kindex W H s (Summary)
6184 @vindex gnus-signature-separator
6185 @vindex gnus-signature-face
6186 @findex gnus-article-highlight-signature
6187 Highlight the signature (@code{gnus-article-highlight-signature}).
6188 Everything after @code{gnus-signature-separator} (@pxref{Article
6189 Signature}) in an article will be considered a signature and will be
6190 highlighted with @code{gnus-signature-face}, which is @code{italic} by
6191 default.
6192
6193 @end table
6194
6195 @xref{Customizing Articles} for how to highlight articles automatically.
6196
6197
6198 @node Article Fontisizing
6199 @subsection Article Fontisizing
6200 @cindex emphasis
6201 @cindex article emphasis
6202
6203 @findex gnus-article-emphasize
6204 @kindex W e (Summary)
6205 People commonly add emphasis to words in news articles by writing things
6206 like @samp{_this_} or @samp{*this*}.  Gnus can make this look nicer by
6207 running the article through the @kbd{W e}
6208 (@code{gnus-article-emphasize}) command.
6209
6210 @vindex gnus-emphasis-alist
6211 How the emphasis is computed is controlled by the
6212 @code{gnus-emphasis-alist} variable.  This is an alist where the first
6213 element is a regular expression to be matched.  The second is a number
6214 that says what regular expression grouping is used to find the entire
6215 emphasized word.  The third is a number that says what regexp grouping
6216 should be displayed and highlighted.  (The text between these two
6217 groupings will be hidden.)  The fourth is the face used for
6218 highlighting.
6219
6220 @lisp
6221 (setq gnus-article-emphasis
6222       '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
6223         ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
6224 @end lisp
6225
6226 @vindex gnus-emphasis-underline
6227 @vindex gnus-emphasis-bold
6228 @vindex gnus-emphasis-italic
6229 @vindex gnus-emphasis-underline-bold
6230 @vindex gnus-emphasis-underline-italic
6231 @vindex gnus-emphasis-bold-italic
6232 @vindex gnus-emphasis-underline-bold-italic
6233 By default, there are seven rules, and they use the following faces:
6234 @code{gnus-emphasis-bold}, @code{gnus-emphasis-italic},
6235 @code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic},
6236 @code{gnus-emphasis-underline-italic},
6237 @code{gnus-emphasis-underline-bold}, and
6238 @code{gnus-emphasis-underline-bold-italic}.
6239
6240 If you want to change these faces, you can either use @kbd{M-x
6241 customize}, or you can use @code{copy-face}.  For instance, if you want
6242 to make @code{gnus-emphasis-italic} use a red face instead, you could
6243 say something like:
6244
6245 @lisp
6246 (copy-face 'red 'gnus-emphasis-italic)
6247 @end lisp
6248
6249 @xref{Customizing Articles} for how to fontize articles automatically.
6250
6251
6252 @node Article Hiding
6253 @subsection Article Hiding
6254 @cindex article hiding
6255
6256 Or rather, hiding certain things in each article.  There usually is much
6257 too much cruft in most articles.
6258
6259 @table @kbd
6260
6261 @item W W a
6262 @kindex W W a (Summary)
6263 @findex gnus-article-hide
6264 Do quite a lot of hiding on the article buffer
6265 (@kbd{gnus-article-hide}).  In particular, this function will hide
6266 headers, PGP, cited text and the signature.  
6267
6268 @item W W h
6269 @kindex W W h (Summary)
6270 @findex gnus-article-hide-headers
6271 Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
6272 Headers}.
6273
6274 @item W W b
6275 @kindex W W b (Summary)
6276 @findex gnus-article-hide-boring-headers
6277 Hide headers that aren't particularly interesting
6278 (@code{gnus-article-hide-boring-headers}).  @xref{Hiding Headers}.
6279
6280 @item W W s
6281 @kindex W W s (Summary)
6282 @findex gnus-article-hide-signature
6283 Hide signature (@code{gnus-article-hide-signature}).  @xref{Article
6284 Signature}.
6285
6286 @item W W p
6287 @kindex W W p (Summary)
6288 @findex gnus-article-hide-pgp
6289 @vindex gnus-article-hide-pgp-hook
6290 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}).  The
6291 @code{gnus-article-hide-pgp-hook} hook will be run after a @sc{pgp}
6292 signature has been hidden.
6293
6294 @item W W P
6295 @kindex W W P (Summary)
6296 @findex gnus-article-hide-pem
6297 Hide @sc{pem} (privacy enhanced messages) cruft
6298 (@code{gnus-article-hide-pem}).
6299
6300 @item W W c
6301 @kindex W W c (Summary)
6302 @findex gnus-article-hide-citation
6303 Hide citation (@code{gnus-article-hide-citation}).  Some variables for
6304 customizing the hiding:
6305
6306 @table @code
6307
6308 @item gnus-cited-opened-text-button-line-format
6309 @itemx gnus-cited-closed-text-button-line-format
6310 @vindex gnus-cited-closed-text-button-line-format
6311 @vindex gnus-cited-opened-text-button-line-format
6312 Gnus adds buttons to show where the cited text has been hidden, and to
6313 allow toggle hiding the text.  The format of the variable is specified
6314 by these format-like variable (@pxref{Formatting Variables}).  These
6315 specs are valid:
6316
6317 @table @samp
6318 @item b
6319 Starting point of the hidden text.
6320 @item e
6321 Ending point of the hidden text.
6322 @item l
6323 Number of characters in the hidden region.
6324 @item n
6325 Number of lines of hidden text.
6326 @end table
6327
6328 @item gnus-cited-lines-visible
6329 @vindex gnus-cited-lines-visible
6330 The number of lines at the beginning of the cited text to leave shown.
6331
6332 @end table
6333
6334 @item W W C-c
6335 @kindex W W C-c (Summary)
6336 @findex gnus-article-hide-citation-maybe
6337
6338 Hide citation (@code{gnus-article-hide-citation-maybe}) depending on the
6339 following two variables:
6340
6341 @table @code