*** empty log message ***
[gnus] / texi / gnus.texi
1 @tex
2 \input texinfo                  @c -*-texinfo-*-
3 @end tex
4
5 @setfilename gnus.info
6 @settitle September Gnus Manual
7 @synindex fn cp
8 @synindex vr cp
9 @synindex pg cp
10 @iftex
11 @finalout
12 @end iftex
13 @setchapternewpage odd
14
15 @iftex
16 @iflatex
17 \documentstyle[a4,pagestyle]{book}
18 \input{epsf}
19 %\addtolength{\oddsidemargin}{2cm}
20 %\addtolength{\evensidemargin}{2cm}
21 \makeindex
22 \begin{document}
23
24 \newcommand{\gnuscode}[1]{{\tt #1}}
25 \newcommand{\gnussamp}[1]{{\tt #1}}
26 \newcommand{\gnuslisp}[1]{{\tt #1}}
27 \newcommand{\gnuskbd}[1]{{`\tt #1'}}
28 \newcommand{\gnusfile}[1]{{`\tt #1'}}
29 \newcommand{\gnusdfn}[1]{{\em #1}}
30 \newcommand{\gnusstrong}[1]{{\bf #1}}
31 \newcommand{\gnusemph}[1]{{\em #1}}
32 \newcommand{\gnusvar}[1]{{\sl #1}}
33 \newcommand{\gnussc}[1]{{\sc #1}}
34 \newcommand{\gnustitle}[1]{{\huge #1}}
35 \newcommand{\gnusauthor}[1]{{\huge #1}}
36 \newcommand{\gnusbullet}{{.}}
37
38 \newenvironment{codelist}%
39 {\begin{list}{}{
40 }
41 }{\end{list}}
42
43 \newenvironment{kbdlist}%
44 {\begin{list}{}{
45 }
46 }{\end{list}}
47
48 \newenvironment{dfnlist}%
49 {\begin{list}{}{
50 }
51 }{\end{list}}
52
53 \newenvironment{stronglist}%
54 {\begin{list}{}{
55 }
56 }{\end{list}}
57
58 \newenvironment{samplist}%
59 {\begin{list}{}{
60 }
61 }{\end{list}}
62
63 \newenvironment{varlist}%
64 {\begin{list}{}{
65 }
66 }{\end{list}}
67
68 \newenvironment{emphlist}%
69 {\begin{list}{}{
70 }
71 }{\end{list}}
72
73 \newpagestyle{gnus}%
74 {
75 {\underline{\makebox{\hfill}}}
76 }
77 {
78 \ifodd\count0
79 % \epsfbox{foot-gnus.ps} hei \hfill \arabic{page}
80 \else
81 \arabic{page} \hfill hei % \epsfbox{foot-gnus}
82 \fi
83 }
84 \pagestyle{gnus}
85
86 @end iflatex
87 @end iftex
88
89 @ifinfo
90
91 This file documents Gnus, the GNU Emacs newsreader.
92
93 Copyright (C) 1995 Free Software Foundation, Inc.
94
95 Permission is granted to make and distribute verbatim copies of
96 this manual provided the copyright notice and this permission notice
97 are preserved on all copies.
98
99 @ignore
100 Permission is granted to process this file through Tex and print the
101 results, provided the printed document carries copying permission
102 notice identical to this one except for the removal of this paragraph
103 (this paragraph not being relevant to the printed manual).
104
105 @end ignore
106 Permission is granted to copy and distribute modified versions of this
107 manual under the conditions for verbatim copying, provided also that the
108 entire resulting derived work is distributed under the terms of a
109 permission notice identical to this one.
110
111 Permission is granted to copy and distribute translations of this manual
112 into another language, under the above conditions for modified versions.
113 @end ifinfo
114
115 @iftex
116
117 @titlepage
118 @title September Gnus Manual
119
120 @author by Lars Magne Ingebrigtsen
121 @page
122
123 @vskip 0pt plus 1filll
124 Copyright @copyright{} 1995 Free Software Foundation, Inc. 
125
126 Permission is granted to make and distribute verbatim copies of
127 this manual provided the copyright notice and this permission notice
128 are preserved on all copies.
129
130 Permission is granted to copy and distribute modified versions of this
131 manual under the conditions for verbatim copying, provided that the
132 entire resulting derived work is distributed under the terms of a
133 permission notice identical to this one.
134
135 Permission is granted to copy and distribute translations of this manual
136 into another language, under the above conditions for modified versions.
137
138 @end titlepage
139 @page
140
141 @end iftex
142
143
144 @node Top
145 @top The Gnus Newsreader
146
147 @ifinfo
148
149 You can read news (and mail) from within Emacs by using Gnus.  The news
150 can be gotten by any nefarious means you can think of---@sc{nntp}, local
151 spool or your mbox file.  All at the same time, if you want to push your
152 luck.
153
154 @end ifinfo
155
156 @iftex
157
158 Gnus is the advanced, self-documenting, customizable, extensible
159 unreal-time newsreader for GNU Emacs.  
160
161 Oops.  That sounds oddly familiar, so let's start over again to avoid
162 being accused of plagiarism:
163
164 Gnus is a message-reading laboratory.  It will let you look at just
165 about anything as if it were a newsgroup.  You can read mail with it,
166 you can browse directories with it, you can @code{ftp} with it---you can
167 even read news with it, if you feel like it.
168
169 Gnus tries to empower people who read news the same way Emacs empowers
170 people who edit text.  Gnus sets no limits to what the user should be
171 allowed to do.  Users are encouraged to extend Gnus to behave like they
172 want it to behave.  A program should not control people; people should
173 be empowered to do what they want by using (or abusing) the program.
174
175 @end iftex
176
177
178 @menu
179 * History::                 How Gnus got where it is today.
180 * Terminology::             We use really difficult, like, words here.
181 * Starting Up::             Finding news can be a pain.
182 * The Group Buffer::        Selecting, subscribing and killing groups.
183 * The Summary Buffer::      Reading, saving and posting articles.
184 * The Article Buffer::      Displaying and handling articles.
185 * The Server Buffer::       Making and editing virtual servers.
186 * Scoring::                 Assigning values to articles.
187 * Various::                 General purpose settings.
188 * Customization::           Tailoring Gnus to your needs.
189 * Troubleshooting::         What you might try if things do not work.
190 * The End::                 Farewell and goodbye.
191 * Appendices::              Technical stuff, Emacs intro, FAQ
192 * Index::                   Variable, function and concept index.
193 * Key Index::               Key Index.
194 @end menu
195
196
197 @node History
198 @chapter History
199
200 @cindex history
201 @sc{gnus} was written by Masanobu UMEDA.  When autumn crept up in '94,
202 Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.
203
204 If you want to investigate the person responsible for this outrage, you
205 can point your (feh!) web browser to
206 @file{http://www.ifi.uio.no/~larsi/}.  This is also the primary
207 distribution point for the new and spiffy versions of Gnus, also know as
208 The Site That Destroys Newsrcs And Drives People Mad.
209
210 During the first extended alpha period of develpment, the new Gnus was
211 called ``(ding) Gnus''.  @dfn{(ding)}, is, of course, short for @dfn{ding
212 is not Gnus}, which is a total and utter lie, but who cares? (Besides,
213 the ``Gnus'' in this abbreviation should probably be pronounced ``news'' as
214 UMEDA intended, which makes it a more appropriate name, don't you
215 think?)
216
217 In any case, after spending all that energy with coming up with a new
218 and spiffy name, we decided that the name was @emph{too} spiffy, so we
219 renamamed it back again to ``Gnus''.  But in mixed case.  ``Gnus'' vs.
220 ``@sc{gnus}''.  New vs. old.
221
222 Incidentally, the next Gnus generation will be called ``September Gnus'',
223 and won't be released until February.  Confused?  You will be.
224
225 @menu
226 * Why?::                What's the point of Gnus?
227 * Compatibility::       Just how compatible is Gnus with @sc{gnus}?
228 * Conformity::          Gnus tries to conform to all standards.
229 * Emacsen::             Gnus can be run on a few modern Emacsen.
230 * Contributors::        Oodles of people.  
231 * New Features::        Pointers to some of the new stuff in Gnus.
232 * Newest Features::     Features so new that they haven't been written yet.
233 @end menu
234
235
236 @node Why?
237 @section Why?
238
239 What's the point of Gnus?  
240
241 I want to provide a ``rad'', ``happening'', ``way cool'' and ``hep''
242 newsreader, that lets you do anything you can think of.  That was my
243 original motivation, but while working on Gnus, it has become clear to
244 me that this generation of newsreaders really belong in the stone age.
245 Newsreaders haven't developed much since the infancy of the net.  If the
246 volume continues to rise with the current rate of increase, all current
247 newsreaders will be pretty much useless.  How do you deal with
248 newsgroups that have hundreds (or thousands) of new articles each day?
249
250 Gnus offers no real solutions to these questions, but I would very much
251 like to see Gnus being used as a testing ground for new methods of
252 reading and fetching news.  Expanding on Umeda-san's wise decision to
253 separate the newsreader from the backends, Gnus now offers a simple
254 interface for anybody who wants to write new backends for fetching mail
255 and news from different sources.  I have added hooks for customizations
256 everywhere I can imagine useful.  By doing so, I'm inviting every one of
257 you to explore and invent new ways of reading news.
258
259 May Gnus never be complete. @kbd{C-u 100 M-x hail-emacs}. 
260
261
262 @node Compatibility
263 @section Compatibility
264
265 @cindex compatibility
266 Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
267 bindings have been kept.  More key bindings have been added, of course,
268 but only in one or two obscure cases have old bindings been changed.
269
270 Our motto is:
271 @quotation
272 @cartouche
273 @center In a cloud bones of steel.
274 @end cartouche
275 @end quotation
276
277 All commands have kept their names.  Some internal functions have changed
278 their names.
279
280 The @code{gnus-uu} package has changed drastically. @xref{Decoding
281 Articles}. 
282
283 One major compatibility question is the presence of several summary
284 buffers.  All variables that are relevant while reading a group are
285 buffer-local to the summary buffer they belong in.  Although most
286 important variables have their values copied into their global
287 counterparts whenever a command is executed in the summary buffer, this
288 change might lead to incorrect values being used unless you are careful.
289
290 All code that relies on knowledge of @sc{gnus} internals will probably
291 fail.  To take two examples: Sorting @code{gnus-newsrc-assoc} (or
292 changing it in any way, as a matter of fact) is strictly verboten.  Gnus
293 maintains a hash table that points to the entries in this assoc (which
294 speeds up many functions), and changing the assoc directly will lead to
295 peculiar results.
296
297 @cindex hilit19
298 @cindex highlighting
299 Old hilit19 code does not work at all.  In fact, you should probably
300 remove all hilit code from all Gnus hooks
301 (@code{gnus-group-prepare-hook}, @code{gnus-summary-prepare-hook} and
302 @code{gnus-summary-article-hook}).  (Well, at the very least the first
303 two.)  Gnus provides various integrated functions for highlighting.
304 These are faster and more accurate.  To make life easier for everybody,
305 Gnus will by default remove all hilit calls from all hilit hooks.
306 Uncleanliness!  Away!
307
308 Packages like @code{expire-kill} will no longer work.  As a matter of
309 fact, you should probably remove all old @sc{gnus} packages (and other
310 code) when you start using Gnus.  More likely than not, Gnus already
311 does what you have written code to make @sc{gnus} do.  (Snicker.)
312
313 Even though old methods of doing things are still supported, only the
314 new methods are documented in this manual.  If you detect a new method of
315 doing something while reading this manual, that does not mean you have
316 to stop doing it the old way.
317
318 Gnus understands all @sc{gnus} startup files.
319
320 @kindex M-x gnus-bug
321 Overall, a casual user who hasn't written much code that depends on
322 @sc{gnus} internals should suffer no problems.  If problems occur,
323 please let me know (@kbd{M-x gnus-bug}).
324
325
326 @node Conformity
327 @section Conformity
328
329 No rebels without a clue here, ma'am.  We conform to all standards known
330 to (wo)man.  Except for those standards and/or conventions we disagree
331 with, of course.
332
333 @table @strong
334
335 @item RFC 822
336 There are no known breaches of this standard.
337
338 @item RFC 1036
339 There are no known breaches of this standard, either.
340
341 @item Usenet Seal of Approval
342 Gnus hasn't been formally through the Seal process, but I have read
343 through the Seal text and I think Gnus would pass.
344
345 @item Son-of-RFC 1036
346 We do have some breaches to this one.
347
348 @table @emph
349
350 @item MIME
351 Gnus does no MIME handling, and this standard-to-be seems to think that
352 MIME is the bees' knees, so we have major breakage here.
353
354 @item X-Newsreader
355 This is considered to be a ``vanity header'', while I consider it to be
356 consumer information.  After seeing so many badly formatted articles
357 coming from @code{tin} and @code{Netscape} I know not to use either of
358 those for posting articles.  I would not have known that if it wasn't
359 for the @code{X-Newsreader} header.
360
361 @item References
362 Gnus breaks lines if this header is long.  I infer from RFC1036 that
363 being conservative in what you output is not creating 5000-character
364 lines, so it seems like a good idea to me.  However, this standard-to-be
365 says that whitespace in the @code{References} header is to be preserved,
366 so...  It doesn't matter one way or the other to Gnus, so if somebody
367 tells me what The Way is, I'll change it.  Or not.
368 @end table
369
370 @end table
371
372 If you ever see Gnus act noncompliantly to the texts mentioned above,
373 don't hesitate to drop a note to Gnus Towers and let us know.
374
375
376 @node Emacsen
377 @section Emacsen
378 @cindex Emacsen
379 @cindex XEmacs
380 @cindex Mule
381 @cindex Emacs
382
383 Gnus should work on :
384
385 @itemize @bullet 
386
387 @item
388 Emacs 19.30 and up.
389
390 @item
391 XEmacs 19.13 and up.
392
393 @item 
394 Mule versions based on Emacs 19.30 and up.
395
396 @end itemize
397
398 Gnus will absolutely not work on any Emacsen older than that.  Not
399 reliably, at least. 
400
401 There are some vague differences in what Gnus does, though:
402
403 @itemize @bullet
404
405 @item
406 The mouse-face on Gnus lines under Emacs and Mule is delimited to
407 certain parts of the lines while they cover the entire line under
408 XEmacs. 
409
410 @item 
411 The same with current-article marking---XEmacs puts an underline under
412 the entire summary line while Emacs and Mule are nicer and kinder.
413
414 @item
415 XEmacs features more graphics---a logo and a toolbar.
416
417 @item
418 Citation highlighting us better under Emacs and Mule than under XEmacs.
419
420 @item
421 Emacs 19.26-19.28 have tangible hidden headers, which can be a bit
422 confusing. 
423
424 @end itemize
425
426
427 @node Contributors
428 @section Contributors
429 @cindex contributors
430
431 The new Gnus version couldn't have been done without the help of all the
432 people on the (ding) mailing list.  Every day for months I have gotten
433 tens of nice bug reports from them, filling me with joy, every single
434 one of them.  Smooches.  The people on the list have been tried beyond
435 endurance, what with my ``oh, that's a neat idea <type type>, yup, I'll
436 release it right away <ship off> no wait, that doesn't work at all <type
437 type>, yup, I'll ship that one off right away <ship off> no, wait, that
438 absolutely does not work'' policy for releases.  Micro$oft---bah.
439 Amateurs.  I'm @emph{much} worse.  (Or is that ``worser''? ``much worser''?
440 ``worsest''?)
441
442 I would like to take this opportunity to thank the Academy for...  oops,
443 wrong show.
444
445 @itemize @bullet
446 @item
447 Of course, GNUS was written by Masanobu UMEDA.
448 @item 
449 Many excellent functions, especially dealing with scoring and
450 highlighting (as well as the @sc{soup} support) was written
451 by Per Abrahamsen.
452 @item
453 Innumerable bug fixes were written by Sudish Joseph.
454 @item 
455 @code{gnus-topic} was written by Ilja Weis.
456 @item 
457 Lots and lots of bugs were found and fixed by Steven L. Baur. 
458 @item
459 The refcard was written by Vladimir Alexiev.
460 @item
461 I stole some pieces from the XGnus distribution by Felix Lee and JWZ.
462 @item 
463 @code{nnfolder} has been much enhanced by Scott Byer.
464 @item
465 The orphan scoring was written by Peter Mutsaers.
466 @item 
467 GNU XEmacs support has been added by Fabrice Popineau. 
468 @item 
469 POP mail support was written by Ken Raeburn.
470 @item 
471 Various bits and pieces, especially dealing with .newsrc files, were
472 suggested and added by Hallvard B Furuseth.
473 @item 
474 Brian Edmonds has written @code{gnus-bbdb}.
475 @item 
476 Ricardo Nassif did the proof-reading.
477 @item
478 Kevin Davidson came up with the name @dfn{ding}, so blame him.
479 @item 
480 Peter Arius, Stainless Steel Rat, Ulrik Dickow, Jack Vinson, Daniel
481 Quinlan, Frank D. Cringle, Geoffrey T. Dairiki and Andrew Eskilsson have
482 all contributed code and suggestions.
483 @end itemize
484
485
486 @node New Features
487 @section New Features
488 @cindex new features
489
490 @itemize @bullet
491
492 @item
493 The look of all buffers can be changed by setting format-like variables
494 (@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}). 
495  
496 @item 
497 Local spool and several @sc{nntp} servers can be used at once
498 (@pxref{Foreign Groups}).  
499
500 @item 
501 You can combine groups into virtual groups (@pxref{nnvirtual}). 
502
503 @item 
504 You can read a number of different mail formats (@pxref{Reading Mail}).
505 All the mail backends implement a convenient mail expiry scheme
506 (@pxref{Expiring Old Mail Articles}). 
507
508 @item
509 Gnus can use various strategies for gathering threads that have lost
510 their roots (thereby gathering loose sub-threads into one thread) or it
511 can go back and retrieve enough headers to build a complete thread
512 (@pxref{Customizing Threading}).
513
514 @item 
515 Killed groups can be displayed in the group buffer, and you can read
516 them as well.
517
518 @item 
519 Gnus can do partial group updates---you do not have to retrieve the
520 entire active file just to check for new articles in a few groups
521 (@pxref{The Active File}).
522
523 @item 
524 Gnus implements a sliding scale of subscribedness to groups
525 (@pxref{Group Levels}).
526
527 @item 
528 You can score articles according to any number of criteria
529 (@pxref{Scoring}).  You can even get Gnus to find out how to score
530 articles for you (@pxref{Adaptive Scoring}).
531
532 @item 
533 Gnus maintains a dribble buffer that is auto-saved the normal Emacs
534 manner, so it should be difficult to lose much data on what you have
535 read if your machine should go down (@pxref{Auto Save}). 
536
537 @item 
538 Gnus now has its own startup file to avoid cluttering up the
539 @file{.emacs} file.
540
541 @item 
542 You can set the process mark on both groups and articles and perform
543 operations on all the marked items (@pxref{Process/Prefix}).
544
545 @item 
546 You can grep through a subset of groups and create a group from the
547 results (@pxref{nnkiboze}). 
548
549 @item 
550 You can list subsets of groups according to, well, anything
551 (@pxref{Listing Groups}). 
552
553 @item 
554 You can browse foreign servers and subscribe to groups from those
555 servers (@pxref{Browse Foreign Server}). 
556
557 @item 
558 Gnus can fetch articles asynchronously on a second connection to the
559 server (@pxref{Asynchronous Fetching}).
560
561 @item 
562 You can cache articles locally (@pxref{Article Caching}). 
563
564 @item 
565 The uudecode functions have been expanded and generalized
566 (@pxref{Decoding Articles}). 
567
568 @item
569 You can still post uuencoded articles, which was a little-known feature
570 of @sc{gnus}' past.
571
572 @item
573 Fetching parents (and other articles) now actually works without
574 glitches (@pxref{Finding the Parent}). 
575
576 @item
577 Gnus can fetch FAQs and group descriptions (@pxref{Group Information}).
578
579 @item
580 Digests (and other files) can be used as the basis for groups
581 (@pxref{nndoc}).
582
583 @item 
584 Articles can be highlighted and customized (@pxref{Customizing
585 Articles}). 
586
587 @item 
588 URLs and other external references can be buttonized (@pxref{Article
589 Buttons}). 
590
591 @item
592 All Gnus buffers can be customized in a difficult fashion
593 (@pxref{Windows Configuration}). 
594
595 @item
596 You can click on buttons instead of using the keyboard
597 (@pxref{Buttons}). 
598
599 @item 
600 Gnus can use NoCeM files to weed out spam (@pxref{NoCeM}). 
601
602 @end itemize
603
604 This is, of course, just a @emph{short} overview of the @emph{most}
605 important new features.  No, really.  There are tons more.  Yes, we have
606 feeping creaturism in full effect, but nothing too gratuitous, I would
607 hope. 
608
609
610 @node Newest Features
611 @section Newest Features
612 @cindex todo
613
614 Also known as the @dfn{todo list}.  Sure to be implemented before the
615 next millennium. 
616
617 Be afraid.  Be very afraid.
618
619 @itemize @bullet
620 @item
621 Native @sc{mime} support is something that should be done.  
622 @item
623 A better and simpler method for specifying mail composing methods. 
624 @item
625 Allow posting through mail-to-news gateways.
626 @item
627 Really do unbinhexing.
628 @end itemize
629
630 And much, much, much more.  There is more to come than has already been
631 implemented.  (But that's always true, isn't it?)
632
633 @code{<URL:http://www.ifi.uio.no/~larsi/sgnus/todo>} is where the actual
634 up-to-the-second todo list is located, so if you're really curious, you
635 could point your Web browser over that-a-way.
636
637
638 @node Terminology
639 @chapter Terminology
640
641 @cindex terminology
642 @table @dfn
643
644 @item news
645 @cindex news
646 This is what you are supposed to use this thing for---reading news.
647 News is generally fetched from a nearby @sc{nntp} server, and is
648 generally publicly available to everybody.  If you post news, the entire
649 world is likely to read just what you have written, and they'll all
650 snigger mischievously.  Behind your back.
651
652 @item mail
653 @cindex mail
654 Everything that's delivered to you personally is mail.  Some news/mail
655 readers (like Gnus) blur the distinction between mail and news, but
656 there is a difference.  Mail is private.  News is public.  Mailing is
657 not posting, and replying is not following up.
658
659 @item reply
660 Send a mail to the person who has written what you are reading.
661
662 @item follow up
663 Post an article to the current newsgroup responding to the article you
664 are reading.
665
666 @item backend
667 Gnus gets fed articles from a number of backends, both news and mail
668 backends.  Gnus does not handle the underlying media, so to speak---this
669 is all done by the backends.
670
671 @item native
672 Gnus will always use one method (and backend) as the @dfn{native}, or
673 default, way of getting news.
674
675 @item foreign
676 You can also have any number of foreign groups at the same time.  These
677 are groups that use different backends for getting news.
678
679 @item head
680 @cindex head
681 The top part of an article, where administration information (etc.) is
682 put. 
683
684 @item body
685 @cindex body
686 The rest of an article.  Everything that is not in the head is in the
687 body. 
688
689 @item header
690 @cindex header
691 A line from the head of an article. 
692
693 @item headers
694 @cindex headers
695 A collection of such lines, or a collection of heads.  Or even a
696 collection of @sc{nov} lines.
697
698 @item @sc{nov}
699 @cindex nov
700 When Gnus enters a group, it asks the backend for the headers for all
701 the unread articles in the group.  Most servers support the News OverView
702 format, which is much smaller and much faster to read than the normal
703 HEAD format. 
704
705 @item level
706 @cindex levels
707 Each group is subscribed at some @dfn{level} or other (1-9).  The ones
708 that have a lower level are ``more'' subscribed than the groups with a
709 higher level.  In fact, groups on levels 1-5 are considered
710 @dfn{subscribed}; 6-7 are @dfn{unsubscribed}; 8 are @dfn{zombies}; and 9
711 are @dfn{killed}.  Commands for listing groups and scanning for new
712 articles will all use the numeric prefix as @dfn{working level}.
713
714 @item killed groups
715 @cindex killed groups
716 No information on killed groups is stored or updated, which makes killed
717 groups much easier to handle than subscribed groups.
718
719 @item zombie groups
720 @cindex zombie groups
721 Just like killed groups, only slightly less dead.
722
723 @item active file
724 @cindex active file
725 The news server has to keep track of what articles it carries, and what
726 groups exist.  All this information in stored in the active file, which
727 is rather large, as you might surmise.
728
729 @item bogus groups
730 @cindex bogus groups
731 A group that exists in the @file{.newsrc} file, but isn't known to the
732 server (i. e.,  it isn't in the active file), is a @emph{bogus group}.
733 This means that the group probably doesn't exist (any more).
734 @end table
735
736
737 @node Starting Up
738 @chapter Starting Gnus
739 @cindex starting up
740
741 @kindex M-x gnus
742 @findex gnus
743 If your system administrator has set things up properly, starting Gnus
744 and reading news is extremely easy---you just type @kbd{M-x gnus}.
745
746 @findex gnus-other-frame
747 @kindex M-x gnus-other-frame
748 If you want to start Gnus in a different frame, you can use the command
749 @kbd{M-x gnus-other-frame} instead.
750
751 If things do not go smoothly at startup, you have to twiddle some
752 variables. 
753
754 @menu
755 * Finding the News::    Choosing a method for getting news.
756 * The First Time::      What does Gnus do the first time you start it?
757 * The Server is Down::  How can I read my mail then?
758 * Slave Gnusii::        You can have more than one Gnus active at a time.
759 * Fetching a Group::    Starting Gnus just to read a group.
760 * New Groups::          What is Gnus supposed to do with new groups?
761 * Startup Files::       Those pesky startup files---@file{.newsrc}.
762 * Auto Save::           Recovering from a crash.
763 * The Active File::     Reading the active file over a slow line Takes Time.
764 * Startup Variables::   Other variables you might change.
765 @end menu
766
767 @node Finding the News
768 @section Finding the News
769
770 @vindex gnus-select-method
771 The @code{gnus-select-method} variable controls how Gnus finds news.
772 This variable should be a list where the first element says @dfn{how}
773 and the second element says @dfn{where}.  This method is your native
774 method.  All groups that are not fetched with this method are foreign
775 groups.
776
777 For instance, if you want to get your daily dosage of news from the
778 @samp{news.somewhere.edu} @sc{nntp} server, you'd say:
779
780 @lisp
781 (setq gnus-select-method '(nntp "news.somewhere.edu"))
782 @end lisp
783
784 If you want to read directly from the local spool, say:
785
786 @lisp
787 (setq gnus-select-method '(nnspool ""))
788 @end lisp
789
790 If you can use a local spool, you probably should, as it will almost
791 certainly be much faster.
792
793 @vindex gnus-nntpserver-file
794 @cindex NNTPSERVER
795 @cindex @sc{nntp} server
796 If this variable is not set, Gnus will take a look at the
797 @code{NNTPSERVER} environment variable.  If that variable isn't set,
798 Gnus will see whether @code{gnus-nntpserver-file} (default
799 @file{/etc/nntpserver}) has any opinions in the matter.  It that fails
800 as well, Gnus will will try to use the machine that is running Emacs as
801 an @sc{nntp} server.  That's a longshot, though.
802
803 @vindex gnus-nntp-server
804 If @code{gnus-nntp-server} is set, this variable will override
805 @code{gnus-select-method}.  You should therefore set
806 @code{gnus-nntp-server} to @code{nil}, which is what it is by default.
807
808 @vindex gnus-secondary-servers
809 You can also make Gnus prompt you interactively for the name of an
810 @sc{nntp} server.  If you give a non-numerical prefix to @code{gnus}
811 (i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
812 in the @code{gnus-secondary-servers} list (if any).  You can also just
813 type in the name of any server you feel like visiting.
814
815 However, if you use one @sc{nntp} server regularly, and are just
816 interested in a couple of groups from a different server, you would be
817 better served by using the @code{gnus-group-browse-foreign-server}
818 command from the group buffer.  It will let you have a look at what
819 groups are available, and you can subscribe to any of the groups you
820 want to.  This also makes @file{.newsrc} maintenance much tidier.
821 @xref{Foreign Groups}.
822
823 @vindex gnus-secondary-select-methods
824 A slightly different approach to foreign groups is to set the
825 @code{gnus-secondary-select-methods} variable.  The select methods
826 listed in this variable are in many ways just as native as the
827 @code{gnus-select-method} server.  They will also be queried for active
828 files during startup (if that's required), and new newsgroups that
829 appear on these servers will be subscribed (or not) just as native
830 groups are.
831
832 For instance, if you use the @code{nnmbox} backend to read you mail, you
833 would typically set this variable to
834
835 @lisp
836 (setq gnus-secondary-select-methods '((nnmbox "")))
837 @end lisp
838
839 @node The First Time
840 @section The First Time
841 @cindex first time usage
842
843 If no startup files exist, Gnus will try to determine what groups should
844 be subscribed by default.
845
846 @vindex gnus-default-subscribed-newsgroups
847 If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
848 will subscribe you to just those groups in that list, leaving the rest
849 killed.  Your system administrator should have set this variable to
850 something useful.
851
852 Since she hasn't, Gnus will just subscribe you to a few randomly picked
853 groups (i.e., @samp{*.newusers}).  (@dfn{Random} is here defined as
854 ``whatever Lars thinks you should read''.)
855
856 You'll also be subscribed to the Gnus documentation group, which should
857 help you with most common problems.  
858
859 If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
860 use the normal functions for handling new groups, and not do anything
861 special.
862
863 @node The Server is Down
864 @section The Server is Down
865 @cindex server errors
866
867 If the default server is down, Gnus will understandably have some
868 problems starting.  However, if you have some mail groups in addition to
869 the news groups, you may want to start Gnus anyway.
870
871 Gnus, being the trusting sort of program, will ask whether to proceed
872 without a native select method if that server can't be contacted.  This
873 will happen whether the server doesn't actually exist (i.e., you have
874 given the wrong address) or the server has just momentarily taken ill
875 for some reason or other.  
876
877 If Gnus says ``nntp server on <your server> can't be opened.  Continue?'',
878 you do not want to continue unless you have some foreign groups that you
879 want to read.  Even if you don't, Gnus will let you continue, but you'll
880 find it difficult to actually do anything in the group buffer.  But,
881 hey, that's your problem.  Blllrph!
882
883 @findex gnus-no-server
884 If you know that the server is definitely down, or you just want to read
885 your mail without bothering with the server at all, you can use the
886 @code{gnus-no-server} command to start Gnus.  That might come in handy
887 if you're in a hurry as well.
888
889
890 @node Slave Gnusii
891 @section Slave Gnusiï
892 @cindex slave
893
894 You might want to run more than one Emacs with more than one Gnus at the
895 same time.  If you are using different @file{.newsrc} files (eg., if you
896 are using the two different Gnusiï to read from two different servers),
897 that is no problem whatsoever.  You just do it.
898
899 The problem appears when you want to run two Gnusiï that use the same
900 @code{.newsrc} file.
901
902 To work around that problem some, we here at the Think-Tank at the Gnus
903 Towers have come up with a new concept: @dfn{Masters} and
904 @dfn{servants}.  (We have applied for a patent on this concept, and have
905 taken out a copyright on those words.  If you wish to use those words in
906 conjunction with each other, you have to send $1 per usage instance to
907 me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
908 Applications}) will be much more expensive, of course.)
909
910 Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
911 however you do it).  Each subsequent slave Gnusiï should be started with
912 @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
913 files, but some slave files that contains information only on what
914 groups have been read in the slave session.  When a master Gnus starts,
915 it will read (and delete) these slave files, incorporating all
916 information from all of them.  (The slave files will be read in the
917 sequence they were created, so the latest changes will have precedence.)
918
919 Information from the slave files has, of course, presedence over the
920 information in the normal (i. e., master) @code{.newsrc} file.
921
922
923 @node Fetching a Group
924 @section Fetching a Group
925
926 @findex gnus-fetch-group
927 It it sometime convenient to be able to just say ``I want to read this
928 group and I don't care whether Gnus has been started or not''.  This is
929 perhaps more useful for people who write code than for users, but the
930 command @code{gnus-fetch-group} provides this functionality in any
931 case.  It takes the group name as a paramenter.
932
933
934 @node New Groups
935 @section New Groups
936 @cindex new groups
937
938 @vindex gnus-subscribe-newsgroup-method
939 What Gnus does when it encounters a new group is determined by the
940 @code{gnus-subscribe-newsgroup-method} variable.
941
942 This variable should contain a function.  Some handy pre-fab values
943 are:
944
945 @table @code
946
947 @item gnus-subscribe-randomly
948 @vindex gnus-subscribe-randomly
949 Subscribe all new groups randomly.
950
951 @item gnus-subscribe-alphabetically
952 @vindex gnus-subscribe-alphabetically
953 Subscribe all new groups alphabetically.
954
955 @item gnus-subscribe-hierarchically
956 @vindex gnus-subscribe-hierarchically
957 Subscribe all new groups hierarchically.
958
959 @item gnus-subscribe-interactively
960 @vindex gnus-subscribe-interactively
961 Subscribe new groups interactively.  This means that Gnus will ask
962 you about @strong{all} new groups.
963
964 @item gnus-subscribe-killed
965 @vindex gnus-subscribe-killed
966 Kill all new groups.
967
968 @item gnus-subscribe-zombies
969 @vindex gnus-subscribe-zombies
970 Make all new groups zombies.  You can browse the zombies later (with
971 @kbd{A z}) and either kill them all off properly, or subscribe to them.
972 This is the default.
973 @end table
974
975 @vindex gnus-subscribe-hierarchical-interactive
976 A closely related variable is
977 @code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
978 mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
979 hierarchical fashion whether to subscribe to new groups or not.  Gnus
980 will ask you for each sub-hierarchy whether you want to descend the
981 hierarchy or not.
982
983 One common way to control which new newsgroups should be subscribed or
984 ignored is to put an @dfn{options} line at the start of the
985 @file{.newsrc} file.  Here's an example:
986
987 @example
988 options -n !alt.all !rec.all sci.all
989 @end example
990
991 @vindex gnus-subscribe-options-newsgroup-method
992 This line obviously belongs to a serious-minded intellectual scientific
993 person (or she may just be plain old boring), because it says that all
994 groups that have names beginning with @samp{alt} and @samp{rec} should
995 be ignored, and all groups with names beginning with @samp{sci} should
996 be subscribed.  Gnus will not use the normal subscription method for
997 subscribing these groups.
998 @code{gnus-subscribe-options-newsgroup-method} is used instead.  This
999 variable defaults to @code{gnus-subscribe-alphabetically}.
1000
1001 @vindex gnus-options-not-subscribe
1002 @vindex gnus-options-subscribe
1003 If you don't want to mess with your @file{.newsrc} file, you can just
1004 set the two variables @code{gnus-options-subscribe} and
1005 @code{gnus-options-not-subscribe}.  These two variables do exactly the
1006 same as the @file{.newsrc} options -n trick.  Both are regexps, and if
1007 the the new group matches the first, it will be unconditionally
1008 subscribed, and if it matches the latter, it will be ignored.
1009
1010 @vindex gnus-auto-subscribed-groups
1011 Yet another variable that meddles here is
1012 @code{gnus-auto-subscribed-groups}.  It works exactly like
1013 @code{gnus-options-subscribe}, and is therefore really superfluos, but I
1014 thought it would be nice to have two of these.  This variable is more
1015 meant for setting some ground rules, while the other variable is used
1016 more for user fiddling.  By default this variable makes all new groups
1017 that come from mail backends (@code{nnml}, @code{nnbabyl},
1018 @code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed.  If you
1019 don't like that, just set this variable to @code{nil}.
1020
1021 @vindex gnus-check-new-newsgroups
1022 If you are satisfied that you really never want to see any new groups,
1023 you could set @code{gnus-check-new-newsgroups} to @code{nil}.  This will
1024 also save you some time at startup.  Even if this variable is
1025 @code{nil}, you can always subscribe to the new groups just by pressing
1026 @kbd{U} in the group buffer (@pxref{Group Maintenance}).  This variable
1027 is @code{t} by default.
1028
1029 Gnus normally determines whether a group is new or not by comparing the
1030 list of groups from the active file(s) with the lists of subscribed and
1031 dead groups.  This isn't a particularly fast method.  If
1032 @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
1033 server for new groups since the last time.  This is both faster &
1034 cheaper.  This also means that you can get rid of the list of killed
1035 groups altogether, so you may set @code{gnus-save-killed-list} to
1036 @code{nil}, which will save time both at startup, at exit, and all over.
1037 Saves disk space, too.  Why isn't this the default, then?
1038 Unfortunately, not all servers support this function. 
1039
1040 I bet I know what you're thinking now:  How do I find out whether my
1041 server supports @code{ask-server}?  No?  Good, because I don't have a
1042 fail-safe answer.  I would suggest just setting this variable to
1043 @code{ask-server} and see whether any new groups appear after a few
1044 days.  If they do, then it works.  If they don't, then it doesn't work.
1045 I could write a function to make Gnus guess whether the server supports
1046 @code{ask-server}, but it would just be a guess.  So I won't.  You could
1047 @code{telnet} to the server and say @samp{HELP} and see whether it lists
1048 @samp{NEWGROUPS} among the commands it understands.  If it does, then it
1049 might work.  (But there are servers that lists @samp{NEWGROUPS} without
1050 supporting the function properly.)
1051
1052 This variable can also be a list of select methods.  If so, Gnus will
1053 issue an @code{ask-server} command to each of the select methods, and
1054 subscribe them (or not) using the normal methods.  This might be handy
1055 if you are monitoring a few servers for new groups.  A side effect is
1056 that startup will take much longer, so you can meditate while waiting.
1057 Use the mantra ``dingnusdingnusdingnus'' to achieve permanent happiness.
1058
1059 @node Startup Files
1060 @section Startup Files
1061 @cindex startup files
1062 @cindex .newsrc
1063
1064 Now, you all know about the @file{.newsrc} file.  All subscription
1065 information is traditionally stored in this file.
1066
1067 Things got a bit more complicated with @sc{gnus}.  In addition to
1068 keeping the @file{.newsrc} file updated, it also used a file called
1069 @file{.newsrc.el} for storing all the information that didn't fit into
1070 the @file{.newsrc} file.  (Actually, it duplicated everything in the
1071 @file{.newsrc} file.)  @sc{gnus} would read whichever one of these files
1072 that were the most recently saved, which enabled people to swap between
1073 @sc{gnus} and other newsreaders.
1074
1075 That was kinda silly, so Gnus went one better: In addition to the
1076 @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
1077 @file{.newsrc.eld}.  It will read whichever of these files that are most
1078 recent, but it will never write a @file{.newsrc.el} file.
1079
1080 @vindex gnus-save-newsrc-file
1081 You can also turn off writing the @file{.newsrc} file by setting
1082 @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
1083 the file and save some space, as well as making exit from Gnus faster.
1084 However, this will make it impossible to use other newsreaders than
1085 Gnus.  But hey, who would want to, right?
1086
1087 @vindex gnus-save-killed-list
1088 If @code{gnus-save-killed-list} is @code{nil}, Gnus will not save the
1089 list of killed groups to the startup file.  This will save both time
1090 (when starting and quitting) and space (on disk).  It will also means
1091 that Gnus has no record of what groups are new or old, so the automatic
1092 new groups subscription methods become meaningless.  You should always
1093 set @code{gnus-check-new-newsgroups} to @code{nil} or @code{ask-server}
1094 if you set this variable to @code{nil} (@pxref{New Groups}).
1095
1096 @vindex gnus-startup-file
1097 The @code{gnus-startup-file} variable says where the startup files are.
1098 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
1099 file being whatever that one is with a @samp{.eld} appended.
1100
1101 @vindex gnus-save-newsrc-hook
1102 @vindex gnus-save-quick-newsrc-hook
1103 @vindex gnus-save-standard-newsrc-hook
1104 @code{gnus-save-newsrc-hook} is called before saving any of the newsrc
1105 files, while @code{gnus-save-quick-newsrc-hook} is called just before
1106 saving the @file{.newsrc.eld} file, and
1107 @code{gnus-save-standard-newsrc-hook} is called just before saving the
1108 @file{.newsrc} file.  The latter two are commonly used to turn version
1109 control on or off.  Version control is off by default when saving.
1110
1111 @node Auto Save
1112 @section Auto Save
1113 @cindex dribble file
1114 @cindex auto-save
1115
1116 Whenever you do something that changes the Gnus data (reading articles,
1117 catching up, killing/subscribing groups), the change is added to a
1118 special @dfn{dribble buffer}.  This buffer is auto-saved the normal
1119 Emacs way.  If your Emacs should crash before you have saved the
1120 @file{.newsrc} files, all changes you have made can be recovered from
1121 this file.
1122
1123 If Gnus detects this file at startup, it will ask the user whether to
1124 read it.  The auto save file is deleted whenever the real startup file is
1125 saved.
1126
1127 @vindex gnus-use-dribble-file
1128 If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
1129 maintain a dribble buffer.  The default is @code{t}.
1130
1131 @vindex gnus-dribble-directory
1132 Gnus will put the dribble file(s) in @code{gnus-dribble-directory}.  If
1133 this variable is @code{nil}, which it is by default, Gnus will dribble
1134 into the same directory as the @file{.newsrc} file is located.  (This is
1135 normally the user's home directory.)
1136
1137 @node The Active File
1138 @section The Active File
1139 @cindex active file
1140 @cindex ignored groups
1141
1142 When Gnus starts, or indeed whenever it tries to determine whether new
1143 articles have arrived, it reads the active file.  This is a very large
1144 file that lists all the active groups and articles on the @sc{nntp}
1145 server.
1146
1147 @vindex gnus-ignored-newsgroups
1148 Before examining the active file, Gnus deletes all lines that match the
1149 regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
1150 any groups with bogus names, but you can use this variable to make Gnus
1151 ignore hierarchies you aren't ever interested in.  
1152 @c This variable is
1153 @c @code{nil} by default, and will slow down active file handling somewhat
1154 @c if you set it to anything else.
1155
1156 @vindex gnus-read-active-file
1157 The active file can be rather Huge, so if you have a slow network, you
1158 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
1159 reading the active file.  This variable is @code{t} by default.
1160
1161 Gnus will try to make do by just getting information on the groups
1162 that you actually subscribe to.
1163
1164 Note that if you subscribe to lots and lots of groups, setting this
1165 variable to @code{nil} will probably make Gnus slower, not faster.  At
1166 present, having this variable @code{nil} will slow Gnus down
1167 considerably, unless you read news over a 2400 baud modem.  
1168
1169 This variable can also have the value @code{some}.  Gnus will then
1170 attempt to read active info only on the subscribed groups.  On some
1171 servers this is quite fast (on sparkling, brand new INN servers that
1172 support the @samp{LIST ACTIVE group} command), on others this is not
1173 fast at all.  In any case, @code{some} should be faster than @code{nil},
1174 and is certainly faster than @code{t} over slow lines.
1175
1176 If this variable is @code{nil}, Gnus will as for group info in total
1177 lock-step, which isn't very fast.  If it is @code{some} and you use an
1178 @sc{nntp} server, Gnus will pump out commands as fast as it can, and
1179 read all the replies in one swoop.  This will normally result in better
1180 performance, but if the server does not support the aforementioned
1181 @samp{LIST ACTIVE group} command, this isn't very nice to the server.
1182
1183 In any case, if you use @code{some} or @code{nil}, you should kill all
1184 groups that you aren't interested in.
1185
1186 @node Startup Variables
1187 @section Startup Variables
1188
1189 @table @code
1190
1191 @item gnus-load-hook
1192 @vindex gnus-load-hook
1193 A hook that is run while Gnus is being loaded.  Note that this hook will
1194 normally be run just once in each Emacs session, no matter how many
1195 times you start Gnus.
1196
1197 @item gnus-startup-hook
1198 @vindex gnus-startup-hook
1199 A hook that is run after starting up Gnus successfully.
1200
1201 @item gnus-check-bogus-newsgroups
1202 @vindex gnus-check-bogus-newsgroups
1203 If non-@code{nil}, Gnus will check for and delete all bogus groups at
1204 startup.  A @dfn{bogus group} is a group that you have in your
1205 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
1206 bogus groups isn't very quick, so to save time and resources, it's best
1207 to leave this option off, and instead do the checking for bogus groups
1208 once in a while from the group buffer (@pxref{Group Maintenance}).
1209
1210 @item gnus-inhibit-startup-message
1211 @vindex gnus-inhibit-startup-message
1212 If non-@code{nil}, the startup message won't be displayed.  That way,
1213 your boss might not notice that you are reading news instead of doing
1214 your job.
1215
1216 @item gnus-no-groups-message
1217 @vindex gnus-no-groups-message
1218 Message displayed by Gnus when no groups are available.
1219 @end table
1220
1221 @node The Group Buffer
1222 @chapter The Group Buffer
1223 @cindex group buffer
1224
1225 The @dfn{group buffer} lists all (or parts) of the available groups.  It
1226 is the first buffer shown when Gnus starts, and will never be killed as
1227 long as Gnus is active.
1228
1229 @menu
1230 * Group Buffer Format::    Information listed and how you can change it.
1231 * Group Maneuvering::      Commands for moving in the group buffer.
1232 * Selecting a Group::      Actually reading news.
1233 * Subscription Commands::  Unsubscribing, killing, subscribing.
1234 * Group Levels::           Levels? What are those, then?
1235 * Group Score::            A mechanism for finding out what groups you like.
1236 * Marking Groups::         You can mark groups for later processing.
1237 * Foreign Groups::         How to create foreign groups.
1238 * Group Parameters::       Each group may have different parameters set.
1239 * Listing Groups::         Gnus can list various subsets of the groups.
1240 * Sorting Groups::         Re-arrange the group order.
1241 * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
1242 * Browse Foreign Server::  You can browse a server.  See what if has to offer.
1243 * Exiting Gnus::           Stop reading news and get some work done.
1244 * Group Topics::           A folding group mode divided into topics.
1245 * Misc Group Stuff::       Other stuff that you can to do.
1246 @end menu
1247
1248 @node Group Buffer Format
1249 @section Group Buffer Format
1250 @cindex group buffer format
1251
1252 The default format of the group buffer is nice and dull, but you can
1253 make it as exciting and ugly as you feel like.
1254
1255 Here's a couple of example group lines:
1256
1257 @example
1258      25: news.announce.newusers
1259  *    0: alt.fan.andrea-dworkin
1260 @end example
1261
1262 Quite simple, huh?
1263
1264 You can see that there are 25 unread articles in
1265 @samp{news.announce.newusers}.  There are no unread articles, but some
1266 ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
1267 asterisk at the beginning of the line?)
1268
1269 @vindex gnus-group-line-format
1270 You can fuck that up to your heart's delight by fiddling with the
1271 @code{gnus-group-line-format} variable.  This variable works along the
1272 lines of a @code{format} specification, which is pretty much the same as
1273 a @code{printf} specifications, for those of you who use (feh!) C.
1274 @xref{Formatting Variables}. 
1275
1276 The default value that produced those lines above is 
1277 @samp{"%M%S%5y: %(%g%)\n"}.
1278
1279 There should always be a colon on the line; the cursor always moves to
1280 the colon after performing an operation.  Nothing else is required---not
1281 even the group name.  All displayed text is just window dressing, and is
1282 never examined by Gnus.  Gnus stores all real information it needs using
1283 text properties.
1284
1285 (Note that if you make a really strange, wonderful, spreadsheet-like
1286 layout, everybody will believe you are hard at work with the accounting
1287 instead of wasting time reading news.)
1288
1289 Here's a list of all available format characters:
1290
1291 @table @samp
1292
1293 @item M    
1294 Only marked articles.
1295
1296 @item S
1297 Whether the group is subscribed.
1298
1299 @item L    
1300 Level of subscribedness.
1301
1302 @item N
1303 Number of unread articles.
1304
1305 @item I
1306 Number of dormant articles.
1307
1308 @item T
1309 Number of ticked articles.
1310
1311 @item R
1312 Number of read articles.
1313
1314 @item t
1315 Total number of articles.
1316
1317 @item y
1318 Number of unread, unticked, non-dormant articles.
1319
1320 @item i
1321 Number of ticked and dormant articles.
1322
1323 @item g
1324 Full group name.
1325
1326 @item G
1327 Group name.
1328
1329 @item D
1330 Newsgroup description.
1331
1332 @item o
1333 Moderated.
1334
1335 @item O
1336 Moderated.
1337
1338 @item s
1339 Select method.
1340
1341 @item n
1342 Select from where.
1343
1344 @item z
1345 A string that looks like @samp{<%s:%n>} if a foreign select method is
1346 used.
1347
1348 @item P
1349 Indentation based on the level of the topic (@pxref{Group Topics}). 
1350
1351 @item c
1352 @vindex gnus-group-uncollapsed-levels
1353 Short (collapsed) group name.  The @code{gnus-group-uncollapsed-levels}
1354 variable says how many levels to leave at the end of the group name.
1355 The default is @samp{1}.
1356
1357 @item u
1358 User defined specifier.  The next character in the format string should
1359 be a letter.  @sc{gnus} will call the function
1360 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1361 following @samp{%u}.  The function will be passed the current headers as
1362 argument.  The function should return a string, which will be inserted
1363 into the buffer just like information from any other specifier.
1364 @end table
1365
1366 @cindex *
1367 All the ``number-of'' specs will be filled with an asterisk (@samp{*}) if
1368 no info is available---for instance, if it is a non-activated foreign
1369 group, or a bogus (or semi-bogus) native group.
1370
1371 @vindex gnus-group-mode-line-format
1372 The mode line can be changed by setting
1373 (@code{gnus-group-mode-line-format}).  It doesn't understand that many
1374 format specifiers:
1375
1376 @table @samp
1377 @item S
1378 The native news server.
1379 @item M
1380 The native select method.
1381 @end table
1382
1383 @node Group Maneuvering
1384 @section Group Maneuvering
1385 @cindex group movement
1386
1387 All movement commands understand the numeric prefix and will behave as
1388 expected, hopefully. 
1389
1390 @table @kbd
1391
1392 @item n
1393 @kindex n (Group)
1394 @findex gnus-group-next-unread-group
1395 Go to the next group that has unread articles
1396 (@code{gnus-group-next-unread-group}).
1397
1398 @item p
1399
1400 @itemx DEL
1401 @kindex DEL (Group)
1402 @kindex p (Group)
1403 @findex gnus-group-prev-unread-group
1404 Go to the previous group group that has unread articles
1405 (@code{gnus-group-prev-unread-group}).
1406
1407 @item N
1408 @kindex N (Group)
1409 @findex gnus-group-next-group
1410 Go to the next group (@code{gnus-group-next-group}).
1411
1412 @item P
1413 @kindex P (Group)
1414 @findex gnus-group-prev-group
1415 Go to the previous group (@code{gnus-group-prev-group}).
1416
1417 @item M-p
1418 @kindex M-p (Group)
1419 @findex gnus-group-next-unread-group-same-level
1420 Go to the next unread group on the same level (or lower)
1421 (@code{gnus-group-next-unread-group-same-level}). 
1422
1423 @item M-n
1424 @kindex M-n (Group)
1425 @findex gnus-group-prev-unread-group-same-level
1426 Go to the previous unread group on the same level (or lower)
1427 (@code{gnus-group-prev-unread-group-same-level}). 
1428 @end table
1429
1430 Three commands for jumping to groups:
1431
1432 @table @kbd
1433
1434 @item j
1435 @kindex j (Group)
1436 @findex gnus-group-jump-to-group
1437 Jump to a group (and make it visible if it isn't already)
1438 (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
1439 like living groups.
1440
1441 @item ,
1442 @kindex , (Group)
1443 @findex gnus-group-best-unread-group
1444 Jump to the unread group with the lowest level
1445 (@code{gnus-group-best-unread-group}). 
1446
1447 @item .
1448 @kindex . (Group)
1449 @findex gnus-group-first-unread-group
1450 Jump to the first group with unread articles
1451 (@code{gnus-group-first-unread-group}).  
1452 @end table
1453
1454 @vindex gnus-group-goto-unread
1455 If @code{gnus-group-goto-unread} is @code{nil}, all the movement
1456 commands will move to the next group, not the next unread group.  Even
1457 the commands that say they move to the next unread group.  The default
1458 is @code{t}.
1459
1460
1461 @node Selecting a Group
1462 @section Selecting a Group
1463 @cindex group selection
1464
1465 @table @kbd
1466
1467 @item SPACE
1468 @kindex SPACE (Group)
1469 @findex gnus-group-read-group
1470 Select the current group, switch to the summary buffer and display the
1471 first unread article (@code{gnus-group-read-group}).  If there are no
1472 unread articles in the group, or if you give a non-numerical prefix to
1473 this command, Gnus will offer to fetch all the old articles in this
1474 group from the server.  If you give a numerical prefix @var{N}, Gnus
1475 will fetch @var{N} number of articles.  If @var{N} is positive, fetch
1476 the @var{N} newest articles, if @var{N} is negative, fetch the
1477 @var{abs(N)} oldest articles.
1478
1479 @item RET
1480 @kindex RET (Group)
1481 @findex gnus-group-select-group
1482 Select the current group and switch to the summary buffer
1483 (@code{gnus-group-select-group}).  Takes the same arguments as
1484 @code{gnus-group-read-group}---the only difference is that this command
1485 does not display the first unread article automatically upon group
1486 entry. 
1487
1488 @item M-RET
1489 @kindex M-RET (Group)
1490 @findex gnus-group-quick-select-group
1491 This does the same as the command above, but tries to do it with the
1492 minimum amount off fuzz (@code{gnus-group-quick-select-group}).  No
1493 scoring/killing will be performed, there will be no highlights and no
1494 expunging.  This might be useful if you're in a real hurry and have to
1495 enter some humongous groups.
1496
1497 @item M-SPACE
1498 @kindex M-RET (Group)
1499 @findex gnus-group-visible-select-group
1500 This is yet one more command that does the same as the one above, but
1501 this one does it without expunging and hiding dormants
1502 (@code{gnus-group-visible-select-group}).  
1503
1504 @item c
1505 @kindex c (Group)
1506 @findex gnus-group-catchup-current
1507 Mark all unticked articles in this group as read
1508 (@code{gnus-group-catchup-current}). 
1509
1510 @item C
1511 @kindex C (Group)
1512 @findex gnus-group-catchup-current-all
1513 Mark all articles in this group, even the ticked ones, as read
1514 (@code{gnus-group-catchup-current-all}). 
1515 @end table
1516
1517 @vindex gnus-large-newsgroup
1518 The @code{gnus-large-newsgroup} variable says what Gnus should consider
1519 to be a big group.  This is 200 by default.  If the group has more
1520 unread articles than this, Gnus will query the user before entering the
1521 group.  The user can then specify how many articles should be fetched
1522 from the server.  If the user specifies a negative number (@samp{-n}),
1523 the @samp{n} oldest articles will be fetched.  If it is positive, the
1524 @samp{n} articles that have arrived most recently will be fetched.
1525
1526 @vindex gnus-select-group-hook
1527 @vindex gnus-auto-select-first
1528 @code{gnus-auto-select-first} control whether any articles are selected
1529 automatically when entering a group.  
1530
1531 @table @code
1532
1533 @item nil
1534 Don't select any articles when entering the group.  Just display the
1535 full summary buffer.
1536
1537 @item t
1538 Select the first unread article when entering the group.  
1539
1540 @item best
1541 Select the most high-scored article in the group when entering the
1542 group. 
1543 @end table
1544         
1545 If you want to prevent automatic selection in some group (say, in a
1546 binary group with Huge articles) you can set this variable to @code{nil}
1547 in @code{gnus-select-group-hook}, which is called when a group is
1548 selected.
1549
1550 @findex gnus-thread-sort-by-total-score
1551 @findex gnus-thread-sort-by-date
1552 @findex gnus-thread-sort-by-score
1553 @findex gnus-thread-sort-by-subject
1554 @findex gnus-thread-sort-by-author
1555 @findex gnus-thread-sort-by-number
1556 @vindex gnus-thread-sort-functions
1557 If you are using a threaded summary display, you can sort the threads by
1558 setting @code{gnus-thread-sort-functions}, which is a list of functions.
1559 By default, sorting is done on article numbers.  Ready-made sorting
1560 predicate functions include @code{gnus-thread-sort-by-number},
1561 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
1562 @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
1563 @code{gnus-thread-sort-by-total-score}.
1564
1565 Each function takes two threads and return non-@code{nil} if the first
1566 thread should be sorted before the other.  Note that sorting really is
1567 normally done by looking only at the roots of each thread.  If you use
1568 more than one function, the primary sort key should be the last function
1569 in the list.  You should probably always include
1570 @code{gnus-thread-sort-by-number} in the list of sorting
1571 functions---preferably first.  This will ensure that threads that are
1572 equal with respect to the other sort criteria will be displayed in
1573 ascending article order.
1574
1575 If you would like to sort by score, then by subject, and finally by
1576 number, you could do something like:
1577
1578 @lisp
1579 (setq gnus-thread-sort-functions 
1580       '(gnus-thread-sort-by-number
1581         gnus-thread-sort-by-subject
1582         gnus-thread-sort-by-score))
1583 @end lisp
1584
1585 The threads that have highest score will be displayed first in the
1586 summary buffer.  When threads have the same score, they will be sorted
1587 alphabetically.  The threads that have the same score and the same
1588 subject will be sorted by number, which is (normally) the sequence in
1589 which the articles arrived.
1590
1591 If you want to sort by score and then reverse arrival order, you could
1592 say something like:
1593
1594 @lisp
1595 (setq gnus-thread-sort-functions
1596       '((lambda (t1 t2) 
1597           (not (gnus-thread-sort-by-number t1 t2)))
1598         gnus-thread-sort-by-score))
1599 @end lisp
1600
1601 @vindex gnus-thread-score-function
1602 The function in the @code{gnus-thread-score-function} variable (default
1603 @code{+}) is used for calculating the total score of a thread.  Useful
1604 functions might be @code{max}, @code{min}, or squared means, or whatever
1605 tickles your fancy.
1606
1607 @findex gnus-article-sort-functions
1608 @findex gnus-article-sort-by-date
1609 @findex gnus-article-sort-by-score
1610 @findex gnus-article-sort-by-subject
1611 @findex gnus-article-sort-by-author
1612 @findex gnus-article-sort-by-number
1613 If you are using an unthreaded display for some strange reason or other,
1614 you have to fiddle with the @code{gnus-article-sort-functions} variable.
1615 It is very similar to the @code{gnus-thread-sort-functions}, except that
1616 is uses slightly different functions for article comparison.  Available
1617 sorting predicate functions are @code{gnus-article-sort-by-number},
1618 @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject},
1619 @code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}.
1620
1621 If you want to sort an unthreaded summary display by subject, you could
1622 say something like:
1623
1624 @lisp
1625 (setq gnus-article-sort-functions 
1626       '(gnus-article-sort-by-number
1627         gnus-article-sort-by-subject))
1628 @end lisp
1629
1630
1631 @node Subscription Commands
1632 @section Subscription Commands
1633 @cindex subscribing
1634
1635 @table @kbd
1636
1637 @item S t
1638 @itemx u
1639 @kindex S t (Group)
1640 @kindex u (Group)
1641 @findex gnus-group-unsubscribe-current-group
1642 Toggle subscription to the current group
1643 (@code{gnus-group-unsubscribe-current-group}).  
1644
1645 @item S s
1646 @itemx U
1647 @kindex S s (Group)
1648 @kindex U (Group)
1649 @findex gnus-group-unsubscribe-group
1650 Prompt for a group to subscribe, and then subscribe it.  If it was
1651 subscribed already, unsubscribe it instead
1652 (@code{gnus-group-unsubscribe-group}).
1653
1654 @item S k
1655 @itemx C-k
1656 @kindex S k (Group)
1657 @kindex C-k (Group)
1658 @findex gnus-group-kill-group
1659 Kill the current group (@code{gnus-group-kill-group}).
1660
1661 @item S y
1662 @itemx C-y
1663 @kindex S y (Group)
1664 @kindex C-y (Group)
1665 @findex gnus-group-yank-group
1666 Yank the last killed group (@code{gnus-group-yank-group}).
1667
1668 @item S w
1669 @itemx C-w
1670 @kindex S w (Group)
1671 @kindex C-w (Group)
1672 @findex gnus-group-kill-region
1673 Kill all groups in the region (@code{gnus-group-kill-region}). 
1674
1675 @item S z
1676 @kindex S z (Group)
1677 @findex gnus-group-kill-all-zombies
1678 Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
1679
1680 @item S C-k
1681 @kindex S C-k (Group)
1682 @findex gnus-group-kill-level
1683 Kill all groups on a certain level (@code{gnus-group-kill-level}).
1684 These groups can't be yanked back after killing, so this command should
1685 be used with some caution.  The only thing where this command comes in
1686 really handy is when you have a @file{.newsrc} with lots of unsubscribed
1687 groups that you want to get rid off.  @kbd{S C-k} on level @code{7} will
1688 kill off all unsubscribed groups that do not have message numbers in the
1689 @file{.newsrc} file.  
1690
1691 @end table
1692
1693 Also @xref{Group Levels}.
1694
1695 @node Group Levels
1696 @section Group Levels
1697 @cindex group level
1698
1699 All groups have a level of @dfn{subscribedness}.  For instance, if a
1700 group is on level 2, it is more subscribed than a group on level 5.  You
1701 can ask Gnus to just list groups on a given level or lower
1702 (@pxref{Listing Groups}), or to just check for new articles in groups on
1703 a given level or lower (@pxref{Misc Group Stuff}).
1704
1705 @table @kbd
1706
1707 @item S l
1708 @kindex S l (Group)
1709 @findex gnus-group-set-current-level
1710 Set the level of the current group.  If a numeric prefix is given, the
1711 next @var{n} groups will have their levels set.  The user will be
1712 prompted for a level.
1713 @end table
1714
1715 @vindex gnus-level-killed
1716 @vindex gnus-level-zombie
1717 @vindex gnus-level-unsubscribed
1718 @vindex gnus-level-subscribed
1719 Gnus considers groups on between levels 1 and
1720 @code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
1721 @code{gnus-level-subscribed} (exclusive) and
1722 @code{gnus-level-unsubscribed} (inclusive) (default 7) to be
1723 unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
1724 (default 8) and @code{gnus-level-killed} to be killed (default 9),
1725 completely dead.  Gnus treats subscribed and unsubscribed groups exactly
1726 the same, but zombie and killed groups have no information on what
1727 articles you have read, etc, stored.  This distinction between dead and
1728 living groups isn't done because it is nice or clever, it is done purely
1729 for reasons of efficiency.
1730
1731 It is recommended that you keep all your mail groups (if any) on quite
1732 low levels (eg. 1 or 2).
1733
1734 If you want to play with the level variables, you should show some care.
1735 Set them once, and don't touch them ever again.  Better yet, don't touch
1736 them at all unless you know exactly what you're doing.
1737
1738 @vindex gnus-level-default-unsubscribed
1739 @vindex gnus-level-default-subscribed
1740 Two closely related variables are @code{gnus-level-default-subscribed}
1741 (default 3) and @code{gnus-level-default-unsubscribed} (default 6),
1742 which are the levels that new groups will be put on if they are
1743 (un)subscribed.  These two variables should, of course, be inside the
1744 relevant legal ranges.
1745
1746 @vindex gnus-keep-same-level
1747 If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
1748 will only move to groups that are of the same level (or lower).  In
1749 particular, going from the last article in one group to the next group
1750 will go to the next group of the same level (or lower).  This might be
1751 handy if you want to read the most important groups before you read the
1752 rest.
1753
1754 @vindex gnus-group-default-list-level
1755 All groups with a level less than or equal to
1756 @code{gnus-group-default-list-level} will be listed in the group buffer
1757 by default.
1758
1759 @vindex gnus-group-list-inactive-groups
1760 If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
1761 groups will be listed along with the unread groups.  This variable is
1762 @code{t} by default.  If it is @code{nil}, inactive groups won't be
1763 listed. 
1764
1765 @vindex gnus-group-use-permament-levels
1766 If @code{gnus-group-use-permament-levels} is non-@code{nil}, once you
1767 give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
1768 use this level as the ``work'' level.
1769
1770 @vindex gnus-activate-level
1771 Gnus will normally just activate groups that are on level
1772 @code{gnus-activate-level} or less.  If you don't want to activate
1773 unsubscribed groups, for instance, you might set this variable to
1774 @samp{5}. 
1775
1776
1777 @node Group Score
1778 @section Group Score
1779 @cindex group score
1780
1781 You would normally keep important groups on high levels, but that scheme
1782 is somewhat restrictive.  Don't you wish you could have Gnus sort the
1783 group buffer according to how often you read groups, perhaps?  Within
1784 reason?  
1785
1786 This is what @dfn{group score} is for.  You can assign a score to each
1787 group.  You can then sort the group buffer based on this score.
1788 Alternatively, you can sort on score and then level.  (Taken together,
1789 the level and the score is called the @dfn{rank} of the group.  A group
1790 that is on level 4 and has a score of 1 has a higher rank than a group
1791 on level 5 that has a score of 300.  (The level is the most significant
1792 part and the score is the least significant part.)
1793
1794 @findex gnus-summary-bubble-group
1795 If you want groups you read often to get higher scores than groups you
1796 read seldom you can add the @code{gnus-summary-bubble-group} function to
1797 the @code{gnus-summary-exit-hook} hook.  This will result (after
1798 sorting) in a bubbling sort of action.  If you want to see that in
1799 action after each summary exit, you can add
1800 @code{gnus-group-sort-groups-by-rank} or
1801 @code{gnus-group-sort-groups-by-score} to the same hook, but that will
1802 slow things down somewhat.
1803
1804
1805 @node Marking Groups
1806 @section Marking Groups
1807 @cindex marking groups
1808
1809 If you want to perform some command on several groups, and they appear
1810 subsequently in the group buffer, you would normally just give a
1811 numerical prefix to the command.  Most group commands will then do your
1812 bidding on those groups.
1813
1814 However, if the groups are not in sequential order, you can still
1815 perform a command on several groups.  You simply mark the groups first
1816 with the process mark and then execute the command.
1817
1818 @table @kbd
1819
1820 @item #
1821 @kindex # (Group)
1822 @itemx M m
1823 @kindex M m (Group)
1824 @findex gnus-group-mark-group
1825 Set the mark on the current group (@code{gnus-group-mark-group}). 
1826
1827 @item M-#
1828 @kindex M-# (Group)
1829 @itemx < u
1830 @kindex M u (Group)
1831 @findex gnus-group-unmark-group
1832 Remove the mark from the current group
1833 (@code{gnus-group-unmark-group}). 
1834
1835 @item M U
1836 @kindex M U (Group)
1837 @findex gnus-group-unmark-all-groups
1838 Remove the mark from all groups (@code{gnus-group-unmark-all-groups}). 
1839
1840 @item M w
1841 @kindex M w (Group)
1842 @findex gnus-group-mark-region
1843 Mark all groups between point and mark (@code{gnus-group-mark-region}). 
1844
1845 @item M b
1846 @kindex M b (Group)
1847 @findex gnus-group-mark-buffer
1848 Mark all groups in the buffer (@code{gnus-group-mark-buffer}). 
1849
1850 @item M r
1851 @kindex M r (Group)
1852 @findex gnus-group-mark-regexp
1853 Mark all groups that match some regular expression
1854 (@code{gnus-group-mark-regexp}).  
1855 @end table
1856
1857 Also @xref{Process/Prefix}.
1858
1859 If you want to execute some command on all groups that have been marked
1860 with the process mark, you can use the @kbd{M-&}
1861 (@code{gnus-group-universal-argument}) command.  It will prompt you for
1862 the command to be executed.
1863
1864
1865
1866 @node Foreign Groups
1867 @section Foreign Groups
1868 @cindex foreign groups
1869
1870 A @dfn{foreign group} is a group that is not read by the usual (or
1871 default) means.  It could be, for instance, a group from a different
1872 @sc{nntp} server, it could be a virtual group, or it could be your own
1873 personal mail group.
1874
1875 A foreign group (or any group, really) is specified by a @dfn{name} and
1876 a @dfn{select method}.  To take the latter first, a select method is a
1877 list where the first element says what backend to use (eg. @code{nntp},
1878 @code{nnspool}, @code{nnml}) and the second element is the @dfn{server
1879 name}.  There may be additional elements in the select method, where the
1880 value may have special meaning for the backend in question.
1881
1882 One could say that a select method defines a @dfn{virtual server}---so
1883 we do just that (@pxref{The Server Buffer}).
1884
1885 The @dfn{name} of the group is the name the backend will recognize the
1886 group as.
1887
1888 For instance, the group @samp{soc.motss} on the @sc{nntp} server
1889 @samp{some.where.edu} will have the name @samp{soc.motss} and select
1890 method @code{(nntp "some.where.edu")}.  Gnus will call this group, in
1891 all circumstances, @samp{nntp+some.where.edu:soc.motss}, even though the
1892 @code{nntp} backend just knows this group as @samp{soc.motss}.
1893
1894 Here are some commands for making and editing general foreign groups,
1895 and some commands to ease the creation of some special-purpose groups:
1896
1897 @table @kbd
1898
1899 @item G m
1900 @kindex G m (Group)
1901 @findex gnus-group-make-group
1902 Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you
1903 for a name, a method and possibly an @dfn{address}.  For an easier way
1904 to subscribe to @sc{nntp} groups, @xref{Browse Foreign Server}.
1905
1906 @item G r
1907 @kindex G m (Group)
1908 @findex gnus-group-rename-group
1909 Rename the current group to something else
1910 (@code{gnus-group-rename-group}).  This is legal only on some groups --
1911 mail groups mostly.  This command might very well be quite slow on some
1912 backends. 
1913
1914 @item G e
1915 @kindex G e (Group)
1916 @findex gnus-group-edit-group-method
1917 Enter a buffer where you can edit the select method of the current
1918 group (@code{gnus-group-edit-group-method}).
1919
1920 @item G p
1921 @kindex G p (Group)
1922 @findex gnus-group-edit-group-parameters
1923 Enter a buffer where you can edit the group parameters
1924 (@code{gnus-group-edit-group-parameters}). 
1925
1926 @item G E
1927 @kindex G E (Group)
1928 @findex gnus-group-edit-group
1929 Enter a buffer where you can edit the group info
1930 (@code{gnus-group-edit-group}).
1931
1932 @item G d
1933 @kindex G d (Group)
1934 @findex gnus-group-make-directory-group
1935 Make a directory group.  You will be prompted for a directory name
1936 (@code{gnus-group-make-directory-group}).  
1937
1938 @item G h 
1939 @kindex G h (Group)
1940 @findex gnus-group-make-help-group
1941 Make the Gnus help group (@code{gnus-group-make-help-group}).
1942
1943 @item G a
1944 @kindex G a (Group)
1945 @findex gnus-group-make-archive-group
1946 @vindex gnus-group-archive-directory
1947 @vindex gnus-group-recent-archive-directory
1948 Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
1949 default a group pointing to the most recent articles will be created
1950 (@code{gnus-group-recent-archibe-directory}), but given a prefix, a full
1951 group will be created from from @code{gnus-group-archive-directory}.
1952
1953 @item G k
1954 @kindex G k (Group)
1955 @findex gnus-group-make-kiboze-group
1956 Make a kiboze group.  You will be prompted for a name, for a regexp to
1957 match groups to be ``included'' in the kiboze group, and a series of
1958 strings to match on headers (@code{gnus-group-make-kiboze-group}).
1959
1960 @item G D
1961 @kindex G D (Group)
1962 @findex gnus-group-enter-directory
1963 Read a random directory as if with were a newsgroup with the
1964 @code{nneething} backend (@code{gnus-group-enter-directory}).
1965
1966 @item G f
1967 @kindex G f (Group)
1968 @findex gnus-group-make-doc-group
1969 Make a group based on some file or other
1970 (@code{gnus-group-make-doc-group}).  If you give a prefix to this
1971 command, you will be prompted for a file name and a file type.
1972 Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
1973 @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs}, and
1974 @code{forward}.  If you run this command without a prefix, Gnus will
1975 guess at the file type.
1976
1977 @item G DEL
1978 @kindex G DEL (Group)
1979 @findex gnus-group-delete-group
1980 This function will delete the current group
1981 (@code{gnus-group-delete-group}).  If given a prefix, this function will
1982 actually delete all the articles in the group, and forcibly remove the
1983 group itself from the face of the Earth.  Use a prefix only if you are
1984 sure of what you are doing.  
1985
1986 @item G V
1987 @kindex G V (Group)
1988 @findex gnus-group-make-empty-virtual
1989 Make a new, fresh, empty @code{nnvirtual} group
1990 (@code{gnus-group-make-empty-virtual}).
1991
1992 @item G v
1993 @kindex G v (Group)
1994 @findex gnus-group-add-to-virtual
1995 Add the current group to an @code{nnvirtual} group
1996 (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
1997 @end table
1998
1999 The different methods all have their peculiarities, of course.
2000
2001 @menu
2002 * nntp::             Reading news from a different @sc{nntp} server.
2003 * nnspool::          Reading news from the local spool.
2004 * nnvirtual::        Combining articles from many groups.
2005 * nnkiboze::         Looking through parts of the newsfeed for articles.
2006 * nndir::            You can read a directory as if it was a newsgroup.
2007 * nneething::        Dired?  Who needs dired?
2008 * nndoc::            Single files can be the basis of a group.
2009 * SOUP::             Reading @sc{SOUP} packets ``offline''.
2010 * Reading Mail::     Reading your personal mail with Gnus.
2011 @end menu
2012
2013 @vindex gnus-activate-foreign-newsgroups
2014 If the @code{gnus-activate-foreign-newsgroups} is a positive number,
2015 Gnus will check all foreign groups with this level or lower at startup.
2016 This might take quite a while, especially if you subscribe to lots of
2017 groups from different @sc{nntp} servers.
2018
2019 @node nntp
2020 @subsection nntp
2021 @cindex @sc{nntp}
2022
2023 Subscribing to a foreign group from an @sc{nntp} server is rather easy.
2024 You just specify @code{nntp} as method and the address of the @sc{nntp}
2025 server as the, uhm, address.
2026
2027 If the @sc{nntp} server is located at a non-standard port, setting the
2028 third element of the select method to this port number should allow you
2029 to connect to the right port.  You'll have to edit the group info for
2030 that (@pxref{Foreign Groups}).
2031
2032 The name of the foreign group can be the same as a native group.  In
2033 fact, you can subscribe to the same group from as many different servers
2034 you feel like.  There will be no name collisions.
2035
2036 The following variables can be used to create a virtual @code{nntp}
2037 server: 
2038
2039 @table @code
2040
2041 @item nntp-server-opened-hook
2042 @vindex nntp-server-opened-hook
2043 @cindex @sc{mode reader}
2044 @cindex authinfo
2045 @cindex authentification
2046 @cindex nntp authentification
2047 @findex nntp-send-authinfo
2048 @findex nntp-send-mode-reader
2049 @code{nntp-server-opened-hook} is run after a connection has been made.
2050 It can be used to send commands to the @sc{nntp} server after it has
2051 been contacted.  By default is sends the command @samp{MODE READER} to
2052 the server with the @code{nntp-send-mode-reader} function.  Another
2053 popular function is @code{nntp-send-authinfo}, which will prompt you for
2054 an @sc{nntp} password and stuff.
2055
2056 @item nntp-server-action-alist 
2057 @vindex nntp-server-action-alist 
2058 This is an list of regexps to match on server types and actions to be
2059 taken when matches are made.  For instance, if you want Gnus to beep
2060 every time you connect to innd, you could say something like:
2061
2062 @lisp
2063 (setq nntp-server-action-alist
2064       '(("innd" (ding))))
2065 @end lisp
2066
2067 You probably don't want to do that, though.
2068
2069 The default value is
2070
2071 @lisp
2072   '(("nntpd 1\\.5\\.11t" 
2073      (remove-hook 'nntp-server-opened-hook nntp-send-mode-reader)))
2074 @end lisp
2075
2076 This ensures that Gnus doesn't send the @samp{MODE READER} command to
2077 nntpd 1.5.11t, since that command chokes that server, I've been told. 
2078
2079 @item nntp-maximum-request
2080 @vindex nntp-maximum-request
2081 If the @sc{nntp} server doesn't support @sc{nov} headers, this backend
2082 will collect headers by sending a series of @code{head} commands.  To
2083 speed things up, the backend sends lots of these commands without
2084 waiting for reply, and then reads all the replies.  This is controlled
2085 by the @code{nntp-maximum-request} variable, and is 400 by default.  If
2086 your network is buggy, you should set this to 1.
2087
2088 @item nntp-connection-timeout
2089 @vindex nntp-connection-timeout
2090 If you have lots of foreign @code{nntp} groups that you connect to
2091 regularly, you're sure to have problems with @sc{nntp} servers not
2092 responding properly, or being too loaded to reply within reasonable
2093 time.  This is can lead to awkward problems, which can be helped
2094 somewhat by setting @code{nntp-connection-timeout}.  This is an integer
2095 that says how many seconds the @code{nntp} backend should wait for a
2096 connection before giving up.  If it is @code{nil}, which is the default,
2097 no timeouts are done.
2098
2099 @item nntp-server-hook
2100 @vindex nntp-server-hook
2101 This hook is run as the last step when connecting to an @sc{nntp}
2102 server.
2103
2104 @c @findex nntp-open-rlogin
2105 @c @findex nntp-open-network-stream
2106 @c @item nntp-open-server-function
2107 @c @vindex nntp-open-server-function
2108 @c This function is used to connect to the remote system.  Two pre-made
2109 @c functions are @code{nntp-open-network-stream}, which is the default, and
2110 @c simply connects to some port or other on the remote system.  The other
2111 @c is @code{nntp-open-rlogin}, which does an rlogin on the remote system,
2112 @c and then does a telnet to the @sc{nntp} server available there.
2113 @c 
2114 @c @item nntp-rlogin-parameters
2115 @c @vindex nntp-rlogin-parameters
2116 @c If you use @code{nntp-open-rlogin} as the
2117 @c @code{nntp-open-server-function}, this list will be used as the
2118 @c parameter list given to @code{rsh}.
2119 @c 
2120 @c @item nntp-rlogin-user-name
2121 @c @vindex nntp-rlogin-user-name
2122 @c User name on the remote system when using the @code{rlogin} connect
2123 @c function. 
2124
2125 @item nntp-address
2126 @vindex nntp-address
2127 The address of the remote system running the @sc{nntp} server.
2128
2129 @item nntp-port-number
2130 @vindex nntp-port-number
2131 Port number to connect to when using the @code{nntp-open-network-stream}
2132 connect function.
2133
2134 @item nntp-buggy-select
2135 @vindex nntp-buggy-select
2136 Set this to non-@code{nil} if your select routine is buggy.
2137
2138 @item nntp-nov-is-evil 
2139 @vindex nntp-nov-is-evil 
2140 If the @sc{nntp} server does not support @sc{nov}, you could set this
2141 variable to @code{t}, but @code{nntp} usually checks whether @sc{nov}
2142 can be used automatically.
2143
2144 @item nntp-xover-commands
2145 @vindex nntp-xover-commands
2146 List of strings that are used as commands to fetch @sc{nov} lines from a
2147 server.  The default value of this variable is @code{("XOVER"
2148 "XOVERVIEW")}. 
2149
2150 @item nntp-nov-gap
2151 @vindex nntp-nov-gap
2152 @code{nntp} normally sends just one big request for @sc{nov} lines to
2153 the server.  The server responds with one huge list of lines.  However,
2154 if you have read articles 2-5000 in the group, and only want to read
2155 article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}
2156 lines that you do not want, and will not use.  This variable says how
2157 big a gap between two consecutive articles is allowed to be before the
2158 @code{XOVER} request is split into several request.  Note that if your
2159 network is fast, setting this variable to a really small number means
2160 that fetching will probably be slower.  If this variable is @code{nil},
2161 @code{nntp} will never split requests.
2162
2163 @item nntp-prepare-server-hook
2164 @vindex nntp-prepare-server-hook
2165 A hook run before attempting to connect to an @sc{nntp} server.
2166
2167 @item nntp-async-number
2168 @vindex nntp-async-number
2169 How many articles should be pre-fetched when in asynchronous mode.  If
2170 this variable is @code{t}, @code{nntp} will pre-fetch all the articles
2171 that it can without bound.  If it is @code{nil}, no pre-fetching will be
2172 made.
2173
2174 @item nntp-warn-about-losing-connection
2175 @vindex nntp-warn-about-losing-connection
2176 If this variable is non-@code{nil}, some noise will be made when a
2177 server closes connection.
2178
2179
2180 @end table
2181
2182 @node nnspool
2183 @subsection nnspool
2184 @cindex @code{nnspool}
2185 @cindex news spool
2186
2187 Subscribing to a foreign group from the local spool is extremely easy,
2188 and might be useful, for instance, to speed up reading groups like
2189 @samp{alt.binaries.pictures.furniture}.
2190
2191 Anyways, you just specify @code{nnspool} as the method and @samp{""} (or
2192 anything else) as the address.
2193
2194 If you have access to a local spool, you should probably use that as the
2195 native select method (@pxref{Finding the News}).  It is normally faster
2196 than using an @code{nntp} select method, but might not be.  It depends.
2197 You just have to try to find out what's best at your site.
2198
2199 @table @code
2200
2201 @item nnspool-inews-program
2202 @vindex nnspool-inews-program
2203 Program used to post an article.
2204
2205 @item nnspool-inews-switches
2206 @vindex nnspool-inews-switches
2207 Parameters given to the inews program when posting an article. 
2208
2209 @item nnspool-spool-directory
2210 @vindex nnspool-spool-directory
2211 Where @code{nnspool} looks for the articles.  This is normally
2212 @file{/usr/spool/news/}.
2213
2214 @item nnspool-nov-directory 
2215 @vindex nnspool-nov-directory 
2216 Where @code{nnspool} will look for @sc{nov} files.  This is normally
2217 @file{/usr/spool/news/over.view/}.
2218
2219 @item nnspool-lib-dir
2220 @vindex nnspool-lib-dir
2221 Where the news lib dir is (@file{/usr/lib/news/} by default).
2222
2223 @item nnspool-active-file
2224 @vindex nnspool-active-file
2225 The path of the active file.
2226
2227 @item nnspool-newsgroups-file
2228 @vindex nnspool-newsgroups-file
2229 The path of the group descriptions file.
2230
2231 @item nnspool-history-file
2232 @vindex nnspool-history-file
2233 The path of the news history file.
2234
2235 @item nnspool-active-times-file
2236 @vindex nnspool-active-times-file
2237 The path of the active date file.
2238
2239 @item nnspool-nov-is-evil
2240 @vindex nnspool-nov-is-evil
2241 If non-@code{nil}, @code{nnspool} won't try to use any @sc{nov} files
2242 that it finds.
2243
2244 @item nnspool-sift-nov-with-sed
2245 @vindex nnspool-sift-nov-with-sed
2246 If non-@code{nil}, which is the default, use @code{sed} to get the
2247 relevant portion from the overview file.  If nil, @code{nnspool} will
2248 load the entire file into a buffer and process it there.
2249
2250 @end table
2251
2252
2253 @node nnvirtual
2254 @subsection nnvirtual
2255 @cindex @code{nnvirtual}
2256 @cindex virtual groups
2257
2258 An @dfn{nnvirtual group} is really nothing more than a collection of
2259 other groups.
2260
2261 For instance, if you are tired of reading many small group, you can
2262 put them all in one big group, and then grow tired of reading one
2263 big, unwieldy group.  The joys of computing!
2264
2265 You specify @code{nnvirtual} as the method.  The address should be a
2266 regexp to match component groups.
2267
2268 All marks in the virtual group will stick to the articles in the
2269 component groups.  So if you tick an article in a virtual group, the
2270 article will also be ticked in the component group from whence it came.
2271 (And vice versa---marks from the component groups will also be shown in
2272 the virtual group.)
2273
2274 Here's an example @code{nnvirtual} method that collects all Andrea Dworkin
2275 newsgroups into one, big, happy newsgroup:
2276
2277 @lisp
2278 (nnvirtual "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*")
2279 @end lisp
2280
2281 The component groups can be native or foreign; everything should work
2282 smoothly, but if your computer explodes, it was probably my fault.
2283
2284 Collecting the same group from several servers might actually be a good
2285 idea if users have set the Distribution header to limit distribution.
2286 If you would like to read @samp{soc.motss} both from a server in Japan
2287 and a server in Norway, you could use the following as the group regexp:
2288
2289 @example
2290 "^nntp+some.server.jp:soc.motss$\\|^nntp+some.server.no:soc.motss$"
2291 @end example
2292
2293 This should work kinda smoothly---all articles from both groups should
2294 end up in this one, and there should be no duplicates.  Threading (and
2295 the rest) will still work as usual, but there might be problems with the
2296 sequence of articles.  Sorting on date might be an option here
2297 (@pxref{Selecting a Group}.
2298
2299 One limitation, however---all groups that are included in a virtual
2300 group has to be alive (i.e., subscribed or unsubscribed).  Killed or
2301 zombie groups can't be component groups for @code{nnvirtual} groups.
2302
2303 @vindex nnvirtual-always-rescan
2304 If the @code{nnvirtual-always-rescan} is non-@code{nil},
2305 @code{nnvirtual} will always scan groups for unread articles when
2306 entering a virtual group.  If this variable is @code{nil} (which is the
2307 default) and you read articles in a component group after the virtual
2308 group has been activated, the read articles from the component group
2309 will show up when you enter the virtual group.  You'll also see this
2310 effect if you have two virtual groups that contain the same component
2311 group.  If that's the case, you should set this variable to @code{t}.
2312 Or you can just tap @code{M-g} on the virtual group every time before
2313 you enter it---it'll have much the same effect.
2314
2315
2316 @node nnkiboze
2317 @subsection nnkiboze
2318 @cindex @code{nnkiboze}
2319 @cindex kibozing
2320
2321 @dfn{Kibozing} is defined by @sc{oed} as ``grepping through (parts of)
2322 the news feed''.  @code{nnkiboze} is a backend that will do this for you.  Oh
2323 joy!  Now you can grind any @sc{nntp} server down to a halt with useless
2324 requests!  Oh happiness!
2325
2326 The address field of the @code{nnkiboze} method is, as with
2327 @code{nnvirtual}, a regexp to match groups to be ``included'' in the
2328 @code{nnkiboze} group.  There most similarities between @code{nnkiboze}
2329 and @code{nnvirtual} ends.
2330
2331 In addition to this regexp detailing component groups, an @code{nnkiboze} group
2332 must have a score file to say what articles that are to be included in
2333 the group (@pxref{Scoring}).
2334
2335 @kindex M-x nnkiboze-generate-groups
2336 @findex nnkiboze-generate-groups
2337 You must run @kbd{M-x nnkiboze-generate-groups} after creating the
2338 @code{nnkiboze} groups you want to have.  This command will take time.  Lots of
2339 time.  Oodles and oodles of time.  Gnus has to fetch the headers from
2340 all the articles in all the components groups and run them through the
2341 scoring process to determine if there are any articles in the groups
2342 that are to be part of the @code{nnkiboze} groups.
2343
2344 Please limit the number of component groups by using restrictive
2345 regexps.  Otherwise your sysadmin may become annoyed with you, and the
2346 @sc{nntp} site may throw you off and never let you back in again.
2347 Stranger things have happened.
2348
2349 @code{nnkiboze} component groups do not have to be alive---they can be dead,
2350 and they can be foreign.  No restrictions.
2351
2352 @vindex nnkiboze-directory
2353 The generation of an @code{nnkiboze} group means writing two files in
2354 @code{nnkiboze-directory}, which is @file{~/News/} by default.  One
2355 contains the @sc{nov} header lines for all the articles in the group,
2356 and the other is an additional @file{.newsrc} file to store information
2357 on what groups that have been searched through to find component
2358 articles.
2359
2360 Articles that are marked as read in the @code{nnkiboze} group will have their
2361 @sc{nov} lines removed from the @sc{nov} file.
2362
2363
2364 @node nndir
2365 @subsection nndir
2366 @cindex @code{nndir}
2367 @cindex directory groups
2368
2369 If you have a directory that has lots of articles in separate files in
2370 it, you might treat it as a newsgroup.  The files have to have numerical
2371 names, of course.
2372
2373 This might be an opportune moment to mention @code{ange-ftp}, that most
2374 wonderful of all wonderful Emacs packages.  When I wrote @code{nndir}, I
2375 didn't think much about it---a backend to read directories.  Big deal.
2376
2377 @code{ange-ftp} changes that picture dramatically.  For instance, if you
2378 enter @file{"/ftp@@sina.tcamc.uh.edu:/pub/emacs/ding-list/"} as the the
2379 directory name, ange-ftp will actually allow you to read this directory
2380 over at @samp{sina} as a newsgroup.  Distributed news ahoy!
2381
2382 @code{nndir} will use @sc{nov} files if they are present.
2383
2384 @code{nndir} is a ``read-only'' backend---you can't delete or expire
2385 articles with this method.  You can use @code{nnmh} or @code{nnml} for
2386 whatever you use @code{nndir} for, so you could switch to any of those
2387 methods if you feel the need to have a non-read-only @code{nndir}.
2388
2389
2390 @node nneething
2391 @subsection nneething
2392 @cindex @code{nneething}
2393
2394 From the @code{nndir} backend (which reads a single spool-like
2395 directory), it's just a hop and a skip to @code{nneething}, which
2396 pretends that any random directory is a newsgroup.  Strange, but true.
2397
2398 When @code{nneething} is presented with a directory, it will scan this
2399 directory and assign article numbers to each file.  When you enter such a
2400 group, @code{nneething} must create ``headers'' that Gnus can use.  After
2401 all, Gnus is a newsreader, in case you're forgetting. @code{nneething}
2402 does this in a two-step process.  First, it snoops each file in question.
2403 If the file looks like an article (i.e., the first few lines look like
2404 headers), it will use this as the head.  If this is just some random file
2405 without a head (eg. a C source file), @code{nneething} will cobble up a
2406 header out of thin air.  It will use file ownership, name and date and do
2407 whatever it can with these elements.
2408
2409 All this should happen automatically for you, and you will be presented
2410 with something that looks very much like a newsgroup.  Totally like a
2411 newsgroup, to be precise.  If you select an article, it will be displayed
2412 in the article buffer, just as usual.
2413
2414 If you select a line that represents a directory, Gnus will pop you into
2415 a new summary buffer for this @code{nneething} group.  And so on.  You can
2416 traverse the entire disk this way, if you feel like, but remember that
2417 Gnus is not dired, really, and does not intend to be, either.
2418
2419 There are two overall modes to this action---ephemeral or solid.  When
2420 doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
2421 will not store information on what files you have read, and what files
2422 are new, and so on.  If you create a solid @code{nneething} group the
2423 normal way with @kbd{G m}, Gnus will store a mapping table between
2424 article numbers and file names, and you can treat this group like any
2425 other groups.  When you activate a solid @code{nneething} group, you will
2426 be told how many unread articles it contains, etc., etc.
2427
2428 Some variables:
2429
2430 @table @code
2431 @item nneething-map-file-directory
2432 @vindex nneething-map-file-directory
2433 All the mapping files for solid @code{nneething} groups will be stored
2434 in this directory, which defaults to @file{~/.nneething/}.
2435
2436 @item nneething-exclude-files
2437 @vindex nneething-exclude-files
2438 All files that match this regexp will be ignored.  Nice to use to exclude
2439 auto-save files and the like, which is what it does by default.
2440
2441 @item nneething-map-file
2442 @vindex nneething-map-file
2443 Name of the map files.
2444 @end table
2445
2446
2447 @node nndoc
2448 @subsection nndoc
2449 @cindex @code{nndoc}
2450 @cindex documentation group
2451 @cindex help group
2452
2453 @code{nndoc} is a cute little thing that will let you read a single file
2454 as a newsgroup.  Several files types are supported:
2455
2456 @table @code
2457 @cindex babyl
2458 @cindex rmail mbox
2459
2460 @item babyl
2461 The babyl (rmail) mail box.
2462 @cindex mbox
2463 @cindex Unix mbox
2464
2465 @item mbox
2466 The standard Unix mbox file.
2467
2468 @cindex MMDF mail box
2469 @item mmdf
2470 The MMDF mail box format.
2471
2472 @item news
2473 Several news articles appended into a file.
2474
2475 @item rnews
2476 @cindex rnews batch files
2477 The rnews batch transport format.
2478 @cindex forwarded messages
2479
2480 @item forward
2481 Forwarded articles.
2482
2483 @item mime-digest
2484 @cindex digest
2485 @cindex MIME digest
2486 @cindex 1153 digest
2487 @cindex RFC 1153 digest
2488 @cindex RFC 341 digest
2489 MIME (RFC 1341) digest format.
2490
2491 @item standard-digest
2492 The standard (RFC 1153) digest format.
2493
2494 @item slack-digest
2495 Non-standard digest format---matches most things, but does it badly. 
2496 @end table
2497
2498 You can also use the special ``file type'' @code{guess}, which means that
2499 @code{nndoc} will try to guess what file type it is looking at.
2500 @code{digest} means that @code{nndoc} should guess what digest type the
2501 file is. 
2502
2503 @code{nndoc} will not try to change the file or insert any extra headers into
2504 it---it will simply, like, let you use the file as the basis for a
2505 group.  And that's it.
2506
2507 If you have some old archived articles that you want to insert into your
2508 new & spiffy Gnus mail backend, @code{nndoc} can probably help you with
2509 that.  Say you have an old @file{RMAIL} file with mail that you now want
2510 to split into your new @code{nnml} groups.  You look at that file using
2511 @code{nndoc}, set the process mark on all the articles in the buffer
2512 (@kbd{M P b}, for instance), and then respool (@kbd{B r}) using
2513 @code{nnml}.  If all goes well, all the mail in the @file{RMAIL} file is
2514 now also stored in lots of @code{nnml} directories, and you can delete
2515 that pesky @file{RMAIL} file.  If you have the guts!  
2516
2517 Virtual server variables:
2518
2519 @table @code
2520 @item nndoc-article-type
2521 @vindex nndoc-article-type
2522 This should be one of @code{mbox}, @code{babyl}, @code{digest},
2523 @code{mmdf}, @code{forward}, @code{news}, @code{rnews},
2524 @code{mime-difest}, @code{clari-briefs}, or @code{guess}.
2525
2526 @item nndoc-post-type
2527 @vindex nndoc-post-type
2528 This variable says whether Gnus is to consider the group a news group or
2529 a mail group.  There are two legal values:  @code{mail} (the default)
2530 and @code{news}.
2531 @end table
2532
2533
2534 @node SOUP
2535 @subsection @sc{soup}
2536 @cindex @sc{SOUP}
2537 @cindex offline
2538
2539 In the PC world people often talk about ``offline'' newsreaders.  These
2540 are thingies that are combined reader/news transport monstrosities.
2541 With built-in modem programs.  Yecchh!  
2542
2543 Of course, us Unix Weenie types of human beans use things like
2544 @code{uucp} and, like, @code{nntpd} and set up proper news and mail
2545 transport things like Ghod inteded.  And then we just use normal
2546 newsreaders.  
2547
2548 However, it can sometimes be convenient to do something a that's a bit
2549 easier on the brain if you have a very slow modem, and you're not really
2550 that interested in doing things properly.  
2551
2552 A file format called @sc{soup} has been developed for transporting news
2553 and mail from servers to home machines and back again.  It can be a bit
2554 fiddly.
2555
2556 @enumerate
2557
2558 @item
2559 You log in on the server and create a @sc{soup} packet.  You can either
2560 use a dedicated @sc{soup} thingie, or you can use Gnus to create the
2561 packet with the @kbd{O s} command.
2562
2563 @item 
2564 You transfer the packet home.  Rail, boat, car or modem will do fine.
2565
2566 @item
2567 You put the packet in your home directory.
2568
2569 @item
2570 You fire up Gnus using the @code{nnsoup} backend as the native server.
2571
2572 @item
2573 You read articles and mail and answer and followup to the things you
2574 want.
2575
2576 @item 
2577 You do the @kbd{G s r} command to pack these replies into a @sc{soup}
2578 packet.
2579
2580 @item 
2581 You transfer this packet to the server.  
2582
2583 @item
2584 You use Gnus to mail this packet out with the @kbd{G s s} command.
2585
2586 @item
2587 You then repeat until you die.
2588
2589 @end enumerate
2590
2591 So you basically have a bipartite system---you use @code{nnsoup} for
2592 reading and Gnus for packing/sending these @sc{soup} packets.
2593
2594 @menu
2595 * SOUP Commands::     Commands for creating and sending @sc{soup} packets
2596 * nnsoup::            A backend for reading @sc{soup} packets.
2597 * SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.
2598 @end menu
2599
2600
2601 @node SOUP Commands
2602 @subsubsection @sc{soup} Commands
2603
2604 @table @kbd
2605 @item G s b
2606 @kindex G s b (Group)
2607 @findex gnus-group-brew-soup
2608 Pack all unread articles in the current group
2609 (@code{gnus-group-brew-soup}).  This command understands the
2610 process/prefix convention.
2611
2612 @item G s w
2613 @kindex G s w (Group)
2614 @findex gnus-soup-save-areas
2615 Save all data files (@code{gnus-soup-save-areas}).
2616
2617 @item G s s
2618 @kindex G s s (Group)
2619 @findex gnus-soup-send-replies
2620 Send all replies from the replies packet
2621 (@code{gnus-soup-send-replies}). 
2622
2623 @item G s p
2624 @kindex G s p (Group)
2625 @findex gnus-soup-pack-packet
2626 Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}). 
2627
2628 @item G s r
2629 @kindex G s r (Group)
2630 @findex nnsoup-pack-replies
2631 Pack all replies into a replies packet (@code{nnsoup-pack-replies}). 
2632
2633 @item O s
2634 @kindex O s (Summary)
2635 @findex gnus-soup-add-article
2636 This summary-mode command adds the current article to a @sc{soup} packet
2637 (@code{gnus-soup-add-article}).  It understands the process/prefix
2638 convention. 
2639
2640 @end table
2641
2642
2643 There are a few variables to customize where Gnus will put all these
2644 thingies:  
2645
2646 @table @code
2647
2648 @item gnus-soup-directory
2649 @vindex gnus-soup-directory
2650 Directory where Gnus will save intermediate files while composing
2651 @sc{soup} packets.  The default is @file{~/SoupBrew/}. 
2652
2653 @item gnus-soup-replies-directory
2654 @vindex gnus-soup-replies-directory
2655 This is what Gnus will use as a temporary directory while sending our
2656 reply packets.  The default is @file{~/SoupBrew/SoupReplies/}. 
2657
2658 @item gnus-soup-prefix-file
2659 @vindex gnus-soup-prefix-file
2660 Name of the file where Gnus stores the last used prefix.  The default is
2661 @samp{"gnus-prefix"}. 
2662
2663 @item gnus-soup-packer
2664 @vindex gnus-soup-packer
2665 A format string command for packing a @sc{soup} packet.  The default is
2666 @samp{ "tar cf - %s | gzip > $HOME/Soupout%d.tgz"}. 
2667
2668 @item gnus-soup-unpacker
2669 @vindex gnus-soup-unpacker
2670 Format string command for unpacking a @sc{soup} packet.  The default is
2671 @samp{"gunzip -c %s | tar xvf -"}.
2672
2673 @item gnus-soup-packet-directory
2674 @vindex gnus-soup-packet-directory
2675 Wehre Gnus will look for reply packets.  The default is @file{~/}. 
2676
2677 @item gnus-soup-packet-regexp
2678 @vindex gnus-soup-packet-regexp
2679 Regular expression matching @sc{soup} reply packets in
2680 @code{gnus-soup-packet-directory}. 
2681
2682 @end table
2683  
2684
2685 @node nnsoup
2686 @subsubsection nnsoup
2687 @cindex @code{nnsoup}
2688
2689 @code{nnsoup} is the backend for reading @sc{soup} packets.  It will
2690 read incoming packets, unpack them, and put them in a directory where
2691 you can read them at leisure.
2692
2693 These are the variables you can use to customize its behavior:
2694
2695 @table @code
2696
2697 @item nnsoup-directory
2698 @vindex nnsoup-directory
2699 @code{nnsoup} will move all incoming @sc{soup} packets to this directory
2700 and unpack them there.  The default is @file{~/SOUP/}.
2701
2702 @item nnsoup-replies-directory 
2703 @vindex nnsoup-replies-directory 
2704 All replies will stored in this directory before being packed into a
2705 reply packet.  The default is @file{~/SOUP/replies/"}.
2706
2707 @item nnsoup-replies-format-type
2708 @vindex nnsoup-replies-format-type
2709 The @sc{soup} format of the replies packets.  The default is @samp{?n}
2710 (rnews), and I don't think you should touch that variable.  I probaly
2711 shouldn't even have documented it.  Drats!  Too late!
2712
2713 @item nnsoup-replies-index-type
2714 @vindex nnsoup-replies-index-type
2715 The index type of the replies packet.  The is @samp{?n}, which means
2716 ``none''.  Don't fiddle with this one either!
2717
2718 @item nnsoup-active-file
2719 @vindex nnsoup-active-file
2720 Where @code{nnsoup} stores lots of information.  This is not an ``active
2721 file'' in the @code{nntp} sense; it's an Emacs Lisp file.  If you lose
2722 this file or mess it up in any way, you're dead.  The default is
2723 @file{~/SOUP/active}.
2724
2725 @item nnsoup-packer
2726 @vindex nnsoup-packer
2727 Format string command for packing a reply @sc{soup} packet.  The default
2728 is @samp{"tar cf - %s | gzip > $HOME/Soupin%d.tgz"}. 
2729
2730 @item nnsoup-unpacker
2731 @vindex nnsoup-unpacker
2732 Format string command for unpacking incoming @sc{soup} packets.  The
2733 default is @samp{"gunzip -c %s | tar xvf -"}. 
2734
2735 @item nnsoup-packet-directory
2736 @vindex nnsoup-packet-directory
2737 Where @code{nnsoup} will look for incoming packets.  The default is
2738 @file{~/}.  
2739
2740 @item nnsoup-packet-regexp
2741 @vindex nnsoup-packet-regexp
2742 Regular expression matching incoming @sc{soup} packets.  The default is
2743 @samp{Soupout}. 
2744
2745 @end table
2746
2747
2748 @node SOUP Replies
2749 @subsubsection @sc{SOUP} Replies
2750
2751 Just using @code{nnsoup} won't mean that your postings and mailings end
2752 up in @sc{soup} reply packets automagically.  You have to work a bit
2753 more for that to happen.
2754
2755 @findex nnsoup-set-variables
2756 The @code{nnsoup-set-variables} command will set the appropriate
2757 variables to ensure that all your followups and replies end up in the
2758 @sc{soup} system.
2759
2760 In specific, this is what it does:
2761
2762 @lisp
2763 (setq gnus-inews-article-function 'nnsoup-request-post)
2764 (setq send-mail-function 'nnsoup-request-mail)
2765 @end lisp
2766
2767 And that's it, really.  If you only want news to go into the @sc{soup}
2768 system you just use the first line.  If you only want mail to be
2769 @sc{soup}ed you use the second.
2770
2771
2772 @node Reading Mail
2773 @subsection Reading Mail
2774 @cindex reading mail
2775 @cindex mail
2776
2777 Reading mail with a newsreader---isn't that just plain WeIrD? But of
2778 course.
2779
2780 Gnus will read the mail spool when you activate a mail group.  The mail
2781 file is first copied to your home directory.  What happens after that
2782 depends on what format you want to store your mail in.
2783
2784 @menu
2785 * Creating Mail Groups::         How to create mail groups.
2786 * Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
2787 * Mail and Procmail::            Reading mail groups that procmail create.
2788 * Expiring Old Mail Articles::   Getting rid of unwanted mail.
2789 * Not Reading Mail::             Using mail backends for reading other files.
2790 * nnmbox::                       Using the (quite) standard Un*x mbox.
2791 * nnbabyl::                      Emacs programs use the rmail babyl format.
2792 * nnml::                         Store your mail in a private spool?
2793 * nnmh::                         An mhspool-like backend.
2794 * nnfolder::                     Having one file for each group.
2795 @end menu
2796
2797 @vindex nnmail-read-incoming-hook
2798 The mail backends all call @code{nnmail-read-incoming-hook} after
2799 reading new mail.  You can use this hook to notify any mail watch
2800 programs, if you want to.
2801
2802 @vindex nnmail-spool-file
2803 @cindex POP mail
2804 @cindex MAILHOST
2805 @code{nnmail-spool-file} says where to look for new mail.  If this
2806 variable is @code{nil}, the mail backends will never attempt to fetch
2807 mail by themselves.  If you are using a POP mail server and your name is
2808 @samp{"larsi"}, you should set this variable to @samp{"po:larsi"}.  If
2809 your name is not @samp{"larsi"}, you should probably modify that
2810 slightly, but you may have guessed that already, you smart & handsome
2811 devil!  You can also set this variable to @code{pop}, and Gnus will try
2812 to figure out the POP mail string by itself.  In any case, Gnus will
2813 call @code{movemail} which will contact the POP server named in the
2814 @samp{MAILHOST} environment variable.
2815
2816 When you use a mail backend, Gnus will slurp all your mail from your
2817 inbox and plonk it down in your home directory.  Gnus doesn't move any
2818 mail if you're not using a mail backend---you have to do a lot of magic
2819 invocations first.  At the time when you have finished drawing the
2820 pentagram, lightened the candles, and sacrificed the goat, you really
2821 shouldn't be too suprised when Gnus moves your mail.
2822
2823 @vindex nnmail-use-procmail
2824 If @code{nnmail-use-procmail} is non-@code{nil}, the mail backends will
2825 look in @code{nnmail-procmail-directory} for incoming mail.  All the
2826 files in that directory that have names ending in
2827 @code{gnus-procmail-suffix} will be considered incoming mailboxes, and
2828 will be searched for new mail.
2829
2830 @vindex nnmail-prepare-incoming-hook
2831 @code{nnmail-prepare-incoming-hook} is run in a buffer that holds all
2832 the new incoming mail, and can be used for, well, anything, really.
2833
2834 @vindex nnmail-pre-get-new-mail-hook
2835 @vindex nnmail-post-get-new-mail-hook
2836 There are two more useful hooks executed when treating new incoming
2837 mail---@code{nnmail-pre-get-new-mail-hook} (which is called just before
2838 starting to handle the new mail) and
2839 @code{nnmail-post-get-new-mail-hook} (which is called when the mail
2840 handling is done).  Here's and example of using these two hooks to
2841 change the default file modes the new mail files get:
2842
2843 @lisp
2844 (add-hook 'gnus-pre-get-new-mail-hook 
2845           (lambda () (set-default-file-modes 511)))
2846
2847 (add-hook 'gnus-post-get-new-mail-hook 
2848           (lambda () (set-default-file-modes 551)))
2849 @end lisp
2850
2851 @vindex nnmail-tmp-directory
2852 @code{nnmail-tmp-directory} says where to move the incoming mail to
2853 while processing it.  This is usually done in the same directory that
2854 the mail backend inhabits (i.e., @file{~/Mail/}), but if this variable is
2855 non-@code{nil}, it will be used instead.
2856
2857 @vindex nnmail-movemail-program
2858 @code{nnmail-movemail-program} is executed to move mail from the user's
2859 inbox to her home directory.  The default is @samp{"movemail"}.
2860
2861 @vindex nnmail-delete-incoming
2862 If @code{nnmail-delete-incoming} is non-@code{nil}, the mail backends
2863 will delete the temporary incoming file after splitting mail into the
2864 proper groups.  This is @code{nil} by default for reasons of security. 
2865
2866 @vindex nnmail-use-long-file-names
2867 If @code{nnmail-use-long-file-names} is non-@code{nil} the mail backends
2868 will use long file and directory names.  Groups like @samp{mail.misc}
2869 will end up in directories like @file{mail.misc/}.  If it is @code{nil},
2870 the same group will end up in @file{mail/misc/}.
2871
2872 @vindex nnmail-message-id-cache-length
2873 @vindex nnmail-message-id-cache-file
2874 @vindex nnmail-treat-duplicates
2875 @cindex duplicate mails
2876 If you are a member of a couple of mailing list, you will sometime
2877 receive two copies of the same mail.  This can be quite annoying, so
2878 @code{nnmail} checks for and treats any duplicates it might find.  To do
2879 this, it keeps a cache of old @code{Message-ID}s -
2880 @code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by
2881 default.  The approximate maximum number of @code{Message-ID}s stored
2882 there is controlled by the @code{nnmail-message-id-cache-length}
2883 variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
2884 stored.) If all this sounds scary to you, you can set
2885 @code{nnmail-delete-duplicates} to @code{warn} (which is what it is by
2886 default), and @code{nnmail} won't delete duplicate mails.  Instead it
2887 will generate a brand new @code{Message-ID} for the mail and insert a
2888 warning into the head of the mail saying that it thinks that this is a
2889 duplicate of a different message.  
2890
2891 This variable can also be a function.  If that's the case, the function
2892 will be called from a buffer narrowed to the message in question with
2893 the @code{Message-ID} as a parameter.  The function must return either
2894 @code{nil}, @code{warn}, or @code{delete}.
2895
2896 You can turn this feature off completely by setting the variable to
2897 @code{nil}.
2898
2899 Here's a neat feature: If you know that the recipient reads her mail
2900 with Gnus, and that she has @code{nnmail-treat-duplicates} set to
2901 @code{delete}, you can send her as many insults as you like, just by
2902 using a @code{Message-ID} of a mail that you know that she's already
2903 received.  Think of all the fun!  She'll never see any of it!  Whee!
2904
2905 Gnus gives you all the opportunity you could possibly want for shooting
2906 yourself in the foot.  Let's say you create a group that will contain
2907 all the mail you get from your boss.  And then you accidentally
2908 unsubscribe from the group.  Gnus will still put all the mail from your
2909 boss in the unsubscribed group, and so, when your boss mails you ``Have
2910 that report ready by Monday or you're fired!'', you'll never see it and,
2911 come Tuesday, you'll still believe that you're gainfully employed while
2912 you really should be out collecting empty bottles to save up for next
2913 month's rent money.
2914
2915 @node Creating Mail Groups
2916 @subsubsection Creating Mail Groups
2917 @cindex creating mail groups
2918
2919 You can make Gnus read your personal, private, secret mail.
2920
2921 You should first set @code{gnus-secondary-select-methods} to, for
2922 instance, @code{((nnmbox ""))}.  When you start up Gnus, Gnus will ask
2923 this backend for what groups it carries (@samp{mail.misc} by default)
2924 and subscribe it the normal way.  (Which means you may have to look for
2925 it among the zombie groups, I guess, all depending on your
2926 @code{gnus-subscribe-newsgroup-method} variable.)
2927
2928 @vindex nnmail-split-methods
2929 Then you should set the variable @code{nnmail-split-methods} to specify
2930 how the incoming mail is to be split into groups.
2931
2932 @lisp
2933 (setq nnmail-split-methods
2934   '(("mail.junk" "^From:.*Lars Ingebrigtsen")
2935     ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
2936     ("mail.other" "")))
2937 @end lisp
2938
2939 This variable is a list of lists, where the first element of each of
2940 these lists is the name of the mail group (they do not have to be called
2941 something beginning with @samp{mail}, by the way), and the second
2942 element is a regular expression used on the header of each mail to
2943 determine if it belongs in this mail group.
2944
2945 The second element can also be a function.  In that case, it will be
2946 called narrowed to the headers with the first element of the rule as the
2947 argument.  It should return a non-@code{nil} value if it thinks that the
2948 mail belongs in that group.
2949
2950 The last of these groups should always be a general one, and the regular
2951 expression should @emph{always} be @samp{""} so that it matches any
2952 mails that haven't been matched by any of the other regexps.
2953
2954 If you like to tinker with this yourself, you can set this variable to a
2955 function of your choice.  This function will be called without any
2956 arguments in a buffer narrowed to the headers of an incoming mail
2957 message.  The function should return a list of groups names that it
2958 thinks should carry this mail message.
2959
2960 Note that the mail backends are free to maul the poor, innocent
2961 incoming headers all they want to.  They all add @code{Lines} headers;
2962 some add @code{X-Gnus-Group} headers; most rename the Unix mbox
2963 @code{From<SPC>} line to something else.
2964
2965 @vindex nnmail-crosspost
2966 The mail backends all support cross-posting.  If several regexps match,
2967 the mail will be ``cross-posted'' to all those groups.
2968 @code{nnmail-crosspost} says whether to use this mechanism or not.  Note
2969 that no articles are crossposted to the general (@samp{""}) group. 
2970
2971 @vindex nnmail-crosspost-link-function
2972 @cindex crosspost
2973 @cindex links
2974 @code{nnmh} and @code{nnml} makes crossposts by creating hard links to
2975 the crossposted articles.  However, not all files systems support hard
2976 links.  If that's the case for you, set
2977 @code{nnmail-crosspost-link-function} to @code{copy-file}.  (This
2978 variable is @code{add-name-to-file} by default.)  
2979
2980
2981 @node Fancy Mail Splitting
2982 @subsubsection Fancy Mail Splitting
2983 @cindex mail splitting
2984 @cindex fancy mail splitting
2985
2986 @vindex nnmail-split-fancy
2987 @findex nnmail-split-fancy
2988 If the rather simple, standard method for specifying how to split mail
2989 doesn't allow you to do what you want, you can set
2990 @code{nnmail-split-methods} to @code{nnmail-split-fancy}.  Then you can
2991 play with the @code{nnmail-split-fancy} variable. 
2992
2993 Let's look at an example value of this variable first:
2994
2995 @lisp
2996 ;; Messages from the mailer daemon are not crossposted to any of
2997 ;; the ordinary groups.  Warnings are put in a separate group
2998 ;; from real errors.
2999 (| ("from" mail (| ("subject" "warn.*" "mail.warning")
3000                    "mail.misc"))
3001    ;; Non-error messages are crossposted to all relevant
3002    ;; groups, but we don't crosspost between the group for the
3003    ;; (ding) list and the group for other (ding) related mail.
3004    (& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
3005          ("subject" "ding" "ding.misc"))
3006       ;; Other mailing lists...
3007       (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
3008       (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
3009       ;; People...
3010       (any "larsi@@ifi\\.uio\\.no" "people.Lars Magne Ingebrigtsen"))
3011    ;; Unmatched mail goes to the catch all group.
3012    "misc.misc"))")
3013 @end lisp
3014
3015 This variable has the format of a @dfn{split}.  A split is a (possibly)
3016 recursive structure where each split may contain other splits.  Here are
3017 the four possible split syntaxes:
3018
3019 @table @dfn
3020
3021 @item GROUP 
3022 If the split is a string, that will be taken as a group name. 
3023
3024 @item (FIELD VALUE SPLIT)
3025 If the split is a list, and the first element is a string, then that
3026 means that if header FIELD (a regexp) contains VALUE (also a regexp),
3027 then store the message as specified by SPLIT.
3028
3029 @item (| SPLIT...)
3030 If the split is a list, and the first element is @code{|} (vertical
3031 bar), then process each SPLIT until one of them matches.  A SPLIT is
3032 said to match if it will cause the mail message to be stored in one or
3033 more groups.
3034
3035 @item (& SPLIT...)
3036 If the split is a list, and the first element is @code{&}, then process
3037 all SPLITs in the list.
3038 @end table
3039
3040 In these splits, FIELD must match a complete field name.  VALUE must
3041 match a complete word according to the fundamental mode syntax table.
3042 You can use @code{.*} in the regexps to match partial field names or
3043 words.
3044
3045 @vindex nnmail-split-abbrev-alist
3046 FIELD and VALUE can also be lisp symbols, in that case they are expanded
3047 as specified by the variable @code{nnmail-split-abbrev-alist}.  This is
3048 an alist of cons cells, where the car of the cells contains the key, and
3049 the cdr contains a string.
3050
3051 @node Mail and Procmail
3052 @subsubsection Mail and Procmail
3053 @cindex procmail
3054
3055 Many people use @code{procmail} (or some other mail filter program or
3056 external delivery agent---@code{slocal}, @code{elm}, etc) to split
3057 incoming mail into groups.  If you do that, you should set
3058 @code{nnmail-spool-file} to @code{procmail} to ensure that the mail
3059 backends never ever try to fetch mail by themselves.
3060
3061 This also means that you probably don't want to set
3062 @code{nnmail-split-methods} either, which has some, perhaps, unexpected
3063 side effects.
3064
3065 When a mail backend is queried for what groups it carries, it replies
3066 with the contents of that variable, along with any groups it has figured
3067 out that it carries by other means.  None of the backends (except
3068 @code{nnmh}) actually go out to the disk and check what groups actually
3069 exist.  (It's not trivial to distinguish between what the user thinks is
3070 a basis for a newsgroup and what is just a plain old file or directory.)
3071
3072 This means that you have to tell Gnus (and the backends) what groups
3073 exist by hand.
3074
3075 Let's take the @code{nnmh} backend as an example. 
3076
3077 The folders are located in @code{nnmh-directory}, say, @file{~/Mail/}.
3078 There are three folders, @file{foo}, @file{bar} and @file{mail.baz}.
3079
3080 Go to the group buffer and type @kbd{G m}.  When prompted, answer
3081 @samp{foo} for the name and @samp{nnmh} for the method.  Repeat
3082 twice for the two other groups, @samp{bar} and @samp{mail.baz}.  Be sure
3083 to include all your mail groups.
3084
3085 That's it.  You are now set to read your mail.  An active file for this
3086 method will be created automatically.
3087
3088 @vindex nnmail-procmail-suffix
3089 @vindex nnmail-procmail-directory
3090 If you use @code{nnfolder} or any other backend that store more than a
3091 single article in each file, you should never have procmail add mails to
3092 the file that Gnus sees.  Instead, procmail should put all incoming mail
3093 in @code{nnmail-procmail-directory}.  To arrive at the file name to put
3094 the incoming mail in, append @code{nnmail-procmail-suffix} to the group
3095 name.  The mail backends will read the mail from these files.
3096
3097 @vindex nnmail-resplit-incoming
3098 When Gnus reads a file called @file{mail.misc.spool}, this mail will be
3099 put in the @code{mail.misc}, as one would expect.  However, if you want
3100 Gnus to split the mail the normal way, you could set
3101 @code{nnmail-resplit-incoming} to @code{t}.
3102
3103 @vindex nnmail-keep-last-article
3104 If you use @code{procmail} to split things directory into an @code{nnmh}
3105 directory (which you shouldn't do), you should set
3106 @code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from
3107 ever expiring the final article in a mail newsgroup.  This is quite,
3108 quite important.
3109
3110
3111 @node Expiring Old Mail Articles
3112 @subsubsection Expiring Old Mail Articles
3113 @cindex article expiry
3114
3115 Traditional mail readers have a tendency to remove mail articles when
3116 you mark them as read, in some way.  Gnus takes a fundamentally
3117 different approach to mail reading.
3118
3119 Gnus basically considers mail just to be news that has been received in
3120 a rather peculiar manner.  It does not think that it has the power to
3121 actually change the mail, or delete any mail messages.  If you enter a
3122 mail group, and mark articles as ``read'', or kill them in some other
3123 fashion, the mail articles will still exist on the system.  I repeat:
3124 Gnus will not delete your old, read mail.  Unless you ask it to, of
3125 course.
3126
3127 To make Gnus get rid of your unwanted mail, you have to mark the
3128 articles as @dfn{expirable}.  This does not mean that the articles will
3129 disappear right away, however.  In general, a mail article will be
3130 deleted from your system if, 1) it is marked as expirable, AND 2) it is
3131 more than one week old.  If you do not mark an article as expirable, it
3132 will remain on your system until hell freezes over.  This bears
3133 repeating one more time, with some spurious capitalizations: IF you do
3134 NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
3135
3136 @vindex gnus-auto-expirable-newsgroups
3137 You do not have to mark articles as expirable by hand.  Groups that
3138 match the regular expression @code{gnus-auto-expirable-newsgroups} will
3139 have all articles that you read marked as expirable automatically.  All
3140 articles that are marked as expirable have an @samp{E} in the first
3141 column in the summary buffer.
3142
3143 Let's say you subscribe to a couple of mailing lists, and you want the
3144 articles you have read to disappear after a while:
3145
3146 @lisp
3147 (setq gnus-auto-expirable-newsgroups 
3148       "mail.nonsense-list\\|mail.nice-list")
3149 @end lisp
3150
3151 Another way to have auto-expiry happen is to have the element
3152 @code{auto-expire} in the select method of the group. 
3153
3154 @vindex nnmail-expiry-wait
3155 The @code{nnmail-expiry-wait} variable supplies the default time an
3156 expirable article has to live.  The default is seven days.  
3157
3158 Gnus also supplies a function that lets you fine-tune how long articles
3159 are to live, based on what group they are in.  Let's say you want to
3160 have one month expiry period in the @samp{mail.private} group, a one day
3161 expiry period in the @samp{mail.junk} group, and a six day expiry period
3162 everywhere else:
3163
3164 @lisp
3165 (setq nnmail-expiry-wait-function
3166       (lambda (group)
3167        (cond ((string= group "mail.private")
3168                31)
3169              ((string= group "mail.junk")
3170                1)
3171              ((string= group "important")
3172                'never)
3173              (t
3174                6))))
3175 @end lisp
3176
3177 The group names that this function is fed are ``unadorned'' group
3178 names---no @samp{"nnml:"} prefixes and the like.
3179
3180 The @code{nnmail-expiry-wait} variable and
3181 @code{nnmail-expiry-wait-function} function can be either a number (not
3182 necessarily an integer) or the symbols @code{immediate} or
3183 @code{never}.  
3184
3185 You can also use the @code{expiry-wait} group parameter to selectively
3186 change the expiry period (@pxref{Group Parameters}).
3187
3188 @vindex nnmail-keep-last-article
3189 If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
3190 expire the final article in a mail newsgroup.  This is to make life
3191 easier for procmail users.
3192
3193 @vindex gnus-total-expirable-newsgroups
3194 By the way, that line up there about Gnus never expiring non-expirable
3195 articles is a lie.  If you put @code{total-expire} in the group
3196 parameters, articles will not be marked as expirable, but all read
3197 articles will be put through the expiry process.  Use with extreme
3198 caution.  Even more dangerous is the
3199 @code{gnus-total-expirable-newsgroups} variable.  All groups that match
3200 this regexp will have all read articles put through the expiry process,
3201 which means that @emph{all} old mail articles in the groups in question
3202 will be deleted after a while.  Use with extreme caution, and don't come
3203 crying to me when you discover that the regexp you used matched the
3204 wrong group and all your important mail has disappeared.  Be a
3205 @emph{man}!  Or a @emph{woman}!  Whatever you feel more comfortable
3206 with!  So there!
3207
3208
3209 @node Not Reading Mail
3210 @subsubsection Not Reading Mail
3211
3212 If you start using any of the mail backends, they have the annoying
3213 habit of assuming that you want to read mail with them.  This might not
3214 be unreasonable, but it might not be what you want.
3215
3216 If you set @code{nnmail-spool-file} to @code{nil}, none of the backends
3217 will ever attempt to read incoming mail, which should help.
3218
3219 @vindex nnbabyl-get-new-mail
3220 @vindex nnmbox-get-new-mail
3221 @vindex nnml-get-new-mail
3222 @vindex nnmh-get-new-mail
3223 @vindex nnfolder-get-new-mail
3224 This might be too much, if, for instance, you are reading mail quite
3225 happily with @code{nnml} and just want to peek at some old @sc{rmail}
3226 file you have stashed away with @code{nnbabyl}.  All backends have
3227 variables called backend-@code{get-new-mail}.  If you want to disable
3228 the @code{nnbabyl} mail reading, you edit the virtual server for the
3229 group to have a setting where @code{nnbabyl-get-new-mail} to @code{nil}.
3230
3231 All the mail backends will call @code{nn}*@code{-prepare-save-mail-hook}
3232 narrowed to the article to be saved before saving it when reading
3233 incoming mail.
3234
3235 @node nnmbox
3236 @subsubsection nnmbox
3237 @cindex @code{nnmbox}
3238 @cindex unix mail box
3239
3240 @vindex nnmbox-active-file
3241 @vindex nnmbox-mbox-file
3242 The @dfn{nnmbox} backend will use the standard Un*x mbox file to store
3243 mail.  @code{nnmbox} will add extra headers to each mail article to say
3244 which group it belongs in.
3245
3246 Virtual server settings:
3247
3248 @table @code
3249 @item nnmbox-mbox-file
3250 @vindex nnmbox-mbox-file
3251 The name of the mail box in the user's home directory. 
3252
3253 @item nnmbox-active-file
3254 @vindex nnmbox-active-file
3255 The name of the active file for the mail box.
3256
3257 @item nnmbox-get-new-mail
3258 @vindex nnmbox-get-new-mail
3259 If non-@code{nil}, @code{nnmbox} will read incoming mail and split it
3260 into groups.
3261 @end table
3262
3263 @node nnbabyl
3264 @subsubsection nnbabyl
3265 @cindex @code{nnbabyl}
3266 @cindex rmail mbox
3267
3268 @vindex nnbabyl-active-file
3269 @vindex nnbabyl-mbox-file
3270 The @dfn{nnbabyl} backend will use a babyl mail box (aka. @dfn{rmail
3271 mbox}) to store mail. @code{nnbabyl} will add extra headers to each mail
3272 article to say which group it belongs in.
3273
3274 Virtual server settings:
3275
3276 @table @code
3277 @item nnbabyl-mbox-file
3278 @vindex nnbabyl-mbox-file
3279 The name of the rmail mbox file.
3280
3281 @item nnbabyl-active-file
3282 @vindex nnbabyl-active-file
3283 The name of the active file for the rmail box.
3284
3285 @item nnbabyl-get-new-mail
3286 @vindex nnbabyl-get-new-mail
3287 If non-@code{nil}, @code{nnbabyl} will read incoming mail. 
3288 @end table
3289
3290 @node nnml
3291 @subsubsection nnml
3292 @cindex @code{nnml}
3293 @cindex mail @sc{nov} spool
3294
3295 The @dfn{nnml} spool mail format isn't compatible with any other known
3296 format.  It should be used with some caution.
3297
3298 @vindex nnml-directory
3299 If you use this backend, Gnus will split all incoming mail into files;
3300 one file for each mail, and put the articles into the correct
3301 directories under the directory specified by the @code{nnml-directory}
3302 variable.  The default value is @file{~/Mail/}.
3303
3304 You do not have to create any directories beforehand; Gnus will take
3305 care of all that.
3306
3307 If you have a strict limit as to how many files you are allowed to store
3308 in your account, you should not use this backend.  As each mail gets its
3309 own file, you might very well occupy thousands of inodes within a few
3310 weeks.  If this is no problem for you, and it isn't a problem for you
3311 having your friendly systems administrator walking around, madly,
3312 shouting ``Who is eating all my inodes?! Who? Who!?!'', then you should
3313 know that this is probably the fastest format to use.  You do not have
3314 to trudge through a big mbox file just to read your new mail.
3315
3316 @code{nnml} is probably the slowest backend when it comes to article
3317 splitting.  It has to create lots of files, and it also generates
3318 @sc{nov} databases for the incoming mails.  This makes is the fastest
3319 backend when it comes to reading mail.
3320
3321 Virtual server settings:
3322
3323 @table @code
3324 @item nnml-directory
3325 @vindex nnml-directory
3326 All @code{nnml} directories will be placed under this directory. 
3327
3328 @item nnml-active-file
3329 @vindex nnml-active-file
3330 The active file for the @code{nnml} server.
3331
3332 @item nnml-newsgroups-file
3333 @vindex nnml-newsgroups-file
3334 The @code{nnml} group descriptions file.  @xref{Newsgroups File
3335 Format}. 
3336
3337 @item nnml-get-new-mail
3338 @vindex nnml-get-new-mail
3339 If non-@code{nil}, @code{nnml} will read incoming mail.
3340
3341 @item nnml-nov-is-evil
3342 @vindex nnml-nov-is-evil
3343 If non-@code{nil}, this backend will ignore any @sc{nov} files.  
3344
3345 @item nnml-nov-file-name
3346 @vindex nnml-nov-file-name
3347 The name of the @sc{nov} files.  The default is @file{.overview}. 
3348
3349 @end table
3350
3351 @findex nnml-generate-nov-databases
3352 If your @code{nnml} groups and @sc{nov} files get totally out of whack,
3353 you can do a complete update by typing @kbd{M-x
3354 nnml-generate-nov-databases}.  This command will trawl through the
3355 entire @code{nnml} hierarchy, looking at each and every article, so it
3356 might take a while to complete.
3357
3358 @node nnmh
3359 @subsubsection nnmh
3360 @cindex @code{nnmh}
3361 @cindex mh-e mail spool
3362
3363 @code{nnmh} is just like @code{nnml}, except that is doesn't generate
3364 @sc{nov} databases and it doesn't keep an active file.  This makes
3365 @code{nnmh} a @emph{much} slower backend than @code{nnml}, but it also
3366 makes it easier to write procmail scripts for.
3367
3368 Virtual server settings:
3369
3370 @table @code
3371 @item nnmh-directory
3372 @vindex nnmh-directory
3373 All @code{nnmh} directories will be located under this directory.
3374
3375 @item nnmh-get-new-mail
3376 @vindex nnmh-get-new-mail
3377 If non-@code{nil}, @code{nnmh} will read incoming mail.
3378
3379 @item nnmh-be-safe
3380 @vindex nnmh-be-safe
3381 If non-@code{nil}, @code{nnmh} will go to ridiculous lengths to make
3382 sure that the articles in the folder are actually what Gnus thinks they
3383 are.  It will check date stamps and stat everything in sight, so
3384 setting this to @code{t} will mean a serious slow-down.  If you never
3385 use anything but Gnus to read the @code{nnmh} articles, you do not have
3386 to set this variable to @code{t}.
3387 @end table
3388
3389
3390 @node nnfolder
3391 @subsubsection nnfolder
3392 @cindex @code{nnfolder}
3393 @cindex mbox folders
3394
3395 @code{nnfolder} is a backend for storing each mail group in a separate
3396 file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}
3397 will add extra headers to keep track of article numbers and arrival
3398 dates.
3399
3400 Virtual server settings:
3401
3402 @table @code
3403 @item nnfolder-directory
3404 @vindex nnfolder-directory
3405 All the @code{nnfolder} mail boxes will be stored under this directory. 
3406
3407 @item nnfolder-active-file
3408 @vindex nnfolder-active-file
3409 The name of the active file.
3410
3411 @item nnfolder-newsgroups-file
3412 @vindex nnfolder-newsgroups-file
3413 The name of the group descriptions file.  @xref{Newsgroups File Format}.
3414
3415 @item nnfolder-get-new-mail
3416 @vindex nnfolder-get-new-mail
3417 If non-@code{nil}, @code{nnfolder} will read incoming mail.
3418 @end table
3419
3420 @findex nnfolder-generate-active-file
3421 @kindex M-x nnfolder-generate-active-file
3422 If you have lots of @code{nnfolder}-like files you'd like to read with
3423 @code{nnfolder}, you can use the @kbd{M-x nnfolder-generate-active-file}
3424 command to make @code{nnfolder} aware of all likely files in
3425 @code{nnfolder-directory}.
3426
3427
3428 @node Group Parameters
3429 @section Group Parameters
3430 @cindex group parameters
3431
3432 Gnus stores all information on a group in a list that is usually known
3433 as the @dfn{group info}.  This list has from three to six elements.
3434 Here's an example info.
3435
3436 @lisp
3437 ("nnml:mail.ding" 3 ((1 . 232) 244 (256 . 270)) ((tick 246 249))
3438                   (nnml "private") ((to-address . "ding@@ifi.uio.no")))
3439 @end lisp
3440
3441 The first element is the @dfn{group name}, as Gnus knows the group,
3442 anyway.  The second element is the @dfn{subscription level}, which
3443 normally is a small integer.  The third element is a list of ranges of
3444 read articles.  The fourth element is a list of lists of article marks
3445 of various kinds.  The fifth element is the select method (or virtual
3446 server, if you like).  The sixth element is a list of @dfn{group
3447 parameters}, which is what this section is about.
3448
3449 Any of the last three elements may be missing if they are not required.
3450 In fact, the vast majority of groups will normally only have the first
3451 three elements, which saves quite a lot of cons cells.
3452
3453 The group parameters store information local to a particular group:
3454
3455 @table @code
3456 @item to-address
3457 @cindex to-address
3458 If the group parameter list contains an element that looks like
3459 @samp{(to-address .  "some@@where.com")}, that address will be used by
3460 the backend when doing followups and posts.  This is primarily useful in
3461 mail groups that represent closed mailing lists---mailing lists where
3462 it's expected that everybody that writes to the mailing list is
3463 subscribed to it.  Since using this parameter ensures that the mail only
3464 goes to the mailing list itself, it means that members won't receive two
3465 copies of your followups.
3466
3467 Using @code{to-address} will actually work whether the group is foreign
3468 or not.  Let's say there's a group on the server that is called
3469 @samp{fa.4ad-l}.  This is a real newsgroup, but the server has gotten
3470 the articles from a mail-to-news gateway.  Posting directly to this
3471 group is therefore impossible---you have to send mail to the mailing
3472 list address instead. 
3473
3474 @item to-list
3475 @cindex to-list
3476 If the group parameter list has an element that looks like
3477 @code{(to-list . "some@@where.com")}, that address will be used when
3478 doing a @kbd{a} in any group.  It is totally ignored when doing a
3479 followup---except that if it is present in a news group, you'll get mail
3480 group semantics when doing @kbd{f}.
3481
3482 @item broken-reply-to
3483 @cindex broken-reply-to
3484 Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
3485 headers in this group are to be ignored.  This can be useful if you're
3486 reading a mailing list group where the listserv has inserted
3487 @code{Reply-To} headers that point back to the listserv itself.  This is
3488 broken behavior.  So there!
3489
3490 @item to-group
3491 @cindex to-group
3492 If the group parameter list contains an element like @code{(to-group
3493 . "some.group.name")}, all posts will be sent to that group.
3494
3495 @item auto-expire
3496 @cindex auto-expire
3497 If this symbol is present in the group parameter list, all articles that
3498 are read will be marked as expirable.  For an alternative approach,
3499 @xref{Expiring Old Mail Articles}.
3500
3501 @item total-expire
3502 @cindex total-expire
3503 If this symbol is present, all read articles will be put through the
3504 expiry process, even if they are not marked as expirable.  Use with
3505 caution. 
3506
3507 @item expiry-wait
3508 @cindex expiry-wait
3509 If the group parameter has an element that looks like @samp{(expiry-wait
3510 . 10)}, this value will override any @code{nnmail-expiry-wait} and
3511 @code{nnmail-expiry-wait-functions} when expiring expirable messages.
3512 The value can either be a number of days (not necessarily an integer) or
3513 the symbols @code{never} or @code{immediate}.
3514
3515 @item score-file
3516 Elements that look like @samp{(score-file . "file")} will make
3517 @samp{file} into the current score file for the group in question.  This
3518 means that all score commands you issue will end up in that file. 
3519
3520 @item admin-address
3521 When unsubscribing to a mailing list you should never send the
3522 unsubscription notice to the mailing list itself.  Instead, you'd send
3523 messages to the administrative address.  This parameter allows you to
3524 put the admin address somewhere convenient.
3525
3526 @item comment
3527 This parameter allows you to enter a random comment on the group.
3528
3529 @item @var{(variable form)}
3530 You can use the group parameters to set variables local to the group you
3531 are entering.  Say you want to turn threading off in
3532 @samp{news.answers}.  You'd then put @code{(gnus-show-threads nil)} in
3533 the group parameters of that group.  @code{gnus-show-threads} will be
3534 made into a local variable in the summary buffer you enter, and the form
3535 @code{nil} will be @code{eval}ed there.  
3536
3537 This can also be used as a group-specific hook function, if you'd like.
3538 If you want to hear a beep when you enter the group
3539 @samp{alt.binaries.pictures.furniture}, you could put something like
3540 @code{(dummy-variable (ding))} in the parameters of that group.
3541 @code{dummy-variable} will be set to the result of the @code{(ding)}
3542 form, but who cares?
3543
3544 @end table
3545
3546 If you want to change the group info you can use the @kbd{G E} command
3547 to enter a buffer where you can edit it.
3548
3549 You usually don't want to edit the entire group info, so you'd be better
3550 off using the @kbd{G p} command to just edit the group parameters.
3551
3552 @node Listing Groups
3553 @section Listing Groups
3554 @cindex group listing
3555
3556 These commands all list various slices of the groups that are available.
3557
3558 @table @kbd
3559
3560 @item l
3561 @itemx A s
3562 @kindex A s (Group)
3563 @kindex l (Group)
3564 @findex gnus-group-list-groups
3565 List all groups that have unread articles
3566 (@code{gnus-group-list-groups}).  If the numeric prefix is used, this
3567 command will list only groups of level ARG and lower.  By default, it
3568 only lists groups of level five or lower (i.e., just subscribed groups).
3569
3570 @item L
3571 @itemx A u
3572 @kindex A u (Group)
3573 @kindex L (Group)
3574 @findex gnus-group-list-all-groups
3575 List all groups, whether they have unread articles or not
3576 (@code{gnus-group-list-all-groups}).  If the numeric prefix is used,
3577 this command will list only groups of level ARG and lower.  By default,
3578 it lists groups of level seven or lower (i.e., just subscribed and
3579 unsubscribed groups).
3580
3581 @item A l
3582 @kindex A l (Group)
3583 @findex gnus-group-list-level
3584 List all unread groups on a specific level
3585 (@code{gnus-group-list-level}).  If given a prefix, also list the groups
3586 with no unread articles.
3587
3588 @item A k
3589 @kindex A k (Group)
3590 @findex gnus-group-list-killed
3591 List all killed groups (@code{gnus-group-list-killed}).  If given a
3592 prefix argument, really list all groups that are available, but aren't
3593 currently (un)subscribed.  This could entail reading the active file
3594 from the server.
3595
3596 @item A z
3597 @kindex A z (Group)
3598 @findex gnus-group-list-zombies
3599 List all zombie groups (@code{gnus-group-list-zombies}).
3600
3601 @item A m
3602 @kindex A m (Group)
3603 @findex gnus-group-list-matching
3604 List all subscribed groups with unread articles that match a regexp
3605 (@code{gnus-group-list-matching}). 
3606
3607 @item A M
3608 @kindex A M (Group)
3609 @findex gnus-group-list-all-matching
3610 List groups that match a regexp (@code{gnus-group-list-all-matching}).
3611
3612 @item A A
3613 @kindex A A (Group)
3614 @findex gnus-group-list-active
3615 List absolutely all groups that are in the active file(s) of the
3616 server(s) you are connected to (@code{gnus-group-list-active}).  This
3617 might very well take quite a while.  It might actually be a better idea
3618 to do a @kbd{A m} to list all matching, and just give @samp{.} as the
3619 thing to match on.
3620
3621 @end table
3622
3623 @vindex gnus-permanently-visible-groups
3624 @cindex visible group paramenter
3625 Groups that match the @code{gnus-permanently-visible-groups} regexp will
3626 always be shown, whether they have unread articles or not.  You can also
3627 add the @code{visible} element to the group parameters in question to
3628 get the same effect.
3629
3630 @vindex gnus-list-groups-with-ticked-articles
3631 Groups that have just ticked articles in it are normally listed in the
3632 group buffer.  If @code{gnus-list-groups-with-ticked-articles} is
3633 @code{nil}, these groups will be treated just like totally empty
3634 groups.  It is @code{t} by default.
3635
3636
3637 @node Sorting Groups
3638 @section Sorting Groups
3639 @cindex sorting groups
3640
3641 @kindex C-c C-s (Group)
3642 @findex gnus-group-sort-groups
3643 @vindex gnus-group-sort-function
3644 The @kbd{C-c C-s} (@code{gnus-group-srot-groups}) command sorts the
3645 group buffer according to the function(s) given by the
3646 @code{gnus-group-sort-function} variable.  Available sorting functions
3647 include: 
3648
3649 @table @code
3650
3651 @item gnus-group-sort-by-alphabet
3652 @findex gnus-group-sort-by-alphabet
3653 Sort the group names alphabetically.  This is the default.
3654
3655 @item gnus-group-sort-by-level
3656 @findex gnus-group-sort-by-level
3657 Sort by group level.
3658
3659 @item gnus-group-sort-by-score
3660 @findex gnus-group-sort-by-score
3661 Sort by group score.
3662
3663 @item gnus-group-sort-by-rank
3664 @findex gnus-group-sort-by-rank
3665 Sort by group score and then the group level.  The level and the score
3666 are, when taken together, the group's @dfn{rank}. 
3667
3668 @item gnus-group-sort-by-unread
3669 @findex gnus-group-sort-by-unread
3670 Sort by number of unread articles.
3671
3672 @item gnus-group-sort-by-method
3673 @findex gnus-group-sort-by-method
3674 Sort by alphabetically on the select method.
3675
3676
3677 @end table
3678
3679 @code{gnus-group-sort-function} can also be a list of sorting
3680 functions.  In that case, the most significant sort key function must be
3681 the last one.
3682
3683
3684 There are also a number of commands for sorting directly according to
3685 some sorting criteria:
3686
3687 @table @kbd
3688 @item G S a
3689 @kindex G S a (Group)
3690 @findex gnus-group-sort-groups-by-alphabet
3691 Sort the group buffer alphabetically by group name
3692 (@code{gnus-group-sort-groups-by-alphabet}). 
3693
3694 @item G S u
3695 @kindex G S u (Group)
3696 @findex gnus-group-sort-groups-by-unread
3697 Sort the group buffer by the number of unread articles
3698 (@code{gnus-group-sort-groups-by-unread}).
3699
3700 @item G S l
3701 @kindex G S l (Group)
3702 @findex gnus-group-sort-groups-by-level
3703 Sort the group buffer by group level
3704 (@code{gnus-group-sort-groups-by-level}). 
3705
3706 @item G S v
3707 @kindex G S v (Group)
3708 @findex gnus-group-sort-groups-by-score
3709 Sort the group buffer by group score
3710 (@code{gnus-group-sort-groups-by-score}). 
3711
3712 @item G S r
3713 @kindex G S r (Group)
3714 @findex gnus-group-sort-groups-by-rank
3715 Sort the group buffer by group level
3716 (@code{gnus-group-sort-groups-by-rank}). 
3717
3718 @item G S m
3719 @kindex G S m (Group)
3720 @findex gnus-group-sort-groups-by-method
3721 Sort the group buffer alphabetically by backend name
3722 (@code{gnus-group-sort-groups-by-method}). 
3723
3724 @end table
3725
3726 When given a prefix, all these commands will sort in reverse order. 
3727
3728
3729
3730 @node Group Maintenance
3731 @section Group Maintenance
3732 @cindex bogus groups
3733
3734 @table @kbd
3735 @item b
3736 @kindex b (Group)
3737 @findex gnus-group-check-bogus-groups
3738 Find bogus groups and delete them
3739 (@code{gnus-group-check-bogus-groups}).
3740
3741 @item F
3742 @kindex F (Group)
3743 @findex gnus-find-new-newsgroups
3744 Find new groups and process them (@code{gnus-find-new-newsgroups}).  If
3745 given a prefix, use the @code{ask-server} method to query the server for
3746 new groups.
3747
3748 @item C-c C-x
3749 @kindex C-c C-x (Group)
3750 @findex gnus-group-expire-articles
3751 Run all expirable articles in the current group through the expiry
3752 process (if any) (@code{gnus-group-expire-articles}).
3753
3754 @item C-c M-C-x
3755 @kindex C-c M-C-x (Group)
3756 @findex gnus-group-expire-all-groups
3757 Run all articles in all groups through the expiry process
3758 (@code{gnus-group-expire-all-groups}).
3759
3760 @end table
3761
3762
3763 @node Browse Foreign Server
3764 @section Browse Foreign Server
3765 @cindex foreign servers
3766 @cindex browsing servers
3767
3768 @table @kbd
3769 @item B
3770 @kindex B (Group)
3771 @findex gnus-group-browse-foreign-server
3772 You will be queried for a select method and a server name.  Gnus will
3773 then attempt to contact this server and let you browse the groups there
3774 (@code{gnus-group-browse-foreign-server}).
3775 @end table
3776
3777 @findex gnus-browse-server-mode
3778 A new buffer with a list of available groups will appear.  This buffer
3779 will be use the @code{gnus-browse-server-mode}.  This buffer looks a bit
3780 (well, a lot) like a normal group buffer, but with one major difference
3781 - you can't enter any of the groups.  If you want to read any of the
3782 news available on that server, you have to subscribe to the groups you
3783 think may be interesting, and then you have to exit this buffer.  The
3784 new groups will be added to the group buffer, and then you can read them
3785 as you would any other group.
3786
3787 Future versions of Gnus may possibly permit reading groups straight from
3788 the browse buffer.
3789
3790 Here's a list of keystrokes available in the browse mode:
3791
3792 @table @kbd
3793 @item n
3794 @kindex n (Browse)
3795 @findex gnus-group-next-group
3796 Go to the next group (@code{gnus-group-next-group}).
3797
3798 @item p
3799 @kindex p (Browse)
3800 @findex gnus-group-prev-group
3801 Go to the previous group (@code{gnus-group-prev-group}).
3802
3803 @item SPACE
3804 @kindex SPACE (Browse)
3805 @findex gnus-browse-read-group
3806 Enter the current group and display the first article
3807 (@code{gnus-browse-read-group}). 
3808
3809 @item RET
3810 @kindex RET (Browse)
3811 @findex gnus-browse-select-group
3812 Enter the current group (@code{gnus-browse-select-group}). 
3813
3814 @item u
3815 @kindex u (Browse)
3816 @findex gnus-browse-unsubscribe-current-group
3817 Unsubscribe to the current group, or, as will be the case here,
3818 subscribe to it (@code{gnus-browse-unsubscribe-current-group}). 
3819
3820 @item l
3821 @itemx q
3822 @kindex q (Browse)
3823 @kindex l (Browse)
3824 @findex gnus-browse-exit
3825 Exit browse mode (@code{gnus-browse-exit}).
3826
3827 @item ?
3828 @kindex ? (Browse)
3829 @findex gnus-browse-describe-briefly
3830 Describe browse mode briefly (well, there's not much to describe, is
3831 there) (@code{gnus-browse-describe-briefly}).
3832 @end table
3833
3834 @node Exiting Gnus
3835 @section Exiting Gnus
3836 @cindex exiting Gnus
3837
3838 Yes, Gnus is ex(c)iting.
3839
3840 @table @kbd
3841 @item z
3842 @kindex z (Group)
3843 @findex gnus-group-suspend
3844 Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
3845 but it kills all buffers except the Group buffer.  I'm not sure why this
3846 is a gain, but then who am I to judge?
3847
3848 @item q
3849 @kindex q (Group)
3850 @findex gnus-group-exit
3851 Quit Gnus (@code{gnus-group-exit}).
3852
3853 @item Q
3854 @kindex Q (Group)
3855 @findex gnus-group-quit
3856 Quit Gnus without saving any startup files (@code{gnus-group-quit}).
3857 @end table
3858
3859 @vindex gnus-exit-gnus-hook
3860 @vindex gnus-suspend-gnus-hook
3861 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
3862 @code{gnus-exit-gnus-hook} is called when you quit Gnus.
3863
3864 @findex gnus-unload
3865 @cindex unloading
3866 If you wish to completely unload Gnus and all its adherents, you can use
3867 the @code{gnus-unload} command.  This command is also very handy when
3868 trying to custoize meta-variables.
3869
3870 Note:
3871
3872 @quotation
3873 Miss Lisa Cannifax, while sitting in English class, feels her feet go
3874 numbly heavy and herself fall into a hazy trance as the boy sitting
3875 behind her drew repeated lines with his pencil across the back of her
3876 plastic chair.
3877 @end quotation
3878
3879
3880 @node Group Topics
3881 @section Group Topics
3882 @cindex topics
3883
3884 If you read lots and lots of groups, it might be convenient to group
3885 them hierarchically according to topics.  You put your Emacs groups over
3886 here, your sex groups over there, and the rest (what, two groups or so?)
3887 you put in some misc section that you never bother with anyway.  You can
3888 even group the Emacs sex groups as a sub-topic to either the Emacs
3889 groups or the sex groups---or both!  Go wild!
3890
3891 @findex gnus-topic-mode
3892 @kindex t (Group)
3893 To get this @emph{fab} functionality you simply turn on (ooh!) the
3894 @code{gnus-topic} minor mode---type @kbd{t} in the group buffer.  (This
3895 is a toggling command.)
3896
3897 Go ahead, just try it.  I'll still be here when you get back.  La de
3898 dum...  Nice tune, that...  la la la...  What, you're back? Yes, and now
3899 press @kbd{l}.  There.  All your groups are now listed under
3900 @samp{misc}.  Doesn't that make you feel all warm and fuzzy?  Hot and
3901 bothered?
3902
3903 If you want this permanently enabled, you should add that minor mode to
3904 the hook for the group mode:
3905
3906 @lisp
3907 (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
3908 @end lisp
3909
3910 @menu 
3911 * Topic Variables::    How to customize the topics the Lisp Way.
3912 * Topic Commands::     Interactive E-Z commands.
3913 * Topic Topology::     A map of the world.
3914 @end menu
3915
3916
3917 @node Topic Variables
3918 @subsection Topic Variables
3919 @cindex topic variables
3920
3921
3922 @vindex gnus-group-topic-topics-only
3923 Whoo, this is complicated.  If @code{gnus-group-topic-topics-only} is
3924 @code{nil}, all groups and topics will be listed, as you would expect.
3925 If this variable is non-@code{nil}, only the topics will be listed, and
3926 the groups will not be listed.  This makes the group buffer much shorter,
3927 I'm sure you'll agree.  This is all modified on a topic-by-topic basis
3928 by the @var{show} parameter.   It makes perfect sense, really.
3929
3930 @vindex gnus-topic-unique
3931 If @code{gnus-topic-unique} is non-@code{nil}, each group will be member
3932 of (tops) one topic each.  If this is @code{nil}, each group might end
3933 up being a member of several topics.
3934
3935 Now, if you select a topic, if will fold/unfold that topic, which is
3936 really neat, I think.
3937
3938 @vindex gnus-topic-line-format
3939 The topic lines themselves are created according to the
3940 @code{gnus-topic-line-format} variable.  @xref{Formatting Variables}.
3941 Elements allowed are:
3942
3943 @table @samp
3944 @item i
3945 Indentation.
3946 @item n
3947 Topic name.
3948 @item v
3949 Visibility.
3950 @item l
3951 Level.
3952 @item g
3953 Number of groups in the topic.
3954 @item a
3955 Number of unread articles in the topic.
3956 @item A 
3957 Number of unread articles in the topic and all its subtopics. 
3958 @end table
3959
3960
3961 @node Topic Commands
3962 @subsection Topic Commands
3963 @cindex topic commands
3964
3965 When the topic minor mode is turned on, a new @kbd{T} submap will be
3966 available.  In addition, a few of the standard keys change their
3967 definitions slightly.
3968
3969 @table @kbd
3970
3971 @item T n
3972 @kindex T n (Group)
3973 @findex gnus-topic-create-topic
3974 Create a new topic (@code{gnus-topic-create-subtopic}).  You will be
3975 prompted for a topic name and the name of the parent topic.
3976
3977 @item T m
3978 @kindex T m (Group)
3979 @findex gnus-topic-move-group
3980 Move the current group to some other topic
3981 (@code{gnus-topic-move-group}).  This command understands the
3982 process/prefix convention (@pxref{Process/Prefix}).
3983
3984 @item T c
3985 @kindex T c (Group)
3986 @findex gnus-topic-copy-group
3987 Copy the current group to some other topic
3988 (@code{gnus-topic-copy-group}).  This command understands the
3989 process/prefix convention (@pxref{Process/Prefix}).
3990
3991 @item T M
3992 @kindex T M (Group)
3993 @findex gnus-topic-move-matching
3994 Move all groups that match some regular expression to a topic
3995 (@code{gnus-topic-move-matching}). 
3996
3997 @item T C
3998 @kindex T C (Group)
3999 @findex gnus-topic-copy-matching
4000 Copy all groups that match some regular expression to a topic
4001 (@code{gnus-topic-copy-matching}). 
4002
4003 @item RET
4004 @kindex RET (Group)
4005 @findex gnus-topic-select-group
4006 @itemx SPACE
4007 Either select a group or fold a topic (@code{gnus-topic-select-group}).
4008 When you perform this command on a group, you'll enter the group, as
4009 usual.  When done on a topic line, the topic will be folded (if it was
4010 visible) or unfolded (if it was folded already).  So it's basically a
4011 toggling command on topics.  In addition, if you give a numerical
4012 prefix, group on that level (and lower) will be displayed.
4013
4014 @item C-k
4015 @kindex C-k (Group)
4016 @findex gnus-topic-kill-group
4017 Kill a group or topic (@code{gnus-topic-kill-group}).  
4018
4019 @item C-y
4020 @kindex C-y (Group)
4021 @findex gnus-topic-yank-group
4022 Yank the previosuly killed group or topic (@code{gnus-topic-yank-group}).
4023 Note that all topics will be yanked before all groups.
4024
4025 @item T r
4026 @kindex T r (Group)
4027 @findex gnus-topic-rename
4028 Rename a topic (@code{gnus-topic-rename}). 
4029
4030 @item T DEL
4031 @kindex T DEL (Group)
4032 @findex gnus-topic-delete
4033 Delete an empty topic (@code{gnus-topic-delete}). 
4034
4035 @item A T
4036 @kindex A T (Group)
4037 @findex gnus-topic-list-active
4038 List all groups that Gnus knows about in a topicsified way
4039 (@code{gnus-topic-list-active}).
4040
4041 @end table
4042
4043
4044 @node Topic Topology
4045 @subsection Topic Topology
4046 @cindex topic topology
4047 @cindex topology
4048
4049 So, let's have a look at an example group buffer:
4050
4051 @example
4052 Gnus
4053   Emacs -- I wuw it!
4054        3: comp.emacs
4055        2: alt.religion.emacs
4056     Naughty Emacs
4057      452: alt.sex.emacs
4058        0: comp.talk.emacs.recovery
4059   Misc
4060        8: comp.binaries.fractals
4061       13: comp.sources.unix
4062 @end example
4063
4064 So, here we have one top-level topic, two topics under that, and one
4065 sub-topic under one of the sub-topics.  (There is always just one (1)
4066 top-level topic).  This topology can be expressed as follows:
4067
4068 @lisp
4069 (("Gnus" visible)
4070  (("Emacs -- I wuw it!" visible) 
4071   (("Naughty Emacs" visible)))
4072  (("Misc" visible)))
4073 @end lisp
4074
4075 This is in fact how the variable @code{gnus-topic-topology} would look
4076 for the display above.  That variable is saved in the @file{.newsrc.eld}
4077 file, and shouldn't be messed with manually---unless you really want
4078 to.  Since this variable is read from the @file{.newsrc.eld} file,
4079 setting it in any other startup files will have no effect.  
4080
4081 This topology shows what topics are sub-topics of what topics (right),
4082 and which topics are visible.  Two settings are currently
4083 allowed---@code{visible} and @code{invisible}.
4084
4085
4086 @node Misc Group Stuff
4087 @section Misc Group Stuff
4088
4089 @table @kbd
4090
4091 @item g
4092 @kindex g (Group)
4093 @findex gnus-group-get-new-news
4094 Check the server(s) for new articles.  If the numerical prefix is used,
4095 this command will check only groups of level @var{arg} and lower
4096 (@code{gnus-group-get-new-news}).  If given a non-numerical prefix, this
4097 command will force a total rereading of the active file(s) from the
4098 backend(s).
4099
4100 @item M-g
4101 @kindex M-g (Group)
4102 @findex gnus-group-get-new-news-this-group
4103 @vindex gnus-goto-next-group-when-activating
4104 Check whether new articles have arrived in the current group
4105 (@code{gnus-group-get-new-news-this-group}).  The
4106 @code{gnus-goto-next-group-when-activating} variable controls whether
4107 this command is to move point to the next group or not.  It is @code{t}
4108 by default.
4109
4110 @findex gnus-activate-all-groups
4111 @item C-c M-g
4112 @kindex C-c M-g (Group)
4113 Activate absolutely all groups (@code{gnus-activate-all-groups}). 
4114
4115 @item ^
4116 @kindex ^ (Group)
4117 @findex gnus-group-enter-server-mode
4118 Enter the server buffer (@code{gnus-group-enter-server-mode}). @xref{The
4119 Server Buffer}.
4120
4121 @item M-f
4122 @kindex M-f (Group)
4123 @findex gnus-group-fetch-faq
4124 Try to fetch the FAQ for the current group
4125 (@code{gnus-group-fetch-faq}).  Gnus will try to get the FAQ from
4126 @code{gnus-group-faq-directory}, which is usually a directory on a
4127 remote machine.  @code{ange-ftp} will be used for fetching the file.
4128
4129 @item R
4130 @kindex R (Group)
4131 @findex gnus-group-restart
4132 Restart Gnus (@code{gnus-group-restart}).
4133
4134 @item r
4135 @kindex r (Group)
4136 @findex gnus-group-read-init-file
4137 @vindex gnus-init-file
4138 Read the init file (@code{gnus-init-file}, which defaults to
4139 @file{~/.gnus}) (@code{gnus-group-read-init-file}).
4140
4141 @item s
4142 @kindex s (Group)
4143 @findex gnus-group-save-newsrc
4144 Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
4145 (@code{gnus-group-save-newsrc}).  If given a prefix, force saving the
4146 file(s) whether Gnus thinks it is necessary or not.
4147
4148 @item Z
4149 @kindex Z (Group)
4150 @findex gnus-group-clear-dribble
4151 Clear the dribble buffer (@code{gnus-group-clear-dribble}).
4152
4153 @item D
4154 @kindex D (Group)
4155 @findex gnus-group-describe-group
4156 Describe the current group (@code{gnus-group-describe-group}).  If given
4157 a prefix, force Gnus to re-read the description from the server.
4158
4159 @item G a
4160 @kindex G a (Group)
4161 @findex gnus-group-apropos
4162 List all groups that have names that match a regexp
4163 (@code{gnus-group-apropos}).
4164
4165 @item G d
4166 @kindex G d (Group)
4167 @findex gnus-group-description-apropos
4168 List all groups that have names or descriptions that match a regexp
4169 (@code{gnus-group-description-apropos}).
4170
4171 @item a
4172 @kindex a (Group)
4173 @findex gnus-group-post-news
4174 Post an article to a group (@code{gnus-group-post-news}).  The current
4175 group name will be used as the default.
4176
4177 @item m
4178 @kindex m (Group)
4179 @findex gnus-group-mail
4180 Mail a message somewhere (@code{gnus-group-mail}).
4181
4182 @item C-x C-t
4183 @kindex C-x C-t (Group)
4184 @findex gnus-group-transpose-groups
4185 Transpose two groups (@code{gnus-group-transpose-groups}).
4186
4187 @item V
4188 @kindex V (Group)
4189 @findex gnus-version
4190 Display current Gnus version numbers (@code{gnus-version}).
4191
4192 @item M-d
4193 @kindex M-d (Group)
4194 @findex gnus-group-describe-all-groups
4195 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
4196 prefix, force Gnus to re-read the description file from the server.
4197
4198 @item ?
4199 @kindex ? (Group)
4200 @findex gnus-group-describe-briefly
4201 Give a very short help message (@code{gnus-group-describe-briefly}).
4202
4203 @item C-c C-i
4204 @kindex C-c C-i (Group)
4205 @findex gnus-info-find-node
4206 Go to the Gnus info node (@code{gnus-info-find-node}).
4207 @end table
4208
4209 @vindex gnus-group-prepare-hook
4210 @code{gnus-group-prepare-hook} is called after the group buffer is
4211 generated.  It may be used to modify the buffer in some strange,
4212 unnatural way.
4213
4214 @node The Summary Buffer
4215 @chapter The Summary Buffer
4216 @cindex summary buffer
4217
4218 A line for each article is displayed in the summary buffer.  You can
4219 move around, read articles, post articles and reply to articles.
4220
4221 @menu
4222 * Summary Buffer Format::       Deciding how the summary buffer is to look.
4223 * Summary Maneuvering::         Moving around the summary buffer.
4224 * Choosing Articles::           Reading articles.
4225 * Paging the Article::          Scrolling the current article.
4226 * Reply Followup and Post::     Posting articles.
4227 * Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''
4228 * Marking Articles::            Marking articles as read, expirable, etc.
4229 * Limiting::                    You can limit the summary buffer.
4230 * Threading::                   How threads are made.
4231 * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
4232 * Article Caching::             You may store articles in a cache.
4233 * Persistent Articles::         Making articles expiry-resistant.
4234 * Article Backlog::             Having already read articles hang around.
4235 * Exiting the Summary Buffer::  Returning to the Group buffer.
4236 * Process/Prefix::              A convention used by many treatment commands.
4237 * Saving Articles::             Ways of customizing article saving.
4238 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
4239 * Article Treatment::           The article buffer can be mangled at will.
4240 * Summary Sorting::             You can sort the summary buffer four ways.
4241 * Finding the Parent::          No child support? Get the parent.
4242 * Alternative Approaches::      Reading using non-default summaries.
4243 * Tree Display::                A more visual display of threads.
4244 * Mail Group Commands::         Some commands can only be used in mail groups.
4245 * Various Summary Stuff::       What didn't fit anywhere else.
4246 @end menu
4247
4248
4249 @node Summary Buffer Format
4250 @section Summary Buffer Format
4251 @cindex summary buffer format
4252
4253 @menu
4254 * Summary Buffer Lines::     You can specify how summary lines should look.
4255 * Summary Buffer Mode Line:: You can say how the mode line should look.
4256 @end menu
4257
4258 @findex mail-extract-address-components
4259 @findex gnus-extract-address-components
4260 @vindex gnus-extract-address-components
4261 Gnus will use the value of the @code{gnus-extract-address-components}
4262 variable as a function for getting the name and address parts of a
4263 @code{From} header.  Two pre-defined function exist:
4264 @code{gnus-extract-address-components}, which is the default, quite
4265 fast, and too simplistic solution; and
4266 @code{mail-extract-address-components}, which works very nicely, but is
4267 slower.
4268
4269 @vindex gnus-summary-same-subject
4270 @code{gnus-summary-same-subject} is a string indicating that the current
4271 article has the same subject as the previous.  This string will be used
4272 with those specs that require it.  The default is @samp{""}.
4273
4274 @node Summary Buffer Lines
4275 @subsection Summary Buffer Lines
4276
4277 @vindex gnus-summary-line-format
4278 You can change the format of the lines in the summary buffer by changing
4279 the @code{gnus-summary-line-format} variable.  It works along the same
4280 lines a a normal @code{format} string, with some extensions.
4281
4282 The default string is @samp{"%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n"}.
4283
4284 The following format specification characters are understood:
4285
4286 @table @samp
4287 @item N 
4288 Article number.
4289 @item S
4290 Subject string.
4291 @item s
4292 Subject if the article is the root, @code{gnus-summary-same-subject}
4293 otherwise. 
4294 @item F
4295 Full @code{From} line.
4296 @item n
4297 The name (from the @code{From} header).
4298 @item a
4299 The name (from the @code{From} header).  This differs from the @code{n}
4300 spec in that it uses @code{gnus-extract-address-components}, which is
4301 slower, but may be more thorough.
4302 @item A
4303 The address (from the @code{From} header).  This works the same way as
4304 the @code{a} spec.
4305 @item L
4306 Number of lines in the article.
4307 @item c
4308 Number of characters in the article.
4309 @item I
4310 Indentation based on thread level (@pxref{Customizing Threading}).
4311 @item T
4312 Nothing if the article is a root and lots of spaces if it isn't (it
4313 pushes everything after it off the screen).
4314 @item \[
4315 Opening bracket, which is normally @samp{\[}, but can also be @samp{<}
4316 for adopted articles.
4317 @item \]
4318 Closing bracket, which is normally @samp{\]}, but can also be @samp{>}
4319 for adopted articles.
4320 @item <
4321 One space for each thread level.
4322 @item >
4323 Twenty minus thread level spaces.
4324 @item U
4325 Unread.
4326 @item R
4327 Replied.
4328 @item i
4329 Score as a number.
4330 @item z
4331 @vindex gnus-summary-zcore-fuzz
4332 Zcore, @samp{+} if above the default level and @samp{-} if below the
4333 default level.  If the difference between
4334 @code{gnus-summary-default-level} and the score is less than
4335 @code{gnus-summary-zcore-fuzz}, this spec will not be used.
4336 @item V
4337 Total thread score.
4338 @item x
4339 @code{Xref}.
4340 @item D
4341 @code{Date}.
4342 @item M
4343 @code{Message-ID}.
4344 @item r
4345 @code{References}.
4346 @item t
4347 Number of articles in the current sub-thread.  Using this spec will slow
4348 down summary buffer generation somewhat.
4349 @item e
4350 A single character will be displayed if the article has any children. 
4351 @item u
4352 User defined specifier.  The next character in the format string should
4353 be a letter.  @sc{gnus} will call the function
4354 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
4355 following @samp{%u}.  The function will be passed the current header as
4356 argument.  The function should return a string, which will be inserted
4357 into the summary just like information from any other summary specifier.
4358 @end table
4359
4360 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
4361 have to be handled with care.  For reasons of efficiency, Gnus will
4362 compute what column these characters will end up in, and ``hard-code''
4363 that.  This means that it is illegal to have these specs after a
4364 variable-length spec.  Well, you might not be arrested, but your summary
4365 buffer will look strange, which is bad enough.
4366
4367 The smart choice is to have these specs as far to the left as possible.
4368 (Isn't that the case with everything, though?  But I digress.)
4369
4370 This restriction may disappear in later versions of Gnus.
4371
4372 @node Summary Buffer Mode Line
4373 @subsection Summary Buffer Mode Line
4374
4375 @vindex gnus-summary-mode-line-format
4376 You can also change the format of the summary mode bar.  Set
4377 @code{gnus-summary-mode-line-format} to whatever you like.  Here are the
4378 elements you can play with:
4379
4380 @table @samp
4381 @item G
4382 Group name.
4383 @item p
4384 Unprefixed group name.
4385 @item A
4386 Current article number.
4387 @item V
4388 Gnus version.
4389 @item U
4390 Number of unread articles in this group.
4391 @item e
4392 Number of unselected articles in this group.
4393 @item Z
4394 A string with the number of unread and unselected articles represented
4395 either as @samp{<%U(+%u) more>} if there are both unread and unselected
4396 articles, and just as @samp{<%U more>} if there are just unread articles
4397 and no unselected ones.
4398 @item g
4399 Shortish group name.  For instance, @samp{rec.arts.anime} will be
4400 shortened to @samp{r.a.anime}. 
4401 @item S
4402 Subject of the current article.
4403 @item u
4404 Used-defined spec.
4405 @item s
4406 Name of the current score file.
4407 @item d
4408 Number of dormant articles.
4409 @item t
4410 Number of ticked articles.
4411 @item r
4412 Number of articles that have been marked as read in this session. 
4413 @item E
4414 Number of articles expunged by the score files.
4415 @end table
4416
4417
4418 @node Summary Maneuvering
4419 @section Summary Maneuvering
4420 @cindex summary movement
4421
4422 All the straight movement commands understand the numeric prefix and
4423 behave pretty much as you'd expect. 
4424
4425 None of these commands select articles.
4426
4427 @table @kbd
4428 @item G M-n
4429 @itemx M-n
4430 @kindex M-n (Summary)
4431 @kindex G M-n (Summary)
4432 @findex gnus-summary-next-unread-subject
4433 Go to the next summary line of an unread article
4434 (@code{gnus-summary-next-unread-subject}). 
4435
4436 @item G M-p
4437 @itemx M-p
4438 @kindex M-p (Summary)
4439 @kindex G M-p (Summary)
4440 @findex gnus-summary-prev-unread-subject
4441 Go to the previous summary line of an unread article
4442 (@code{gnus-summary-prev-unread-subject}). 
4443
4444 @item G g
4445 @itemx j
4446 @kindex j (Summary)
4447 @kindex G g (Summary)
4448 @findex gnus-summary-goto-subject
4449 Ask for an article number and then go to this summary line
4450 (@code{gnus-summary-goto-subject}). 
4451 @end table
4452
4453 If Gnus asks you to press a key to confirm going to the next group, you
4454 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
4455 buffer, searching for the next group to read without actually returning
4456 to the group buffer.
4457
4458 Variables related to summary movement:
4459
4460 @table @code
4461
4462 @vindex gnus-auto-select-next
4463 @item gnus-auto-select-next
4464 If you are at the end of the group and issue one of the movement
4465 commands, Gnus will offer to go to the next group.  If this variable is
4466 @code{t} and the next group is empty, Gnus will exit summary mode and
4467 return to the group buffer.  If this variable is neither @code{t} nor
4468 @code{nil}, Gnus will select the next group, no matter whether it has
4469 any unread articles or not.  As a special case, if this variable is
4470 @code{quietly}, Gnus will select the next group without asking for
4471 confirmation.  If this variable is @code{almost-quietly}, the same will
4472 happen only if you are located on the last article in the group.
4473 Finally, if this variable is @code{slightly-quietly}, the @kbd{Z n}
4474 command will go to the next group without confirmation.  Also
4475 @xref{Group Levels}.
4476
4477 @item gnus-auto-select-same
4478 @vindex gnus-auto-select-same
4479 If non-@code{nil}, all the movement commands will try to go to the next
4480 article with the same subject as the current.  This variable is not
4481 particularly useful if you use a threaded display.
4482
4483 @item gnus-summary-check-current
4484 @vindex gnus-summary-check-current
4485 If non-@code{nil}, all the ``unread'' movement commands will not proceed
4486 to the next (or previous) article if the current article is unread.
4487 Instead, they will choose the current article.
4488
4489 @item gnus-auto-center-summary
4490 @vindex gnus-auto-center-summary
4491 If non-@code{nil}, Gnus will keep the point in the summary buffer
4492 centered at all times.  This makes things quite tidy, but if you have a
4493 slow network connection, or simply do not like this un-Emacsism, you can
4494 set this variable to @code{nil} to get the normal Emacs scrolling
4495 action.  This will also inhibit horizontal recentering of the summary
4496 buffer, which might make it more inconvenient to read extremely long
4497 threads.
4498
4499 @end table
4500
4501
4502 @node Choosing Articles
4503 @section Choosing Articles
4504 @cindex selecting articles
4505
4506 None of the following movement commands understand the numeric prefix,
4507 and they all select and display an article.
4508
4509 @table @kbd
4510 @item SPACE
4511 @kindex SPACE (Summary)
4512 @findex gnus-summary-next-page
4513 Select the current article, or, if that one's read already, the next
4514 unread article (@code{gnus-summary-next-page}).
4515
4516 @item G n
4517 @itemx n
4518 @kindex n (Summary)
4519 @kindex G n (Summary)
4520 @findex gnus-summary-next-unread-article
4521 Go to next unread article (@code{gnus-summary-next-unread-article}).
4522
4523 @item G p
4524 @itemx p
4525 @kindex p (Summary)
4526 @findex gnus-summary-prev-unread-article
4527 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
4528
4529 @item G N
4530 @itemx N
4531 @kindex N (Summary)
4532 @kindex G N (Summary)
4533 @findex gnus-summary-next-article
4534 Go to the next article (@code{gnus-summary-next-article}).
4535
4536 @item G P
4537 @itemx P
4538 @kindex P (Summary)
4539 @kindex G P (Summary)
4540 @findex gnus-summary-prev-article
4541 Go to the previous article (@code{gnus-summary-prev-article}).
4542
4543 @item G C-n
4544 @kindex G C-n (Summary)
4545 @findex gnus-summary-next-same-subject
4546 Go to the next article with the same subject
4547 (@code{gnus-summary-next-same-subject}). 
4548
4549 @item G C-p
4550 @kindex G C-p (Summary)
4551 @findex gnus-summary-prev-same-subject
4552 Go to the previous article with the same subject
4553 (@code{gnus-summary-prev-same-subject}). 
4554
4555 @item G f
4556 @itemx .
4557 @kindex G f  (Summary)
4558 @kindex .  (Summary)
4559 @findex gnus-summary-first-unread-article
4560 Go to the first unread article
4561 (@code{gnus-summary-first-unread-article}).
4562
4563 @item G b
4564 @itemx ,
4565 @kindex G b (Summary)
4566 @kindex , (Summary)
4567 Go to the article with the highest score
4568 (@code{gnus-summary-best-unread-article}). 
4569
4570 @item G l
4571 @itemx l
4572 @kindex l (Summary)
4573 @kindex G l (Summary)
4574 @findex gnus-summary-goto-last-article
4575 Go to the previous article read (@code{gnus-summary-goto-last-article}).
4576
4577 @item G p
4578 @kindex G p (Summary)
4579 @findex gnus-summary-pop-article
4580 Pop an article off the summary history and go to this article
4581 (@code{gnus-summary-pop-article}).  This command differs from the
4582 command above in that you can pop as many previous articles off the
4583 history as you like.
4584 @end table
4585
4586 Some variables that are relevant for moving and selecting articles:
4587
4588 @table @code
4589 @item gnus-auto-extend-newsgroup
4590 @vindex gnus-auto-extend-newsgroup
4591 All the movement commands will try to go to the previous (or next)
4592 article, even if that article isn't displayed in the Summary buffer if
4593 this variable is non-@code{nil}.  Gnus will then fetch the article from
4594 the server and display it in the article buffer.
4595
4596 @item gnus-select-article-hook
4597 @vindex gnus-select-article-hook
4598 This hook is called whenever an article is selected.  By default it
4599 exposes any threads hidden under the selected article.
4600
4601 @item gnus-mark-article-hook
4602 @vindex gnus-mark-article-hook
4603 This hook is called whenever an article is selected.  It is intended to
4604 be used for marking articles as read.
4605
4606 @item gnus-visual-mark-article-hook
4607 @vindex gnus-visual-mark-article-hook
4608 This hook is run after selecting an article.  It is meant to be used for
4609 highlighting the article in some way.  It is not run if
4610 @code{gnus-visual} is @code{nil}.
4611
4612 @item gnus-summary-update-hook
4613 @vindex gnus-summary-update-hook
4614 This hook is called when a summary line is changed.  It is not run if
4615 @code{gnus-visual} is @code{nil}.
4616
4617 @item gnus-summary-selected-face
4618 @vindex gnus-summary-selected-face
4619 This is the face (or @dfn{font} as some people call it) that is used to
4620 highlight the current article in the summary buffer.
4621
4622 @item gnus-summary-highlight
4623 @vindex gnus-summary-highlight
4624 Summary lines are highlighted according to this variable, which is a
4625 list where the elements are on the format @code{(FORM . FACE)}.  If you
4626 would, for instance, like ticked articles to be italic and high-scored
4627 articles to be bold, you could set this variable to something like
4628 @lisp
4629 (((eq mark gnus-ticked-mark) . italic)
4630  ((> score default) . bold))
4631 @end lisp
4632 As you may have guessed, if @var{FORM} returns a non-@code{nil} value,
4633 @var{FACE} will be applied to the line.
4634 @end table
4635
4636 @node Paging the Article
4637 @section Scrolling the Article
4638 @cindex article scrolling
4639
4640 @table @kbd
4641
4642 @item SPACE
4643 @kindex SPACE (Summary)
4644 @findex gnus-summary-next-page
4645 Pressing @kbd{SPACE} will scroll the current article forward one page,
4646 or, if you have come to the end of the current article, will choose the
4647 next article (@code{gnus-summary-next-page}).
4648
4649 @item DEL
4650 @kindex DEL (Summary)
4651 @findex gnus-summary-prev-page
4652 Scroll the current article back one page (@code{gnus-summary-prev-page}). 
4653
4654 @item RET
4655 @kindex RET (Summary)
4656 @findex gnus-summary-scroll-up
4657 Scroll the current article one line forward
4658 (@code{gnus-summary-scroll-up}).
4659
4660 @item A <
4661 @itemx <
4662 @kindex < (Summary)
4663 @kindex A < (Summary)
4664 @findex gnus-summary-beginning-of-article
4665 Scroll to the beginning of the article
4666 (@code{gnus-summary-beginning-of-article}).
4667
4668 @item A >
4669 @itemx >
4670 @kindex > (Summary)
4671 @kindex A > (Summary)
4672 @findex gnus-summary-end-of-article
4673 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
4674
4675 @item A s 
4676 @kindex A s (Summary)
4677 @findex gnus-summary-isearch-article
4678 Perform an isearch in the article buffer
4679 (@code{gnus-summary-isearch-article}). 
4680
4681 @end table
4682
4683 @node Reply Followup and Post
4684 @section Reply, Followup and Post
4685 @cindex reply
4686 @cindex followup
4687 @cindex post
4688
4689 @kindex C-c C-c (Post)
4690 All the commands for posting and mailing will put you in a post or mail
4691 buffer where you can edit the article all you like, before you send the
4692 article by pressing @kbd{C-c C-c}.  If you are in a foreign news group,
4693 and you wish to post the article using the foreign server, you can give
4694 a prefix to @kbd{C-c C-c} to make Gnus try to post using the foreign
4695 server. 
4696
4697 @menu 
4698 * Mail::                 Mailing & replying.
4699 * Post::                 Posting and following up.
4700 * Posting Server::       What server should you post via?
4701 * Mail and Post::        Mailing and posting at the same time.
4702 * Archived Messages::    Where Gnus stores the messages you've sent.
4703 * Posting Styles::       An easier way to configure some key elements.
4704 * Drafts::               Postponing messages and rejected messages.
4705 * Rejected Articles::    What happens if the server doesn't like your article?
4706 @end menu
4707
4708 @node Mail
4709 @subsection Mail
4710
4711 Commands for composing a mail message:
4712
4713 @table @kbd
4714
4715 @item S r
4716 @itemx r
4717 @kindex S r (Summary)
4718 @kindex r (Summary)
4719 @findex gnus-summary-reply
4720 Mail a reply to the author of the current article
4721 (@code{gnus-summary-reply}). 
4722
4723 @item S R
4724 @itemx R
4725 @kindex R (Summary)
4726 @kindex S R (Summary)
4727 @findex gnus-summary-reply-with-original
4728 Mail a reply to the author of the current article and include the
4729 original message (@code{gnus-summary-reply-with-original}).  This
4730 command uses the process/prefix convention.
4731
4732 @item S o m
4733 @kindex S o m (Summary)
4734 @findex gnus-summary-mail-forward
4735 Forward the current article to some other person
4736 (@code{gnus-summary-mail-forward}). 
4737
4738 @item S o p
4739 @kindex S o p (Summary)
4740 @findex gnus-summary-post-forward
4741 Forward the current article to a newsgroup
4742 (@code{gnus-summary-post-forward}).
4743
4744 @item S m
4745 @itemx m
4746 @kindex m (Summary)
4747 @kindex S m (Summary)
4748 @findex gnus-summary-mail-other-window
4749 Send a mail to some other person
4750 (@code{gnus-summary-mail-other-window}).
4751
4752 @item S D b
4753 @kindex S D b (Summary)
4754 @findex gnus-summary-resend-bounced-mail
4755 If you have sent a mail, but the mail was bounced back to you for some
4756 reason (wrong address, transient failure), you can use this command to
4757 resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
4758 will be popped into a mail buffer where you can edit the headers before
4759 sending the mail off again.  The headers that match the regexp
4760 @code{gnus-bounced-headers-junk} (default @samp{^Received:}) are
4761 automatically deleted first.  If you give a prefix to this command, and
4762 the bounced mail is a reply to some other mail, Gnus will try to fetch
4763 that mail and display it for easy perusal of its headers.  This might
4764 very well fail, though.
4765
4766 @item S D r
4767 @kindex S D r (Summary)
4768 @findex gnus-summary-resend-message
4769 Not to be confused with the previous command,
4770 @code{gnus-summary-resend-message} will prompt you for an address to
4771 send the current message off to, and then send it to that place.  The
4772 headers of the message won't be altered---but lots of headers that say
4773 @samp{Resent-To}, @samp{Resent-From} and so on will be added.  This
4774 means that you actually send a mail to someone that has a @samp{To}
4775 header that (proabbly) points to yourself.  This will confuse people.
4776 So, natcherly you'll only do that if you're really eVIl.  
4777
4778 This command is mainly used if you have several accounts and want to
4779 ship a mail to a different account of yours.  (If you're both
4780 @samp{root} and @samp{postmaster} and get a mail for @samp{postmaster}
4781 to the @samp{root} account, you may want to resend it to
4782 @samp{postmaster}.  Ordnung muss sein!
4783
4784 @item S O m
4785 @kindex S O m (Summary)
4786 @findex gnus-uu-digest-mail-forward
4787 Digest the current series and forward the result using mail
4788 (@code{gnus-uu-digest-mail-forward}).  This command uses the
4789 process/prefix convention (@pxref{Process/Prefix}). 
4790
4791 @item S O p
4792 @kindex S O p (Summary)
4793 @findex gnus-uu-digest-post-forward
4794 Digest the current series and forward the result to a newsgroup
4795 (@code{gnus-uu-digest-mail-forward}).  
4796 @end table
4797
4798 Variables for customizing outgoing mail:
4799
4800 @table @code
4801 @item gnus-reply-to-function
4802 @vindex gnus-reply-to-function
4803 Gnus uses the normal methods to determine where replies are to go, but
4804 you can change the behavior to suit your needs by fiddling with this
4805 variable.
4806
4807 If you want the replies to go to the @samp{Sender} instead of the
4808 @samp{From} in the group @samp{mail.stupid-list}, you could do something
4809 like this:
4810
4811 @lisp
4812 (setq gnus-reply-to-function
4813       (lambda (group)
4814        (cond ((string= group "mail.stupid-list")
4815                (mail-fetch-field "sender"))
4816              (t
4817               nil))))
4818 @end lisp
4819
4820 This function will be called narrowed to the head of the article that is
4821 being replied to.
4822
4823 As you can see, this function should return a string if it has an
4824 opinion as to what the To header should be.  If it does not, it should
4825 just return @code{nil}, and the normal methods for determining the To
4826 header will be used.
4827
4828 This function can also return a list.  In that case, each list element
4829 should be a cons, where the car should be the name of an header
4830 (eg. @samp{Cc}) and the cdr should be the header value
4831 (eg. @samp{larsi@@ifi.uio.no}).  All these headers will be inserted into
4832 the head of the outgoing mail. 
4833
4834 @item gnus-mail-send-method
4835 @vindex gnus-mail-send-method
4836 This variable says how a mail should be mailed.  It uses the function in
4837 the @code{send-mail-function} variable as the default.
4838
4839 @item gnus-uu-digest-headers
4840 @vindex gnus-uu-digest-headers
4841 List of regexps to match headers included in digested messages.  The
4842 headers will be included in the sequence they are matched.
4843
4844 @item gnus-mail-hook
4845 @vindex gnus-mail-hook
4846 Hook called as the last thing after setting up a mail buffer.
4847
4848 @item gnus-required-mail-headers
4849 @vindex gnus-required-mail-headers
4850 Gnus will generate headers in all outgoing mail instead of letting
4851 @code{sendmail} do it for us.  This makes it possible to do more neat
4852 stuff, like putting mail without sending it, do hairy @code{Fcc}
4853 handling, and much more.  This variable controls what headers Gnus will
4854 generate, and is of the exact same form as @code{gnus-required-headers},
4855 which does the same for news articles (@pxref{Post}). 
4856
4857 The @code{Newsgroups} header is illegal in this list, while @code{To} is
4858 required, and @code{X-Mailer} can be added if you so should want.
4859
4860 @findex gnus-forward-start-separator
4861 @item gnus-forward-start-separator
4862 Delimiter inserted before forwarded messages.
4863
4864 @findex gnus-forward-end-separator
4865 @item gnus-forward-end-separator
4866 Delimiter inserted after forwarded messages.
4867
4868 @vindex gnus-signature-before-forwarded-message
4869 @item gnus-signature-before-forwarded-message
4870 If this variable is @code{t}, which it is by default, your personal
4871 signature will be inserted before the forwarded message.  If not, the
4872 forwarded message will be inserted first in the new mail.
4873
4874 @item gnus-forward-included-headers
4875 @vindex gnus-forward-included-headers
4876 Regexp matching header lines to be included in forwarded messages.  It
4877 usese the same regexp as @code{gnus-visible-headers} by default.
4878
4879 @end table
4880
4881 @kindex C-c C-c (Mail)
4882 @kindex C-c C-p (Mail)
4883 @findex gnus-put-message
4884 You normally send a mail message by pressing @kbd{C-c C-c}.  However,
4885 you may wish to just put the mail message you have just written in your
4886 own local mail group instead of sending it.  Sounds quite unlikely, but
4887 I found that useful, so you can now also press @kbd{C-c C-p} to
4888 @dfn{put} the article in the current mail group, or, if there is no such
4889 thing, you will be prompted for a mail group, and then the article will
4890 be put there.  This means that the article is @dfn{not} mailed.  
4891
4892 There are three ``methods'' for handling all mail.  The default is
4893 @code{sendmail}.  Some people like what @code{mh} does better, and some
4894 people prefer @code{vm}.
4895
4896 Three variables for customizing what to use when:
4897
4898 @table @code
4899
4900 @vindex gnus-mail-reply-method
4901 @item gnus-mail-reply-method
4902 This function is used to compose replies.  The three functions avaibale
4903 are:
4904
4905 @findex gnus-mail-reply-using-vm
4906 @findex gnus-mail-reply-using-mhe
4907 @findex gnus-mail-reply-using-mail
4908 @itemize @bullet
4909 @item 
4910 @code{gnus-mail-reply-using-mail} (sendmail)
4911 @item 
4912 @code{gnus-mail-reply-using-mhe} (mh)
4913 @item
4914 @code{gnus-mail-reply-using-vm} (vm)
4915 @end itemize
4916
4917 @vindex gnus-mail-forward-method
4918 @item gnus-mail-forward-method
4919 This function is used to forward messages.  The three functions avaibale
4920 are:
4921
4922 @findex gnus-mail-forward-using-vm
4923 @findex gnus-mail-forward-using-mhe
4924 @findex gnus-mail-forward-using-mail
4925 @itemize @bullet
4926 @item 
4927 @code{gnus-mail-forward-using-mail} (sendmail)
4928 @item 
4929 @code{gnus-mail-forward-using-mhe} (mh)
4930 @item
4931 @code{gnus-mail-forward-using-vm} (vm)
4932 @end itemize
4933
4934 @vindex gnus-mail-other-window-method
4935 @item gnus-mail-other-window-method
4936 This function is used to send mails.  The three functions avaibale are:
4937
4938 @findex gnus-mail-other-window-using-vm
4939 @findex gnus-mail-other-window-using-mhe
4940 @findex gnus-mail-other-window-using-mail
4941 @itemize @bullet
4942 @item 
4943 @code{gnus-mail-other-window-using-mail} (sendmail)
4944 @item 
4945 @code{gnus-mail-other-window-using-mhe} (mh)
4946 @item
4947 @code{gnus-mail-other-window-using-vm} (vm)
4948 @end itemize
4949
4950 @end table
4951
4952
4953 @node Post
4954 @subsection Post
4955
4956 Commands for posting an article:
4957
4958 @table @kbd
4959 @item S p
4960 @itemx a
4961 @kindex a (Summary)
4962 @kindex S p (Summary)
4963 @findex gnus-summary-post-news
4964 Post an article to the current group
4965 (@code{gnus-summary-post-news}).
4966
4967 @item S f
4968 @itemx f
4969 @kindex f (Summary)
4970 @kindex S f (Summary)
4971 @findex gnus-summary-followup
4972 Post a followup to the current article (@code{gnus-summary-followup}).
4973
4974 @item S F
4975 @itemx F
4976 @kindex S F (Summary)
4977 @kindex F (Summary)
4978 @findex gnus-summary-followup-with-original
4979 Post a followup to the current article and include the original message
4980 (@code{gnus-summary-followup-with-original}).   This command uses the
4981 process/prefix convention.
4982
4983 @item S u
4984 @kindex S u (Summary)
4985 @findex gnus-uu-post-news
4986 Uuencode a file, split it into parts, and post it as a series
4987 (@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}). 
4988 @end table
4989
4990 @vindex gnus-required-headers
4991 @code{gnus-required-headers} a list of header symbols.  These headers
4992 will either be automatically generated, or, if that's impossible, they
4993 will be prompted for.  The following symbols are legal:
4994
4995 @table @code
4996
4997 @item From
4998 This required header will be filled out with the result of the
4999 @code{gnus-inews-user-name} function, which depends on the
5000 @code{gnus-user-from-line}, @code{gnus-user-login-name},
5001 @code{gnus-local-domain} and @code{user-mail-address} variables.
5002
5003 @item Subject
5004 This required header will be prompted for if not present already. 
5005
5006 @item Newsgroups
5007 This required header says which newsgroups the article is to be posted
5008 to.  If it isn't present already, it will be prompted for.
5009
5010 @item Organization
5011 @cindex organization
5012 @vindex gnus-local-organization
5013 @vindex gnus-organization-file
5014 This optional header will be filled out depending on the
5015 @code{gnus-local-organization} variable.  @code{gnus-organization-file}
5016 will be used if that variable is nil.
5017
5018 @item Lines
5019 This optional header will be computed by Gnus.
5020
5021 @item Message-ID
5022 @cindex Message-ID
5023 This required header will be generated by Gnus.  A unique ID will be
5024 created based on date, time, user name and system name.
5025
5026 @item X-Newsreader
5027 @cindex X-Newsreader
5028 This optional header will be filled out with the Gnus version numbers. 
5029
5030 @item Expires
5031 @vindex gnus-article-expires
5032 @cindex Expires
5033 This extremely optional header will be inserted according to the
5034 @code{gnus-article-expires} variable.  It is highly deprecated and
5035 shouldn't be used unless you know what you're doing.
5036
5037 @item Distribution
5038 This optional header is filled out according to the
5039 @code{gnus-distribution-function} variable.  It is a deprecated and much
5040 misunderstood header.
5041 @end table
5042
5043 In addition, you can enter conses into this list.  The car of this cons
5044 should be a symbol.  This symbol's name is the name of the header, and
5045 the cdr can either be a string to be entered verbatim as the value of
5046 this header, or it can be a function to be called.  This function should
5047 return a string to be inserted.  For instance, if you want to insert
5048 @samp{Mime-Version: 1.0}, you should enter @code{(Mime-Version . "1.0")}
5049 into the list.  If you want to insert a funny quote, you could enter
5050 something like @code{(X-Yow . yow)} into the list.  The function
5051 @code{yow} will then be called without any arguments.
5052
5053 The list contains a cons where the car of the cons is @code{optional},
5054 the cdr of this cons will only be inserted if it is non-@code{nil}.
5055
5056 Other variables for customizing outgoing articles:
5057
5058 @table @code
5059 @item nntp-news-default-headers
5060 @vindex nntp-news-default-headers
5061 If non-@code{nil}, this variable will override
5062 @code{mail-default-headers} when posting.  This variable should then be
5063 a string.  This string will be inserted, as is, in the head of all
5064 outgoing articles.
5065
5066 @item gnus-use-followup-to
5067 @vindex gnus-use-followup-to
5068 If @code{nil}, always ignore the Followup-To header.  If it is @code{t},
5069 use its value, but ignore the special value @samp{poster}, which will
5070 send the followup as a reply mail to the person you are responding to.
5071 If it is the symbol @code{ask}, query the user before posting.
5072 If it is the symbol @code{use}, always use the value.
5073
5074 @item gnus-followup-to-function
5075 @vindex gnus-followup-to-function
5076 This variable is most useful in mail groups, where ``following up'' really
5077 means sending a mail to a list address.  Gnus uses the normal methods to
5078 determine where follow-ups are to go, but you can change the behavior
5079 to suit your needs by fiddling with this variable.
5080
5081 If you want the followups to go to the @samp{Sender} instead of the
5082 @samp{From} in the group @samp{mail.stupid-list}, you could do something
5083 like this:
5084
5085 @lisp
5086 (setq gnus-followup-to-function
5087       (lambda (group)
5088        (cond ((string= group "mail.stupid-list")
5089                (mail-fetch-field "sender"))
5090              (t
5091               nil))))
5092 @end lisp
5093
5094 This function will be called narrowed to header of the article that is
5095 being followed up.
5096
5097 @item gnus-removable-headers
5098 @vindex gnus-removable-headers
5099 Some headers that are generated are toxic to the @sc{nntp} server.
5100 These include the @code{NNTP-Posting-Host}, @code{Bcc} and @code{Xref},
5101 so these headers are deleted if they are present in this list of
5102 symbols.
5103
5104 @item gnus-deletable-headers
5105 @vindex gnus-deletable-headers
5106 Headers in this list that were previously generated by Gnus will be
5107 deleted before posting.  Let's say you post an article.  Then you decide
5108 to post it again to some other group, you naughty boy, so you jump back
5109 to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
5110 ship it off again.  By default, this variable makes sure that the old
5111 generated @code{Message-ID} is deleted, and a new one generated.  If
5112 this isn't done, the entire empire would probably crumble, anarchy would
5113 prevail, and cats would start walking on two legs and rule the world.
5114 Allegedly. 
5115
5116 @item gnus-signature-function
5117 @vindex gnus-signature-function
5118 If non-@code{nil}, this variable should be a function that returns a
5119 signature file name.  The function will be called with the name of the
5120 group being posted to.  If the function returns a string that doesn't
5121 correspond to a file, the string itself is inserted.  If the function
5122 returns @code{nil}, the @code{gnus-signature-file} variable will be used
5123 instead.
5124
5125 @item gnus-post-prepare-function
5126 @vindex gnus-post-prepare-function
5127 This function is called with the name of the current group after the
5128 post buffer has been initialized, and can be used for inserting a
5129 signature.  Nice if you use different signatures in different groups.
5130
5131 @item gnus-post-prepare-hook
5132 @vindex gnus-post-prepare-hook
5133 This hook is called after a post buffer has been prepared.  If you want
5134 to insert a signature at this point, you could put
5135 @code{gnus-inews-insert-signature} into this hook.
5136
5137 @item news-reply-header-hook
5138 @vindex news-reply-header-hook
5139 A related variable when following up and replying is this variable,
5140 which inserts the @dfn{quote line}.  The default value is:
5141
5142 @lisp
5143 (defvar news-reply-header-hook
5144   (lambda ()
5145     (insert "In article " news-reply-yank-message-id
5146             " " news-reply-yank-from " writes:\n\n")))
5147 @end lisp
5148
5149 This will create lines like:
5150
5151 @example
5152 In article <zngay8jrql@@eyesore.no> Lars Mars <lars@@eyesore.no> writes:
5153 @end example
5154
5155 Having the @code{Message-ID} in this line is probably overkill, so I
5156 would suggest this hook instead:
5157
5158 @lisp
5159 (setq news-reply-header-hook
5160   (lambda () (insert news-reply-yank-from " writes:\n\n")))
5161 @end lisp
5162
5163 @item gnus-prepare-article-hook
5164 @vindex gnus-prepare-article-hook
5165 This hook is called before the headers have been prepared.  
5166
5167 @item gnus-inews-article-function
5168 @vindex gnus-inews-article-function
5169 This function is used to do the actual article processing and header
5170 checking/generation.  
5171
5172 @item gnus-inews-article-hook
5173 @vindex gnus-inews-article-hook
5174 This hook is called right before the article is posted.  By default it
5175 handles FCC processing (i.e., saving the article to a file.)  You can
5176 also have this hook add a score to all followups to the article you've
5177 written (@pxref{Followups To Yourself}). 
5178
5179 @item gnus-inews-article-header-hook
5180 @vindex gnus-inews-article-header-hook
5181 This hook is called after inserting the required headers in an article
5182 to be posted.  The hook is called from the @code{*post-news*} buffer,
5183 narrowed to the head, and is intended for people who would like to
5184 insert additional headers, or just change headers in some way or other.
5185
5186 @item gnus-check-before-posting
5187 @vindex gnus-check-before-posting
5188 If non-@code{nil}, Gnus will attempt to check the legality of the
5189 headers, as well as some other stuff, before posting.  You can control
5190 the granularity of the check by adding or removing elements from this
5191 list.  Legal elements are:
5192
5193 @table @code
5194 @item subject-cmsg 
5195 Check the subject for commands.
5196 @item sender
5197 Insert a new @code{Sender} header if the @code{From} header looks odd. 
5198 @item multiple-headers 
5199 Check for the existence of multiple equal headers.
5200 @item sendsys 
5201 Check for the existence of version and sendsys commands.
5202 @item message-id
5203 Check whether the @code{Message-ID} looks ok.
5204 @item from
5205 Check whether the @code{From} header seems nice.
5206 @item long-lines 
5207 Check for too long lines.
5208 @item control-chars
5209 Check for illegal characters.
5210 @item size
5211 Check for excessive size.
5212 @item new-text
5213 Check whether there is any new text in the messages.
5214 @item signature
5215 Check the length of the signature.
5216 @item approved
5217 Check whether the article has an @code{Approved} header, which is
5218 something only moderators should include.
5219 @item empty
5220 Check whether the article is empty.
5221 @end table
5222
5223 @end table
5224
5225
5226
5227 @node Posting Server
5228 @subsection Posting Server
5229
5230 When you press those magical @kbd{C-c C-c} keys to ship off your latest
5231 (extremely intelligent, of course) article, where does it go?
5232
5233 Thank you for asking.  I hate you.
5234
5235 @vindex gnus-post-method
5236
5237 It can be quite complicated.  Normally, Gnus will use the same native
5238 server.  However.  If your native server doesn't allow posting, just
5239 reading, you probably want to use some other server to post your
5240 (extremely intelligent and fabulously interesting) articles.  You can
5241 then set the @code{gnus-post-method} to some other method:
5242
5243 @lisp
5244 (setq gnus-post-method '(nnspool ""))
5245 @end lisp
5246
5247 Now, if you've done this, and then this server rejects your article, or
5248 this server is down, what do you do then?  To override this variable you
5249 can use a non-zero prefix to the @kbd{C-c C-c} command to force using
5250 the ``current'' server for posting.
5251
5252 If you give a zero prefix (i. e., @kbd{C-u 0 C-c C-c}) to that command,
5253 Gnus will prompt you for what method to use for posting.  
5254
5255 You can also set @code{gnus-post-method} to a list of select methods.
5256 If that's the case, Gnus will always prompt you for what method to use
5257 for posting. 
5258
5259
5260 @node Mail and Post
5261 @subsection Mail and Post
5262
5263 Commands for sending mail and post at the same time:
5264
5265 @table @kbd
5266 @item S b
5267 @kindex S b (Summary)
5268 @findex gnus-summary-followup-and-reply
5269 Post a followup and send a reply to the current article
5270 (@code{gnus-summary-followup-and-reply}).
5271
5272 @item S B
5273 @kindex S B (Summary)
5274 @findex gnus-summary-followup-and-reply-with-original
5275 Post a followup and send a reply to the current article and include the
5276 original message (@code{gnus-summary-followup-and-reply-with-original}).
5277 This command uses the process/prefix convention.
5278 @end table
5279
5280 Here's a list of variables that are relevant to both mailing and
5281 posting:
5282
5283 @table @code
5284 @item gnus-signature-file
5285 @itemx mail-signature
5286 @vindex mail-signature
5287 @vindex gnus-signature-file
5288 @cindex double signature
5289 @cindex signature
5290 If @code{gnus-signature-file} is non-@code{nil}, it should be the name
5291 of a file containing a signature (@samp{~/.signature} by default).  This
5292 signature will be appended to all outgoing post.  Most people find it
5293 more convenient to use @code{mail-signature}, which (sort of) does the
5294 same, but inserts the signature into the buffer before you start editing
5295 the post (or mail).  So---if you have both of these variables set, you
5296 will get two signatures.  Note that @code{mail-signature} does not work
5297 the same way as @code{gnus-signature-file}, which is a bit confusing.
5298 If @code{mail-signature} is @code{t}, it will insert
5299 @file{~/.signature}.  If it is a string, this string will be inserted. 
5300
5301 Note that RFC1036 says that a signature should be preceded by the three
5302 characters @samp{-- } on a line by themselves.  This is to make it
5303 easier for the recipient to automatically recognize and process the
5304 signature.  So don't remove those characters, even though you might feel
5305 that they ruin you beautiful design, like, totally.
5306
5307 Also note that no signature should be more than four lines long.
5308 Including ASCII graphics is an efficient way to get everybody to believe
5309 that you are silly and have nothing important to say.
5310
5311 @item mail-yank-prefix
5312 @vindex mail-yank-prefix
5313 @cindex yanking
5314 @cindex quoting
5315 When you are replying to or following up an article, you normally want
5316 to quote the person you are answering.  Inserting quoted text is done by
5317 @dfn{yanking}, and each quoted line you yank will have
5318 @code{mail-yank-prefix} prepended to it.  This is @code{nil} by default,
5319 which isn't very pretty---the prefix will just be some spaces.  Most
5320 everybody prefers that lines are prepended with @samp{> }, so
5321 @code{(setq mail-yank-prefix "> ")} in your @file{.emacs} file.
5322
5323 @item mail-yank-ignored-headers
5324 @vindex mail-yank-ignored-headers
5325 When you yank a message, you do not want to quote any headers, so
5326 @code{(setq mail-yank-ignored-headers "^")}.
5327
5328 @item user-mail-address
5329 @vindex user-mail-address
5330 If all of @code{gnus-user-login-name}, @code{gnus-use-generic-from} and
5331 @code{gnus-local-domain} are @code{nil}, Gnus will use
5332 @code{user-mail-address} as the address part of the @code{From} header.
5333
5334 @item gnus-local-domain
5335 @vindex gnus-local-domain
5336 @cindex domain
5337 The local doman name excluding the host name.  If your host is called
5338 @samp{"narfi.ifi.uio.no"}, then this variable should be
5339 @samp{"ifi.uio.no"}. 
5340
5341 @item gnus-local-domain
5342 @vindex gnus-local-domain
5343 @cindex domain
5344 The local doman name excluding the host name.  If your host is called
5345 @samp{"narfi.ifi.uio.no"}, then this variable should be
5346 @samp{"ifi.uio.no"}. 
5347
5348 @item gnus-user-from-line
5349 @vindex gnus-user-from-line
5350 Your full, complete e-mail address with name.  This variable overrides
5351 the other Gnus variables if it is non-@code{nil}.
5352
5353 Here are two example values of this variable: @samp{"larsi@@ifi.uio.no
5354 (Lars Magne Ingebrigtsen)"} and @samp{"Lars Magne Ingebrigtsen
5355 <larsi@@ifi.uio.no>"}.  The latter version is recommended in news (and is
5356 probably illegal in mail), but the name has to be quoted if it contains
5357 non-alpha-numerical characters---@samp{"\"Lars M. Ingebrigtsen\"
5358 <larsi@@ifi.uio.no>"}.
5359
5360 @item mail-default-headers
5361 @vindex mail-default-headers
5362 This is a string that will be inserted into the header of all outgoing
5363 mail messages and news articles.  Convenient to use to insert standard
5364 headers.  If @code{nntp-news-default-headers} is non-@code{nil}, that
5365 variable will override this one when posting articles.
5366
5367 @item gnus-auto-mail-to-author
5368 @vindex gnus-auto-mail-to-author
5369 If @code{ask}, you will be prompted for whether you want to send a mail
5370 copy to the author of the article you are following up.  If
5371 non-@code{nil} and not @code{ask}, Gnus will send a mail with a copy of
5372 all follow-ups to the authors of the articles you follow up.  It's nice
5373 in one way---you make sure that the person you are responding to gets
5374 your response.  Other people loathe this method and will hate you dearly
5375 for it, because it means that they will first get a mail, and then have
5376 to read the same article later when they read the news.  It is
5377 @code{nil} by default.
5378
5379 @item gnus-mail-courtesy-message
5380 @vindex gnus-mail-courtesy-message
5381 This is a string that will be prepended to all mails that are the result
5382 of using the variable described above.  
5383
5384 @item gnus-mailing-list-groups
5385 @findex gnus-mailing-list-groups
5386 @cindex mailing lists
5387
5388 If your newsserver offer groups that are really mailing lists that are
5389 gatewayed to the @sc{nntp} server, you can read those groups without
5390 problems, but you can't post/followup to them without some difficulty.
5391 One solution is to add a @code{to-address} to the group parameters
5392 (@pxref{Group Parameters}).  An easier thing to do is set the
5393 @code{gnus-mailing-list-groups} to a regexp that match the groups that
5394 really are mailing lists.  Then, at least, followups to the mailing
5395 lists will work most of the time.  Posting to these groups (@kbd{a}) is
5396 still a pain, though.
5397
5398
5399 @end table
5400
5401 You may want to do spell-checking on messages that you send out.  Or, if
5402 you don't want to spell-check by hand, you could add automatic
5403 spell-checking via the @code{ispell} package:
5404
5405 @vindex news-inews-hook
5406 @lisp
5407 (add-hook 'news-inews-hook 'ispell-message)        ;For news posts
5408 (add-hook 'mail-send-hook 'ispell-message)        ;for mail posts via sendmail
5409 @end lisp
5410
5411 @findex gnus-inews-insert-mime-headers
5412 If you want to insert some @sc{mime} headers into the articles you post,
5413 without doing any actual encoding, you could add
5414 @code{gnus-inews-insert-mime-headers} to @code{gnus-inews-article-hook}.
5415
5416
5417
5418 @node Archived Messages
5419 @subsection Archived Messages
5420 @cindex archived messages
5421 @cindex sent messages
5422
5423 Gnus provides a few different methods for storing the mail you send.
5424 The default method is to use the @dfn{archive virtual server} to store
5425 the mail.
5426
5427 @vindex gnus-message-archive-method
5428 @code{gnus-message-archive-method} says what virtual server Gnus is to
5429 use to store sent messages.  It is @code{(nnfolder "archive"
5430 (nnfolder-directory "~/Mail/archive/"))} by default, but you can use any
5431 mail select method (@code{nnml}, @code{nnmbox}, etc.).  However,
5432 @code{nnfolder} is a quite likable select method for doing this sort of
5433 thing.  If you don't like the default directory chosen, you could say
5434 something like:
5435
5436 @lisp
5437 (setq gnus-message-archive-method
5438       '((nnfolder "archive" 
5439                   (nnfolder-inhibit-expiry t)
5440                   (nnfolder-active-file "~/Mail/sent-mail/active")
5441                   (nnfolder-directory "~/News/sent-mail/"))))
5442 @end lisp
5443
5444 @vindex gnus-message-archive-group
5445 Gnus will insert @code{Gcc} headers in all outgoing messages that point
5446 to one or more group(s) on that server.  Which group to use is
5447 determined by the @code{gnus-message-archive-group} variable.  
5448
5449 This variable can be:
5450
5451 @itemize @bullet
5452 @item a string
5453 Messages will be saved in that group.
5454 @item a list of strings
5455 Messages will be saved in all those groups.
5456 @item an alist of regexps, functions and forms
5457 When a key ``matches'', the result is used.
5458 @end itemize
5459
5460 Let's illustrate:
5461
5462 Just saving to a single group called @samp{"MisK"}:
5463 @lisp
5464 (setq gnus-message-archive-group "MisK")
5465 @end lisp
5466
5467 Saving to two groups, @samp{"MisK"} and @samp{"safe"}:
5468 @lisp
5469 (setq gnus-message-archive-group '("MisK" "safe"))
5470 @end lisp
5471
5472 Save to different groups based on what group you are in:
5473 @lisp
5474 (setq gnus-message-archive-group 
5475       '(("^alt" "sent-to-alt")
5476         ("mail" "sent-to-mail")
5477         (".*" "sent-to-misc")))
5478 @end lisp
5479
5480 More complex stuff:
5481 @lisp
5482 (setq gnus-message-archive-group 
5483       '((if (eq major-mode news-reply-mode) "misc-news" "misc-mail")))
5484 @end lisp       
5485
5486 This last one is the default.
5487
5488 Now, when you send a message off, it will be stored in the appropriate
5489 group.  (If you want to disable storing for just one particular article,
5490 you can just remove the @code{Gcc} header that has been inserted.)  The
5491 archive group will appear in the group buffer the next time you start
5492 Gnus, or the next time you press @kbd{F} in the group buffer.  You can
5493 enter it and read the articles in it just like you'd read any other
5494 group.  If the group gets really big and annoying, you can simply rename
5495 if (using @kbd{G r} in the group buffer) to something nice --
5496 @samp{"misc-mail-september-1995"}, or whatever.  New messages will
5497 continue to be stored in the old (now empty) group.
5498
5499
5500 That's the default method of archiving sent mail.  Gnus also offers two
5501 other variables for the people who don't like the default method.  In
5502 that case you should set @code{gnus-message-archive-group} to
5503 @code{nil}; this will disable archiving.
5504
5505 @table @code
5506 @item gnus-author-copy
5507 @vindex gnus-author-copy
5508 This is a file name, and all outgoing articles will be saved in that
5509 file.  Initialized from the @code{AUTHORCOPY} environment variable.
5510
5511 If this variable begins with the character @samp{"|"}, outgoing articles
5512 will be piped to the named program. It is possible to save an article in
5513 an MH folder as follows:
5514
5515 @lisp
5516 (setq gnus-author-copy 
5517       "|/usr/local/lib/mh/rcvstore +Article")
5518 @end lisp
5519
5520 If the first character is not a pipe, articles are saved using the
5521 function specified by the @code{gnus-author-copy-saver} variable.
5522
5523 @item gnus-author-copy-saver
5524 @vindex gnus-author-copy-saver
5525 A function called to save outgoing articles.  This function will be
5526 called with the same of the file to store the article in. The default
5527 function is @code{rmail-output} which saves in the Unix mailbox format.
5528
5529 @item gnus-mail-self-blind 
5530 @vindex gnus-mail-self-blind 
5531 Non-@code{nil} means insert a BCC header in all outgoing articles
5532 pointing to yourself.  This will result you receiving a copy of the
5533 article mailed to yourself.  The BCC header is inserted when the post
5534 buffer is initialized, so you can remove or alter the BCC header to
5535 override the default.
5536
5537 @item gnus-outgoing-message-group 
5538 @vindex gnus-outgoing-message-group 
5539 All outgoing messages will be put in this group.  If you want to store
5540 all your outgoing mail and articles in the group @samp{nnml:archive},
5541 you set this variable to that value.  This variable can also be a list of
5542 group names.
5543
5544 If you want to have greater control over what group to put each
5545 message in, you can set this variable to a function that checks the
5546 current newsgroup name and then returns a suitable group name (or list
5547 of names).
5548 @end table
5549
5550
5551 @node Posting Styles
5552 @subsection Posting Styles
5553 @cindex posting styles
5554 @cindex styles
5555
5556 All them variables, they make my head swim.  
5557
5558 So what if you want a different @code{Organization} and signature based
5559 on what groups you post to?  And you post both from your home machine
5560 and your work machine, and you want different @code{From} lines, and so
5561 on? 
5562
5563 @vindex gnus-posting-styles
5564 One way to do stuff like that is to write clever hooks that change the
5565 variables you need to have changed.  That's a bit boring, so somebody
5566 came up with the bright idea of letting the user specify these things in
5567 a handy alist.  Here's an example of a @code{gnus-posting-styles}
5568 variable: 
5569
5570 @lisp
5571 ((".*" (signature . "Peace and happiness") (organization . "What me?"))
5572  ("^comp" (signature . "Death to everybody"))
5573  ("comp.emacs.i-love-it" (organization . "Emacs is it")))
5574 @end lisp
5575
5576 As you might surmise from this example, this alist consists of several
5577 @dfn{styles}.  Each style will be applicable if the first element
5578 ``matches'', in some form or other.  The entire alist will be iterated
5579 over, from the beginning towards the end, and each match will be
5580 applied, which means that attributes in later styles that match override
5581 the same attributes in earlier matching styles.  So
5582 @samp{comp.programming.literate} will have the @samp{Death to everybody}
5583 signature and the @samp{What me?} @code{Organization} header. 
5584
5585 The first element in each style is called the @code{match}.  If it's a
5586 string, then Gnus will try to regexp match it against the group name.
5587 If it's a function symbol, that function will be called with no
5588 arguments.  If it's a variable symbol, then the variable will be
5589 referenced.  If it's a list, then that list will be @code{eval}ed.  In
5590 any case, if this returns a non-@code{nil} value, then the style is said
5591 to @dfn{match}.
5592
5593 Each style may contain a random amount of @dfn{attributes}.  Each
5594 attribute consists of a @var{(name  . value)} pair.  The attribute name
5595 can be one of @code{signature}, @code{organization} or @code{from}.  
5596 The attribute name can also be a string.  In that case, this will be
5597 used as a header name, and the value will be inserted in the headers of
5598 the article. 
5599
5600 The attribute value can be a string (used verbatim), a function (the
5601 return value will be used), a variable (its value will be used) or a
5602 list (it will be @code{eval}ed and the return value will be used).
5603
5604 So here's a new example:
5605
5606 @lisp
5607 (setq gnus-posting-styles
5608       '((".*" 
5609            (signature . "~/.signature") 
5610            (from . "user@@foo (user)")
5611            ("X-Home-Page" . (getenv "WWW_HOME"))
5612            (organization . "People's Front Against MWM"))
5613         ("^rec.humor" 
5614            (signature . my-funny-signature-randomizer))
5615         ((equal (system-name) "gnarly") 
5616            (signature . my-quote-randomizer))
5617         (posting-from-work-p
5618            (signature . "~/.work-signature")
5619            (from . "user@@bar.foo (user)")
5620            (organization . "Important Work, Inc"))
5621         ("^nn.+:" 
5622            (signature . "~/.mail-signature"))))
5623 @end lisp
5624
5625
5626
5627 @node Drafts
5628 @subsection Drafts
5629 @cindex drafts
5630
5631 If you are writing a message (mail or news) and suddenly remember that
5632 you have a steak in the oven (or some pesto in the food processor, you
5633 craazy vegetarians), you'll probably wish there was a method to save the
5634 message you are writing so that you can continue editing it some other
5635 day, and send it when you feel its finished.
5636
5637 Well, don't worry about it.  Whenever you start composing a message of
5638 some sort using the Gnus mail and post commands, the buffer you get will
5639 automatically associate to an article in a special @dfn{draft} group.
5640 If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
5641 article will be saved there.  (Auto-save files also go to the draft
5642 group.) 
5643
5644 The draft group is a special group (which is implemented as an
5645 @code{nndraft} group, if you absolutely have to know) called
5646 @samp{nndraft:drafts}.  The variable @code{gnus-draft-group-directory}
5647 controls both the name of the group and the location---the leaf element
5648 in the path will be used as the name of the group.  What makes this
5649 group special is that you can't tick any articles in it or mark any
5650 articles as read---all articles in the group are permanently unread.
5651
5652 If the group doesn't exist, it will be created and you'll be subscribed
5653 to it.
5654
5655 @findex gnus-dissociate-buffer-from-draft
5656 @kindex C-c M-d (Mail)
5657 @kindex C-c M-d (Post)
5658 @findex gnus-associate-buffer-with-draft
5659 @kindex C-c C-d (Mail)
5660 @kindex C-c C-d (Post)
5661 If you're writing some super-secret message that you later want to
5662 encode with PGP before sending, you may wish to turn the auto-saving
5663 (and association with the draft group) off.  You never know who might be
5664 interested in reading all your extremely valuable and terribly horrible
5665 and interesting secrets.  The @kbd{C-c M-d}
5666 (@code{gnus-dissociate-buffer-from-draft}) command does that for you.
5667 If you change your mind and want to turn the auto-saving back on again,
5668 @kbd{C-c C-d} (@code{gnus-associate-buffer-with-draft} does that.
5669
5670 @vindex gnus-use-draft
5671 To leave association with the draft group off by default, set
5672 @code{gnus-use-draft} to @code{nil}.  It is @code{t} by default. 
5673
5674 @findex gnus-summary-send-draft
5675 @kindex S D c (Summary)
5676 When you want to continue editing the article, you simply enter the
5677 draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do
5678 that.  You will be placed in a buffer where you left off.
5679
5680 Rejected articles will also be put in this draft group (@pxref{Rejected
5681 Articles}).
5682
5683 @findex gnus-summary-send-all-drafts
5684 If you have lots of rejected messages you want to post (or mail) without
5685 doing further editing, you can use the @kbd{S D a} command
5686 (@code{gnus-summary-send-all-drafts}).  This command understands the
5687 process/prefix convention (@pxref{Process/Prefix}).  
5688
5689
5690 @node Rejected Articles
5691 @subsection Rejected Articles
5692 @cindex rejected articles
5693
5694 Sometimes a news server will reject an article.  Perhaps the server
5695 doesn't like your face.  Perhaps it just feels miserable.  Perhaps
5696 @emph{there be demons}.  Perhaps you have included too much cited text.
5697 Perhaps the disk is full.  Perhaps the server is down.
5698
5699 These situations are, of course, totally beyond the control of Gnus.
5700 (Gnus, of course, loves the way you look, always feels great, has angels
5701 fluttering around inside of it, doesn't care about how much cited text
5702 you include, never runs full and never goes down.)  So Gnus saves these
5703 articles until some later time when the server feels better.
5704
5705 The rejected articles will automatically be put in a special draft group
5706 (@pxref{Drafts}).  When the server comes back up again, you'd then
5707 typically enter that group and send all the articles off.
5708
5709
5710 @node Canceling and Superseding
5711 @section Canceling Articles
5712 @cindex canceling articles
5713 @cindex superseding articles
5714
5715 Have you ever written something, and then decided that you really,
5716 really, really wish you hadn't posted that?
5717
5718 Well, you can't cancel mail, but you can cancel posts.
5719
5720 @findex gnus-summary-cancel-article
5721 @kindex C (Summary)
5722 Find the article you wish to cancel (you can only cancel your own
5723 articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
5724 c} (@code{gnus-summary-cancel-article}).  Your article will be
5725 canceled---machines all over the world will be deleting your article. 
5726
5727 Be aware, however, that not all sites honor cancels, so your article may
5728 live on here and there, while most sites will delete the article in
5729 question.
5730
5731 If you discover that you have made some mistakes and want to do some
5732 corrections, you can post a @dfn{superseding} article that will replace
5733 your original article.
5734
5735 @findex gnus-summary-supersede-article
5736 @kindex S (Summary)
5737 Go to the original article and press @kbd{S s}
5738 (@code{gnus-summary-supersede-article}).  You will be put in a buffer
5739 where you can edit the article all you want before sending it off the
5740 usual way.
5741
5742 @vindex gnus-delete-supersedes-headers
5743 You probably want to delete some of the old headers before sending the
5744 superseding article---@code{Path} and @code{Date} are probably
5745 incorrect.  Set @code{gnus-delete-supersedes-headers} to a regexp to
5746 match the lines you want removed.  The default is
5747 @samp{"^Path:\\|^Date"}. 
5748
5749 The same goes for superseding as for canceling, only more so: Some
5750 sites do not honor superseding.  On those sites, it will appear that you
5751 have posted almost the same article twice.
5752
5753 If you have just posted the article, and change your mind right away,
5754 there is a trick you can use to cancel/supersede the article without
5755 waiting for the article to appear on your site first.  You simply return
5756 to the post buffer (which is called @code{*post-buf*}).  There you will
5757 find the article you just posted, with all the headers intact.  Change
5758 the @samp{Message-ID} header to a @samp{Cancel} or @samp{Supersedes}
5759 header by substituting one of those words for @samp{Message-ID}.  Then
5760 just press @kbd{C-c C-c} to send the article as you would do normally.
5761 The previous article will be canceled/superseded.
5762
5763 Just remember, kids: There is no 'c' in 'supersede'.
5764
5765 @node Marking Articles
5766 @section Marking Articles
5767 @cindex article marking
5768 @cindex article ticking
5769 @cindex marks
5770
5771 There are several marks you can set on an article. 
5772
5773 You have marks that decide the @dfn{readed-ness} (whoo, neato-keano
5774 neologism ohoy!) of the article.  Alphabetic marks generally mean
5775 @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
5776
5777 In addition, you also have marks that do not affect readedness.
5778
5779 @menu
5780 * Unread Articles::      Marks for unread articles.
5781 * Read Articles::        Marks for read articles.
5782 * Other Marks::          Marks that do not affect readedness.
5783 @end menu
5784
5785 @ifinfo
5786 There's a plethora of commands for manipulating these marks:
5787 @end ifinfo
5788
5789 @menu
5790 * Setting Marks::           How to set and remove marks.
5791 * Setting Process Marks::   How to mark articles for later processing.
5792 @end menu
5793
5794 @node Unread Articles
5795 @subsection Unread Articles
5796
5797 The following marks mark articles as unread, in one form or other.
5798
5799 @vindex gnus-dormant-mark
5800 @vindex gnus-ticked-mark
5801 @table @samp
5802 @item !
5803 @dfn{Ticked articles} are articles that will remain visible always.  If
5804 you see an article that you find interesting, or you want to put off
5805 reading it, or replying to it, until sometime later, you'd typically
5806 tick it.  However, articles can be expired, so if you want to keep an
5807 article forever, you'll have to save it.  Ticked articles have a
5808 @samp{!} (@code{gnus-ticked-mark}) in the first column.
5809
5810 @item ?
5811 A @dfn{dormant} article is marked with a @samp{?}
5812 (@code{gnus-dormant-mark}), and will only appear in the summary buffer
5813 if there are followups to it.
5814
5815 @item SPC
5816 An @dfn{unread} article is marked with a @samp{SPC}
5817 (@code{gnus-unread-mark}).  These are articles that haven't been read at
5818 all yet.
5819 @end table
5820
5821 @node Read Articles
5822 @subsection Read Articles
5823 @cindex expirable mark
5824
5825 All the following marks mark articles as read.
5826
5827 @table @samp
5828
5829 @item r
5830 Articles that are marked as read.  They have a @samp{r}
5831 (@code{gnus-del-mark}) in the first column.  These are articles that the
5832 user has marked as read more or less manually.
5833
5834 @item R
5835 Articles that are actually read are marked with @samp{R}
5836 (@code{gnus-read-mark}). 
5837
5838 @item O
5839 Articles that were marked as read in previous sessions are now
5840 @dfn{old} and marked with @samp{O} (@code{gnus-ancient-mark}). 
5841
5842 @item K
5843 Marked as killed (@code{gnus-killed-mark}).
5844
5845 @item X
5846 Marked as killed by kill files (@code{gnus-kill-file-mark}).
5847
5848 @item Y
5849 Marked as read by having a too low score (@code{gnus-low-score-mark}).
5850
5851 @item C
5852 Marked as read by a catchup (@code{gnus-catchup-mark}).
5853
5854 @item G
5855 Canceled article (@code{gnus-cancelled-mark})
5856 @end table
5857
5858 All these marks just mean that the article is marked as read, really.
5859 They are interpreted differently by the adaptive scoring scheme,
5860 however.
5861
5862 One more special mark, though:
5863
5864 @table @samp
5865 @item E
5866 You can also mark articles as @dfn{expirable} (or have them marked as
5867 such automatically).  That doesn't make much sense in normal groups,
5868 because a user does not control the expiring of news articles, but in
5869 mail groups, for instance, articles that are marked as @dfn{expirable}
5870 can be deleted by Gnus at any time.  Expirable articles are marked with
5871 @samp{E} (@code{gnus-expirable-mark}).
5872 @end table
5873
5874 @node Other Marks
5875 @subsection Other Marks
5876 @cindex process mark
5877 @cindex bookmarks
5878
5879 There are some marks that have nothing to do with whether the article is
5880 read or not.
5881
5882 @itemize @bullet
5883
5884 @item 
5885 You can set a bookmark in the current article.  Say you are reading a
5886 long thesis on cats' urinary tracts, and have to go home for dinner
5887 before you've finished reading the thesis.  You can then set a bookmark
5888 in the article, and Gnus will jump to this bookmark the next time it
5889 encounters the article.
5890
5891 @item
5892 All articles that you have replied to or made a followup to (i.e., have
5893 answered) will be marked with an @samp{A} in the second column
5894 (@code{gnus-replied-mark}).
5895
5896 @item 
5897 Articles that are stored in the article cache will be marked with an
5898 @samp{*} in the second column (@code{gnus-cached-mark}).
5899
5900 @item 
5901 Articles that are ``saved'' (in some manner or other; not necessarily
5902 religously) are marked with an @samp{S} in the second column
5903 (@code{gnus-saved-mark}.  
5904
5905 @item 
5906 @vindex gnus-not-empty-thread-mark
5907 @vindex gnus-empty-thread-mark
5908 It the @samp{%e} spec is used, the presence of threads or not will be
5909 marked with @code{gnus-not-empty-thread-mark} and
5910 @code{gnus-empty-thread-mark} in the third column, respectively.
5911
5912 @item 
5913 @vindex gnus-process-mark
5914 Finally we have the @dfn{process mark} (@code{gnus-process-mark}.  A
5915 variety of commands react to the presence of the process mark.  For
5916 instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
5917 all articles that have been marked with the process mark.  Articles
5918 marked with the process mark have a @samp{#} in the second column.
5919
5920 @end itemize
5921
5922 You might have noticed that most of these ``non-readedness'' marks appear
5923 in the second column by default.  So if you have a cached, saved,
5924 replied article that you have process-marked, what will that look like?
5925
5926 Nothing much.  The presedence rules go as follows: process -> cache ->
5927 replied -> saved.  So if the article is in the cache and is replied,
5928 you'll only see the cache mark and not the replied mark.
5929
5930
5931 @node Setting Marks
5932 @subsection Setting Marks
5933 @cindex setting marks
5934
5935 All the marking commands understand the numeric prefix.
5936
5937 @table @kbd
5938 @item M t
5939 @itemx !
5940 @kindex ! (Summary)
5941 @kindex M t (Summary)
5942 @findex gnus-summary-tick-article-forward
5943 Tick the current article (@code{gnus-summary-tick-article-forward}).
5944
5945 @item M ?
5946 @itemx ?
5947 @kindex ? (Summary)
5948 @kindex M ? (Summary)
5949 @findex gnus-summary-mark-as-dormant
5950 Mark the current article as dormant
5951 (@code{gnus-summary-mark-as-dormant}).
5952
5953 @item M d
5954 @itemx d
5955 @kindex M d (Summary)
5956 @kindex d (Summary)
5957 @findex gnus-summary-mark-as-read-forward
5958 Mark the current article as read
5959 (@code{gnus-summary-mark-as-read-forward}).
5960
5961 @item M k
5962 @itemx k
5963 @kindex k (Summary)
5964 @kindex M k (Summary)
5965 @findex gnus-summary-kill-same-subject-and-select
5966 Mark all articles that have the same subject as the current one as read,
5967 and then select the next unread article
5968 (@code{gnus-summary-kill-same-subject-and-select}).
5969
5970 @item M K
5971 @itemx C-k
5972 @kindex M K (Summary)
5973 @kindex C-k (Summary)
5974 @findex gnus-summary-kill-same-subject
5975 Mark all articles that have the same subject as the current one as read
5976 (@code{gnus-summary-kill-same-subject}).  
5977
5978 @item M C
5979 @kindex M C (Summary)
5980 @findex gnus-summary-catchup
5981 Mark all unread articles in the group as read
5982 (@code{gnus-summary-catchup}).
5983
5984 @item M C-c
5985 @kindex M C-c (Summary)
5986 @findex gnus-summary-catchup-all
5987 Mark all articles in the group as read---even the ticked and dormant
5988 articles (@code{gnus-summary-catchup-all}).
5989
5990 @item M H
5991 @kindex M H (Summary)
5992 @findex gnus-summary-catchup-to-here
5993 Catchup the current group to point
5994 (@code{gnus-summary-catchup-to-here}). 
5995
5996 @item C-w
5997 @kindex C-w (Summary)
5998 @findex gnus-summary-mark-region-as-read
5999 Mark all articles between point and mark as read
6000 (@code{gnus-summary-mark-region-as-read}). 
6001
6002 @item M V k
6003 @kindex M V k (Summary)
6004 @findex gnus-summary-kill-below
6005 Kill all articles with scores below the default score (or below the
6006 numeric prefix) (@code{gnus-summary-kill-below}).
6007
6008 @item M c
6009 @itemx M-u
6010 @kindex M c (Summary)
6011 @kindex M-u (Summary)
6012 @findex gnus-summary-clear-mark-forward
6013 Clear all readedness-marks from the current article
6014 (@code{gnus-summary-clear-mark-forward}).
6015
6016 @item M e
6017 @itemx E
6018 @kindex M e (Summary)
6019 @kindex E (Summary)
6020 @findex gnus-summary-mark-as-expirable
6021 Mark the current article as expirable
6022 (@code{gnus-summary-mark-as-expirable}).
6023
6024 @item M b
6025 @kindex M b (Summary)
6026 @findex gnus-summary-set-bookmark
6027 Set a bookmark in the current article
6028 (@code{gnus-summary-set-bookmark}).
6029
6030 @item M B
6031 @kindex M B (Summary)
6032 @findex gnus-summary-remove-bookmark
6033 Remove the bookmark from the current article
6034 (@code{gnus-summary-remove-bookmark}).
6035
6036 @item M V c
6037 @kindex M V c (Summary)
6038 @findex gnus-summary-clear-above
6039 Clear all marks from articles with scores over the default score (or
6040 over the numeric prefix) (@code{gnus-summary-clear-above}).
6041
6042 @item M V u
6043 @kindex M V u (Summary)
6044 @findex gnus-summary-tick-above
6045 Tick all articles with scores over the default score (or over the
6046 numeric prefix) (@code{gnus-summary-tick-above}).
6047
6048 @item M V m
6049 @kindex M V m (Summary)
6050 @findex gnus-summary-mark-above
6051 Prompt for a mark, and mark all articles with scores over the default
6052 score (or over the numeric prefix) with this mark
6053 (@code{gnus-summary-clear-above}).
6054 @end table
6055
6056 @code{gnus-summary-goto-unread} The @code{gnus-summary-goto-unread}
6057 variable controls what action should be taken after setting a mark.  If
6058 non-@code{nil}, point will move to the next/previous unread article.  If
6059 @code{nil}, point will just move one line up or down.  As a special
6060 case, if this variable is @code{never}, all the marking commands as well
6061 as other commands (like @kbd{SPC}) will move to the next article,
6062 whether it is unread or not.  The default is @code{t}.
6063
6064
6065 @node Setting Process Marks
6066 @subsection Setting Process Marks
6067 @cindex setting process marks
6068
6069 @table @kbd
6070
6071 @item M P p
6072 @itemx #
6073 @kindex # (Summary)
6074 @kindex M P p (Summary)
6075 @findex gnus-summary-mark-as-processable
6076 Mark the current article with the process mark
6077 (@code{gnus-summary-mark-as-processable}). 
6078 @findex gnus-summary-unmark-as-processable
6079
6080 @item M P u 
6081 @itemx M-#
6082 @kindex M P u (Summary)
6083 @kindex M-# (Summary)
6084 Remove the process mark, if any, from the current article
6085 (@code{gnus-summary-unmark-as-processable}).
6086
6087 @item M P U
6088 @kindex M P U (Summary)
6089 @findex gnus-summary-unmark-all-processable
6090 Remove the process mark from all articles
6091 (@code{gnus-summary-unmark-all-processable}). 
6092
6093 @item M P R
6094 @kindex M P R (Summary)
6095 @findex gnus-uu-mark-by-regexp
6096 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}). 
6097
6098 @item M P r
6099 @kindex M P r (Summary)
6100 @findex gnus-uu-mark-region
6101 Mark articles in region (@code{gnus-uu-mark-region}).
6102
6103 @item M P t
6104 @kindex M P t (Summary)
6105 @findex gnus-uu-mark-thread
6106 Mark all articles in the current (sub)thread
6107 (@code{gnus-uu-mark-thread}).
6108
6109 @item M P T
6110 @kindex M P T (Summary)
6111 @findex gnus-uu-unmark-thread
6112 Unmark all articles in the current (sub)thread
6113 (@code{gnus-uu-unmark-thread}).
6114
6115 @item M P v
6116 @kindex M P v (Summary)
6117 @findex gnus-uu-mark-over
6118 Mark all articles that have a score above the prefix argumnet
6119 (@code{gnus-uu-mark-over}).
6120
6121 @item M P s
6122 @kindex M P s (Summary)
6123 @findex gnus-uu-mark-series
6124 Mark all articles in the current series (@code{gnus-uu-mark-series}).
6125
6126 @item M P S
6127 @kindex M P S (Summary)
6128 @findex gnus-uu-mark-sparse
6129 Mark all series that have already had some articles marked
6130 (@code{gnus-uu-mark-sparse}).
6131
6132 @item M P a
6133 @kindex M P a (Summary)
6134 @findex gnus-uu-mark-all
6135 Mark all articles in series order (@code{gnus-uu-mark-series}).
6136
6137 @item M P b
6138 @kindex M P b (Summary)
6139 @findex gnus-uu-mark-buffer
6140 Mark all articles in the buffer in the order they appear
6141 (@code{gnus-uu-mark-buffer}). 
6142 @end table
6143
6144
6145 @node Limiting
6146 @section Limiting
6147 @cindex limiting
6148
6149 It can be convenient to limit the summary buffer to just show some
6150 subset of the articles currently in the group.  The effect most limit
6151 commands have is to remove a few (or many) articles from the summary
6152 buffer. 
6153
6154 @table @kbd
6155
6156 @item / /
6157 @itemx / s
6158 @kindex / / (Summary)
6159 @findex gnus-summary-limit-to-subject
6160 Limit the summary buffer to articles that match some subject
6161 (@code{gnus-summary-limit-to-subject}). 
6162
6163 @item / a
6164 @kindex / a (Summary)
6165 @findex gnus-summary-limit-to-author
6166 Limit the summary buffer to articles that match some author
6167 (@code{gnus-summary-limit-to-author}).
6168
6169 @item / u
6170 @itemx x
6171 @kindex / u (Summary)
6172 @kindex x (Summary)
6173 @findex gnus-summary-limit-to-unread
6174 Limit the summary buffer to articles that are not marked as read
6175 (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
6176 buffer to articles that are strictly unread.  This means that ticked and
6177 dormant articles will also be excluded.
6178
6179 @item / m
6180 @kindex / m (Summary)
6181 @findex gnus-summary-limit-to-marks
6182 Ask for a mark and then limit to all articles that have not been marked
6183 with that mark (@code{gnus-summary-limit-to-marks}).
6184
6185 @item / n
6186 @kindex / n (Summary)
6187 @findex gnus-summary-limit-to-articles
6188 Limit the summary buffer to the current article
6189 (@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
6190 convention (@pxref{Process/Prefix}).
6191
6192 @item / w
6193 @kindex / w (Summary)
6194 @findex gnus-summary-pop-limit
6195 Pop the previous limit off the stack and restore it
6196 (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
6197 the stack.
6198
6199 @item / v
6200 @kindex / v (Summary)
6201 @findex gnus-summary-limit-to-score
6202 Limit the summary buffer to articles that have a score at or above some
6203 score (@code{gnus-summary-limit-to-score}).
6204
6205 @item / E
6206 @itemx M S
6207 @kindex M S (Summary)
6208 @kindex / E (Summary)
6209 @findex gnus-summary-limit-include-expunged
6210 Display all expunged articles
6211 (@code{gnus-summary-limit-include-expunged}). 
6212
6213 @item / D
6214 @kindex / D (Summary)
6215 @findex gnus-summary-limit-include-dormant
6216 Display all dormant articles (@code{gnus-summary-limit-include-dormant}).
6217
6218 @item / d
6219 @kindex / d (Summary)
6220 @findex gnus-summary-limit-exclude-dormant
6221 Hide all dormant articles (@code{gnus-summary-limit-exclude-dormant}).
6222
6223 @item / c
6224 @kindex / c (Summary)
6225 @findex gnus-summary-limit-exclude-childless-dormant
6226 Hide all dormant articles that have no children
6227 (@code{gnus-summary-limit-exclude-childless-dormant}). 
6228
6229 @item / C
6230 @kindex / C (Summary)
6231 @findex gnus-summary-limit-mark-excluded-as-read
6232 Mark all excluded unread articles as read
6233 (@code{gnus-summary-limit-mark-excluded-as-read}).   If given a prefix,
6234 also mark exluded ticked and dormant articles as read.
6235
6236 @end table
6237
6238
6239 @node Threading
6240 @section Threading
6241 @cindex threading
6242 @cindex article threading
6243
6244 Gnus threads articles by default.  @dfn{To thread} is to put replies to
6245 articles directly after the articles they reply to---in a hierarchical
6246 fashion.
6247
6248 @menu
6249 * Customizing Threading::     Variables you can change to affect the threading.
6250 * Thread Commands::           Thread based commands in the summary buffer.
6251 @end menu
6252
6253 @node Customizing Threading
6254 @subsection Customizing Threading
6255 @cindex customizing threading
6256 @cindex <
6257 @cindex >
6258
6259 @table @code
6260
6261 @item gnus-show-threads
6262 @vindex gnus-show-threads
6263 If this variable is @code{nil}, no threading will be done, and all of
6264 the rest of the variables here will have no effect.  Turning threading
6265 off will speed group selection up a bit, but it is sure to make reading
6266 slower and more awkward.
6267
6268 @item gnus-fetch-old-headers
6269 @vindex gnus-fetch-old-headers
6270 If non-@code{nil}, Gnus will attempt to build old threads by fetching
6271 more old headers---headers to articles that are marked as read.  If you
6272 would like to display as few summary lines as possible, but still
6273 connect as many loose threads as possible, you should set this variable
6274 to @code{some} or a number.  If you set it to a number, no more than
6275 that number of extra old headers will be fetched.  In either case,
6276 fetching old headers only works if the backend you are using carries
6277 overview files---this would normally be @code{nntp}, @code{nnspool} and
6278 @code{nnml}.  Also remember that if the root of the thread has been
6279 expired by the server, there's not much Gnus can do about that.
6280
6281 @item gnus-build-sparse-threads
6282 @vindex gnus-build-sparse-threads
6283 Fetching old headers can be slow.  A low-rent similar effect can be
6284 gotten by setting this variable to @code{some}.  Gnus will then look at
6285 the complete @code{References} headers of all articles and try to string
6286 articles that belong in the same thread together.  This will leave
6287 @dfn{gaps} in the threading display where Gnus guesses that an article
6288 is missing from the thread.  (These gaps appear like normal summary
6289 lines.  If you select a gap, Gnus will try to fetch the article in
6290 question.)  If this variable is @code{t}, Gnus will display all these
6291 ``gaps'' without regard for whether they are useful for completing the
6292 thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
6293 off sparse leaf nodes that don't lead anywhere.  This variable is
6294 @code{nil} by default.
6295
6296 @item gnus-summary-gather-subject-limit
6297 @vindex gnus-summary-gather-subject-limit
6298 Loose threads are gathered by comparing subjects of articles.  If this
6299 variable is @code{nil}, Gnus requires an exact match between the
6300 subjects of the loose threads before gathering them into one big
6301 super-thread.  This might be too strict a requirement, what with the
6302 presence of stupid newsreaders that chop off long subjects lines.  If
6303 you think so, set this variable to, say, 20 to require that only the
6304 first 20 characters of the subjects have to match.  If you set this
6305 variable to a really low number, you'll find that Gnus will gather
6306 everything in sight into one thread, which isn't very helpful.
6307
6308 @cindex fuzzy article gathering
6309 If you set this variable to the special value @code{fuzzy}, Gnus will
6310 use a fuzzy string comparison algorithm on the subjects.
6311
6312 @item gnus-simplify-ignored-prefixes
6313 @vindex gnus-simplify-ignored-prefixes
6314 If you set @code{gnus-summary-gather-subject-limit} to something as low
6315 as 10, you might consider setting this variable to something sensible:
6316
6317 @c Written by Michael Ernst <mernst@cs.rice.edu>
6318 @lisp
6319 (setq gnus-simplify-ignored-prefixes
6320       (concat 
6321        "\\`\\[?\\("
6322        (mapconcat 'identity
6323                   '("looking"
6324                      "wanted" "followup" "summary\\( of\\)?"
6325                      "help" "query" "problem" "question" 
6326                      "answer" "reference" "announce"
6327                      "How can I" "How to" "Comparison of"
6328                      ;; ...
6329                      )
6330                   "\\|")
6331                   "\\)\\s *\\("
6332                   (mapconcat 'identity
6333                              '("for" "for reference" "with" "about")
6334                              "\\|")
6335                   "\\)?\\]?:?[ \t]*"))
6336 @end lisp
6337
6338 @item gnus-summary-gather-exclude-subject
6339 @vindex gnus-summary-gather-exclude-subject
6340 Since loose thread gathering is done on subjects only, that might lead
6341 to many false hits, especially with certain common subjects like
6342 @samp{""} and @samp{"(none)"}.  To make the situation slightly better,
6343 you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
6344 what subjects should be excluded from the gathering process.  The
6345 default is @samp{"^ *$\\|^(none)$"}.  
6346
6347 @item gnus-summary-thread-gathering-function
6348 @vindex gnus-summary-thread-gathering-function
6349 Gnus gathers threads by looking at @code{Subject} headers.  This means
6350 that totally unrelated articles may end up in the same ``thread'', which
6351 is confusing.  An alternate approach is to look at all the
6352 @code{Message-ID}s in all the @code{References} headers to find
6353 matches.  This will ensure that no gathered threads ever includes
6354 unrelated articles, but it's also means that people who have posted with
6355 broken newsreaders won't be gathered properly.  The choice is
6356 yours---plague or cholera:
6357
6358 @table @code
6359 @item gnus-summary-gather-threads-by-subject
6360 @findex gnus-summary-gather-threads-by-subject
6361 This function is the default gathering function and looks at
6362 @code{Subject}s exclusively.
6363
6364 @item gnus-summary-gather-threads-by-references
6365 @findex gnus-summary-gather-threads-by-references
6366 This function looks at @code{References} headers exclusively.
6367 @end table
6368
6369 If you want to test gathering by @code{References}, you could say
6370 something like:
6371
6372 @lisp
6373 (setq gnus-summary-thread-gathering-function
6374       'gnus-summary-gather-threads-by-references)
6375 @end lisp
6376
6377 @item gnus-summary-make-false-root
6378 @vindex gnus-summary-make-false-root
6379 If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
6380 and create a dummy root at the top.  (Wait a minute.  Root at the top?
6381 Yup.)  Loose subtrees occur when the real root has expired, or you've
6382 read or killed the root in a previous session.
6383
6384 When there is no real root of a thread, Gnus will have to fudge
6385 something.  This variable says what fudging method Gnus should use.
6386 There are four possible values:
6387
6388 @cindex adopting articles
6389
6390 @table @code
6391
6392 @item adopt
6393 Gnus will make the first of the orphaned articles the parent.  This
6394 parent will adopt all the other articles.  The adopted articles will be
6395 marked as such by pointy brackets (@samp{<>}) instead of the standard
6396 square brackets (@samp{[]}).  This is the default method.
6397
6398 @item dummy
6399 Gnus will create a dummy summary line that will pretend to be the
6400 parent.  This dummy line does not correspond to any real article, so
6401 selecting it will just select the first real article after the dummy
6402 article.
6403
6404 @item empty
6405 Gnus won't actually make any article the parent, but simply leave the
6406 subject field of all orphans except the first empty.  (Actually, it will
6407 use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
6408 Buffer Format}).)
6409
6410 @item none
6411 Don't make any article parent at all.  Just gather the threads and
6412 display them after one another.
6413
6414 @item nil
6415 Don't gather loose threads.
6416 @end table
6417
6418 @item gnus-thread-hide-subtree
6419 @vindex gnus-thread-hide-subtree
6420 If non-@code{nil}, all threads will be hidden when the summary buffer is
6421 generated.
6422
6423 @item gnus-thread-hide-killed
6424 @vindex gnus-thread-hide-killed
6425 if you kill a thread and this variable is non-@code{nil}, the subtree
6426 will be hidden.
6427
6428 @item gnus-thread-ignore-subject
6429 @vindex gnus-thread-ignore-subject
6430 Sometimes somebody changes the subject in the middle of a thread.  If
6431 this variable is non-@code{nil}, the subject change is ignored.  If it
6432 is @code{nil}, which is the default, a change in the subject will result
6433 in a new thread.
6434
6435 @item gnus-thread-indent-level
6436 @vindex gnus-thread-indent-level
6437 This is a number that says how much each sub-thread should be indented.
6438 The default is @samp{4}.
6439 @end table
6440
6441 @node Thread Commands
6442 @subsection Thread Commands
6443 @cindex thread commands
6444
6445 @table @kbd
6446
6447 @item T k
6448 @itemx M-C-k
6449 @kindex T k (Summary)
6450 @kindex M-C-k (Summary)
6451 @findex gnus-summary-kill-thread
6452 Mark all articles in the current sub-thread as read
6453 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
6454 remove all marks instead.  If the prefix argument is negative, tick
6455 articles instead.
6456
6457 @item T l
6458 @itemx M-C-l
6459 @kindex T l (Summary)
6460 @kindex M-C-l (Summary)
6461 @findex gnus-summary-lower-thread
6462 Lower the score of the current thread
6463 (@code{gnus-summary-lower-thread}). 
6464
6465 @item T i
6466 @kindex T i (Summary)
6467 @findex gnus-summary-raise-thread
6468 Increase the score of the current thread
6469 (@code{gnus-summary-raise-thread}).
6470
6471 @item T #
6472 @kindex T # (Summary)
6473 @findex gnus-uu-mark-thread
6474 Set the process mark on the current thread
6475 (@code{gnus-uu-mark-thread}).
6476
6477 @item T M-#
6478 @kindex T M-# (Summary)
6479 @findex gnus-uu-unmark-thread
6480 Remove the process mark from the current thread
6481 (@code{gnus-uu-unmark-thread}).
6482
6483 @item T T
6484 @kindex T T (Summary)
6485 @findex gnus-summary-toggle-threads
6486 Toggle threading (@code{gnus-summary-toggle-threads}).
6487
6488 @item T s
6489 @kindex T s (Summary)
6490 @findex gnus-summary-show-thread
6491 Expose the thread hidden under the current article, if any
6492 (@code{gnus-summary-show-thread}).
6493
6494 @item T h
6495 @kindex T h (Summary)
6496 @findex gnus-summary-hide-thread
6497 Hide the current (sub)thread (@code{gnus-summary-hide-thread}).
6498
6499 @item T S
6500 @kindex T S (Summary)
6501 @findex gnus-summary-show-all-threads
6502 Expose all hidden threads (@code{gnus-summary-show-all-threads}).
6503
6504 @item T H
6505 @kindex T H (Summary)
6506 @findex gnus-summary-hide-all-threads
6507 Hide all threads (@code{gnus-summary-hide-all-threads}).
6508
6509 @item T t
6510 @kindex T t (Summary)
6511 @findex gnus-summary-rethread-current
6512 Re-thread the thread the current article is part of
6513 (@code{gnus-summary-rethread-current}).  This works even when the
6514 summary buffer is otherwise unthreaded.
6515
6516 @item T ^
6517 @kindex T ^ (Summary)
6518 @findex gnus-summary-reparent-thread
6519 Make the current article the child of the marked (or previous) article
6520 (@code{gnus-summary-reparent-thread}.
6521
6522 @end table
6523
6524 The following commands are thread movement commands.  They all
6525 understand the numeric prefix.
6526
6527 @table @kbd
6528
6529 @item T n
6530 @kindex T n (Summary)
6531 @findex gnus-summary-next-thread
6532 Go to the next thread (@code{gnus-summary-next-thread}).
6533
6534 @item T p
6535 @kindex T p (Summary)
6536 @findex gnus-summary-prev-thread
6537 Go to the previous thread (@code{gnus-summary-prev-thread}).
6538
6539 @item T d
6540 @kindex T d (Summary)
6541 @findex gnus-summary-down-thread
6542 Descend the thread (@code{gnus-summary-down-thread}).
6543
6544 @item T u
6545 @kindex T u (Summary)
6546 @findex gnus-summary-up-thread
6547 Ascend the thread (@code{gnus-summary-up-thread}).
6548
6549 @item T o
6550 @kindex T o (Summary)
6551 @findex gnus-summary-top-thread
6552 Go to the top of the thread (@code{gnus-summary-top-thread}).
6553 @end table
6554
6555 @vindex gnus-thread-operation-ignore-subject 
6556 If you ignore subject while threading, you'll naturally end up with
6557 threads that have several different subjects in them.  If you then issue
6558 a command like `T k' (@code{gnus-summary-kill-thread}) you might not
6559 wish to kill the entire thread, but just those parts of the thread that
6560 have the same subject as the current article.  If you like this idea,
6561 you can fiddle with @code{gnus-thread-operation-ignore-subject}.  If is
6562 is non-@code{nil} (which it is by default), subjects will be ignored
6563 when doing thread commands.  If this variable is @code{nil}, articles in
6564 the same thread with different subjects will not be included in the
6565 operation in question.  If this variable is @code{fuzzy}, only articles
6566 that have subjects that are fuzzily equal will be included.
6567
6568
6569 @node Asynchronous Fetching
6570 @section Asynchronous Article Fetching
6571 @cindex asynchronous article fetching
6572
6573 If you read your news from an @sc{nntp} server that's far away, the
6574 network latencies may make reading articles a chore.  You have to wait
6575 for a while after pressing @kbd{n} to go to the next article before the
6576 article appears.  Why can't Gnus just go ahead and fetch the article
6577 while you are reading the previous one? Why not, indeed.
6578
6579 First, some caveats.  There are some pitfalls to using asynchronous
6580 article fetching, especially the way Gnus does it.  
6581
6582 Let's say you are reading article 1, which is short, and article 2 is
6583 quite long, and you are not interested in reading that.  Gnus does not
6584 know this, so it goes ahead and fetches article 2.  You decide to read
6585 article 3, but since Gnus is in the process of fetching article 2, the
6586 connection is blocked.
6587
6588 To avoid these situations, Gnus will open two (count 'em two)
6589 connections to the server.  Some people may think this isn't a very nice
6590 thing to do, but I don't see any real alternatives.  Setting up that
6591 extra connection takes some time, so Gnus startup will be slower.
6592
6593 Gnus will fetch more articles than you will read.  This will mean that
6594 the link between your machine and the @sc{nntp} server will become more
6595 loaded than if you didn't use article pre-fetch.  The server itself will
6596 also become more loaded---both with the extra article requests, and the
6597 extra connection.
6598
6599 Ok, so now you know that you shouldn't really use this thing...  unless
6600 you really want to.
6601
6602 @vindex gnus-asynchronous
6603 Here's how:  Set @code{gnus-asynchronous} to @code{t}.  The rest should
6604 happen automatically.
6605
6606 @vindex nntp-async-number
6607 You can control how many articles that are to be pre-fetched by setting
6608 @code{nntp-async-number}.  This is five by default, which means that when
6609 you read an article in the group, @code{nntp} will pre-fetch the next
6610 five articles.  If this variable is @code{t}, @code{nntp} will pre-fetch
6611 all the articles that it can without bound.  If it is @code{nil}, no
6612 pre-fetching will be made.
6613
6614 @vindex gnus-asynchronous-article-function
6615 You may wish to create some sort of scheme for choosing which articles
6616 that @code{nntp} should consider as candidates for pre-fetching.  For
6617 instance, you may wish to pre-fetch all articles with high scores, and
6618 not pre-fetch low-scored articles.  You can do that by setting the
6619 @code{gnus-asynchronous-article-function}, which will be called with an
6620 alist where the keys are the article numbers.  Your function should
6621 return an alist where the articles you are not interested in have been
6622 removed.  You could also do sorting on article score and the like. 
6623
6624 @node Article Caching
6625 @section Article Caching
6626 @cindex article caching
6627 @cindex caching
6628
6629 If you have an @emph{extremely} slow @sc{nntp} connection, you may
6630 consider turning article caching on.  Each article will then be stored
6631 locally under your home directory.  As you may surmise, this could
6632 potentially use @emph{huge} amounts of disk space, as well as eat up all
6633 your inodes so fast it will make your head swim.  In vodka.
6634
6635 Used carefully, though, it could be just an easier way to save articles.
6636
6637 @vindex gnus-use-long-file-name
6638 @vindex gnus-cache-directory
6639 @vindex gnus-use-cache
6640 To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
6641 all articles that are ticked or marked as dormant will then be copied
6642 over to your local cache (@code{gnus-cache-directory}).  Whether this
6643 cache is flat or hierarchal is controlled by the
6644 @code{gnus-use-long-file-name} variable, as usual.
6645
6646 When re-select a ticked or dormant article, it will be fetched from the
6647 cache instead of from the server.  As articles in your cache will never
6648 expire, this might serve as a method of saving articles while still
6649 keeping them where they belong.  Just mark all articles you want to save
6650 as dormant, and don't worry.
6651
6652 When an article is marked as read, is it removed from the cache.
6653
6654 @vindex gnus-cache-remove-articles
6655 @vindex gnus-cache-enter-articles
6656 The entering/removal of articles from the cache is controlled by the
6657 @code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
6658 variables.  Both are lists of symbols.  The first is @code{(ticked
6659 dormant)} by default, meaning that ticked and dormant articles will be
6660 put in the cache.  The latter is @code{(read)} by default, meaning that
6661 articles that are marked as read are removed from the cache.  Possibly
6662 symbols in these two lists are @code{ticked}, @code{dormant},
6663 @code{unread} and @code{read}.
6664
6665 @findex gnus-jog-cache
6666 So where does the massive article-fetching and storing come into the
6667 picture?  The @code{gnus-jog-cache} command will go through all
6668 subscribed newsgroups, request all unread articles, and store them in
6669 the cache.  You should only ever, ever ever ever, use this command if 1)
6670 your connection to the @sc{nntp} server is really, really, really slow
6671 and 2) you have a really, really, really huge disk.  Seriously.
6672
6673 @vindex gnus-uncacheable-groups
6674 It is likely that you do not want caching on some groups.  For instance,
6675 if your @code{nnml} mail is located under your home directory, it makes no
6676 sense to cache it somewhere else under your home directory.  Unless you
6677 feel that it's neat to use twice as much space.  To limit the caching,
6678 you could set the @code{gnus-uncacheable-groups} regexp to
6679 @samp{"^nnml"}, for instance.  This variable is @code{nil} by
6680 default.
6681
6682 @findex gnus-cache-generate-nov-databases
6683 @findex gnus-cache-generate-active
6684 If your cache becomes all messed up for some reason or other,  Gnus
6685 offers two functions that will try to set things right.  @kbd{M-x
6686 gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
6687 files, and @kbd{gnus-cache-generate-active} will (re)generate the active
6688 file. 
6689
6690
6691 @node Persistent Articles
6692 @section Persistent Articles
6693 @cindex persistent articles
6694
6695 Closely related to article caching, we have @dfn{persistent articles}.
6696 In fact, it's just a different way of looking at caching, and much more
6697 useful in my opinion.
6698
6699 Say you're reading a newsgroup, and you happen on to some valuable gem
6700 that you want to keep and treasure forever.  You'd normally just save it
6701 (using one of the many saving commands) in some file.  The problem with
6702 that is that it's just, well, yucky.  Ideally you'd prefer just having
6703 the article remain in the group where you found it forever; untouched by
6704 the expiry going on at the news server.
6705
6706 This is what a @dfn{persistent article} is---an article that just won't
6707 be deleted.  It's implemented using the normal cache functions, but
6708 you use two explicit commands for managing persistent articles:
6709
6710 @table @kbd
6711
6712 @item *
6713 @kindex * (Summary)
6714 @findex gnus-cache-enter-article
6715 Make the current article persistent (@code{gnus-cache-enter-article}). 
6716
6717 @item M-*
6718 @kindex M-* (Summary)
6719 @findex gnus-cache-remove-article
6720 Remove the current article from the persistent articles
6721 (@code{gnus-cache-remove-article}).  This will normally delete the
6722 article. 
6723 @end table
6724
6725 Both these commands understand the process/prefix convention. 
6726
6727 To avoid having all ticked articles (and stuff) entered into the cache,
6728 you should set @code{gnus-use-cache} to @code{passive} if you're just
6729 interested in persistent articles:
6730
6731 @lisp
6732 (setq gnus-use-cache 'passive)
6733 @end lisp
6734
6735
6736 @node Article Backlog
6737 @section Article Backlog
6738 @cindex backlog
6739 @cindex article backlog
6740
6741 If you have a slow connection, but the idea of using caching seems
6742 unappealing to you (and it is, really), you can help the situation some
6743 by switching on the @dfn{backlog}.  This is where Gnus will buffer
6744 already read articles so that it doesn't have to re-fetch articles
6745 you've already read.  This only helps if you are in the habit of
6746 re-selecting articles you've recently read, of course.  If you never do
6747 that, turning the backlog on will slow Gnus down a little bit, and
6748 increase memory usage some.
6749
6750 @vindex gnus-keep-backlog
6751 If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
6752 at most @var{n} old articles in a buffer for later re-fetching.  If this
6753 variable is non-@code{nil} and is not a number, Gnus will store
6754 @emph{all} read articles, which means that your Emacs will group without
6755 bound before exploding and taking your machine down with you.  I put
6756 that in there just to keep y'all on your toes.  
6757
6758 This variable is @code{nil} by default.
6759
6760
6761 @node Exiting the Summary Buffer
6762 @section Exiting the Summary Buffer
6763 @cindex summary exit
6764
6765 Exiting from the summary buffer will normally update all info on the
6766 group and return you to the group buffer. 
6767
6768 @table @kbd
6769
6770 @item Z Z
6771 @itemx q
6772 @kindex Z Z (Summary)
6773 @kindex q (Summary)
6774 @findex gnus-summary-exit
6775 @vindex gnus-summary-exit-hook
6776 @vindex gnus-summary-prepare-exit-hook
6777 Exit the current group and update all information on the group
6778 (@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
6779 called before doing much of the exiting, and calls
6780 @code{gnus-summary-expire-articles} by default.
6781 @code{gnus-summary-exit-hook} is called after finishing the exiting
6782 process. 
6783
6784 @item Z E
6785 @itemx Q
6786 @kindex Z E (Summary)
6787 @kindex Q (Summary)
6788 @findex gnus-summary-exit-no-update
6789 Exit the current group without updating any information on the group
6790 (@code{gnus-summary-exit-no-update}).
6791
6792 @item Z c
6793 @itemx c
6794 @kindex Z c (Summary)
6795 @kindex c (Summary)
6796 @findex gnus-summary-catchup-and-exit
6797 Mark all unticked articles in the group as read and then exit
6798 (@code{gnus-summary-catchup-and-exit}).
6799
6800 @item Z C
6801 @kindex Z C (Summary)
6802 @findex gnus-summary-catchup-all-and-exit
6803 Mark all articles, even the ticked ones, as read and then exit
6804 (@code{gnus-summary-catchup-all-and-exit}).
6805
6806 @item Z n
6807 @kindex Z n (Summary)
6808 @findex gnus-summary-catchup-and-goto-next-group
6809 Mark all articles as read and go to the next group
6810 (@code{gnus-summary-catchup-and-goto-next-group}). 
6811
6812 @item Z R
6813 @kindex Z R (Summary)
6814 @findex gnus-summary-reselect-current-group
6815 Exit this group, and then enter it again
6816 (@code{gnus-summary-reselect-current-group}).  If given a prefix, select
6817 all articles, both read and unread.
6818
6819 @item Z G
6820 @itemx M-g
6821 @kindex Z G (Summary)
6822 @kindex M-g (Summary)
6823 @findex gnus-summary-rescan-group
6824 Exit the group, check for new articles in the group, and select the
6825 group (@code{gnus-summary-rescan-group}).  If given a prefix, select all
6826 articles, both read and unread.
6827
6828 @item Z N
6829 @kindex Z N (Summary)
6830 @findex gnus-summary-next-group
6831 Exit the group and go to the next group
6832 (@code{gnus-summary-next-group}). 
6833
6834 @item Z P
6835 @kindex Z P (Summary)
6836 @findex gnus-summary-prev-group
6837 Exit the group and go to the previous group
6838 (@code{gnus-summary-prev-group}). 
6839 @end table
6840
6841 @vindex gnus-exit-group-hook
6842 @code{gnus-exit-group-hook} is called when you exit the current
6843 group.  
6844
6845 @findex gnus-summary-wake-up-the-dead
6846 @findex gnus-dead-summary-mode
6847 @vindex gnus-kill-summary-on-exit
6848 If you're in the habit of exiting groups, and then changing your mind
6849 about it, you might set @code{gnus-kill-summary-on-exit} to @code{nil}.
6850 If you do that, Gnus won't kill the summary buffer when you exit it.
6851 (Quelle surprise!)  Instead it will change the name of the buffer to
6852 something like @samp{"*Dead Summary ... *"} and install a minor mode
6853 called @code{gnus-dead-summary-mode}.  Now, if you switch back to this
6854 buffer, you'll find that all keys are mapped to a function called
6855 @code{gnus-summary-wake-up-the-dead}.  So tapping any keys in a dead
6856 summary buffer will result in a live, normal summary buffer.  
6857
6858 There will never be more than one dead summary buffer at any one time. 
6859
6860 @vindex gnus-use-cross-reference
6861 The data on the current group will be updated (which articles you have
6862 read, which articles you have replied to, etc.) when you exit the
6863 summary buffer.  If the @code{gnus-use-cross-reference} variable is
6864 @code{t} (which is the default), articles that are cross-referenced to
6865 this group and are marked as read, will also be marked as read in the
6866 other subscribed groups they were cross-posted to.  If this variable is
6867 neither @code{nil} nor @code{t}, the article will be marked as read in
6868 both subscribed and unsubscribed groups.
6869
6870 Marking cross-posted articles as read ensures that you'll never have to
6871 read the same article more than once.  Unless, of course, somebody has
6872 posted it to several groups separately.  Posting the same article to
6873 several groups (not cross-posting) is called @dfn{spamming}, and you are
6874 by law required to send nasty-grams to anyone who perpetrates such a
6875 heinous crime.
6876
6877 Remember: Cross-posting is kinda ok, but posting the same article
6878 separately to several groups is not.
6879
6880 One thing that may cause Gnus to not do the cross-posting thing
6881 correctly is if you use an @sc{nntp} server that supports @sc{xover}
6882 (which is very nice, because it speeds things up considerably) which
6883 does not include the @code{Xref} header in its @sc{nov} lines.  This is
6884 Evil, but all too common, alas, alack.  Gnus tries to Do The Right Thing
6885 even with @sc{xover} by registering the @code{Xref} lines of all
6886 articles you actually read, but if you kill the articles, or just mark
6887 them as read without reading them, Gnus will not get a chance to snoop
6888 the @code{Xref} lines out of these articles, and will be unable to use
6889 the cross reference mechanism.
6890
6891 @vindex gnus-nov-is-evil
6892 If you want Gnus to get the @code{Xref}s right all the time, you have to
6893 set @code{gnus-nov-is-evil} to @code{t}, which slows things down
6894 considerably.
6895
6896 C'est la vie.
6897
6898
6899 @node Process/Prefix
6900 @section Process/Prefix
6901 @cindex process/prefix convention
6902
6903 Many functions, among them functions for moving, decoding and saving
6904 articles, use what is known as the @dfn{Process/Prefix convention}.
6905
6906 This is a method for figuring out what articles that the user wants the
6907 command to be performed on.
6908
6909 It goes like this:
6910
6911 If the numeric prefix is N, perform the operation on the next N
6912 articles, starting with the current one.  If the numeric prefix is
6913 negative, perform the operation on the previous N articles, starting
6914 with the current one.
6915
6916 If @code{transient-mark-mode} in non-@code{nil} and the region is
6917 active, all articles in the region will be worked upon.
6918
6919 If there is no numeric prefix, but some articles are marked with the
6920 process mark, perform the operation on the articles that are marked with
6921 the process mark.
6922
6923 If there is neither a numeric prefix nor any articles marked with the
6924 process mark, just perform the operation on the current article.
6925
6926 Quite simple, really, but it needs to be made clear so that surprises
6927 are avoided.
6928
6929 @vindex gnus-summary-goto-unread
6930 One thing that seems to shock & horrify lots of people is that, for
6931 instance, @kbd{3 d} does exactly the same as @kbd{d} @kbd{d} @kbd{d}.
6932 Since each @kbd{d} (which marks the current article as read) by default
6933 goes to the next unread article after marking, this means that @kbd{3 d}
6934 will mark the next three unread articles as read, no matter what the
6935 summary buffer looks like.  Set @code{gnus-summary-goto-unread} to
6936 @code{nil} for a more straightforward action.
6937
6938
6939 @node Saving Articles
6940 @section Saving Articles
6941 @cindex saving articles
6942
6943 Gnus can save articles in a number of ways.  Below is the documentation
6944 for saving articles in a fairly straight-forward fashion (i.e., little
6945 processing of the article is done before it is saved).  For a different
6946 approach (uudecoding, unsharing) you should use @code{gnus-uu}
6947 (@pxref{Decoding Articles}).
6948
6949 @vindex gnus-save-all-headers
6950 If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
6951 unwanted headers before saving the article.
6952
6953 @vindex gnus-saved-headers
6954 If the preceeding variable is @code{nil}, all headers that match the
6955 @code{gnus-saved-headers} regexp will be kept, while the rest will be
6956 deleted before saving.
6957
6958 @table @kbd
6959
6960 @item O o
6961 @itemx o
6962 @kindex O o (Summary)
6963 @kindex o (Summary)
6964 @findex gnus-summary-save-article
6965 Save the current article using the default article saver
6966 (@code{gnus-summary-save-article}). 
6967
6968 @item O m
6969 @kindex O m (Summary)
6970 @findex gnus-summary-save-article-mail
6971 Save the current article in mail format
6972 (@code{gnus-summary-save-article-mail}). 
6973
6974 @item O r
6975 @kindex O r (Summary)
6976 @findex gnus-summary-save-article-mail
6977 Save the current article in rmail format
6978 (@code{gnus-summary-save-article-rmail}). 
6979
6980 @item O f
6981 @kindex O f (Summary)
6982 @findex gnus-summary-save-article-file
6983 Save the current article in plain file format
6984 (@code{gnus-summary-save-article-file}). 
6985
6986 @item O b
6987 @kindex O b (Summary)
6988 @findex gnus-summary-save-article-body-file
6989 Save the current article body in plain file format
6990 (@code{gnus-summary-save-article-body-file}). 
6991
6992 @item O h
6993 @kindex O h (Summary)
6994 @findex gnus-summary-save-article-folder
6995 Save the current article in mh folder format
6996 (@code{gnus-summary-save-article-folder}). 
6997
6998 @item O p
6999 @kindex O p (Summary)
7000 @findex gnus-summary-pipe-output
7001 Save the current article in a pipe.  Uhm, like, what I mean is---Pipe
7002 the current article to a process (@code{gnus-summary-pipe-output}).
7003 @end table
7004
7005 @vindex gnus-prompt-before-saving
7006 All these commands use the process/prefix convention
7007 (@pxref{Process/Prefix}).  If you save bunches of articles using these
7008 functions, you might get tired of being prompted for files to save each
7009 and every article in.  The prompting action is controlled by
7010 the @code{gnus-prompt-before-saving} variable, which is @code{always} by
7011 default, giving you that excessive prompting action you know and
7012 loathe.  If you set this variable to @code{t} instead, you'll be promted
7013 just once for each series of articles you save.  If you like to really
7014 have Gnus do all your thinking for you, you can even set this variable
7015 to @code{nil}, which means that you will never be prompted for files to
7016 save articles in.  Gnus will simply save all the articles in the default
7017 files. 
7018
7019
7020 @vindex gnus-default-article-saver
7021 You can customize the @code{gnus-default-article-saver} variable to make
7022 Gnus do what you want it to.  You can use any of the four ready-made
7023 functions below, or you can create your own.
7024
7025 @table @code
7026
7027 @item gnus-summary-save-in-rmail
7028 @findex gnus-summary-save-in-rmail
7029 This is the default format, @dfn{babyl}.  Uses the function in the
7030 @code{gnus-rmail-save-name} variable to get a file name to save the
7031 article in.  The default is @code{gnus-plain-save-name}.
7032
7033 @item gnus-summary-save-in-mail
7034 @findex gnus-summary-save-in-mail
7035 Save in a Unix mail (mbox) file.  Uses the function in the
7036 @code{gnus-mail-save-name} variable to get a file name to save the
7037 article in.  The default is @code{gnus-plain-save-name}.
7038
7039 @item gnus-summary-save-in-file
7040 @findex gnus-summary-save-in-file
7041 Append the article straight to an ordinary file.  Uses the function in
7042 the @code{gnus-file-save-name} variable to get a file name to save the
7043 article in.  The default is @code{gnus-numeric-save-name}.
7044
7045 @item gnus-summary-save-body-in-file
7046 @findex gnus-summary-save-body-in-file
7047 Append the article body to an ordinary file.  Uses the function in the
7048 @code{gnus-file-save-name} variable to get a file name to save the
7049 article in.  The default is @code{gnus-numeric-save-name}.
7050
7051 @item gnus-summary-save-in-folder
7052 @findex gnus-summary-save-in-folder
7053 Save the article to an MH folder using @code{rcvstore} from the MH
7054 library.
7055
7056 @item gnus-summary-save-in-vm
7057 @findex gnus-summary-save-in-vm
7058 Save the article in a VM folder.  You have to have the VM mail
7059 reader to use this setting.
7060 @end table
7061
7062 All of these functions, except for the last one, will save the article
7063 in the @code{gnus-article-save-directory}, which is initialized from the
7064 @samp{SAVEDIR} environment variable.  This is @file{~/News/} by
7065 default. 
7066
7067 As you can see above, the functions use different functions to find a
7068 suitable name of a file to save the article in.  Below is a list of
7069 available functions that generate names:
7070
7071 @table @code
7072
7073 @item gnus-Numeric-save-name
7074 @findex gnus-Numeric-save-name
7075 Generates file names that look like @samp{~/News/Alt.andrea-dworkin/45}.
7076
7077 @item gnus-numeric-save-name
7078 @findex gnus-numeric-save-name
7079 Generates file names that look like @samp{~/News/alt.andrea-dworkin/45}.
7080
7081 @item gnus-Plain-save-name
7082 @findex gnus-Plain-save-name
7083 Generates file names that look like @samp{~/News/Alt.andrea-dworkin}.
7084
7085 @item gnus-plain-save-name
7086 @findex gnus-plain-save-name
7087 Generates file names that look like @samp{~/News/alt.andrea-dworkin}.
7088 @end table
7089
7090 @vindex gnus-split-methods
7091 You can have Gnus suggest where to save articles by plonking regexp into
7092 the @code{gnus-split-methods} alist.  For instance, if you would like to
7093 save articles related to Gnus in the file @file{gnus-stuff}, and articles
7094 related to VM in @code{vm-stuff}, you could set this variable to something
7095 like:
7096
7097 @lisp
7098 (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
7099  ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
7100  (my-choosing-function "../other-dir/my-stuff")
7101  ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
7102 @end lisp
7103
7104 We see that this is a list where each element is a list that has two
7105 elements---the @dfn{match} and the @dfn{file}.  The match can either be
7106 a string (in which case it is used as a regexp to match on the article
7107 head); it can be a symbol (which will be called as a function); or it
7108 can be a list (which will be @code{eval}ed).  If any of these actions
7109 have a non-@code{nil} result, the @dfn{file} will be used as a default
7110 prompt.  In addition, the result of the operation itself will be used if
7111 the function or form called returns a string or a list of strings. 
7112
7113 You basically end up with a list of file names that might be used when
7114 saving the current article.  (All ``matches'' will be used.)  You will
7115 then be prompted for what you really want to use as a name, with file
7116 name completion over the results from applying this variable.
7117
7118 This variable is @code{((gnus-article-archive-name))} by default, which
7119 means that Gnus will look at the articles it saves for an
7120 @samp{Archive-name} line and use that as a suggestion for the file
7121 name. 
7122
7123 @vindex gnus-use-long-file-name
7124 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
7125 @code{nil}, all the preceding functions will replace all periods
7126 (@samp{.}) in the group names with slashes (@samp{/})---which means that
7127 the functions will generate hierarchies of directories instead of having
7128 all the files in the toplevel directory
7129 (@samp{~/News/alt/andrea-dworkin} instead of
7130 @samp{~/News/alt.andrea-dworkin}.)  This variable is @code{t} by default
7131 on most systems.  However, for historical reasons, this is @code{nil} on
7132 Xenix and usg-unix-v machines by default.
7133
7134 This function also affects kill and score file names.  If this variable
7135 is a list, and the list contains the element @code{not-score}, long file
7136 names will not be used for score files, if it contains the element
7137 @code{not-save}, long file names will not be used for saving, and if it
7138 contains the element @code{not-kill}, long file names will not be used
7139 for kill files.
7140
7141 If you'd like to save articles in a hierarchy that looks something like
7142 a spool, you could
7143
7144 @lisp
7145 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
7146 (setq gnus-default-article-save 'gnus-summary-save-in-file) ; no encoding
7147 @end lisp
7148
7149 Then just save with @kbd{o}.  You'd then read this hierarchy with
7150 ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
7151 the toplevel directory as the argument (@file{~/News/}).  Then just walk
7152 around to the groups/directories with @code{nneething}.
7153
7154
7155 @node Decoding Articles
7156 @section Decoding Articles
7157 @cindex decoding articles
7158
7159 Sometime users post articles (or series of articles) that have been
7160 encoded in some way or other.  Gnus can decode them for you.
7161
7162 @menu 
7163 * Uuencoded Articles::    Uudecode articles.
7164 * Shared Articles::       Unshar articles.
7165 * PostScript Files::      Split PostScript.
7166 * Decoding Variables::    Variables for a happy decoding.
7167 * Viewing Files::         You want to look at the result of the decoding?
7168 @end menu
7169
7170 All these functions use the process/prefix convention
7171 (@pxref{Process/Prefix}) for finding out what articles to work on, with
7172 the extension that a ``single article'' means ``a single series''.  Gnus can
7173 find out by itself what articles belong to a series, decode all the
7174 articles and unpack/view/save the resulting file(s).
7175
7176 Gnus guesses what articles are in the series according to the following
7177 simplish rule: The subjects must be (nearly) identical, except for the
7178 last two numbers of the line.  (Spaces are largely ignored, however.)
7179
7180 For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
7181 will find all the articles that match the regexp @samp{^cat.gif
7182 ([0-9]+/[0-9]+).*$}.  
7183
7184 Subjects that are nonstandard, like @samp{cat.gif (2/3) Part 6 of a
7185 series}, will not be properly recognized by any of the automatic viewing
7186 commands, and you have to mark the articles manually with @kbd{#}.
7187
7188 @node Uuencoded Articles
7189 @subsection Uuencoded Articles
7190 @cindex uudecode
7191 @cindex uuencoded articles
7192
7193 @table @kbd
7194
7195 @item X u
7196 @kindex X u (Summary)
7197 @findex gnus-uu-decode-uu
7198 Uudecodes the current series (@code{gnus-uu-decode-uu}).
7199
7200 @item X U
7201 @kindex X U (Summary)
7202 @findex gnus-uu-decode-uu-and-save
7203 Uudecodes and saves the current series
7204 (@code{gnus-uu-decode-uu-and-save}).
7205
7206 @item X v u
7207 @kindex X v u (Summary)
7208 @findex gnus-uu-decode-uu-view
7209 Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
7210
7211 @item X v U
7212 @kindex X v U (Summary)
7213 @findex gnus-uu-decode-uu-and-save-view
7214 Uudecodes, views and saves the current series
7215 (@code{gnus-uu-decode-uu-and-save-view}). 
7216 @end table
7217
7218 Remember that these all react to the presence of articles marked with
7219 the process mark.  If, for instance, you'd like to uncode and save an
7220 entire newsgroup, you'd typically do @kbd{M P a}
7221 (@code{gnus-uu-mark-all}) and then @kbd{X U}
7222 (@code{gnus-uu-decode-uu-and-save}).
7223
7224 All this is very much different from how @code{gnus-uu} worked with
7225 @sc{gnus 4.1}, where you had explicit keystrokes for everything under
7226 the sun.  This version of @code{gnus-uu} generally assumes that you mark
7227 articles in some way (@pxref{Setting Process Marks}) and then press
7228 @kbd{X u}.
7229
7230 Note: When trying to decode articles that have names matching
7231 @code{gnus-uu-notify-files}, which is hard-coded to
7232 @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
7233 automatically post an article on @samp{comp.unix.wizards} saying that
7234 you have just viewed the file in question.  This feature can't be turned
7235 off.
7236
7237 @node Shared Articles
7238 @subsection Shared Articles
7239 @cindex unshar
7240 @cindex shared articles
7241
7242 @table @kbd
7243
7244 @item X s
7245 @kindex X s (Summary)
7246 @findex gnus-uu-decode-unshar
7247 Unshars the current series (@code{gnus-uu-decode-unshar}).
7248
7249 @item X S
7250 @kindex X S (Summary)
7251 @findex gnus-uu-decode-unshar-and-save
7252 Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
7253
7254 @item X v s
7255 @kindex X v s (Summary)
7256 @findex gnus-uu-decode-unshar-view
7257 Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
7258
7259 @item X v S
7260 @kindex X v S (Summary)
7261 @findex gnus-uu-decode-unshar-and-save-view
7262 Unshars, views and saves the current series
7263 (@code{gnus-uu-decode-unshar-and-save-view}). 
7264 @end table
7265
7266 @node PostScript Files
7267 @subsection PostScript Files
7268 @cindex PostScript
7269
7270 @table @kbd
7271
7272 @item X p
7273 @kindex X p (Summary)
7274 @findex gnus-uu-decode-postscript
7275 Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
7276
7277 @item X P
7278 @kindex X P (Summary)
7279 @findex gnus-uu-decode-postscript-and-save
7280 Unpack and save the current PostScript series
7281 (@code{gnus-uu-decode-postscript-and-save}).
7282
7283 @item X v p
7284 @kindex X v p (Summary)
7285 @findex gnus-uu-decode-postscript-view
7286 View the current PostScript series
7287 (@code{gnus-uu-decode-postscript-view}).
7288
7289 @item X v P
7290 @kindex X v P (Summary)
7291 @findex gnus-uu-decode-postscript-and-save-view
7292 View and save the current PostScript series
7293 (@code{gnus-uu-decode-postscript-and-save-view}). 
7294 @end table
7295
7296 @node Decoding Variables
7297 @subsection Decoding Variables
7298
7299 Adjective, not verb.
7300
7301 @menu 
7302 * Rule Variables::          Variables that say how a file is to be viewed.
7303 * Other Decode Variables::  Other decode variables.
7304 * Uuencoding and Posting::  Variables for customizing uuencoding.
7305 @end menu
7306
7307 @node Rule Variables
7308 @subsubsection Rule Variables
7309 @cindex rule variables
7310
7311 Gnus uses @dfn{rule variables} to decide how to view a file.  All these
7312 variables are on the form
7313   
7314 @lisp
7315       (list '(regexp1 command2)
7316             '(regexp2 command2)
7317             ...)
7318 @end lisp
7319
7320 @table @code
7321
7322 @item gnus-uu-user-view-rules
7323 @vindex gnus-uu-user-view-rules
7324 This variable is consulted first when viewing files.  If you wish to use,
7325 for instance, @code{sox} to convert an @samp{.au} sound file, you could
7326 say something like:
7327 @lisp
7328        (setq gnus-uu-user-view-rules
7329          (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
7330 @end lisp
7331
7332 @item gnus-uu-user-view-rules-end
7333 @vindex gnus-uu-user-view-rules-end
7334 This variable is consulted if Gnus couldn't make any matches from the
7335 user and default view rules.
7336
7337 @item gnus-uu-user-archive-rules
7338 @vindex gnus-uu-user-archive-rules
7339 This variable can be used to say what commands should be used to unpack
7340 archives.
7341 @end table
7342
7343
7344 @node Other Decode Variables
7345 @subsubsection Other Decode Variables
7346
7347 @table @code
7348 @vindex gnus-uu-grabbed-file-functions
7349
7350 @item gnus-uu-grabbed-file-functions
7351 All functions in this list will be called right each file has been
7352 successfully decoded---so that you can move or view files right away,
7353 and don't have to wait for all files to be decoded before you can do
7354 anything.  Ready-made functions you can put in this list are:
7355
7356 @table @code
7357
7358 @item gnus-uu-grab-view
7359 @findex gnus-uu-grab-view
7360 View the file.
7361
7362 @item gnus-uu-grab-move
7363 @findex gnus-uu-grab-move
7364 Move the file (if you're using a saving function.)
7365 @end table
7366
7367 @item gnus-uu-ignore-files-by-name
7368 @vindex gnus-uu-ignore-files-by-name
7369 Files with name matching this regular expression won't be viewed.
7370
7371 @item gnus-uu-ignore-files-by-type
7372 @vindex gnus-uu-ignore-files-by-type
7373 Files with a @sc{mime} type matching this variable won't be viewed.
7374 Note that Gnus tries to guess what type the file is based on the name.
7375 @code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly
7376 kludgey.
7377
7378 @item gnus-uu-tmp-dir
7379 @vindex gnus-uu-tmp-dir
7380 Where @code{gnus-uu} does its work.
7381
7382 @item gnus-uu-do-not-unpack-archives
7383 @vindex gnus-uu-do-not-unpack-archives
7384 Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
7385 looking for files to display.
7386
7387 @item gnus-uu-view-and-save
7388 @vindex gnus-uu-view-and-save
7389 Non-@code{nil} means that the user will always be asked to save a file
7390 after viewing it.
7391
7392 @item gnus-uu-ignore-default-view-rules
7393 @vindex gnus-uu-ignore-default-view-rules
7394 Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
7395 rules.
7396
7397 @item gnus-uu-ignore-default-archive-rules
7398 @vindex gnus-uu-ignore-default-archive-rules
7399 Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
7400 unpacking commands.
7401
7402 @item gnus-uu-kill-carriage-return
7403 @vindex gnus-uu-kill-carriage-return
7404 Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
7405 from articles.
7406
7407 @item gnus-uu-unmark-articles-not-decoded
7408 @vindex gnus-uu-unmark-articles-not-decoded
7409 Non-@code{nil} means that @code{gnus-uu} will mark articles that were
7410 unsuccessfully decoded as unread.
7411
7412 @item gnus-uu-correct-stripped-uucode
7413 @vindex gnus-uu-correct-stripped-uucode
7414 Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
7415 uuencoded files that have had trailing spaces deleted.
7416
7417 @item gnus-uu-view-with-metamail
7418 @vindex gnus-uu-view-with-metamail
7419 Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
7420 commands defined by the rule variables and just fudge a @sc{mime}
7421 content type based on the file name.  The result will be fed to
7422 @code{metamail} for viewing.
7423
7424 @item gnus-uu-save-in-digest
7425 @vindex gnus-uu-save-in-digest
7426 Non-@code{nil} means that @code{gnus-uu}, when asked to save without
7427 decoding, will save in digests.  If this variable is @code{nil},
7428 @code{gnus-uu} will just save everything in a file without any
7429 embellishments.  The digesting almost conforms to RFC1153---no easy way
7430 to specify any meaningful volume and issue numbers were found, so I
7431 simply dropped them.
7432
7433 @end table
7434
7435 @node Uuencoding and Posting
7436 @subsubsection Uuencoding and Posting
7437
7438 @table @code
7439
7440 @item gnus-uu-post-include-before-composing
7441 @vindex gnus-uu-post-include-before-composing
7442 Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
7443 before you compose the article.  If this variable is @code{t}, you can
7444 either include an encoded file with @kbd{C-c C-i} or have one included
7445 for you when you post the article.
7446
7447 @item gnus-uu-post-length
7448 @vindex gnus-uu-post-length
7449 Maximum length of an article.  The encoded file will be split into how
7450 many articles it takes to post the entire file.
7451
7452 @item gnus-uu-post-threaded
7453 @vindex gnus-uu-post-threaded
7454 Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
7455 thread.  This may not be smart, as no other decoder I have seen are able
7456 to follow threads when collecting uuencoded articles.  (Well, I have
7457 seen one package that does that---@code{gnus-uu}, but somehow, I don't
7458 think that counts...) Default is @code{nil}.
7459
7460 @item gnus-uu-post-separate-description
7461 @vindex gnus-uu-post-separate-description
7462 Non-@code{nil} means that the description will be posted in a separate
7463 article.  The first article will typically be numbered (0/x).  If this
7464 variable is @code{nil}, the description the user enters will be included
7465 at the beginning of the first article, which will be numbered (1/x).
7466 Default is @code{t}.
7467
7468 @end table
7469
7470 @node Viewing Files
7471 @subsection Viewing Files
7472 @cindex viewing files
7473 @cindex pseudo-articles
7474
7475 After decoding, if the file is some sort of archive, Gnus will attempt
7476 to unpack the archive and see if any of the files in the archive can be
7477 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
7478 containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
7479 uncompress and detar the main file, and then view the two pictures.
7480 This unpacking process is recursive, so if the archive contains archives
7481 of archives, it'll all be unpacked.
7482
7483 Finally, Gnus will normally insert a @dfn{pseudo-article} for each
7484 extracted file into the summary buffer.  If you go to these ``articles'',
7485 you will be prompted for a command to run (usually Gnus will make a
7486 suggestion), and then the command will be run.
7487
7488 @vindex gnus-view-pseudo-asynchronously
7489 If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
7490 until the viewing is done before proceeding.
7491
7492 @vindex gnus-view-pseudos
7493 If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
7494 the pseudo-articles into the summary buffer, but view them
7495 immediately.  If this variable is @code{not-confirm}, the user won't even
7496 be asked for a confirmation before viewing is done.
7497
7498 @vindex gnus-view-pseudos-separately 
7499 If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
7500 pseudo-article will be created for each file to be viewed.  If
7501 @code{nil}, all files that use the same viewing command will be given as
7502 a list of parameters to that command.
7503
7504 If @code{gnus-insert-pseudo-articles} is non-@code{nil}, insert
7505 pseudo-articles when decoding.  It is @code{t} by default.
7506
7507 So; there you are, reading your @emph{pseudo-articles} in your
7508 @emph{virtual newsgroup} from the @emph{virtual server}; and you think:
7509 Why isn't anything real anymore? How did we get here?
7510
7511
7512 @node Article Treatment
7513 @section Article Treatment
7514
7515 Reading through this huge manual, you may have quite forgotten that the
7516 object of newsreaders are to actually, like, read what people have
7517 written.  Reading articles.  Unfortunately, people are quite bad at
7518 writing, so there are tons of functions and variables to make reading
7519 these articles easier.
7520
7521 @menu
7522 * Article Highlighting::    You want to make the article look like fruit salad.
7523 * Article Hiding::          You also want to make certain info go away.
7524 * Article Washing::         Lots of way-neat functions to make life better.
7525 * Article Buttons::         Clcik on URLs, Message-IDs, addresses and the like.
7526 * Article Date::            Grumble, UT!
7527 @end menu
7528
7529
7530 @node Article Highlighting
7531 @subsection Article Highlighting
7532 @cindex highlight
7533
7534 Not only do you want your article buffer to look like fruit salad, but
7535 you want it to look like technicolor fruit salad.
7536
7537 @table @kbd
7538
7539 @item W H a
7540 @kindex W H a (Summary)
7541 @findex gnus-article-highlight
7542 Highlight the current article (@code{gnus-article-highlight}).
7543
7544 @item W H h
7545 @kindex W H h (Summary)
7546 @findex gnus-article-highlight-headers
7547 @vindex gnus-header-face-alist
7548 Highlight the headers (@code{gnus-article-highlight-headers}).  The
7549 highlighting will be done according to the @code{gnus-header-face-alist}
7550 variable, which is a list where each element has the form @var{(regexp
7551 name content)}.  @var{regexp} is a regular expression for matching the
7552 header, @var{name} is the face used for highlighting the header name and
7553 @var{content} is the face for highlighting the header value.  The first
7554 match made will be used.  Note that @var{regexp} shouldn't have @samp{^}
7555 prepended---Gnus will add one.
7556
7557 @item W H c
7558 @kindex W H c (Summary)
7559 @findex gnus-article-highlight-citation
7560 Highlight cited text (@code{gnus-article-highlight-citation}). 
7561
7562 Some variables to customize the citation highlights:
7563
7564 @table @code
7565 @vindex gnus-cite-parse-max-size
7566
7567 @item gnus-cite-parse-max-size
7568 If the article size if bigger than this variable (which is 25000 by
7569 default), no citation highlighting will be performed.  
7570
7571 @item gnus-cite-prefix-regexp
7572 @vindex gnus-cite-prefix-regexp
7573 Regexp mathcing the longest possible citation prefix on a line. 
7574
7575 @item gnus-cite-max-prefix
7576 @vindex gnus-cite-max-prefix
7577 Maximum possible length for a citation prefix (default 20).
7578
7579 @item gnus-supercite-regexp
7580 @vindex gnus-supercite-regexp
7581 Regexp matching normal SuperCite attribution lines.  
7582
7583 @item gnus-supercite-secondary-regexp
7584 @vindex gnus-supercite-secondary-regexp
7585 Regexp matching mangled SuperCite attribution lines.
7586
7587 @item gnus-cite-minimum-match-count
7588 @vindex gnus-cite-minimum-match-count
7589 Minimum number of identical prefixes we have to see before we believe
7590 that it's a citation.
7591
7592 @item gnus-cite-attribution-prefix
7593 @vindex gnus-cite-attribution-prefix
7594 Regexp matching the beginning of an attribution line.
7595
7596 @item gnus-cite-addtribution-suffix
7597 @vindex gnus-cite-addtribution-suffix
7598 Regexp matching the end of an attribution line.
7599
7600 @item gnus-cite-attribution-face
7601 @vindex gnus-cite-attribution-face
7602 Face used for attribution lines.  It is merged with the face for the
7603 cited text belonging to the attribution.
7604
7605 @end table
7606
7607
7608 @item W H s
7609 @kindex W H s (Summary)
7610 @vindex gnus-signature-separator
7611 @findex gnus-article-highlight-signature
7612 Highlight the signature (@code{gnus-article-highlight-signature}).
7613 Everything after @code{gnus-signature-separator} in an article will be
7614 considered a signature.
7615
7616 @end table
7617
7618
7619 @node Article Hiding
7620 @subsection Article Hiding
7621 @cindex article hiding
7622
7623 Or rather, hiding certain things in each article.  There usually is much
7624 too much gruft in most articles.  
7625
7626 @table @kbd
7627
7628 @item W W a
7629 @kindex W W a (Summary)
7630 @findex gnus-article-hide
7631 Do maximum hiding on the summary buffer (@kbd{gnus-article-hide}). 
7632
7633 @item W W h
7634 @kindex W W h (Summary)
7635 @findex gnus-article-hide-headers
7636 Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
7637 Headers}. 
7638
7639 @item W W b
7640 @kindex W W b (Summary)
7641 @findex gnus-article-hide-boring-headers
7642 Hide headers that aren't particularly interesting
7643 (@code{gnus-article-hide-boring-headers}).  @xref{Hiding Headers}.
7644
7645 @item W W s
7646 @kindex W W s (Summary)
7647 @findex gnus-article-hide-signature
7648 Hide signature (@code{gnus-article-hide-signature}).
7649
7650 @item W W p
7651 @kindex W W p (Summary)
7652 @findex gnus-article-hide-pgp
7653 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}). 
7654
7655 @item W W c
7656 @kindex W W c (Summary)
7657 @findex gnus-article-hide-citation
7658 Hide citation (@code{gnus-article-hide-citation}).  Some variables for
7659 customizing the hiding:
7660
7661 @table @code
7662
7663 @item gnus-cite-hide-percentage
7664 @vindex gnus-cite-hide-percentage
7665 If the cited text is of a bigger percentage than this variable (default
7666 50), hide the cited text.
7667
7668 @item gnus-cite-hide-absolute
7669 @vindex gnus-cite-hide-absolute
7670 The cited text must be have at least this length (default 10) before it
7671 is hidden.
7672
7673 @item gnus-cited-text-button-line-format
7674 @vindex gnus-cited-text-button-line-format
7675 Gnus adds buttons show where the cited text has been hidden, and to
7676 allow toggle hiding the text.  The format of the variable is specified
7677 by this format-like variable.  These specs are legal:
7678
7679 @table @samp
7680 @item b
7681 Start point of the hidden text.
7682 @item e
7683 End point of the hidden text.
7684 @item l
7685 Length of the hidden text.
7686 @end table
7687
7688 @item gnus-cited-lines-visible
7689 @vindex gnus-cited-lines-visible
7690 The number of lines at the beginning of the cited text to leave shown. 
7691
7692 @end table
7693
7694 @item W W C
7695 @kindex W W C (Summary)
7696 @findex gnus-article-hide-citation-in-followups
7697 Hide cited text in articles that aren't roots
7698 (@code{gnus-article-hide-citation-in-followups}).  This isn't very
7699 useful as an interactive command, but might be a handy function to stick
7700 in @code{gnus-article-display-hook} (@pxref{Customizing Articles}). 
7701
7702 @end table
7703
7704 All these ``hiding'' commands are toggles, but if you give a negative
7705 prefix to these commands, they will show what they have previously
7706 hidden.  If you give a positive prefix, they will always hide.
7707
7708 Also see @xref{Article Highlighting} for further variables for
7709 citation customization.
7710
7711 @vindex gnus-signature-limit
7712 @code{gnus-signature-limit} provides a limit to what is considered a
7713 signature.  If it is a number, no signature may not be longer (in
7714 characters) than that number.  If it is a function, the function will be
7715 called without any parameters, and if it returns @code{nil}, there is no
7716 signature in the buffer.  If it is a string, it will be used as a
7717 regexp.  If it matches, the text in question is not a signature.
7718
7719
7720 @node Article Washing
7721 @subsection Article Washing
7722 @cindex washing
7723 @cindex article washing
7724
7725 We call this ``article washing'' for a really good reason.  Namely, the
7726 @kbd{A} key was taken, so we had to use the @kbd{W} key instead.
7727
7728 @dfn{Washing} is defined by us as ``changing something from something to
7729 something else'', but normally results in something looking better.
7730 Cleaner, perhaps.
7731
7732 @table @kbd
7733
7734 @item W l
7735 @kindex W l (Summary)
7736 @findex gnus-summary-stop-page-breaking
7737 Remove page breaks from the current article
7738 (@code{gnus-summary-stop-page-breaking}).
7739
7740 @item W r
7741 @kindex W r (Summary)
7742 @findex gnus-summary-caesar-message
7743 Do a Caesar rotate (rot13) on the article buffer
7744 (@code{gnus-summary-caesar-message}). 
7745
7746 @item A g
7747 @kindex A g (Summary)
7748 @findex gnus-summary-show-article
7749 (Re)fetch the current article (@code{gnus-summary-show-article}).  If
7750 given a prefix, fetch the current article, but don't run any of the
7751 article treatment functions.  This will give you a ``raw'' article, just
7752 the way it came from the server.
7753
7754 @item W t
7755 @kindex W t (Summary)
7756 @findex gnus-summary-toggle-header
7757 Toggle whether to display all headers in the article buffer
7758 (@code{gnus-summary-toggle-header}). 
7759
7760 @item W m
7761 @kindex W m (Summary)
7762 @findex gnus-summary-toggle-mime
7763 Toggle whether to run the article through @sc{mime} before displaying
7764 (@code{gnus-summary-toggle-mime}).
7765
7766 @item W o
7767 @kindex W o (Summary)
7768 @findex gnus-article-treat-overstrike
7769 Treat overstrike (@code{gnus-article-treat-overstrike}).
7770
7771 @item W w
7772 @kindex W w (Summary)
7773 @findex gnus-article-word-wrap
7774 Do word wrap (@code{gnus-article-word-wrap}).
7775
7776 @item W c
7777 @kindex W c (Summary)
7778 @findex gnus-article-remove-cr
7779 Remove CR (@code{gnus-article-remove-cr}).
7780
7781 @item W L
7782 @kindex W L (Summary)
7783 @findex gnus-article-remove-trailing-blank-lines
7784 Remove all blank lines at the end of the article
7785 (@code{gnus-article-remove-trailing-blank-lines}).
7786
7787 @item W q
7788 @kindex W q (Summary)
7789 @findex gnus-article-de-quoted-unreadable
7790 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
7791
7792 @item W f
7793 @kindex W f (Summary)
7794 @cindex x-face
7795 @findex gnus-article-display-x-face
7796 @findex gnus-article-x-face-command
7797 @vindex gnus-article-x-face-command
7798 @vindex gnus-article-x-face-too-ugly
7799 Look for and display any X-Face headers
7800 (@code{gnus-article-display-x-face}).  The command executed by this
7801 function is given by the @code{gnus-article-x-face-command} variable.  If
7802 this variable is a string, this string will be executed in a sub-shell.
7803 If it is a function, this function will be called with the face as the
7804 argument.  If the @code{gnus-article-x-face-too-ugly} (which is a regexp)
7805 matches the @code{From} header, the face will not be shown.
7806
7807 @item W b
7808 @kindex W b (Summary)
7809 @findex gnus-article-add-buttons
7810 Add clickable buttons to the article (@code{gnus-article-add-buttons}). 
7811
7812 @item W B
7813 @kindex W B (Summary)
7814 @findex gnus-article-add-buttons-to-head
7815 Add clickable buttons to the article headers
7816 (@code{gnus-article-add-buttons-to-head}).  
7817
7818 @end table
7819
7820
7821 @node Article Buttons
7822 @subsection Article Buttons
7823 @cindex buttons
7824
7825 People often include references to other stuff in articles, and it would
7826 be nice if Gnus could just fetch whatever it is that people talk about
7827 with the minimum of fuzz.
7828
7829 Gnus adds @dfn{buttons} to certain standard references by default:
7830 Well-formed URLs, mail addresses and Message-IDs.  This is controlled by
7831 two variables, one that handles article bodies and one that handles
7832 article heads:
7833
7834 @table @code
7835
7836 @item gnus-button-alist
7837 @vindex gnus-header-button-alist
7838 This is an alist where each entry has this form:
7839
7840 @lisp
7841 (REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
7842 @end lisp
7843
7844 @table @var
7845
7846 @item regexp
7847 All text that match this regular expression will be considered an
7848 external reference.  Here's a typical regexp that match embedded URLs:
7849 @samp{"<URL:\\([^\n\r>]*\\)>"}. 
7850
7851 @item button-par
7852 Gnus has to know which parts of the match is to be highlighted.  This is
7853 a number that says what sub-expression of the regexp that is to be
7854 highlighted.  If you want it all highlighted, you use @samp{0} here.
7855
7856 @item use-p
7857 This form will be @code{eval}ed, and if the result is non-@code{nil},
7858 this is considered a match.  This is useful if you want extra sifting to
7859 avoid false matches.
7860
7861 @item function
7862 This function will be called when you click on this button.
7863
7864 @item data-par
7865 As with @var{button-par}, this is a sub-expression number, but this one
7866 says which part of the match is to be sent as data to @var{function}. 
7867
7868 @end table
7869
7870 So the full entry for buttonizing URLs is then
7871
7872 @lisp
7873 ("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
7874 @end lisp
7875
7876 @item gnus-header-button-alist
7877 @vindex gnus-header-button-alist
7878 This is just like the other alist, except that it is applied to the
7879 article head only, and that each entry has an additional element that is
7880 used to say what headers to apply the buttonize coding to:
7881
7882 @lisp
7883 (HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
7884 @end lisp
7885
7886 @var{header} is a regular expression.
7887
7888 @end table
7889
7890 @vindex gnus-article-button-face
7891 @vindex gnus-article-mouse-face
7892 Buttons are highlighted with @code{gnus-article-button-face}, while
7893 @code{gnus-article-mouse-face} is used when the mouse cursor is over the
7894 button.
7895
7896
7897 @node Article Date
7898 @subsection Article Date
7899
7900 The date is most likely generated in some obscure timezone you've never
7901 heard of, so it's quite nice to be able to find out what the time was
7902 when the article was sent.
7903
7904 @table @kbd
7905
7906 @item W T u
7907 @kindex W T u (Summary)
7908 @findex gnus-article-date-ut
7909 Display the date in UT (aka. GMT, aka ZULU)
7910 (@code{gnus-article-date-ut}). 
7911
7912 @item W T l
7913 @kindex W T l (Summary)
7914 @findex gnus-article-date-local
7915 Display the date in the local timezone (@code{gnus-article-date-local}).
7916
7917 @item W T e
7918 @kindex W T e (Summary)
7919 @findex gnus-article-date-lapsed
7920 Say how much time has (e)lapsed between the article was posted and now
7921 (@code{gnus-article-date-lapsed}).
7922
7923 @item W T o
7924 @kindex W T o (Summary)
7925 @findex gnus-article-date-original
7926 Display the original date (@code{gnus-article-date-original}).  This can
7927 be useful if you normally use some other conversion function and is
7928 worried that it might be doing something totally wrong.  Say, claiming
7929 that the article was posted in 1854.  Although something like that is
7930 @emph{totally} impossible.  Don't you trust me? *titter*
7931
7932 @end table
7933
7934
7935 @node Summary Sorting
7936 @section Summary Sorting
7937 @cindex summary sorting
7938
7939 You can have the summary buffer sorted in various ways, even though I
7940 can't really see why you'd want that.
7941
7942 @table @kbd
7943
7944 @item C-c C-s C-n
7945 @kindex C-c C-s C-n (Summary)
7946 @findex gnus-summary-sort-by-number
7947 Sort by article number (@code{gnus-summary-sort-by-number}).
7948
7949 @item C-c C-s C-a
7950 @kindex C-c C-s C-a (Summary)
7951 @findex gnus-summary-sort-by-author
7952 Sort by author (@code{gnus-summary-sort-by-author}).
7953
7954 @item C-c C-s C-s
7955 @kindex C-c C-s C-s (Summary)
7956 @findex gnus-summary-sort-by-subject
7957 Sort by subject (@code{gnus-summary-sort-by-subject}).
7958
7959 @item C-c C-s C-d
7960 @kindex C-c C-s C-d (Summary)
7961 @findex gnus-summary-sort-by-date
7962 Sort by date (@code{gnus-summary-sort-by-date}).
7963
7964 @item C-c C-s C-i
7965 @kindex C-c C-s C-i (Summary)
7966 @findex gnus-summary-sort-by-score
7967 Sort by score (@code{gnus-summary-sort-by-score}).
7968 @end table
7969
7970 These functions will work both when you use threading and when you don't
7971 use threading.  In the latter case, all summary lines will be sorted,
7972 line by line.  In the former case, sorting will be done on a
7973 root-by-root basis, which might not be what you were looking for.  To
7974 toggle whether to use threading, type @kbd{T T} (@pxref{Thread
7975 Commands}).
7976
7977
7978 @node Finding the Parent
7979 @section Finding the Parent
7980 @cindex parent articles
7981 @cindex referring articles
7982
7983 @findex gnus-summary-refer-parent-article
7984 @kindex ^ (Summary)
7985 If you'd like to read the parent of the current article, and it is not
7986 displayed in the article buffer, you might still be able to.  That is,
7987 if the current group is fetched by @sc{nntp}, the parent hasn't expired
7988 and the @code{References} in the current article are not mangled, you
7989 can just press @kbd{^} or @kbd{A r}
7990 (@code{gnus-summary-refer-parent-article}).  If everything goes well,
7991 you'll get the parent.  If the parent is already displayed in the
7992 summary buffer, point will just move to this article.
7993
7994 @findex gnus-summary-refer-references
7995 @kindex A R (Summary)
7996 You can have Gnus fetch all articles mentioned in the @code{References}
7997 header of the article by pushing @kbd{A R}
7998 (@code{gnus-summary-refer-references}). 
7999
8000 @findex gnus-summary-refer-article
8001 @kindex M-^ (Summary)
8002 You can also ask the @sc{nntp} server for an arbitrary article, no
8003 matter what group it belongs to.  @kbd{M-^}
8004 (@code{gnus-summary-refer-article}) will ask you for a
8005 @code{Message-ID}, which is one of those long thingies that look
8006 something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You have to get
8007 it all exactly right.  No fuzzy searches, I'm afraid.
8008
8009 @vindex gnus-refer-article-method
8010 If the group you are reading is located on a backend that does not
8011 support fetching by @code{Message-ID} very well (like @code{nnspool}),
8012 you can set @code{gnus-refer-article-method} to an @sc{nntp} method.  It
8013 would, perhaps, be best if the @sc{nntp} server you consult is the same
8014 as the one that keeps the spool you are reading from updated, but that's
8015 not really necessary.
8016
8017 Most of the mail backends support fetching by @code{Message-ID}, but do
8018 not do a particularly excellent job of it.  That is, @code{nnmbox} and
8019 @code{nnbabyl} are able to locate articles from any groups, while
8020 @code{nnml} and @code{nnfolder} are only able to locate articles that
8021 have been posted to the current group.  (Anything else would be too time
8022 consuming.)  @code{nnmh} does not support this at all.
8023
8024
8025 @node Alternative Approaches
8026 @section Alternative Approaches
8027
8028 Different people like to read news using different methods.  This being
8029 Gnus, we offer a small selection of minor modes for the summary buffers.
8030
8031 @menu
8032 * Pick and Read::               First mark articles and then read them.
8033 * Binary Groups::               Auto-decode all articles.
8034 @end menu
8035
8036
8037 @node Pick and Read
8038 @subsection Pick and Read
8039 @cindex pick and read
8040
8041 Some newsreaders (like @code{nn} and, uhm, @code{nn}) use a two-phased
8042 reading interface.  The user first marks the articles she wants to read
8043 from a summary buffer.  Then she starts reading the articles with just
8044 an article buffer displayed.
8045
8046 @findex gnus-pick-mode
8047 @kindex M-x gnus-pick-mode
8048 Gnus provides a summary buffer minor mode that allows
8049 this---@code{gnus-pick-mode}.  This basically means that a few process
8050 mark commands becode one-keystroke commands to allow easy marking, and
8051 it makes one additional command for switching to the summary buffer
8052 available. 
8053
8054 Here are the available keystrokes when using pick mode:
8055
8056 @table @kbd
8057 @item SPC
8058 Pick the article (@code{gnus-summary-mark-as-processable}). 
8059
8060 @item u
8061 Unpick the article (@code{gnus-summary-unmark-as-processable}). 
8062
8063 @item U
8064 Unpick all articles (@code{gnus-summary-unmark-all-processable}). 
8065
8066 @item t
8067 Pick the thread (@code{gnus-uu-mark-thread}). 
8068
8069 @item T
8070 Unpick the thread (@code{gnus-uu-unmark-thread}). 
8071
8072 @item r
8073 Pick the region (@code{gnus-uu-mark-region}). 
8074
8075 @item R
8076 Unpick the region (@code{gnus-uu-unmark-region}). 
8077
8078 @item e
8079 Pick articles that match a regexp (@code{gnus-uu-unmark-regexp}). 
8080
8081 @item E
8082 Unpick articles that match a regexp (@code{gnus-uu-unmark-regexp}). 
8083
8084 @item b
8085 Pick the buffer (@code{gnus-uu-mark-buffer}). 
8086
8087 @item B
8088 Unpick the buffer (@code{gnus-uu-unmark-buffer}). 
8089
8090 @item RET
8091 @vindex gnus-pick-display-summary
8092 Start reading the picked articles (@code{gnus-pick-start-reading}).  If
8093 given a prefix, mark all unpicked articles as read first.  If
8094 @code{gnus-pick-display-summary} is non-@code{nil}, the summary buffer
8095 will still be visible when you are reading.
8096
8097 @end table
8098
8099 If this sounds like a good idea to you, you could say:
8100
8101 @lisp
8102 (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
8103 @end lisp
8104
8105
8106 @node Binary Groups
8107 @subsection Binary Groups
8108 @cindex binary groups
8109
8110 @findex gnus-binary-mode
8111 @kindex M-x gnus-binary-mode
8112 If you spend much time in binary groups, you may grow tired of hitting
8113 @kbd{X u}, @kbd{n}, @kbd{RET} all the time.  @kbd{M-x gnus-binary-mode}
8114 is a minor mode for summary buffers that makes all ordinary Gnus article
8115 selection functions uudecode series of articles and display the result
8116 instead of just displaying the articles the normal way.  
8117
8118 @kindex g (Binary)
8119 @findex gnus-binary-show-article
8120 In fact, the only way to see the actual articles if you have turned this
8121 mode on is the @kbd{g} command (@code{gnus-binary-show-article}). 
8122
8123
8124 @node Tree Display
8125 @section Tree Display
8126 @cindex trees
8127
8128 @vindex gnus-use-trees
8129 If you don't like the normal Gnus summary display, you might try setting
8130 @code{gnus-use-trees} to @code{t}.  This will create (by default) an
8131 additional @dfn{tree buffer}.  You can execute all summary mode commands
8132 in the tree buffer.  
8133
8134 There are a few variables to customize the tree display, of course:
8135
8136 @table @code
8137 @item gnus-tree-mode-hook
8138 @vindex gnus-tree-mode-hook
8139 A hook called in all tree mode buffers.
8140
8141 @item gnus-tree-mode-line-format
8142 @vindex gnus-tree-mode-line-format
8143 A format string for the mode bar in the tree mode buffers.  The default
8144 is @samp{"Gnus: %%b [%A] %Z"}.  For a list of legal specs, @xref{Summary
8145 Buffer Mode Line}. 
8146
8147 @item gnus-selected-tree-face
8148 @vindex gnus-selected-tree-face
8149 Face used for highlighting the selected article in the tree buffer.  The
8150 default is @code{modeline}.
8151
8152 @item gnus-tree-line-format
8153 @vindex gnus-tree-line-format
8154 A format string for the tree nodes.  The name is a bit of a misnomer,
8155 though---it doesn't define a line, but just the node.  The default value
8156 is @samp{"%(%[%3,3n%]%)"}, which displays the first three characters of
8157 the name of the poster.  It is vital that all nodes are of the same
8158 length, so you @emph{must} use @samp{%4,4n}-like specifiers.
8159
8160 Legal specs are:
8161
8162 @table @samp
8163 @item n
8164 The name of the poster.
8165 @item f
8166 The @code{From} header.
8167 @item N
8168 The number of the article.
8169 @item [
8170 The opening bracket.
8171 @item ] 
8172 The closing bracket.
8173 @item s
8174 The subject.
8175 @end table
8176
8177 @xref{Formatting Variables}.
8178
8179 Variables related to the display are:
8180
8181 @table @code
8182 @item gnus-tree-brackets
8183 @vindex gnus-tree-brackets
8184 This is used for differentiating between ``real'' articles and ``sparse''
8185 articles.  The format is @var{((real-open . real-close) (sparse-open
8186 . sparse-close) (dummy-open . dummy-close))}, and the default is
8187 @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}))}.
8188
8189 @item gnus-tree-parent-child-edges
8190 @vindex gnus-tree-parent-child-edges
8191 This is a list that contains the characters used for connecting parent
8192 nodes to their children.  The default is @code{(?- ?\\ ?|)}. 
8193
8194 @end table
8195
8196 @item gnus-tree-minimize-window
8197 @vindex gnus-tree-minimize-window
8198 If this variable is non-@code{nil}, Gnus will try to keep the tree
8199 buffer as small as possible to allow more room for the other Gnus
8200 windows.  If this variable is a number, the tree buffer will never be
8201 higher than that number.  The default is @code{t}.
8202
8203 @item gnus-generate-tree-function
8204 @vindex gnus-generate-tree-function
8205 @findex gnus-generate-horizontal-tree
8206 @findex gnus-generate-vertical-tree
8207 The function that actually generates the thread tree.  Two predefined
8208 functions are available: @code{gnus-generate-horizontal-tree} and
8209 @code{gnus-generate-vertical-tree} (which is the default).
8210
8211 @end table
8212
8213 Here's and example from a horizontal tree buffer:
8214
8215 @example
8216 @{***@}-(***)-[odd]-[Gun]
8217      |     \[Jan]
8218      |     \[odd]-[Eri]
8219      |     \(***)-[Eri]
8220      |           \[odd]-[Paa]
8221      \[Bjo]
8222      \[Gun]
8223      \[Gun]-[Jor]
8224 @end example
8225
8226 Here's the same thread displayed in a vertical tree buffer:
8227
8228 @example
8229 @{***@}
8230   |--------------------------\-----\-----\
8231 (***)                         [Bjo] [Gun] [Gun]
8232   |--\-----\-----\                          |
8233 [odd] [Jan] [odd] (***)                   [Jor]
8234   |           |     |--\
8235 [Gun]       [Eri] [Eri] [odd]
8236                           |
8237                         [Paa]
8238 @end example
8239
8240
8241 @node Mail Group Commands
8242 @section Mail Group Commands
8243 @cindex mail group commands
8244
8245 Some commands only make sense in mail groups.  If these commands are
8246 illegal in the current group, they will raise a hell and let you know.
8247
8248 All these commands (except the expiry and edit commands) use the
8249 process/prefix convention (@pxref{Process/Prefix}).
8250
8251 @table @kbd
8252
8253 @item B e
8254 @kindex B e (Summary)
8255 @findex gnus-summary-expire-articles
8256 Expire all expirable articles in the group
8257 (@code{gnus-summary-expire-articles}).
8258
8259 @item B M-C-e
8260 @kindex B M-C-e (Summary)
8261 @findex gnus-summary-expire-articles-now
8262 Expunge all the expirable articles in the group
8263 (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
8264 articles that are eligeble for expiry in the current group will
8265 disappear forever into that big @file{/dev/null} in the sky.
8266
8267 @item B DEL
8268 @kindex B DEL (Summary)
8269 @findex gnus-summary-delete-articles
8270 Delete the mail article.  This is ``delete'' as in ``delete it from your
8271 disk forever and ever, never to return again.'' Use with caution.
8272 (@code{gnus-summary-delete-article}).
8273
8274 @item B m
8275 @kindex B m (Summary)
8276 @cindex move mail
8277 @findex gnus-summary-move-article
8278 Move the article from one mail group to another
8279 (@code{gnus-summary-move-article}). 
8280
8281 @item B c
8282 @kindex B c (Summary)
8283 @cindex copy mail
8284 @findex gnus-summary-copy-article
8285 Copy the article from one group (mail group or not) to a mail group
8286 (@code{gnus-summary-copy-article}).
8287
8288 @item B C
8289 @kindex B C (Summary)
8290 @cindex crosspost mail
8291 @findex gnus-summary-crosspost-article
8292 Crosspost the current article to some other group
8293 (@code{gnus-summary-crosspost-article}).  This will create a new copy of
8294 the article in the other group, and the Xref headers of the article will
8295 be properly updated.
8296
8297 @item B i
8298 @kindex B i (Summary)
8299 @findex gnus-summary-import-article
8300 Import a random file into the current mail newsgroup
8301 (@code{gnus-summary-import-article}).  You will be prompted for a file
8302 name, a @code{From} header and a @code{Subject} header.
8303
8304 Something similar can be done by just starting to compose a mail
8305 message.  Instead of typing @kbd{C-c C-c} to mail it off, you can type
8306 @kbd{C-c C-p} instead.  This will put the message you have just created
8307 into the current mail group.
8308
8309 @item B r
8310 @kindex B r (Summary)
8311 @findex gnus-summary-respool-article
8312 Respool the mail article (@code{gnus-summary-move-article}).
8313
8314 @item B w
8315 @itemx e
8316 @kindex B w (Summary)
8317 @kindex e (Summary)
8318 @findex gnus-summary-edit-article
8319 @kindex C-c C-c (Article)
8320 Edit the current article (@code{gnus-summary-edit-article}).  To finish
8321 editing and make the changes permanent, type @kbd{C-c C-c}
8322 (@kbd{gnus-summary-edit-article-done}).
8323
8324 @item B q
8325 @kindex B q (Summary)
8326 @findex gnus-summary-respool-query
8327 If you want to respool an article, you might be curious as to what group
8328 the article will end up in before you do the respooling.  This command
8329 will tell you (@code{gnus-summary-fancy-query}). 
8330 @end table
8331
8332 If you move (or copy) articles regularly, you might wish to have Gnus
8333 suggest where to put the articles.  @code{gnus-move-split-methods} is a
8334 variable that uses the same syntax as @code{gnus-split-methods}
8335 (@pxref{Saving Articles}).  You may customize that variable to create
8336 suggestions you find reasonable.
8337
8338
8339 @node Various Summary Stuff
8340 @section Various Summary Stuff
8341
8342 @menu
8343 * Group Information::                 Information oriented commands.
8344 * Searching for Articles::            Multiple article commands.
8345 * Really Various Summary Commands::   Those pesky non-conformant commands.
8346 @end menu
8347
8348 @vindex gnus-summary-generate-hook
8349 @code{gnus-summary-generate-hook} is called as the last thing before
8350 doing the threading and the generation of the summary buffer.  It's
8351 quite convenient for customizing the threading variables based on what
8352 data the newsgroup has.  This hook is called from the summary buffer
8353 after most summary buffer variables has been set.
8354
8355 @vindex gnus-summary-prepare-hook
8356 @code{gnus-summary-prepare-hook} is called after the summary buffer has
8357 been generated.  You might use it to, for instance, highlight lines or
8358 modify the look of the buffer in some other ungodly manner.  I don't
8359 care.
8360
8361 @node Group Information
8362 @subsection Group Information
8363
8364 @table @kbd
8365
8366 @item H f
8367 @kindex H f (Summary)
8368 @findex gnus-summary-fetch-faq
8369 @vindex gnus-group-faq-directory
8370 Try to fetch the FAQ (list of frequently asked questions) for the
8371 current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
8372 FAQ from @code{gnus-group-faq-directory}, which is usually a directory
8373 on a remote machine.  This variable can also be a list of directories.
8374 In that case, giving a prefix to this command will allow you to choose
8375 between the various sites.  @code{ange-ftp} probably will be used for
8376 fetching the file.
8377
8378 @item H d
8379 @kindex H d (Summary)
8380 @findex gnus-summary-describe-group
8381 Give a brief description of the current group
8382 (@code{gnus-summary-describe-group}).  If given a prefix, force
8383 rereading the description from the server.
8384
8385 @item H h
8386 @kindex H h (Summary)
8387 @findex gnus-summary-describe-briefly
8388 Give a very brief description of the most important summary keystrokes
8389 (@code{gnus-summary-describe-briefly}). 
8390
8391 @item H i
8392 @kindex H i (Summary)
8393 @findex gnus-info-find-node
8394 Go to the Gnus info node (@code{gnus-info-find-node}).
8395 @end table
8396
8397 @node Searching for Articles
8398 @subsection Searching for Articles
8399
8400 @table @kbd
8401
8402 @item M-s
8403 @kindex M-s (Summary)
8404 @findex gnus-summary-search-article-forward
8405 Search through all subsequent articles for a regexp
8406 (@code{gnus-summary-search-article-forward}). 
8407
8408 @item M-r
8409 @kindex M-r (Summary)
8410 @findex gnus-summary-search-article-backward
8411 Search through all previous articles for a regexp
8412 (@code{gnus-summary-search-article-backward}). 
8413
8414 @item &
8415 @kindex & (Summary)
8416 @findex gnus-summary-execute-command
8417 This command will prompt you for a header field, a regular expression to
8418 match on this field, and a command to be executed if the match is made
8419 (@code{gnus-summary-execute-command}).
8420
8421 @item M-&
8422 @kindex M-& (Summary)
8423 @findex gnus-summary-universal-argument
8424 Perform any operation on all articles that have been marked with
8425 the process mark (@code{gnus-summary-universal-argument}).
8426 @end table
8427
8428 @node Really Various Summary Commands
8429 @subsection Really Various Summary Commands
8430
8431 @table @kbd
8432
8433 @item A D
8434 @kindex A D (Summary)
8435 @findex gnus-summary-enter-digest-group
8436 If the current article is a collection of other articles (for instance,
8437 a digest), you might use this command to enter a group based on the that
8438 article (@code{gnus-summary-enter-digest-group}).  Gnus will try to
8439 guess what article type is currently displayed unless you give a prefix
8440 to this command, which forces a ``digest'' interpretation.  Basically,
8441 whenever you see a message that is a collection of other messages on
8442 some format, you @kbd{A D} and read these messages in a more convenient
8443 fashion. 
8444
8445 @item C-t
8446 @kindex C-t (Summary)
8447 @findex gnus-summary-toggle-truncation
8448 Toggle truncation of summary lines (@code{gnus-summary-toggle-truncation}).
8449
8450 @item =
8451 @kindex = (Summary)
8452 @findex gnus-summary-expand-window
8453 Expand the summary buffer window (@code{gnus-summary-expand-window}).
8454 If given a prefix, force an @code{article} window configuration. 
8455 @end table
8456
8457
8458 @node The Article Buffer
8459 @chapter The Article Buffer
8460 @cindex article buffer
8461
8462 The articles are displayed in the article buffer, of which there is only
8463 one.  All the summary buffers share the same article buffer unless you
8464 tell Gnus otherwise.
8465
8466 @menu
8467 * Hiding Headers::        Deciding what headers should be displayed.
8468 * Using MIME::            Pushing articles through @sc{mime} before reading them.
8469 * Customizing Articles::  Tailoring the look of the articles.
8470 * Article Keymap::        Keystrokes available in the article buffer
8471 * Misc Article::          Other stuff.
8472 @end menu
8473
8474
8475 @node Hiding Headers
8476 @section Hiding Headers
8477 @cindex hiding headers
8478 @cindex deleting headers
8479
8480 The top section of each article is the @dfn{head}.  (The rest is the
8481 @dfn{body}, but you may have guessed that already.)
8482
8483 @vindex gnus-show-all-headers
8484 There is a lot of useful information in the head: the name of the person
8485 who wrote the article, the date it was written and the subject of the
8486 article.  That's well and nice, but there's also lots of information
8487 most people do not want to see---what systems the article has passed
8488 through before reaching you, the @code{Message-ID}, the
8489 @code{References}, etc. ad nauseum---and you'll probably want to get rid
8490 of some of those lines.  If you want to keep all those lines in the
8491 article buffer, you can set @code{gnus-show-all-headers} to @code{t}.
8492
8493 Gnus provides you with two variables for sifting headers:
8494
8495 @table @code
8496
8497 @item gnus-visible-headers
8498 @vindex gnus-visible-headers
8499 If this variable is non-@code{nil}, it should be a regular expression
8500 that says what headers you wish to keep in the article buffer.  All
8501 headers that do not match this variable will be hidden.
8502
8503 For instance, if you only want to see the name of the person who wrote
8504 the article and the subject, you'd say:
8505
8506 @lisp
8507 (setq gnus-visible-headers "^From:\\|^Subject:")
8508 @end lisp
8509
8510 This variable can also be a list of regexps to match headers that are to
8511 remain visible.
8512
8513 @item gnus-ignored-headers
8514 @vindex gnus-ignored-headers
8515 This variable is the reverse of @code{gnus-visible-headers}.  If this
8516 variable is set (and @code{gnus-visible-headers} is @code{nil}), it
8517 should be a regular expression that matches all lines that you want to
8518 hide.  All lines that do not match this variable will remain visible.
8519
8520 For instance, if you just want to get rid of the @code{References} line
8521 and the @code{Xref} line, you might say:
8522
8523 @lisp
8524 (setq gnus-ignored-headers "^References:\\|^Xref:")
8525 @end lisp
8526
8527 This variable can also be a list of regexps to match headers that are to
8528 be removed.
8529
8530 Note that if @code{gnus-visible-headers} is non-@code{nil}, this
8531 variable will have no effect.
8532
8533 @end table
8534
8535 @vindex gnus-sorted-header-list
8536 Gnus can also sort the headers for you.  (It does this by default.)  You
8537 can control the sorting by setting the @code{gnus-sorted-header-list}
8538 variable.  It is a list of regular expressions that says in what order
8539 the headers are to be displayed.
8540
8541 For instance, if you want the name of the author of the article first,
8542 and then the subject, you might say something like:
8543
8544 @lisp
8545 (setq gnus-sorted-header-list '("^From:" "^Subject:"))
8546 @end lisp
8547
8548 Any headers that are to remain visible, but are not listed in this
8549 variable, will be displayed in random order after all the headers that
8550 are listed in this variable.
8551
8552 @findex gnus-article-hide-boring-headers
8553 @vindex gnus-article-display-hook
8554 @vindex gnus-boring-article-headers
8555 You can hide further boring headers by entering
8556 @code{gnus-article-hide-boring-headers} into
8557 @code{gnus-article-display-hook}.  What this function does depends on
8558 the @code{gnus-boring-article-headers} variable.  It's a list, but this
8559 list doesn't actually contain header names.  Instead is lists various
8560 @dfn{boring conditions} that Gnus can check and remove from sight.
8561
8562 These conditions are:
8563 @table @code
8564 @item empty
8565 Remove all empty headers.
8566 @item newsgroups
8567 Remove the @code{Newsgroups} header if it only contains the current group
8568 name. 
8569 @item followup-to
8570 Remove the @code{Followup-To} header if it is identical to the
8571 @code{Newsgroups} header.
8572 @item reply-to
8573 Remove the @code{Reply-To} header if it lists the same address as the
8574 @code{From} header.
8575 @item date
8576 Remove the @code{Date} header if the article is less than three days
8577 old. 
8578 @end table
8579
8580 To include the four first elements, you could say something like;
8581
8582 @lisp
8583 (setq gnus-boring-article-headers 
8584       '(empty newsgroups followup-to reply-to))
8585 @end lisp
8586
8587 This is also the default value for this variable.
8588
8589
8590 @node Using MIME
8591 @section Using @sc{mime}
8592 @cindex @sc{mime}
8593
8594 Mime is a standard for waving your hands through the air, aimlessly,
8595 while people stand around yawning.
8596
8597 @sc{mime}, however, is a standard for encoding your articles, aimlessly,
8598 while all newsreaders die of fear.
8599
8600 @sc{mime} may specify what character set the article uses, the encoding
8601 of the characters, and it also makes it possible to embed pictures and
8602 other naughty stuff in innocent-looking articles.
8603
8604 @vindex gnus-show-mime
8605 @vindex gnus-show-mime-method
8606 @vindex gnus-strict-mime
8607 Gnus handles @sc{mime} by shoving the articles through
8608 @code{gnus-show-mime-method}, which is @code{metamail-buffer} by
8609 default.  Set @code{gnus-show-mime} to @code{t} if you want to use
8610 @sc{mime} all the time.  However, if @code{gnus-strict-mime} is
8611 non-@code{nil}, the @sc{mime} method will only be used if there are
8612 @sc{mime} headers in the article.
8613
8614 It might be best to just use the toggling functions from the summary
8615 buffer to avoid getting nasty surprises. (For instance, you enter the
8616 group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has
8617 decoded the sound file in the article and some horrible sing-a-long song
8618 comes streaming out out your speakers, and you can't find the volume
8619 button, because there isn't one, and people are starting to look at you,
8620 and you try to stop the program, but you can't, and you can't find the
8621 program to control the volume, and everybody else in the room suddenly
8622 decides to look at you disdainfully, and you'll feel rather stupid.)
8623
8624 Any similarity to real events and people is purely coincidental.  Ahem.
8625
8626
8627 @node Customizing Articles
8628 @section Customizing Articles
8629 @cindex article customization
8630
8631 @vindex gnus-article-display-hook
8632 The @code{gnus-article-display-hook} is called after the article has
8633 been inserted into the article buffer.  It is meant to handle all
8634 treatment of the article before it is displayed. 
8635
8636 By default it contains @code{gnus-article-hide-headers},
8637 @code{gnus-article-treat-overstrike}, and
8638 @code{gnus-article-maybe-highlight}, but there are thousands, nay
8639 millions, of functions you can put in this hook.  For an overview of
8640 functions @xref{Article Highlighting}, @xref{Article Hiding},
8641 @xref{Article Washing}, @xref{Article Buttons} and @xref{Article Date}. 
8642
8643 You can, of course, write your own functions.  The functions are called
8644 from the article buffer, and you can do anything you like, pretty much.
8645 There is no information that you have to keep in the buffer---you can
8646 change everything.  However, you shouldn't delete any headers.  Instead
8647 make them invisible if you want to make them go away.
8648
8649
8650 @node Article Keymap
8651 @section Article Keymap
8652
8653 Most of the keystrokes in the summary buffer can also be used in the
8654 article buffer.  They should behave as if you typed them in the summary
8655 buffer, which means that you don't actually have to have a summary
8656 buffer displayed while reading.  You can do it all from the article
8657 buffer.
8658
8659 A few additional keystrokes are available:
8660
8661 @table @kbd
8662
8663 @item SPACE
8664 @kindex SPACE (Article)
8665 @findex gnus-article-next-page
8666 Scroll forwards one page (@code{gnus-article-next-page}).
8667
8668 @item DEL
8669 @kindex DEL (Article)
8670 @findex gnus-article-prev-page
8671 Scroll backwards one page (@code{gnus-article-prev-page}).
8672
8673 @item C-c ^
8674 @kindex C-c ^ (Article)
8675 @findex gnus-article-refer-article
8676 If point is in the neighborhood of a @code{Message-ID} and you press
8677 @kbd{r}, Gnus will try to get that article from the server
8678 (@code{gnus-article-refer-article}).
8679
8680 @item C-c C-m
8681 @kindex C-c C-m (Article)
8682 @findex gnus-article-mail
8683 Send a reply to the address near point (@code{gnus-article-mail}).  If
8684 given a prefix, include the mail.
8685
8686 @item s
8687 @kindex s (Article)
8688 @findex gnus-article-show-summary
8689 Reconfigure the buffers so that the summary buffer becomes visible
8690 (@code{gnus-article-show-summary}).
8691
8692 @item ?
8693 @kindex ? (Article)
8694 @findex gnus-article-describe-briefly
8695 Give a very brief description of the available keystrokes
8696 (@code{gnus-article-describe-briefly}). 
8697
8698 @item TAB
8699 @kindex TAB (Article)
8700 @findex gnus-article-next-button
8701 Go to the next button, if any (@code{gnus-article-next-button}.  This
8702 only makes sense if you have buttonizing turned on.
8703
8704 @item M-TAB
8705 @kindex M-TAB (Article)
8706 @findex gnus-article-prev-button
8707 Go to the previous button, if any (@code{gnus-article-prev-button}.  
8708
8709 @end table
8710
8711
8712 @node Misc Article
8713 @section Misc Article
8714
8715 @table @code
8716
8717 @item gnus-single-article-buffer
8718 @vindex gnus-single-article-buffer
8719 If non-@code{nil}, use the same article buffer for all the groups.
8720 (This is the default.)  If @code{nil}, each group will have its own
8721 article buffer.
8722
8723 @vindex gnus-article-prepare-hook
8724
8725 @item gnus-article-prepare-hook
8726 This hook is called right after the article has been inserted into the
8727 article buffer.  It is mainly intended for functions that do something
8728 depending on the contents; it should probably not be used for changing
8729 the contents of the article buffer.
8730 @vindex gnus-article-display-hook
8731
8732 @item gnus-article-display-hook
8733 This hook is called as the last thing when displaying an article, and is
8734 intended for modifying the contents of the buffer, doing highlights,
8735 hiding headers, and the like.
8736 @vindex gnus-article-mode-line-format
8737
8738 @item gnus-article-mode-line-format
8739 This variable is a format string along the same lines as
8740 @code{gnus-summary-mode-line-format}.  It accepts exactly the same
8741 format specifications as that variable.
8742 @vindex gnus-break-pages
8743
8744 @item gnus-break-pages
8745 Controls whether @dfn{page breaking} is to take place.  If this variable
8746 is non-@code{nil}, the articles will be divided into pages whenever a
8747 page delimiter appears in the article.  If this variable is @code{nil},
8748 paging will not be done.
8749
8750 @item gnus-page-delimiter
8751 @vindex gnus-page-delimiter
8752 This is the delimiter mentioned above.  By default, it is @samp{^L}
8753 (form linefeed).
8754 @end table
8755
8756 @node The Server Buffer
8757 @chapter The Server Buffer
8758
8759 Traditionally, a @dfn{server} is a machine or a piece of software that
8760 one connects to, and then requests information from.  Gnus does not
8761 connect directly to any real servers, but does all transactions through
8762 one backend or other.  But that's just putting one layer more between
8763 the actual media and Gnus, so we might just as well say that each
8764 backend represents a virtual server.
8765
8766 For instance, the @code{nntp} backend may be used to connect to several
8767 different actual @sc{nntp} servers, or, perhaps, to many different ports
8768 on the same actual @sc{nntp} server.  You tell Gnus which backend to
8769 use, and what parameters to set by specifying a @dfn{select method}.
8770
8771 These select methods specifications can sometimes become quite
8772 complicated---say, for instance, that you want to read from the
8773 @sc{nntp} server @samp{news.funet.fi} on port number @samp{13}, which
8774 hangs if queried for @sc{nov} headers and has a buggy select.  Ahem.
8775 Anyways, if you had to specify that for each group that used this
8776 server, that would be too much work, so Gnus offers a way of putting
8777 names to methods, which is what you do in the server buffer.
8778
8779 To enter the server buffer, user the @kbd{^}
8780 (@code{gnus-group-enter-server-mode}) command in the group buffer.
8781
8782 @menu
8783 * Server Buffer Format::   You can customize the look of this buffer.
8784 * Server Commands::        Commands to manipulate servers.
8785 * Example Methods::        Examples server specifications.
8786 * Servers ant Methods::    You can use server names as select methods.
8787 * Unavailable Servers::    Some servers you try to contact may be down.
8788 @end menu
8789
8790 @node Server Buffer Format
8791 @section Server Buffer Format
8792 @cindex server buffer format
8793
8794 @vindex gnus-server-line-format
8795 You can change the look of the server buffer lines by changing the
8796 @code{gnus-server-line-format} variable.  This is a @code{format}-like
8797 variable, with some simple extensions:
8798
8799 @table @samp
8800
8801 @item h 
8802 How the news is fetched---the backend name.
8803
8804 @item n
8805 The name of this server.
8806
8807 @item w
8808 Where the news is to be fetched from---the address.
8809 @end table
8810
8811 @node Server Commands
8812 @section Server Commands
8813 @cindex server commands
8814
8815 @table @kbd
8816
8817 @item SPC
8818 Browse the current server (@code{gnus-server-read-server}).
8819
8820 @item q
8821 Return to the group buffer (@code{gnus-server-exit}).
8822
8823 @item l
8824 List all servers (@code{gnus-server-list-servers}).
8825
8826 @item k
8827 Kill the current server (@code{gnus-server-kill-server}).
8828
8829 @item y
8830 Yank the previously killed server (@code{gnus-server-yank-server}).
8831
8832 @item c
8833 Copy the current server (@code{gnus-server-copy-server}).
8834
8835 @item a
8836 Add a new server (@code{gnus-server-add-server}).
8837
8838 @item e
8839 Edit a server (@code{gnus-server-edit-server}).
8840 @end table
8841
8842 @node Example Methods
8843 @section Example Methods
8844
8845 Most select methods are pretty simple and self-explanatory: 
8846
8847 @lisp
8848 (nntp "news.funet.fi")
8849 @end lisp
8850
8851 Reading directly from the spool is even simpler:
8852
8853 @lisp
8854 (nnspool "")
8855 @end lisp
8856
8857 As you can see, the first element in a select method is the name of the
8858 backend, and the second is the @dfn{address}, or @dfn{name}, if you
8859 will. 
8860
8861 After these two elements, there may be a random number of @var{(variable
8862 form)} pairs.
8863
8864 To go back to the first example---imagine that you want to read from
8865 port @code{15} from that machine.  This is what the select method should
8866 look like then:
8867
8868 @lisp
8869 (nntp "news.funet.fi" (nntp-port-number 15))
8870 @end lisp
8871
8872 You should read the documentation to each backend to find out what
8873 variables are relevant, but here's an @code{nnmh} example. 
8874
8875 @code{nnmh} is a mail backend that reads a spool-like structure.  Say
8876 you have two structures that you wish to access: One is your private
8877 mail spool, and the other is a public one.  Here's the possible spec for
8878 you private mail:
8879
8880 @lisp
8881 (nnmh "private" (nnmh-directory "~/private/mail/"))
8882 @end lisp
8883
8884 (This server is then called @samp{private}, but you may have guessed
8885 that. 
8886
8887 Here's the method for the public spool:
8888
8889 @lisp
8890 (nnmh "public" 
8891       (nnmh-directory "/usr/information/spool/") 
8892       (nnmh-get-new-mail nil))
8893 @end lisp
8894
8895 @node Servers and Methods
8896 @section Servers and Methods
8897
8898 Wherever you would normally use a select method
8899 (eg. @code{gnus-secondary-select-method}, in the group select method,
8900 when browsing a foreign server) you can use a virtual server name
8901 instead.  This could potentially save lots of typing.  And it's nice all
8902 over.
8903
8904
8905 @node Unavailable Servers
8906 @section Unavailable Servers
8907
8908 If a server seems to be unreachable, Gnus will mark that server as
8909 @code{denied}.  That means that any subsequent attempt to make contact
8910 with that server will just be ignored.  ``It can't be opened,'' Gnus will
8911 tell you, without making the least effort to see whether that is
8912 actually the case or not.  
8913
8914 That might seem quite naughty, but it does make sense most of the time.
8915 Let's say you have 10 groups subscribed to the server
8916 @samp{nepholococcygia.com}.  This server is located somewhere quite far
8917 away from you, the machine is quite, so it takes 1 minute just to find
8918 out that it refuses connection from you today.  If Gnus were to attempt
8919 to do that 10 times, you'd be quite annoyed, so Gnus won't attempt to do
8920 that.  Once it has gotten a single ``connection refused'', it will regard
8921 that server as ``down''.
8922
8923 So, what happens if the machine was only feeling unwell temporarily?
8924 How do you test to see whether the machine has come up again?
8925
8926 You jump to the server buffer (@pxref{The Server Buffer}) and poke ut
8927 with the following commands:
8928
8929 @table @kbd
8930
8931 @item O
8932 @kindex O (Server)
8933 @findex gnus-server-open-server
8934 Try to establish connection to the server on the current line
8935 (@code{gnus-server-open-server}).
8936
8937 @item C
8938 @kindex C (Server)
8939 @findex gnus-server-close-server
8940 Close the connection (if any) to the server
8941 (@code{gnus-server-close-server}).
8942
8943 @item D
8944 @kindex D (Server)
8945 @findex gnus-server-deny-server
8946 Mark the current server as unreachable
8947 (@code{gnus-server-deny-server}). 
8948
8949 @item R
8950 @kindex R (Server)
8951 @findex gnus-server-remove-denials
8952 Remove all marks to whether Gnus was denied connection from all servers
8953 (@code{gnus-server-remove-denials}). 
8954
8955 @end table
8956
8957
8958 @node Scoring
8959 @chapter Scoring
8960 @cindex scoring
8961
8962 Other people use @dfn{kill files}, but we here at Gnus Towers like
8963 scoring better than killing, so we'd rather switch than fight.  They do
8964 something completely different as well, so sit up straight and pay
8965 attention!
8966
8967 @vindex gnus-summary-mark-below
8968 All articles have a default score (@code{gnus-summary-default-score}),
8969 which is 0 by default.  This score may be raised or lowered either
8970 interactively or by score files.  Articles that have a score lower than
8971 @code{gnus-summary-mark-below} are marked as read.
8972
8973 Gnus will read any @dfn{score files} that apply to the current group
8974 before generating the summary buffer.
8975
8976 There are several commands in the summary buffer that insert score
8977 entries based on the current article.  You can, for instance, ask Gnus to
8978 lower or increase the score of all articles with a certain subject.
8979
8980 There are two sorts of scoring entries: Permanent and temporary.
8981 Temporary score entries are self-expiring entries.  Any entries that are
8982 temporary and have not been used for, say, a week, will be removed
8983 silently to help keep the sizes of the score files down.
8984
8985 @menu 
8986 * Summary Score Commands::   Adding score entries for the current group.
8987 * Group Score Commands::     General score commands.
8988 * Score Variables::          Customize your scoring.  (My, what terminology).
8989 * Score File Format::        What a score file may contain.
8990 * Score File Editing::       You can edit score files by hand as well.
8991 * Adaptive Scoring::         Big Sister Gnus *knows* what you read.
8992 * Followups To Yourself::    Having Gnus notice when people answer you.
8993 * Scoring Tips::             How to score effectively.
8994 * Reverse Scoring::          That problem child of old is not problem.
8995 * Global Score Files::       Earth-spanning, ear-splitting score files.
8996 * Kill Files::               They are still here, but they can be ignored.
8997 @end menu
8998
8999 @node Summary Score Commands
9000 @section Summary Score Commands
9001 @cindex score commands
9002
9003 The score commands that alter score entries do not actually modify real
9004 score files.  That would be too inefficient.  Gnus maintains a cache of
9005 previously loaded score files, one of which is considered the
9006 @dfn{current score file alist}.  The score commands simply insert
9007 entries into this list, and upon group exit, this list is saved.
9008
9009 The current score file is by default the group's local score file, even
9010 if no such score file actually exists.  To insert score commands into
9011 some other score file (eg. @file{all.SCORE}), you must first make this
9012 score file the current one.
9013
9014 General score commands that don't actually change the score file:
9015
9016 @table @kbd
9017
9018 @item V s
9019 @kindex V s (Summary)
9020 @findex gnus-summary-set-score
9021 Set the score of the current article (@code{gnus-summary-set-score}).  
9022
9023 @item V S
9024 @kindex V S (Summary)
9025 @findex gnus-summary-current-score
9026 Display the score of the current article
9027 (@code{gnus-summary-current-score}).   
9028
9029 @item V t
9030 @kindex V t (Summary)
9031 @findex gnus-score-find-trace
9032 Display all score rules that have been used on the current article
9033 (@code{gnus-score-find-trace}).   
9034
9035 @item V R
9036 @item V R (Summary)
9037 @findex gnus-summary-rescore
9038 Run the current summary through the scoring process
9039 (@code{gnus-summary-rescore}).  This might be useful if you're playing
9040 around with your score files behind Gnus' back and want to see the
9041 effect you're having.
9042
9043 @item V a
9044 @kindex V a (Summary)
9045 @findex gnus-summary-score-entry
9046 Add a new score entry, and allow specifying all elements 
9047 (@code{gnus-summary-score-entry}).
9048
9049 @item V c
9050 @kindex V c (Summary)
9051 @findex gnus-score-change-score-file
9052 Make a different score file the current
9053 (@code{gnus-score-change-score-file}). 
9054
9055 @item V e
9056 @kindex V e (Summary)
9057 @findex gnus-score-edit-alist
9058 Edit the current score file (@code{gnus-score-edit-alist}).  You will be
9059 popped into a @code{gnus-score-mode} buffer (@pxref{Score File
9060 Editing}).
9061
9062 @item V f
9063 @kindex V f (Summary)
9064 @findex gnus-score-edit-file
9065 Edit a score file and make this score file the current one
9066 (@code{gnus-score-edit-file}).
9067
9068 @item V C
9069 @kindex V C (Summary)
9070 @findex gnus-score-customize
9071 Customize a score file in a visually pleasing manner
9072 (@code{gnus-score-customize}). 
9073
9074 @item I C-i
9075 @kindex I C-i (Summary)
9076 @findex gnus-summary-raise-score
9077 Increase the score of the current article
9078 (@code{gnus-summary-raise-score}).
9079
9080 @item L C-l
9081 @kindex L C-l (Summary)
9082 @findex gnus-summary-lower-score
9083 Lower the score of the current article
9084 (@code{gnus-summary-lower-score}). 
9085 @end table
9086
9087 The rest of these commands modify the local score file.
9088
9089 @table @kbd
9090
9091 @item V m
9092 @kindex V m (Summary)
9093 @findex gnus-score-set-mark-below
9094 Prompt for a score, and mark all articles with a score below this as
9095 read (@code{gnus-score-set-mark-below}).
9096
9097 @item V E
9098 @kindex V E (Summary)
9099 @findex gnus-score-set-expunge-below
9100 Expunge all articles with a score below the default score (or the
9101 numeric prefix) (@code{gnus-score-set-expunge-below}).
9102 @end table
9103
9104 The keystrokes for actually making score entries follow a very regular
9105 pattern, so there's no need to list all the commands.  (Hundreds of
9106 them.)  
9107
9108 @enumerate
9109 @item
9110 The first key is either @kbd{I} (upper case i) for increasing the score
9111 or @kbd{L} for lowering the score. 
9112 @item
9113 The second key says what header you want to score on.  The following
9114 keys are available:
9115 @table @kbd
9116
9117 @item a
9118 Score on the author name.
9119
9120 @item s
9121 Score on the subject line.
9122
9123 @item x
9124 Score on the Xref line---i.e., the cross-posting line.
9125
9126 @item t
9127 Score on thread---the References line.
9128
9129 @item d
9130 Score on the date.
9131
9132 @item l
9133 Score on the number of lines.
9134
9135 @item i
9136 Score on the Message-ID.
9137
9138 @item f
9139 Score on followups.
9140
9141 @item b
9142 Score on the body.
9143
9144 @item h
9145 Score on the head.
9146 @end table
9147
9148 @item
9149 The third key is the match type.  Which match types are legal depends on
9150 what headers you are scoring on.
9151
9152 @table @code
9153
9154 @item strings 
9155
9156 @table @kbd
9157
9158 @item e
9159 Exact matching.
9160
9161 @item s
9162 Substring matching.
9163
9164 @item f
9165 Fuzzy matching.
9166
9167 @item r
9168 Regexp matching
9169 @end table
9170
9171 @item date
9172 @table @kbd
9173
9174 @item b
9175 Before date.
9176
9177 @item a
9178 At date.
9179
9180 @item n
9181 This date.
9182 @end table
9183
9184 @item number
9185 @table @kbd
9186
9187 @item <
9188 Less than number.
9189
9190 @item =
9191 Equal to number.
9192
9193 @item >
9194 Greater than number.
9195 @end table
9196 @end table
9197
9198 @item 
9199 The fourth and final key says whether this is a temporary (i.e., expiring)
9200 score entry, or a permanent (i.e., non-expiring) score entry, or whether
9201 it is to be done immediately, without adding to the score file.
9202 @table @kbd
9203
9204 @item t
9205 Temporary score entry.
9206
9207 @item p
9208 Permanent score entry.
9209
9210 @item i
9211 Immediately scoring.
9212 @end table
9213
9214 @end enumerate
9215
9216 So, let's say you want to increase the score on the current author with
9217 exact matching permanently: @kbd{I a e p}.  If you want to lower the
9218 score based on the subject line, using substring matching, and make a
9219 temporary score entry: @kbd{L s s t}.  Pretty easy.
9220
9221 To make things a bit more complicated, there are shortcuts.  If you use
9222 a capital letter on either the second or third keys, Gnus will use
9223 defaults for the remaining one or two keystrokes.  The defaults are
9224 ``substring'' and ``temporary''.  So @kbd{I A} is the same as @kbd{I a s t},
9225 and @kbd{I a R} is the same as @kbd{I a r t}.
9226
9227 @vindex gnus-score-mimic-keymap
9228 The @code{gnus-score-mimic-keymap} says whether these commands will
9229 pretend they are keymaps or not.
9230
9231
9232 @node Group Score Commands
9233 @section Group Score Commands
9234 @cindex group score commands
9235
9236 There aren't many of these as yet, I'm afraid.
9237
9238 @table @kbd
9239
9240 @item W f
9241 @kindex W f (Group)
9242 @findex gnus-score-flush-cache
9243 Gnus maintains a cache of score alists to avoid having to reload them
9244 all the time.  This command will flush the cache
9245 (@code{gnus-score-flush-cache}). 
9246
9247 @end table
9248
9249
9250 @node Score Variables
9251 @section Score Variables
9252 @cindex score variables
9253
9254 @table @code
9255
9256 @item gnus-use-scoring
9257 @vindex gnus-use-scoring
9258 If @code{nil}, Gnus will not check for score files, and will not, in
9259 general, do any score-related work.  This is @code{t} by default.
9260
9261 @item gnus-kill-killed
9262 @vindex gnus-kill-killed
9263 If this variable is @code{nil}, Gnus will never apply score files to
9264 articles that have already been through the kill process.  While this
9265 may save you lots of time, it also means that if you apply a kill file
9266 to a group, and then change the kill file and want to run it over you
9267 group again to kill more articles, it won't work.  You have to set this
9268 variable to @code{t} to do that.  (It is @code{t} by default.)
9269
9270 @item gnus-kill-files-directory
9271 @vindex gnus-kill-files-directory
9272 All kill and score files will be stored in this directory, which is
9273 initialized from the @samp{SAVEDIR} environment variable by default.
9274 This is @file{~/News/} by default.
9275
9276 @item gnus-score-file-suffix
9277 @vindex gnus-score-file-suffix
9278 Suffix to add to the group name to arrive at the score file name
9279 (@samp{SCORE} by default.)
9280
9281 @item gnus-score-uncacheable-files
9282 @vindex gnus-score-uncacheable-files
9283 @cindex score cache
9284 All score files are normally cached to avoid excessive re-loading of
9285 score files.  However, if this might make you Emacs grow big and
9286 bloated, so this regexp can be used to weed out score files that are
9287 unlikely to be needed again.  It would be a bad idea to deny caching of
9288 @file{all.SCORE}, while it might be a good idea to not cache
9289 @file{comp.infosystems.www.authoring.misc.ADAPT}.  In fact, this
9290 variable is @samp{"ADAPT$"} by default, so no adaptive score files will
9291 be cached.
9292
9293 @item gnus-save-score
9294 @vindex gnus-save-score
9295 If you have really complicated score files, and do lots of batch
9296 scoring, then you might set this variable to @code{t}.  This will make
9297 Gnus save the scores into the @file{.newsrc.eld} file.
9298
9299 @item gnus-score-interactive-default-score
9300 @vindex gnus-score-interactive-default-score
9301 Score used by all the interactive raise/lower commands to raise/lower
9302 score with.  Default is 1000, which may seem excessive, but this is to
9303 ensure that the adaptive scoring scheme gets enough room to play with.
9304 We don't want the small changes from the adaptive scoring to overwrite
9305 manually entered data.
9306
9307 @item gnus-summary-default-score
9308 @vindex gnus-summary-default-score
9309 Default score of an article, which is 0 by default.
9310
9311 @item gnus-score-over-mark
9312 @vindex gnus-score-over-mark
9313 Mark (in the third column) used for articles with a score over the
9314 default.  Default is @samp{+}.
9315
9316 @item gnus-score-below-mark
9317 @vindex gnus-score-below-mark
9318 Mark (in the third column) used for articles with a score below the
9319 default.  Default is @samp{-}.
9320
9321 @item gnus-score-find-score-files-function
9322 @vindex gnus-score-find-score-files-function
9323 Function used to find score files for the current group.  This function
9324 is called with the name of the group as the argument. 
9325
9326 Predefined functions available are:
9327 @table @code
9328
9329 @item gnus-score-find-single
9330 @findex gnus-score-find-single
9331 Only apply the group's own score file.
9332
9333 @item gnus-score-find-bnews
9334 @findex gnus-score-find-bnews
9335 Apply all score files that match, using bnews syntax.  This is the
9336 default.  For instance, if the current group is @samp{gnu.emacs.gnus},
9337 @samp{all.emacs.all.SCORE}, @samp{not.alt.all.SCORE} and
9338 @samp{gnu.all.SCORE} would all apply.  In short, the instances of
9339 @samp{all} in the score file names are translated into @samp{.*}, and
9340 then a regexp match is done.
9341
9342 This means that if you have some score entries that you want to apply to
9343 all groups, then you put those entries in the @file{all.SCORE} file. 
9344
9345 If @code{gnus-use-long-file-name} is non-@code{nil}, this won't work
9346 very will.  It will find stuff like @file{gnu/all/SCORE}, but will not
9347 find files like @file{not/gnu/all/SCORE}. 
9348
9349 @item gnus-score-find-hierarchical
9350 @findex gnus-score-find-hierarchical
9351 Apply all score files from all the parent groups.  This means that you
9352 can't have score files like @file{all.SCORE} or @file{all.emacs.SCORE},
9353 but you can have @file{SCORE},  @file{comp.SCORE} and
9354 @file{comp.emacs.SCORE}. 
9355
9356 @end table
9357 This variable can also be a list of functions.  In that case, all these
9358 functions will be called, and all the returned lists of score files will
9359 be applied.  These functions can also return lists of score alists
9360 directly.  In that case, the functions that return these non-file score
9361 alists should probably be placed before the ``real'' score file functions,
9362 to ensure that the last score file returned is the local score file.
9363 Phu. 
9364
9365 @item gnus-score-expiry-days
9366 @vindex gnus-score-expiry-days
9367 This variable says how many days should pass before an unused score file
9368 entry is expired.  If this variable is @code{nil}, no score file entries
9369 are expired.  It's 7 by default.
9370
9371 @item gnus-update-score-entry-dates
9372 @vindex gnus-update-score-entry-dates
9373 If this variable is non-@code{nil}, matching score entries will have
9374 their dates updated.  (This is how Gnus controls expiry---all
9375 non-matching entries will become too old while matching entries will
9376 stay fresh and young.)  However, if you set this variable to @code{nil},
9377 even matching entries will grow old and will have to face that oh-so
9378 grim reaper.  
9379
9380 @end table
9381
9382
9383 @node Score File Format
9384 @section Score File Format
9385 @cindex score file format
9386
9387 A score file is an @code{emacs-lisp} file that normally contains just a
9388 single form.  Casual users are not expected to edit these files;
9389 everything can be changed from the summary buffer.
9390
9391 Anyway, if you'd like to dig into it yourself, here's an example:
9392
9393 @lisp
9394 (("from"
9395   ("Lars Ingebrigtsen" -10000)
9396   ("Per Abrahamsen")
9397   ("larsi\\|lmi" -50000 nil R))
9398  ("subject"
9399   ("Ding is Badd" nil 728373))
9400  ("xref"
9401   ("alt.politics" -1000 728372 s))
9402  ("lines"
9403   (2 -100 nil <))
9404  (mark 0)
9405  (expunge -1000)
9406  (mark-and-expunge -10)
9407  (read-only nil)
9408  (orphan -10)
9409  (adapt t)
9410  (files "/hom/larsi/News/gnu.SCORE")
9411  (exclude-files "all.SCORE")
9412  (local (gnus-newsgroup-auto-expire t)
9413         (gnus-summary-make-false-root 'empty))
9414  (eval (ding)))
9415 @end lisp
9416
9417 This example demonstrates absolutely everything about a score file. 
9418
9419 Even though this looks much like lisp code, nothing here is actually
9420 @code{eval}ed.  The lisp reader is used to read this form, though, so it
9421 has to be legal syntactically, if not semantically.
9422
9423 Six keys are supported by this alist:
9424
9425 @table @code
9426
9427 @item STRING
9428 If the key is a string, it is the name of the header to perform the
9429 match on.  Scoring can only be performed on these eight headers:
9430 @samp{From}, @samp{Subject}, @samp{References}, @samp{Message-ID},
9431 @samp{Xref}, @samp{Lines}, @samp{Chars} and @samp{Date}.  In addition to
9432 these headers, there are three strings to tell Gnus to fetch the entire
9433 article and do the match on larger parts of the article: @samp{Body}
9434 will perform the match on the body of the article, @samp{Head} will
9435 perform the match on the head of the article, and @samp{All} will
9436 perform the match on the entire article.  Note that using any of these
9437 last three keys will slow down group entry @emph{considerably}.  The
9438 final ``header'' you can score on is @samp{Followup}.  These score entries
9439 will result in new score entries being added for all follow-ups to
9440 articles that matches these score entries.
9441
9442 Following this key is a random number of score entries, where each score
9443 entry has one to four elements.
9444 @enumerate
9445
9446 @item 
9447 The first element is the @dfn{match element}.  On most headers this will
9448 be a string, but on the Lines and Chars headers, this must be an
9449 integer. 
9450
9451 @item 
9452 If the second element is present, it should be a number---the @dfn{score
9453 element}.  This number should be an integer in the neginf to posinf
9454 interval.  This number is added to the score of the article if the match
9455 is successful.  If this element is not present, the
9456 @code{gnus-score-interactive-default-score} number will be used
9457 instead.  This is 1000 by default.
9458
9459 @item 
9460 If the third element is present, it should be a number---the @dfn{date
9461 element}.  This date says when the last time this score entry matched,
9462 which provides a mechanism for expiring the score entries.  It this
9463 element is not present, the score entry is permanent.  The date is
9464 represented by the number of days since December 31, 1 ce.
9465
9466 @item 
9467 If the fourth element is present, it should be a symbol---the @dfn{type
9468 element}.  This element specifies what function should be used to see
9469 whether this score entry matches the article.  What match types that can
9470 be used depends on what header you wish to perform the match on.
9471 @table @dfn
9472
9473 @item From, Subject, References, Xref, Message-ID
9474 For most header types, there are the @code{r} and @code{R} (regexp) as
9475 well as @code{s} and @code{S} (substring) types and @code{e} and
9476 @code{E} (exact match) types.  If this element is not present, Gnus will
9477 assume that substring matching should be used.  @code{R} and @code{S}
9478 differ from the other two in that the matches will be done in a
9479 case-sensitive manner.  All these one-letter types are really just
9480 abbreviations for the @code{regexp}, @code{string} and @code{exact}
9481 types, which you can use instead, if you feel like.
9482
9483 @item Lines, Chars
9484 These two headers use different match types: @code{<}, @code{>},
9485 @code{=}, @code{>=} and @code{<=}.
9486
9487 @item Date
9488 For the Date header we have three match types: @code{before}, @code{at}
9489 and @code{after}.  I can't really imagine this ever being useful, but,
9490 like, it would feel kinda silly not to provide this function.  Just in
9491 case.  You never know.  Better safe than sorry.  Once burnt, twice shy.
9492 Don't judge a book by its cover.  Never not have sex on a first date.
9493
9494 @item Head, Body, All
9495 These three match keys use the same match types as the @code{From} (etc)
9496 header uses.
9497
9498 @item Followup
9499 This match key will add a score entry on all articles that followup to
9500 some author.  Uses the same match types as the @code{From} header uses.
9501
9502 @item Thread
9503 This match key will add a ascore entry on all articles that are part of
9504 a thread.  Uses the same match types as the @code{References} header
9505 uses.
9506 @end table
9507 @end enumerate
9508
9509 @item mark
9510 The value of this entry should be a number.  Any articles with a score
9511 lower than this number will be marked as read.
9512
9513 @item expunge
9514 The value of this entry should be a number.  Any articles with a score
9515 lower than this number will be removed from the summary buffer.
9516
9517 @item mark-and-expunge
9518 The value of this entry should be a number.  Any articles with a score
9519 lower than this number will be marked as read and removed from the
9520 summary buffer.
9521
9522 @item thread-mark-and-expunge
9523 The value of this entry should be a number.  All articles that belong to
9524 a thread that has a total score below this number will be marked as read
9525 and removed from the summary buffer.  @code{gnus-thread-score-function}
9526 says how to compute the total score for a thread.
9527
9528 @item files
9529 The value of this entry should be any number of file names.  These files
9530 are assumed to be score files as well, and will be loaded the same way
9531 this one was.
9532
9533 @item exclude-files
9534 The clue of this entry should be any number of files.  This files will
9535 not be loaded, even though they would normally be so, for some reason or
9536 other. 
9537
9538 @item eval
9539 The value of this entry will be @code{eval}el.  This element will be
9540 ignored when handling global score files. 
9541
9542 @item read-only
9543 Read-only score files will not be updated or saved.  Global score files
9544 should feature this atom (@pxref{Global Score Files}).
9545
9546 @item orphan
9547 The value of this entry should be a number.  Articles that do not have
9548 parents will get this number added to their scores.
9549
9550 @item adapt
9551 This entry controls the adaptive scoring.  If it is @code{t}, the
9552 default adaptive scoring rules will be used.  If it is @code{ignore}, no
9553 adaptive scoring will be performed on this group.  If it is a list, this
9554 list will be used as the adaptive scoring rules.  If it isn't present,
9555 or is something other than @code{t} or @code{ignore}, the default
9556 adaptive scoring rules will be used.  If you want to use adaptive
9557 scoring on most groups, you'd set @code{gnus-use-adaptive-scoring} to
9558 @code{t}, and insert an @code{(adapt ignore)} in the groups where you do
9559 not want adaptive scoring.  If you only want adaptive scoring in a few
9560 groups, you'd set @code{gnus-use-adaptive-scoring} to @code{nil}, and
9561 insert @code{(adapt t)} in the score files of the groups where you want
9562 it. 
9563
9564 @item adapt-file
9565 All adaptive score entries will go to the file named by this entry.  It
9566 will also be applied when entering the group.  This atom might be handy
9567 if you want to adapt on several groups at once, using the same adaptive
9568 file for a number of groups.
9569
9570 @item local
9571 @cindex local variables
9572 The value of this entry should be a list of @code{(VAR VALUE)} pairs.
9573 Each @var{var} will be made buffer-local to the current summary buffer,
9574 and set to the value specified.  This is a convenient, if somewhat
9575 strange, way of setting variables in some groups if you don't like hooks
9576 much.
9577 @end table
9578
9579 @node Score File Editing
9580 @section Score File Editing
9581
9582 You normally enter all scoring commands from the summary buffer, but you
9583 might feel the urge to edit them by hand as well, so we've supplied you
9584 with a mode for that.  
9585
9586 It's simply a slightly customized @code{emacs-lisp} mode, with these
9587 additional commands:
9588
9589 @table @kbd
9590
9591 @item C-c C-c
9592 @kindex C-c C-c (Score)
9593 @findex gnus-score-edit-done
9594 Save the changes you have made and return to the summary buffer
9595 (@code{gnus-score-edit-done}). 
9596
9597 @item C-c C-d
9598 @kindex C-c C-d (Score)
9599 @findex gnus-score-edit-insert-date
9600 Insert the current date in numerical format
9601 (@code{gnus-score-edit-insert-date}).  This is really the day number, if
9602 you were wondering.
9603
9604 @item C-c C-p
9605 @kindex C-c C-p (Score)
9606 @findex gnus-score-pretty-print
9607 The adaptive score files are saved in an unformatted fashion.  If you
9608 intend to read one of these files, you want to @dfn{pretty print} it
9609 first.  This command (@code{gnus-score-pretty-print}) does that for
9610 you. 
9611
9612 @end table
9613
9614 @node Adaptive Scoring
9615 @section Adaptive Scoring
9616 @cindex adaptive scoring
9617
9618 If all this scoring is getting you down, Gnus has a way of making it all
9619 happen automatically---as if by magic.  Or rather, as if by artificial
9620 stupidity, to be precise.
9621
9622 @vindex gnus-use-adaptive-scoring
9623 When you read an article, or mark an article as read, or kill an
9624 article, you leave marks behind.  On exit from the group, Gnus can sniff
9625 these marks and add score elements depending on what marks it finds.
9626 You turn on this ability by setting @code{gnus-use-adaptive-scoring} to
9627 @code{t}. 
9628
9629 @vindex gnus-default-adaptive-score-alist
9630 To give you complete control over the scoring process, you can customize
9631 the @code{gnus-default-adaptive-score-alist} variable.  By default, it
9632 looks something like this:
9633
9634 @lisp
9635 (defvar gnus-default-adaptive-score-alist
9636   '((gnus-unread-mark)
9637     (gnus-ticked-mark (from 4))
9638     (gnus-dormant-mark (from 5))
9639     (gnus-del-mark (from -4) (subject -1))
9640     (gnus-read-mark (from 4) (subject 2))
9641     (gnus-expirable-mark (from -1) (subject -1))
9642     (gnus-killed-mark (from -1) (subject -3))
9643     (gnus-kill-file-mark)
9644     (gnus-catchup-mark (from -1) (subject -1))))
9645 @end lisp
9646
9647 As you see, each element in this alist has a mark as a key (either a
9648 variable name or a ``real'' mark---a character).  Following this key is a
9649 random number of header/score pairs.  
9650
9651 To take @code{gnus-del-mark} as an example---this alist says that all
9652 articles that have that mark (i.e., are marked with @samp{D}) will have a
9653 score entry added to lower based on the @code{From} header by -4, and
9654 lowered by @code{Subject} by -1.  Change this to fit your prejudices. 
9655
9656 The headers you can score on are @code{from}, @code{subject},
9657 @code{message-id}, @code{references}, @code{xref}, @code{lines},
9658 @code{chars} and @code{date}.  In addition, you can score on
9659 @code{followup}, which will create an adaptive score entry that matches
9660 on the @code{References} header using the @code{Message-ID} of the
9661 current article, thereby matching the following thread.  
9662
9663 You can also score on @code{thread}, which will try to score all
9664 articles that appear in a thread.  @code{thread} matches uses a
9665 @code{Message-ID} to match on the @code{References} header of the
9666 article.  If the match is made, the @code{Message-ID} of the article is
9667 added to the @code{thread} rule.  (Think about it.  I'd recommend two
9668 aspirins afterwards.)
9669
9670 If you use this scheme, you should set @code{mark-below} to something
9671 small---like -300, perhaps, to avoid having small random changes result
9672 in articles getting marked as read.
9673
9674 After using adaptive scoring for a week or so, Gnus should start to
9675 become properly trained and enhance the authors you like best, and kill
9676 the authors you like least, without you having to say so explicitly. 
9677
9678 You can control what groups the adaptive scoring is to be performed on
9679 by using the score files (@pxref{Score File Format}).  This will also
9680 let you use different rules in different groups.
9681
9682 @vindex gnus-adaptive-file-suffix
9683 The adaptive score entries will be put into a file where the name is the
9684 group name with @code{gnus-adaptive-file-suffix} appended.  The default
9685 is @samp{ADAPT}.
9686
9687 @vindex gnus-score-exact-adapt-limit
9688 When doing adaptive scoring, substring or fuzzy matching would probably
9689 give you the best results in most cases.  However, if the header one
9690 matches is short, the possibility for false positives is great, so if
9691 the length of the match is less than
9692 @code{gnus-score-exact-adapt-limit}, exact matching will be used.  If
9693 this variable is @code{nil}, exact matching will always be used to avoid
9694 this problem.
9695
9696
9697 @node Followups To Yourself
9698 @section Followups To Yourself
9699
9700 Gnus offers two commands for picking out the @code{Message-ID} header in
9701 the current buffer.  Gnus will then add a score rule that scores using
9702 this @code{Message-ID} on the @code{References} header of other
9703 articles.  This will, in effect, increase the score of all articles that
9704 respond to the article in the current buffer.  Quite useful if you want
9705 to easily note when people answer what you've said.
9706
9707 @table @code
9708
9709 @item gnus-score-followup-article
9710 @findex gnus-score-followup-article
9711 This will add a score to articles that directly follow up your own
9712 article. 
9713
9714 @item gnus-score-followup-thread
9715 @findex gnus-score-followup-thread
9716 This will add a score to all articles that appear in a thread ``below''
9717 your own article.
9718 @end table
9719
9720 @vindex gnus-inews-article-hook
9721 These two functions are both primarily meant to be used in hooks like
9722 @code{gnus-inews-article-hook}.  
9723
9724
9725 @node Scoring Tips
9726 @section Scoring Tips
9727 @cindex scoring tips
9728
9729 @table @dfn
9730
9731 @item Crossposts
9732 If you want to lower the score of crossposts, the line to match on is
9733 the @code{Xref} header.
9734 @lisp
9735 ("xref" (" talk.politics.misc:" -1000))
9736 @end lisp
9737
9738 @item Multiple crossposts
9739 If you want to lower the score of articles that have been crossposted to
9740 more than, say, 3 groups:
9741 @lisp
9742 ("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r))
9743 @end lisp
9744
9745 @item Matching on the body
9746 This is generally not a very good idea---it takes a very long time.
9747 Gnus actually has to fetch each individual article from the server.  But
9748 you might want to anyway, I guess.  Even though there are three match
9749 keys (@code{Head}, @code{Body} and @code{All}), you should choose one
9750 and stick with it in each score file.  If you use any two, each article
9751 will be fetched @emph{twice}.  If you want to match a bit on the
9752 @code{Head} and a bit on the @code{Body}, just use @code{All} for all
9753 the matches.  
9754
9755 @item Marking as read
9756 You will probably want to mark articles that has a score below a certain
9757 number as read.  This is most easily achieved by putting the following
9758 in your @file{all.SCORE} file:
9759 @lisp
9760 ((mark -100))
9761 @end lisp
9762 You may also consider doing something similar with @code{expunge}.  
9763
9764 @item Negated charater classes
9765 If you say stuff like @code{[^abcd]*}, you may get unexpected results.
9766 That will match newlines, which might lead to, well, The Unknown.  Say
9767 @code{[^abcd\n]*} instead.
9768 @end table
9769
9770 @node Reverse Scoring
9771 @section Reverse Scoring
9772 @cindex reverse scoring
9773
9774 If you want to keep just articles that have @samp{Sex with Emacs} in the
9775 subject header, and expunge all other articles, you could put something
9776 like this in your score file:
9777
9778 @lisp
9779 (("subject"
9780   ("Sex with Emacs" 2))
9781  (mark 1)
9782  (expunge 1))
9783 @end lisp
9784
9785 So, you raise all articles that match @samp{Sex with Emacs} and mark the
9786 rest as read, and expunge them to boot.
9787
9788 @node Global Score Files
9789 @section Global Score Files
9790 @cindex global score files
9791
9792 Sure, other newsreaders have ``global kill files''.  These are usually
9793 nothing more than a single kill file that applies to all groups, stored
9794 in the user's home directory.  Bah!  Puny, weak newsreaders!
9795
9796 What I'm talking about here are Global Score Files.  Score files from
9797 all over the world, from users everywhere, uniting all nations in one
9798 big, happy score file union!  Ange-score!  New and untested!
9799
9800 @vindex gnus-global-score-files
9801 All you have to do to use other people's score files is to set the
9802 @code{gnus-global-score-files} variable.  One entry for each score file,
9803 or each score file directory.  Gnus will decide by itself what score
9804 files are applicable to which group.
9805
9806 Say you want to use all score files in the
9807 @file{/ftp@@ftp.some-where:/pub/score} directory and the single score
9808 file @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE}:
9809
9810 @lisp
9811 (setq gnus-global-score-files
9812       '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE"
9813         "/ftp@@ftp.some-where:/pub/score/"))
9814 @end lisp
9815
9816 @findex gnus-score-search-global-directories
9817 Simple, eh?  Directory names must end with a @samp{/}.  These
9818 directories are typically scanned only once during each Gnus session.
9819 If you feel the need to manually re-scan the remote directories, you can
9820 use the @code{gnus-score-search-global-directories} command.
9821
9822 Note that, at present, using this option will slow down group entry
9823 somewhat.  (That is---a lot.)
9824
9825 If you want to start maintaining score files for other people to use,
9826 just put your score file up for anonymous ftp and announce it to the
9827 world.  Become a retro-moderator!  Participate in the retro-moderator
9828 wars sure to ensue, where retro-moderators battle it out for the
9829 sympathy of the people, luring them to use their score files on false
9830 premises!  Yay!  The net is saved!
9831
9832 Here are some tips for the would-be retro-moderator, off the top of my
9833 head: 
9834
9835 @itemize @bullet
9836
9837 @item 
9838 Articles that are heavily crossposted are probably junk. 
9839 @item
9840 To lower a single inappropriate article, lower by @code{Message-ID}.
9841 @item
9842 Particularly brilliant authors can be raised on a permanent basis. 
9843 @item
9844 Authors that repeatedly post off-charter for the group can safely be
9845 lowered out of existence.
9846 @item
9847 Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest
9848 articles completely.
9849
9850 @item 
9851 Use expiring score entries to keep the size of the file down.  You
9852 should probably have a long expiry period, though, as some sites keep
9853 old articles for a long time.
9854 @end itemize
9855
9856 ... I wonder whether other newsreaders will support global score files
9857 in the future.  @emph{Snicker}.  Yup, any day now, newsreaders like Blue
9858 Wave, xrn and 1stReader are bound to implement scoring.  Should we start
9859 holding our breath yet?
9860
9861
9862 @node Kill Files
9863 @section Kill Files
9864 @cindex kill files
9865
9866 Gnus still supports those pesky old kill files.  In fact, the kill file
9867 entries can now be expiring, which is something I wrote before Daniel
9868 Quinlan thought of doing score files, so I've left the code in there.
9869
9870 In short, kill processing is a lot slower (and I do mean @emph{a lot})
9871 than score processing, so it might be a good idea to rewrite your kill
9872 files into score files.
9873
9874 Anyway, a kill file is a normal @code{emacs-lisp} file.  You can put any
9875 forms into this file, which means that you can use kill files as some
9876 sort of primitive hook function to be run on group entry, even though
9877 that isn't a very good idea.
9878
9879 XCNormal kill files look like this:
9880
9881 @lisp
9882 (gnus-kill "From" "Lars Ingebrigtsen")
9883 (gnus-kill "Subject" "ding")
9884 (gnus-expunge "X")
9885 @end lisp
9886
9887 This will mark every article written by me as read, and remove them from
9888 the summary buffer.  Very useful, you'll agree.
9889
9890 Other programs use a totally different kill file syntax.  If Gnus
9891 encounters what looks like a @code{rn} kill file, it will take a stab at
9892 interpreting it. 
9893
9894 Two functions for editing a GNUS kill file:
9895
9896 @table @kbd
9897
9898 @item M-k
9899 @kindex M-k (Summary)
9900 @findex gnus-summary-edit-local-kill
9901 Edit this group's kill file (@code{gnus-summary-edit-local-kill}).
9902
9903 @item M-K
9904 @kindex M-K (Summary)
9905 @findex gnus-summary-edit-global-kill
9906 Edit the general kill file (@code{gnus-summary-edit-global-kill}).
9907 @end table
9908
9909 @vindex gnus-kill-file-name
9910 A kill file for the group @samp{soc.motss} is normally called
9911 @file{soc.motss.KILL}.  The suffix appended to the group name to get
9912 this file name is detailed by the @code{gnus-kill-file-name} variable.
9913 The ``global'' kill file (not in the score file sense of ``global'', of
9914 course) is called just @file{KILL}.
9915
9916 @vindex gnus-kill-save-kill-file
9917 If @code{gnus-kill-save-kill-file} is non-@code{nil}, Gnus will save the
9918 kill file after processing, which is necessary if you use expiring
9919 kills. 
9920
9921
9922
9923
9924 @node Various
9925 @chapter Various
9926
9927 @menu
9928 * Interactive::                Making Gnus ask you many questions.
9929 * Formatting Variables::       How to control the look of the buffers.
9930 * Windows Configuration::      Configuring the Gnus buffer windows.
9931 * Buttons::                    Get tendonitis in ten easy steps!
9932 * Compilation and Init File::  How to speed Gnus up.
9933 * Daemons::                    Gnus can do things behind your back.
9934 * NoCeM::                      How to avoid spam and other fatty foods.
9935 * Various Various::            Things that are really various.
9936 @end menu
9937
9938 @node Interactive
9939 @section Interactive
9940 @cindex interaction
9941
9942 @table @code
9943
9944 @item gnus-novice-user
9945 @vindex gnus-novice-user
9946 If this variable is non-@code{nil}, you are either a newcomer to the
9947 World of Usenet, or you are very cautious, which is a nice thing to be,
9948 really.  You will be given questions of the type ``Are you sure you want
9949 to do this?'' before doing anything dangerous.  This is @code{t} by
9950 default. 
9951
9952 @item gnus-expert-user
9953 @vindex gnus-expert-user
9954 If this variable is non-@code{nil}, you will never ever be asked any
9955 questions by Gnus.  It will simply assume you know what you're doing, no
9956 matter how strange.
9957
9958 @item gnus-interactive-catchup
9959 @vindex gnus-interactive-catchup
9960 Require confirmation before catching up a group if non-@code{nil}.  It
9961 is @code{t} by default.
9962
9963 @item gnus-interactive-post
9964 @vindex gnus-interactive-post
9965 If non-@code{nil}, the user will be prompted for a group name when
9966 posting an article.  It is @code{t} by default.
9967
9968 @item gnus-interactive-exit
9969 @vindex gnus-interactive-exit
9970 Require confirmation before exiting Gnus.  This variable is @code{t} by
9971 default. 
9972 @end table
9973
9974
9975 @node Formatting Variables
9976 @section Formatting Variables
9977 @cindex formatting variables
9978
9979 Throughout this manual you've probably noticed lots of variables that
9980 are called things like @code{gnus-group-line-format} and
9981 @code{gnus-summary-mode-line-format}.  These control how Gnus is to
9982 output lines in the various buffers.  There's quite a lot of them.
9983 Fortunately, they all use the same syntax, so there's not that much to
9984 be annoyed by.
9985
9986 Here's an example format spec (from the group buffer): @samp{"%M%S%5y:
9987 %(%g%)\n"}.  We see that it is indeed extremely ugly, and that there are
9988 lots of percentages everywhere.  
9989
9990 Each @samp{%} element will be replaced by some string or other when the
9991 buffer in question is generated.  @samp{%5y} means ``insert the @samp{y}
9992 spec, and pad with spaces to get a 5-character field''.  Just like a
9993 normal format spec, almost.
9994
9995 You can also say @samp{%6,4y}, which means that the field will never be
9996 more than 6 characters wide and never less than 4 characters wide.
9997
9998 There are also specs for highlighting, and these are shared by all the
9999 format variables.  Text inside the @samp{%(} and @samp{%)} specifiers
10000 will get the special @code{mouse-face} property set, which means that it
10001 will be highlighted (with @code{gnus-mouse-face}) when you put the mouse
10002 pointer over it.
10003
10004 Text inside the @samp{%[} and @samp{%]} specifiers will have their
10005 normal faces set using @code{gnus-face-0}, which is @code{bold} by
10006 default.  If you say @samp{%1[} instead, you'll get @code{gnus-face-1}
10007 instead, and so on.  Create as many faces as you wish.  The same goes
10008 for the @code{mouse-face} specs---you can say @samp{%3(hello%)} to have
10009 @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
10010
10011 Here's an alternative recipe for the group buffer:
10012
10013 @lisp
10014 ;; Create three face types.
10015 (setq gnus-face-1 'bold)
10016 (setq gnus-face-3 'italic)
10017
10018 ;; We want the article count to be in 
10019 ;; a bold and green face.  So we create 
10020 ;; a new face called `my-green-bold'.
10021 (copy-face 'bold 'my-green-bold)
10022 ;; Set the color.
10023 (set-face-foreground 'my-green-bold "ForestGreen")
10024 (setq gnus-face-2 'my-green-bold)
10025
10026 ;; Set the new & fancy format.
10027 (setq gnus-group-line-format 
10028       "%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n")
10029 @end lisp
10030
10031 I'm sure you'll be able to use this scheme to create totally unreadable
10032 and extremely vulgar displays.  Have fun!
10033
10034 Currently Gnus uses the following formatting variables:
10035 @code{gnus-group-line-format}, @code{gnus-summary-line-format},
10036 @code{gnus-server-line-format}, @code{gnus-topic-line-format},
10037 @code{gnus-group-mode-line-format},
10038 @code{gnus-summary-mode-line-format},
10039 @code{gnus-article-mode-line-format},
10040 @code{gnus-server-mode-line-format}. 
10041
10042 Note that the @samp{%(} specs (and friends) do not make any sense on the
10043 mode-line variables.
10044
10045 All these format variables can also be random elisp forms.  In that
10046 case, they will be @code{eval}ed to insert the required lines.
10047
10048 @kindex M-x gnus-update-format
10049 @findex gnus-update-format
10050 Gnus includes a command to help you while creating your own format
10051 specs.  @kbd{M-x gnus-update-format} will @code{eval} the current form,
10052 update the spec in question and pop you to a buffer where you can
10053 examine the resulting lisp code to be run to generate the line.  
10054
10055
10056 @node Windows Configuration
10057 @section Windows Configuration
10058 @cindex windows configuration
10059
10060 No, there's nothing here about X, so be quiet.
10061
10062 @vindex gnus-use-full-window
10063 If @code{gnus-use-full-window} non-@code{nil}, Gnus will delete all
10064 other windows and occupy the entire Emacs screen by itself.  It is
10065 @code{t} by default.
10066
10067 @code{gnus-buffer-configuration} describes how much space each Gnus
10068 buffer should be given.  Here's an excerpt of this variable:
10069
10070 @lisp
10071 ((group (vertical 1.0 (group 1.0 point)
10072                       (if gnus-carpal (group-carpal 4))))
10073  (article (vertical 1.0 (summary 0.25 point) 
10074                         (article 1.0))))
10075 @end lisp
10076
10077 This is an alist.  The @dfn{key} is a symbol that names some action or
10078 other.  For instance, when displaying the group buffer, the window
10079 configuration function will use @code{group} as the key.  A full list of
10080 possible names is listed below.
10081
10082 The @dfn{value} (i. e., the @dfn{split}) says how much space each buffer
10083 should occupy.  To take the @code{article} split as an example -
10084
10085 @lisp
10086 (article (vertical 1.0 (summary 0.25 point)
10087                        (article 1.0)))
10088 @end lisp
10089
10090 This @dfn{split} says that the summary buffer should occupy 25% of upper
10091 half of the screen, and that it is placed over the article buffer.  As
10092 you may have noticed, 100% + 25% is actually 125% (yup, I saw y'all
10093 reaching for that calculator there).  However, the special number
10094 @code{1.0} is used to signal that this buffer should soak up all the
10095 rest of the space avaiable after the rest of the buffers have taken
10096 whatever they need.  There should be only one buffer with the @code{1.0}
10097 size spec per split.
10098
10099 Point will be put in the buffer that has the optional third element
10100 @code{point}. 
10101
10102 Here's a more complicated example:
10103
10104 @lisp
10105 (article (vertical 1.0 (group 4)
10106                        (summary 0.25 point)
10107                        (if gnus-carpal (summary-carpal 4))
10108                        (article 1.0)))
10109 @end lisp
10110
10111 If the size spec is an integer instead of a floating point number, 
10112 then that number will be used to say how many lines a buffer should
10113 occupy, not a percentage.
10114
10115 If the @dfn{split} looks like something that can be @code{eval}ed (to be
10116 precise---if the @code{car} of the split is a function or a subr), this
10117 split will be @code{eval}ed.  If the result is non-@code{nil}, it will
10118 be used as a split.  This means that there will be three buffers if
10119 @code{gnus-carpal} is @code{nil}, and four buffers if @code{gnus-carpal}
10120 is non-@code{nil}.
10121
10122 Not complicated enough for you?  Well, try this on for size:
10123
10124 @lisp
10125 (article (horizontal 1.0 
10126              (vertical 0.5
10127                  (group 1.0)
10128                  (gnus-carpal 4))
10129              (vertical 1.0
10130                  (summary 0.25 point)
10131                  (summary-carpal 4)
10132                  (article 1.0))))
10133 @end lisp
10134
10135 Whoops.  Two buffers with the mystery 100% tag.  And what's that
10136 @code{horizontal} thingie?  
10137
10138 If the first element in one of the split is @code{horizontal}, Gnus will
10139 split the window horizontally, giving you two windows side-by-side.
10140 Inside each of these strips you may carry on all you like in the normal
10141 fashion.  The number following @code{horizontal} says what percentage of
10142 the screen is to be given to this strip.
10143
10144 For each split, there @emph{must} be one element that has the 100% tag.
10145 The splitting is never accurate, and this buffer will eat any leftover
10146 lines from the splits.
10147
10148 To be slightly more formal, here's a definition of what a legal split
10149 may look like:
10150
10151 @example
10152 split       = frame | horizontal | vertical | buffer | form
10153 frame       = "(frame " size *split ")"
10154 horizontal  = "(horizontal " size *split ")"
10155 vertical    = "(vertical " size *split ")"
10156 buffer      = "(" buffer-name " " size *[ "point" ] ")"
10157 size        = number | frame-params
10158 buffer-name = group | article | summary ...
10159 @end example
10160
10161 The limitations are that the @samp{frame} split can only appear as the
10162 top-level split.  @samp{form} should be an Emacs Lisp form that should
10163 return a valid split.  We see that each split is fully recursive, and
10164 may contain any number of @samp{vertical} and @samp{horizontal} splits. 
10165
10166 @vindex gnus-window-min-width
10167 @vindex gnus-window-min-height
10168 @cindex window height
10169 @cindex window width
10170 Finding the right sizes can be a bit complicated.  No window may be less
10171 than @code{gnus-window-min-height} (default 2) characters high, and all
10172 windows must be at least @code{gnus-window-min-wide} (default 1)
10173 characters wide.  Gnus will try to enforce this before applying the
10174 splits.  If you want to use the normal Emacs window width/height limit,
10175 you can just set these two variables to @code{nil}.
10176
10177 If you're not familiar with Emacs terminology, @samp{horizontal} and
10178 @samp{vertical} splits may work the opposite way of what you'd expect.
10179 Windows inside a @samp{horizontal} split are shown side-by-side, and
10180 windows within a @samp{vertical} split are shown above each other.
10181
10182 @findex gnus-configure-frame
10183 If you want to experiment with window placement, a good tip is to call
10184 @code{gnus-configure-frame} directly with a split.  This is the function
10185 that does all the real work when splitting buffers.  Below is a pretty
10186 nonsensical configuration with 5 windows; two for the group buffer and
10187 three for the article buffer.  (I said it was nonsensical.)  If you
10188 @code{eval} the statement below, you can get an idea of how that would
10189 look straight away, without going through the normal Gnus channels.
10190 Play with it until you're satisfied, and then use
10191 @code{gnus-add-configuration} to add your new creation to the buffer
10192 configuration list. 
10193
10194 @lisp
10195 (gnus-configure-frame
10196  '(horizontal 1.0
10197     (vertical 10
10198       (group 1.0)
10199       (article 0.3 point))
10200     (vertical 1.0
10201       (article 1.0)
10202       (horizontal 4
10203         (group 1.0)
10204         (article 10)))))
10205 @end lisp
10206
10207 You might want to have several frames as well.  No prob---just use the
10208 @code{frame} split:
10209
10210 @lisp
10211 (gnus-configure-frame
10212  '(frame 1.0
10213          (vertical 1.0
10214                    (summary 0.25 point)
10215                    (article 1.0))
10216          (vertical ((height . 5) (width . 15)
10217                     (user-position . t)
10218                     (left . -1) (top . 1))
10219                    (picon 1.0))))
10220
10221 @end lisp
10222
10223 This split will result in the familiar summary/article window
10224 configuration in the first (or ``main'') frame, while a small additional
10225 frame will be created where picons will be shown.  As you can see,
10226 instead of the normal @samp{1.0} top-level spec, each additional split
10227 should have a frame parameter alist as the size spec.
10228 @xref{(elisp)Frame Parameters}.
10229
10230 Here's a list of all possible keys for
10231 @code{gnus-buffer-configuaration}:
10232
10233 @code{group}, @code{summary}, @code{article}, @code{server},
10234 @code{browse}, @code{group-mail}, @code{summary-mail},
10235 @code{summary-reply}, @code{info}, @code{summary-faq},
10236 @code{edit-group}, @code{edit-server}, @code{reply}, @code{reply-yank},
10237 @code{followup}, @code{followup-yank}, @code{edit-score}.  
10238
10239 @findex gnus-add-configuration
10240 Since the @code{gnus-buffer-configuration} variable is so long and
10241 complicated, there's a function you can use to ease changing the config
10242 of a single setting: @code{gnus-add-configuration}.  If, for instance,
10243 you want to change the @code{article} setting, you could say:
10244
10245 @lisp
10246 (gnus-add-configuration
10247  '(article (vertical 1.0
10248                (group 4)
10249                (summary .25 point)
10250                (article 1.0))))
10251 @end lisp
10252
10253 You'd typically stick these @code{gnus-add-configuration} calls in your
10254 @file{.gnus} file or in some startup hook -- they should be run after
10255 Gnus has been loaded.
10256
10257
10258 @node Buttons
10259 @section Buttons
10260 @cindex buttons
10261 @cindex mouse
10262 @cindex click
10263
10264 Those new-fangled @dfn{mouse} contraptions is very popular with the
10265 young, hep kids who don't want to learn the proper way to do things
10266 these days.  Why, I remember way back in the summer of '89, when I was
10267 using Emacs on a Tops 20 system.  Three hundred users on one single
10268 machine, and every user was running Simula compilers.  Bah!
10269
10270 Right.
10271
10272 @vindex gnus-carpal
10273 Well, you can make Gnus display bufferfuls of buttons you can click to
10274 do anything by setting @code{gnus-carpal} to @code{t}.  Pretty simple,
10275 really.  Tell the chiropractor I sent you.
10276
10277
10278 @table @code
10279
10280 @item gnus-carpal-mode-hook
10281 @vindex gnus-carpal-mode-hook
10282 Hook run in all carpal mode buffers.
10283
10284 @item gnus-carpal-button-face
10285 @vindex gnus-carpal-button-face
10286 Face used on buttons.
10287
10288 @item gnus-carpal-group-buffer-buttons
10289 @vindex gnus-carpal-group-buffer-buttons
10290 Buttons in the group buffer.
10291
10292 @item gnus-carpal-summary-buffer-buttons
10293 @vindex gnus-carpal-summary-buffer-buttons
10294 Buttons in the summary buffer.
10295
10296 @item gnus-carpal-server-buffer-buttons
10297 @vindex gnus-carpal-server-buffer-buttons
10298 Buttons in the server buffer.
10299
10300 @item gnus-carpal-browse-buffer-buttons
10301 @vindex gnus-carpal-browse-buffer-buttons
10302 Buttons in the browse buffer.
10303 @end table
10304
10305 All the @code{buttons} variables are lists.  The elements in these list
10306 is either a cons cell where the car contains a text to be displayed and
10307 the cdr contains a function symbol, or a simple string.
10308
10309
10310 @node Compilation and Init File
10311 @section Compilation and Init File
10312 @cindex compilation
10313 @cindex init file
10314 @cindex byte-compilation
10315
10316 @vindex gnus-init-file
10317 @findex gnus-compile
10318 When Gnus starts up, it will read the Gnus init file
10319 @code{gnus-init-file}, which is @file{.gnus} by default.  It is
10320 recommended that you keep any Gnus-related functions that you have
10321 written in that file.  If you want to byte-compile the file, Gnus offers
10322 the handy @kbd{M-x gnus-compile} function that will do that for you. 
10323
10324 That's not really why that function was written, though.
10325
10326 Remember all those line format specification variables?
10327 @code{gnus-summary-line-format}, @code{gnus-group-line-format}, and so
10328 on.  Now, Gnus will of course heed whatever these variables are, but,
10329 unfortunately, changing them will mean a quite significant slow-down.
10330 (The default values of these variables have byte-compiled functions
10331 associated with them, while the user-generated versions do not, of
10332 course.) 
10333
10334 To help with this, you can run @code{gnus-compile} after you've fiddled
10335 around with the variables and feel that you're (kind of) satisfied.
10336 This will result in the new specs being byte-compiled, and you'll get
10337 top speed again.
10338
10339 The result of these byte-compilations will be written to
10340 @file{.gnus.elc} by default.
10341
10342 Note that Gnus will read @file{.gnus.elc} instead of @file{.gnus} if
10343 @file{.gnus.elc} exists, so if you change @file{.gnus}, you should
10344 remove @file{.gnus.elc}.
10345
10346
10347 @node Daemons
10348 @section Daemons
10349 @cindex demons
10350 @cindex daemons
10351
10352 Gnus, being larger than any program ever written (allegedly), does lots
10353 of strange stuff that you may wish to have done while you're not
10354 present.  For instance, you may want it to check for new mail once in a
10355 while.  Or you may want it to close down all connections to all servers
10356 when you leave Emacs idle.  And stuff like that.
10357
10358 Gnus will let you do stuff like that by defining various
10359 @dfn{handlers}.  Each handler consists of three elements:  A
10360 @var{function}, a @var{time}, and an @var{idle} parameter.
10361
10362 Here's an example of a handler that closes connections when Emacs has
10363 been idle for thirty minutes:
10364
10365 @lisp
10366 (gnus-demon-close-connections nil 30)
10367 @end lisp
10368
10369 Here's a handler that scans for PGP headers every hour when Emacs is
10370 idle: 
10371
10372 @lisp
10373 (gnus-demon-scan-pgp 60 t)
10374 @end lisp
10375
10376 This @var{time} parameter and than @var{idle} parameter works together
10377 in a strange, but wonderful fashion.  Basically, if @var{idle} is
10378 @code{nil}, then the function will be called every @var{time} minutes.
10379
10380 If @var{idle} is @code{t}, then the function will be called after
10381 @var{time} minutes only if Emacs is idle.  So if Emacs is never idle,
10382 the function will never be called.  But once Emacs goes idle, the
10383 function will be called every @var{time} minutes.
10384
10385 If @var{idle} is a number and @var{time} is a number, the function will
10386 be called every @var{time} minutes only when Emacs has been idle for
10387 @var{idle} minutes.
10388
10389 If @var{idle} is a number and @var{time} is @code{nil}, the function
10390 will be called once every time Emacs has been idle for @var{idle}
10391 minutes.  
10392
10393 And if @var{time} is a string, it should look like @samp{"07:31"}, and
10394 the function will then be called once every day somewhere near that
10395 time.  Modified by the @var{idle} parameter, of course.
10396
10397 @vindex gnus-demon-timestep
10398 (When I say ``minute'' here, I really mean @code{gnus-demon-timestep}
10399 seconds.  This is @samp{60} by default.  If you change that variable,
10400 all the timings in the handlers will be affected.)
10401
10402 @vindex gnus-use-demon
10403 To set the whole thing in motion, though, you have to set
10404 @code{gnus-use-demon} to @code{t}.
10405
10406 @vindex gnus-use-demon
10407 To set the whole thing in motion, though, you have to set
10408 @code{gnus-use-demon} to @code{t}.
10409
10410 So, if you want to add a handler, you could put something like this in
10411 your @file{.gnus} file:
10412
10413 @findex gnus-demon-add-handler
10414 @lisp
10415 (gnus-demon-add-handler 'gnus-demon-close-connections nil 30)
10416 @end lisp
10417
10418 @findex gnus-demon-add-nocem
10419 @findex gnus-demon-add-scanmail
10420 @findex gnus-demon-add-disconnection
10421 Some ready-made functions to do this has been created:
10422 @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, and
10423 @code{gnus-demon-add-scanmail}.  Just put those functions in your
10424 @file{.gnus} if you want those abilities.
10425
10426 @findex gnus-demon-init
10427 @findex gnus-demon-cancel
10428 @vindex gnus-demon-handlers
10429 If you add handlers to @code{gnus-demon-handlers} directly, you should
10430 run @code{gnus-demon-init} to make the changes take hold.  To cancel all
10431 daemons, you can use the @code{gnus-demon-cancel} function.
10432
10433 Note that adding daemons can be pretty naughty if you overdo it.  Adding
10434 functions that scan all news and mail from all servers every two seconds
10435 is a sure-fire way of getting booted off any respectable system.  So
10436 behave. 
10437
10438
10439 @node NoCeM
10440 @section NoCeM
10441 @cindex nocem
10442 @cindex spam
10443
10444
10445
10446 @node Various Various
10447 @section Various Various
10448 @cindex mode lines
10449 @cindex highlights
10450
10451 @table @code
10452
10453 @item gnus-verbose
10454 @vindex gnus-verbose
10455 This variable is an integer between zero and ten.  The higher the value,
10456 the more messages will be displayed.  If this variable is zero, Gnus
10457 will never flash any messages, if it is seven (which is the default),
10458 most important messages will be shown, and if it is ten, Gnus won't ever
10459 shut up, but will flash so many messages it will make your head swim.
10460
10461 @item gnus-verbose-backends
10462 @vindex gnus-verbose-backends
10463 This variable works the same way as @code{gnus-verbose}, but it applies
10464 to the Gnus backends instead of Gnus proper.
10465
10466 @item gnus-updated-mode-lines
10467 @vindex gnus-updated-mode-lines
10468 This is a list of buffers that should keep their mode lines updated.
10469 The list may contain the symbols @code{group}, @code{article} and
10470 @code{summary}.  If the corresponding symbol is present, Gnus will keep
10471 that mode line updated with information that may be pertinent.  If this
10472 variable is @code{nil}, screen refresh may be quicker.
10473
10474 @cindex display-time
10475
10476 @item gnus-mode-non-string-length
10477 @vindex gnus-mode-non-string-length
10478 By default, Gnus displays information on the current article in the mode
10479 lines of the summary and article buffers.  The information Gnus wishes
10480 to display (eg. the subject of the article) is often longer than the
10481 mode lines, and therefore have to be cut off at some point.  This
10482 variable says how long the other elements on the line is (i.e., the
10483 non-info part).  If you put additional elements on the mode line (eg. a
10484 clock), you should modify this variable:
10485
10486 @c Hook written by Francesco Potorti` <pot@cnuce.cnr.it>
10487 @lisp
10488 (add-hook 'display-time-hook
10489           (lambda () (setq gnus-mode-non-string-length
10490                            (+ 21
10491                               (if line-number-mode 5 0)
10492                               (if column-number-mode 4 0)
10493                               (length display-time-string)))))
10494 @end lisp
10495
10496 If this variable is @code{nil} (which is the default), the mode line
10497 strings won't be chopped off, and they won't be padded either.
10498
10499 @item gnus-visual
10500 @vindex gnus-visual
10501 @cindex visual
10502 @cindex highlighting
10503 @cindex menus
10504
10505 If @code{nil}, Gnus won't attempt to create menus or use fancy colors
10506 or fonts.  This will also inhibit loading the @file{gnus-visual.el}
10507 file.
10508
10509 This variable can also be a list of visual properties that are enabled.
10510 The following elements are legal, and are all set by default:
10511
10512 @table @code
10513
10514 @item summary-highlight
10515 Perform various highlighting in the summary buffer.
10516
10517 @item article-highlight
10518 Perform various highlighting in the article buffer.
10519
10520 @item highlight
10521 Turn on highlighting in all buffers.
10522
10523 @item group-menu
10524 Create menus in the group buffer.
10525
10526 @item summary-menu
10527 Create menus in the summary buffer.
10528
10529 @item article-menu
10530 Create menus in the article buffer.
10531
10532 @item browse-menu
10533 Create menus in the browse buffer.
10534
10535 @item server-menu
10536 Create menus in the server buffer.
10537
10538 @item menu
10539 Create menus in all buffers.
10540
10541 @end table
10542
10543 So if you only want highlighting in the article buffer and menus in all
10544 buffers, you couls say something like:
10545
10546 @lisp
10547 (setq gnus-visual '(article-highlight menu))
10548 @end lisp
10549
10550 If you want only highlighting and no menus whatsoever, you'd say:
10551
10552 @lisp
10553 (setq gnus-visual '(highlight))
10554 @end lisp
10555
10556 @item gnus-mouse-face
10557 @vindex gnus-mouse-face
10558 This is the face (i.e., font) used for mouse highlighting in Gnus.  No
10559 mouse highlights will be done if @code{gnus-visual} is @code{nil}.
10560
10561 @item gnus-display-type
10562 @vindex gnus-display-type
10563 This variable is symbol indicating the display Emacs is running under.
10564 The symbol should be one of @code{color}, @code{grayscale} or
10565 @code{mono}.  If Gnus guesses this display attribute wrongly, either set
10566 this variable in your @file{~/.emacs} or set the resource
10567 @code{Emacs.displayType} in your @file{~/.Xdefaults}.
10568
10569 @item gnus-background-mode 
10570 @vindex gnus-background-mode 
10571 This is a symbol indicating the Emacs background brightness.  The symbol
10572 should be one of @code{light} or @code{dark}.  If Gnus guesses this
10573 frame attribute wrongly, either set this variable in your @file{~/.emacs} or
10574 set the resource @code{Emacs.backgroundMode} in your @file{~/.Xdefaults}. 
10575 `gnus-display-type'.
10576
10577 @item nnheader-max-head-length
10578 @vindex nnheader-max-head-length
10579 When the backends read straight heads of articles, they all try to read
10580 as little as possible.  This variable (default @code{4096}) specifies
10581 the absolute max length the backends will try to read before giving up
10582 on finding a separator line between the head and the body.  If this
10583 variable is @code{nil}, there is no upper read bound.  If it is
10584 @code{t}, the backends won't try to read the articles piece by piece,
10585 but read the entire articles.  This makes sense with some versions of
10586 @code{ange-ftp}. 
10587
10588 @item nnheader-file-name-translation-alist 
10589 @vindex nnheader-file-name-translation-alist 
10590 @cindex file names
10591 @cindex illegal characters in file names
10592 @cindex characters in file names
10593 This is an alist that says how to translate characters in file names.
10594 For instance, if @samp{:} is illegal as a file character in file names
10595 on your system (you OS/2 user you), you could say something like:
10596
10597 @lisp
10598 (setq nnheader-file-name-translation-alist 
10599       '((?: . ?_)))
10600 @end lisp
10601
10602 In fact, this is the default value for this variable on OS/2 and MS
10603 Windows (phooey) systems.
10604
10605 @end table
10606
10607 @node Customization
10608 @chapter Customization
10609 @cindex general customization
10610
10611 All variables are properly documented elsewhere in this manual.  This
10612 section is designed to give general pointers on how to customize Gnus
10613 for some quite common situations.
10614
10615 @menu
10616 * Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
10617 * Slow Terminal Connection::  You run a remote Emacs.
10618 * Little Disk Space::         You feel that having large setup files is icky.
10619 * Slow Machine::              You feel like buying a faster machine.
10620 @end menu
10621
10622 @node Slow/Expensive Connection
10623 @section Slow/Expensive @sc{nntp} Connection
10624
10625 If you run Emacs on a machine locally, and get your news from a machine
10626 over some very thin strings, you want to cut down on the amount of data
10627 Gnus has to get from the @sc{nntp} server.
10628
10629 @table @code
10630
10631 @item gnus-read-active-file
10632 Set this to @code{nil}, which will inhibit Gnus from requesting the
10633 entire active file from the server.  This file is often v.  large.  You
10634 also have to set @code{gnus-check-new-news} and
10635 @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus
10636 doesn't suddenly decide to fetch the active file anyway.
10637
10638 @item gnus-nov-is-evil
10639 This one has to be @code{nil}.  If not, grabbing article headers from
10640 the @sc{nntp} server will not be very fast.  Not all @sc{nntp} servers
10641 support @sc{xover}; Gnus will detect this by itself.
10642 @end table
10643
10644 @node Slow Terminal Connection
10645 @section Slow Terminal Connection
10646
10647 Let's say you use your home computer for dialing up the system that
10648 runs Emacs and Gnus.  If your modem is slow, you want to reduce the
10649 amount of data that is sent over the wires as much as possible.
10650
10651 @table @code
10652
10653 @item gnus-auto-center-summary
10654 Set this to @code{nil} to inhibit Gnus from recentering the summary
10655 buffer all the time.  
10656
10657 @item gnus-visible-headers
10658 Cut down on the headers that are included in the articles to the
10659 minimum.  You can, in fact, make do without them altogether---most of the
10660 useful data is in the summary buffer, anyway.  Set this variable to
10661 @samp{"^NEVVVVER"} or @samp{"From:"}, or whatever you feel you need.
10662
10663 @item gnus-article-display-hook
10664 Set this hook to all the available hiding commands:
10665 @lisp
10666 (setq gnus-article-display-hook 
10667       '(gnus-article-hide-headers gnus-article-hide-signature
10668         gnus-article-hide-citation))
10669 @end lisp
10670
10671 @item gnus-use-full-window
10672 By setting this to @code{nil}, you can make all the windows smaller.
10673 While this doesn't really cut down much generally, it means that you
10674 have to see smaller portions of articles before deciding that you didn't
10675 want to read them anyway.
10676
10677 @item gnus-thread-hide-subtree
10678 If this is non-@code{nil}, all threads in the summary buffer will be
10679 hidden initially.
10680
10681 @item gnus-updated-mode-lines
10682 If this is @code{nil}, Gnus will not put information in the buffer mode
10683 lines, which might save some time.
10684 @end table
10685
10686 @node Little Disk Space
10687 @section Little Disk Space
10688
10689 The startup files can get rather large, so you may want to cut their
10690 sizes a bit if you are running out of space.
10691
10692 @table @code
10693
10694 @item gnus-save-newsrc-file
10695 If this is @code{nil}, Gnus will never save @file{.newsrc}---it will
10696 only save @file{.newsrc.eld}.  This means that you will not be able to
10697 use any other newsreaders than Gnus.  This variable is @code{t} by
10698 default. 
10699
10700 @item gnus-save-killed-list
10701 If this is @code{nil}, Gnus will not save the list of dead groups.  You
10702 should also set @code{gnus-check-new-newsgroups} to @code{ask-server}
10703 and @code{gnus-check-bogus-newsgroups} to @code{nil} if you set this
10704 variable to @code{nil}.  This variable is @code{t} by default.
10705
10706 @end table
10707
10708
10709 @node Slow Machine
10710 @section Slow Machine
10711
10712 If you have a slow machine, or are just really impatient, there are a
10713 few things you can do to make Gnus run faster.
10714
10715 Set@code{gnus-check-new-newsgroups} and
10716 @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster.
10717
10718 Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
10719 @code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
10720 summary buffer faster.
10721
10722 Set @code{gnus-article-display-hook} to @code{nil} to make article
10723 processing a bit faster.
10724
10725
10726 @node Troubleshooting
10727 @chapter Troubleshooting
10728 @cindex troubleshooting
10729
10730 Gnus works @emph{so} well straight out of the box---I can't imagine any
10731 problems, really.
10732
10733 Ahem.
10734
10735 @enumerate
10736
10737 @item
10738 Make sure your computer is switched on.
10739
10740 @item
10741 Make sure that you really load the current Gnus version.  If you have
10742 been running @sc{gnus}, you need to exit Emacs and start it up again before
10743 Gnus will work.
10744
10745 @item
10746 Try doing an @kbd{M-x gnus-version}.  If you get something that looks
10747 like @samp{Gnus v5.46; nntp 4.0} you have the right files loaded.  If,
10748 on the other hand, you get something like @samp{NNTP 3.x} or @samp{nntp
10749 flee}, you have some old @file{.el} files lying around.  Delete these.
10750
10751 @item
10752 Read the help group (@kbd{G h} in the group buffer) for a FAQ and a
10753 how-to. 
10754 @end enumerate
10755
10756 If all else fails, report the problem as a bug.
10757
10758 @cindex bugs
10759 @cindex reporting bugs
10760
10761 @kindex M-x gnus-bug
10762 @findex gnus-bug
10763 If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}
10764 command. @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
10765 me the backtrace.  I will fix bugs, but I can only fix them if you send
10766 me a precise description as to how to reproduce the bug.
10767
10768 You really can never be too detailed in a bug report.  Always use the
10769 @kbd{M-x gnus-bug} command when you make bug reports, even if it creates
10770 a 10Kb mail each time you use it, and even if you have sent me your
10771 environment 500 times before.  I don't care.  I want the full info each
10772 time.  
10773
10774 It is also important to remember that I have no memory whatsoever.  If
10775 you send a bug report, and I send you a reply, and then you send back
10776 just ``No, it's not! Moron!'', I will have no idea what you are insulting
10777 me about.  Always overexplain everything.  It's much easier for all of
10778 us---if I don't have all the information I need, I will just mail you
10779 and ask for more info, and everything takes more time.
10780
10781 If you just need help, you are better off asking on
10782 @samp{gnu.emacs.gnus}.  I'm not very helpful.
10783
10784 @cindex gnu.emacs.gnus
10785 @cindex ding mailing list
10786 You can also ask on the ding mailing list---@samp{ding@@ifi.uio.no}.
10787 Write to @samp{ding-request@@ifi.uio.no} to subscribe.
10788
10789
10790 @node The End
10791 @chapter The End
10792
10793 Well, that's the manual---you can get on with your life now.  Keep in
10794 touch.  Say hello to your cats from me.  
10795
10796 My @strong{ghod}---I just can't stand goodbyes.  Sniffle.
10797
10798 Ol' Charles Reznikoff said it pretty well, so I leave the floor to him:
10799
10800 @quotation
10801 @strong{Te Deum}
10802 @sp 1
10803 Not because of victories @*
10804 I sing,@*
10805 having none,@*
10806 but for the common sunshine,@*
10807 the breeze,@*
10808 the largess of the spring.
10809 @sp 1
10810 Not for victory@*
10811 but for the day's work done@*
10812 as well as I was able;@*
10813 not for a seat upon the dais@*
10814 but at the common table.@*
10815 @end quotation
10816
10817 @node Appendices
10818 @chapter Appendices
10819
10820 @menu
10821 * A Programmer@'s Guide to Gnus::   Rilly, rilly technical stuff.
10822 * Emacs for Heathens::             A short intruduction to Emacsian terms.
10823 * Frequently Asked Questions::     A question-and-answer session.
10824 @end menu
10825
10826
10827 @node A Programmer@'s Guide to Gnus
10828 @section A Programmer's Guide to Gnus
10829
10830 It is my hope that other people will figure out smart stuff that Gnus
10831 can do, and that other people will write those smart things as well.  To
10832 facilitate that I thought it would be a good idea to describe the inner
10833 workings of Gnus.  And some of the not-so-inner workings, while I'm at
10834 it.
10835
10836 You can never expect the internals of a program not to change, but I
10837 will be defining (in some details) the interface between Gnus and its
10838 backends (this is written in stone), the format of the score files
10839 (ditto), data structures (some are less likely to change than others)
10840 and general method of operations.
10841
10842 @menu 
10843 * Backend Interface::        How Gnus communicates with the servers.
10844 * Score File Syntax::        A BNF definition of the score file standard.
10845 * Headers::                  How Gnus stores headers internally.
10846 * Ranges::                   A handy format for storing mucho numbers.
10847 * Group Info::               The group info format.
10848 * Various File Formats::     Formats of files that Gnus use.
10849 @end menu
10850
10851
10852 @node Backend Interface
10853 @subsection Backend Interface
10854
10855 Gnus doesn't know anything about @sc{nntp}, spools, mail or virtual
10856 groups.  It only knows how to talk to @dfn{virtual servers}.  A virtual
10857 server is a @dfn{backend} and some @dfn{backend variables}.  As examples
10858 of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}.  As
10859 examples of the latter we have @code{nntp-port-number} and
10860 @code{nnmbox-directory}.
10861
10862 When Gnus asks for information from a backend---say @code{nntp}---on
10863 something, it will normally include a virtual server name in the
10864 function parameters.  (If not, the backend should use the ``current''
10865 virtual server.)  For instance, @code{nntp-request-list} takes a virtual
10866 server as its only (optional) parameter.  If this virtual server hasn't
10867 been opened, the function should fail.
10868
10869 Note that a virtual server name has no relation to some physical server
10870 name.  Take this example:
10871
10872 @lisp
10873 (nntp "odd-one" 
10874       (nntp-address "ifi.uio.no") 
10875       (nntp-port-number 4324))
10876 @end lisp
10877
10878 Here the virtual server name is @samp{"odd-one"} while the name of
10879 the physical server is @samp{"ifi.uio.no"}. 
10880
10881 The backends should be able to switch between several virtual servers.
10882 The standard backends implement this by keeping an alist of virtual
10883 server environments that it pulls down/pushes up when needed.  
10884
10885 There are two groups of interface functions: @dfn{required functions},
10886 which must be present, and @dfn{optional functions}, which Gnus will
10887 always check whether are present before attempting to call.
10888
10889 All these functions are expected to return data in the buffer
10890 @code{nntp-server-buffer} (@samp{" *nntpd*"}), which is somewhat
10891 unfortunately named, but we'll have to live with it.  When I talk about
10892 ``resulting data'', I always refer to the data in that buffer.  When I
10893 talk about ``return value'', I talk about the function value returned by
10894 the function call.
10895
10896 Some backends could be said to be @dfn{server-forming} backends, and
10897 some might be said to not be.  The latter are backends that generally
10898 only operate on one group at a time, and have no concept of ``server'' --
10899 they have a group, and they deliver info on that group and nothing more.
10900
10901 In the examples and definitions I will refer to the imaginary backend
10902 @code{nnchoke}. 
10903
10904 @cindex @code{nnchoke}
10905
10906 @menu
10907 * Required Backend Functions::        Functions that must be implemented.
10908 * Optional Backend Functions::        Functions that need not be implemented.
10909 @end menu
10910
10911
10912 @node Required Backend Functions
10913 @subsubsection Required Backend Functions
10914
10915 @table @code
10916
10917 @item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)
10918
10919 @var{articles} is either a range of article numbers or a list of
10920 @code{Message-ID}s.  Current backends do not fully support either---only
10921 sequences (lists) of article numbers, and most backends do not support
10922 retrieval of @code{Message-ID}s.  But they should try for both. 
10923
10924 The result data should either be HEADs or NOV lines, and the result
10925 value should either be @code{headers} or @code{nov} to reflect this.
10926 This might later be expanded to @code{various}, which will be a mixture
10927 of HEADs and NOV lines, but this is currently not supported by Gnus.  
10928
10929 If @var{fetch-old} is non-@code{nil} it says to try to fetch "extra
10930 headers, in some meaning of the word.  This is generally done by
10931 fetching (at most) @var{fetch-old} extra headers less than the smallest
10932 article number in @code{articles}, and fill in the gaps as well.  The
10933 presence of this parameter can be ignored if the backend finds it
10934 cumbersome to follow the request.  If this is non-@code{nil} and not a
10935 number, do maximum fetches.
10936
10937 Here's an example HEAD:
10938
10939 @example
10940 221 1056 Article retrieved.
10941 Path: ifi.uio.no!sturles
10942 From: sturles@@ifi.uio.no (Sturle Sunde)
10943 Newsgroups: ifi.discussion
10944 Subject: Re: Something very droll
10945 Date: 27 Oct 1994 14:02:57 +0100
10946 Organization: Dept. of Informatics, University of Oslo, Norway
10947 Lines: 26
10948 Message-ID: <38o8e1$a0o@@holmenkollen.ifi.uio.no>
10949 References: <38jdmq$4qu@@visbur.ifi.uio.no>
10950 NNTP-Posting-Host: holmenkollen.ifi.uio.no
10951 .
10952 @end example
10953
10954 So a @code{headers} return value would imply that there's a number of
10955 these in the data buffer.
10956
10957 Here's a BNF definition of such a buffer:
10958
10959 @example
10960 headers        = *head
10961 head           = error / valid-head
10962 error-message  = [ "4" / "5" ] 2number " " <error message> eol
10963 valid-head     = valid-message *header "." eol
10964 valid-message  = "221 " <number> " Article retrieved." eol
10965 header         = <text> eol
10966 @end example
10967
10968 If the return value is @code{nov}, the data buffer should contain
10969 @dfn{network overview database} lines.  These are basically fields
10970 separated by tabs. 
10971
10972 @example
10973 nov-buffer = *nov-line
10974 nov-line   = 8*9 [ field <TAB> ] eol
10975 field      = <text except TAB>
10976 @end example
10977
10978 For a closer explanation what should be in those fields,
10979 @xref{Headers}. 
10980
10981
10982 @item (nnchoke-open-server SERVER &optional DEFINITIONS)
10983
10984 @var{server} is here the virtual server name.  @var{definitions} is a
10985 list of @code{(VARIABLE VALUE)} pairs that defines this virtual server. 
10986
10987 If the server can't be opened, no error should be signaled.  The backend
10988 may then choose to refuse further attempts at connecting to this
10989 server.  In fact, it should do so. 
10990
10991 If the server is opened already, this function should return a
10992 non-@code{nil} value.  There should be no data returned.
10993
10994
10995 @item (nnchoke-close-server &optional SERVER)
10996
10997 Close connection to @var{server} and free all resources connected
10998 to it. 
10999
11000 There should be no data returned.
11001
11002
11003 @item (nnchoke-request-close)
11004
11005 Close connection to all servers and free all resources that the backend
11006 have reserved.  All buffers that have been created by that backend
11007 should be killed.  (Not the @code{nntp-server-buffer}, though.)
11008
11009 There should be no data returned. 
11010
11011
11012 @item (nnchoke-server-opened &optional SERVER)
11013
11014 This function should return whether @var{server} is opened, and that the
11015 connection to it is still alive.  This function should under no
11016 circumstances attempt to reconnect to a server that is has lost
11017 connection to. 
11018
11019 There should be no data returned.
11020
11021
11022 @item (nnchoke-status-message &optional SERVER)
11023
11024 This function should return the last error message from @var{server}. 
11025
11026 There should be no data returned.
11027
11028
11029 @item (nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER)
11030
11031 The result data from this function should be the article specified by
11032 @var{article}.  This might either be a @code{Message-ID} or a number.
11033 It is optional whether to implement retrieval by @code{Message-ID}, but
11034 it would be nice if that were possible.
11035
11036 If @var{to-buffer} is non-@code{nil}, the result data should be returned
11037 in this buffer instead of the normal data buffer.  This is to make it
11038 possible to avoid copying large amounts of data from one buffer to
11039 another, and Gnus mainly request articles to be inserted directly into
11040 its article buffer.
11041
11042
11043 @item (nnchoke-open-group GROUP &optional SERVER)
11044
11045 Make @var{group} the current group.  
11046
11047 There should be no data returned by this function.
11048
11049
11050 @item (nnchoke-request-group GROUP &optional SERVER)
11051
11052 Get data on @var{group}.  This function also has the side effect of
11053 making @var{group} the current group. 
11054
11055 Here's an example of some result data and a definition of the same:
11056
11057 @example
11058 211 56 1000 1059 ifi.discussion
11059 @end example
11060
11061 The first number is the status, which should be @samp{211}.  Next is the
11062 total number of articles in the group, the lowest article number, the
11063 highest article number, and finally the group name.  Note that the total
11064 number of articles may be less than one might think while just
11065 considering the highest and lowest article numbers, but some articles
11066 may have been cancelled.  Gnus just discards the total-number, so
11067 whether one should take the bother to generate it properly (if that is a
11068 problem) is left as an excercise to the reader.
11069
11070 @example
11071 group-status = [ error / info ] eol
11072 error        = [ "4" / "5" ] 2<number> " " <Error message>
11073 info         = "211 " 3* [ <number> " " ] <string>
11074 @end example
11075
11076
11077 @item (nnchoke-close-group GROUP &optional SERVER)
11078
11079 Close @var{group} and free any resources connected to it.  This will be
11080 a no-op on most backends. 
11081
11082 There should be no data returned.
11083
11084
11085 @item (nnchoke-request-list &optional SERVER)
11086
11087 Return a list of all groups available on @var{server}.  And that means
11088 @emph{all}. 
11089
11090 Here's an example from a server that only carries two groups:
11091
11092 @example
11093 ifi.test 0000002200 0000002000 y
11094 ifi.discussion 3324 3300 n
11095 @end example
11096
11097 On each line we have a group name, then the highest article number in
11098 that group, the lowest article number, and finally a flag.
11099
11100 @example
11101 active-file = *active-line
11102 active-line = name " " <number> " " <number> " " flags eol
11103 name        = <string>
11104 flags       = "n" / "y" / "m" / "x" / "j" / "=" name
11105 @end example
11106
11107 The flag says whether the group is read-only (@samp{n}), is moderated
11108 (@samp{m}), is dead (@samp{x}), is aliased to some other group
11109 (@samp{=other-group} or none of the above (@samp{y}). 
11110
11111
11112 @item (nnchoke-request-post &optional SERVER)
11113
11114 This function should post the current buffer.  It might return whether
11115 the posting was successful or not, but that's not required.  If, for
11116 instance, the posting is done asynchronously, it has generally not been
11117 completed by the time this function concludes.  In that case, this
11118 function should set up some kind of sentinel to beep the user loud and
11119 clear if the posting could not be completed.
11120
11121 There should be no result data from this function. 
11122
11123
11124 @item (nnchoke-request-post-buffer POST GROUP SUBJECT HEADER ARTICLE-BUFFER INFO FOLLOW-TO RESPECT-POSTER)
11125
11126 This function should return a buffer suitable for composing an article
11127 to be posted by @code{nnchoke-request-post}.  If @var{post} is
11128 non-@code{nil}, this is not a followup, but a totally new article.
11129 @var{group} is the name of the group to be posted to.  @var{subject} is
11130 the subject of the message.  @var{article-buffer} is the buffer being
11131 followed up, if that is the case.  @var{info} is the group info.
11132 @var{follow-to} is the group that one is supposed to re-direct the
11133 article ot.  If @var{respect-poster} is non-@code{nil}, the special
11134 @samp{"poster"} value of a @code{Followup-To} header is to be respected.
11135
11136 There should be no result data returned.
11137
11138 @end table
11139
11140 @node Optional Backend Functions
11141 @subsubsection Optional Backend Functions
11142
11143 @table @code
11144
11145 @item (nnchoke-retrieve-groups GROUPS &optional SERVER)
11146
11147 @var{groups} is a list of groups, and this function should request data
11148 on all those groups.  How it does it is of no concern to Gnus, but it
11149 should attempt to do this in a speedy fashion.
11150
11151 The return value of this function can be either @code{active} or
11152 @code{group}, which says what the format of the result data is.  The
11153 former is in the same format as the data from
11154 @code{nnchoke-request-list}, while the latter is a buffer full of lines
11155 in the same format as @code{nnchoke-request-group} gives.
11156
11157 @example
11158 group-buffer = *active-line / *group-status
11159 @end example
11160
11161
11162 @item (nnchoke-request-update-info GROUP INFO &optional SERVER)
11163
11164 A Gnus group info (@pxref{Group Info}) is handed to the backend for
11165 alterations.  This comes in handy if the backend really carries all the
11166 information (as is the case with virtual an imap groups).  This function
11167 may alter the info in any manner it sees fit, and should return the
11168 (altered) group info.  This function may alter the group info
11169 destructively, so no copying is needed before boogeying. 
11170
11171 There should be no result data from this function.
11172
11173
11174 @item (nnchoke-request-type GROUP &optional ARTICLE)
11175
11176 When the user issues commands for ``sending news'' (@kbd{F} in the summary
11177 buffer, for instance), Gnus has to know whether the article the user is
11178 following up is news or mail.  This function should return @code{news}
11179 if @var{article} in @var{group} is news, @code{mail} if it is mail and
11180 @code{unknown} if the type can't be decided.  (The @var{article}
11181 parameter is necessary in @code{nnvirtual} groups which might very well
11182 combine mail groups and news groups.)
11183
11184 There should be no result data from this function.
11185
11186
11187 @item (nnchoke-request-update-mark GROUP ARTICLE MARK)
11188
11189 If the user tries to set a mark that the backend doesn't like, this
11190 function may change the mark.  Gnus will use whatever this function
11191 returns as the mark for @var{article} instead of the original
11192 @var{mark}.  If the backend doesn't care, it must return the original
11193 @var{mark}, and not @code{nil} or any other type of garbage.  
11194
11195 The only use for this that I can see is what @code{nnvirtual} does with
11196 it---if a component group is auto-expirable, marking an article as read
11197 in the virtual group should result in the article being marked as
11198 expirable. 
11199
11200 There should be no result data from this function.
11201
11202
11203 @item (nnchoke-request-scan &optional GROUP SERVER)
11204
11205 This function may be called at any time (by Gnus or anything else) to
11206 request that the backend check for incoming articles, in one way or
11207 another.  A mail backend will typically read the spool file or query the
11208 POP server when this function is invoked.  The @var{group} doesn't have
11209 to be heeded---if the backend decides that it is too much work just
11210 scanning for a single group, it may do a total scan of all groups.  It
11211 would be nice, however, to keep things local if that's practical.
11212
11213 There should be no result data from this function.
11214
11215
11216 @item (nnchoke-request-asynchronous GROUP &optional SERVER ARTICLES)
11217
11218 This is a request to fetch articles asynchronously later.
11219 @var{articles} is an alist of @var{(article-number line-number)}.  One
11220 would generally expect that if one later fetches article number 4, for
11221 instance, some sort of asynchronous fetching of the articles after 4
11222 (which might be 5, 6, 7 or 11, 3, 909 depending on the order in that
11223 alist) would be fetched asynchronouly, but that is left up to the
11224 backend.  Gnus doesn't care.
11225
11226 There should be no result data from this function.
11227  
11228
11229 @item (nnchoke-request-group-description GROUP &optional SERVER)
11230
11231 The result data from this function should be a description of
11232 @var{group}. 
11233
11234 @example
11235 description-line = name <TAB> description eol
11236 name             = <string>
11237 description      = <text>
11238 @end example
11239
11240 @item (nnchoke-request-list-newsgroups &optional SERVER)
11241
11242 The result data from this function should be the description of all
11243 groups available on the server.
11244
11245 @example
11246 description-buffer = *description-line
11247 @end example
11248
11249
11250 @item (nnchoke-request-newgroups DATE &optional SERVER)
11251
11252 The result data from this function should be all groups that were
11253 created after @samp{date}, which is in normal human-readable date
11254 format.  The data should be in the active buffer format.
11255
11256
11257 @item (nnchoke-request-create-groups GROUP &optional SERVER)
11258
11259 This function should create an empty group with name @var{group}.  
11260
11261 There should be no return data.
11262
11263
11264 @item (nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE)
11265
11266 This function should run the expiry process on all articles in the
11267 @var{articles} range (which is currently a simple list of article
11268 numbers.)  It is left up to the backend to decide how old articles
11269 should be before they are removed by this function.  If @var{force} is
11270 non-@code{nil}, all @var{articles} should be deleted, no matter how new
11271 they are. 
11272
11273 This function should return a list of articles that it did not/was not
11274 able to delete.
11275
11276 There should be no result data returned.
11277
11278
11279 @item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM
11280 &optional LAST)
11281
11282 This function should move @var{article} (which is a number) from
11283 @var{group} by calling @var{accept-form}.  
11284
11285 This function should ready the article in question for moving by
11286 removing any header lines it has added to the article, and generally
11287 should ``tidy up'' the article.  Then it should @code{eval}
11288 @var{accept-form} in the buffer where the ``tidy'' article is.  This will
11289 do the actual copying.  If this @code{eval} returns a non-@code{nil}
11290 value, the article should be removed.
11291
11292 If @var{last} is @code{nil}, that means that there is a high likelihood
11293 that there will be more requests issued shortly, so that allows some
11294 optimizations. 
11295
11296 There should be no data returned. 
11297
11298
11299 @item (nnchoke-request-accept-article GROUP &optional LAST)
11300
11301 This function takes the current buffer and inserts it into @var{group}.
11302 If @var{last} in @code{nil}, that means that there will be more calls to
11303 this function in short order.
11304
11305 There should be no data returned.
11306
11307
11308 @item (nnchoke-request-replace-article ARTICLE GROUP BUFFER)
11309
11310 This function should remove @var{article} (which is a number) from
11311 @var{group} and insert @var{buffer} there instead.
11312
11313 There should be no data returned.
11314
11315
11316 @item (nnchoke-request-delete-group GROUP FORCE &optional SERVER)
11317
11318 This function should delete @var{group}.  If @var{force}, it should
11319 really delete all the articles in the group, and then delete the group
11320 itself.  (If there is such a thing as ``the group itself''.)
11321
11322 There should be no data returned.
11323
11324
11325 @item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER)
11326
11327 This function should rename @var{group} into @var{new-name}.  All
11328 articles that are in @var{group} should move to @var{new-name}.
11329
11330 There should be no data returned.
11331
11332
11333 @end table
11334
11335
11336 @node Score File Syntax
11337 @subsection Score File Syntax
11338
11339 Score files are meant to be easily parsable, but yet extremely
11340 mallable.   It was decided that something that had the same read syntax
11341 as an Emacs Lisp list would fit that spec.
11342
11343 Here's a typical score file:
11344
11345 @lisp
11346 (("summary"
11347   ("win95" -10000 nil s)
11348   ("Gnus"))
11349  ("from"
11350   ("Lars" -1000))
11351  (mark -100))
11352 @end lisp
11353
11354 BNF definition of a score file:
11355
11356 @example
11357 score-file       = "" / "(" *element ")"
11358 element          = rule / atom
11359 rule             = string-rule / number-rule / date-rule
11360 string-rule      = "(" quote string-header quote space *string-match ")"
11361 number-rule      = "(" quote number-header quote space *number-match ")"
11362 date-rule        = "(" quote date-header quote space *date-match ")"
11363 quote            = <ascii 34>
11364 string-header    = "subject" / "from" / "references" / "message-id" / 
11365                    "xref" / "body" / "head" / "all" / "followup"
11366 number-header    = "lines" / "chars"
11367 date-header      = "date"
11368 string-match     = "(" quote <string> quote [ "" / [ space score [ "" / 
11369                    space date [ "" / [ space string-match-t ] ] ] ] ] ")"
11370 score            = "nil" / <integer>
11371 date             = "nil" / <natural number>
11372 string-match-t   = "nil" / "s" / "substring" / "S" / "Substring" / 
11373                    "r" / "regex" / "R" / "Regex" /
11374                    "e" / "exact" / "E" / "Exact" /
11375                    "f" / "fuzzy" / "F" / "Fuzzy"
11376 number-match     = "(" <integer> [ "" / [ space score [ "" / 
11377                    space date [ "" / [ space number-match-t ] ] ] ] ] ")"
11378 number-match-t   = "nil" / "=" / "<" / ">" / ">=" / "<="
11379 date-match       = "(" quote <string> quote [ "" / [ space score [ "" / 
11380                    space date [ "" / [ space date-match-t ] ] ] ] ")"
11381 date-match-t     = "nil" / "at" / "before" / "after"
11382 atom             = "(" [ required-atom / optional-atom ] ")"
11383 required-atom    = mark / expunge / mark-and-expunge / files /
11384                    exclude-files / read-only / touched
11385 optional-atom    = adapt / local / eval 
11386 mark             = "mark" space nil-or-number
11387 nil-or-number    = "nil" / <integer>
11388 expunge          = "expunge" space nil-or-number
11389 mark-and-expunge = "mark-and-expunge" space nil-or-number
11390 files            = "files" *[ space <string> ]
11391 exclude-files    = "exclude-files" *[ space <string> ]
11392 read-only        = "read-only" [ space "nil" / space "t" ]
11393 adapt            = "adapt" [ space "nil" / space "t" / space adapt-rule ]
11394 adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
11395 local            = "local" *[ space "(" <string> space <form> ")" ]
11396 eval             = "eval" space <form>
11397 space            = *[ " " / <TAB> / <NEWLINE> ]
11398 @end example
11399
11400 Any unrecognized elements in a score file should be ignored, but not
11401 discarded.  
11402
11403 As you can see, white space is needed, but the type and amount of white
11404 space is irrelevant.  This means that formatting of the score file is
11405 left up to the programmer---if it's simpler to just spew it all out on
11406 one looong line, then that's ok.
11407
11408 The meaning of the various atoms are explained elsewhere in this
11409 manual. 
11410
11411
11412 @node Headers
11413 @subsection Headers
11414
11415 Gnus uses internally a format for storing article headers that
11416 corresponds to the @sc{nov} format in a mysterious fashion.  One could
11417 almost suspect that the author looked at the @sc{nov} specification and
11418 just shamelessly @emph{stole} the entire thing, and one would be right.
11419
11420 @dfn{Header} is a severly overloaded term.  ``Header'' is used in RFC1036
11421 to talk about lines in the head of an article (eg., @code{From}).  It is
11422 used by many people as a synonym for ``head''---``the header and the
11423 body''.  (That should be avoided, in my opinion.)  And Gnus uses a format
11424 interanally that it calls ``header'', which is what I'm talking about
11425 here.  This is a 9-element vector, basically, with each header (ouch)
11426 having one slot. 
11427
11428 These slots are, in order: @code{number}, @code{subject}, @code{from},
11429 @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines},
11430 @code{xref}.  There are macros for accessing and setting these slots --
11431 they all have predicatable names beginning with @code{mail-header-} and
11432 @code{mail-header-set-}, respectively.  
11433
11434 The @code{xref} slot is really a @code{misc} slot.  Any extra info will
11435 be put in there.
11436
11437
11438 @node Ranges
11439 @subsection Ranges
11440
11441 @sc{gnus} introduced a concept that I found so useful that I've started
11442 using it a lot and have elaborated on it greatly. 
11443
11444 The question is simple: If you have a large amount of objects that are
11445 identified by numbers (say, articles, to take a @emph{wild} example)
11446 that you want to callify as being ``included'', a normal sequence isn't
11447 very useful.  (A 200,000 length sequence is a bit long-winded.)
11448
11449 The solution is as simple as the question: You just collapse the
11450 sequence. 
11451
11452 @example
11453 (1 2 3 4 5 6 10 11 12)
11454 @end example
11455
11456 is transformed into
11457
11458 @example
11459 ((1 . 6) (10 . 12))
11460 @end example
11461
11462 To avoid having those nasty @samp{(13 . 13)} elements to denote a
11463 lonesome object, a @samp{13} is a valid element:
11464
11465 @example
11466 ((1 . 6) 7 (10 . 12))
11467 @end example
11468
11469 This means that comparing two ranges to find out whether they are equal
11470 is slightly tricky:
11471
11472 @example
11473 ((1 . 5) 7 8 (10 . 12))
11474 @end example
11475
11476 and
11477
11478 @example
11479 ((1 . 5) (7 . 8) (10 . 12))
11480 @end example
11481
11482 are equal.  In fact, any non-descending list is a range:
11483
11484 @example
11485 (1 2 3 4 5)
11486 @end example
11487
11488 is a perfectly valid range, although a pretty longwinded one.  This is
11489 also legal:
11490
11491 @example
11492 (1 . 5)
11493 @end example
11494
11495 and is equal to the previous range.
11496
11497 Here's a BNF definition of ranges.  Of course, one must remember the
11498 semantic requirement that the numbers are non-descending.  (Any number
11499 of repetition of the same number is allowed, but apt to disappear in
11500 range handling.)
11501
11502 @example
11503 range           = simple-range / normal-range
11504 simple-range    = "(" number " . " number ")"
11505 normal-range    = "(" start-contents ")"
11506 contents        = "" / simple-range *[ " " contents ] / 
11507                   number *[ " " contents ]
11508 @end example
11509
11510 Gnus currently uses ranges to keep track of read articles and article
11511 marks.  I plan on implementing a number of range operators in C if The
11512 Powers That Be are willing to let me.  (I haven't asked yet, because I
11513 need to do some more thinking on what operators I need to make life
11514 totally range-based without ever having to convert back to normal
11515 sequences.) 
11516
11517
11518 @node Group Info
11519 @subsection Group Info
11520
11521 Gnus stores all permanent info on groups in a @dfn{group info} list.
11522 This list is from three to six elements (or more) long and exhaustively
11523 describes the group.
11524
11525 Here are two example group infos; one is a very simple group while the
11526 second is a more complex one:
11527
11528 @example
11529 ("no.group" 5 (1 . 54324))
11530
11531 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
11532                 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
11533                 (nnml "")
11534                 (auto-expire (to-address "ding@@ifi.uio.no")))
11535 @end example
11536
11537 The first element is the group name as Gnus knows the group; the second
11538 is the group level; the third is the read articles in range format; the
11539 fourth is a list of article marks lists; the fifth is the select method;
11540 and the sixth contains the group parameters.
11541
11542 Here's a BNF definition of the group info format:
11543
11544 @example
11545 info          = "(" group space level space read 
11546                 [ "" / [ space marks-list [ "" / [ space method [ "" /
11547                 space parameters ] ] ] ] ] ")" 
11548 group         = quote <string> quote
11549 level         = <integer in the range of 1 to inf>
11550 read          = range
11551 marks-lists   = nil / "(" *marks ")"
11552 marks         = "(" <string> range ")"
11553 method        = "(" <string> *elisp-forms ")"
11554 parameters    = "(" *elisp-forms ")"
11555 @end example
11556
11557 Actually that @samp{marks} rule is a fib.  A @samp{marks} is a
11558 @samp{<string>} consed on to a @samp{range}, but that's a bitch to say
11559 in pseudo-BNF.
11560
11561
11562 @node Various File Formats
11563 @subsection Various File Formats
11564
11565 @menu
11566 * Active File Format::      Information on articles and groups available.
11567 * Newsgroups File Format::  Group descriptions.
11568 @end menu
11569
11570
11571 @node Active File Format
11572 @subsubsection Active File Format
11573
11574 The active file lists all groups that are available on the server in
11575 question.  It also lists the highest and lowest current article numbers
11576 in each group.  
11577
11578 Here's an exceprt from a typical active file:
11579
11580 @example
11581 soc.motss 296030 293865 y
11582 alt.binaries.pictures.fractals 3922 3913 n
11583 comp.sources.unix 1605 1593 m
11584 comp.binaries.ibm.pc 5097 5089 y
11585 no.general 1000 900 y
11586 @end example
11587
11588 Here's a pseudo-BNF definition of this file:
11589
11590 @example
11591 active      = *group-line
11592 group-line  = group space high-number space low-number space flag <NEWLINE>
11593 group       = <non-white-space string>
11594 space       = " "
11595 high-number = <non-negative integer>
11596 low-number  = <positive integer>
11597 flag        = "y" / "n" / "m" / "j" / "x" / "=" group
11598 @end example
11599
11600
11601 @node Newsgroups File Format
11602 @subsubsection Newsgroups File Format
11603
11604 The newsgroups file lists groups along with their descriptions.  Not all
11605 groups on the server have to be listed,  and not all groups in the file
11606 have to exist on the server.  The file is meant purely as information to
11607 the user.
11608
11609 The format is quite simple; a group name, a tab, and the description.
11610 Here's the definition:
11611
11612 @example
11613 newsgroups    = *line
11614 line          = group tab description <NEWLINE>
11615 group         = <non-white-space string>
11616 tab           = <TAB>
11617 description   = <string>
11618 @end example
11619
11620
11621 @node Emacs for Heathens
11622 @section Emacs for Heathens
11623
11624 Believe it or not, but some people who use Gnus haven't really used
11625 Emacs much before they embarked on their journey on the Gnus Love Boat.
11626 If you are one of those unfortunates whom ``@kbd{M-C-a}'', ``kill the
11627 region'', and ``set @code{gnus-flargblossen} to an alist where the key is
11628 a regexp that is used for matching on the group name'' are magical
11629 phrases with little or no meaning, then this appendix is for you.  If
11630 you are already familiar with Emacs, just ignore this and go fondle your
11631 cat instead.
11632
11633 @menu
11634 * Keystrokes::      Entering text and executing commands.
11635 * Emacs Lisp::      The built-in Emacs programming language.
11636 @end menu
11637
11638
11639 @node Keystrokes
11640 @subsection Keystrokes
11641
11642 @itemize @bullet
11643 @item
11644 Q: What is an experienced Emacs user?
11645
11646 @item 
11647 A: A person who wishes that the terminal had pedals.
11648 @end itemize
11649
11650 Yes, when you use Emacs, you are apt to use the control key, the shift
11651 key and the meta key a lot.  This is very annoying to some people
11652 (notably @code{vi}le users), and the rest of us just love the hell out
11653 of it.  Just give up and submit.  Emacs really does stand for
11654 ``Escape-Meta-Alt-Control-Shift'', and not ``Editing Macros'', as you may
11655 have heard from other disreputable sources (like the Emacs author).
11656
11657 The shift key is normally located near your pinky fingers, and are
11658 normally used to get capital letters and stuff.  You probably use it all
11659 the time.  The control key is normally marked ``CTRL'' or something like
11660 that.  The meta key is, funnily enough, never marked as such on any
11661 keyboards.  The one I'm curretly at has a key that's marked ``Alt'', which
11662 is the meta key on this keyboard.  It's usually located somewhere to the
11663 left hand side of the keyboard, usually on the bottom row.
11664
11665 Now, us Emacs people doesn't say ``press the meta-control-m key'', because
11666 that's just too inconvenient.  We say ``press the @kbd{M-C-m} key''.
11667 @kbd{M-} is the prefix that means ``meta'' and ``C-'' is the prefix that
11668 means ``control''.  So ``press @kbd{C-k}'' means ``press down the control
11669 key, and hold it down while you press @kbd{k}''.  ``Press @kbd{M-C-k}''
11670 means ``press down and hold down the meta key and the control key and
11671 then press @kbd{k}''.  Simple, ay?
11672
11673 This is somewhat complicated by the fact that not all keyboards have a
11674 meta key.  In that case you can use the ``escape'' key.  Then @kbd{M-k}
11675 means ``press escape, release escape, press @kbd{k}''.  That's much more
11676 work than if you have a meta key, so if that's the case, I respectfully
11677 suggest you get a real keyboard with a meta key.  You can't live without
11678 it.
11679
11680
11681
11682 @node Emacs Lisp
11683 @subsection Emacs Lisp
11684
11685 Emacs is the King of Editors because it's really a Lisp interpreter.
11686 Each and every key you tap runs some Emacs Lisp code snippet, and since
11687 Emacs Lisp is an interpreted language, that means that you can configure
11688 any key to run any random code.  You just, like, do it.  
11689
11690 Gnus is written in Emacs Lisp, and is run as a bunch of interpreted
11691 functions.  (These are byte-compiled for speed, but it's still
11692 interpreted.)  If you decide that you don't like the way Gnus does
11693 certain things, it's trivial to have it do something a different way.
11694 (Well, at least if you know how to write Lisp code.)  However, that's
11695 beyond the scope of this manual, so we are simply going to talk about
11696 some common constructs that you normally use in your @file{.emacs} file
11697 to customize Gnus.
11698
11699 If you want to set the variable @code{gnus-florgbnize} to four (4), you
11700 write the following:
11701
11702 @lisp
11703 (setq gnus-florgbnize 4)
11704 @end lisp
11705
11706 This function (really ``special form'') @code{setq} is the one that can
11707 set a variable to some value.  This is really all you need to know.  Now
11708 you can go and fill your @code{.emacs} file with lots of these to change
11709 how Gnus works.
11710
11711 If you have put that thing in your @code{.emacs} file, it will be read
11712 and @code{eval}ed (which is lispese for ``run'') the next time you start
11713 Emacs.  If you want to change the variable right away, simply say
11714 @kbd{C-x C-e} after the closing parenthesis.  That will @code{eval} the
11715 previous ``form'', which here is a simple @code{setq} statement.
11716
11717 Go ahead---just try it, if you're located at your Emacs.  After you
11718 @kbd{C-x C-e}, you will see @samp{4} appear in the echo area, which
11719 is the return value of the form you @code{eval}ed.
11720
11721 Some pitfalls:
11722
11723 If the manual says ``set @code{gnus-read-active-file} to @code{some}'',
11724 that means:
11725
11726 @lisp
11727 (setq gnus-read-active-file 'some)
11728 @end lisp
11729
11730 On the other hand, if the manual says ``set @code{gnus-nntp-server} to
11731 @samp{"nntp.ifi.uio.no"}'', that means:
11732
11733 @lisp
11734 (setq gnus-nntp-server "nntp.ifi.uio.no")
11735 @end lisp
11736
11737 So be careful not to mix up strings (the latter) with symbols (the
11738 former).  The manual is unambiguous, but it can be confusing.
11739
11740
11741 @include gnus-faq.texi
11742
11743 @node Index
11744 @chapter Index
11745 @printindex cp
11746
11747 @node Key Index
11748 @chapter Key Index
11749 @printindex ky
11750
11751 @summarycontents
11752 @contents
11753 @bye
11754
11755 @iftex
11756 @iflatex
11757 \end{document}
11758 @end iflatex
11759 @end iftex
11760
11761 @c End:
11762