*** empty log message ***
[gnus] / texi / gnus.texi
1 \input texinfo                  @c -*-texinfo-*-
2
3 @setfilename gnus
4 @settitle Pterodactyl Gnus 0.35 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,98 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 Pterodactyl Gnus 0.35 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 Pterodactyl Gnus 0.35.
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 After changing servers, you @strong{must} move the cache hierarchy away,
827 since the cached articles will have wrong article numbers, which will
828 affect which articles Gnus thinks are read.
829
830
831 @node Startup Files
832 @section Startup Files
833 @cindex startup files
834 @cindex .newsrc
835 @cindex .newsrc.el
836 @cindex .newsrc.eld
837
838 Now, you all know about the @file{.newsrc} file.  All subscription
839 information is traditionally stored in this file.
840
841 Things got a bit more complicated with @sc{gnus}.  In addition to
842 keeping the @file{.newsrc} file updated, it also used a file called
843 @file{.newsrc.el} for storing all the information that didn't fit into
844 the @file{.newsrc} file.  (Actually, it also duplicated everything in
845 the @file{.newsrc} file.)  @sc{gnus} would read whichever one of these
846 files was the most recently saved, which enabled people to swap between
847 @sc{gnus} and other newsreaders.
848
849 That was kinda silly, so Gnus went one better: In addition to the
850 @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
851 @file{.newsrc.eld}.  It will read whichever of these files that are most
852 recent, but it will never write a @file{.newsrc.el} file.  You should
853 never delete the @file{.newsrc.eld} file---it contains much information
854 not stored in the @file{.newsrc} file.
855
856 @vindex gnus-save-newsrc-file
857 You can turn off writing the @file{.newsrc} file by setting
858 @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
859 the file and save some space, as well as exiting from Gnus faster.
860 However, this will make it impossible to use other newsreaders than
861 Gnus.  But hey, who would want to, right?
862
863 @vindex gnus-save-killed-list
864 If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus
865 will not save the list of killed groups to the startup file.  This will
866 save both time (when starting and quitting) and space (on disk).  It
867 will also mean that Gnus has no record of what groups are new or old,
868 so the automatic new groups subscription methods become meaningless.
869 You should always set @code{gnus-check-new-newsgroups} to @code{nil} or
870 @code{ask-server} if you set this variable to @code{nil} (@pxref{New
871 Groups}).  This variable can also be a regular expression.  If that's
872 the case, remove all groups that do not match this regexp before
873 saving.  This can be useful in certain obscure situations that involve
874 several servers where not all servers support @code{ask-server}.
875
876 @vindex gnus-startup-file
877 The @code{gnus-startup-file} variable says where the startup files are.
878 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
879 file being whatever that one is, with a @samp{.eld} appended.
880
881 @vindex gnus-save-newsrc-hook
882 @vindex gnus-save-quick-newsrc-hook
883 @vindex gnus-save-standard-newsrc-hook
884 @code{gnus-save-newsrc-hook} is called before saving any of the newsrc
885 files, while @code{gnus-save-quick-newsrc-hook} is called just before
886 saving the @file{.newsrc.eld} file, and
887 @code{gnus-save-standard-newsrc-hook} is called just before saving the
888 @file{.newsrc} file.  The latter two are commonly used to turn version
889 control on or off.  Version control is on by default when saving the
890 startup files.  If you want to turn backup creation off, say something like:
891
892 @lisp
893 (defun turn-off-backup ()
894   (set (make-local-variable 'backup-inhibited) t))
895
896 (add-hook 'gnus-save-quick-newsrc-hook 'turn-off-backup)
897 (add-hook 'gnus-save-standard-newsrc-hook 'turn-off-backup)
898 @end lisp
899
900 @vindex gnus-init-file
901 When Gnus starts, it will read the @code{gnus-site-init-file}
902 (@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
903 (@file{~/.gnus} by default) files.  These are normal Emacs Lisp files
904 and can be used to avoid cluttering your @file{~/.emacs} and
905 @file{site-init} files with Gnus stuff.  Gnus will also check for files
906 with the same names as these, but with @file{.elc} and @file{.el}
907 suffixes.  In other words, if you have set @code{gnus-init-file} to
908 @file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
909 and finally @file{~/.gnus} (in this order).
910
911
912
913 @node Auto Save
914 @section Auto Save
915 @cindex dribble file
916 @cindex auto-save
917
918 Whenever you do something that changes the Gnus data (reading articles,
919 catching up, killing/subscribing groups), the change is added to a
920 special @dfn{dribble buffer}.  This buffer is auto-saved the normal
921 Emacs way.  If your Emacs should crash before you have saved the
922 @file{.newsrc} files, all changes you have made can be recovered from
923 this file.
924
925 If Gnus detects this file at startup, it will ask the user whether to
926 read it.  The auto save file is deleted whenever the real startup file is
927 saved.
928
929 @vindex gnus-use-dribble-file
930 If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
931 maintain a dribble buffer.  The default is @code{t}.
932
933 @vindex gnus-dribble-directory
934 Gnus will put the dribble file(s) in @code{gnus-dribble-directory}.  If
935 this variable is @code{nil}, which it is by default, Gnus will dribble
936 into the directory where the @file{.newsrc} file is located.  (This is
937 normally the user's home directory.)  The dribble file will get the same
938 file permissions as the @code{.newsrc} file.
939
940 @vindex gnus-always-read-dribble-file
941 If @code{gnus-always-read-dribble-file} is non-@code{nil}, Gnus will
942 read the dribble file on startup without querying the user.
943
944
945 @node The Active File
946 @section The Active File
947 @cindex active file
948 @cindex ignored groups
949
950 When Gnus starts, or indeed whenever it tries to determine whether new
951 articles have arrived, it reads the active file.  This is a very large
952 file that lists all the active groups and articles on the server.
953
954 @vindex gnus-ignored-newsgroups
955 Before examining the active file, Gnus deletes all lines that match the
956 regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
957 any groups with bogus names, but you can use this variable to make Gnus
958 ignore hierarchies you aren't ever interested in.  However, this is not
959 recommended.  In fact, it's highly discouraged.  Instead, @pxref{New
960 Groups} for an overview of other variables that can be used instead.
961
962 @c This variable is
963 @c @code{nil} by default, and will slow down active file handling somewhat
964 @c if you set it to anything else.
965
966 @vindex gnus-read-active-file
967 @c @head
968 The active file can be rather Huge, so if you have a slow network, you
969 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
970 reading the active file.  This variable is @code{some} by default.
971
972 Gnus will try to make do by getting information just on the groups that
973 you actually subscribe to.
974
975 Note that if you subscribe to lots and lots of groups, setting this
976 variable to @code{nil} will probably make Gnus slower, not faster.  At
977 present, having this variable @code{nil} will slow Gnus down
978 considerably, unless you read news over a 2400 baud modem.
979
980 This variable can also have the value @code{some}.  Gnus will then
981 attempt to read active info only on the subscribed groups.  On some
982 servers this is quite fast (on sparkling, brand new INN servers that
983 support the @code{LIST ACTIVE group} command), on others this isn't fast
984 at all.  In any case, @code{some} should be faster than @code{nil}, and
985 is certainly faster than @code{t} over slow lines.
986
987 If this variable is @code{nil}, Gnus will ask for group info in total
988 lock-step, which isn't very fast.  If it is @code{some} and you use an
989 @sc{nntp} server, Gnus will pump out commands as fast as it can, and
990 read all the replies in one swoop.  This will normally result in better
991 performance, but if the server does not support the aforementioned
992 @code{LIST ACTIVE group} command, this isn't very nice to the server.
993
994 In any case, if you use @code{some} or @code{nil}, you should definitely
995 kill all groups that you aren't interested in to speed things up.
996
997 Note that this variable also affects active file retrieval from
998 secondary select methods.
999
1000
1001 @node Startup Variables
1002 @section Startup Variables
1003
1004 @table @code
1005
1006 @item gnus-load-hook
1007 @vindex gnus-load-hook
1008 A hook run while Gnus is being loaded.  Note that this hook will
1009 normally be run just once in each Emacs session, no matter how many
1010 times you start Gnus.
1011
1012 @item gnus-before-startup-hook
1013 @vindex gnus-before-startup-hook
1014 A hook run after starting up Gnus successfully.
1015
1016 @item gnus-startup-hook
1017 @vindex gnus-startup-hook
1018 A hook run as the very last thing after starting up Gnus
1019
1020 @item gnus-started-hook
1021 @vindex gnus-started-hook
1022 A hook that is run as the very last thing after starting up Gnus
1023 successfully.
1024
1025 @item gnus-started-hook
1026 @vindex gnus-started-hook
1027 A hook that is run after reading the @file{.newsrc} file(s), but before
1028 generating the group buffer.
1029
1030 @item gnus-check-bogus-newsgroups
1031 @vindex gnus-check-bogus-newsgroups
1032 If non-@code{nil}, Gnus will check for and delete all bogus groups at
1033 startup.  A @dfn{bogus group} is a group that you have in your
1034 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
1035 bogus groups can take quite a while, so to save time and resources it's
1036 best to leave this option off, and do the checking for bogus groups once
1037 in a while from the group buffer instead (@pxref{Group Maintenance}).
1038
1039 @item gnus-inhibit-startup-message
1040 @vindex gnus-inhibit-startup-message
1041 If non-@code{nil}, the startup message won't be displayed.  That way,
1042 your boss might not notice as easily that you are reading news instead
1043 of doing your job.  Note that this variable is used before
1044 @file{.gnus.el} is loaded, so it should be set in @code{.emacs} instead.
1045
1046 @item gnus-no-groups-message
1047 @vindex gnus-no-groups-message
1048 Message displayed by Gnus when no groups are available.
1049
1050 @item gnus-play-startup-jingle
1051 @vindex gnus-play-startup-jingle
1052 If non-@code{nil}, play the Gnus jingle at startup.
1053
1054 @item gnus-startup-jingle
1055 @vindex gnus-startup-jingle
1056 Jingle to be played if the above variable is non-@code{nil}.  The
1057 default is @samp{Tuxedomoon.Jingle4.au}.
1058
1059 @end table
1060
1061
1062 @node The Group Buffer
1063 @chapter The Group Buffer
1064 @cindex group buffer
1065
1066 The @dfn{group buffer} lists all (or parts) of the available groups.  It
1067 is the first buffer shown when Gnus starts, and will never be killed as
1068 long as Gnus is active.
1069
1070 @iftex
1071 @iflatex
1072 \gnusfigure{The Group Buffer}{320}{
1073 \put(75,50){\epsfig{figure=tmp/group.ps,height=9cm}}
1074 \put(120,37){\makebox(0,0)[t]{Buffer name}}
1075 \put(120,38){\vector(1,2){10}}
1076 \put(40,60){\makebox(0,0)[r]{Mode line}}
1077 \put(40,58){\vector(1,0){30}}
1078 \put(200,28){\makebox(0,0)[t]{Native select method}}
1079 \put(200,26){\vector(-1,2){15}}
1080 }
1081 @end iflatex
1082 @end iftex
1083
1084 @menu
1085 * Group Buffer Format::    Information listed and how you can change it.
1086 * Group Maneuvering::      Commands for moving in the group buffer.
1087 * Selecting a Group::      Actually reading news.
1088 * Group Data::             Changing the info for a group.
1089 * Subscription Commands::  Unsubscribing, killing, subscribing.
1090 * Group Levels::           Levels? What are those, then?
1091 * Group Score::            A mechanism for finding out what groups you like.
1092 * Marking Groups::         You can mark groups for later processing.
1093 * Foreign Groups::         Creating and editing groups.
1094 * Group Parameters::       Each group may have different parameters set.
1095 * Listing Groups::         Gnus can list various subsets of the groups.
1096 * Sorting Groups::         Re-arrange the group order.
1097 * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
1098 * Browse Foreign Server::  You can browse a server.  See what it has to offer.
1099 * Exiting Gnus::           Stop reading news and get some work done.
1100 * Group Topics::           A folding group mode divided into topics.
1101 * Misc Group Stuff::       Other stuff that you can to do.
1102 @end menu
1103
1104
1105 @node Group Buffer Format
1106 @section Group Buffer Format
1107
1108 @menu
1109 * Group Line Specification::       Deciding how the group buffer is to look.
1110 * Group Modeline Specification::   The group buffer modeline.
1111 * Group Highlighting::             Having nice colors in the group buffer.
1112 @end menu
1113
1114
1115 @node Group Line Specification
1116 @subsection Group Line Specification
1117 @cindex group buffer format
1118
1119 The default format of the group buffer is nice and dull, but you can
1120 make it as exciting and ugly as you feel like.
1121
1122 Here's a couple of example group lines:
1123
1124 @example
1125      25: news.announce.newusers
1126  *    0: alt.fan.andrea-dworkin
1127 @end example
1128
1129 Quite simple, huh?
1130
1131 You can see that there are 25 unread articles in
1132 @samp{news.announce.newusers}.  There are no unread articles, but some
1133 ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
1134 asterisk at the beginning of the line?).
1135
1136 @vindex gnus-group-line-format
1137 You can change that format to whatever you want by fiddling with the
1138 @code{gnus-group-line-format} variable.  This variable works along the
1139 lines of a @code{format} specification, which is pretty much the same as
1140 a @code{printf} specifications, for those of you who use (feh!) C.
1141 @xref{Formatting Variables}.
1142
1143 @samp{%M%S%5y: %(%g%)\n} is the value that produced those lines above.
1144
1145 There should always be a colon on the line; the cursor always moves to
1146 the colon after performing an operation.  Nothing else is required---not
1147 even the group name.  All displayed text is just window dressing, and is
1148 never examined by Gnus.  Gnus stores all real information it needs using
1149 text properties.
1150
1151 (Note that if you make a really strange, wonderful, spreadsheet-like
1152 layout, everybody will believe you are hard at work with the accounting
1153 instead of wasting time reading news.)
1154
1155 Here's a list of all available format characters:
1156
1157 @table @samp
1158
1159 @item M
1160 An asterisk if the group only has marked articles.
1161
1162 @item S
1163 Whether the group is subscribed.
1164
1165 @item L
1166 Level of subscribedness.
1167
1168 @item N
1169 Number of unread articles.
1170
1171 @item I
1172 Number of dormant articles.
1173
1174 @item T
1175 Number of ticked articles.
1176
1177 @item R
1178 Number of read articles.
1179
1180 @item t
1181 Estimated total number of articles.  (This is really @var{max-number}
1182 minus @var{min-number} plus 1.)
1183
1184 @item y
1185 Number of unread, unticked, non-dormant articles.
1186
1187 @item i
1188 Number of ticked and dormant articles.
1189
1190 @item g
1191 Full group name.
1192
1193 @item G
1194 Group name.
1195
1196 @item D
1197 Newsgroup description.
1198
1199 @item o
1200 @samp{m} if moderated.
1201
1202 @item O
1203 @samp{(m)} if moderated.
1204
1205 @item s
1206 Select method.
1207
1208 @item n
1209 Select from where.
1210
1211 @item z
1212 A string that looks like @samp{<%s:%n>} if a foreign select method is
1213 used.
1214
1215 @item P
1216 Indentation based on the level of the topic (@pxref{Group Topics}).
1217
1218 @item c
1219 @vindex gnus-group-uncollapsed-levels
1220 Short (collapsed) group name.  The @code{gnus-group-uncollapsed-levels}
1221 variable says how many levels to leave at the end of the group name.
1222 The default is 1---this will mean that group names like
1223 @samp{gnu.emacs.gnus} will be shortened to @samp{g.emacs.gnus}.
1224
1225 @item m
1226 @vindex gnus-new-mail-mark
1227 @cindex %
1228 @samp{%} (@code{gnus-new-mail-mark}) if there has arrived new mail to
1229 the group lately.
1230
1231 @item d
1232 A string that says when you last read the group (@pxref{Group
1233 Timestamp}).
1234
1235 @item u
1236 User defined specifier.  The next character in the format string should
1237 be a letter.  Gnus will call the function
1238 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1239 following @samp{%u}.  The function will be passed a single dummy
1240 parameter as argument.  The function should return a string, which will
1241 be inserted into the buffer just like information from any other
1242 specifier.
1243 @end table
1244
1245 @cindex *
1246 All the ``number-of'' specs will be filled with an asterisk (@samp{*})
1247 if no info is available---for instance, if it is a non-activated foreign
1248 group, or a bogus native group.
1249
1250
1251 @node Group Modeline Specification
1252 @subsection Group Modeline Specification
1253 @cindex group modeline
1254
1255 @vindex gnus-group-mode-line-format
1256 The mode line can be changed by setting
1257 @code{gnus-group-mode-line-format} (@pxref{Mode Line Formatting}).  It
1258 doesn't understand that many format specifiers:
1259
1260 @table @samp
1261 @item S
1262 The native news server.
1263 @item M
1264 The native select method.
1265 @end table
1266
1267
1268 @node Group Highlighting
1269 @subsection Group Highlighting
1270 @cindex highlighting
1271 @cindex group highlighting
1272
1273 @vindex gnus-group-highlight
1274 Highlighting in the group buffer is controlled by the
1275 @code{gnus-group-highlight} variable.  This is an alist with elements
1276 that look like @var{(form . face)}.  If @var{form} evaluates to
1277 something non-@code{nil}, the @var{face} will be used on the line.
1278
1279 Here's an example value for this variable that might look nice if the
1280 background is dark:
1281
1282 @lisp
1283 (face-spec-set 'my-group-face-1
1284                '((t (:foreground "Red" :bold t))))
1285 (face-spec-set 'my-group-face-2
1286                '((t (:foreground "SeaGreen" :bold t))))
1287 (face-spec-set 'my-group-face-3
1288                '((t (:foreground "SpringGreen" :bold t))))
1289 (face-spec-set 'my-group-face-4
1290                '((t (:foreground "SteelBlue" :bold t))))
1291 (face-spec-set 'my-group-face-5
1292                '((t (:foreground "SkyBlue" :bold t))))
1293
1294 (setq gnus-group-highlight
1295       '(((> unread 200) . my-group-face-1)
1296         ((and (< level 3) (zerop unread)) . my-group-face-2)
1297         ((< level 3) . my-group-face-3)
1298         ((zerop unread) . my-group-face-4)
1299         (t . my-group-face-5)))
1300 @end lisp
1301
1302 Also @pxref{Faces and Fonts}.
1303
1304 Variables that are dynamically bound when the forms are evaluated
1305 include:
1306
1307 @table @code
1308 @item group
1309 The group name.
1310 @item unread
1311 The number of unread articles in the group.
1312 @item method
1313 The select method.
1314 @item mailp
1315 Whether the group is a mail group.
1316 @item level
1317 The level of the group.
1318 @item score
1319 The score of the group.
1320 @item ticked
1321 The number of ticked articles in the group.
1322 @item total
1323 The total number of articles in the group.  Or rather, MAX-NUMBER minus
1324 MIN-NUMBER plus one.
1325 @item topic
1326 When using the topic minor mode, this variable is bound to the current
1327 topic being inserted.
1328 @end table
1329
1330 When the forms are @code{eval}ed, point is at the beginning of the line
1331 of the group in question, so you can use many of the normal Gnus
1332 functions for snarfing info on the group.
1333
1334 @vindex gnus-group-update-hook
1335 @findex gnus-group-highlight-line
1336 @code{gnus-group-update-hook} is called when a group line is changed.
1337 It will not be called when @code{gnus-visual} is @code{nil}.  This hook
1338 calls @code{gnus-group-highlight-line} by default.
1339
1340
1341 @node Group Maneuvering
1342 @section Group Maneuvering
1343 @cindex group movement
1344
1345 All movement commands understand the numeric prefix and will behave as
1346 expected, hopefully.
1347
1348 @table @kbd
1349
1350 @item n
1351 @kindex n (Group)
1352 @findex gnus-group-next-unread-group
1353 Go to the next group that has unread articles
1354 (@code{gnus-group-next-unread-group}).
1355
1356 @item p
1357 @itemx DEL
1358 @kindex DEL (Group)
1359 @kindex p (Group)
1360 @findex gnus-group-prev-unread-group
1361 Go to the previous group that has unread articles
1362 (@code{gnus-group-prev-unread-group}).
1363
1364 @item N
1365 @kindex N (Group)
1366 @findex gnus-group-next-group
1367 Go to the next group (@code{gnus-group-next-group}).
1368
1369 @item P
1370 @kindex P (Group)
1371 @findex gnus-group-prev-group
1372 Go to the previous group (@code{gnus-group-prev-group}).
1373
1374 @item M-n
1375 @kindex M-n (Group)
1376 @findex gnus-group-next-unread-group-same-level
1377 Go to the next unread group on the same (or lower) level
1378 (@code{gnus-group-next-unread-group-same-level}).
1379
1380 @item M-p
1381 @kindex M-p (Group)
1382 @findex gnus-group-prev-unread-group-same-level
1383 Go to the previous unread group on the same (or lower) level
1384 (@code{gnus-group-prev-unread-group-same-level}).
1385 @end table
1386
1387 Three commands for jumping to groups:
1388
1389 @table @kbd
1390
1391 @item j
1392 @kindex j (Group)
1393 @findex gnus-group-jump-to-group
1394 Jump to a group (and make it visible if it isn't already)
1395 (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
1396 like living groups.
1397
1398 @item ,
1399 @kindex , (Group)
1400 @findex gnus-group-best-unread-group
1401 Jump to the unread group with the lowest level
1402 (@code{gnus-group-best-unread-group}).
1403
1404 @item .
1405 @kindex . (Group)
1406 @findex gnus-group-first-unread-group
1407 Jump to the first group with unread articles
1408 (@code{gnus-group-first-unread-group}).
1409 @end table
1410
1411 @vindex gnus-group-goto-unread
1412 If @code{gnus-group-goto-unread} is @code{nil}, all the movement
1413 commands will move to the next group, not the next unread group.  Even
1414 the commands that say they move to the next unread group.  The default
1415 is @code{t}.
1416
1417
1418 @node Selecting a Group
1419 @section Selecting a Group
1420 @cindex group selection
1421
1422 @table @kbd
1423
1424 @item SPACE
1425 @kindex SPACE (Group)
1426 @findex gnus-group-read-group
1427 Select the current group, switch to the summary buffer and display the
1428 first unread article (@code{gnus-group-read-group}).  If there are no
1429 unread articles in the group, or if you give a non-numerical prefix to
1430 this command, Gnus will offer to fetch all the old articles in this
1431 group from the server.  If you give a numerical prefix @var{N}, @var{N}
1432 determines the number of articles Gnus will fetch.  If @var{N} is
1433 positive, Gnus fetches the @var{N} newest articles, if @var{N} is
1434 negative, Gnus fetches the @var{abs(N)} oldest articles.
1435
1436 @item RET
1437 @kindex RET (Group)
1438 @findex gnus-group-select-group
1439 Select the current group and switch to the summary buffer
1440 (@code{gnus-group-select-group}).  Takes the same arguments as
1441 @code{gnus-group-read-group}---the only difference is that this command
1442 does not display the first unread article automatically upon group
1443 entry.
1444
1445 @item M-RET
1446 @kindex M-RET (Group)
1447 @findex gnus-group-quick-select-group
1448 This does the same as the command above, but tries to do it with the
1449 minimum amount of fuzz (@code{gnus-group-quick-select-group}).  No
1450 scoring/killing will be performed, there will be no highlights and no
1451 expunging.  This might be useful if you're in a real hurry and have to
1452 enter some humongous group.  If you give a 0 prefix to this command
1453 (i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer,
1454 which is useful if you want to toggle threading before generating the
1455 summary buffer (@pxref{Summary Generation Commands}).
1456
1457 @item M-SPACE
1458 @kindex M-SPACE (Group)
1459 @findex gnus-group-visible-select-group
1460 This is yet one more command that does the same as the @kbd{RET}
1461 command, but this one does it without expunging and hiding dormants
1462 (@code{gnus-group-visible-select-group}).
1463
1464 @item M-C-RET
1465 @kindex M-C-RET (Group)
1466 @findex gnus-group-select-group-ephemerally
1467 Finally, this command selects the current group ephemerally without
1468 doing any processing of its contents
1469 (@code{gnus-group-select-group-ephemerally}).  Even threading has been
1470 turned off.  Everything you do in the group after selecting it in this
1471 manner will have no permanent effects.
1472
1473 @end table
1474
1475 @vindex gnus-large-newsgroup
1476 The @code{gnus-large-newsgroup} variable says what Gnus should consider
1477 to be a big group.  This is 200 by default.  If the group has more
1478 (unread and/or ticked) articles than this, Gnus will query the user
1479 before entering the group.  The user can then specify how many articles
1480 should be fetched from the server.  If the user specifies a negative
1481 number (@code{-n}), the @code{n} oldest articles will be fetched.  If it
1482 is positive, the @code{n} articles that have arrived most recently will
1483 be fetched.
1484
1485 @vindex gnus-select-group-hook
1486 @vindex gnus-auto-select-first
1487 @code{gnus-auto-select-first} control whether any articles are selected
1488 automatically when entering a group with the @kbd{SPACE} command.
1489
1490 @table @code
1491
1492 @item nil
1493 Don't select any articles when entering the group.  Just display the
1494 full summary buffer.
1495
1496 @item t
1497 Select the first unread article when entering the group.
1498
1499 @item best
1500 Select the highest scored article in the group when entering the
1501 group.
1502
1503 @end table
1504
1505 This variable can also be a function.  In that case, that function will
1506 be called to place point on a subject line, and/or select some article.
1507 Useful functions include:
1508
1509 @table @code
1510 @item gnus-summary-first-unread-subject
1511 Place point on the subject line of the first unread article, but
1512 don't select the article.
1513
1514 @item gnus-summary-first-unread-article
1515 Select the first unread article.
1516
1517 @item gnus-summary-best-unread-article
1518 Select the highest-scored unread article.
1519 @end table
1520
1521
1522 If you want to prevent automatic selection in some group (say, in a
1523 binary group with Huge articles) you can set this variable to @code{nil}
1524 in @code{gnus-select-group-hook}, which is called when a group is
1525 selected.
1526
1527
1528 @node Subscription Commands
1529 @section Subscription Commands
1530 @cindex subscription
1531
1532 @table @kbd
1533
1534 @item S t
1535 @itemx u
1536 @kindex S t (Group)
1537 @kindex u (Group)
1538 @findex gnus-group-unsubscribe-current-group
1539 @c @icon{gnus-group-unsubscribe}
1540 Toggle subscription to the current group
1541 (@code{gnus-group-unsubscribe-current-group}).
1542
1543 @item S s
1544 @itemx U
1545 @kindex S s (Group)
1546 @kindex U (Group)
1547 @findex gnus-group-unsubscribe-group
1548 Prompt for a group to subscribe, and then subscribe it.  If it was
1549 subscribed already, unsubscribe it instead
1550 (@code{gnus-group-unsubscribe-group}).
1551
1552 @item S k
1553 @itemx C-k
1554 @kindex S k (Group)
1555 @kindex C-k (Group)
1556 @findex gnus-group-kill-group
1557 @c @icon{gnus-group-kill-group}
1558 Kill the current group (@code{gnus-group-kill-group}).
1559
1560 @item S y
1561 @itemx C-y
1562 @kindex S y (Group)
1563 @kindex C-y (Group)
1564 @findex gnus-group-yank-group
1565 Yank the last killed group (@code{gnus-group-yank-group}).
1566
1567 @item C-x C-t
1568 @kindex C-x C-t (Group)
1569 @findex gnus-group-transpose-groups
1570 Transpose two groups (@code{gnus-group-transpose-groups}).  This isn't
1571 really a subscription command, but you can use it instead of a
1572 kill-and-yank sequence sometimes.
1573
1574 @item S w
1575 @itemx C-w
1576 @kindex S w (Group)
1577 @kindex C-w (Group)
1578 @findex gnus-group-kill-region
1579 Kill all groups in the region (@code{gnus-group-kill-region}).
1580
1581 @item S z
1582 @kindex S z (Group)
1583 @findex gnus-group-kill-all-zombies
1584 Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
1585
1586 @item S C-k
1587 @kindex S C-k (Group)
1588 @findex gnus-group-kill-level
1589 Kill all groups on a certain level (@code{gnus-group-kill-level}).
1590 These groups can't be yanked back after killing, so this command should
1591 be used with some caution.  The only time where this command comes in
1592 really handy is when you have a @file{.newsrc} with lots of unsubscribed
1593 groups that you want to get rid off.  @kbd{S C-k} on level 7 will
1594 kill off all unsubscribed groups that do not have message numbers in the
1595 @file{.newsrc} file.
1596
1597 @end table
1598
1599 Also @pxref{Group Levels}.
1600
1601
1602 @node Group Data
1603 @section Group Data
1604
1605 @table @kbd
1606
1607 @item c
1608 @kindex c (Group)
1609 @findex gnus-group-catchup-current
1610 @vindex gnus-group-catchup-group-hook
1611 @c @icon{gnus-group-catchup-current}
1612 Mark all unticked articles in this group as read
1613 (@code{gnus-group-catchup-current}).
1614 @code{gnus-group-catchup-group-hook} is called when catching up a group from
1615 the group buffer.
1616
1617 @item C
1618 @kindex C (Group)
1619 @findex gnus-group-catchup-current-all
1620 Mark all articles in this group, even the ticked ones, as read
1621 (@code{gnus-group-catchup-current-all}).
1622
1623 @item M-c
1624 @kindex M-c (Group)
1625 @findex gnus-group-clear-data
1626 Clear the data from the current group---nix out marks and the list of
1627 read articles (@code{gnus-group-clear-data}).
1628
1629 @item M-x gnus-group-clear-data-on-native-groups
1630 @kindex M-x gnus-group-clear-data-on-native-groups
1631 @findex gnus-group-clear-data-on-native-groups
1632 If you have switched from one @sc{nntp} server to another, all your marks
1633 and read ranges have become worthless.  You can use this command to
1634 clear out all data that you have on your native groups.  Use with
1635 caution.
1636
1637 @end table
1638
1639
1640 @node Group Levels
1641 @section Group Levels
1642 @cindex group level
1643 @cindex level
1644
1645 All groups have a level of @dfn{subscribedness}.  For instance, if a
1646 group is on level 2, it is more subscribed than a group on level 5.  You
1647 can ask Gnus to just list groups on a given level or lower
1648 (@pxref{Listing Groups}), or to just check for new articles in groups on
1649 a given level or lower (@pxref{Scanning New Messages}).
1650
1651 Remember:  The higher the level of the group, the less important it is.
1652
1653 @table @kbd
1654
1655 @item S l
1656 @kindex S l (Group)
1657 @findex gnus-group-set-current-level
1658 Set the level of the current group.  If a numeric prefix is given, the
1659 next @var{n} groups will have their levels set.  The user will be
1660 prompted for a level.
1661 @end table
1662
1663 @vindex gnus-level-killed
1664 @vindex gnus-level-zombie
1665 @vindex gnus-level-unsubscribed
1666 @vindex gnus-level-subscribed
1667 Gnus considers groups from levels 1 to
1668 @code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
1669 @code{gnus-level-subscribed} (exclusive) and
1670 @code{gnus-level-unsubscribed} (inclusive) (default 7) to be
1671 unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
1672 (default 8) and @code{gnus-level-killed} to be killed (completely dead)
1673 (default 9).  Gnus treats subscribed and unsubscribed groups exactly the
1674 same, but zombie and killed groups have no information on what articles
1675 you have read, etc, stored.  This distinction between dead and living
1676 groups isn't done because it is nice or clever, it is done purely for
1677 reasons of efficiency.
1678
1679 It is recommended that you keep all your mail groups (if any) on quite
1680 low levels (e.g. 1 or 2).
1681
1682 If you want to play with the level variables, you should show some care.
1683 Set them once, and don't touch them ever again.  Better yet, don't touch
1684 them at all unless you know exactly what you're doing.
1685
1686 @vindex gnus-level-default-unsubscribed
1687 @vindex gnus-level-default-subscribed
1688 Two closely related variables are @code{gnus-level-default-subscribed}
1689 (default 3) and @code{gnus-level-default-unsubscribed} (default 6),
1690 which are the levels that new groups will be put on if they are
1691 (un)subscribed.  These two variables should, of course, be inside the
1692 relevant valid ranges.
1693
1694 @vindex gnus-keep-same-level
1695 If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
1696 will only move to groups of the same level (or lower).  In
1697 particular, going from the last article in one group to the next group
1698 will go to the next group of the same level (or lower).  This might be
1699 handy if you want to read the most important groups before you read the
1700 rest.
1701
1702 @vindex gnus-group-default-list-level
1703 All groups with a level less than or equal to
1704 @code{gnus-group-default-list-level} will be listed in the group buffer
1705 by default.
1706
1707 @vindex gnus-group-list-inactive-groups
1708 If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
1709 groups will be listed along with the unread groups.  This variable is
1710 @code{t} by default.  If it is @code{nil}, inactive groups won't be
1711 listed.
1712
1713 @vindex gnus-group-use-permanent-levels
1714 If @code{gnus-group-use-permanent-levels} is non-@code{nil}, once you
1715 give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
1716 use this level as the ``work'' level.
1717
1718 @vindex gnus-activate-level
1719 Gnus will normally just activate (i. e., query the server about) groups
1720 on level @code{gnus-activate-level} or less.  If you don't want to
1721 activate unsubscribed groups, for instance, you might set this variable
1722 to 5.  The default is 6.
1723
1724
1725 @node Group Score
1726 @section Group Score
1727 @cindex group score
1728 @cindex group rank
1729 @cindex rank
1730
1731 You would normally keep important groups on high levels, but that scheme
1732 is somewhat restrictive.  Don't you wish you could have Gnus sort the
1733 group buffer according to how often you read groups, perhaps?  Within
1734 reason?
1735
1736 This is what @dfn{group score} is for.  You can assign a score to each
1737 group.  You can then sort the group buffer based on this score.
1738 Alternatively, you can sort on score and then level.  (Taken together,
1739 the level and the score is called the @dfn{rank} of the group.  A group
1740 that is on level 4 and has a score of 1 has a higher rank than a group
1741 on level 5 that has a score of 300.  (The level is the most significant
1742 part and the score is the least significant part.))
1743
1744 @findex gnus-summary-bubble-group
1745 If you want groups you read often to get higher scores than groups you
1746 read seldom you can add the @code{gnus-summary-bubble-group} function to
1747 the @code{gnus-summary-exit-hook} hook.  This will result (after
1748 sorting) in a bubbling sort of action.  If you want to see that in
1749 action after each summary exit, you can add
1750 @code{gnus-group-sort-groups-by-rank} or
1751 @code{gnus-group-sort-groups-by-score} to the same hook, but that will
1752 slow things down somewhat.
1753
1754
1755 @node Marking Groups
1756 @section Marking Groups
1757 @cindex marking groups
1758
1759 If you want to perform some command on several groups, and they appear
1760 subsequently in the group buffer, you would normally just give a
1761 numerical prefix to the command.  Most group commands will then do your
1762 bidding on those groups.
1763
1764 However, if the groups are not in sequential order, you can still
1765 perform a command on several groups.  You simply mark the groups first
1766 with the process mark and then execute the command.
1767
1768 @table @kbd
1769
1770 @item #
1771 @kindex # (Group)
1772 @itemx M m
1773 @kindex M m (Group)
1774 @findex gnus-group-mark-group
1775 Set the mark on the current group (@code{gnus-group-mark-group}).
1776
1777 @item M-#
1778 @kindex M-# (Group)
1779 @itemx M u
1780 @kindex M u (Group)
1781 @findex gnus-group-unmark-group
1782 Remove the mark from the current group
1783 (@code{gnus-group-unmark-group}).
1784
1785 @item M U
1786 @kindex M U (Group)
1787 @findex gnus-group-unmark-all-groups
1788 Remove the mark from all groups (@code{gnus-group-unmark-all-groups}).
1789
1790 @item M w
1791 @kindex M w (Group)
1792 @findex gnus-group-mark-region
1793 Mark all groups between point and mark (@code{gnus-group-mark-region}).
1794
1795 @item M b
1796 @kindex M b (Group)
1797 @findex gnus-group-mark-buffer
1798 Mark all groups in the buffer (@code{gnus-group-mark-buffer}).
1799
1800 @item M r
1801 @kindex M r (Group)
1802 @findex gnus-group-mark-regexp
1803 Mark all groups that match some regular expression
1804 (@code{gnus-group-mark-regexp}).
1805 @end table
1806
1807 Also @pxref{Process/Prefix}.
1808
1809 @findex gnus-group-universal-argument
1810 If you want to execute some command on all groups that have been marked
1811 with the process mark, you can use the @kbd{M-&}
1812 (@code{gnus-group-universal-argument}) command.  It will prompt you for
1813 the command to be executed.
1814
1815
1816 @node Foreign Groups
1817 @section Foreign Groups
1818 @cindex foreign groups
1819
1820 Below are some group mode commands for making and editing general foreign
1821 groups, as well as commands to ease the creation of a few
1822 special-purpose groups.  All these commands insert the newly created
1823 groups under point---@code{gnus-subscribe-newsgroup-method} is not
1824 consulted.
1825
1826 @table @kbd
1827
1828 @item G m
1829 @kindex G m (Group)
1830 @findex gnus-group-make-group
1831 @cindex making groups
1832 Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you
1833 for a name, a method and possibly an @dfn{address}.  For an easier way
1834 to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}.
1835
1836 @item G r
1837 @kindex G r (Group)
1838 @findex gnus-group-rename-group
1839 @cindex renaming groups
1840 Rename the current group to something else
1841 (@code{gnus-group-rename-group}).  This is valid only on some
1842 groups---mail groups mostly.  This command might very well be quite slow
1843 on some backends.
1844
1845 @item G c
1846 @kindex G c (Group)
1847 @cindex customizing
1848 @findex gnus-group-customize
1849 Customize the group parameters (@code{gnus-group-customize}).
1850
1851 @item G e
1852 @kindex G e (Group)
1853 @findex gnus-group-edit-group-method
1854 @cindex renaming groups
1855 Enter a buffer where you can edit the select method of the current
1856 group (@code{gnus-group-edit-group-method}).
1857
1858 @item G p
1859 @kindex G p (Group)
1860 @findex gnus-group-edit-group-parameters
1861 Enter a buffer where you can edit the group parameters
1862 (@code{gnus-group-edit-group-parameters}).
1863
1864 @item G E
1865 @kindex G E (Group)
1866 @findex gnus-group-edit-group
1867 Enter a buffer where you can edit the group info
1868 (@code{gnus-group-edit-group}).
1869
1870 @item G d
1871 @kindex G d (Group)
1872 @findex gnus-group-make-directory-group
1873 @cindex nndir
1874 Make a directory group (@pxref{Directory Groups}).  You will be prompted
1875 for a directory name (@code{gnus-group-make-directory-group}).
1876
1877 @item G h
1878 @kindex G h (Group)
1879 @cindex help group
1880 @findex gnus-group-make-help-group
1881 Make the Gnus help group (@code{gnus-group-make-help-group}).
1882
1883 @item G a
1884 @kindex G a (Group)
1885 @cindex (ding) archive
1886 @cindex archive group
1887 @findex gnus-group-make-archive-group
1888 @vindex gnus-group-archive-directory
1889 @vindex gnus-group-recent-archive-directory
1890 Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
1891 default a group pointing to the most recent articles will be created
1892 (@code{gnus-group-recent-archive-directory}), but given a prefix, a full
1893 group will be created from @code{gnus-group-archive-directory}.
1894
1895 @item G k
1896 @kindex G k (Group)
1897 @findex gnus-group-make-kiboze-group
1898 @cindex nnkiboze
1899 Make a kiboze group.  You will be prompted for a name, for a regexp to
1900 match groups to be ``included'' in the kiboze group, and a series of
1901 strings to match on headers (@code{gnus-group-make-kiboze-group}).
1902 @xref{Kibozed Groups}.
1903
1904 @item G D
1905 @kindex G D (Group)
1906 @findex gnus-group-enter-directory
1907 @cindex nneething
1908 Read an arbitrary directory as if it were a newsgroup with the
1909 @code{nneething} backend (@code{gnus-group-enter-directory}).
1910 @xref{Anything Groups}.
1911
1912 @item G f
1913 @kindex G f (Group)
1914 @findex gnus-group-make-doc-group
1915 @cindex ClariNet Briefs
1916 @cindex nndoc
1917 Make a group based on some file or other
1918 (@code{gnus-group-make-doc-group}).  If you give a prefix to this
1919 command, you will be prompted for a file name and a file type.
1920 Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
1921 @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs},
1922 @code{rfc934}, @code{rfc822-forward}, and @code{forward}.  If you run
1923 this command without a prefix, Gnus will guess at the file type.
1924 @xref{Document Groups}.
1925
1926 @item G u
1927 @kindex G u (Group)
1928 @vindex gnus-useful-groups
1929 @findex gnus-group-make-useful-group
1930 Create one of the groups mentioned in @code{gnus-useful-groups}
1931 (@code{gnus-group-make-useful-group}).
1932
1933 @item G w
1934 @kindex G w (Group)
1935 @findex gnus-group-make-web-group
1936 @cindex DejaNews
1937 @cindex Alta Vista
1938 @cindex InReference
1939 @cindex nnweb
1940 Make an ephemeral group based on a web search
1941 (@code{gnus-group-make-web-group}).  If you give a prefix to this
1942 command, make a solid group instead.  You will be prompted for the
1943 search engine type and the search string.  Valid search engine types
1944 include @code{dejanews}, @code{altavista} and @code{reference}.
1945 @xref{Web Searches}.
1946
1947 If you use the @code{dejanews} search engine, you can limit the search
1948 to a particular group by using a match string like
1949 @samp{~g alt.sysadmin.recovery shaving}.
1950
1951 @item G DEL
1952 @kindex G DEL (Group)
1953 @findex gnus-group-delete-group
1954 This function will delete the current group
1955 (@code{gnus-group-delete-group}).  If given a prefix, this function will
1956 actually delete all the articles in the group, and forcibly remove the
1957 group itself from the face of the Earth.  Use a prefix only if you are
1958 absolutely sure of what you are doing.  This command can't be used on
1959 read-only groups (like @code{nntp} group), though.
1960
1961 @item G V
1962 @kindex G V (Group)
1963 @findex gnus-group-make-empty-virtual
1964 Make a new, fresh, empty @code{nnvirtual} group
1965 (@code{gnus-group-make-empty-virtual}).  @xref{Virtual Groups}.
1966
1967 @item G v
1968 @kindex G v (Group)
1969 @findex gnus-group-add-to-virtual
1970 Add the current group to an @code{nnvirtual} group
1971 (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
1972 @end table
1973
1974 @xref{Select Methods} for more information on the various select
1975 methods.
1976
1977 @vindex gnus-activate-foreign-newsgroups
1978 If @code{gnus-activate-foreign-newsgroups} is a positive number,
1979 Gnus will check all foreign groups with this level or lower at startup.
1980 This might take quite a while, especially if you subscribe to lots of
1981 groups from different @sc{nntp} servers.  Also @pxref{Group Levels};
1982 @code{gnus-activate-level} also affects activation of foreign
1983 newsgroups. 
1984
1985
1986 @node Group Parameters
1987 @section Group Parameters
1988 @cindex group parameters
1989
1990 The group parameters store information local to a particular group.
1991 Here's an example group parameter list:
1992
1993 @example
1994 ((to-address . "ding@@gnus.org")
1995  (auto-expire . t))
1996 @end example
1997
1998 We see that each element consists of a "dotted pair"---the thing before
1999 the dot is the key, while the thing after the dot is the value.  All the
2000 parameters have this form @emph{except} local variable specs, which are
2001 not dotted pairs, but proper lists.
2002
2003 The following group parameters can be used:
2004
2005 @table @code
2006 @item to-address
2007 @cindex to-address
2008 Address used by when doing followups and new posts.
2009
2010 @example
2011 (to-address .  "some@@where.com")
2012 @end example
2013
2014 This is primarily useful in mail groups that represent closed mailing
2015 lists---mailing lists where it's expected that everybody that writes to
2016 the mailing list is subscribed to it.  Since using this parameter
2017 ensures that the mail only goes to the mailing list itself, it means
2018 that members won't receive two copies of your followups.
2019
2020 Using @code{to-address} will actually work whether the group is foreign
2021 or not.  Let's say there's a group on the server that is called
2022 @samp{fa.4ad-l}.  This is a real newsgroup, but the server has gotten
2023 the articles from a mail-to-news gateway.  Posting directly to this
2024 group is therefore impossible---you have to send mail to the mailing
2025 list address instead.
2026
2027 @item to-list
2028 @cindex to-list
2029 Address used when doing a @kbd{a} in that group.
2030
2031 @example
2032 (to-list . "some@@where.com")
2033 @end example
2034
2035 It is totally ignored
2036 when doing a followup---except that if it is present in a news group,
2037 you'll get mail group semantics when doing @kbd{f}.
2038
2039 If you do an @kbd{a} command in a mail group and you have neither a
2040 @code{to-list} group parameter nor a @code{to-address} group parameter,
2041 then a @code{to-list} group parameter will be added automatically upon
2042 sending the message if @code{gnus-add-to-list} is set to @code{t}.
2043 @vindex gnus-add-to-list
2044
2045 If you do an @kbd{a} command in a mail group and you don't have a
2046 @code{to-list} group parameter, one will be added automatically upon
2047 sending the message.
2048
2049 @item visible
2050 @cindex visible
2051 If the group parameter list has the element @code{(visible . t)},
2052 that group will always be visible in the Group buffer, regardless
2053 of whether it has any unread articles.
2054
2055 @item broken-reply-to
2056 @cindex broken-reply-to
2057 Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
2058 headers in this group are to be ignored.  This can be useful if you're
2059 reading a mailing list group where the listserv has inserted
2060 @code{Reply-To} headers that point back to the listserv itself.  This is
2061 broken behavior.  So there!
2062
2063 @item to-group
2064 @cindex to-group
2065 Elements like @code{(to-group . "some.group.name")} means that all
2066 posts in that group will be sent to @code{some.group.name}.
2067
2068 @item newsgroup
2069 @cindex newsgroup
2070 If you have @code{(newsgroup . t)} in the group parameter list, Gnus
2071 will treat all responses as if they were responses to news articles.
2072 This can be useful if you have a mail group that's really a mirror of a
2073 news group.
2074
2075 @item gcc-self
2076 @cindex gcc-self
2077 If @code{(gcc-self . t)} is present in the group parameter list, newly
2078 composed messages will be @code{Gcc}'d to the current group. If
2079 @code{(gcc-self . none)} is present, no @code{Gcc:} header will be
2080 generated, if @code{(gcc-self . "string")} is present, this string will
2081 be inserted literally as a @code{gcc} header.  This parameter takes
2082 precedence over any default @code{Gcc} rules as described later
2083 (@pxref{Archived Messages}).
2084
2085 @item auto-expire
2086 @cindex auto-expire
2087 If the group parameter has an element that looks like @code{(auto-expire
2088 . t)}, all articles read will be marked as expirable.  For an
2089 alternative approach, @pxref{Expiring Mail}.
2090
2091 @item total-expire
2092 @cindex total-expire
2093 If the group parameter has an element that looks like
2094 @code{(total-expire . t)}, all read articles will be put through the
2095 expiry process, even if they are not marked as expirable.  Use with
2096 caution.  Unread, ticked and dormant articles are not eligible for
2097 expiry.
2098
2099 @item expiry-wait
2100 @cindex expiry-wait
2101 @vindex nnmail-expiry-wait-function
2102 If the group parameter has an element that looks like @code{(expiry-wait
2103 . 10)}, this value will override any @code{nnmail-expiry-wait} and
2104 @code{nnmail-expiry-wait-function} when expiring expirable messages.
2105 The value can either be a number of days (not necessarily an integer) or
2106 the symbols @code{never} or @code{immediate}.
2107
2108 @item score-file
2109 @cindex score file group parameter
2110 Elements that look like @code{(score-file . "file")} will make
2111 @file{file} into the current score file for the group in question.  All
2112 interactive score entries will be put into this file.
2113
2114 @item adapt-file
2115 @cindex adapt file group parameter
2116 Elements that look like @code{(adapt-file . "file")} will make
2117 @file{file} into the current adaptive file for the group in question.
2118 All adaptive score entries will be put into this file.
2119
2120 @item admin-address
2121 When unsubscribing from a mailing list you should never send the
2122 unsubscription notice to the mailing list itself.  Instead, you'd send
2123 messages to the administrative address.  This parameter allows you to
2124 put the admin address somewhere convenient.
2125
2126 @item display
2127 Elements that look like @code{(display . MODE)} say which articles to
2128 display on entering the group.  Valid values are:
2129
2130 @table @code
2131 @item all
2132 Display all articles, both read and unread.
2133
2134 @item default
2135 Display the default visible articles, which normally includes unread and
2136 ticked articles.
2137 @end table
2138
2139 @item comment
2140 Elements that look like @code{(comment . "This is a comment")}
2141 are arbitrary comments on the group.  They are currently ignored by
2142 Gnus, but provide a place for you to store information on particular
2143 groups.
2144
2145 @item charset
2146 Elements that look like @code{(charset . iso-8859-1)} will make
2147 @code{iso-8859-1} the default charset; that is, the charset that will be 
2148 used for all articles that do not specify a charset.
2149
2150 @item @var{(variable form)}
2151 You can use the group parameters to set variables local to the group you
2152 are entering.  If you want to turn threading off in @samp{news.answers},
2153 you could put @code{(gnus-show-threads nil)} in the group parameters of
2154 that group.  @code{gnus-show-threads} will be made into a local variable
2155 in the summary buffer you enter, and the form @code{nil} will be
2156 @code{eval}ed there.
2157
2158 This can also be used as a group-specific hook function, if you'd like.
2159 If you want to hear a beep when you enter a group, you could put
2160 something like @code{(dummy-variable (ding))} in the parameters of that
2161 group.  @code{dummy-variable} will be set to the result of the
2162 @code{(ding)} form, but who cares?
2163
2164 @end table
2165
2166 Use the @kbd{G p} command to edit group parameters of a group.  You
2167 might also be interested in reading about topic parameters (@pxref{Topic
2168 Parameters}).
2169
2170
2171 @node Listing Groups
2172 @section Listing Groups
2173 @cindex group listing
2174
2175 These commands all list various slices of the groups available.
2176
2177 @table @kbd
2178
2179 @item l
2180 @itemx A s
2181 @kindex A s (Group)
2182 @kindex l (Group)
2183 @findex gnus-group-list-groups
2184 List all groups that have unread articles
2185 (@code{gnus-group-list-groups}).  If the numeric prefix is used, this
2186 command will list only groups of level ARG and lower.  By default, it
2187 only lists groups of level five (i. e.,
2188 @code{gnus-group-default-list-level}) or lower (i.e., just subscribed
2189 groups).
2190
2191 @item L
2192 @itemx A u
2193 @kindex A u (Group)
2194 @kindex L (Group)
2195 @findex gnus-group-list-all-groups
2196 List all groups, whether they have unread articles or not
2197 (@code{gnus-group-list-all-groups}).  If the numeric prefix is used,
2198 this command will list only groups of level ARG and lower.  By default,
2199 it lists groups of level seven or lower (i.e., just subscribed and
2200 unsubscribed groups).
2201
2202 @item A l
2203 @kindex A l (Group)
2204 @findex gnus-group-list-level
2205 List all unread groups on a specific level
2206 (@code{gnus-group-list-level}).  If given a prefix, also list the groups
2207 with no unread articles.
2208
2209 @item A k
2210 @kindex A k (Group)
2211 @findex gnus-group-list-killed
2212 List all killed groups (@code{gnus-group-list-killed}).  If given a
2213 prefix argument, really list all groups that are available, but aren't
2214 currently (un)subscribed.  This could entail reading the active file
2215 from the server.
2216
2217 @item A z
2218 @kindex A z (Group)
2219 @findex gnus-group-list-zombies
2220 List all zombie groups (@code{gnus-group-list-zombies}).
2221
2222 @item A m
2223 @kindex A m (Group)
2224 @findex gnus-group-list-matching
2225 List all unread, subscribed groups with names that match a regexp
2226 (@code{gnus-group-list-matching}).
2227
2228 @item A M
2229 @kindex A M (Group)
2230 @findex gnus-group-list-all-matching
2231 List groups that match a regexp (@code{gnus-group-list-all-matching}).
2232
2233 @item A A
2234 @kindex A A (Group)
2235 @findex gnus-group-list-active
2236 List absolutely all groups in the active file(s) of the
2237 server(s) you are connected to (@code{gnus-group-list-active}).  This
2238 might very well take quite a while.  It might actually be a better idea
2239 to do a @kbd{A M} to list all matching, and just give @samp{.} as the
2240 thing to match on.  Also note that this command may list groups that
2241 don't exist (yet)---these will be listed as if they were killed groups.
2242 Take the output with some grains of salt.
2243
2244 @item A a
2245 @kindex A a (Group)
2246 @findex gnus-group-apropos
2247 List all groups that have names that match a regexp
2248 (@code{gnus-group-apropos}).
2249
2250 @item A d
2251 @kindex A d (Group)
2252 @findex gnus-group-description-apropos
2253 List all groups that have names or descriptions that match a regexp
2254 (@code{gnus-group-description-apropos}).
2255
2256 @end table
2257
2258 @vindex gnus-permanently-visible-groups
2259 @cindex visible group parameter
2260 Groups that match the @code{gnus-permanently-visible-groups} regexp will
2261 always be shown, whether they have unread articles or not.  You can also
2262 add the @code{visible} element to the group parameters in question to
2263 get the same effect.
2264
2265 @vindex gnus-list-groups-with-ticked-articles
2266 Groups that have just ticked articles in it are normally listed in the
2267 group buffer.  If @code{gnus-list-groups-with-ticked-articles} is
2268 @code{nil}, these groups will be treated just like totally empty
2269 groups.  It is @code{t} by default.
2270
2271
2272 @node Sorting Groups
2273 @section Sorting Groups
2274 @cindex sorting groups
2275
2276 @kindex C-c C-s (Group)
2277 @findex gnus-group-sort-groups
2278 @vindex gnus-group-sort-function
2279 The @kbd{C-c C-s} (@code{gnus-group-sort-groups}) command sorts the
2280 group buffer according to the function(s) given by the
2281 @code{gnus-group-sort-function} variable.  Available sorting functions
2282 include:
2283
2284 @table @code
2285
2286 @item gnus-group-sort-by-alphabet
2287 @findex gnus-group-sort-by-alphabet
2288 Sort the group names alphabetically.  This is the default.
2289
2290 @item gnus-group-sort-by-real-name
2291 @findex gnus-group-sort-by-real-name
2292 Sort the group alphabetically on the real (unprefixed) group names.
2293
2294 @item gnus-group-sort-by-level
2295 @findex gnus-group-sort-by-level
2296 Sort by group level.
2297
2298 @item gnus-group-sort-by-score
2299 @findex gnus-group-sort-by-score
2300 Sort by group score.  @xref{Group Score}.
2301
2302 @item gnus-group-sort-by-rank
2303 @findex gnus-group-sort-by-rank
2304 Sort by group score and then the group level.  The level and the score
2305 are, when taken together, the group's @dfn{rank}.  @xref{Group Score}.
2306
2307 @item gnus-group-sort-by-unread
2308 @findex gnus-group-sort-by-unread
2309 Sort by number of unread articles.
2310
2311 @item gnus-group-sort-by-method
2312 @findex gnus-group-sort-by-method
2313 Sort alphabetically on the select method.
2314
2315
2316 @end table
2317
2318 @code{gnus-group-sort-function} can also be a list of sorting
2319 functions.  In that case, the most significant sort key function must be
2320 the last one.
2321
2322
2323 There are also a number of commands for sorting directly according to
2324 some sorting criteria:
2325
2326 @table @kbd
2327 @item G S a
2328 @kindex G S a (Group)
2329 @findex gnus-group-sort-groups-by-alphabet
2330 Sort the group buffer alphabetically by group name
2331 (@code{gnus-group-sort-groups-by-alphabet}).
2332
2333 @item G S u
2334 @kindex G S u (Group)
2335 @findex gnus-group-sort-groups-by-unread
2336 Sort the group buffer by the number of unread articles
2337 (@code{gnus-group-sort-groups-by-unread}).
2338
2339 @item G S l
2340 @kindex G S l (Group)
2341 @findex gnus-group-sort-groups-by-level
2342 Sort the group buffer by group level
2343 (@code{gnus-group-sort-groups-by-level}).
2344
2345 @item G S v
2346 @kindex G S v (Group)
2347 @findex gnus-group-sort-groups-by-score
2348 Sort the group buffer by group score
2349 (@code{gnus-group-sort-groups-by-score}).  @xref{Group Score}.
2350
2351 @item G S r
2352 @kindex G S r (Group)
2353 @findex gnus-group-sort-groups-by-rank
2354 Sort the group buffer by group rank
2355 (@code{gnus-group-sort-groups-by-rank}).  @xref{Group Score}.
2356
2357 @item G S m
2358 @kindex G S m (Group)
2359 @findex gnus-group-sort-groups-by-method
2360 Sort the group buffer alphabetically by backend name
2361 (@code{gnus-group-sort-groups-by-method}).
2362
2363 @end table
2364
2365 All the commands below obeys the process/prefix convention
2366 (@pxref{Process/Prefix}).
2367
2368 When given a symbolic prefix (@pxref{Symbolic Prefixes}), all these
2369 commands will sort in reverse order.  
2370
2371 You can also sort a subset of the groups:
2372
2373 @table @kbd
2374 @item G P a
2375 @kindex G P a (Group)
2376 @findex gnus-group-sort-selected-groups-by-alphabet
2377 Sort the groups alphabetically by group name
2378 (@code{gnus-group-sort-selected-groups-by-alphabet}).
2379
2380 @item G P u
2381 @kindex G P u (Group)
2382 @findex gnus-group-sort-selected-groups-by-unread
2383 Sort the groups by the number of unread articles
2384 (@code{gnus-group-sort-selected-groups-by-unread}).
2385
2386 @item G P l
2387 @kindex G P l (Group)
2388 @findex gnus-group-sort-selected-groups-by-level
2389 Sort the groups by group level
2390 (@code{gnus-group-sort-selected-groups-by-level}).
2391
2392 @item G P v
2393 @kindex G P v (Group)
2394 @findex gnus-group-sort-selected-groups-by-score
2395 Sort the groups by group score
2396 (@code{gnus-group-sort-selected-groups-by-score}).  @xref{Group Score}.
2397
2398 @item G P r
2399 @kindex G P r (Group)
2400 @findex gnus-group-sort-selected-groups-by-rank
2401 Sort the groups by group rank
2402 (@code{gnus-group-sort-selected-groups-by-rank}).  @xref{Group Score}.
2403
2404 @item G P m
2405 @kindex G P m (Group)
2406 @findex gnus-group-sort-selected-groups-by-method
2407 Sort the groups alphabetically by backend name
2408 (@code{gnus-group-sort-selected-groups-by-method}).
2409
2410 @end table
2411
2412
2413
2414 @node Group Maintenance
2415 @section Group Maintenance
2416 @cindex bogus groups
2417
2418 @table @kbd
2419 @item b
2420 @kindex b (Group)
2421 @findex gnus-group-check-bogus-groups
2422 Find bogus groups and delete them
2423 (@code{gnus-group-check-bogus-groups}).
2424
2425 @item F
2426 @kindex F (Group)
2427 @findex gnus-group-find-new-groups
2428 Find new groups and process them (@code{gnus-group-find-new-groups}).
2429 With 1 @kbd{C-u}, use the @code{ask-server} method to query the server
2430 for new groups.  With 2 @kbd{C-u}'s, use most complete method possible
2431 to query the server for new groups, and subscribe the new groups as
2432 zombies.
2433
2434 @item C-c C-x
2435 @kindex C-c C-x (Group)
2436 @findex gnus-group-expire-articles
2437 Run all expirable articles in the current group through the expiry
2438 process (if any) (@code{gnus-group-expire-articles}).
2439
2440 @item C-c M-C-x
2441 @kindex C-c M-C-x (Group)
2442 @findex gnus-group-expire-all-groups
2443 Run all articles in all groups through the expiry process
2444 (@code{gnus-group-expire-all-groups}).
2445
2446 @end table
2447
2448
2449 @node Browse Foreign Server
2450 @section Browse Foreign Server
2451 @cindex foreign servers
2452 @cindex browsing servers
2453
2454 @table @kbd
2455 @item B
2456 @kindex B (Group)
2457 @findex gnus-group-browse-foreign-server
2458 You will be queried for a select method and a server name.  Gnus will
2459 then attempt to contact this server and let you browse the groups there
2460 (@code{gnus-group-browse-foreign-server}).
2461 @end table
2462
2463 @findex gnus-browse-mode
2464 A new buffer with a list of available groups will appear.  This buffer
2465 will use the @code{gnus-browse-mode}.  This buffer looks a bit (well,
2466 a lot) like a normal group buffer.
2467
2468 Here's a list of keystrokes available in the browse mode:
2469
2470 @table @kbd
2471 @item n
2472 @kindex n (Browse)
2473 @findex gnus-group-next-group
2474 Go to the next group (@code{gnus-group-next-group}).
2475
2476 @item p
2477 @kindex p (Browse)
2478 @findex gnus-group-prev-group
2479 Go to the previous group (@code{gnus-group-prev-group}).
2480
2481 @item SPACE
2482 @kindex SPACE (Browse)
2483 @findex gnus-browse-read-group
2484 Enter the current group and display the first article
2485 (@code{gnus-browse-read-group}).
2486
2487 @item RET
2488 @kindex RET (Browse)
2489 @findex gnus-browse-select-group
2490 Enter the current group (@code{gnus-browse-select-group}).
2491
2492 @item u
2493 @kindex u (Browse)
2494 @findex gnus-browse-unsubscribe-current-group
2495 Unsubscribe to the current group, or, as will be the case here,
2496 subscribe to it (@code{gnus-browse-unsubscribe-current-group}).
2497
2498 @item l
2499 @itemx q
2500 @kindex q (Browse)
2501 @kindex l (Browse)
2502 @findex gnus-browse-exit
2503 Exit browse mode (@code{gnus-browse-exit}).
2504
2505 @item ?
2506 @kindex ? (Browse)
2507 @findex gnus-browse-describe-briefly
2508 Describe browse mode briefly (well, there's not much to describe, is
2509 there) (@code{gnus-browse-describe-briefly}).
2510 @end table
2511
2512
2513 @node Exiting Gnus
2514 @section Exiting Gnus
2515 @cindex exiting Gnus
2516
2517 Yes, Gnus is ex(c)iting.
2518
2519 @table @kbd
2520 @item z
2521 @kindex z (Group)
2522 @findex gnus-group-suspend
2523 Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
2524 but it kills all buffers except the Group buffer.  I'm not sure why this
2525 is a gain, but then who am I to judge?
2526
2527 @item q
2528 @kindex q (Group)
2529 @findex gnus-group-exit
2530 @c @icon{gnus-group-exit}
2531 Quit Gnus (@code{gnus-group-exit}).
2532
2533 @item Q
2534 @kindex Q (Group)
2535 @findex gnus-group-quit
2536 Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}).
2537 The dribble file will be saved, though (@pxref{Auto Save}).
2538 @end table
2539
2540 @vindex gnus-exit-gnus-hook
2541 @vindex gnus-suspend-gnus-hook
2542 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
2543 @code{gnus-exit-gnus-hook} is called when you quit Gnus, while
2544 @code{gnus-after-exiting-gnus-hook} is called as the final item when
2545 exiting Gnus.
2546
2547 @findex gnus-unload
2548 @cindex unloading
2549 If you wish to completely unload Gnus and all its adherents, you can use
2550 the @code{gnus-unload} command.  This command is also very handy when
2551 trying to customize meta-variables.
2552
2553 Note:
2554
2555 @quotation
2556 Miss Lisa Cannifax, while sitting in English class, felt her feet go
2557 numbly heavy and herself fall into a hazy trance as the boy sitting
2558 behind her drew repeated lines with his pencil across the back of her
2559 plastic chair.
2560 @end quotation
2561
2562
2563 @node Group Topics
2564 @section Group Topics
2565 @cindex topics
2566
2567 If you read lots and lots of groups, it might be convenient to group
2568 them hierarchically according to topics.  You put your Emacs groups over
2569 here, your sex groups over there, and the rest (what, two groups or so?)
2570 you put in some misc section that you never bother with anyway.  You can
2571 even group the Emacs sex groups as a sub-topic to either the Emacs
2572 groups or the sex groups---or both!  Go wild!
2573
2574 @iftex
2575 @iflatex
2576 \gnusfigure{Group Topics}{400}{
2577 \put(75,50){\epsfig{figure=tmp/group-topic.ps,height=9cm}}
2578 }
2579 @end iflatex
2580 @end iftex
2581
2582 Here's an example:
2583
2584 @example
2585 Gnus
2586   Emacs -- I wuw it!
2587      3: comp.emacs
2588      2: alt.religion.emacs
2589     Naughty Emacs
2590      452: alt.sex.emacs
2591        0: comp.talk.emacs.recovery
2592   Misc
2593      8: comp.binaries.fractals
2594     13: comp.sources.unix
2595 @end example
2596
2597 @findex gnus-topic-mode
2598 @kindex t (Group)
2599 To get this @emph{fab} functionality you simply turn on (ooh!) the
2600 @code{gnus-topic} minor mode---type @kbd{t} in the group buffer.  (This
2601 is a toggling command.)
2602
2603 Go ahead, just try it.  I'll still be here when you get back.  La de
2604 dum...  Nice tune, that...  la la la...  What, you're back? Yes, and now
2605 press @kbd{l}.  There.  All your groups are now listed under
2606 @samp{misc}.  Doesn't that make you feel all warm and fuzzy?  Hot and
2607 bothered?
2608
2609 If you want this permanently enabled, you should add that minor mode to
2610 the hook for the group mode:
2611
2612 @lisp
2613 (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
2614 @end lisp
2615
2616 @menu
2617 * Topic Variables::    How to customize the topics the Lisp Way.
2618 * Topic Commands::     Interactive E-Z commands.
2619 * Topic Sorting::      Sorting each topic individually.
2620 * Topic Topology::     A map of the world.
2621 * Topic Parameters::   Parameters that apply to all groups in a topic.
2622 @end menu
2623
2624
2625 @node Topic Variables
2626 @subsection Topic Variables
2627 @cindex topic variables
2628
2629 Now, if you select a topic, it will fold/unfold that topic, which is
2630 really neat, I think.
2631
2632 @vindex gnus-topic-line-format
2633 The topic lines themselves are created according to the
2634 @code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
2635 Valid elements are:
2636
2637 @table @samp
2638 @item i
2639 Indentation.
2640 @item n
2641 Topic name.
2642 @item v
2643 Visibility.
2644 @item l
2645 Level.
2646 @item g
2647 Number of groups in the topic.
2648 @item a
2649 Number of unread articles in the topic.
2650 @item A
2651 Number of unread articles in the topic and all its subtopics.
2652 @end table
2653
2654 @vindex gnus-topic-indent-level
2655 Each sub-topic (and the groups in the sub-topics) will be indented with
2656 @code{gnus-topic-indent-level} times the topic level number of spaces.
2657 The default is 2.
2658
2659 @vindex gnus-topic-mode-hook
2660 @code{gnus-topic-mode-hook} is called in topic minor mode buffers.
2661
2662 @vindex gnus-topic-display-empty-topics
2663 The @code{gnus-topic-display-empty-topics} says whether to display even
2664 topics that have no unread articles in them.  The default is @code{t}.
2665
2666
2667 @node Topic Commands
2668 @subsection Topic Commands
2669 @cindex topic commands
2670
2671 When the topic minor mode is turned on, a new @kbd{T} submap will be
2672 available.  In addition, a few of the standard keys change their
2673 definitions slightly.
2674
2675 @table @kbd
2676
2677 @item T n
2678 @kindex T n (Topic)
2679 @findex gnus-topic-create-topic
2680 Prompt for a new topic name and create it
2681 (@code{gnus-topic-create-topic}).
2682
2683 @item T m
2684 @kindex T m (Topic)
2685 @findex gnus-topic-move-group
2686 Move the current group to some other topic
2687 (@code{gnus-topic-move-group}).  This command uses the process/prefix
2688 convention (@pxref{Process/Prefix}).
2689
2690 @item T c
2691 @kindex T c (Topic)
2692 @findex gnus-topic-copy-group
2693 Copy the current group to some other topic
2694 (@code{gnus-topic-copy-group}).  This command uses the process/prefix
2695 convention (@pxref{Process/Prefix}).
2696
2697 @item T D
2698 @kindex T D (Topic)
2699 @findex gnus-topic-remove-group
2700 Remove a group from the current topic (@code{gnus-topic-remove-group}).
2701 This command is mainly useful if you have the same group in several
2702 topics and wish to remove it from one of the topics.  You may also
2703 remove a group from all topics, but in that case, Gnus will add it to
2704 the root topic the next time you start Gnus.  In fact, all new groups
2705 (which, naturally, don't belong to any topic) will show up in the root
2706 topic. 
2707
2708 This command uses the process/prefix convention
2709 (@pxref{Process/Prefix}).
2710
2711 @item T M
2712 @kindex T M (Topic)
2713 @findex gnus-topic-move-matching
2714 Move all groups that match some regular expression to a topic
2715 (@code{gnus-topic-move-matching}).
2716
2717 @item T C
2718 @kindex T C (Topic)
2719 @findex gnus-topic-copy-matching
2720 Copy all groups that match some regular expression to a topic
2721 (@code{gnus-topic-copy-matching}).
2722
2723 @item T H
2724 @kindex T H (Topic)
2725 @findex gnus-topic-toggle-display-empty-topics
2726 Toggle hiding empty topics
2727 (@code{gnus-topic-toggle-display-empty-topics}).
2728
2729 @item T #
2730 @kindex T # (Topic)
2731 @findex gnus-topic-mark-topic
2732 Mark all groups in the current topic with the process mark
2733 (@code{gnus-topic-mark-topic}).
2734
2735 @item T M-#
2736 @kindex T M-# (Topic)
2737 @findex gnus-topic-unmark-topic
2738 Remove the process mark from all groups in the current topic
2739 (@code{gnus-topic-unmark-topic}).
2740
2741 @item RET
2742 @kindex RET (Topic)
2743 @findex gnus-topic-select-group
2744 @itemx SPACE
2745 Either select a group or fold a topic (@code{gnus-topic-select-group}).
2746 When you perform this command on a group, you'll enter the group, as
2747 usual.  When done on a topic line, the topic will be folded (if it was
2748 visible) or unfolded (if it was folded already).  So it's basically a
2749 toggling command on topics.  In addition, if you give a numerical
2750 prefix, group on that level (and lower) will be displayed.
2751
2752 @item T TAB
2753 @itemx TAB
2754 @kindex T TAB (Topic)
2755 @kindex TAB (Topic)
2756 @findex gnus-topic-indent
2757 ``Indent'' the current topic so that it becomes a sub-topic of the
2758 previous topic (@code{gnus-topic-indent}).  If given a prefix,
2759 ``un-indent'' the topic instead.
2760
2761 @item M-TAB
2762 @kindex M-TAB (Topic)
2763 @findex gnus-topic-unindent
2764 ``Un-indent'' the current topic so that it becomes a sub-topic of the
2765 parent of its current parent (@code{gnus-topic-unindent}).  
2766
2767 @item C-k
2768 @kindex C-k (Topic)
2769 @findex gnus-topic-kill-group
2770 Kill a group or topic (@code{gnus-topic-kill-group}).  All groups in the
2771 topic will be removed along with the topic.
2772
2773 @item C-y
2774 @kindex C-y (Topic)
2775 @findex gnus-topic-yank-group
2776 Yank the previously killed group or topic
2777 (@code{gnus-topic-yank-group}).  Note that all topics will be yanked
2778 before all groups.
2779
2780 @item T r
2781 @kindex T r (Topic)
2782 @findex gnus-topic-rename
2783 Rename a topic (@code{gnus-topic-rename}).
2784
2785 @item T DEL
2786 @kindex T DEL (Topic)
2787 @findex gnus-topic-delete
2788 Delete an empty topic (@code{gnus-topic-delete}).
2789
2790 @item A T
2791 @kindex A T (Topic)
2792 @findex gnus-topic-list-active
2793 List all groups that Gnus knows about in a topics-ified way
2794 (@code{gnus-topic-list-active}).
2795
2796 @item G p
2797 @kindex G p (Topic)
2798 @findex gnus-topic-edit-parameters
2799 @cindex group parameters
2800 @cindex topic parameters
2801 @cindex parameters
2802 Edit the topic parameters (@code{gnus-topic-edit-parameters}).
2803 @xref{Topic Parameters}.
2804
2805 @end table
2806
2807
2808 @node Topic Sorting
2809 @subsection Topic Sorting
2810 @cindex topic sorting
2811
2812 You can sort the groups in each topic individually with the following
2813 commands:
2814
2815
2816 @table @kbd
2817 @item T S a
2818 @kindex T S a (Topic)
2819 @findex gnus-topic-sort-groups-by-alphabet
2820 Sort the current topic alphabetically by group name
2821 (@code{gnus-topic-sort-groups-by-alphabet}).
2822
2823 @item T S u
2824 @kindex T S u (Topic)
2825 @findex gnus-topic-sort-groups-by-unread
2826 Sort the current topic by the number of unread articles
2827 (@code{gnus-topic-sort-groups-by-unread}).
2828
2829 @item T S l
2830 @kindex T S l (Topic)
2831 @findex gnus-topic-sort-groups-by-level
2832 Sort the current topic by group level
2833 (@code{gnus-topic-sort-groups-by-level}).
2834
2835 @item T S v
2836 @kindex T S v (Topic)
2837 @findex gnus-topic-sort-groups-by-score
2838 Sort the current topic by group score
2839 (@code{gnus-topic-sort-groups-by-score}).  @xref{Group Score}.
2840
2841 @item T S r
2842 @kindex T S r (Topic)
2843 @findex gnus-topic-sort-groups-by-rank
2844 Sort the current topic by group rank
2845 (@code{gnus-topic-sort-groups-by-rank}).  @xref{Group Score}.
2846
2847 @item T S m
2848 @kindex T S m (Topic)
2849 @findex gnus-topic-sort-groups-by-method
2850 Sort the current topic alphabetically by backend name
2851 (@code{gnus-topic-sort-groups-by-method}).
2852
2853 @end table
2854
2855 @xref{Sorting Groups} for more information about group sorting.
2856
2857
2858 @node Topic Topology
2859 @subsection Topic Topology
2860 @cindex topic topology
2861 @cindex topology
2862
2863 So, let's have a look at an example group buffer:
2864
2865 @example
2866 Gnus
2867   Emacs -- I wuw it!
2868      3: comp.emacs
2869      2: alt.religion.emacs
2870     Naughty Emacs
2871      452: alt.sex.emacs
2872        0: comp.talk.emacs.recovery
2873   Misc
2874      8: comp.binaries.fractals
2875     13: comp.sources.unix
2876 @end example
2877
2878 So, here we have one top-level topic (@samp{Gnus}), two topics under
2879 that, and one sub-topic under one of the sub-topics.  (There is always
2880 just one (1) top-level topic).  This topology can be expressed as
2881 follows:
2882
2883 @lisp
2884 (("Gnus" visible)
2885  (("Emacs -- I wuw it!" visible)
2886   (("Naughty Emacs" visible)))
2887  (("Misc" visible)))
2888 @end lisp
2889
2890 @vindex gnus-topic-topology
2891 This is in fact how the variable @code{gnus-topic-topology} would look
2892 for the display above.  That variable is saved in the @file{.newsrc.eld}
2893 file, and shouldn't be messed with manually---unless you really want
2894 to.  Since this variable is read from the @file{.newsrc.eld} file,
2895 setting it in any other startup files will have no effect.
2896
2897 This topology shows what topics are sub-topics of what topics (right),
2898 and which topics are visible.  Two settings are currently
2899 allowed---@code{visible} and @code{invisible}.
2900
2901
2902 @node Topic Parameters
2903 @subsection Topic Parameters
2904 @cindex topic parameters
2905
2906 All groups in a topic will inherit group parameters from the parent (and
2907 ancestor) topic parameters.  All valid group parameters are valid topic
2908 parameters (@pxref{Group Parameters}).
2909
2910 Group parameters (of course) override topic parameters, and topic
2911 parameters in sub-topics override topic parameters in super-topics.  You
2912 know.  Normal inheritance rules.  (@dfn{Rules} is here a noun, not a
2913 verb, although you may feel free to disagree with me here.)
2914
2915 @example
2916 Gnus
2917   Emacs
2918      3: comp.emacs
2919      2: alt.religion.emacs
2920    452: alt.sex.emacs
2921     Relief
2922      452: alt.sex.emacs
2923        0: comp.talk.emacs.recovery
2924   Misc
2925      8: comp.binaries.fractals
2926     13: comp.sources.unix
2927    452: alt.sex.emacs
2928 @end example
2929
2930 The @samp{Emacs} topic has the topic parameter @code{(score-file
2931 . "emacs.SCORE")}; the @samp{Relief} topic has the topic parameter
2932 @code{(score-file . "relief.SCORE")}; and the @samp{Misc} topic has the
2933 topic parameter @code{(score-file . "emacs.SCORE")}.  In addition,
2934 @* @samp{alt.religion.emacs} has the group parameter @code{(score-file
2935 . "religion.SCORE")}.
2936
2937 Now, when you enter @samp{alt.sex.emacs} in the @samp{Relief} topic, you
2938 will get the @file{relief.SCORE} home score file.  If you enter the same
2939 group in the @samp{Emacs} topic, you'll get the @file{emacs.SCORE} home
2940 score file.  If you enter the group @samp{alt.religion.emacs}, you'll
2941 get the @file{religion.SCORE} home score file.
2942
2943 This seems rather simple and self-evident, doesn't it?  Well, yes.  But
2944 there are some problems, especially with the @code{total-expiry}
2945 parameter.  Say you have a mail group in two topics; one with
2946 @code{total-expiry} and one without.  What happens when you do @kbd{M-x
2947 gnus-expire-all-expirable-groups}?  Gnus has no way of telling which one
2948 of these topics you mean to expire articles from, so anything may
2949 happen.  In fact, I hereby declare that it is @dfn{undefined} what
2950 happens.  You just have to be careful if you do stuff like that.
2951
2952
2953 @node Misc Group Stuff
2954 @section Misc Group Stuff
2955
2956 @menu
2957 * Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
2958 * Group Information::     Information and help on groups and Gnus.
2959 * Group Timestamp::       Making Gnus keep track of when you last read a group.
2960 * File Commands::         Reading and writing the Gnus files.
2961 @end menu
2962
2963 @table @kbd
2964
2965 @item ^
2966 @kindex ^ (Group)
2967 @findex gnus-group-enter-server-mode
2968 Enter the server buffer (@code{gnus-group-enter-server-mode}).
2969 @xref{The Server Buffer}.
2970
2971 @item a
2972 @kindex a (Group)
2973 @findex gnus-group-post-news
2974 Post an article to a group (@code{gnus-group-post-news}).  If given a
2975 prefix, the current group name will be used as the default.
2976
2977 @item m
2978 @kindex m (Group)
2979 @findex gnus-group-mail
2980 Mail a message somewhere (@code{gnus-group-mail}).
2981
2982 @end table
2983
2984 Variables for the group buffer:
2985
2986 @table @code
2987
2988 @item gnus-group-mode-hook
2989 @vindex gnus-group-mode-hook
2990 is called after the group buffer has been
2991 created.
2992
2993 @item gnus-group-prepare-hook
2994 @vindex gnus-group-prepare-hook
2995 is called after the group buffer is
2996 generated.  It may be used to modify the buffer in some strange,
2997 unnatural way.
2998
2999 @item gnus-group-prepared-hook
3000 @vindex gnus-group-prepare-hook
3001 is called as the very last thing after the group buffer has been
3002 generated.  It may be used to move point around, for instance.
3003
3004 @item gnus-permanently-visible-groups
3005 @vindex gnus-permanently-visible-groups
3006 Groups matching this regexp will always be listed in the group buffer,
3007 whether they are empty or not.
3008
3009 @end table
3010
3011
3012 @node Scanning New Messages
3013 @subsection Scanning New Messages
3014 @cindex new messages
3015 @cindex scanning new news
3016
3017 @table @kbd
3018
3019 @item g
3020 @kindex g (Group)
3021 @findex gnus-group-get-new-news
3022 @c @icon{gnus-group-get-new-news}
3023 Check the server(s) for new articles.  If the numerical prefix is used,
3024 this command will check only groups of level @var{arg} and lower
3025 (@code{gnus-group-get-new-news}).  If given a non-numerical prefix, this
3026 command will force a total re-reading of the active file(s) from the
3027 backend(s).
3028
3029 @item M-g
3030 @kindex M-g (Group)
3031 @findex gnus-group-get-new-news-this-group
3032 @vindex gnus-goto-next-group-when-activating
3033 @c @icon{gnus-group-get-new-news-this-group}
3034 Check whether new articles have arrived in the current group
3035 (@code{gnus-group-get-new-news-this-group}).
3036 @code{gnus-goto-next-group-when-activating} says whether this command is
3037 to move point to the next group or not.  It is @code{t} by default.
3038
3039 @findex gnus-activate-all-groups
3040 @cindex activating groups
3041 @item C-c M-g
3042 @kindex C-c M-g (Group)
3043 Activate absolutely all groups (@code{gnus-activate-all-groups}).
3044
3045 @item R
3046 @kindex R (Group)
3047 @cindex restarting
3048 @findex gnus-group-restart
3049 Restart Gnus (@code{gnus-group-restart}).  This saves the @file{.newsrc}
3050 file(s), closes the connection to all servers, clears up all run-time
3051 Gnus variables, and then starts Gnus all over again.
3052
3053 @end table
3054
3055 @vindex gnus-get-new-news-hook
3056 @code{gnus-get-new-news-hook} is run just before checking for new news.
3057
3058 @vindex gnus-after-getting-new-news-hook
3059 @code{gnus-after-getting-new-news-hook} is run after checking for new
3060 news.
3061
3062
3063 @node Group Information
3064 @subsection Group Information
3065 @cindex group information
3066 @cindex information on groups
3067
3068 @table @kbd
3069
3070
3071 @item H f
3072 @kindex H f (Group)
3073 @findex gnus-group-fetch-faq
3074 @vindex gnus-group-faq-directory
3075 @cindex FAQ
3076 @cindex ange-ftp
3077 Try to fetch the FAQ for the current group
3078 (@code{gnus-group-fetch-faq}).  Gnus will try to get the FAQ from
3079 @code{gnus-group-faq-directory}, which is usually a directory on a
3080 remote machine.  This variable can also be a list of directories.  In
3081 that case, giving a prefix to this command will allow you to choose
3082 between the various sites.  @code{ange-ftp} (or @code{efs}) will be used
3083 for fetching the file.
3084
3085 If fetching from the first site is unsuccessful, Gnus will attempt to go
3086 through @code{gnus-group-faq-directory} and try to open them one by one.
3087
3088 @item H d
3089 @itemx C-c C-d
3090 @c @icon{gnus-group-describe-group}
3091 @kindex H d (Group)
3092 @kindex C-c C-d (Group)
3093 @cindex describing groups
3094 @cindex group description
3095 @findex gnus-group-describe-group
3096 Describe the current group (@code{gnus-group-describe-group}).  If given
3097 a prefix, force Gnus to re-read the description from the server.
3098
3099 @item M-d
3100 @kindex M-d (Group)
3101 @findex gnus-group-describe-all-groups
3102 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
3103 prefix, force Gnus to re-read the description file from the server.
3104
3105 @item H v
3106 @itemx V
3107 @kindex V (Group)
3108 @kindex H v (Group)
3109 @cindex version
3110 @findex gnus-version
3111 Display current Gnus version numbers (@code{gnus-version}).
3112
3113 @item ?
3114 @kindex ? (Group)
3115 @findex gnus-group-describe-briefly
3116 Give a very short help message (@code{gnus-group-describe-briefly}).
3117
3118 @item C-c C-i
3119 @kindex C-c C-i (Group)
3120 @cindex info
3121 @cindex manual
3122 @findex gnus-info-find-node
3123 Go to the Gnus info node (@code{gnus-info-find-node}).
3124 @end table
3125
3126
3127 @node Group Timestamp
3128 @subsection Group Timestamp
3129 @cindex timestamps
3130 @cindex group timestamps
3131
3132 It can be convenient to let Gnus keep track of when you last read a
3133 group.  To set the ball rolling, you should add
3134 @code{gnus-group-set-timestamp} to @code{gnus-select-group-hook}:
3135
3136 @lisp
3137 (add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
3138 @end lisp
3139
3140 After doing this, each time you enter a group, it'll be recorded.
3141
3142 This information can be displayed in various ways---the easiest is to
3143 use the @samp{%d} spec in the group line format:
3144
3145 @lisp
3146 (setq gnus-group-line-format
3147       "%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")
3148 @end lisp
3149
3150 This will result in lines looking like:
3151
3152 @example
3153 *        0: mail.ding                                19961002T012943
3154          0: custom                                   19961002T012713
3155 @end example
3156
3157 As you can see, the date is displayed in compact ISO 8601 format.  This
3158 may be a bit too much, so to just display the date, you could say
3159 something like:
3160
3161 @lisp
3162 (setq gnus-group-line-format
3163       "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
3164 @end lisp
3165
3166
3167 @node File Commands
3168 @subsection File Commands
3169 @cindex file commands
3170
3171 @table @kbd
3172
3173 @item r
3174 @kindex r (Group)
3175 @findex gnus-group-read-init-file
3176 @vindex gnus-init-file
3177 @cindex reading init file
3178 Re-read the init file (@code{gnus-init-file}, which defaults to
3179 @file{~/.gnus}) (@code{gnus-group-read-init-file}).
3180
3181 @item s
3182 @kindex s (Group)
3183 @findex gnus-group-save-newsrc
3184 @cindex saving .newsrc
3185 Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
3186 (@code{gnus-group-save-newsrc}).  If given a prefix, force saving the
3187 file(s) whether Gnus thinks it is necessary or not.
3188
3189 @c @item Z
3190 @c @kindex Z (Group)
3191 @c @findex gnus-group-clear-dribble
3192 @c Clear the dribble buffer (@code{gnus-group-clear-dribble}).
3193
3194 @end table
3195
3196
3197 @node The Summary Buffer
3198 @chapter The Summary Buffer
3199 @cindex summary buffer
3200
3201 A line for each article is displayed in the summary buffer.  You can
3202 move around, read articles, post articles and reply to articles.
3203
3204 The most common way to a summary buffer is to select a group from the
3205 group buffer (@pxref{Selecting a Group}).
3206
3207 You can have as many summary buffers open as you wish.
3208
3209 @menu
3210 * Summary Buffer Format::       Deciding how the summary buffer is to look.
3211 * Summary Maneuvering::         Moving around the summary buffer.
3212 * Choosing Articles::           Reading articles.
3213 * Paging the Article::          Scrolling the current article.
3214 * Reply Followup and Post::     Posting articles.
3215 * Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''
3216 * Marking Articles::            Marking articles as read, expirable, etc.
3217 * Limiting::                    You can limit the summary buffer.
3218 * Threading::                   How threads are made.
3219 * Sorting::                     How articles and threads are sorted.
3220 * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
3221 * Article Caching::             You may store articles in a cache.
3222 * Persistent Articles::         Making articles expiry-resistant.
3223 * Article Backlog::             Having already read articles hang around.
3224 * Saving Articles::             Ways of customizing article saving.
3225 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
3226 * Article Treatment::           The article buffer can be mangled at will.
3227 * MIME Commands::               Doing MIMEy things with the articles.
3228 * Article Commands::            Doing various things with the article buffer.
3229 * Summary Sorting::             Sorting the summary buffer in various ways.
3230 * Finding the Parent::          No child support? Get the parent.
3231 * Alternative Approaches::      Reading using non-default summaries.
3232 * Tree Display::                A more visual display of threads.
3233 * Mail Group Commands::         Some commands can only be used in mail groups.
3234 * Various Summary Stuff::       What didn't fit anywhere else.
3235 * Exiting the Summary Buffer::  Returning to the Group buffer.
3236 * Crosspost Handling::          How crossposted articles are dealt with.
3237 * Duplicate Suppression::       An alternative when crosspost handling fails.
3238 @end menu
3239
3240
3241 @node Summary Buffer Format
3242 @section Summary Buffer Format
3243 @cindex summary buffer format
3244
3245 @iftex
3246 @iflatex
3247 \gnusfigure{The Summary Buffer}{180}{
3248 \put(0,0){\epsfig{figure=tmp/summary.ps,width=7.5cm}}
3249 \put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-article.ps,width=7.5cm}}}
3250 }
3251 @end iflatex
3252 @end iftex
3253
3254 @menu
3255 * Summary Buffer Lines::     You can specify how summary lines should look.
3256 * Summary Buffer Mode Line:: You can say how the mode line should look.
3257 * Summary Highlighting::     Making the summary buffer all pretty and nice.
3258 @end menu
3259
3260 @findex mail-extract-address-components
3261 @findex gnus-extract-address-components
3262 @vindex gnus-extract-address-components
3263 Gnus will use the value of the @code{gnus-extract-address-components}
3264 variable as a function for getting the name and address parts of a
3265 @code{From} header.  Two pre-defined functions exist:
3266 @code{gnus-extract-address-components}, which is the default, quite
3267 fast, and too simplistic solution; and
3268 @code{mail-extract-address-components}, which works very nicely, but is
3269 slower.  The default function will return the wrong answer in 5% of the
3270 cases.  If this is unacceptable to you, use the other function instead:
3271
3272 @lisp
3273 (setq gnus-extract-address-components
3274       'mail-extract-address-components)
3275 @end lisp
3276
3277 @vindex gnus-summary-same-subject
3278 @code{gnus-summary-same-subject} is a string indicating that the current
3279 article has the same subject as the previous.  This string will be used
3280 with those specs that require it.  The default is @code{""}.
3281
3282
3283 @node Summary Buffer Lines
3284 @subsection Summary Buffer Lines
3285
3286 @vindex gnus-summary-line-format
3287 You can change the format of the lines in the summary buffer by changing
3288 the @code{gnus-summary-line-format} variable.  It works along the same
3289 lines as a normal @code{format} string, with some extensions
3290 (@pxref{Formatting Variables}).
3291
3292 The default string is @samp{%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n}.
3293
3294 The following format specification characters are understood:
3295
3296 @table @samp
3297 @item N
3298 Article number.
3299 @item S
3300 Subject string.
3301 @item s
3302 Subject if the article is the root of the thread or the previous article
3303 had a different subject, @code{gnus-summary-same-subject} otherwise.
3304 (@code{gnus-summary-same-subject} defaults to @code{""}.)
3305 @item F
3306 Full @code{From} header.
3307 @item n
3308 The name (from the @code{From} header).
3309 @item a
3310 The name (from the @code{From} header).  This differs from the @code{n}
3311 spec in that it uses the function designated by the
3312 @code{gnus-extract-address-components} variable, which is slower, but
3313 may be more thorough.
3314 @item A
3315 The address (from the @code{From} header).  This works the same way as
3316 the @code{a} spec.
3317 @item L
3318 Number of lines in the article.
3319 @item c
3320 Number of characters in the article.
3321 @item I
3322 Indentation based on thread level (@pxref{Customizing Threading}).
3323 @item T
3324 Nothing if the article is a root and lots of spaces if it isn't (it
3325 pushes everything after it off the screen).
3326 @item [
3327 Opening bracket, which is normally @samp{[}, but can also be @samp{<}
3328 for adopted articles (@pxref{Customizing Threading}).
3329 @item ]
3330 Closing bracket, which is normally @samp{]}, but can also be @samp{>}
3331 for adopted articles.
3332 @item >
3333 One space for each thread level.
3334 @item <
3335 Twenty minus thread level spaces.
3336 @item U
3337 Unread.
3338
3339 @item R
3340 This misleadingly named specifier is the @dfn{secondary mark}.  This
3341 mark will say whether the article has been replied to, has been cached,
3342 or has been saved.  
3343
3344 @item i
3345 Score as a number (@pxref{Scoring}).
3346 @item z
3347 @vindex gnus-summary-zcore-fuzz
3348 Zcore, @samp{+} if above the default level and @samp{-} if below the
3349 default level.  If the difference between
3350 @code{gnus-summary-default-score} and the score is less than
3351 @code{gnus-summary-zcore-fuzz}, this spec will not be used.
3352 @item V
3353 Total thread score.
3354 @item x
3355 @code{Xref}.
3356 @item D
3357 @code{Date}.
3358 @item d
3359 The @code{Date} in @code{DD-MMM} format.
3360 @item o
3361 The @code{Date} in @var{YYYYMMDD}@code{T}@var{HHMMSS} format.
3362 @item M
3363 @code{Message-ID}.
3364 @item r
3365 @code{References}.
3366 @item t
3367 Number of articles in the current sub-thread.  Using this spec will slow
3368 down summary buffer generation somewhat.
3369 @item e
3370 An @samp{=} (@code{gnus-not-empty-thread-mark}) will be displayed if the
3371 article has any children.
3372 @item P
3373 The line number.
3374 @item O
3375 Download mark.
3376 @item u
3377 User defined specifier.  The next character in the format string should
3378 be a letter.  Gnus will call the function
3379 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
3380 following @samp{%u}.  The function will be passed the current header as
3381 argument.  The function should return a string, which will be inserted
3382 into the summary just like information from any other summary specifier.
3383 @end table
3384
3385 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
3386 have to be handled with care.  For reasons of efficiency, Gnus will
3387 compute what column these characters will end up in, and ``hard-code''
3388 that.  This means that it is invalid to have these specs after a
3389 variable-length spec.  Well, you might not be arrested, but your summary
3390 buffer will look strange, which is bad enough.
3391
3392 The smart choice is to have these specs as far to the left as possible.
3393 (Isn't that the case with everything, though?  But I digress.)
3394
3395 This restriction may disappear in later versions of Gnus.
3396
3397
3398 @node Summary Buffer Mode Line
3399 @subsection Summary Buffer Mode Line
3400
3401 @vindex gnus-summary-mode-line-format
3402 You can also change the format of the summary mode bar (@pxref{Mode Line
3403 Formatting}).  Set @code{gnus-summary-mode-line-format} to whatever you
3404 like.  The default is @samp{Gnus: %%b [%A] %Z}.
3405
3406 Here are the elements you can play with:
3407
3408 @table @samp
3409 @item G
3410 Group name.
3411 @item p
3412 Unprefixed group name.
3413 @item A
3414 Current article number.
3415 @item z
3416 Current article score.
3417 @item V
3418 Gnus version.
3419 @item U
3420 Number of unread articles in this group.
3421 @item e
3422 Number of unread articles in this group that aren't displayed in the
3423 summary buffer.
3424 @item Z
3425 A string with the number of unread and unselected articles represented
3426 either as @samp{<%U(+%e) more>} if there are both unread and unselected
3427 articles, and just as @samp{<%U more>} if there are just unread articles
3428 and no unselected ones.
3429 @item g
3430 Shortish group name.  For instance, @samp{rec.arts.anime} will be
3431 shortened to @samp{r.a.anime}.
3432 @item S
3433 Subject of the current article.
3434 @item u
3435 User-defined spec (@pxref{User-Defined Specs}).
3436 @item s
3437 Name of the current score file (@pxref{Scoring}).
3438 @item d
3439 Number of dormant articles (@pxref{Unread Articles}).
3440 @item t
3441 Number of ticked articles (@pxref{Unread Articles}).
3442 @item r
3443 Number of articles that have been marked as read in this session.
3444 @item E
3445 Number of articles expunged by the score files.
3446 @end table
3447
3448
3449 @node Summary Highlighting
3450 @subsection Summary Highlighting
3451
3452 @table @code
3453
3454 @item gnus-visual-mark-article-hook
3455 @vindex gnus-visual-mark-article-hook
3456 This hook is run after selecting an article.  It is meant to be used for
3457 highlighting the article in some way.  It is not run if
3458 @code{gnus-visual} is @code{nil}.
3459
3460 @item gnus-summary-update-hook
3461 @vindex gnus-summary-update-hook
3462 This hook is called when a summary line is changed.  It is not run if
3463 @code{gnus-visual} is @code{nil}.
3464
3465 @item gnus-summary-selected-face
3466 @vindex gnus-summary-selected-face
3467 This is the face (or @dfn{font} as some people call it) used to
3468 highlight the current article in the summary buffer.
3469
3470 @item gnus-summary-highlight
3471 @vindex gnus-summary-highlight
3472 Summary lines are highlighted according to this variable, which is a
3473 list where the elements are of the format @var{(FORM . FACE)}.  If you
3474 would, for instance, like ticked articles to be italic and high-scored
3475 articles to be bold, you could set this variable to something like
3476 @lisp
3477 (((eq mark gnus-ticked-mark) . italic)
3478  ((> score default) . bold))
3479 @end lisp
3480 As you may have guessed, if @var{FORM} returns a non-@code{nil} value,
3481 @var{FACE} will be applied to the line.
3482 @end table
3483
3484
3485 @node Summary Maneuvering
3486 @section Summary Maneuvering
3487 @cindex summary movement
3488
3489 All the straight movement commands understand the numeric prefix and
3490 behave pretty much as you'd expect.
3491
3492 None of these commands select articles.
3493
3494 @table @kbd
3495 @item G M-n
3496 @itemx M-n
3497 @kindex M-n (Summary)
3498 @kindex G M-n (Summary)
3499 @findex gnus-summary-next-unread-subject
3500 Go to the next summary line of an unread article
3501 (@code{gnus-summary-next-unread-subject}).
3502
3503 @item G M-p
3504 @itemx M-p
3505 @kindex M-p (Summary)
3506 @kindex G M-p (Summary)
3507 @findex gnus-summary-prev-unread-subject
3508 Go to the previous summary line of an unread article
3509 (@code{gnus-summary-prev-unread-subject}).
3510
3511 @item G j
3512 @itemx j
3513 @kindex j (Summary)
3514 @kindex G j (Summary)
3515 @findex gnus-summary-goto-article
3516 Ask for an article number or @code{Message-ID}, and then go to that
3517 article (@code{gnus-summary-goto-article}).
3518
3519 @item G g
3520 @kindex G g (Summary)
3521 @findex gnus-summary-goto-subject
3522 Ask for an article number and then go to the summary line of that article
3523 without displaying the article (@code{gnus-summary-goto-subject}).
3524 @end table
3525
3526 If Gnus asks you to press a key to confirm going to the next group, you
3527 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
3528 buffer, searching for the next group to read without actually returning
3529 to the group buffer.
3530
3531 Variables related to summary movement:
3532
3533 @table @code
3534
3535 @vindex gnus-auto-select-next
3536 @item gnus-auto-select-next
3537 If you issue one of the movement commands (like @kbd{n}) and there are
3538 no more unread articles after the current one, Gnus will offer to go to
3539 the next group.  If this variable is @code{t} and the next group is
3540 empty, Gnus will exit summary mode and return to the group buffer.  If
3541 this variable is neither @code{t} nor @code{nil}, Gnus will select the
3542 next group, no matter whether it has any unread articles or not.  As a
3543 special case, if this variable is @code{quietly}, Gnus will select the
3544 next group without asking for confirmation.  If this variable is
3545 @code{almost-quietly}, the same will happen only if you are located on
3546 the last article in the group.  Finally, if this variable is
3547 @code{slightly-quietly}, the @kbd{Z n} command will go to the next group
3548 without confirmation.  Also @pxref{Group Levels}.
3549
3550 @item gnus-auto-select-same
3551 @vindex gnus-auto-select-same
3552 If non-@code{nil}, all the movement commands will try to go to the next
3553 article with the same subject as the current.  (@dfn{Same} here might
3554 mean @dfn{roughly equal}.  See @code{gnus-summary-gather-subject-limit}
3555 for details (@pxref{Customizing Threading}).)  If there are no more
3556 articles with the same subject, go to the first unread article.
3557
3558 This variable is not particularly useful if you use a threaded display.
3559
3560 @item gnus-summary-check-current
3561 @vindex gnus-summary-check-current
3562 If non-@code{nil}, all the ``unread'' movement commands will not proceed
3563 to the next (or previous) article if the current article is unread.
3564 Instead, they will choose the current article.
3565
3566 @item gnus-auto-center-summary
3567 @vindex gnus-auto-center-summary
3568 If non-@code{nil}, Gnus will keep the point in the summary buffer
3569 centered at all times.  This makes things quite tidy, but if you have a
3570 slow network connection, or simply do not like this un-Emacsism, you can
3571 set this variable to @code{nil} to get the normal Emacs scrolling
3572 action.  This will also inhibit horizontal re-centering of the summary
3573 buffer, which might make it more inconvenient to read extremely long
3574 threads.
3575
3576 @end table
3577
3578
3579 @node Choosing Articles
3580 @section Choosing Articles
3581 @cindex selecting articles
3582
3583 @menu
3584 * Choosing Commands::        Commands for choosing articles.
3585 * Choosing Variables::       Variables that influence these commands.
3586 @end menu
3587
3588
3589 @node Choosing Commands
3590 @subsection Choosing Commands
3591
3592 None of the following movement commands understand the numeric prefix,
3593 and they all select and display an article.
3594
3595 @table @kbd
3596 @item SPACE
3597 @kindex SPACE (Summary)
3598 @findex gnus-summary-next-page
3599 Select the current article, or, if that one's read already, the next
3600 unread article (@code{gnus-summary-next-page}).
3601
3602 @item G n
3603 @itemx n
3604 @kindex n (Summary)
3605 @kindex G n (Summary)
3606 @findex gnus-summary-next-unread-article
3607 @c @icon{gnus-summary-next-unread}
3608 Go to next unread article (@code{gnus-summary-next-unread-article}).
3609
3610 @item G p
3611 @itemx p
3612 @kindex p (Summary)
3613 @findex gnus-summary-prev-unread-article
3614 @c @icon{gnus-summary-prev-unread}
3615 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
3616
3617 @item G N
3618 @itemx N
3619 @kindex N (Summary)
3620 @kindex G N (Summary)
3621 @findex gnus-summary-next-article
3622 Go to the next article (@code{gnus-summary-next-article}).
3623
3624 @item G P
3625 @itemx P
3626 @kindex P (Summary)
3627 @kindex G P (Summary)
3628 @findex gnus-summary-prev-article
3629 Go to the previous article (@code{gnus-summary-prev-article}).
3630
3631 @item G C-n
3632 @kindex G C-n (Summary)
3633 @findex gnus-summary-next-same-subject
3634 Go to the next article with the same subject
3635 (@code{gnus-summary-next-same-subject}).
3636
3637 @item G C-p
3638 @kindex G C-p (Summary)
3639 @findex gnus-summary-prev-same-subject
3640 Go to the previous article with the same subject
3641 (@code{gnus-summary-prev-same-subject}).
3642
3643 @item G f
3644 @itemx .
3645 @kindex G f  (Summary)
3646 @kindex .  (Summary)
3647 @findex gnus-summary-first-unread-article
3648 Go to the first unread article
3649 (@code{gnus-summary-first-unread-article}).
3650
3651 @item G b
3652 @itemx ,
3653 @kindex G b (Summary)
3654 @kindex , (Summary)
3655 @findex gnus-summary-best-unread-article
3656 Go to the article with the highest score
3657 (@code{gnus-summary-best-unread-article}).
3658
3659 @item G l
3660 @itemx l
3661 @kindex l (Summary)
3662 @kindex G l (Summary)
3663 @findex gnus-summary-goto-last-article
3664 Go to the previous article read (@code{gnus-summary-goto-last-article}).
3665
3666 @item G o
3667 @kindex G o (Summary)
3668 @findex gnus-summary-pop-article
3669 @cindex history
3670 @cindex article history
3671 Pop an article off the summary history and go to this article
3672 (@code{gnus-summary-pop-article}).  This command differs from the
3673 command above in that you can pop as many previous articles off the
3674 history as you like, while @kbd{l} toggles the two last read articles.
3675 For a somewhat related issue (if you use these commands a lot),
3676 @pxref{Article Backlog}.
3677 @end table
3678
3679
3680 @node Choosing Variables
3681 @subsection Choosing Variables
3682
3683 Some variables relevant for moving and selecting articles:
3684
3685 @table @code
3686 @item gnus-auto-extend-newsgroup
3687 @vindex gnus-auto-extend-newsgroup
3688 All the movement commands will try to go to the previous (or next)
3689 article, even if that article isn't displayed in the Summary buffer if
3690 this variable is non-@code{nil}.  Gnus will then fetch the article from
3691 the server and display it in the article buffer.
3692
3693 @item gnus-select-article-hook
3694 @vindex gnus-select-article-hook
3695 This hook is called whenever an article is selected.  By default it
3696 exposes any threads hidden under the selected article.
3697
3698 @item gnus-mark-article-hook
3699 @vindex gnus-mark-article-hook
3700 @findex gnus-summary-mark-unread-as-read
3701 @findex gnus-summary-mark-read-and-unread-as-read
3702 @findex gnus-unread-mark
3703 This hook is called whenever an article is selected.  It is intended to
3704 be used for marking articles as read.  The default value is
3705 @code{gnus-summary-mark-read-and-unread-as-read}, and will change the
3706 mark of almost any article you read to @code{gnus-unread-mark}.  The
3707 only articles not affected by this function are ticked, dormant, and
3708 expirable articles.  If you'd instead like to just have unread articles
3709 marked as read, you can use @code{gnus-summary-mark-unread-as-read}
3710 instead.  It will leave marks like @code{gnus-low-score-mark},
3711 @code{gnus-del-mark} (and so on) alone.
3712
3713 @end table
3714
3715
3716 @node Paging the Article
3717 @section Scrolling the Article
3718 @cindex article scrolling
3719
3720 @table @kbd
3721
3722 @item SPACE
3723 @kindex SPACE (Summary)
3724 @findex gnus-summary-next-page
3725 Pressing @kbd{SPACE} will scroll the current article forward one page,
3726 or, if you have come to the end of the current article, will choose the
3727 next article (@code{gnus-summary-next-page}).
3728
3729 @item DEL
3730 @kindex DEL (Summary)
3731 @findex gnus-summary-prev-page
3732 Scroll the current article back one page (@code{gnus-summary-prev-page}).
3733
3734 @item RET
3735 @kindex RET (Summary)
3736 @findex gnus-summary-scroll-up
3737 Scroll the current article one line forward
3738 (@code{gnus-summary-scroll-up}).
3739
3740 @item M-RET
3741 @kindex M-RET (Summary)
3742 @findex gnus-summary-scroll-down
3743 Scroll the current article one line backward
3744 (@code{gnus-summary-scroll-down}).
3745
3746 @item A g
3747 @itemx g
3748 @kindex A g (Summary)
3749 @kindex g (Summary)
3750 @findex gnus-summary-show-article
3751 (Re)fetch the current article (@code{gnus-summary-show-article}).  If
3752 given a prefix, fetch the current article, but don't run any of the
3753 article treatment functions.  This will give you a ``raw'' article, just
3754 the way it came from the server.
3755
3756 @item A <
3757 @itemx <
3758 @kindex < (Summary)
3759 @kindex A < (Summary)
3760 @findex gnus-summary-beginning-of-article
3761 Scroll to the beginning of the article
3762 (@code{gnus-summary-beginning-of-article}).
3763
3764 @item A >
3765 @itemx >
3766 @kindex > (Summary)
3767 @kindex A > (Summary)
3768 @findex gnus-summary-end-of-article
3769 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
3770
3771 @item A s
3772 @itemx s
3773 @kindex A s (Summary)
3774 @kindex s (Summary)
3775 @findex gnus-summary-isearch-article
3776 Perform an isearch in the article buffer
3777 (@code{gnus-summary-isearch-article}).
3778
3779 @item h
3780 @kindex h (Summary)
3781 @findex gnus-summary-select-article-buffer
3782 Select the article buffer (@code{gnus-summary-select-article-buffer}).
3783
3784 @end table
3785
3786
3787 @node Reply Followup and Post
3788 @section Reply, Followup and Post
3789
3790 @menu
3791 * Summary Mail Commands::            Sending mail.
3792 * Summary Post Commands::            Sending news.
3793 @end menu
3794
3795
3796 @node Summary Mail Commands
3797 @subsection Summary Mail Commands
3798 @cindex mail
3799 @cindex composing mail
3800
3801 Commands for composing a mail message:
3802
3803 @table @kbd
3804
3805 @item S r
3806 @itemx r
3807 @kindex S r (Summary)
3808 @kindex r (Summary)
3809 @findex gnus-summary-reply
3810 @c @icon{gnus-summary-mail-reply}
3811 @c @icon{gnus-summary-reply}
3812 Mail a reply to the author of the current article
3813 (@code{gnus-summary-reply}).
3814
3815 @item S R
3816 @itemx R
3817 @kindex R (Summary)
3818 @kindex S R (Summary)
3819 @findex gnus-summary-reply-with-original
3820 @c @icon{gnus-summary-reply-with-original}
3821 Mail a reply to the author of the current article and include the
3822 original message (@code{gnus-summary-reply-with-original}).  This
3823 command uses the process/prefix convention.
3824
3825 @item S w
3826 @kindex S w (Summary)
3827 @findex gnus-summary-wide-reply
3828 Mail a wide reply to the author of the current article
3829 (@code{gnus-summary-wide-reply}).  A @dfn{wide reply} is a reply that
3830 goes out to all people listed in the @code{To}, @code{From} (or
3831 @code{Reply-to}) and @code{Cc} headers.
3832
3833 @item S W
3834 @kindex S W (Summary)
3835 @findex gnus-summary-wide-reply-with-original
3836 Mail a wide reply to the current article and include the original
3837 message (@code{gnus-summary-reply-with-original}).  This command uses
3838 the process/prefix convention.
3839
3840 @item S o m
3841 @kindex S o m (Summary)
3842 @findex gnus-summary-mail-forward
3843 @c @icon{gnus-summary-mail-forward}
3844 Forward the current article to some other person
3845 (@code{gnus-summary-mail-forward}).  If given a prefix, include the full
3846 headers of the forwarded article.
3847
3848 @item S m
3849 @itemx m
3850 @kindex m (Summary)
3851 @kindex S m (Summary)
3852 @findex gnus-summary-mail-other-window
3853 @c @icon{gnus-summary-mail-originate}
3854 Send a mail to some other person
3855 (@code{gnus-summary-mail-other-window}).
3856
3857 @item S D b
3858 @kindex S D b (Summary)
3859 @findex gnus-summary-resend-bounced-mail
3860 @cindex bouncing mail
3861 If you have sent a mail, but the mail was bounced back to you for some
3862 reason (wrong address, transient failure), you can use this command to
3863 resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
3864 will be popped into a mail buffer where you can edit the headers before
3865 sending the mail off again.  If you give a prefix to this command, and
3866 the bounced mail is a reply to some other mail, Gnus will try to fetch
3867 that mail and display it for easy perusal of its headers.  This might
3868 very well fail, though.
3869
3870 @item S D r
3871 @kindex S D r (Summary)
3872 @findex gnus-summary-resend-message
3873 Not to be confused with the previous command,
3874 @code{gnus-summary-resend-message} will prompt you for an address to
3875 send the current message off to, and then send it to that place.  The
3876 headers of the message won't be altered---but lots of headers that say
3877 @code{Resent-To}, @code{Resent-From} and so on will be added.  This
3878 means that you actually send a mail to someone that has a @code{To}
3879 header that (probably) points to yourself.  This will confuse people.
3880 So, natcherly you'll only do that if you're really eVIl.
3881
3882 This command is mainly used if you have several accounts and want to
3883 ship a mail to a different account of yours.  (If you're both
3884 @code{root} and @code{postmaster} and get a mail for @code{postmaster}
3885 to the @code{root} account, you may want to resend it to
3886 @code{postmaster}.  Ordnung muß sein!
3887
3888 This command understands the process/prefix convention
3889 (@pxref{Process/Prefix}).
3890
3891 @item S O m
3892 @kindex S O m (Summary)
3893 @findex gnus-uu-digest-mail-forward
3894 Digest the current series (@pxref{Decoding Articles}) and forward the
3895 result using mail (@code{gnus-uu-digest-mail-forward}).  This command
3896 uses the process/prefix convention (@pxref{Process/Prefix}).
3897
3898 @item S M-c
3899 @kindex S M-c (Summary)
3900 @findex gnus-summary-mail-crosspost-complaint
3901 @cindex crossposting
3902 @cindex excessive crossposting
3903 Send a complaint about excessive crossposting to the author of the
3904 current article (@code{gnus-summary-mail-crosspost-complaint}).
3905
3906 @findex gnus-crosspost-complaint
3907 This command is provided as a way to fight back against the current
3908 crossposting pandemic that's sweeping Usenet.  It will compose a reply
3909 using the @code{gnus-crosspost-complaint} variable as a preamble.  This
3910 command understands the process/prefix convention
3911 (@pxref{Process/Prefix}) and will prompt you before sending each mail.
3912
3913 @end table
3914
3915 Also @pxref{(message)Header Commands} for more information.
3916
3917
3918 @node Summary Post Commands
3919 @subsection Summary Post Commands
3920 @cindex post
3921 @cindex composing news
3922
3923 Commands for posting a news article:
3924
3925 @table @kbd
3926 @item S p
3927 @itemx a
3928 @kindex a (Summary)
3929 @kindex S p (Summary)
3930 @findex gnus-summary-post-news
3931 @c @icon{gnus-summary-post-news}
3932 Post an article to the current group
3933 (@code{gnus-summary-post-news}).
3934
3935 @item S f
3936 @itemx f
3937 @kindex f (Summary)
3938 @kindex S f (Summary)
3939 @findex gnus-summary-followup
3940 @c @icon{gnus-summary-followup}
3941 Post a followup to the current article (@code{gnus-summary-followup}).
3942
3943 @item S F
3944 @itemx F
3945 @kindex S F (Summary)
3946 @kindex F (Summary)
3947 @c @icon{gnus-summary-followup-with-original}
3948 @findex gnus-summary-followup-with-original
3949 Post a followup to the current article and include the original message
3950 (@code{gnus-summary-followup-with-original}).   This command uses the
3951 process/prefix convention.
3952
3953 @item S n
3954 @kindex S n (Summary)
3955 @findex gnus-summary-followup-to-mail
3956 Post a followup to the current article via news, even if you got the
3957 message through mail (@code{gnus-summary-followup-to-mail}).
3958
3959 @item S N
3960 @kindex S N (Summary)
3961 @findex gnus-summary-followup-to-mail-with-original
3962 Post a followup to the current article via news, even if you got the
3963 message through mail and include the original message
3964 (@code{gnus-summary-followup-to-mail-with-original}).  This command uses
3965 the process/prefix convention.
3966
3967 @item S o p
3968 @kindex S o p (Summary)
3969 @findex gnus-summary-post-forward
3970 Forward the current article to a newsgroup
3971 (@code{gnus-summary-post-forward}).  If given a prefix, include the full
3972 headers of the forwarded article.
3973
3974 @item S O p
3975 @kindex S O p (Summary)
3976 @findex gnus-uu-digest-post-forward
3977 @cindex digests
3978 @cindex making digests
3979 Digest the current series and forward the result to a newsgroup
3980 (@code{gnus-uu-digest-mail-forward}).  This command uses the
3981 process/prefix convention.
3982
3983 @item S u
3984 @kindex S u (Summary)
3985 @findex gnus-uu-post-news
3986 @c @icon{gnus-uu-post-news}
3987 Uuencode a file, split it into parts, and post it as a series
3988 (@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
3989 @end table
3990
3991 Also @pxref{(message)Header Commands} for more information.
3992
3993
3994 @node Canceling and Superseding
3995 @section Canceling Articles
3996 @cindex canceling articles
3997 @cindex superseding articles
3998
3999 Have you ever written something, and then decided that you really,
4000 really, really wish you hadn't posted that?
4001
4002 Well, you can't cancel mail, but you can cancel posts.
4003
4004 @findex gnus-summary-cancel-article
4005 @kindex C (Summary)
4006 @c @icon{gnus-summary-cancel-article}
4007 Find the article you wish to cancel (you can only cancel your own
4008 articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
4009 c} (@code{gnus-summary-cancel-article}).  Your article will be
4010 canceled---machines all over the world will be deleting your article.
4011 This command uses the process/prefix convention (@pxref{Process/Prefix}).
4012
4013 Be aware, however, that not all sites honor cancels, so your article may
4014 live on here and there, while most sites will delete the article in
4015 question.
4016
4017 Gnus will use the ``current'' select method when canceling.  If you
4018 want to use the standard posting method, use the @samp{a} symbolic
4019 prefix (@pxref{Symbolic Prefixes}).
4020
4021 If you discover that you have made some mistakes and want to do some
4022 corrections, you can post a @dfn{superseding} article that will replace
4023 your original article.
4024
4025 @findex gnus-summary-supersede-article
4026 @kindex S (Summary)
4027 Go to the original article and press @kbd{S s}
4028 (@code{gnus-summary-supersede-article}).  You will be put in a buffer
4029 where you can edit the article all you want before sending it off the
4030 usual way.
4031
4032 The same goes for superseding as for canceling, only more so: Some
4033 sites do not honor superseding.  On those sites, it will appear that you
4034 have posted almost the same article twice.
4035
4036 If you have just posted the article, and change your mind right away,
4037 there is a trick you can use to cancel/supersede the article without
4038 waiting for the article to appear on your site first.  You simply return
4039 to the post buffer (which is called @code{*sent ...*}).  There you will
4040 find the article you just posted, with all the headers intact.  Change
4041 the @code{Message-ID} header to a @code{Cancel} or @code{Supersedes}
4042 header by substituting one of those words for the word
4043 @code{Message-ID}.  Then just press @kbd{C-c C-c} to send the article as
4044 you would do normally.  The previous article will be
4045 canceled/superseded.
4046
4047 Just remember, kids: There is no 'c' in 'supersede'.
4048
4049
4050 @node Marking Articles
4051 @section Marking Articles
4052 @cindex article marking
4053 @cindex article ticking
4054 @cindex marks
4055
4056 There are several marks you can set on an article.
4057
4058 You have marks that decide the @dfn{readedness} (whoo, neato-keano
4059 neologism ohoy!) of the article.  Alphabetic marks generally mean
4060 @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
4061
4062 In addition, you also have marks that do not affect readedness.
4063
4064 @menu
4065 * Unread Articles::      Marks for unread articles.
4066 * Read Articles::        Marks for read articles.
4067 * Other Marks::          Marks that do not affect readedness.
4068 @end menu
4069
4070 @ifinfo
4071 There's a plethora of commands for manipulating these marks:
4072 @end ifinfo
4073
4074 @menu
4075 * Setting Marks::           How to set and remove marks.
4076 * Setting Process Marks::   How to mark articles for later processing.
4077 @end menu
4078
4079
4080 @node Unread Articles
4081 @subsection Unread Articles
4082
4083 The following marks mark articles as (kinda) unread, in one form or
4084 other.
4085
4086 @table @samp
4087 @item !
4088 @vindex gnus-ticked-mark
4089 Marked as ticked (@code{gnus-ticked-mark}).
4090
4091 @dfn{Ticked articles} are articles that will remain visible always.  If
4092 you see an article that you find interesting, or you want to put off
4093 reading it, or replying to it, until sometime later, you'd typically
4094 tick it.  However, articles can be expired, so if you want to keep an
4095 article forever, you'll have to make it persistent (@pxref{Persistent
4096 Articles}).
4097
4098 @item ?
4099 @vindex gnus-dormant-mark
4100 Marked as dormant (@code{gnus-dormant-mark}).
4101
4102 @dfn{Dormant articles} will only appear in the summary buffer if there
4103 are followups to it.  If you want to see them even if they don't have
4104 followups, you can use the @kbd{/ D} command (@pxref{Limiting}).
4105
4106 @item SPACE
4107 @vindex gnus-unread-mark
4108 Marked as unread (@code{gnus-unread-mark}).
4109
4110 @dfn{Unread articles} are articles that haven't been read at all yet.
4111 @end table
4112
4113
4114 @node Read Articles
4115 @subsection Read Articles
4116 @cindex expirable mark
4117
4118 All the following marks mark articles as read.
4119
4120 @table @samp
4121
4122 @item r
4123 @vindex gnus-del-mark
4124 These are articles that the user has marked as read with the @kbd{d}
4125 command manually, more or less (@code{gnus-del-mark}).
4126
4127 @item R
4128 @vindex gnus-read-mark
4129 Articles that have actually been read (@code{gnus-read-mark}).
4130
4131 @item O
4132 @vindex gnus-ancient-mark
4133 Articles that were marked as read in previous sessions and are now
4134 @dfn{old} (@code{gnus-ancient-mark}).
4135
4136 @item K
4137 @vindex gnus-killed-mark
4138 Marked as killed (@code{gnus-killed-mark}).
4139
4140 @item X
4141 @vindex gnus-kill-file-mark
4142 Marked as killed by kill files (@code{gnus-kill-file-mark}).
4143
4144 @item Y
4145 @vindex gnus-low-score-mark
4146 Marked as read by having too low a score (@code{gnus-low-score-mark}).
4147
4148 @item C
4149 @vindex gnus-catchup-mark
4150 Marked as read by a catchup (@code{gnus-catchup-mark}).
4151
4152 @item G
4153 @vindex gnus-canceled-mark
4154 Canceled article (@code{gnus-canceled-mark})
4155
4156 @item F
4157 @vindex gnus-souped-mark
4158 @sc{SOUP}ed article (@code{gnus-souped-mark}).  @xref{SOUP}.
4159
4160 @item Q
4161 @vindex gnus-sparse-mark
4162 Sparsely reffed article (@code{gnus-sparse-mark}).  @xref{Customizing
4163 Threading}.
4164
4165 @item M
4166 @vindex gnus-duplicate-mark
4167 Article marked as read by duplicate suppression
4168 (@code{gnus-duplicated-mark}).  @xref{Duplicate Suppression}.
4169
4170 @end table
4171
4172 All these marks just mean that the article is marked as read, really.
4173 They are interpreted differently when doing adaptive scoring, though.
4174
4175 One more special mark, though:
4176
4177 @table @samp
4178 @item E
4179 @vindex gnus-expirable-mark
4180 Marked as expirable (@code{gnus-expirable-mark}).
4181
4182 Marking articles as @dfn{expirable} (or have them marked as such
4183 automatically) doesn't make much sense in normal groups---a user doesn't
4184 control expiring of news articles, but in mail groups, for instance,
4185 articles marked as @dfn{expirable} can be deleted by Gnus at
4186 any time.
4187 @end table
4188
4189
4190 @node Other Marks
4191 @subsection Other Marks
4192 @cindex process mark
4193 @cindex bookmarks
4194
4195 There are some marks that have nothing to do with whether the article is
4196 read or not.
4197
4198 @itemize @bullet
4199
4200 @item
4201 You can set a bookmark in the current article.  Say you are reading a
4202 long thesis on cats' urinary tracts, and have to go home for dinner
4203 before you've finished reading the thesis.  You can then set a bookmark
4204 in the article, and Gnus will jump to this bookmark the next time it
4205 encounters the article.  @xref{Setting Marks}.
4206
4207 @item
4208 @vindex gnus-replied-mark
4209 All articles that you have replied to or made a followup to (i.e., have
4210 answered) will be marked with an @samp{A} in the second column
4211 (@code{gnus-replied-mark}).
4212
4213 @item
4214 @vindex gnus-cached-mark
4215 Articles stored in the article cache will be marked with an @samp{*} in
4216 the second column (@code{gnus-cached-mark}).  @xref{Article Caching}.
4217
4218 @item
4219 @vindex gnus-saved-mark
4220 Articles ``saved'' (in some manner or other; not necessarily
4221 religiously) are marked with an @samp{S} in the second column
4222 (@code{gnus-saved-mark}).
4223
4224 @item
4225 @vindex gnus-not-empty-thread-mark
4226 @vindex gnus-empty-thread-mark
4227 If the @samp{%e} spec is used, the presence of threads or not will be
4228 marked with @code{gnus-not-empty-thread-mark} and
4229 @code{gnus-empty-thread-mark} in the third column, respectively.
4230
4231 @item
4232 @vindex gnus-process-mark
4233 Finally we have the @dfn{process mark} (@code{gnus-process-mark}).  A
4234 variety of commands react to the presence of the process mark.  For
4235 instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
4236 all articles that have been marked with the process mark.  Articles
4237 marked with the process mark have a @samp{#} in the second column.
4238
4239 @end itemize
4240
4241 You might have noticed that most of these ``non-readedness'' marks
4242 appear in the second column by default.  So if you have a cached, saved,
4243 replied article that you have process-marked, what will that look like?
4244
4245 Nothing much.  The precedence rules go as follows: process -> cache ->
4246 replied -> saved.  So if the article is in the cache and is replied,
4247 you'll only see the cache mark and not the replied mark.
4248
4249
4250 @node Setting Marks
4251 @subsection Setting Marks
4252 @cindex setting marks
4253
4254 All the marking commands understand the numeric prefix.
4255
4256 @table @kbd
4257 @item M c
4258 @itemx M-u
4259 @kindex M c (Summary)
4260 @kindex M-u (Summary)
4261 @findex gnus-summary-clear-mark-forward
4262 @cindex mark as unread
4263 Clear all readedness-marks from the current article
4264 (@code{gnus-summary-clear-mark-forward}).  In other words, mark the
4265 article as unread.
4266
4267 @item M t
4268 @itemx !
4269 @kindex ! (Summary)
4270 @kindex M t (Summary)
4271 @findex gnus-summary-tick-article-forward
4272 Tick the current article (@code{gnus-summary-tick-article-forward}).
4273 @xref{Article Caching}.
4274
4275 @item M ?
4276 @itemx ?
4277 @kindex ? (Summary)
4278 @kindex M ? (Summary)
4279 @findex gnus-summary-mark-as-dormant
4280 Mark the current article as dormant
4281 (@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching}.
4282
4283 @item M d
4284 @itemx d
4285 @kindex M d (Summary)
4286 @kindex d (Summary)
4287 @findex gnus-summary-mark-as-read-forward
4288 Mark the current article as read
4289 (@code{gnus-summary-mark-as-read-forward}).
4290
4291 @item D
4292 @kindex D (Summary)
4293 @findex gnus-summary-mark-as-read-backward
4294 Mark the current article as read and move point to the previous line
4295 (@code{gnus-summary-mark-as-read-backward}).
4296
4297 @item M k
4298 @itemx k
4299 @kindex k (Summary)
4300 @kindex M k (Summary)
4301 @findex gnus-summary-kill-same-subject-and-select
4302 Mark all articles that have the same subject as the current one as read,
4303 and then select the next unread article
4304 (@code{gnus-summary-kill-same-subject-and-select}).
4305
4306 @item M K
4307 @itemx C-k
4308 @kindex M K (Summary)
4309 @kindex C-k (Summary)
4310 @findex gnus-summary-kill-same-subject
4311 Mark all articles that have the same subject as the current one as read
4312 (@code{gnus-summary-kill-same-subject}).
4313
4314 @item M C
4315 @kindex M C (Summary)
4316 @findex gnus-summary-catchup
4317 @c @icon{gnus-summary-catchup}
4318 Mark all unread articles as read (@code{gnus-summary-catchup}).
4319
4320 @item M C-c
4321 @kindex M C-c (Summary)
4322 @findex gnus-summary-catchup-all
4323 Mark all articles in the group as read---even the ticked and dormant
4324 articles (@code{gnus-summary-catchup-all}).
4325
4326 @item M H
4327 @kindex M H (Summary)
4328 @findex gnus-summary-catchup-to-here
4329 Catchup the current group to point
4330 (@code{gnus-summary-catchup-to-here}).
4331
4332 @item C-w
4333 @kindex C-w (Summary)
4334 @findex gnus-summary-mark-region-as-read
4335 Mark all articles between point and mark as read
4336 (@code{gnus-summary-mark-region-as-read}).
4337
4338 @item M V k
4339 @kindex M V k (Summary)
4340 @findex gnus-summary-kill-below
4341 Kill all articles with scores below the default score (or below the
4342 numeric prefix) (@code{gnus-summary-kill-below}).
4343
4344 @item M e
4345 @itemx E
4346 @kindex M e (Summary)
4347 @kindex E (Summary)
4348 @findex gnus-summary-mark-as-expirable
4349 Mark the current article as expirable
4350 (@code{gnus-summary-mark-as-expirable}).
4351
4352 @item M b
4353 @kindex M b (Summary)
4354 @findex gnus-summary-set-bookmark
4355 Set a bookmark in the current article
4356 (@code{gnus-summary-set-bookmark}).
4357
4358 @item M B
4359 @kindex M B (Summary)
4360 @findex gnus-summary-remove-bookmark
4361 Remove the bookmark from the current article
4362 (@code{gnus-summary-remove-bookmark}).
4363
4364 @item M V c
4365 @kindex M V c (Summary)
4366 @findex gnus-summary-clear-above
4367 Clear all marks from articles with scores over the default score (or
4368 over the numeric prefix) (@code{gnus-summary-clear-above}).
4369
4370 @item M V u
4371 @kindex M V u (Summary)
4372 @findex gnus-summary-tick-above
4373 Tick all articles with scores over the default score (or over the
4374 numeric prefix) (@code{gnus-summary-tick-above}).
4375
4376 @item M V m
4377 @kindex M V m (Summary)
4378 @findex gnus-summary-mark-above
4379 Prompt for a mark, and mark all articles with scores over the default
4380 score (or over the numeric prefix) with this mark
4381 (@code{gnus-summary-clear-above}).
4382 @end table
4383
4384 @vindex gnus-summary-goto-unread
4385 The @code{gnus-summary-goto-unread} variable controls what action should
4386 be taken after setting a mark.  If non-@code{nil}, point will move to
4387 the next/previous unread article.  If @code{nil}, point will just move
4388 one line up or down.  As a special case, if this variable is
4389 @code{never}, all the marking commands as well as other commands (like
4390 @kbd{SPACE}) will move to the next article, whether it is unread or not.
4391 The default is @code{t}.
4392
4393
4394 @node Setting Process Marks
4395 @subsection Setting Process Marks
4396 @cindex setting process marks
4397
4398 @table @kbd
4399
4400 @item M P p
4401 @itemx #
4402 @kindex # (Summary)
4403 @kindex M P p (Summary)
4404 @findex gnus-summary-mark-as-processable
4405 Mark the current article with the process mark
4406 (@code{gnus-summary-mark-as-processable}).
4407 @findex gnus-summary-unmark-as-processable
4408
4409 @item M P u
4410 @itemx M-#
4411 @kindex M P u (Summary)
4412 @kindex M-# (Summary)
4413 Remove the process mark, if any, from the current article
4414 (@code{gnus-summary-unmark-as-processable}).
4415
4416 @item M P U
4417 @kindex M P U (Summary)
4418 @findex gnus-summary-unmark-all-processable
4419 Remove the process mark from all articles
4420 (@code{gnus-summary-unmark-all-processable}).
4421
4422 @item M P i
4423 @kindex M P i (Summary)
4424 @findex gnus-uu-invert-processable
4425 Invert the list of process marked articles
4426 (@code{gnus-uu-invert-processable}).
4427
4428 @item M P R
4429 @kindex M P R (Summary)
4430 @findex gnus-uu-mark-by-regexp
4431 Mark articles that have a @code{Subject} header that matches a regular
4432 expression (@code{gnus-uu-mark-by-regexp}).
4433
4434 @item M P r
4435 @kindex M P r (Summary)
4436 @findex gnus-uu-mark-region
4437 Mark articles in region (@code{gnus-uu-mark-region}).
4438
4439 @item M P t
4440 @kindex M P t (Summary)
4441 @findex gnus-uu-mark-thread
4442 Mark all articles in the current (sub)thread
4443 (@code{gnus-uu-mark-thread}).
4444
4445 @item M P T
4446 @kindex M P T (Summary)
4447 @findex gnus-uu-unmark-thread
4448 Unmark all articles in the current (sub)thread
4449 (@code{gnus-uu-unmark-thread}).
4450
4451 @item M P v
4452 @kindex M P v (Summary)
4453 @findex gnus-uu-mark-over
4454 Mark all articles that have a score above the prefix argument
4455 (@code{gnus-uu-mark-over}).
4456
4457 @item M P s
4458 @kindex M P s (Summary)
4459 @findex gnus-uu-mark-series
4460 Mark all articles in the current series (@code{gnus-uu-mark-series}).
4461
4462 @item M P S
4463 @kindex M P S (Summary)
4464 @findex gnus-uu-mark-sparse
4465 Mark all series that have already had some articles marked
4466 (@code{gnus-uu-mark-sparse}).
4467
4468 @item M P a
4469 @kindex M P a (Summary)
4470 @findex gnus-uu-mark-all
4471 Mark all articles in series order (@code{gnus-uu-mark-series}).
4472
4473 @item M P b
4474 @kindex M P b (Summary)
4475 @findex gnus-uu-mark-buffer
4476 Mark all articles in the buffer in the order they appear
4477 (@code{gnus-uu-mark-buffer}).
4478
4479 @item M P k
4480 @kindex M P k (Summary)
4481 @findex gnus-summary-kill-process-mark
4482 Push the current process mark set onto the stack and unmark all articles
4483 (@code{gnus-summary-kill-process-mark}).
4484
4485 @item M P y
4486 @kindex M P y (Summary)
4487 @findex gnus-summary-yank-process-mark
4488 Pop the previous process mark set from the stack and restore it
4489 (@code{gnus-summary-yank-process-mark}).
4490
4491 @item M P w
4492 @kindex M P w (Summary)
4493 @findex gnus-summary-save-process-mark
4494 Push the current process mark set onto the stack
4495 (@code{gnus-summary-save-process-mark}).
4496
4497 @end table
4498
4499
4500 @node Limiting
4501 @section Limiting
4502 @cindex limiting
4503
4504 It can be convenient to limit the summary buffer to just show some
4505 subset of the articles currently in the group.  The effect most limit
4506 commands have is to remove a few (or many) articles from the summary
4507 buffer.
4508
4509 All limiting commands work on subsets of the articles already fetched
4510 from the servers.  None of these commands query the server for
4511 additional articles.
4512
4513 @table @kbd
4514
4515 @item / /
4516 @itemx / s
4517 @kindex / / (Summary)
4518 @findex gnus-summary-limit-to-subject
4519 Limit the summary buffer to articles that match some subject
4520 (@code{gnus-summary-limit-to-subject}).
4521
4522 @item / a
4523 @kindex / a (Summary)
4524 @findex gnus-summary-limit-to-author
4525 Limit the summary buffer to articles that match some author
4526 (@code{gnus-summary-limit-to-author}).
4527
4528 @item / u
4529 @itemx x
4530 @kindex / u (Summary)
4531 @kindex x (Summary)
4532 @findex gnus-summary-limit-to-unread
4533 Limit the summary buffer to articles not marked as read
4534 (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
4535 buffer to articles strictly unread.  This means that ticked and
4536 dormant articles will also be excluded.
4537
4538 @item / m
4539 @kindex / m (Summary)
4540 @findex gnus-summary-limit-to-marks
4541 Ask for a mark and then limit to all articles that have been marked
4542 with that mark (@code{gnus-summary-limit-to-marks}).
4543
4544 @item / t
4545 @kindex / t (Summary)
4546 @findex gnus-summary-limit-to-age
4547 Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days
4548 (@code{gnus-summary-limit-to-marks}).  If given a prefix, limit to
4549 articles younger than that number of days.
4550
4551 @item / n
4552 @kindex / n (Summary)
4553 @findex gnus-summary-limit-to-articles
4554 Limit the summary buffer to the current article
4555 (@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
4556 convention (@pxref{Process/Prefix}).
4557
4558 @item / w
4559 @kindex / w (Summary)
4560 @findex gnus-summary-pop-limit
4561 Pop the previous limit off the stack and restore it
4562 (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
4563 the stack.
4564
4565 @item / v
4566 @kindex / v (Summary)
4567 @findex gnus-summary-limit-to-score
4568 Limit the summary buffer to articles that have a score at or above some
4569 score (@code{gnus-summary-limit-to-score}).
4570
4571 @item / E
4572 @itemx M S
4573 @kindex M S (Summary)
4574 @kindex / E (Summary)
4575 @findex gnus-summary-limit-include-expunged
4576 Include all expunged articles in the limit
4577 (@code{gnus-summary-limit-include-expunged}).
4578
4579 @item / D
4580 @kindex / D (Summary)
4581 @findex gnus-summary-limit-include-dormant
4582 Include all dormant articles in the limit
4583 (@code{gnus-summary-limit-include-dormant}).
4584
4585 @item / *
4586 @kindex / * (Summary)
4587 @findex gnus-summary-limit-include-cached
4588 Include all cached articles in the limit
4589 (@code{gnus-summary-limit-include-cached}).
4590
4591 @item / d
4592 @kindex / d (Summary)
4593 @findex gnus-summary-limit-exclude-dormant
4594 Exclude all dormant articles from the limit
4595 (@code{gnus-summary-limit-exclude-dormant}).
4596
4597 @item / T
4598 @kindex / T (Summary)
4599 @findex gnus-summary-limit-include-thread
4600 Include all the articles in the current thread in the limit.
4601
4602 @item / c
4603 @kindex / c (Summary)
4604 @findex gnus-summary-limit-exclude-childless-dormant
4605 Exclude all dormant articles that have no children from the limit
4606 (@code{gnus-summary-limit-exclude-childless-dormant}).
4607
4608 @item / C
4609 @kindex / C (Summary)
4610 @findex gnus-summary-limit-mark-excluded-as-read
4611 Mark all excluded unread articles as read
4612 (@code{gnus-summary-limit-mark-excluded-as-read}).   If given a prefix,
4613 also mark excluded ticked and dormant articles as read.
4614
4615 @end table
4616
4617
4618 @node Threading
4619 @section Threading
4620 @cindex threading
4621 @cindex article threading
4622
4623 Gnus threads articles by default.  @dfn{To thread} is to put responses
4624 to articles directly after the articles they respond to---in a
4625 hierarchical fashion.
4626
4627 Threading is done by looking at the @code{References} headers of the
4628 articles.  In a perfect world, this would be enough to build pretty
4629 trees, but unfortunately, the @code{References} header is often broken
4630 or simply missing.  Weird news propagation excarcerbates the problem,
4631 so one has to employ other heuristics to get pleasing results.  A
4632 plethora of approaches exists, as detailed in horrible detail in
4633 @pxref{Customizing Threading}.
4634
4635 First, a quick overview of the concepts:
4636
4637 @table @dfn
4638 @item root
4639 The top-most article in a thread; the first article in the thread.
4640
4641 @item thread
4642 A tree-like article structure.
4643
4644 @item sub-thread
4645 A small(er) section of this tree-like structure.
4646
4647 @item loose threads
4648 Threads often lose their roots due to article expiry, or due to the root
4649 already having been read in a previous session, and not displayed in the
4650 summary buffer.  We then typically have many sub-threads that really
4651 belong to one thread, but are without connecting roots.  These are
4652 called loose threads.
4653
4654 @item thread gathering
4655 An attempt to gather loose threads into bigger threads.
4656
4657 @item sparse threads
4658 A thread where the missing articles have been ``guessed'' at, and are
4659 displayed as empty lines in the summary buffer.
4660
4661 @end table
4662
4663
4664 @menu
4665 * Customizing Threading::     Variables you can change to affect the threading.
4666 * Thread Commands::           Thread based commands in the summary buffer.
4667 @end menu
4668
4669
4670 @node Customizing Threading
4671 @subsection Customizing Threading
4672 @cindex customizing threading
4673
4674 @menu
4675 * Loose Threads::        How Gnus gathers loose threads into bigger threads.
4676 * Filling In Threads::   Making the threads displayed look fuller.
4677 * More Threading::       Even more variables for fiddling with threads.
4678 * Low-Level Threading::  You thought it was over... but you were wrong!
4679 @end menu
4680
4681
4682 @node Loose Threads
4683 @subsubsection Loose Threads
4684 @cindex <
4685 @cindex >
4686 @cindex loose threads
4687
4688 @table @code
4689 @item gnus-summary-make-false-root
4690 @vindex gnus-summary-make-false-root
4691 If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
4692 and create a dummy root at the top.  (Wait a minute.  Root at the top?
4693 Yup.)  Loose subtrees occur when the real root has expired, or you've
4694 read or killed the root in a previous session.
4695
4696 When there is no real root of a thread, Gnus will have to fudge
4697 something.  This variable says what fudging method Gnus should use.
4698 There are four possible values:
4699
4700 @iftex
4701 @iflatex
4702 \gnusfigure{The Summary Buffer}{390}{
4703 \put(0,0){\epsfig{figure=tmp/summary-adopt.ps,width=7.5cm}}
4704 \put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-empty.ps,width=7.5cm}}}
4705 \put(0,400){\makebox(0,0)[tl]{\epsfig{figure=tmp/summary-none.ps,width=7.5cm}}}
4706 \put(445,400){\makebox(0,0)[tr]{\epsfig{figure=tmp/summary-dummy.ps,width=7.5cm}}}
4707 }
4708 @end iflatex
4709 @end iftex
4710
4711 @cindex adopting articles
4712
4713 @table @code
4714
4715 @item adopt
4716 Gnus will make the first of the orphaned articles the parent.  This
4717 parent will adopt all the other articles.  The adopted articles will be
4718 marked as such by pointy brackets (@samp{<>}) instead of the standard
4719 square brackets (@samp{[]}).  This is the default method.
4720
4721 @item dummy
4722 @vindex gnus-summary-dummy-line-format
4723 Gnus will create a dummy summary line that will pretend to be the
4724 parent.  This dummy line does not correspond to any real article, so
4725 selecting it will just select the first real article after the dummy
4726 article.  @code{gnus-summary-dummy-line-format} is used to specify the
4727 format of the dummy roots.  It accepts only one format spec:  @samp{S},
4728 which is the subject of the article.  @xref{Formatting Variables}.
4729
4730 @item empty
4731 Gnus won't actually make any article the parent, but simply leave the
4732 subject field of all orphans except the first empty.  (Actually, it will
4733 use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
4734 Buffer Format}).)
4735
4736 @item none
4737 Don't make any article parent at all.  Just gather the threads and
4738 display them after one another.
4739
4740 @item nil
4741 Don't gather loose threads.
4742 @end table
4743
4744 @item gnus-summary-gather-subject-limit
4745 @vindex gnus-summary-gather-subject-limit
4746 Loose threads are gathered by comparing subjects of articles.  If this
4747 variable is @code{nil}, Gnus requires an exact match between the
4748 subjects of the loose threads before gathering them into one big
4749 super-thread.  This might be too strict a requirement, what with the
4750 presence of stupid newsreaders that chop off long subject lines.  If
4751 you think so, set this variable to, say, 20 to require that only the
4752 first 20 characters of the subjects have to match.  If you set this
4753 variable to a really low number, you'll find that Gnus will gather
4754 everything in sight into one thread, which isn't very helpful.
4755
4756 @cindex fuzzy article gathering
4757 If you set this variable to the special value @code{fuzzy}, Gnus will
4758 use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
4759 Matching}).
4760
4761 @item gnus-simplify-subject-fuzzy-regexp
4762 @vindex gnus-simplify-subject-fuzzy-regexp
4763 This can either be a regular expression or list of regular expressions
4764 that match strings that will be removed from subjects if fuzzy subject
4765 simplification is used.
4766
4767 @item gnus-simplify-ignored-prefixes
4768 @vindex gnus-simplify-ignored-prefixes
4769 If you set @code{gnus-summary-gather-subject-limit} to something as low
4770 as 10, you might consider setting this variable to something sensible:
4771
4772 @c Written by Michael Ernst <mernst@cs.rice.edu>
4773 @lisp
4774 (setq gnus-simplify-ignored-prefixes
4775       (concat
4776        "\\`\\[?\\("
4777        (mapconcat
4778         'identity
4779         '("looking"
4780           "wanted" "followup" "summary\\( of\\)?"
4781           "help" "query" "problem" "question"
4782           "answer" "reference" "announce"
4783           "How can I" "How to" "Comparison of"
4784           ;; ...
4785           )
4786         "\\|")
4787        "\\)\\s *\\("
4788        (mapconcat 'identity
4789                   '("for" "for reference" "with" "about")
4790                   "\\|")
4791        "\\)?\\]?:?[ \t]*"))
4792 @end lisp
4793
4794 All words that match this regexp will be removed before comparing two
4795 subjects.
4796
4797 @item gnus-simplify-subject-functions
4798 @vindex gnus-simplify-subject-functions
4799 If non-@code{nil}, this variable overrides
4800 @code{gnus-summary-gather-subject-limit}.  This variable should be a
4801 list of functions to apply to the @code{Subject} string iteratively to
4802 arrive at the simplified version of the string.
4803
4804 Useful functions to put in this list include:
4805
4806 @table @code
4807 @item gnus-simplify-subject-re
4808 @findex gnus-simplify-subject-re
4809 Strip the leading @samp{Re:}.
4810
4811 @item gnus-simplify-subject-fuzzy
4812 @findex gnus-simplify-subject-fuzzy
4813 Simplify fuzzily.
4814
4815 @item gnus-simplify-whitespace
4816 @findex gnus-simplify-whitespace
4817 Remove excessive whitespace.
4818 @end table
4819
4820 You may also write your own functions, of course.
4821
4822
4823 @item gnus-summary-gather-exclude-subject
4824 @vindex gnus-summary-gather-exclude-subject
4825 Since loose thread gathering is done on subjects only, that might lead
4826 to many false hits, especially with certain common subjects like
4827 @samp{} and @samp{(none)}.  To make the situation slightly better,
4828 you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
4829 what subjects should be excluded from the gathering process.@*
4830 The default is @samp{^ *$\\|^(none)$}.
4831
4832 @item gnus-summary-thread-gathering-function
4833 @vindex gnus-summary-thread-gathering-function
4834 Gnus gathers threads by looking at @code{Subject} headers.  This means
4835 that totally unrelated articles may end up in the same ``thread'', which
4836 is confusing.  An alternate approach is to look at all the
4837 @code{Message-ID}s in all the @code{References} headers to find matches.
4838 This will ensure that no gathered threads ever include unrelated
4839 articles, but it also means that people who have posted with broken
4840 newsreaders won't be gathered properly.  The choice is yours---plague or
4841 cholera:
4842
4843 @table @code
4844 @item gnus-gather-threads-by-subject
4845 @findex gnus-gather-threads-by-subject
4846 This function is the default gathering function and looks at
4847 @code{Subject}s exclusively.
4848
4849 @item gnus-gather-threads-by-references
4850 @findex gnus-gather-threads-by-references
4851 This function looks at @code{References} headers exclusively.
4852 @end table
4853
4854 If you want to test gathering by @code{References}, you could say
4855 something like:
4856
4857 @lisp
4858 (setq gnus-summary-thread-gathering-function
4859       'gnus-gather-threads-by-references)
4860 @end lisp
4861
4862 @end table
4863
4864
4865 @node Filling In Threads
4866 @subsubsection Filling In Threads
4867
4868 @table @code
4869 @item gnus-fetch-old-headers
4870 @vindex gnus-fetch-old-headers
4871 If non-@code{nil}, Gnus will attempt to build old threads by fetching
4872 more old headers---headers to articles marked as read.  If you
4873 would like to display as few summary lines as possible, but still
4874 connect as many loose threads as possible, you should set this variable
4875 to @code{some} or a number.  If you set it to a number, no more than
4876 that number of extra old headers will be fetched.  In either case,
4877 fetching old headers only works if the backend you are using carries
4878 overview files---this would normally be @code{nntp}, @code{nnspool} and
4879 @code{nnml}.  Also remember that if the root of the thread has been
4880 expired by the server, there's not much Gnus can do about that.
4881
4882 This variable can also be set to @code{invisible}.  This won't have any
4883 visible effects, but is useful if you use the @kbd{A T} command a lot
4884 (@pxref{Finding the Parent}).
4885
4886 @item gnus-build-sparse-threads
4887 @vindex gnus-build-sparse-threads
4888 Fetching old headers can be slow.  A low-rent similar effect can be
4889 gotten by setting this variable to @code{some}.  Gnus will then look at
4890 the complete @code{References} headers of all articles and try to string
4891 together articles that belong in the same thread.  This will leave
4892 @dfn{gaps} in the threading display where Gnus guesses that an article
4893 is missing from the thread.  (These gaps appear like normal summary
4894 lines.  If you select a gap, Gnus will try to fetch the article in
4895 question.)  If this variable is @code{t}, Gnus will display all these
4896 ``gaps'' without regard for whether they are useful for completing the
4897 thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
4898 off sparse leaf nodes that don't lead anywhere.  This variable is
4899 @code{nil} by default.
4900
4901 @end table
4902
4903
4904 @node More Threading
4905 @subsubsection More Threading
4906
4907 @table @code
4908 @item gnus-show-threads
4909 @vindex gnus-show-threads
4910 If this variable is @code{nil}, no threading will be done, and all of
4911 the rest of the variables here will have no effect.  Turning threading
4912 off will speed group selection up a bit, but it is sure to make reading
4913 slower and more awkward.
4914
4915 @item gnus-thread-hide-subtree
4916 @vindex gnus-thread-hide-subtree
4917 If non-@code{nil}, all threads will be hidden when the summary buffer is
4918 generated.
4919
4920 @item gnus-thread-expunge-below
4921 @vindex gnus-thread-expunge-below
4922 All threads that have a total score (as defined by
4923 @code{gnus-thread-score-function}) less than this number will be
4924 expunged.  This variable is @code{nil} by default, which means that no
4925 threads are expunged.
4926
4927 @item gnus-thread-hide-killed
4928 @vindex gnus-thread-hide-killed
4929 if you kill a thread and this variable is non-@code{nil}, the subtree
4930 will be hidden.
4931
4932 @item gnus-thread-ignore-subject
4933 @vindex gnus-thread-ignore-subject
4934 Sometimes somebody changes the subject in the middle of a thread.  If
4935 this variable is non-@code{nil}, the subject change is ignored.  If it
4936 is @code{nil}, which is the default, a change in the subject will result
4937 in a new thread.
4938
4939 @item gnus-thread-indent-level
4940 @vindex gnus-thread-indent-level
4941 This is a number that says how much each sub-thread should be indented.
4942 The default is 4.
4943
4944 @end table
4945
4946
4947 @node Low-Level Threading
4948 @subsubsection Low-Level Threading
4949
4950 @table @code
4951
4952 @item gnus-parse-headers-hook
4953 @vindex gnus-parse-headers-hook
4954 Hook run before parsing any headers.
4955
4956 @item gnus-alter-header-function
4957 @vindex gnus-alter-header-function
4958 If non-@code{nil}, this function will be called to allow alteration of
4959 article header structures.  The function is called with one parameter,
4960 the article header vector, which it may alter in any way.  For instance,
4961 if you have a mail-to-news gateway which alters the @code{Message-ID}s
4962 in systematic ways (by adding prefixes and such), you can use this
4963 variable to un-scramble the @code{Message-ID}s so that they are more
4964 meaningful.  Here's one example:
4965
4966 @lisp
4967 (setq gnus-alter-header-function 'my-alter-message-id)
4968
4969 (defun my-alter-message-id (header)
4970   (let ((id (mail-header-id header)))
4971     (when (string-match
4972            "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
4973       (mail-header-set-id
4974        (concat (match-string 1 id) "@@" (match-string 2 id))
4975        header))))
4976 @end lisp
4977
4978 @end table
4979
4980
4981 @node Thread Commands
4982 @subsection Thread Commands
4983 @cindex thread commands
4984
4985 @table @kbd
4986
4987 @item T k
4988 @itemx M-C-k
4989 @kindex T k (Summary)
4990 @kindex M-C-k (Summary)
4991 @findex gnus-summary-kill-thread
4992 Mark all articles in the current (sub-)thread as read
4993 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
4994 remove all marks instead.  If the prefix argument is negative, tick
4995 articles instead.
4996
4997 @item T l
4998 @itemx M-C-l
4999 @kindex T l (Summary)
5000 @kindex M-C-l (Summary)
5001 @findex gnus-summary-lower-thread
5002 Lower the score of the current (sub-)thread
5003 (@code{gnus-summary-lower-thread}).
5004
5005 @item T i
5006 @kindex T i (Summary)
5007 @findex gnus-summary-raise-thread
5008 Increase the score of the current (sub-)thread
5009 (@code{gnus-summary-raise-thread}).
5010
5011 @item T #
5012 @kindex T # (Summary)
5013 @findex gnus-uu-mark-thread
5014 Set the process mark on the current (sub-)thread
5015 (@code{gnus-uu-mark-thread}).
5016
5017 @item T M-#
5018 @kindex T M-# (Summary)
5019 @findex gnus-uu-unmark-thread
5020 Remove the process mark from the current (sub-)thread
5021 (@code{gnus-uu-unmark-thread}).
5022
5023 @item T T
5024 @kindex T T (Summary)
5025 @findex gnus-summary-toggle-threads
5026 Toggle threading (@code{gnus-summary-toggle-threads}).
5027
5028 @item T s
5029 @kindex T s (Summary)
5030 @findex gnus-summary-show-thread
5031 Expose the (sub-)thread hidden under the current article, if any
5032 (@code{gnus-summary-show-thread}).
5033
5034 @item T h
5035 @kindex T h (Summary)
5036 @findex gnus-summary-hide-thread
5037 Hide the current (sub-)thread (@code{gnus-summary-hide-thread}).
5038
5039 @item T S
5040 @kindex T S (Summary)
5041 @findex gnus-summary-show-all-threads
5042 Expose all hidden threads (@code{gnus-summary-show-all-threads}).
5043
5044 @item T H
5045 @kindex T H (Summary)
5046 @findex gnus-summary-hide-all-threads
5047 Hide all threads (@code{gnus-summary-hide-all-threads}).
5048
5049 @item T t
5050 @kindex T t (Summary)
5051 @findex gnus-summary-rethread-current
5052 Re-thread the current article's thread
5053 (@code{gnus-summary-rethread-current}).  This works even when the
5054 summary buffer is otherwise unthreaded.
5055
5056 @item T ^
5057 @kindex T ^ (Summary)
5058 @findex gnus-summary-reparent-thread
5059 Make the current article the child of the marked (or previous) article
5060 (@code{gnus-summary-reparent-thread}).
5061
5062 @end table
5063
5064 The following commands are thread movement commands.  They all
5065 understand the numeric prefix.
5066
5067 @table @kbd
5068
5069 @item T n
5070 @kindex T n (Summary)
5071 @findex gnus-summary-next-thread
5072 Go to the next thread (@code{gnus-summary-next-thread}).
5073
5074 @item T p
5075 @kindex T p (Summary)
5076 @findex gnus-summary-prev-thread
5077 Go to the previous thread (@code{gnus-summary-prev-thread}).
5078
5079 @item T d
5080 @kindex T d (Summary)
5081 @findex gnus-summary-down-thread
5082 Descend the thread (@code{gnus-summary-down-thread}).
5083
5084 @item T u
5085 @kindex T u (Summary)
5086 @findex gnus-summary-up-thread
5087 Ascend the thread (@code{gnus-summary-up-thread}).
5088
5089 @item T o
5090 @kindex T o (Summary)
5091 @findex gnus-summary-top-thread
5092 Go to the top of the thread (@code{gnus-summary-top-thread}).
5093 @end table
5094
5095 @vindex gnus-thread-operation-ignore-subject
5096 If you ignore subject while threading, you'll naturally end up with
5097 threads that have several different subjects in them.  If you then issue
5098 a command like `T k' (@code{gnus-summary-kill-thread}) you might not
5099 wish to kill the entire thread, but just those parts of the thread that
5100 have the same subject as the current article.  If you like this idea,
5101 you can fiddle with @code{gnus-thread-operation-ignore-subject}.  If it
5102 is non-@code{nil} (which it is by default), subjects will be ignored
5103 when doing thread commands.  If this variable is @code{nil}, articles in
5104 the same thread with different subjects will not be included in the
5105 operation in question.  If this variable is @code{fuzzy}, only articles
5106 that have subjects fuzzily equal will be included (@pxref{Fuzzy
5107 Matching}).
5108
5109
5110 @node Sorting
5111 @section Sorting
5112
5113 @findex gnus-thread-sort-by-total-score
5114 @findex gnus-thread-sort-by-date
5115 @findex gnus-thread-sort-by-score
5116 @findex gnus-thread-sort-by-subject
5117 @findex gnus-thread-sort-by-author
5118 @findex gnus-thread-sort-by-number
5119 @vindex gnus-thread-sort-functions
5120 If you are using a threaded summary display, you can sort the threads by
5121 setting @code{gnus-thread-sort-functions}, which is a list of functions.
5122 By default, sorting is done on article numbers.  Ready-made sorting
5123 predicate functions include @code{gnus-thread-sort-by-number},
5124 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
5125 @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
5126 @code{gnus-thread-sort-by-total-score}.
5127
5128 Each function takes two threads and returns non-@code{nil} if the first
5129 thread should be sorted before the other.  Note that sorting really is
5130 normally done by looking only at the roots of each thread.  If you use
5131 more than one function, the primary sort key should be the last function
5132 in the list.  You should probably always include
5133 @code{gnus-thread-sort-by-number} in the list of sorting
5134 functions---preferably first.  This will ensure that threads that are
5135 equal with respect to the other sort criteria will be displayed in
5136 ascending article order.
5137
5138 If you would like to sort by score, then by subject, and finally by
5139 number, you could do something like:
5140
5141 @lisp
5142 (setq gnus-thread-sort-functions
5143       '(gnus-thread-sort-by-number
5144         gnus-thread-sort-by-subject
5145         gnus-thread-sort-by-total-score))
5146 @end lisp
5147
5148 The threads that have highest score will be displayed first in the
5149 summary buffer.  When threads have the same score, they will be sorted
5150 alphabetically.  The threads that have the same score and the same
5151 subject will be sorted by number, which is (normally) the sequence in
5152 which the articles arrived.
5153
5154 If you want to sort by score and then reverse arrival order, you could
5155 say something like:
5156
5157 @lisp
5158 (setq gnus-thread-sort-functions
5159       '((lambda (t1 t2)
5160           (not (gnus-thread-sort-by-number t1 t2)))
5161         gnus-thread-sort-by-score))
5162 @end lisp
5163
5164 @vindex gnus-thread-score-function
5165 The function in the @code{gnus-thread-score-function} variable (default
5166 @code{+}) is used for calculating the total score of a thread.  Useful
5167 functions might be @code{max}, @code{min}, or squared means, or whatever
5168 tickles your fancy.
5169
5170 @findex gnus-article-sort-functions
5171 @findex gnus-article-sort-by-date
5172 @findex gnus-article-sort-by-score
5173 @findex gnus-article-sort-by-subject
5174 @findex gnus-article-sort-by-author
5175 @findex gnus-article-sort-by-number
5176 If you are using an unthreaded display for some strange reason or other,
5177 you have to fiddle with the @code{gnus-article-sort-functions} variable.
5178 It is very similar to the @code{gnus-thread-sort-functions}, except that
5179 it uses slightly different functions for article comparison.  Available
5180 sorting predicate functions are @code{gnus-article-sort-by-number},
5181 @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject},
5182 @code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}.
5183
5184 If you want to sort an unthreaded summary display by subject, you could
5185 say something like:
5186
5187 @lisp
5188 (setq gnus-article-sort-functions
5189       '(gnus-article-sort-by-number
5190         gnus-article-sort-by-subject))
5191 @end lisp
5192
5193
5194
5195 @node Asynchronous Fetching
5196 @section Asynchronous Article Fetching
5197 @cindex asynchronous article fetching
5198 @cindex article pre-fetch
5199 @cindex pre-fetch
5200
5201 If you read your news from an @sc{nntp} server that's far away, the
5202 network latencies may make reading articles a chore.  You have to wait
5203 for a while after pressing @kbd{n} to go to the next article before the
5204 article appears.  Why can't Gnus just go ahead and fetch the article
5205 while you are reading the previous one?  Why not, indeed.
5206
5207 First, some caveats.  There are some pitfalls to using asynchronous
5208 article fetching, especially the way Gnus does it.
5209
5210 Let's say you are reading article 1, which is short, and article 2 is
5211 quite long, and you are not interested in reading that.  Gnus does not
5212 know this, so it goes ahead and fetches article 2.  You decide to read
5213 article 3, but since Gnus is in the process of fetching article 2, the
5214 connection is blocked.
5215
5216 To avoid these situations, Gnus will open two (count 'em two)
5217 connections to the server.  Some people may think this isn't a very nice
5218 thing to do, but I don't see any real alternatives.  Setting up that
5219 extra connection takes some time, so Gnus startup will be slower.
5220
5221 Gnus will fetch more articles than you will read.  This will mean that
5222 the link between your machine and the @sc{nntp} server will become more
5223 loaded than if you didn't use article pre-fetch.  The server itself will
5224 also become more loaded---both with the extra article requests, and the
5225 extra connection.
5226
5227 Ok, so now you know that you shouldn't really use this thing...  unless
5228 you really want to.
5229
5230 @vindex gnus-asynchronous
5231 Here's how:  Set @code{gnus-asynchronous} to @code{t}.  The rest should
5232 happen automatically.
5233
5234 @vindex gnus-use-article-prefetch
5235 You can control how many articles are to be pre-fetched by setting
5236 @code{gnus-use-article-prefetch}.  This is 30 by default, which means
5237 that when you read an article in the group, the backend will pre-fetch
5238 the next 30 articles.  If this variable is @code{t}, the backend will
5239 pre-fetch all the articles it can without bound.  If it is
5240 @code{nil}, no pre-fetching will be done.
5241
5242 @vindex gnus-async-prefetch-article-p
5243 @findex gnus-async-read-p
5244 There are probably some articles that you don't want to pre-fetch---read
5245 articles, for instance.  The @code{gnus-async-prefetch-article-p} variable controls whether an article is to be pre-fetched.  This function should
5246 return non-@code{nil} when the article in question is to be
5247 pre-fetched.  The default is @code{gnus-async-read-p}, which returns
5248 @code{nil} on read articles.  The function is called with an article
5249 data structure as the only parameter.
5250
5251 If, for instance, you wish to pre-fetch only unread articles shorter than 100 lines, you could say something like:
5252
5253 @lisp
5254 (defun my-async-short-unread-p (data)
5255   "Return non-nil for short, unread articles."
5256   (and (gnus-data-unread-p data)
5257        (< (mail-header-lines (gnus-data-header data))
5258           100)))
5259
5260 (setq gnus-async-prefetch-article-p 'my-async-short-unread-p)
5261 @end lisp
5262
5263 These functions will be called many, many times, so they should
5264 preferably be short and sweet to avoid slowing down Gnus too much.
5265 It's probably a good idea to byte-compile things like this.
5266
5267 @vindex gnus-prefetched-article-deletion-strategy
5268 Articles have to be removed from the asynch buffer sooner or later.  The
5269 @code{gnus-prefetched-article-deletion-strategy} says when to remove
5270 articles.  This is a list that may contain the following elements:
5271
5272 @table @code
5273 @item read
5274 Remove articles when they are read.
5275
5276 @item exit
5277 Remove articles when exiting the group.
5278 @end table
5279
5280 The default value is @code{(read exit)}.
5281
5282 @c @vindex gnus-use-header-prefetch
5283 @c If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles
5284 @c from the next group.
5285
5286
5287 @node Article Caching
5288 @section Article Caching
5289 @cindex article caching
5290 @cindex caching
5291
5292 If you have an @emph{extremely} slow @sc{nntp} connection, you may
5293 consider turning article caching on.  Each article will then be stored
5294 locally under your home directory.  As you may surmise, this could
5295 potentially use @emph{huge} amounts of disk space, as well as eat up all
5296 your inodes so fast it will make your head swim.  In vodka.
5297
5298 Used carefully, though, it could be just an easier way to save articles.
5299
5300 @vindex gnus-use-long-file-name
5301 @vindex gnus-cache-directory
5302 @vindex gnus-use-cache
5303 To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
5304 all articles ticked or marked as dormant will then be copied
5305 over to your local cache (@code{gnus-cache-directory}).  Whether this
5306 cache is flat or hierarchal is controlled by the
5307 @code{gnus-use-long-file-name} variable, as usual.
5308
5309 When re-selecting a ticked or dormant article, it will be fetched from the
5310 cache instead of from the server.  As articles in your cache will never
5311 expire, this might serve as a method of saving articles while still
5312 keeping them where they belong.  Just mark all articles you want to save
5313 as dormant, and don't worry.
5314
5315 When an article is marked as read, is it removed from the cache.
5316
5317 @vindex gnus-cache-remove-articles
5318 @vindex gnus-cache-enter-articles
5319 The entering/removal of articles from the cache is controlled by the
5320 @code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
5321 variables.  Both are lists of symbols.  The first is @code{(ticked
5322 dormant)} by default, meaning that ticked and dormant articles will be
5323 put in the cache.  The latter is @code{(read)} by default, meaning that
5324 articles marked as read are removed from the cache.  Possibly
5325 symbols in these two lists are @code{ticked}, @code{dormant},
5326 @code{unread} and @code{read}.
5327
5328 @findex gnus-jog-cache
5329 So where does the massive article-fetching and storing come into the
5330 picture?  The @code{gnus-jog-cache} command will go through all
5331 subscribed newsgroups, request all unread articles, score them, and
5332 store them in the cache.  You should only ever, ever ever ever, use this
5333 command if 1) your connection to the @sc{nntp} server is really, really,
5334 really slow and 2) you have a really, really, really huge disk.
5335 Seriously.  One way to cut down on the number of articles downloaded is
5336 to score unwanted articles down and have them marked as read.  They will
5337 not then be downloaded by this command.
5338
5339 @vindex gnus-uncacheable-groups
5340 @vindex gnus-cacheable-groups
5341 It is likely that you do not want caching on all groups.  For instance,
5342 if your @code{nnml} mail is located under your home directory, it makes no
5343 sense to cache it somewhere else under your home directory.  Unless you
5344 feel that it's neat to use twice as much space.  
5345
5346 To limit the caching, you could set @code{gnus-cacheable-groups} to a
5347 regexp of groups to cache, @samp{^nntp} for instance, or set the
5348 @code{gnus-uncacheable-groups} regexp to @samp{^nnml}, for instance.
5349 Both variables are @code{nil} by default. If a group matches both
5350 variables, the group is not cached.
5351
5352 @findex gnus-cache-generate-nov-databases
5353 @findex gnus-cache-generate-active
5354 @vindex gnus-cache-active-file
5355 The cache stores information on what articles it contains in its active
5356 file (@code{gnus-cache-active-file}).  If this file (or any other parts
5357 of the cache) becomes all messed up for some reason or other, Gnus
5358 offers two functions that will try to set things right.  @kbd{M-x
5359 gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
5360 files, and @kbd{gnus-cache-generate-active} will (re)generate the active
5361 file.
5362
5363
5364 @node Persistent Articles
5365 @section Persistent Articles
5366 @cindex persistent articles
5367
5368 Closely related to article caching, we have @dfn{persistent articles}.
5369 In fact, it's just a different way of looking at caching, and much more
5370 useful in my opinion.
5371
5372 Say you're reading a newsgroup, and you happen on to some valuable gem
5373 that you want to keep and treasure forever.  You'd normally just save it
5374 (using one of the many saving commands) in some file.  The problem with
5375 that is that it's just, well, yucky.  Ideally you'd prefer just having
5376 the article remain in the group where you found it forever; untouched by
5377 the expiry going on at the news server.
5378
5379 This is what a @dfn{persistent article} is---an article that just won't
5380 be deleted.  It's implemented using the normal cache functions, but
5381 you use two explicit commands for managing persistent articles:
5382
5383 @table @kbd
5384
5385 @item *
5386 @kindex * (Summary)
5387 @findex gnus-cache-enter-article
5388 Make the current article persistent (@code{gnus-cache-enter-article}).
5389
5390 @item M-*
5391 @kindex M-* (Summary)
5392 @findex gnus-cache-remove-article
5393 Remove the current article from the persistent articles
5394 (@code{gnus-cache-remove-article}).  This will normally delete the
5395 article.
5396 @end table
5397
5398 Both these commands understand the process/prefix convention.
5399
5400 To avoid having all ticked articles (and stuff) entered into the cache,
5401 you should set @code{gnus-use-cache} to @code{passive} if you're just
5402 interested in persistent articles:
5403
5404 @lisp
5405 (setq gnus-use-cache 'passive)
5406 @end lisp
5407
5408
5409 @node Article Backlog
5410 @section Article Backlog
5411 @cindex backlog
5412 @cindex article backlog
5413
5414 If you have a slow connection, but the idea of using caching seems
5415 unappealing to you (and it is, really), you can help the situation some
5416 by switching on the @dfn{backlog}.  This is where Gnus will buffer
5417 already read articles so that it doesn't have to re-fetch articles
5418 you've already read.  This only helps if you are in the habit of
5419 re-selecting articles you've recently read, of course.  If you never do
5420 that, turning the backlog on will slow Gnus down a little bit, and
5421 increase memory usage some.
5422
5423 @vindex gnus-keep-backlog
5424 If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
5425 at most @var{n} old articles in a buffer for later re-fetching.  If this
5426 variable is non-@code{nil} and is not a number, Gnus will store
5427 @emph{all} read articles, which means that your Emacs will grow without
5428 bound before exploding and taking your machine down with you.  I put
5429 that in there just to keep y'all on your toes.
5430
5431 This variable is @code{nil} by default.
5432
5433
5434 @node Saving Articles
5435 @section Saving Articles
5436 @cindex saving articles
5437
5438 Gnus can save articles in a number of ways.  Below is the documentation
5439 for saving articles in a fairly straight-forward fashion (i.e., little
5440 processing of the article is done before it is saved).  For a different
5441 approach (uudecoding, unsharing) you should use @code{gnus-uu}
5442 (@pxref{Decoding Articles}).
5443
5444 @vindex gnus-save-all-headers
5445 If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
5446 unwanted headers before saving the article.
5447
5448 @vindex gnus-saved-headers
5449 If the preceding variable is @code{nil}, all headers that match the
5450 @code{gnus-saved-headers} regexp will be kept, while the rest will be
5451 deleted before saving.
5452
5453 @table @kbd
5454
5455 @item O o
5456 @itemx o
5457 @kindex O o (Summary)
5458 @kindex o (Summary)
5459 @findex gnus-summary-save-article
5460 @c @icon{gnus-summary-save-article}
5461 Save the current article using the default article saver
5462 (@code{gnus-summary-save-article}).
5463
5464 @item O m
5465 @kindex O m (Summary)
5466 @findex gnus-summary-save-article-mail
5467 Save the current article in mail format
5468 (@code{gnus-summary-save-article-mail}).
5469
5470 @item O r
5471 @kindex O r (Summary)
5472 @findex gnus-summary-save-article-rmail
5473 Save the current article in rmail format
5474 (@code{gnus-summary-save-article-rmail}).
5475
5476 @item O f
5477 @kindex O f (Summary)
5478 @findex gnus-summary-save-article-file
5479 @c @icon{gnus-summary-save-article-file}
5480 Save the current article in plain file format
5481 (@code{gnus-summary-save-article-file}).
5482
5483 @item O F
5484 @kindex O F (Summary)
5485 @findex gnus-summary-write-article-file
5486 Write the current article in plain file format, overwriting any previous
5487 file contents (@code{gnus-summary-write-article-file}).
5488
5489 @item O b
5490 @kindex O b (Summary)
5491 @findex gnus-summary-save-article-body-file
5492 Save the current article body in plain file format
5493 (@code{gnus-summary-save-article-body-file}).
5494
5495 @item O h
5496 @kindex O h (Summary)
5497 @findex gnus-summary-save-article-folder
5498 Save the current article in mh folder format
5499 (@code{gnus-summary-save-article-folder}).
5500
5501 @item O v
5502 @kindex O v (Summary)
5503 @findex gnus-summary-save-article-vm
5504 Save the current article in a VM folder
5505 (@code{gnus-summary-save-article-vm}).
5506
5507 @item O p
5508 @kindex O p (Summary)
5509 @findex gnus-summary-pipe-output
5510 Save the current article in a pipe.  Uhm, like, what I mean is---Pipe
5511 the current article to a process (@code{gnus-summary-pipe-output}).
5512 @end table
5513
5514 @vindex gnus-prompt-before-saving
5515 All these commands use the process/prefix convention
5516 (@pxref{Process/Prefix}).  If you save bunches of articles using these
5517 functions, you might get tired of being prompted for files to save each
5518 and every article in.  The prompting action is controlled by
5519 the @code{gnus-prompt-before-saving} variable, which is @code{always} by
5520 default, giving you that excessive prompting action you know and
5521 loathe.  If you set this variable to @code{t} instead, you'll be prompted
5522 just once for each series of articles you save.  If you like to really
5523 have Gnus do all your thinking for you, you can even set this variable
5524 to @code{nil}, which means that you will never be prompted for files to
5525 save articles in.  Gnus will simply save all the articles in the default
5526 files.
5527
5528
5529 @vindex gnus-default-article-saver
5530 You can customize the @code{gnus-default-article-saver} variable to make
5531 Gnus do what you want it to.  You can use any of the six ready-made
5532 functions below, or you can create your own.
5533
5534 @table @code
5535
5536 @item gnus-summary-save-in-rmail
5537 @findex gnus-summary-save-in-rmail
5538 @vindex gnus-rmail-save-name
5539 @findex gnus-plain-save-name
5540 This is the default format, @dfn{babyl}.  Uses the function in the
5541 @code{gnus-rmail-save-name} variable to get a file name to save the
5542 article in.  The default is @code{gnus-plain-save-name}.
5543
5544 @item gnus-summary-save-in-mail
5545 @findex gnus-summary-save-in-mail
5546 @vindex gnus-mail-save-name
5547 Save in a Unix mail (mbox) file.  Uses the function in the
5548 @code{gnus-mail-save-name} variable to get a file name to save the
5549 article in.  The default is @code{gnus-plain-save-name}.
5550
5551 @item gnus-summary-save-in-file
5552 @findex gnus-summary-save-in-file
5553 @vindex gnus-file-save-name
5554 @findex gnus-numeric-save-name
5555 Append the article straight to an ordinary file.  Uses the function in
5556 the @code{gnus-file-save-name} variable to get a file name to save the
5557 article in.  The default is @code{gnus-numeric-save-name}.
5558
5559 @item gnus-summary-save-body-in-file
5560 @findex gnus-summary-save-body-in-file
5561 Append the article body to an ordinary file.  Uses the function in the
5562 @code{gnus-file-save-name} variable to get a file name to save the
5563 article in.  The default is @code{gnus-numeric-save-name}.
5564
5565 @item gnus-summary-save-in-folder
5566 @findex gnus-summary-save-in-folder
5567 @findex gnus-folder-save-name
5568 @findex gnus-Folder-save-name
5569 @vindex gnus-folder-save-name
5570 @cindex rcvstore
5571 @cindex MH folders
5572 Save the article to an MH folder using @code{rcvstore} from the MH
5573 library.  Uses the function in the @code{gnus-folder-save-name} variable
5574 to get a file name to save the article in.  The default is
5575 @code{gnus-folder-save-name}, but you can also use
5576 @code{gnus-Folder-save-name}, which creates capitalized names.
5577
5578 @item gnus-summary-save-in-vm
5579 @findex gnus-summary-save-in-vm
5580 Save the article in a VM folder.  You have to have the VM mail
5581 reader to use this setting.
5582 @end table
5583
5584 @vindex gnus-article-save-directory
5585 All of these functions, except for the last one, will save the article
5586 in the @code{gnus-article-save-directory}, which is initialized from the
5587 @code{SAVEDIR} environment variable.  This is @file{~/News/} by
5588 default.
5589
5590 As you can see above, the functions use different functions to find a
5591 suitable name of a file to save the article in.  Below is a list of
5592 available functions that generate names:
5593
5594 @table @code
5595
5596 @item gnus-Numeric-save-name
5597 @findex gnus-Numeric-save-name
5598 File names like @file{~/News/Alt.andrea-dworkin/45}.
5599
5600 @item gnus-numeric-save-name
5601 @findex gnus-numeric-save-name
5602 File names like @file{~/News/alt.andrea-dworkin/45}.
5603
5604 @item gnus-Plain-save-name
5605 @findex gnus-Plain-save-name
5606 File names like @file{~/News/Alt.andrea-dworkin}.
5607
5608 @item gnus-plain-save-name
5609 @findex gnus-plain-save-name
5610 File names like @file{~/News/alt.andrea-dworkin}.
5611 @end table
5612
5613 @vindex gnus-split-methods
5614 You can have Gnus suggest where to save articles by plonking a regexp into
5615 the @code{gnus-split-methods} alist.  For instance, if you would like to
5616 save articles related to Gnus in the file @file{gnus-stuff}, and articles
5617 related to VM in @code{vm-stuff}, you could set this variable to something
5618 like:
5619
5620 @lisp
5621 (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
5622  ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
5623  (my-choosing-function "../other-dir/my-stuff")
5624  ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
5625 @end lisp
5626
5627 We see that this is a list where each element is a list that has two
5628 elements---the @dfn{match} and the @dfn{file}.  The match can either be
5629 a string (in which case it is used as a regexp to match on the article
5630 head); it can be a symbol (which will be called as a function with the
5631 group name as a parameter); or it can be a list (which will be
5632 @code{eval}ed).  If any of these actions have a non-@code{nil} result,
5633 the @dfn{file} will be used as a default prompt.  In addition, the
5634 result of the operation itself will be used if the function or form
5635 called returns a string or a list of strings.
5636
5637 You basically end up with a list of file names that might be used when
5638 saving the current article.  (All ``matches'' will be used.)  You will
5639 then be prompted for what you really want to use as a name, with file
5640 name completion over the results from applying this variable.
5641
5642 This variable is @code{((gnus-article-archive-name))} by default, which
5643 means that Gnus will look at the articles it saves for an
5644 @code{Archive-name} line and use that as a suggestion for the file
5645 name.
5646
5647 Here's an example function to clean up file names somewhat.  If you have
5648 lots of mail groups called things like
5649 @samp{nnml:mail.whatever}, you may want to chop off the beginning of
5650 these group names before creating the file name to save to.  The
5651 following will do just that:
5652
5653 @lisp
5654 (defun my-save-name (group)
5655   (when (string-match "^nnml:mail." group)
5656     (substring group (match-end 0))))
5657
5658 (setq gnus-split-methods
5659       '((gnus-article-archive-name)
5660         (my-save-name)))
5661 @end lisp
5662
5663
5664 @vindex gnus-use-long-file-name
5665 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
5666 @code{nil}, all the preceding functions will replace all periods
5667 (@samp{.}) in the group names with slashes (@samp{/})---which means that
5668 the functions will generate hierarchies of directories instead of having
5669 all the files in the top level directory
5670 (@file{~/News/alt/andrea-dworkin} instead of
5671 @file{~/News/alt.andrea-dworkin}.)  This variable is @code{t} by default
5672 on most systems.  However, for historical reasons, this is @code{nil} on
5673 Xenix and usg-unix-v machines by default.
5674
5675 This function also affects kill and score file names.  If this variable
5676 is a list, and the list contains the element @code{not-score}, long file
5677 names will not be used for score files, if it contains the element
5678 @code{not-save}, long file names will not be used for saving, and if it
5679 contains the element @code{not-kill}, long file names will not be used
5680 for kill files.
5681
5682 If you'd like to save articles in a hierarchy that looks something like
5683 a spool, you could
5684
5685 @lisp
5686 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
5687 (setq gnus-default-article-saver 'gnus-summary-save-in-file) ; no encoding
5688 @end lisp
5689
5690 Then just save with @kbd{o}.  You'd then read this hierarchy with
5691 ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
5692 the top level directory as the argument (@file{~/News/}).  Then just walk
5693 around to the groups/directories with @code{nneething}.
5694
5695
5696 @node Decoding Articles
5697 @section Decoding Articles
5698 @cindex decoding articles
5699
5700 Sometime users post articles (or series of articles) that have been
5701 encoded in some way or other.  Gnus can decode them for you.
5702
5703 @menu
5704 * Uuencoded Articles::    Uudecode articles.
5705 * Shell Archives::        Unshar articles.
5706 * PostScript Files::      Split PostScript.
5707 * Other Files::           Plain save and binhex.
5708 * Decoding Variables::    Variables for a happy decoding.
5709 * Viewing Files::         You want to look at the result of the decoding?
5710 @end menu
5711
5712 @cindex series
5713 @cindex article series
5714 All these functions use the process/prefix convention
5715 (@pxref{Process/Prefix}) for finding out what articles to work on, with
5716 the extension that a ``single article'' means ``a single series''.  Gnus
5717 can find out by itself what articles belong to a series, decode all the
5718 articles and unpack/view/save the resulting file(s).
5719
5720 Gnus guesses what articles are in the series according to the following
5721 simplish rule: The subjects must be (nearly) identical, except for the
5722 last two numbers of the line.  (Spaces are largely ignored, however.)
5723
5724 For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
5725 will find all the articles that match the regexp @samp{^cat.gif
5726 ([0-9]+/[0-9]+).*$}.
5727
5728 Subjects that are non-standard, like @samp{cat.gif (2/3) Part 6 of a
5729 series}, will not be properly recognized by any of the automatic viewing
5730 commands, and you have to mark the articles manually with @kbd{#}.
5731
5732
5733 @node Uuencoded Articles
5734 @subsection Uuencoded Articles
5735 @cindex uudecode
5736 @cindex uuencoded articles
5737
5738 @table @kbd
5739
5740 @item X u
5741 @kindex X u (Summary)
5742 @findex gnus-uu-decode-uu
5743 @c @icon{gnus-uu-decode-uu}
5744 Uudecodes the current series (@code{gnus-uu-decode-uu}).
5745
5746 @item X U
5747 @kindex X U (Summary)
5748 @findex gnus-uu-decode-uu-and-save
5749 Uudecodes and saves the current series
5750 (@code{gnus-uu-decode-uu-and-save}).
5751
5752 @item X v u
5753 @kindex X v u (Summary)
5754 @findex gnus-uu-decode-uu-view
5755 Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
5756
5757 @item X v U
5758 @kindex X v U (Summary)
5759 @findex gnus-uu-decode-uu-and-save-view
5760 Uudecodes, views and saves the current series
5761 (@code{gnus-uu-decode-uu-and-save-view}).
5762
5763 @end table
5764
5765 Remember that these all react to the presence of articles marked with
5766 the process mark.  If, for instance, you'd like to decode and save an
5767 entire newsgroup, you'd typically do @kbd{M P a}
5768 (@code{gnus-uu-mark-all}) and then @kbd{X U}
5769 (@code{gnus-uu-decode-uu-and-save}).
5770
5771 All this is very much different from how @code{gnus-uu} worked with
5772 @sc{gnus 4.1}, where you had explicit keystrokes for everything under
5773 the sun.  This version of @code{gnus-uu} generally assumes that you mark
5774 articles in some way (@pxref{Setting Process Marks}) and then press
5775 @kbd{X u}.
5776
5777 @vindex gnus-uu-notify-files
5778 Note: When trying to decode articles that have names matching
5779 @code{gnus-uu-notify-files}, which is hard-coded to
5780 @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
5781 automatically post an article on @samp{comp.unix.wizards} saying that
5782 you have just viewed the file in question.  This feature can't be turned
5783 off.
5784
5785
5786 @node Shell Archives
5787 @subsection Shell Archives
5788 @cindex unshar
5789 @cindex shell archives
5790 @cindex shared articles
5791
5792 Shell archives (``shar files'') used to be a popular way to distribute
5793 sources, but it isn't used all that much today.  In any case, we have
5794 some commands to deal with these:
5795
5796 @table @kbd
5797
5798 @item X s
5799 @kindex X s (Summary)
5800 @findex gnus-uu-decode-unshar
5801 Unshars the current series (@code{gnus-uu-decode-unshar}).
5802
5803 @item X S
5804 @kindex X S (Summary)
5805 @findex gnus-uu-decode-unshar-and-save
5806 Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
5807
5808 @item X v s
5809 @kindex X v s (Summary)
5810 @findex gnus-uu-decode-unshar-view
5811 Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
5812
5813 @item X v S
5814 @kindex X v S (Summary)
5815 @findex gnus-uu-decode-unshar-and-save-view
5816 Unshars, views and saves the current series
5817 (@code{gnus-uu-decode-unshar-and-save-view}).
5818 @end table
5819
5820
5821 @node PostScript Files
5822 @subsection PostScript Files
5823 @cindex PostScript
5824
5825 @table @kbd
5826
5827 @item X p
5828 @kindex X p (Summary)
5829 @findex gnus-uu-decode-postscript
5830 Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
5831
5832 @item X P
5833 @kindex X P (Summary)
5834 @findex gnus-uu-decode-postscript-and-save
5835 Unpack and save the current PostScript series
5836 (@code{gnus-uu-decode-postscript-and-save}).
5837
5838 @item X v p
5839 @kindex X v p (Summary)
5840 @findex gnus-uu-decode-postscript-view
5841 View the current PostScript series
5842 (@code{gnus-uu-decode-postscript-view}).
5843
5844 @item X v P
5845 @kindex X v P (Summary)
5846 @findex gnus-uu-decode-postscript-and-save-view
5847 View and save the current PostScript series
5848 (@code{gnus-uu-decode-postscript-and-save-view}).
5849 @end table
5850
5851
5852 @node Other Files
5853 @subsection Other Files
5854
5855 @table @kbd
5856 @item X o
5857 @kindex X o (Summary)
5858 @findex gnus-uu-decode-save
5859 Save the current series
5860 (@code{gnus-uu-decode-save}).
5861
5862 @item X b
5863 @kindex X b (Summary)
5864 @findex gnus-uu-decode-binhex
5865 Unbinhex the current series (@code{gnus-uu-decode-binhex}).  This
5866 doesn't really work yet.
5867 @end table
5868
5869
5870 @node Decoding Variables
5871 @subsection Decoding Variables
5872
5873 Adjective, not verb.
5874
5875 @menu
5876 * Rule Variables::          Variables that say how a file is to be viewed.
5877 * Other Decode Variables::  Other decode variables.
5878 * Uuencoding and Posting::  Variables for customizing uuencoding.
5879 @end menu
5880
5881
5882 @node Rule Variables
5883 @subsubsection Rule Variables
5884 @cindex rule variables
5885
5886 Gnus uses @dfn{rule variables} to decide how to view a file.  All these
5887 variables are of the form
5888
5889 @lisp
5890       (list '(regexp1 command2)
5891             '(regexp2 command2)
5892             ...)
5893 @end lisp
5894
5895 @table @code
5896
5897 @item gnus-uu-user-view-rules
5898 @vindex gnus-uu-user-view-rules
5899 @cindex sox
5900 This variable is consulted first when viewing files.  If you wish to use,
5901 for instance, @code{sox} to convert an @samp{.au} sound file, you could
5902 say something like:
5903 @lisp
5904 (setq gnus-uu-user-view-rules
5905       (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
5906 @end lisp
5907
5908 @item gnus-uu-user-view-rules-end
5909 @vindex gnus-uu-user-view-rules-end
5910 This variable is consulted if Gnus couldn't make any matches from the
5911 user and default view rules.
5912
5913 @item gnus-uu-user-archive-rules
5914 @vindex gnus-uu-user-archive-rules
5915 This variable can be used to say what commands should be used to unpack
5916 archives.
5917 @end table
5918
5919
5920 @node Other Decode Variables
5921 @subsubsection Other Decode Variables
5922
5923 @table @code
5924 @vindex gnus-uu-grabbed-file-functions
5925
5926 @item gnus-uu-grabbed-file-functions
5927 All functions in this list will be called right after each file has been
5928 successfully decoded---so that you can move or view files right away,
5929 and don't have to wait for all files to be decoded before you can do
5930 anything.  Ready-made functions you can put in this list are:
5931
5932 @table @code
5933
5934 @item gnus-uu-grab-view
5935 @findex gnus-uu-grab-view
5936 View the file.
5937
5938 @item gnus-uu-grab-move
5939 @findex gnus-uu-grab-move
5940 Move the file (if you're using a saving function.)
5941 @end table
5942
5943 @item gnus-uu-be-dangerous
5944 @vindex gnus-uu-be-dangerous
5945 Specifies what to do if unusual situations arise during decoding.  If
5946 @code{nil}, be as conservative as possible.  If @code{t}, ignore things
5947 that didn't work, and overwrite existing files.  Otherwise, ask each
5948 time.
5949
5950 @item gnus-uu-ignore-files-by-name
5951 @vindex gnus-uu-ignore-files-by-name
5952 Files with name matching this regular expression won't be viewed.
5953
5954 @item gnus-uu-ignore-files-by-type
5955 @vindex gnus-uu-ignore-files-by-type
5956 Files with a @sc{mime} type matching this variable won't be viewed.
5957 Note that Gnus tries to guess what type the file is based on the name.
5958 @code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly
5959 kludgey.
5960
5961 @item gnus-uu-tmp-dir
5962 @vindex gnus-uu-tmp-dir
5963 Where @code{gnus-uu} does its work.
5964
5965 @item gnus-uu-do-not-unpack-archives
5966 @vindex gnus-uu-do-not-unpack-archives
5967 Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
5968 looking for files to display.
5969
5970 @item gnus-uu-view-and-save
5971 @vindex gnus-uu-view-and-save
5972 Non-@code{nil} means that the user will always be asked to save a file
5973 after viewing it.
5974
5975 @item gnus-uu-ignore-default-view-rules
5976 @vindex gnus-uu-ignore-default-view-rules
5977 Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
5978 rules.
5979
5980 @item gnus-uu-ignore-default-archive-rules
5981 @vindex gnus-uu-ignore-default-archive-rules
5982 Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
5983 unpacking commands.
5984
5985 @item gnus-uu-kill-carriage-return
5986 @vindex gnus-uu-kill-carriage-return
5987 Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
5988 from articles.
5989
5990 @item gnus-uu-unmark-articles-not-decoded
5991 @vindex gnus-uu-unmark-articles-not-decoded
5992 Non-@code{nil} means that @code{gnus-uu} will mark unsuccessfully
5993 decoded articles as unread.
5994
5995 @item gnus-uu-correct-stripped-uucode
5996 @vindex gnus-uu-correct-stripped-uucode
5997 Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
5998 uuencoded files that have had trailing spaces deleted.
5999
6000 @item gnus-uu-pre-uudecode-hook
6001 @vindex gnus-uu-pre-uudecode-hook
6002 Hook run before sending a message to @code{uudecode}.
6003
6004 @item gnus-uu-view-with-metamail
6005 @vindex gnus-uu-view-with-metamail
6006 @cindex metamail
6007 Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
6008 commands defined by the rule variables and just fudge a @sc{mime}
6009 content type based on the file name.  The result will be fed to
6010 @code{metamail} for viewing.
6011
6012 @item gnus-uu-save-in-digest
6013 @vindex gnus-uu-save-in-digest
6014 Non-@code{nil} means that @code{gnus-uu}, when asked to save without
6015 decoding, will save in digests.  If this variable is @code{nil},
6016 @code{gnus-uu} will just save everything in a file without any
6017 embellishments.  The digesting almost conforms to RFC1153---no easy way
6018 to specify any meaningful volume and issue numbers were found, so I
6019 simply dropped them.
6020
6021 @end table
6022
6023
6024 @node Uuencoding and Posting
6025 @subsubsection Uuencoding and Posting
6026
6027 @table @code
6028
6029 @item gnus-uu-post-include-before-composing
6030 @vindex gnus-uu-post-include-before-composing
6031 Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
6032 before you compose the article.  If this variable is @code{t}, you can
6033 either include an encoded file with @kbd{C-c C-i} or have one included
6034 for you when you post the article.
6035
6036 @item gnus-uu-post-length
6037 @vindex gnus-uu-post-length
6038 Maximum length of an article.  The encoded file will be split into how
6039 many articles it takes to post the entire file.
6040
6041 @item gnus-uu-post-threaded
6042 @vindex gnus-uu-post-threaded
6043 Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
6044 thread.  This may not be smart, as no other decoder I have seen is able
6045 to follow threads when collecting uuencoded articles.  (Well, I have
6046 seen one package that does that---@code{gnus-uu}, but somehow, I don't
6047 think that counts...) Default is @code{nil}.
6048
6049 @item gnus-uu-post-separate-description
6050 @vindex gnus-uu-post-separate-description
6051 Non-@code{nil} means that the description will be posted in a separate
6052 article.  The first article will typically be numbered (0/x).  If this
6053 variable is @code{nil}, the description the user enters will be included
6054 at the beginning of the first article, which will be numbered (1/x).
6055 Default is @code{t}.
6056
6057 @end table
6058
6059
6060 @node Viewing Files
6061 @subsection Viewing Files
6062 @cindex viewing files
6063 @cindex pseudo-articles
6064
6065 After decoding, if the file is some sort of archive, Gnus will attempt
6066 to unpack the archive and see if any of the files in the archive can be
6067 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
6068 containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
6069 uncompress and de-tar the main file, and then view the two pictures.
6070 This unpacking process is recursive, so if the archive contains archives
6071 of archives, it'll all be unpacked.
6072
6073 Finally, Gnus will normally insert a @dfn{pseudo-article} for each
6074 extracted file into the summary buffer.  If you go to these
6075 ``articles'', you will be prompted for a command to run (usually Gnus
6076 will make a suggestion), and then the command will be run.
6077
6078 @vindex gnus-view-pseudo-asynchronously
6079 If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
6080 until the viewing is done before proceeding.
6081
6082 @vindex gnus-view-pseudos
6083 If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
6084 the pseudo-articles into the summary buffer, but view them
6085 immediately.  If this variable is @code{not-confirm}, the user won't even
6086 be asked for a confirmation before viewing is done.
6087
6088 @vindex gnus-view-pseudos-separately
6089 If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
6090 pseudo-article will be created for each file to be viewed.  If
6091 @code{nil}, all files that use the same viewing command will be given as
6092 a list of parameters to that command.
6093
6094 @vindex gnus-insert-pseudo-articles
6095 If @code{gnus-insert-pseudo-articles} is non-@code{nil}, insert
6096 pseudo-articles when decoding.  It is @code{t} by default.
6097
6098 So; there you are, reading your @emph{pseudo-articles} in your
6099 @emph{virtual newsgroup} from the @emph{virtual server}; and you think:
6100 Why isn't anything real anymore? How did we get here?
6101
6102
6103 @node Article Treatment
6104 @section Article Treatment
6105
6106 Reading through this huge manual, you may have quite forgotten that the
6107 object of newsreaders is to actually, like, read what people have
6108 written.  Reading articles.  Unfortunately, people are quite bad at
6109 writing, so there are tons of functions and variables to make reading
6110 these articles easier.
6111
6112 @menu
6113 * Article Highlighting::    You want to make the article look like fruit salad.
6114 * Article Fontisizing::     Making emphasized text look nice.
6115 * Article Hiding::          You also want to make certain info go away.
6116 * Article Washing::         Lots of way-neat functions to make life better.
6117 * Article Buttons::         Click on URLs, Message-IDs, addresses and the like.
6118 * Article Date::            Grumble, UT!
6119 * Article Signature::       What is a signature?
6120 @end menu
6121
6122
6123 @node Article Highlighting
6124 @subsection Article Highlighting
6125 @cindex highlighting
6126
6127 Not only do you want your article buffer to look like fruit salad, but
6128 you want it to look like technicolor fruit salad.  
6129
6130 @table @kbd
6131
6132 @item W H a
6133 @kindex W H a (Summary)
6134 @findex gnus-article-highlight
6135 @findex gnus-article-maybe-highlight
6136 Do much highlighting of the current article
6137 (@code{gnus-article-highlight}).  This function highlights header, cited
6138 text, the signature, and adds buttons to the body and the head.
6139
6140 Most users would prefer using @code{gnus-article-maybe-highlight} in
6141 @code{gnus-article-display-hook} (@pxref{Customizing Articles}) instead.
6142 This is a bit less agressive---it highlights only the headers, the
6143 signature and adds buttons.
6144
6145 @item W H h
6146 @kindex W H h (Summary)
6147 @findex gnus-article-highlight-headers
6148 @vindex gnus-header-face-alist
6149 Highlight the headers (@code{gnus-article-highlight-headers}).  The
6150 highlighting will be done according to the @code{gnus-header-face-alist}
6151 variable, which is a list where each element has the form @var{(regexp
6152 name content)}.  @var{regexp} is a regular expression for matching the
6153 header, @var{name} is the face used for highlighting the header name
6154 (@pxref{Faces and Fonts}) and @var{content} is the face for highlighting
6155 the header value.  The first match made will be used.  Note that
6156 @var{regexp} shouldn't have @samp{^} prepended---Gnus will add one.
6157
6158 @item W H c
6159 @kindex W H c (Summary)
6160 @findex gnus-article-highlight-citation
6161 Highlight cited text (@code{gnus-article-highlight-citation}).
6162
6163 Some variables to customize the citation highlights:
6164
6165 @table @code
6166 @vindex gnus-cite-parse-max-size
6167
6168 @item gnus-cite-parse-max-size
6169 If the article size if bigger than this variable (which is 25000 by
6170 default), no citation highlighting will be performed.
6171
6172 @item gnus-cite-prefix-regexp
6173 @vindex gnus-cite-prefix-regexp
6174 Regexp matching the longest possible citation prefix on a line.
6175
6176 @item gnus-cite-max-prefix
6177 @vindex gnus-cite-max-prefix
6178 Maximum possible length for a citation prefix (default 20).
6179
6180 @item gnus-cite-face-list
6181 @vindex gnus-cite-face-list
6182 List of faces used for highlighting citations (@pxref{Faces and Fonts}).
6183 When there are citations from multiple articles in the same message,
6184 Gnus will try to give each citation from each article its own face.
6185 This should make it easier to see who wrote what.
6186
6187 @item gnus-supercite-regexp
6188 @vindex gnus-supercite-regexp
6189 Regexp matching normal Supercite attribution lines.
6190
6191 @item gnus-supercite-secondary-regexp
6192 @vindex gnus-supercite-secondary-regexp
6193 Regexp matching mangled Supercite attribution lines.
6194
6195 @item gnus-cite-minimum-match-count
6196 @vindex gnus-cite-minimum-match-count
6197 Minimum number of identical prefixes we have to see before we believe
6198 that it's a citation.
6199
6200 @item gnus-cite-attribution-prefix
6201 @vindex gnus-cite-attribution-prefix
6202 Regexp matching the beginning of an attribution line.
6203
6204 @item gnus-cite-attribution-suffix
6205 @vindex gnus-cite-attribution-suffix
6206 Regexp matching the end of an attribution line.
6207
6208 @item gnus-cite-attribution-face
6209 @vindex gnus-cite-attribution-face
6210 Face used for attribution lines.  It is merged with the face for the
6211 cited text belonging to the attribution.
6212
6213 @end table
6214
6215
6216 @item W H s
6217 @kindex W H s (Summary)
6218 @vindex gnus-signature-separator
6219 @vindex gnus-signature-face
6220 @findex gnus-article-highlight-signature
6221 Highlight the signature (@code{gnus-article-highlight-signature}).
6222 Everything after @code{gnus-signature-separator} (@pxref{Article
6223 Signature}) in an article will be considered a signature and will be
6224 highlighted with @code{gnus-signature-face}, which is @code{italic} by
6225 default.
6226
6227 @end table
6228
6229 @xref{Customizing Articles} for how to highlight articles automatically.
6230
6231
6232 @node Article Fontisizing
6233 @subsection Article Fontisizing
6234 @cindex emphasis
6235 @cindex article emphasis
6236
6237 @findex gnus-article-emphasize
6238 @kindex W e (Summary)
6239 People commonly add emphasis to words in news articles by writing things
6240 like @samp{_this_} or @samp{*this*}.  Gnus can make this look nicer by
6241 running the article through the @kbd{W e}
6242 (@code{gnus-article-emphasize}) command.
6243
6244 @vindex gnus-emphasis-alist
6245 How the emphasis is computed is controlled by the
6246 @code{gnus-emphasis-alist} variable.  This is an alist where the first
6247 element is a regular expression to be matched.  The second is a number
6248 that says what regular expression grouping is used to find the entire
6249 emphasized word.  The third is a number that says what regexp grouping
6250 should be displayed and highlighted.  (The text between these two
6251 groupings will be hidden.)  The fourth is the face used for
6252 highlighting.
6253
6254 @lisp
6255 (setq gnus-article-emphasis
6256       '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
6257         ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
6258 @end lisp
6259
6260 @vindex gnus-emphasis-underline
6261 @vindex gnus-emphasis-bold
6262 @vindex gnus-emphasis-italic
6263 @vindex gnus-emphasis-underline-bold
6264 @vindex gnus-emphasis-underline-italic
6265 @vindex gnus-emphasis-bold-italic
6266 @vindex gnus-emphasis-underline-bold-italic
6267 By default, there are seven rules, and they use the following faces:
6268 @code{gnus-emphasis-bold}, @code{gnus-emphasis-italic},
6269 @code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic},
6270 @code{gnus-emphasis-underline-italic},
6271 @code{gnus-emphasis-underline-bold}, and
6272 @code{gnus-emphasis-underline-bold-italic}.
6273
6274 If you want to change these faces, you can either use @kbd{M-x
6275 customize}, or you can use @code{copy-face}.  For instance, if you want
6276 to make @code{gnus-emphasis-italic} use a red face instead, you could
6277 say something like:
6278
6279 @lisp
6280 (copy-face 'red 'gnus-emphasis-italic)
6281 @end lisp
6282
6283 @xref{Customizing Articles} for how to fontize articles automatically.
6284
6285
6286 @node Article Hiding
6287 @subsection Article Hiding
6288 @cindex article hiding
6289
6290 Or rather, hiding certain things in each article.  There usually is much
6291 too much cruft in most articles.
6292
6293 @table @kbd
6294
6295 @item W W a
6296 @kindex W W a (Summary)
6297 @findex gnus-article-hide
6298 Do quite a lot of hiding on the article buffer
6299 (@kbd{gnus-article-hide}).  In particular, this function will hide
6300 headers, PGP, cited text and the signature.  
6301
6302 @item W W h
6303 @kindex W W h (Summary)
6304 @findex gnus-article-hide-headers
6305 Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
6306 Headers}.
6307
6308 @item W W b
6309 @kindex W W b (Summary)
6310 @findex gnus-article-hide-boring-headers
6311 Hide headers that aren't particularly interesting
6312 (@code{gnus-article-hide-boring-headers}).  @xref{Hiding Headers}.
6313
6314 @item W W s
6315 @kindex W W s (Summary)
6316 @findex gnus-article-hide-signature
6317 Hide signature (@code{gnus-article-hide-signature}).  @xref{Article
6318 Signature}.
6319
6320 @item W W p
6321 @kindex W W p (Summary)
6322 @findex gnus-article-hide-pgp
6323 @vindex gnus-article-hide-pgp-hook
6324 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}).  The
6325 @code{gnus-article-hide-pgp-hook} hook will be run after a @sc{pgp}
6326 signature has been hidden.  For example, to automatically verify
6327 articles that have signatures in them do:
6328 @lisp
6329 ;;; Hide pgp cruft if any.
6330
6331 (add-hook 'gnus-article-display-hook 'gnus-article-hide-pgp)
6332
6333 ;;; After hiding pgp, verify the message;
6334 ;;; only happens if pgp signature is found.
6335
6336 (add-hook 'gnus-article-hide-pgp-hook
6337           (lambda ()
6338             (save-excursion
6339               (set-buffer gnus-original-article-buffer)
6340               (mc-verify))))
6341 @end lisp
6342
6343 @item W W P
6344 @kindex W W P (Summary)
6345 @findex gnus-article-hide-pem
6346 Hide @sc{pem} (privacy enhanced messages) cruft
6347 (@code{gnus-article-hide-pem}).
6348
6349 @item W W c
6350 @kindex W W c (Summary)
6351 @findex gnus-article-hide-citation
6352 Hide citation (@code{gnus-article-hide-citation}).  Some variables for
6353 customizing the hiding:
6354
6355 @table @code
6356
6357 @item gnus-cited-opened-text-button-line-format
6358 @itemx gnus-cited-closed-text-button-line-format
6359 @vindex gnus-cited-closed-text-button-line-format
6360 @vindex gnus-cited-opened-text-button-line-format
6361 Gnus adds buttons to show where the cited text has been hidden, and to
6362 allow toggle hiding the text.  The format of the variable is specified
6363 by these format-like variable (@pxref{Formatting Variables}).  These
6364 specs are valid:
6365
6366 @table @samp
6367 @item b
6368 Starting point of the hidden text.
6369 @item e
6370 Ending point of the hidden text.
6371 @item l
6372 Number of characters in the hidden region.
6373 @item n
6374 Number of lines of hidden text.
6375 @end table
6376
6377 @item gnus-cited-lines-visible
6378 @vindex gnus-cited-lines-visible
6379 The number of lines at the beginning of the cited text to leave shown.
6380
6381 @end table
6382
6383 @item W W C-c
6384 @kindex W W C-c (Summary)
6385 @findex gnus-article-hide-citation-maybe
6386
6387 Hide citation (@code{gnus-article-hide-citation-maybe}) depending on the
6388 following two variables:
6389
6390 @table @code
6391 @item gnus-cite-hide-percentage
6392 @vindex gnus-cite-hide-percentage
6393 If the cited text is of a bigger percentage than this variable (default
6394 50), hide the cited text.
6395
6396 @item gnus-cite-hide-absolute
6397 @vindex gnus-cite-hide-absolute
6398 The cited text must have at least this length (default 10) before it
6399 is hidden.
6400 @end table
6401
6402 @item W W C
6403 @kindex W W C (Summary)
6404 @findex gnus-article-hide-citation-in-followups
6405 Hide cited text in articles that aren't roots
6406 (@code{gnus-article-hide-citation-in-followups}).  This isn't very
6407 useful as an interactive command, but might be a handy function to stick
6408 in @code{gnus-article-display-hook} (@pxref{Customizing Articles}).
6409
6410 @end table
6411
6412 All these ``hiding'' commands are toggles, but if you give a negative
6413 prefix to these commands, they will show what they have previously
6414 hidden.  If you give a positive prefix, they will always hide.
6415
6416 Also @pxref{Article Highlighting} for further variables for
6417 citation customization.
6418
6419 @xref{Customizing Articles} for how to hide article elements
6420 automatically.
6421
6422
6423 @node Article Washing
6424 @subsection Article Washing
6425 @cindex washing
6426 @cindex article washing
6427
6428 We call this ``article washing'' for a really good reason.  Namely, the
6429 @kbd{A} key was taken, so we had to use the @kbd{W} key instead.
6430
6431 @dfn{Washing} is defined by us as ``changing something from something to
6432 something else'', but normally results in something looking better.
6433 Cleaner, perhaps.
6434
6435 @table @kbd
6436
6437 @item W l
6438 @kindex W l (Summary)
6439 @findex gnus-summary-stop-page-breaking
6440 Remove page breaks from the current article
6441 (@code{gnus-summary-stop-page-breaking}).  @xref{Misc Article} for page
6442 delimiters. 
6443
6444 @item W r
6445 @kindex W r (Summary)
6446 @findex gnus-summary-caesar-message
6447 @c @icon{gnus-summary-caesar-message}
6448 Do a Caesar rotate (rot13) on the article buffer
6449 (@code{gnus-summary-caesar-message}).
6450 Unreadable articles that tell you to read them with Caesar rotate or rot13.
6451 (Typically offensive jokes and such.)
6452
6453 It's commonly called ``rot13'' because each letter is rotated 13
6454 positions in the alphabet, e. g. @samp{B} (letter #2) -> @samp{O} (letter
6455 #15).  It is sometimes referred to as ``Caesar rotate'' because Caesar
6456 is rumored to have employed this form of, uh, somewhat weak encryption.
6457
6458 @item W t
6459 @kindex W t (Summary)
6460 @findex gnus-summary-toggle-header
6461 Toggle whether to display all headers in the article buffer
6462 (@code{gnus-summary-toggle-header}).
6463
6464 @item W v
6465 @kindex W v (Summary)
6466 @findex gnus-summary-verbose-header
6467 Toggle whether to display all headers in the article buffer permanently
6468 (@code{gnus-summary-verbose-header}).
6469
6470 @item W m
6471 @kindex W m (Summary)
6472 @findex gnus-summary-toggle-mime
6473 Toggle whether to run the article through @sc{mime} before displaying
6474 (@code{gnus-summary-toggle-mime}).
6475
6476 @item W o
6477 @kindex W o (Summary)
6478 @findex gnus-article-treat-overstrike
6479 Treat overstrike (@code{gnus-article-treat-overstrike}).
6480
6481 @item W d
6482 @kindex W d (Summary)
6483 @findex gnus-article-treat-dumbquotes
6484 @vindex gnus-article-dumbquotes-map
6485 @cindex Smartquotes
6486 @cindex M******** sm*rtq**t*s
6487 @cindex Latin 1
6488 Treat M******** sm*rtq**t*s according to
6489 @code{gnus-article-dumbquotes-map}
6490 (@code{gnus-article-treat-dumbquotes}).
6491
6492 @item W w
6493 @kindex W w (Summary)
6494 @findex gnus-article-fill-cited-article
6495 Do word wrap (@code{gnus-article-fill-cited-article}).  If you use this
6496 function in @code{gnus-article-display-hook}, it should be run fairly
6497 late and certainly after any highlighting.
6498
6499 You can give the command a numerical prefix to specify the width to use
6500 when filling.
6501
6502 @item W c
6503 @kindex W c (Summary)
6504 @findex gnus-article-remove-cr
6505 Remove CR (i. e., @samp{^M}s on the end of the lines)
6506 (@code{gnus-article-remove-cr}).
6507
6508 @item W q
6509 @kindex W q (Summary)
6510 @findex gnus-article-de-quoted-unreadable
6511 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
6512 Quoted-Printable is one common @sc{mime} encoding employed when sending
6513 non-ASCII (i. e., 8-bit) articles.  It typically makes strings like
6514 @samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very
6515 readable to me.
6516
6517 @item W f
6518 @kindex W f (Summary)
6519 @cindex x-face
6520 @findex gnus-article-display-x-face
6521 @findex gnus-article-x-face-command
6522 @vindex gnus-article-x-face-command
6523 @vindex gnus-article-x-face-too-ugly
6524 @iftex
6525 @iflatex
6526 \include{xface}
6527 @end iflatex
6528 @end iftex
6529 Look for and display any X-Face headers
6530 (@code{gnus-article-display-x-face}).  The command executed by this
6531 function is given by the @code{gnus-article-x-face-command} variable.
6532 If this variable is a string, this string will be executed in a
6533 sub-shell.  If it is a function, this function will be called with the
6534 face as the argument.  If the @code{gnus-article-x-face-too-ugly} (which
6535 is a regexp) matches the @code{From} header, the face will not be shown.
6536 The default action under Emacs is to fork off an @code{xv} to view the
6537 face; under XEmacs the default action is to display the face before the
6538 @code{From} header.  (It's nicer if XEmacs has been compiled with X-Face
6539 support---that will make display somewhat faster.  If there's no native
6540 X-Face support, Gnus will try to convert the @code{X-Face} header using
6541 external programs from the @code{pbmplus} package and friends.)  If you
6542 want to have this function in the display hook, it should probably come
6543 last.
6544
6545 @item W b
6546 @kindex W b (Summary)
6547 @findex gnus-article-add-buttons
6548 Add clickable buttons to the article (@code{gnus-article-add-buttons}).
6549 @xref{Article Buttons}.
6550
6551 @item W B
6552 @kindex W B (Summary)
6553 @findex gnus-article-add-buttons-to-head
6554 Add clickable buttons to the article headers
6555 (@code{gnus-article-add-buttons-to-head}).
6556
6557 @item W E l
6558 @kindex W E l (Summary)
6559 @findex gnus-article-strip-leading-blank-lines
6560 Remove all blank lines from the beginning of the article
6561 (@code{gnus-article-strip-leading-blank-lines}).
6562
6563 @item W E m
6564 @kindex W E m (Summary)
6565 @findex gnus-article-strip-multiple-blank-lines
6566 Replace all blank lines with empty lines and then all multiple empty
6567 lines with a single empty line.
6568 (@code{gnus-article-strip-multiple-blank-lines}).
6569
6570 @item W E t
6571 @kindex W E t (Summary)
6572 @findex gnus-article-remove-trailing-blank-lines
6573 Remove all blank lines at the end of the article
6574 (@code{gnus-article-remove-trailing-blank-lines}).
6575
6576 @item W E a
6577 @kindex W E a (Summary)
6578 @findex gnus-article-strip-blank-lines
6579 Do all the three commands above
6580 (@code{gnus-article-strip-blank-lines}).
6581
6582 @item W E A
6583 @kindex W E A (Summary)
6584 @findex gnus-article-strip-all-blank-lines
6585 Remove all blank lines
6586 (@code{gnus-article-strip-all-blank-lines}).
6587
6588 @item W E s
6589 @kindex W E s (Summary)
6590 @findex gnus-article-strip-leading-space
6591 Remove all white space from the beginning of all lines of the article
6592 body (@code{gnus-article-strip-leading-space}).
6593
6594 @end table
6595
6596 @xref{Customizing Articles} for how to wash articles automatically.
6597
6598
6599 @node Article Buttons
6600 @subsection Article Buttons
6601 @cindex buttons
6602
6603 People often include references to other stuff in articles, and it would
6604 be nice if Gnus could just fetch whatever it is that people talk about
6605 with the minimum of fuzz when you hit @kbd{RET} or use the middle mouse
6606 button on these references.
6607
6608 Gnus adds @dfn{buttons} to certain standard references by default:
6609 Well-formed URLs, mail addresses and Message-IDs.  This is controlled by
6610 two variables, one that handles article bodies and one that handles
6611 article heads:
6612
6613 @table @code
6614
6615 @item gnus-button-alist
6616 @vindex gnus-button-alist
6617 This is an alist where each entry has this form:
6618
6619 @lisp
6620 (REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
6621 @end lisp
6622
6623 @table @var
6624
6625 @item regexp
6626 All text that match this regular expression will be considered an
6627 external reference.  Here's a typical regexp that matches embedded URLs:
6628 @samp{<URL:\\([^\n\r>]*\\)>}.
6629
6630 @item button-par
6631 Gnus has to know which parts of the matches is to be highlighted.  This
6632 is a number that says what sub-expression of the regexp is to be
6633 highlighted.  If you want it all highlighted, you use 0 here.
6634
6635 @item use-p
6636 This form will be @code{eval}ed, and if the result is non-@code{nil},
6637 this is considered a match.  This is useful if you want extra sifting to
6638 avoid false matches.
6639
6640 @item function
6641 This function will be called when you click on this button.
6642
6643 @item data-par
6644 As with @var{button-par}, this is a sub-expression number, but this one
6645 says which part of the match is to be sent as data to @var{function}.
6646
6647 @end table
6648
6649 So the full entry for buttonizing URLs is then
6650
6651 @lisp
6652 ("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
6653 @end lisp
6654
6655 @item gnus-header-button-alist
6656 @vindex gnus-header-button-alist
6657 This is just like the other alist, except that it is applied to the
6658 article head only, and that each entry has an additional element that is
6659 used to say what headers to apply the buttonize coding to:
6660
6661 @lisp
6662 (HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
6663 @end lisp
6664
6665 @var{HEADER} is a regular expression.
6666
6667 @item gnus-button-url-regexp
6668 @vindex gnus-button-url-regexp
6669 A regular expression that matches embedded URLs.  It is used in the
6670 default values of the variables above.
6671
6672 @item gnus-article-button-face
6673 @vindex gnus-article-button-face
6674 Face used on buttons.
6675
6676 @item gnus-article-mouse-face
6677 @vindex gnus-article-mouse-face
6678 Face used when the mouse cursor is over a button.
6679
6680 @end table
6681
6682 @xref{Customizing Articles} for how to buttonize articles automatically.
6683
6684
6685 @node Article Date
6686 @subsection Article Date
6687
6688 The date is most likely generated in some obscure timezone you've never
6689 heard of, so it's quite nice to be able to find out what the time was
6690 when the article was sent.
6691
6692 @table @kbd
6693
6694 @item W T u
6695 @kindex W T u (Summary)
6696 @findex gnus-article-date-ut
6697 Display the date in UT (aka. GMT, aka ZULU)
6698 (@code{gnus-article-date-ut}).
6699
6700 @item W T i
6701 @kindex W T i (Summary)
6702 @findex gnus-article-date-iso8601
6703 @cindex ISO 8601
6704 Display the date in international format, aka. ISO 8601
6705 (@code{gnus-article-date-iso8601}).
6706
6707 @item W T l
6708 @kindex W T l (Summary)
6709 @findex gnus-article-date-local
6710 Display the date in the local timezone (@code{gnus-article-date-local}).
6711
6712 @item W T s
6713 @kindex W T s (Summary)
6714 @vindex gnus-article-time-format
6715 @findex gnus-article-date-user
6716 @findex format-time-string
6717 Display the date using a user-defined format
6718 (@code{gnus-article-date-user}).  The format is specified by the
6719 @code{gnus-article-time-format} variable, and is a string that's passed
6720 to @code{format-time-string}.  See the documentation of that variable
6721 for a list of possible format specs.
6722
6723 @item W T e
6724 @kindex W T e (Summary)
6725 @findex gnus-article-date-lapsed
6726 @findex gnus-start-date-timer
6727 @findex gnus-stop-date-timer
6728 Say how much time has elapsed between the article was posted and now
6729 (@code{gnus-article-date-lapsed}).  If you want to have this line
6730 updated continually, you can put
6731
6732 @lisp
6733 (gnus-start-date-timer)
6734 @end lisp
6735
6736 in your @file{.gnus.el} file, or you can run it off of some hook.  If
6737 you want to stop the timer, you can use the @code{gnus-stop-date-timer}
6738 command.
6739
6740 @item W T o
6741 @kindex W T o (Summary)
6742 @findex gnus-article-date-original
6743 Display the original date (@code{gnus-article-date-original}).  This can
6744 be useful if you normally use some other conversion function and are
6745 worried that it might be doing something totally wrong.  Say, claiming
6746 that the article was posted in 1854.  Although something like that is
6747 @emph{totally} impossible.  Don't you trust me? *titter*
6748
6749 @end table
6750
6751 @xref{Customizing Articles} for how to display the date in your
6752 preferred format automatically.
6753
6754
6755 @node Article Signature
6756 @subsection Article Signature
6757 @cindex signatures
6758 @cindex article signature
6759
6760 @vindex gnus-signature-separator
6761 Each article is divided into two parts---the head and the body.  The
6762 body can be divided into a signature part and a text part.  The variable
6763 that says what is to be considered a signature is
6764 @code{gnus-signature-separator}.  This is normally the standard
6765 @samp{^-- $} as mandated by son-of-RFC 1036.  However, many people use
6766 non-standard signature separators, so this variable can also be a list
6767 of regular expressions to be tested, one by one.  (Searches are done
6768 from the end of the body towards the beginning.)  One likely value is:
6769
6770 @lisp
6771 (setq gnus-signature-separator
6772       '("^-- $"         ; The standard
6773         "^-- *$"        ; A common mangling
6774         "^-------*$"    ; Many people just use a looong
6775                         ; line of dashes.  Shame!
6776         "^ *--------*$" ; Double-shame!
6777         "^________*$"   ; Underscores are also popular
6778         "^========*$")) ; Pervert!
6779 @end lisp
6780
6781 The more permissive you are, the more likely it is that you'll get false
6782 positives.
6783
6784 @vindex gnus-signature-limit
6785 @code{gnus-signature-limit} provides a limit to what is considered a
6786 signature.
6787
6788 @enumerate
6789 @item
6790 If it is an integer, no signature may be longer (in characters) than
6791 that integer.
6792 @item
6793 If it is a floating point number, no signature may be longer (in lines)
6794 than that number.
6795 @item
6796 If it is a function, the function will be called without any parameters,
6797 and if it returns @code{nil}, there is no signature in the buffer.
6798 @item
6799 If it is a string, it will be used as a regexp.  If it matches, the text
6800 in question is not a signature.
6801 @end enumerate
6802
6803 This variable can also be a list where the elements may be of the types
6804 listed above.  Here's an example:
6805
6806 @lisp
6807 (setq gnus-signature-limit
6808       '(200.0 "^---*Forwarded article"))
6809 @end lisp
6810
6811 This means that if there are more than 200 lines after the signature
6812 separator, or the text after the signature separator is matched by
6813 the regular expression @samp{^---*Forwarded article}, then it isn't a
6814 signature after all.
6815
6816
6817 @node MIME Commands
6818 @section MIME Commands
6819 @cindex MIME decoding
6820
6821 @table @kbd
6822 @item W M w
6823 @kindex W M w (Summary)
6824 Decode RFC2047-encoded words in the article headers
6825 (@code{gnus-article-decode-mime-words}).
6826
6827 @item W M c
6828 @kindex W M c (Summary)
6829 Decode encoded article bodies as well as charsets
6830 (@code{gnus-article-decode-charset}).
6831
6832 This command looks in the @code{Content-Type} header to determine the
6833 charset.  If there is no such header in the article, you can give it a
6834 prefix, which will prompt for the charset to decode as.  In regional
6835 groups where people post using some common encoding (but do not include
6836 MIME headers), you can set the @code{charset} group/topic parameter to
6837 the required charset (@pxref{Group Parameters}).
6838
6839 @item W M v
6840 @kindex W M v (Summary)
6841 View all the @sc{mime} parts in the current article
6842 (@code{gnus-mime-view-all-parts}). 
6843
6844 @end table
6845
6846
6847 @node Article Commands
6848 @section Article Commands
6849
6850 @table @kbd
6851
6852 @item A P
6853 @cindex PostScript
6854 @cindex printing
6855 @kindex A P (Summary)
6856 @vindex gnus-ps-print-hook
6857 @findex gnus-summary-print-article
6858 Generate and print a PostScript image of the article buffer
6859 (@code{gnus-summary-print-article}).  @code{gnus-ps-print-hook} will be
6860 run just before printing the buffer.
6861
6862 @end table
6863
6864
6865 @node Summary Sorting
6866 @section Summary Sorting
6867 @cindex summary sorting
6868
6869 You can have the summary buffer sorted in various ways, even though I
6870 can't really see why you'd want that.
6871
6872 @table @kbd
6873
6874 @item C-c C-s C-n
6875 @kindex C-c C-s C-n (Summary)
6876 @findex gnus-summary-sort-by-number
6877 Sort by article number (@code{gnus-summary-sort-by-number}).
6878
6879 @item C-c C-s C-a
6880 @kindex C-c C-s C-a (Summary)
6881 @findex gnus-summary-sort-by-author
6882 Sort by author (@code{gnus-summary-sort-by-author}).
6883
6884 @item C-c C-s C-s
6885 @kindex C-c C-s C-s (Summary)
6886 @findex gnus-summary-sort-by-subject
6887 Sort by subject (@code{gnus-summary-sort-by-subject}).
6888
6889 @item C-c C-s C-d
6890 @kindex C-c C-s C-d (Summary)
6891 @findex gnus-summary-sort-by-date
6892 Sort by date (@code{gnus-summary-sort-by-date}).
6893
6894 @item C-c C-s C-l
6895 @kindex C-c C-s C-l (Summary)
6896 @findex gnus-summary-sort-by-lines
6897 Sort by lines (@code{gnus-summary-sort-by-lines}).
6898
6899 @item C-c C-s C-i
6900 @kindex C-c C-s C-i (Summary)
6901 @findex gnus-summary-sort-by-score
6902 Sort by score (@code{gnus-summary-sort-by-score}).
6903 @end table
6904
6905 These functions will work both when you use threading and when you don't
6906 use threading.  In the latter case, all summary lines will be sorted,
6907 line by line.  In the former case, sorting will be done on a
6908 root-by-root basis, which might not be what you were looking for.  To
6909 toggle whether to use threading, type @kbd{T T} (@pxref{Thread
6910 Commands}).
6911
6912
6913 @node Finding the Parent
6914 @section Finding the Parent
6915 @cindex parent articles
6916 @cindex referring articles
6917
6918 @table @kbd
6919 @item ^
6920 @kindex ^ (Summary)
6921 @findex gnus-summary-refer-parent-article
6922 If you'd like to read the parent of the current article, and it is not
6923 displayed in the summary buffer, you might still be able to.  That is,
6924 if the current group is fetched by @sc{nntp}, the parent hasn't expired
6925 and the @code{References} in the current article are not mangled, you
6926 can just press @kbd{^} or @kbd{A r}
6927 (@code{gnus-summary-refer-parent-article}).  If everything goes well,
6928 you'll get the parent.  If the parent is already displayed in the
6929 summary buffer, point will just move to this article.
6930
6931 If given a positive numerical prefix, fetch that many articles back into
6932 the ancestry.  If given a negative numerical prefix, fetch just that
6933 ancestor.  So if you say @kbd{3 ^}, Gnus will fetch the parent, the
6934 grandparent and the grandgrandparent of the current article.  If you say
6935 @kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current
6936 article.
6937
6938 @item A R (Summary)
6939 @findex gnus-summary-refer-references
6940 @kindex A R (Summary)
6941 Fetch all articles mentioned in the @code{References} header of the
6942 article (@code{gnus-summary-refer-references}).
6943
6944 @item A T (Summary)
6945 @findex gnus-summary-refer-thread
6946 @kindex A T (Summary)
6947 Display the full thread where the current article appears
6948 (@code{gnus-summary-refer-thread}).  This command has to fetch all the
6949 headers in the current group to work, so it usually takes a while.  If
6950 you do it often, you may consider setting @code{gnus-fetch-old-headers}
6951 to @code{invisible} (@pxref{Filling In Threads}).  This won't have any
6952 visible effects normally, but it'll make this command work a whole lot
6953 faster.  Of course, it'll make group entry somewhat slow.
6954
6955 @vindex gnus-refer-thread-limit
6956 The @code{gnus-refer-thread-limit} variable says how many old (i. e.,
6957 articles before the first displayed in the current group) headers to
6958 fetch when doing this command.  The default is 200.  If @code{t}, all
6959 the available headers will be fetched.  This variable can be overridden
6960 by giving the @kbd{A T} command a numerical prefix.
6961
6962 @item M-^ (Summary)
6963 @findex gnus-summary-refer-article
6964 @kindex M-^ (Summary)
6965 @cindex Message-ID
6966 @cindex fetching by Message-ID
6967 You can also ask the @sc{nntp} server for an arbitrary article, no
6968 matter what group it belongs to.  @kbd{M-^}
6969 (@code{gnus-summary-refer-article}) will ask you for a
6970 @code{Message-ID}, which is one of those long, hard-to-read thingies
6971 that look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You
6972 have to get it all exactly right.  No fuzzy searches, I'm afraid.
6973 @end table
6974
6975 The current select method will be used when fetching by
6976 @code{Message-ID} from non-news select method, but you can override this
6977 by giving this command a prefix.
6978
6979 @vindex gnus-refer-article-method
6980 If the group you are reading is located on a backend that does not
6981 support fetching by @code{Message-ID} very well (like @code{nnspool}),
6982 you can set @code{gnus-refer-article-method} to an @sc{nntp} method.  It
6983 would, perhaps, be best if the @sc{nntp} server you consult is the one
6984 updating the spool you are reading from, but that's not really
6985 necessary.
6986
6987 Most of the mail backends support fetching by @code{Message-ID}, but do
6988 not do a particularly excellent job at it.  That is, @code{nnmbox} and
6989 @code{nnbabyl} are able to locate articles from any groups, while
6990 @code{nnml} and @code{nnfolder} are only able to locate articles that
6991 have been posted to the current group.  (Anything else would be too time
6992 consuming.)  @code{nnmh} does not support this at all.
6993
6994
6995 @node Alternative Approaches
6996 @section Alternative Approaches
6997
6998 Different people like to read news using different methods.  This being
6999 Gnus, we offer a small selection of minor modes for the summary buffers.
7000
7001 @menu
7002 * Pick and Read::               First mark articles and then read them.
7003 * Binary Groups::               Auto-decode all articles.
7004 @end menu
7005
7006
7007 @node Pick and Read
7008 @subsection Pick and Read
7009 @cindex pick and read
7010
7011 Some newsreaders (like @code{nn} and, uhm, @code{Netnews} on VM/CMS) use
7012 a two-phased reading interface.  The user first marks in a summary
7013 buffer the articles she wants to read.  Then she starts reading the
7014 articles with just an article buffer displayed.
7015
7016 @findex gnus-pick-mode
7017 @kindex M-x gnus-pick-mode
7018 Gnus provides a summary buffer minor mode that allows
7019 this---@code{gnus-pick-mode}.  This basically means that a few process
7020 mark commands become one-keystroke commands to allow easy marking, and
7021 it provides one additional command for switching to the summary buffer.
7022
7023 Here are the available keystrokes when using pick mode:
7024
7025 @table @kbd
7026 @item .
7027 @kindex . (Pick)
7028 @findex gnus-pick-article-or-thread
7029 Pick the article or thread on the current line
7030 (@code{gnus-pick-article-or-thread}).  If the variable
7031 @code{gnus-thread-hide-subtree} is true, then this key selects the
7032 entire thread when used at the first article of the thread.  Otherwise,
7033 it selects just the article. If given a numerical prefix, go to that
7034 thread or article and pick it.  (The line number is normally displayed
7035 at the beginning of the summary pick lines.)
7036
7037 @item SPACE
7038 @kindex SPACE (Pick)
7039 @findex gnus-pick-next-page
7040 Scroll the summary buffer up one page (@code{gnus-pick-next-page}).  If
7041 at the end of the buffer, start reading the picked articles.
7042
7043 @item u
7044 @kindex u (Pick)
7045 @findex gnus-pick-unmark-article-or-thread.
7046 Unpick the thread or article
7047 (@code{gnus-pick-unmark-article-or-thread}).  If the variable
7048 @code{gnus-thread-hide-subtree} is true, then this key unpicks the
7049 thread if used at the first article of the thread.  Otherwise it unpicks 
7050 just the article.  You can give this key a numerical prefix to unpick
7051 the thread or article at that line.
7052
7053 @item RET
7054 @kindex RET (Pick)
7055 @findex gnus-pick-start-reading
7056 @vindex gnus-pick-display-summary
7057 Start reading the picked articles (@code{gnus-pick-start-reading}).  If
7058 given a prefix, mark all unpicked articles as read first.  If
7059 @code{gnus-pick-display-summary} is non-@code{nil}, the summary buffer
7060 will still be visible when you are reading.
7061
7062 @end table
7063
7064 All the normal summary mode commands are still available in the
7065 pick-mode, with the exception of @kbd{u}.  However @kbd{!} is available
7066 which is mapped to the same function
7067 @code{gnus-summary-tick-article-forward}.
7068
7069 If this sounds like a good idea to you, you could say:
7070
7071 @lisp
7072 (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
7073 @end lisp
7074
7075 @vindex gnus-pick-mode-hook
7076 @code{gnus-pick-mode-hook} is run in pick minor mode buffers.
7077
7078 @vindex gnus-mark-unpicked-articles-as-read
7079 If @code{gnus-mark-unpicked-articles-as-read} is non-@code{nil}, mark
7080 all unpicked articles as read.  The default is @code{nil}.
7081
7082 @vindex gnus-summary-pick-line-format
7083 The summary line format in pick mode is slightly different from the
7084 standard format.  At the beginning of each line the line number is
7085 displayed.  The pick mode line format is controlled by the
7086 @code{gnus-summary-pick-line-format} variable (@pxref{Formatting
7087 Variables}).  It accepts the same format specs that
7088 @code{gnus-summary-line-format} does (@pxref{Summary Buffer Lines}).
7089
7090
7091 @node Binary Groups
7092 @subsection Binary Groups
7093 @cindex binary groups
7094
7095 @findex gnus-binary-mode
7096 @kindex M-x gnus-binary-mode
7097 If you spend much time in binary groups, you may grow tired of hitting
7098 @kbd{X u}, @kbd{n}, @kbd{RET} all the time.  @kbd{M-x gnus-binary-mode}
7099 is a minor mode for summary buffers that makes all ordinary Gnus article
7100 selection functions uudecode series of articles and display the result
7101 instead of just displaying the articles the normal way.
7102
7103 @kindex g (Binary)
7104 @findex gnus-binary-show-article
7105 The only way, in fact, to see the actual articles is the @kbd{g}
7106 command, when you have turned on this mode
7107 (@code{gnus-binary-show-article}).
7108
7109 @vindex gnus-binary-mode-hook
7110 @code{gnus-binary-mode-hook} is called in binary minor mode buffers.
7111
7112
7113 @node Tree Display
7114 @section Tree Display
7115 @cindex trees
7116
7117 @vindex gnus-use-trees
7118 If you don't like the normal Gnus summary display, you might try setting
7119 @code{gnus-use-trees} to @code{t}.  This will create (by default) an
7120 additional @dfn{tree buffer}.  You can execute all summary mode commands
7121 in the tree buffer.
7122
7123 There are a few variables to customize the tree display, of course:
7124
7125 @table @code
7126 @item gnus-tree-mode-hook
7127 @vindex gnus-tree-mode-hook
7128 A hook called in all tree mode buffers.
7129
7130 @item gnus-tree-mode-line-format
7131 @vindex gnus-tree-mode-line-format
7132 A format string for the mode bar in the tree mode buffers (@pxref{Mode
7133 Line Formatting}).  The default is @samp{Gnus: %%b %S %Z}.  For a list
7134 of valid specs, @pxref{Summary Buffer Mode Line}.
7135
7136 @item gnus-selected-tree-face
7137 @vindex gnus-selected-tree-face
7138 Face used for highlighting the selected article in the tree buffer.  The
7139 default is @code{modeline}.
7140
7141 @item gnus-tree-line-format
7142 @vindex gnus-tree-line-format
7143 A format string for the tree nodes.  The name is a bit of a misnomer,
7144 though---it doesn't define a line, but just the node.  The default value
7145 is @samp{%(%[%3,3n%]%)}, which displays the first three characters of
7146 the name of the poster.  It is vital that all nodes are of the same
7147 length, so you @emph{must} use @samp{%4,4n}-like specifiers.
7148
7149 Valid specs are:
7150
7151 @table @samp
7152 @item n
7153 The name of the poster.
7154 @item f
7155 The @code{From} header.
7156 @item N
7157 The number of the article.
7158 @item [
7159 The opening bracket.
7160 @item ]
7161 The closing bracket.
7162 @item s
7163 The subject.
7164 @end table
7165
7166 @xref{Formatting Variables}.
7167
7168 Variables related to the display are:
7169
7170 @table @code
7171 @item gnus-tree-brackets
7172 @vindex gnus-tree-brackets
7173 This is used for differentiating between ``real'' articles and
7174 ``sparse'' articles.  The format is @var{((real-open . real-close)
7175 (sparse-open . sparse-close) (dummy-open . dummy-close))}, and the
7176 default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
7177
7178 @item gnus-tree-parent-child-edges
7179 @vindex gnus-tree-parent-child-edges
7180 This is a list that contains the characters used for connecting parent
7181 nodes to their children.  The default is @code{(?- ?\\ ?|)}.
7182
7183 @end table
7184
7185 @item gnus-tree-minimize-window
7186 @vindex gnus-tree-minimize-window
7187 If this variable is non-@code{nil}, Gnus will try to keep the tree
7188 buffer as small as possible to allow more room for the other Gnus
7189 windows.  If this variable is a number, the tree buffer will never be
7190 higher than that number.  The default is @code{t}.  Note that if you
7191 have several windows displayed side-by-side in a frame and the tree
7192 buffer is one of these, minimizing the tree window will also resize all
7193 other windows displayed next to it.
7194
7195 @item gnus-generate-tree-function
7196 @vindex gnus-generate-tree-function
7197 @findex gnus-generate-horizontal-tree
7198 @findex gnus-generate-vertical-tree
7199 The function that actually generates the thread tree.  Two predefined
7200 functions are available: @code{gnus-generate-horizontal-tree} and
7201 @code{gnus-generate-vertical-tree} (which is the default).
7202
7203 @end table
7204
7205 Here's an example from a horizontal tree buffer:
7206
7207 @example
7208 @{***@}-(***)-[odd]-[Gun]
7209      |      \[Jan]
7210      |      \[odd]-[Eri]
7211      |      \(***)-[Eri]
7212      |            \[odd]-[Paa]
7213      \[Bjo]
7214      \[Gun]
7215      \[Gun]-[Jor]
7216 @end example
7217
7218 Here's the same thread displayed in a vertical tree buffer:
7219
7220 @example
7221 @{***@}
7222   |--------------------------\-----\-----\
7223 (***)                         [Bjo] [Gun] [Gun]
7224   |--\-----\-----\                          |
7225 [odd] [Jan] [odd] (***)                   [Jor]
7226   |           |     |--\
7227 [Gun]       [Eri] [Eri] [odd]
7228                           |
7229                         [Paa]
7230 @end example
7231
7232 If you're using horizontal trees, it might be nice to display the trees
7233 side-by-side with the summary buffer.  You could add something like the
7234 following to your @file{.gnus.el} file:
7235
7236 @lisp
7237 (setq gnus-use-trees t
7238       gnus-generate-tree-function 'gnus-generate-horizontal-tree
7239       gnus-tree-minimize-window nil)
7240 (gnus-add-configuration
7241  '(article
7242    (vertical 1.0
7243              (horizontal 0.25
7244                          (summary 0.75 point)
7245                          (tree 1.0))
7246              (article 1.0))))
7247 @end lisp
7248
7249 @xref{Windows Configuration}.
7250
7251
7252 @node Mail Group Commands
7253 @section Mail Group Commands
7254 @cindex mail group commands
7255
7256 Some commands only make sense in mail groups.  If these commands are
7257 invalid in the current group, they will raise a hell and let you know.
7258
7259 All these commands (except the expiry and edit commands) use the
7260 process/prefix convention (@pxref{Process/Prefix}).
7261
7262 @table @kbd
7263
7264 @item B e
7265 @kindex B e (Summary)
7266 @findex gnus-summary-expire-articles
7267 Expire all expirable articles in the group
7268 (@code{gnus-summary-expire-articles}).
7269
7270 @item B M-C-e
7271 @kindex B M-C-e (Summary)
7272 @findex gnus-summary-expire-articles-now
7273 Delete all the expirable articles in the group
7274 (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
7275 articles eligible for expiry in the current group will
7276 disappear forever into that big @file{/dev/null} in the sky.
7277
7278 @item B DEL
7279 @kindex B DEL (Summary)
7280 @findex gnus-summary-delete-article
7281 @c @icon{gnus-summary-mail-delete}
7282 Delete the mail article.  This is ``delete'' as in ``delete it from your
7283 disk forever and ever, never to return again.'' Use with caution.
7284 (@code{gnus-summary-delete-article}).
7285
7286 @item B m
7287 @kindex B m (Summary)
7288 @cindex move mail
7289 @findex gnus-summary-move-article
7290 Move the article from one mail group to another
7291 (@code{gnus-summary-move-article}).
7292
7293 @item B c
7294 @kindex B c (Summary)
7295 @cindex copy mail
7296 @findex gnus-summary-copy-article
7297 @c @icon{gnus-summary-mail-copy}
7298 Copy the article from one group (mail group or not) to a mail group
7299 (@code{gnus-summary-copy-article}).
7300
7301 @item B B
7302 @kindex B B (Summary)
7303 @cindex crosspost mail
7304 @findex gnus-summary-crosspost-article
7305 Crosspost the current article to some other group
7306 (@code{gnus-summary-crosspost-article}).  This will create a new copy of
7307 the article in the other group, and the Xref headers of the article will
7308 be properly updated.
7309
7310 @item B i
7311 @kindex B i (Summary)
7312 @findex gnus-summary-import-article
7313 Import an arbitrary file into the current mail newsgroup
7314 (@code{gnus-summary-import-article}).  You will be prompted for a file
7315 name, a @code{From} header and a @code{Subject} header.
7316
7317 @item B r
7318 @kindex B r (Summary)
7319 @findex gnus-summary-respool-article
7320 Respool the mail article (@code{gnus-summary-respool-article}).
7321 @code{gnus-summary-respool-default-method} will be used as the default
7322 select method when respooling.  This variable is @code{nil} by default,
7323 which means that the current group select method will be used instead.
7324
7325 @item B w
7326 @itemx e
7327 @kindex B w (Summary)
7328 @kindex e (Summary)
7329 @findex gnus-summary-edit-article
7330 @kindex C-c C-c (Article)
7331 Edit the current article (@code{gnus-summary-edit-article}).  To finish
7332 editing and make the changes permanent, type @kbd{C-c C-c}
7333 (@kbd{gnus-summary-edit-article-done}).  If you give a prefix to the
7334 @kbd{C-c C-c} command, Gnus won't re-highlight the article.
7335
7336 @item B q
7337 @kindex B q (Summary)
7338 @findex gnus-summary-respool-query
7339 If you want to re-spool an article, you might be curious as to what group
7340 the article will end up in before you do the re-spooling.  This command
7341 will tell you (@code{gnus-summary-respool-query}).
7342
7343 @item B t
7344 @kindex B t (Summary)
7345 @findex gnus-summary-respool-trace
7346 Similarly, this command will display all fancy splitting patterns used
7347 when repooling, if any (@code{gnus-summary-respool-trace}).
7348
7349 @item B p
7350 @kindex B p (Summary)
7351 @findex gnus-summary-article-posted-p
7352 Some people have a tendency to send you "courtesy" copies when they
7353 follow up to articles you have posted.  These usually have a
7354 @code{Newsgroups} header in them, but not always.  This command
7355 (@code{gnus-summary-article-posted-p}) will try to fetch the current
7356 article from your news server (or rather, from
7357 @code{gnus-refer-article-method} or @code{gnus-select-method}) and will
7358 report back whether it found the article or not.  Even if it says that
7359 it didn't find the article, it may have been posted anyway---mail
7360 propagation is much faster than news propagation, and the news copy may
7361 just not have arrived yet.
7362
7363 @end table
7364
7365 @vindex gnus-move-split-methods
7366 @cindex moving articles
7367 If you move (or copy) articles regularly, you might wish to have Gnus
7368 suggest where to put the articles.  @code{gnus-move-split-methods} is a
7369 variable that uses the same syntax as @code{gnus-split-methods}
7370 (@pxref{Saving Articles}).  You may customize that variable to create
7371 suggestions you find reasonable.
7372
7373 @lisp
7374 (setq gnus-move-split-methods
7375       '(("^From:.*Lars Magne" "nnml:junk")
7376         ("^Subject:.*gnus" "nnfolder:important")
7377         (".*" "nnml:misc")))
7378 @end lisp
7379
7380
7381 @node Various Summary Stuff
7382 @section Various Summary Stuff
7383
7384 @menu
7385 * Summary Group Information::         Information oriented commands.
7386 * Searching for Articles::            Multiple article commands.
7387 * Summary Generation Commands::       (Re)generating the summary buffer.
7388 * Really Various Summary Commands::   Those pesky non-conformant commands.
7389 @end menu
7390
7391 @table @code
7392 @vindex gnus-summary-mode-hook
7393 @item gnus-summary-mode-hook
7394 This hook is called when creating a summary mode buffer.
7395
7396 @vindex gnus-summary-generate-hook
7397 @item gnus-summary-generate-hook
7398 This is called as the last thing before doing the threading and the
7399 generation of the summary buffer.  It's quite convenient for customizing
7400 the threading variables based on what data the newsgroup has.  This hook
7401 is called from the summary buffer after most summary buffer variables
7402 have been set.
7403
7404 @vindex gnus-summary-prepare-hook
7405 @item gnus-summary-prepare-hook
7406 It is called after the summary buffer has been generated.  You might use
7407 it to, for instance, highlight lines or modify the look of the buffer in
7408 some other ungodly manner.  I don't care.
7409
7410 @vindex gnus-summary-prepared-hook
7411 @item gnus-summary-prepared-hook
7412 A hook called as the very last thing after the summary buffer has been
7413 generated.
7414
7415 @vindex gnus-summary-ignore-duplicates
7416 @item gnus-summary-ignore-duplicates
7417 When Gnus discovers two articles that have the same @code{Message-ID},
7418 it has to do something drastic.  No articles are allowed to have the
7419 same @code{Message-ID}, but this may happen when reading mail from some
7420 sources.  Gnus allows you to customize what happens with this variable.
7421 If it is @code{nil} (which is the default), Gnus will rename the
7422 @code{Message-ID} (for display purposes only) and display the article as
7423 any other article.  If this variable is @code{t}, it won't display the
7424 article---it'll be as if it never existed.
7425
7426 @end table
7427
7428
7429 @node Summary Group Information
7430 @subsection Summary Group Information
7431
7432 @table @kbd
7433
7434 @item H f
7435 @kindex H f (Summary)
7436 @findex gnus-summary-fetch-faq
7437 @vindex gnus-group-faq-directory
7438 Try to fetch the FAQ (list of frequently asked questions) for the
7439 current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
7440 FAQ from @code{gnus-group-faq-directory}, which is usually a directory
7441 on a remote machine.  This variable can also be a list of directories.
7442 In that case, giving a prefix to this command will allow you to choose
7443 between the various sites.  @code{ange-ftp} or @code{efs} will probably
7444 be used for fetching the file.
7445
7446 @item H d
7447 @kindex H d (Summary)
7448 @findex gnus-summary-describe-group
7449 Give a brief description of the current group
7450 (@code{gnus-summary-describe-group}).  If given a prefix, force
7451 rereading the description from the server.
7452
7453 @item H h
7454 @kindex H h (Summary)
7455 @findex gnus-summary-describe-briefly