*** empty log message ***
[gnus] / texi / gnus.texi
1 \input texinfo                  @c -*-texinfo-*-
2 @comment %**start of header (This is for running Texinfo on a region.)
3 @setfilename gnus.info
4 @settitle September Gnus Manual
5 @synindex fn cp
6 @synindex vr cp
7 @synindex pg cp
8 @iftex
9 @finalout
10 @end iftex
11 @setchapternewpage odd
12 @c      @smallbook
13 @comment %**end of header (This is for running Texinfo on a region.)
14 @tex
15 \overfullrule=0pt
16 %\global\baselineskip 30pt      % For printing in double spaces
17 @end tex
18
19 @ifinfo
20
21 This file documents Gnus, the GNU Emacs newsreader.
22
23 Copyright (C) 1995 Free Software Foundation, Inc.
24
25 Permission is granted to make and distribute verbatim copies of
26 this manual provided the copyright notice and this permission notice
27 are preserved on all copies.
28
29 @ignore
30 Permission is granted to process this file through Tex and print the
31 results, provided the printed document carries copying permission
32 notice identical to this one except for the removal of this paragraph
33 (this paragraph not being relevant to the printed manual).
34
35 @end ignore
36 Permission is granted to copy and distribute modified versions of this
37 manual under the conditions for verbatim copying, provided also that the
38 entire resulting derived work is distributed under the terms of a
39 permission notice identical to this one.
40
41 Permission is granted to copy and distribute translations of this manual
42 into another language, under the above conditions for modified versions.
43 @end ifinfo
44
45 @iftex
46
47 @titlepage
48 @title September Gnus Manual
49
50 @author by Lars Magne Ingebrigtsen
51 @page
52 @vskip 0pt plus 1filll
53 Copyright @copyright{} 1995 Free Software Foundation, Inc. 
54
55 Permission is granted to make and distribute verbatim copies of
56 this manual provided the copyright notice and this permission notice
57 are preserved on all copies.
58
59 Permission is granted to copy and distribute modified versions of this
60 manual under the conditions for verbatim copying, provided that the
61 entire resulting derived work is distributed under the terms of a
62 permission notice identical to this one.
63
64 Permission is granted to copy and distribute translations of this manual
65 into another language, under the above conditions for modified versions.
66
67 Cover art by Etienne Suvasa.
68 @end titlepage
69 @page
70
71 @end iftex
72
73 @node Top
74 @top The Gnus Newsreader
75
76 You can read news (and mail) from within Emacs by using Gnus.  The news
77 can be gotten by any nefarious means you can think of - @sc{nntp}, local
78 spool or your mbox file.  All at the same time, if you want to push your
79 luck.
80
81 @menu
82 * History::                 How Gnus got where it is today.
83 * Terminology::             We use really difficult, like, words here.
84 * Starting Up::             Finding news can be a pain.
85 * The Group Buffer::        Selecting, subscribing and killing groups.
86 * The Summary Buffer::      Reading, saving and posting articles.
87 * The Article Buffer::      Displaying and handling articles.
88 * The Server Buffer::       Making and editing virtual servers.
89 * Scoring::                 Assigning values to articles.
90 * Various::                 General purpose settings.
91 * Customization::           Tailoring Gnus to your needs.
92 * Troubleshooting::         What you might try if things do not work.
93 * The End::                 Farewell and goodbye.
94 * Appendix::                Technical stuff for technical people.
95 * Index::                   Variable, function and concept index.
96 * Key Index::               Key Index.
97 @end menu
98
99 @node History
100 @chapter History
101
102 @cindex history
103 @sc{gnus} was written by Masanobu UMEDA.  When autumn crept up in '94,
104 Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.
105
106 The recommended pronunciation of the name this program is "ding
107 guh-noose", with "ding" being half-sung in a loud, high-pitched voice,
108 and "guh-noose" being grumbled and a disaffected fashion.  Any
109 irritation and/or damage this name may cause you is not the
110 responsibility of the author, even though you might like to strangle him
111 for the stupid idea.
112
113 If you want to investigate the person responsible for this outrage, you
114 can point your (feh!) web browser to
115 @file{http://www.ifi.uio.no/~larsi/}.  This is also the primary
116 distribution point for the new and spiffy versions of Gnus, also know as
117 The Site That Destroys Newsrcs And Drives People Mad.
118
119 During the first extended alpha period of develpment, the new Gnus was
120 called "(ding) Gnus".  @dfn{(ding)}, is, of course, short for @dfn{ding
121 is not Gnus}, which is a total and utter lie, but who cares? (Besides,
122 the "Gnus" in this abbreviation should probably be pronounced "news" as
123 UMEDA intended, which makes it a more appropriate name, don't you
124 think?)
125
126 In any case, after spending all that energy with coming up with a new
127 and spiffy name, we decided that the name was @emph{too} spiffy, so we
128 renamamed it back again to "Gnus".  But in mixed case.  "Gnus" vs.
129 @sc{gnus}.  New vs. old.
130
131 Incidentally, the next Gnus generation will be called "September Gnus",
132 and won't be released until February.  Confused?  You will be.
133
134 @menu
135 * Why?::                What's the point of Gnus?
136 * Compatibility::       Just how compatible is Gnus with @sc{gnus}?
137 * Conformity::          Gnus tries to conform to all standards.
138 * Emacsen::             Gnus can be run on a few modern Emacsen.
139 * Contributors::        Oodles of people.  
140 * New Features::        Pointers to some of the new stuff in Gnus.
141 * Newest Features::     Features so new that they haven't been written yet.
142 @end menu
143
144 @node Why?
145 @section Why?
146
147 What's the point of Gnus?  
148
149 I want to provide a "rad", "happening", "way cool" and "hep" newsreader,
150 that lets you do anything you can think of.  That was my original
151 motivation, but while working on Gnus, it has become clear to me that
152 this generation of newsreaders really belong in the stone age.
153 Newsreaders haven't developed much since the infancy of the net.  If the
154 volume continues to rise with the current rate of increase, all current
155 newsreaders will be pretty much useless.  How do you deal with
156 newsgroups that have hundreds (or thousands) of new articles each day? 
157
158 Gnus offer no real solutions to these questions, but I would very much
159 like to see Gnus being used as a testing ground for new methods of
160 reading and fetching news. Expanding on Umeda-san's wise decision to
161 separate the newsreader from the backends, Gnus now offers a simple
162 interface for anybody who wants to write new backends for fetching mail
163 and news from different sources. I have added hooks for customizations
164 everywhere I can imagine useful. By doing so, I'm inviting every one of
165 you to explore and invent new ways of reading news.
166
167 May Gnus never be complete. @kbd{C-u 100 M-x hail-emacs}. 
168
169 @node Compatibility
170 @section Compatibility
171
172 @cindex compatibility
173 Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
174 bindings have been kept.  More key bindings have been added, of course,
175 but only in one or two obscure cases have old bindings been changed.
176
177 Our motto is:
178 @quotation
179 @cartouche
180 @center In a cloud bones of steel.
181 @end cartouche
182 @end quotation
183
184 All commands have kept their names.  Some internal functions have changed
185 their names.
186
187 The @code{gnus-uu} package has changed drastically. @xref{Decoding
188 Articles}. 
189
190 One major compatibility question if the presence of several summary
191 buffers.  All variables that are relevant while reading a group are
192 buffer-local to the summary buffer they belong in.  Although most
193 important variables have their values copied into their global
194 counterparts whenever a command is executed in the summary buffer, this
195 change might lead to incorrect values being used unless you are careful.
196
197 All code that relies on knowledge of @sc{gnus} internals will probably
198 fail.  To take two examples: Sorting @code{gnus-newsrc-assoc} (or
199 changing it in any way, as a matter of fact) is strictly verboten.  Gnus
200 maintains a hash table that points to the entries in this assoc (which
201 speeds up many functions), and changing the assoc directly will lead to
202 peculiar results.
203
204 @cindex hilit19
205 @cindex highlighting
206 Old hilit19 code does not work at all.  In fact, you should probably
207 remove all hilit code from all Gnus hooks
208 (@code{gnus-group-prepare-hook}, @code{gnus-summary-prepare-hook} and
209 @code{gnus-summary-article-hook}).  (Well, at the very least the first
210 two.)  Gnus provides various integrated functions for highlighting.
211 These are faster and more accurate.  To make life easier for everybody,
212 Gnus will by default remove all hilit calls from all hilit hooks.
213 Uncleanliness!  Away!
214
215 Packages like @code{expire-kill} will no longer work.  As a matter of
216 fact, you should probably remove all old @sc{gnus} packages (and other
217 code) when you start using Gnus.  More likely than not, Gnus already
218 does what you have written code to make @sc{gnus} do.  (Snicker.)
219
220 Even though old methods of doing things are still supported, only the
221 new methods are documented in this manual.  If you detect a new method of
222 doing something while reading this manual, that does not mean you have
223 to stop doing it the old way.
224
225 Gnus understands all @sc{gnus} startup files.
226
227 @kindex M-x gnus-bug
228 Overall, a casual user who hasn't written much code that depends on
229 @sc{gnus} internals should suffer no problems.  If problems occur,
230 please let me know (@kbd{M-x gnus-bug}).
231
232 Problems specific to GNU XEmacs can be reported to popineau@@ese-metz.fr
233 (Fabrice Popineau).  I will just forward any such questions to him,
234 anyway, so you might have to wait longer if you mail XEmacs questions to
235 me.
236
237
238 @node Conformity
239 @section Conformity
240
241 No rebels without a clue here, ma'am.  We conform to all standards known
242 to man.  Except, of course, where we disagree with the standards and/or
243 conventions.
244
245 @table @strong
246
247 @item RFC 822
248 There are no known breaches to this standard.
249
250 @item RFC 1036
251 There are no known breaches to this standard, either.
252
253 @item Usenet Seal of Approval
254 Gnus hasn't been formally through the Seal process, but I have read
255 through the Seal text, and I think that Gnus would pass.
256
257 @item Son-of-RFC 1036
258 We do have some breaches to this one.
259
260 @table @emph
261 @item MIME
262 Gnus does no MIME handling, and this standard-to-be seems to think that
263 MIME is the bees' knees, so we have major breakage here.
264 @item X-Newsreader
265 This is considered to be a "vanity header", while I consider it to be
266 consumer information.  After seeing so many badly formatted articles
267 coming from @code{tin} and @code{Netscape} I know not to use either of
268 those for posting articles.  I would not have known that if it wasn't
269 for the @code{X-Newsreader} header.
270 @item References
271 Gnus does line breaking on this header.  I infer from RFC1036 that being
272 conservative in what you output is not creating 5000-character lines, so
273 it seems like a good idea to me.  However, this standard-to-be says that
274 whitespace in the @code{References} header is to be preserved, so...  It
275 doesn't matter one way or the other to Gnus, so if somebody tells me
276 what The Way is, I'll change it.  Or not.
277 @end table
278
279 @end table
280
281 If you ever see Gnus act noncompliantly to the texts mentioned above,
282 don't hesitate to drop a note to Gnus Towers and let us know.
283
284
285 @node Emacsen
286 @section Emacsen
287 @cindex Emacsen
288 @cindex XEmacs
289 @cindex Mule
290 @cindex Emacs
291
292 Gnus should work on Emacs 19.26 and up, XEmacs 19.12 and up and Mule.
293 There are some vague differences in what Gnus does, though:
294
295 @itemize @bullet
296
297 @item
298 The mouse-face on Gnus lines under Emacs and Mule is delimited to
299 certain parts of the lines while they cover the entire line under
300 XEmacs. 
301
302 @item 
303 The same with current-article marking -- XEmacs puts an underline under
304 the entire article while Emacs and Mule are nicer and kinder.
305
306 @item
307 XEmacs features more graphics -- a logo and a toolbar.
308
309 @item
310 Citation highlighting us better under Emacs and Mule than under XEmacs.
311
312 @item
313 Emacs 19.26-19.28 have tangible hidden headers, which can be a bit
314 confusing. 
315
316 @end itemize
317
318
319 @node Contributors
320 @section Contributors
321 @cindex contributors
322
323 The new Gnus version couldn't have been done without the help of all the
324 people on the (ding) mailing list.  Every day for months I have gotten
325 tens of nice bug reports from them, filling me with joy, every single
326 one of them.  Smooches.  The people on the list have been tried beyond
327 endurance, what with my "oh, that's a neat idea <type type>, yup, I'll
328 release it right away <ship off> no wait, that doesn't work at all <type
329 type>, yup, I'll ship that one off right away <ship off> no, wait, that
330 absolutely does not work" policy for releases.  Microsoft - bah.  I'm
331 @emph{much} worse.
332
333 I would like to take this opportunity to thank the Academy for...  oops,
334 wrong show.
335
336 @itemize @bullet
337 @item
338 Of course, GNUS was written by Masanobu UMEDA.
339 @item 
340 Many excellent functions, especially dealing with scoring and
341 highlighting (as well as the soon-to-come @sc{soup} support) was written
342 by Per Abrahamsen.
343 @item
344 Innumerable bug fixes were written by Sudish Joseph.
345 @item
346 The refcard was written by Vladimir Alexiev.
347 @item
348 I stole some pieces from the XGnus distribution by Felix Lee and JWZ.
349 @item 
350 nnfolder has been much enhanced by Scott Byer.
351 @item
352 The orphan scoring was written by Peter Mutsaers.
353 @item 
354 GNU XEmacs support has been added by Fabrice Popineau. 
355 @item 
356 Various bits and pieces, especially dealing with .newsrc files, was
357 suggested and added by Hallvard B Furuseth.
358 @item 
359 Brian Edmonds has written @code{gnus-bbdb}, as well as other bits and
360 pieces. 
361 @item 
362 Ricardo Nassif did the proof-reading.
363 @item
364 Kevin Davidson came up with the name @dfn{ding}, so blame him.
365 @item 
366 Stainless Steel Rat, Ulrik Dickow, Jack Vinson, Daniel Quinlan, Ilja
367 Weis, Frank D. Cringle, Geoffrey T. Dairiki and Andrew Eskilsson have
368 all contributed code and suggestions.
369 @end itemize
370
371
372 @node New Features
373 @section New Features
374 @cindex new features
375
376 @itemize @bullet
377
378 @item
379 The look of all buffers can be changed by setting format-like variables
380 (@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}). 
381  
382 @item 
383 Local spool and several @sc{nntp} servers can be used at once
384 (@pxref{Foreign Groups}).  
385
386 @item 
387 You can combine groups into virtual groups (@pxref{nnvirtual}). 
388
389 @item 
390 You can read a number of different mail formats (@pxref{Reading Mail}).
391 All the mail backends implement a convenient mail expiry scheme
392 (@code{Expiring Old Mail Articles}). 
393
394 @item
395 Gnus can use various strategies for gathering threads that have lost
396 their roots (thereby gathering loose sub-threads in one thread) or it
397 can go back and retrieve enough headers to build a complete thread
398 (@pxref{Customizing Threading}).
399
400 @item 
401 Killed groups can be displayed in the group buffer, and you can read
402 them as well.
403
404 @item 
405 Gnus can do partial group updates - you do not have to retrieve the
406 entire active file just to check for new articles in a few groups
407 (@pxref{The Active File}).
408
409 @item 
410 Gnus implements a sliding scale of subscribedness to groups
411 (@pxref{Group Levels}).
412
413 @item 
414 You can score articles according to any number of criteria
415 (@pxref{Scoring}).  You can even get Gnus to score articles for you
416 (@pxref{Adaptive Scoring}).
417
418 @item 
419 Gnus maintains a dribble buffer that is auto-saved the normal Emacs
420 manner, so it should be difficult to lose much data on what you have
421 read if your machine should go down (@pxref{Auto Save}). 
422
423 @item 
424 Gnus now has its own startup file to avoid cluttering up the
425 @file{.emacs} file.
426
427 @item 
428 You can set the process mark on both groups and articles and perform
429 operations on all the marked items (@pxref{Process/Prefix}).
430
431 @item 
432 You can grep through a subset of groups and create a group from the
433 results (@pxref{nnkiboze}). 
434
435 @item 
436 You can list subsets of groups according to, well, anything
437 (@pxref{Listing Groups}). 
438
439 @item 
440 You can browse foreign servers and subscribe to groups from those
441 servers (@pxref{Browse Foreign Server}). 
442
443 @item 
444 Gnus can fetch articles asynchronously on a second connection to the
445 server (@pxref{Asynchronous Fetching}).
446
447 @item 
448 You can cache articles locally (@pxref{Article Caching}). 
449
450 @item 
451 The uudecode functions have been expanded and generalized
452 (@pxref{Decoding Articles}). 
453
454 @item
455 You can still post uuencoded articles, which was a little-known feature
456 of @sc{gnus} past (@pxref{Uuencoding & Posting}).
457
458 @item
459 Fetching parents (and other articles) now actually works without
460 glitches (@pxref{Finding the Parent}). 
461
462 @item
463 Gnus can fetch FAQs to and descriptions of groups (@pxref{Group
464 Information}). 
465
466 @item
467 Digests (and other files) can be used as the basis for groups
468 (@pxref{nndoc}).
469
470 @item 
471 Articles can be highlighted and customized (@pxref{Customizing
472 Articles}). 
473
474 @item
475 All Gnus buffers can be customized in a difficult fashion
476 (@pxref{Windows Configuration}). 
477
478 @item
479 You can click on buttons instead of using the keyboard
480 (@pxref{Buttons}). 
481
482 @end itemize
483
484 This is, of course, just a @emph{short} overview of the @emph{most}
485 important new features.  No, really.  There are tons more.  Yes, we have
486 feeping creaturism in full effect, but nothing too gratuitous, I would
487 hope. 
488
489
490 @node Newest Features
491 @section Newest Features
492 @cindex todo
493
494 Also known as the @dfn{todo list}.  Sure to be implemented before the
495 next millennium. 
496
497 Be afraid.  Be very afraid.
498
499 @itemize @bullet
500 @item
501 Native @sc{mime} support is something that should be done.  I was hoping
502 I could steal code from @code{Mew}, the @sc{mime} mail reader for Emacs,
503 but I'm not quite sure what the status of that project is.  Gnus might
504 support @sc{mime} quite soon, and it might not.
505
506 @item
507 @code{trn}-like trees.
508 @item
509 @code{nn}-like pick-and-read summary interface.
510 @item 
511 NoCeM support.
512 @item 
513 Frame configuration.
514 @item
515 Re-sending bounced mail and rejected articles.
516 @item 
517 Floating point group levels and group bubbling.
518 @item
519 @file{/etc/nntpserver} usage.
520 @item 
521 Automatic re-scan of incoming mail.
522 @item
523 Buttonize more stuff in the article buffer.
524 @item
525 A better and simpler method for specifying mail composing methods. 
526 @item 
527 Marks for saved, forwarded, etc articles.
528 @item 
529 Speed up caching and adaptive scoring.
530 @item
531 Gather thread by filling in missing Message-IDs.
532 @item 
533 Slave Gnusii to enable several Gnusii to run at once.
534 @item 
535 PGP support.
536 @item
537 Allow posting through mail-to-news gateways.
538 @item
539 Allow renaming mail groups in a simple fashion.
540 @item
541 Speed up massive group massacres.
542 @item
543 @code{jka-compr} isn't fully supported.
544 @item
545 Create better digests.
546 @item
547 Do better word-wrap on cited text.
548 @item 
549 Better X-Face support with X-Face databases and stuff. 
550 @item
551 Support SELF-DISCIPLINE pins.
552 @item
553 Really do unbinhexing.
554 @item
555 Fetching by Message-ID should work in mail groups.
556 @item
557 Listing of all active groups.
558 @item
559 XEmacs toolbar.
560 @item
561 Do the X-Receipt-To thing.
562 @item
563 Hierarchal group buffers.
564 @item
565 Don't kill summary buffers upon exit from the groups.
566 @item
567 Allow adaption on secondary marks.
568 @end itemize
569
570 And much, much, much more.  There is more to come than has already been
571 implemented.  (But that's always true, isn't it?)
572
573 You can probably sneak a look at the actual up-to-the-second todo list
574 by snooping @code{<URL:http://www.ifi.uio.no/~larsi/sgnus/todo>}. 
575
576 @node Terminology
577 @chapter Terminology
578
579 @cindex terminology
580 @table @dfn
581 @item news
582 @cindex news
583 This is what you are supposed to use this thing for - reading news.
584 News is generally fetched from a nearby @sc{nntp} server, and is
585 generally publicly available to everybody.  If you post news, the entire
586 world is likely to read just what you have written, and they'll all
587 snigger mischievously.  Behind your back.
588 @item mail
589 @cindex mail
590 Everything that's delivered to you personally is mail.  Some news/mail
591 readers (like Gnus) blur the distinction between mail and news, but
592 there is a difference.  Mail is private.  News is public.  Mailing is
593 not posting, and replying is not following up.
594 @item reply
595 Send a mail to the person who has written what you are reading.
596 @item follow up
597 Post an article to the current newsgroup responding to the article you
598 are reading.
599 @item backend
600 Gnus gets fed articles from a number of backends, both news and mail
601 backends.  Gnus does not handle the underlying media, so to speak - this
602 is all done by the backends.
603 @item native
604 Gnus will always use one method (and backend) as the @dfn{native}, or
605 default, way of getting news.
606 @item foreign
607 You can also have any number of foreign groups at the same time.  These
608 are groups that use different backends for getting news.
609 @item head
610 @cindex head
611 The top part of an article, where administration information (etc.) is
612 put. 
613 @item body
614 @cindex body
615 The rest of an article. Everything that is not in the head is in the
616 body. 
617 @item header
618 @cindex header
619 A line from the head of an article. 
620 @item headers
621 @cindex headers
622 A collection of such lines, or a collection of heads.  Or even a
623 collection of @sc{nov} lines.
624 @item @sc{nov}
625 @cindex nov
626 When Gnus enters a group, it asks the backend for the headers for all
627 the unread articles in the group.  Most servers support the News OverView
628 format, which is much smaller and much faster to read than the normal
629 HEAD format. 
630 @item level
631 @cindex levels
632 Each group is subscribed at some @dfn{level} or other (1-9).  The ones
633 that have a lower level are "more" subscribed than the groups with a
634 higher level.  In fact, groups on levels 1-5 are considered
635 @dfn{subscribed}; 6-7 are @dfn{unsubscribed}; 8 are @dfn{zombies}; and 9
636 are @dfn{killed}.  Commands for listing groups and scanning for new
637 articles will all use the numeric prefix as @dfn{working level}.
638 @item killed groups
639 @cindex killed groups
640 No information on killed groups is stored or updated, which makes killed
641 groups much easier to handle than subscribed groups.
642 @item zombie groups
643 @cindex zombie groups
644 Just like killed groups, only slightly less dead.
645 @item active file
646 @cindex active file
647 The news server has to keep track of what articles it carries, and what
648 groups exist.  All this information in stored in the active file, which
649 is rather large, as you might surmise.
650 @item bogus groups
651 @cindex bogus groups
652 A group that exists in the @file{.newsrc} file, but isn't known to the
653 server (i. e.,  it isn't in the active file), is a @emph{bogus group}.
654 This means that the group probably doesn't exist (any more).
655 @end table
656
657 @node Starting Up
658 @chapter Starting Gnus
659 @cindex starting up
660
661 @kindex M-x gnus
662 If your system administrator has set things up properly, starting Gnus
663 and reading news is extremely easy - you just type @kbd{M-x gnus}.
664
665 If things do not go smoothly at startup, you have to twiddle some
666 variables. 
667
668 @menu
669 * Finding the News::    Choosing a method for getting news.
670 * The First Time::      What does Gnus do the first time you start it?
671 * The Server is Down::  How can I read my mail then?
672 * Slave Gnusii::        You can have more than one Gnus active at a time.
673 * New Groups::          What is Gnus supposed to do with new groups?
674 * Startup Files::       Those pesky startup files - @file{.newsrc}.
675 * Auto Save::           Recovering from a crash.
676 * The Active File::     Reading the active file over a slow line Takes Time.
677 * Startup Variables::   Other variables you might change.
678 @end menu
679
680 @node Finding the News
681 @section Finding the News
682
683 @vindex gnus-select-method
684 The @code{gnus-select-method} variable controls how Gnus finds news.
685 This variable should be a list where the first element says @dfn{how}
686 and the second element says @dfn{where}.  This method is is your native
687 method.  All groups that are not fetched with this method are foreign
688 groups.
689
690 For instance, if you want to get your daily dosage of news from the
691 @samp{news.somewhere.edu} @sc{nntp} server, you'd say:
692
693 @lisp
694 (setq gnus-select-method '(nntp "news.somewhere.edu"))
695 @end lisp
696
697 If you want to read directly from the local spool, say:
698
699 @lisp
700 (setq gnus-select-method '(nnspool ""))
701 @end lisp
702
703 If you can use a local spool, you probably should, as it will almost
704 certainly be much faster.
705
706 @vindex gnus-nntpserver-file
707 @cindex NNTPSERVER
708 @cindex nntp server
709 If this variable is not set, Gnus will take a look at the
710 @code{NNTPSERVER} environment variable.  If that variable isn't set,
711 Gnus will see whether @code{gnus-nntpserver-file} (default
712 @file{/etc/nntpserver}) has any opinions in the matter.  It that fails
713 as well, Gnus will will try to use the machine that is running Emacs as
714 an @sc{nntp} server.  That's a longshot, though.
715
716 @vindex gnus-nntp-server
717 If @code{gnus-nntp-server} is set, this variable will override
718 @code{gnus-select-method}.  You should therefore set
719 @code{gnus-nntp-server} to @code{nil}, which is what it is by default.
720
721 @vindex gnus-secondary-servers
722 You can also make Gnus prompt you interactively for the name of an
723 @sc{nntp} server.  If you give a non-numerical prefix to @code{gnus}
724 (i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
725 in the @code{gnus-secondary-servers} list (if any).  You can also just
726 type in the name of any server you feel like visiting.
727
728 However, if you use one @sc{nntp} server regularly, and are just
729 interested in a couple of groups from a different server, you would be
730 better served by using the @code{gnus-group-browse-foreign-server}
731 command from the group buffer.  It will let you have a look at what
732 groups are available, and you can subscribe to any of the groups you
733 want to.  This also makes @file{.newsrc} maintenance much tidier.
734 @xref{Foreign Groups}.
735
736 @vindex gnus-secondary-select-methods
737 A slightly different approach to foreign groups is to set the
738 @code{gnus-secondary-select-methods} variable.  The select methods
739 listed in this variable are in many ways just as native as the
740 @code{gnus-select-method} server.  They will also be queried for active
741 files during startup (if that's required), and new newsgroups that
742 appear on these servers will be subscribed (or not) just as native
743 groups are.
744
745 For instance, if you use the @code{nnmbox} backend to read you mail, you
746 would typically set this variable to
747
748 @lisp
749 (setq gnus-secondary-select-methods '((nnmbox "")))
750 @end lisp
751
752 @node The First Time
753 @section The First Time
754 @cindex first time usage
755
756 If no startup files exist, Gnus will try to determine what groups should
757 be subscribed by default.
758
759 @vindex gnus-default-subscribed-newsgroups
760 If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
761 will subscribe you to just those groups in that list, leaving the rest
762 killed.  Your system administrator should have set this variable to
763 something useful.
764
765 Since she hasn't, Gnus will just subscribe you to a few randomly picked
766 groups (i.e., @samp{*.newusers}).  (@dfn{Random} is here defined as
767 "whatever Lars thinks you should read".)
768
769 You'll also be subscribed to the Gnus documentation group, which should
770 help you with most common problems.  
771
772 If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
773 use the normal functions for handling new groups, and not do anything
774 special.
775
776 @node The Server is Down
777 @section The Server is Down
778 @cindex server errors
779
780 If the default server is down, Gnus will understandably have some
781 problems starting.  However, if you have some mail groups in addition to
782 the news groups, you may want to start Gnus anyway.
783
784 Gnus, being the trusting sort of program, will ask whether to proceed
785 without a native select method if that server can't be contacted.  This
786 will happen whether the server doesn't actually exist (i.e., you have
787 given the wrong address) or the server has just momentarily taken ill
788 for some reason or other.  
789
790 If Gnus says "nntp server on <your server> can't be opened. Continue?",
791 you do not want to continue unless you have some foreign groups that you
792 want to read.  Even if you don't, Gnus will let you continue, but you'll
793 find it difficult to actually do anything in the group buffer.  But,
794 hey, that's your problem.  Blllrph!
795
796 @findex gnus-no-server
797 If you know that the server is definitely down, or you just want to read
798 your mail without bothering with the server at all, you can use the
799 @code{gnus-no-server} command to start Gnus.  That might come in handy
800 if you're in a hurry as well.
801
802
803 @node Slave Gnusii
804 @section Slave Gnusii
805 @cindex slave
806
807 You might with to run more than one Emacs with more than one Gnus at the
808 same time.  If you are using different @file{.newsrc} files (eg., if you
809 are using the two different Gnusii to read from two different servers),
810 that is no problem whatsoever.  You just do it.
811
812 The problem appears when you want to run two Gnusii that uses the same
813 @code{.newsrc} file.  
814
815 To work around that problem some, we here at the Think-Tank at the Gnus
816 Towers have come up with a new concept: @dfn{Master} and
817 @dfn{servants}.  (We have applied for a patent on this concept, and have
818 taken out a copyright on those words.  If you wish to use those words in
819 conjunction with each other, you have to send Â¢1 per usage to me.  Usage
820 of the patent (@dfn{Master/Slave Relationships In Computer
821 Applications}), that will be much more expensive, of course.)
822
823 Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
824 however you do it).  Each subsequent slave Gnusii should be started with
825 @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
826 files, but some slave files that contains only information on what
827 groups have been read in the slave session.  When a master Gnus starts,
828 it will read (and delete) these slave files, incorporating all
829 information from all of them.  (The slave files will be read in the
830 sequence they were created, so the latest changes will have presedence.)
831
832 Information from the slave files has, of course, presedence over the
833 information in the normal (i. e., master) @code{.newsrc} file.
834
835
836 @node New Groups
837 @section New Groups
838 @cindex new groups
839
840 @vindex gnus-subscribe-newsgroup-method
841 What Gnus does when it encounters a new group is determined by the
842 @code{gnus-subscribe-newsgroup-method} variable.
843
844 This variable should contain a function.  Some handy pre-fab values
845 are:
846
847 @table @code
848 @item gnus-subscribe-randomly
849 @vindex gnus-subscribe-randomly
850 Subscribe all new groups randomly.
851 @item gnus-subscribe-alphabetically
852 @vindex gnus-subscribe-alphabetically
853 Subscribe all new groups alphabetically.
854 @item gnus-subscribe-hierarchically
855 @vindex gnus-subscribe-hierarchically
856 Subscribe all new groups hierarchically.
857 @item gnus-subscribe-interactively
858 @vindex gnus-subscribe-interactively
859 Subscribe new groups interactively.  This means that Gnus will ask
860 you about @strong{all} new groups.
861 @item gnus-subscribe-zombies
862 @vindex gnus-subscribe-zombies
863 Make all new groups zombies.  You can browse the zombies later and
864 either kill them all off properly, or subscribe to them.  This is the
865 default.
866 @end table
867
868 @vindex gnus-subscribe-hierarchical-interactive
869 A closely related variable is
870 @code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
871 mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
872 hierarchical fashion whether to subscribe to new groups or not.  Gnus
873 will ask you for each sub-hierarchy whether you want to descend the
874 hierarchy or not.
875
876 One common way to control which new newsgroups should be subscribed or
877 ignored is to put an @dfn{options} line at the start of the
878 @file{.newsrc} file.  Here's an example:
879
880 @example
881 options -n !alt.all !rec.all sci.all
882 @end example
883
884 @vindex gnus-subscribe-options-newsgroup-method
885 This line obviously belongs to a serious-minded intellectual scientific
886 person (or she may just be plain old boring), because it says that all
887 groups that have names beginning with @samp{alt} and @samp{rec} should
888 be ignored, and all groups with names beginning with @samp{sci} should
889 be subscribed.  Gnus will not use the normal subscription method for
890 subscribing these groups.
891 @code{gnus-subscribe-options-newsgroup-method} is used instead.  This
892 variable defaults to @code{gnus-subscribe-alphabetically}.
893
894 @vindex gnus-options-not-subscribe
895 @vindex gnus-options-subscribe
896 If you don't want to mess with your @file{.newsrc} file, you can just
897 set the two variables @code{gnus-options-subscribe} and
898 @code{gnus-options-not-subscribe}.  These two variables do exactly the
899 same as the @file{.newsrc} options -n trick.  Both are regexps, and if
900 the the new group matches the first, it will be unconditionally
901 subscribed, and if it matches the latter, it will be ignored.
902
903 @vindex gnus-check-new-newsgroups
904 If you are satisfied that you really never want to see any new groups,
905 you could set @code{gnus-check-new-newsgroups} to @code{nil}.  This will
906 also save you some time at startup.  Even if this variable is
907 @code{nil}, you can always subscribe to the new groups just by pressing
908 @kbd{U} in the group buffer (@pxref{Group Maintenance}).
909
910 Gnus normally determines whether a group is new or not by comparing the
911 list of groups from the active file(s) with the lists of subscribed and
912 dead groups.  This isn't a particularly fast method.  If
913 @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
914 server for new groups since the last time.  This is both faster &
915 cheaper.  This also means that you can get rid of the list of killed
916 groups altogether, so you may set @code{gnus-save-killed-list} to
917 @code{nil}, which will save time both at startup, at exit, and all over.
918 Saves disk space, too.  Why isn't this the default, then?
919 Unfortunately, not all servers support this function.
920
921 This variable can also be a list of select methods.  If so, Gnus will
922 issue an @code{ask-server} command to each of the select methods, and
923 subscribe them (or not) using the normal methods.  This might be handy
924 if you are monitoring a few servers for new groups.  A side effect is
925 that startup will take much longer, so you can meditate while waiting.
926 Use the mantra "dingnusdingnusdingnus" to achieve permanent happiness.
927
928 @node Startup Files
929 @section Startup Files
930 @cindex startup files
931 @cindex .newsrc
932
933 Now, you all know about the @file{.newsrc} file.  All subscription
934 information is traditionally stored in this file.
935
936 Things got a bit more complicated with @sc{gnus}.  In addition to
937 keeping the @file{.newsrc} file updated, it also used a file called
938 @file{.newsrc.el} for storing all the information that didn't fit into
939 the @file{.newsrc} file.  (Actually, it duplicated everything in the
940 @file{.newsrc} file.)  @sc{gnus} would read whichever one of these files
941 that were the most recently saved, which enabled people to swap between
942 @sc{gnus} and other newsreaders.
943
944 That was kinda silly, so Gnus went one better: In addition to the
945 @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
946 @file{.newsrc.eld}.  It will read whichever of these files that are most
947 recent, but it will never write a @file{.newsrc.el} file.
948
949 @vindex gnus-save-newsrc-file
950 You can also turn off writing the @file{.newsrc} file by setting
951 @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
952 the file and save some space, as well as making exit from Gnus faster.
953 However, this will make it impossible to use other newsreaders than
954 Gnus.  But hey, who would want to, right?
955
956 @vindex gnus-save-killed-list
957 If @code{gnus-save-killed-list} is @code{nil}, Gnus will not save the
958 list of killed groups to the startup file.  This will save both time
959 (when starting and quitting) and space (on disk).  It will also means
960 that Gnus has no record of what groups are new or old, so the automatic
961 new groups subscription methods become meaningless.  You should always
962 set @code{gnus-check-new-newsgroups} to @code{nil} or @code{ask-server}
963 if you set this variable to @code{nil} (@pxref{New Groups}).
964
965 @vindex gnus-startup-file
966 The @code{gnus-startup-file} variable says where the startup files are.
967 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
968 file being whatever that one is with a @samp{.eld} appended.
969
970 @vindex gnus-save-newsrc-hook
971 @code{gnus-save-newsrc-hook} is called before saving the @file{.newsrc}
972 file.
973
974 @node Auto Save
975 @section Auto Save
976 @cindex dribble file
977 @cindex auto-save
978
979 Whenever you do something that changes the Gnus data (reading articles,
980 catching up, killing/subscribing groups), the change is added to a
981 special @dfn{dribble buffer}.  This buffer is auto-saved the normal
982 Emacs way.  If your Emacs should crash before you have saved the
983 @file{.newsrc} files, all changes you have made can be recovered from
984 this file.
985
986 If Gnus detects this file at startup, it will ask the user whether to
987 read it. The auto save file is deleted whenever the real startup file is
988 saved.
989
990 @vindex gnus-use-dribble-file
991 If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
992 maintain a dribble buffer.
993
994 @node The Active File
995 @section The Active File
996 @cindex active file
997 @cindex ignored groups
998
999 When Gnus starts, or indeed whenever it tries to determine whether new
1000 articles have arrived, it reads the active file.  This is a very large
1001 file that lists all the active groups and articles on the @sc{nntp}
1002 server.
1003
1004 @vindex gnus-ignored-newsgroups
1005 Before examining the active file, Gnus deletes all lines that match the
1006 regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
1007 any groups with bogus names, but you can use this variable to make Gnus
1008 ignore hierarchies you aren't ever interested in.  This variable is
1009 @code{nil} by default, and will slow down active file handling somewhat
1010 if you set it to anything else.
1011
1012 @vindex gnus-read-active-file
1013 The active file can be rather Huge, so if you have a slow network, you
1014 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
1015 reading the active file.
1016
1017 Gnus will try to make do by just getting information on the groups
1018 that you actually subscribe to.
1019
1020 Note that if you subscribe to lots and lots of groups, setting this
1021 variable to @code{nil} will probably make Gnus slower, not faster.  At
1022 present, having this variable @code{nil} will slow Gnus down
1023 considerably, unless you read news over a 2400 baud modem.  
1024
1025 This variable can also have the value @code{some}.  Gnus will then
1026 attempt to read active info only on the subscribed groups.  On some
1027 servers this is quite fast (on sparkling, brand new INN servers that
1028 support the @samp{LIST ACTIVE group} command), on others this is not
1029 fast at all.  In any case, @code{some} should be faster than @code{nil},
1030 and is certainly faster than @code{t} over slow lines.
1031
1032 If this variable is @code{nil}, Gnus will as for group info in total
1033 lock-step, which isn't very fast.  If it is @code{some} and you use an
1034 @sc{nntp} server, Gnus will pump out commands as fast as it can, and
1035 read all the replies in one swoop.  This will normally result in better
1036 performance, but if the server does not support the aforementioned
1037 @samp{LIST ACTIVE group} command, this isn't very nice to the server.
1038
1039 In any case, if you use @code{some} or @code{nil}, you should kill all
1040 groups that you aren't interested in.
1041
1042 @node Startup Variables
1043 @section Startup Variables
1044
1045 @table @code
1046 @item gnus-load-hook
1047 @vindex gnus-load-hook
1048 A hook that is run while Gnus is being loaded.  Note that this hook will
1049 normally be run just once in a single Emacs session, no matter how many
1050 times you start Gnus.
1051
1052 @item gnus-startup-hook
1053 @vindex gnus-startup-hook
1054 A hook that is run after starting up Gnus successfully.
1055
1056 @item gnus-check-bogus-newsgroups
1057 @vindex gnus-check-bogus-newsgroups
1058 If non-@code{nil}, Gnus will check for and delete all bogus groups at
1059 startup.  A @dfn{bogus group} is a group that you have in your
1060 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
1061 bogus groups isn't very quick, so to save time and resources, it's best
1062 to leave this option off, and instead do the checking for bogus groups
1063 once in a while from the group buffer (@pxref{Group Maintenance}).
1064
1065 @item gnus-inhibit-startup-message
1066 @vindex gnus-inhibit-startup-message
1067 If non-@code{nil}, the startup message won't be displayed.  That way,
1068 your boss might not notice that you are reading news instead of doing
1069 your job.
1070
1071 @item gnus-no-groups-message
1072 @vindex gnus-no-groups-message
1073 Message displayed by Gnus when no groups are available.
1074 @end table
1075
1076 @node The Group Buffer
1077 @chapter The Group Buffer
1078 @cindex group buffer
1079
1080 The @dfn{group buffer} lists all (or parts) of the available groups.  It
1081 is the first buffer shown when Gnus starts, and will never be killed as
1082 long as Gnus is active.
1083
1084 @menu
1085 * Group Buffer Format::    Information listed and how you can change it.
1086 * Group Maneuvering::      Commands for moving in the group buffer.
1087 * Selecting a Group::      Actually reading news.
1088 * Group Subscribing::      Unsubscribing, killing, subscribing.
1089 * Group Levels::           Levels? What are those, then?
1090 * Marking Groups::         You can mark groups for later processing.
1091 * Foreign Groups::         How to create foreign groups.
1092 * Group Parameters::       Each group may have different parameters set.
1093 * Listing Groups::         Gnus can list various subsets of the groups.
1094 * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
1095 * Browse Foreign Server::  You can browse a server.  See what if has to offer.
1096 * Exiting Gnus::           Stop reading news and get some work done.
1097 * Misc Group Stuff::       Other stuff that you can to do.
1098 @end menu
1099
1100 @node Group Buffer Format
1101 @section Group Buffer Format
1102 @cindex group buffer format
1103
1104 The default format of the group buffer is nice and dull, but you can
1105 make it as exciting and ugly as you feel like.
1106
1107 Here's a couple of example group lines:
1108
1109 @example
1110      25: news.announce.newusers
1111  *    0: alt.fan.andrea-dworkin
1112 @end example
1113
1114 Quite simple, huh?
1115
1116 You can see that there are 25 unread articles in
1117 @samp{news.announce.newusers}.  There are no unread articles, but some
1118 ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
1119 asterisk at the beginning of the line?)
1120
1121 @vindex gnus-group-line-format
1122 You can fuck that up to your heart's delight by fiddling with the
1123 @code{gnus-group-line-format} variable.  This variable works along the
1124 lines of a @code{format} specification, which is pretty much the same as
1125 a @code{printf} specifications, for those of you who use (feh!) C.
1126
1127 In addition to the normal "padding" specs that @code{format} supports
1128 (eg. @samp{%7d}), specifications like @samp{%7,12s} are allowed.  A spec
1129 of this type means that the field will be at least 7 characters long,
1130 and never more that 12 characters long.
1131
1132 The default value that produced those lines above is 
1133 @samp{"%M%S%5y: %(%g%)\n"}.
1134
1135 There should always be a colon on the line; the cursor always moves to
1136 the colon after performing an operation.  Nothing else is required - not
1137 even the group name.  All displayed text is just window dressing, and is
1138 never examined by Gnus.  Gnus stores all real information it needs using
1139 text properties.
1140
1141 (Note that if you make a really strange, wonderful, spreadsheet-like
1142 layout, everybody will believe you are hard at work with the accounting
1143 instead of wasting time reading news.)
1144
1145 Here's a list of all available format characters:
1146
1147 @table @samp
1148 @item M    
1149 Only marked articles.
1150 @item S
1151 Whether the group is subscribed.
1152 @item L    
1153 Level of subscribedness.
1154 @item N
1155 Number of unread articles.
1156 @item I
1157 Number of dormant articles.
1158 @item T
1159 Number of ticked articles.
1160 @item R
1161 Number of read articles.
1162 @item t
1163 Total number of articles.
1164 @item y
1165 Number of unread, unticked, non-dormant articles.
1166 @item i
1167 Number of ticked and dormant articles.
1168 @item g
1169 Full group name.
1170 @item G
1171 Group name.
1172 @item D
1173 Newsgroup description.
1174 @item o
1175 Moderated.
1176 @item O
1177 Moderated.
1178 @item s
1179 Select method.
1180 @item n
1181 Select from where.
1182 @item z
1183 A string that looks like @samp{<%s:%n>} if a foreign select method is
1184 used.
1185 @item u
1186 User defined specifier.  The next character in the format string should
1187 be a letter.  @sc{gnus} will call the function
1188 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1189 following @samp{%u}.  The function will be passed the current headers as
1190 argument.  The function should return a string, which will be inserted
1191 into the buffer just like information from any other specifier.
1192 @end table
1193
1194 @cindex *
1195 All the "number-of" specs will be filled with an asterisk (@samp{*}) if
1196 no info is available - for instance, if it is a non-activated foreign
1197 group, or a bogus (or semi-bogus) native group.
1198
1199 @vindex gnus-group-mode-line-format
1200 The mode line can be changed by setting
1201 (@code{gnus-group-mode-line-format}).  It doesn't understand that many
1202 format specifiers:
1203
1204 @table @samp
1205 @item S
1206 Default news server.
1207 @item M
1208 Default select method.
1209 @end table
1210
1211 @node Group Maneuvering
1212 @section Group Maneuvering
1213 @cindex group movement
1214
1215 All movement commands understand the numeric prefix and will behave as
1216 expected, hopefully. 
1217
1218 @table @kbd
1219 @item n
1220 @kindex n (Group)
1221 @findex gnus-group-next-unread-group
1222 Go to the next group that has unread articles
1223 (@code{gnus-group-next-unread-group}).
1224 @item p
1225 @itemx DEL
1226 @kindex DEL (Group)
1227 @kindex p (Group)
1228 @findex gnus-group-prev-unread-group
1229 Go to the previous group group that has unread articles
1230 (@code{gnus-group-prev-unread-group}).
1231 @item N
1232 @kindex N (Group)
1233 @findex gnus-group-next-group
1234 Go to the next group (@code{gnus-group-next-group}).
1235 @item P
1236 @kindex P (Group)
1237 @findex gnus-group-prev-group
1238 Go to the previous group (@code{gnus-group-prev-group}).
1239 @item M-p
1240 @kindex M-p (Group)
1241 @findex gnus-group-next-unread-group-same-level
1242 Go to the next unread group on the same level (or lower)
1243 (@code{gnus-group-next-unread-group-same-level}). 
1244 @item M-n
1245 @kindex M-n (Group)
1246 @findex gnus-group-prev-unread-group-same-level
1247 Go to the previous unread group on the same level (or lower)
1248 (@code{gnus-group-prev-unread-group-same-level}). 
1249 @end table
1250
1251 Three commands for jumping to groups:
1252
1253 @table @kbd
1254 @item j
1255 @kindex j (Group)
1256 @findex gnus-group-jump-to-group
1257 Jump to a group (and make it visible if it isn't already)
1258 (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
1259 like living groups.
1260 @item ,
1261 @kindex , (Group)
1262 @findex gnus-group-best-unread-group
1263 Jump to the unread group with the lowest level
1264 (@code{gnus-group-best-unread-group}). 
1265 @item .
1266 @kindex . (Group)
1267 @findex gnus-group-first-unread-group
1268 Jump to the first group with unread articles
1269 (@code{gnus-group-first-unread-group}).  
1270 @end table
1271
1272 @vindex gnus-group-goto-unread
1273 If @code{gnus-group-goto-unread} is @code{nil}, all the movement
1274 commands will move to the next group, not the next unread group.  Even
1275 the commands that say they move to the next unread group. 
1276
1277 @node Selecting a Group
1278 @section Selecting a Group
1279 @cindex group selection
1280
1281 @table @kbd
1282
1283 @item SPACE
1284 @kindex SPACE (Group)
1285 @findex gnus-group-read-group
1286 Select the current group, switch to the summary buffer and display the
1287 first unread article (@code{gnus-group-read-group}).  If there are no
1288 unread articles in the group, or if you give a non-numerical prefix to
1289 this command, Gnus will offer to fetch all the old articles in this
1290 group from the server.  If you give a numerical prefix @var{N}, Gnus
1291 will fetch @var{N} number of articles.  If @var{N} is positive, fetch
1292 the @var{N} newest articles, if @var{N} is negative, fetch the
1293 @var{abs(N)} oldest articles.
1294
1295 @item RET
1296 @kindex RET (Group)
1297 @findex gnus-group-select-group
1298 Select the current group and switch to the summary buffer
1299 (@code{gnus-group-select-group}).  Takes the same arguments as
1300 @code{gnus-group-read-group} - the only difference is that this command
1301 does not display the first unread article automatically upon group
1302 entry. 
1303
1304 @item M-RET
1305 @kindex M-RET (Group)
1306 @findex gnus-group-quick-select-group
1307 This does the same as the command above, but tries to do it with the
1308 minimum amount off fuzz (@code{gnus-group-quick-select-group}).  No
1309 scoring/killing will be performed, there will be no highlights and no
1310 expunging.  This might be useful if you're in a real hurry and have to
1311 enter some humongous groups.
1312
1313 @item c
1314 @kindex c (Group)
1315 @findex gnus-group-catchup-current
1316 Mark all unticked articles in this group as read
1317 (@code{gnus-group-catchup-current}). 
1318
1319 @item C
1320 @kindex C (Group)
1321 @findex gnus-group-catchup-current-all
1322 Mark all articles in this group, even the ticked ones, as read
1323 (@code{gnus-group-catchup-current-all}). 
1324 @end table
1325
1326 @vindex gnus-large-newsgroup
1327 The @code{gnus-large-newsgroup} variable says what Gnus should consider
1328 to be a big group.  If the group has more unread articles than this,
1329 Gnus will query the user before entering the group.  The user can then
1330 specify how many articles should be fetched from the server.  If the
1331 user specifies a negative number (@samp{-n}), the @samp{n} oldest
1332 articles will be fetched.  If it is positive, the @samp{n} articles that
1333 have arrived most recently will be fetched.
1334
1335 @vindex gnus-select-group-hook
1336 @vindex gnus-auto-select-first
1337 If @code{gnus-auto-select-first} is non-@code{nil}, the first unread
1338 article in the group will be displayed when you enter the group.  If you
1339 want to prevent automatic selection in some group (say, in a binary
1340 group with Huge articles) you can set this variable to @code{nil} in
1341 @code{gnus-select-group-hook}, which is called when a group is selected.
1342
1343 @findex gnus-thread-sort-by-total-score
1344 @findex gnus-thread-sort-by-date
1345 @findex gnus-thread-sort-by-score
1346 @findex gnus-thread-sort-by-subject
1347 @findex gnus-thread-sort-by-author
1348 @findex gnus-thread-sort-by-number
1349 @vindex gnus-thread-sort-functions
1350 If you are using a threaded summary display, you can sort the threads by
1351 setting @code{gnus-thread-sort-functions}, which is a list of functions.
1352 By default, sorting is done on article numbers.  Ready-made sorting
1353 functions include @code{gnus-thread-sort-by-number},
1354 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
1355 @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score},
1356 @code{gnus-thread-sort-by-total-score}.
1357
1358 Each function takes two threads and return non-@code{nil} if the first
1359 thread should be sorted before the other.  If you use more than one
1360 function, the primary sort key should be the last function in the list.
1361
1362 If you would like to sort by score, then by subject, and finally by
1363 date, you could do something like:
1364
1365 @lisp
1366 (setq gnus-thread-sort-functions 
1367       '(gnus-thread-sort-by-date
1368         gnus-thread-sort-by-subject
1369         gnus-thread-sort-by-score))
1370 @end lisp
1371
1372 @vindex gnus-thread-score-function
1373 The function in the @code{gnus-thread-score-function} variable (default
1374 @code{+}) is used for calculating the total score of a thread.  Useful
1375 functions might be @code{max}, @code{min}, or squared means, or whatever
1376 tickles you fancy.
1377
1378 @node Group Subscribing
1379 @section Group Subscribing
1380 @cindex subscribing
1381
1382 @table @kbd
1383 @item S t
1384 @itemx u
1385 @kindex S t (Group)
1386 @kindex u (Group)
1387 @findex gnus-group-unsubscribe-current-group
1388 Toggle subscription to the current group
1389 (@code{gnus-group-unsubscribe-current-group}).  
1390 @item S s
1391 @itemx U
1392 @kindex S s (Group)
1393 @kindex U (Group)
1394 @findex gnus-group-unsubscribe-group
1395 Prompt for a group to subscribe, and then subscribe it.  If it was
1396 subscribed already, unsubscribe it instead
1397 (@code{gnus-group-unsubscribe-group}).
1398 @item S k
1399 @itemx C-k
1400 @kindex S k (Group)
1401 @kindex C-k (Group)
1402 @findex gnus-group-kill-group
1403 Kill the current group (@code{gnus-group-kill-group}).
1404 @item S y
1405 @itemx C-y
1406 @kindex S y (Group)
1407 @kindex C-y (Group)
1408 @findex gnus-group-yank-group
1409 Yank the last killed group (@code{gnus-group-yank-group}).
1410 @item S w
1411 @itemx C-w
1412 @kindex S w (Group)
1413 @kindex C-w (Group)
1414 @findex gnus-group-kill-region
1415 Kill all groups in the region (@code{gnus-group-kill-region}). 
1416 @item S z
1417 @kindex S z (Group)
1418 @findex gnus-group-kill-all-zombies
1419 Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
1420 @end table
1421
1422 @node Group Levels
1423 @section Group Levels
1424 @cindex group level
1425
1426 All groups have a level of @dfn{subscribedness}.  For instance, if a
1427 group is on level 2, it is more subscribed than a group on level 5.  You
1428 can ask Gnus to just list groups on a given level or lower
1429 (@pxref{Listing Groups}), or to just check for new articles in groups on
1430 a given level or lower (@pxref{Misc Group Stuff}).
1431
1432 @table @kbd
1433 @item S l
1434 @kindex S l (Group)
1435 @findex gnus-group-set-current-level
1436 Set the level of the current group.  If a numeric prefix is given, the
1437 next @var{n} groups will have their levels set.  The user will be
1438 prompted for a level.
1439 @end table
1440
1441 @vindex gnus-level-killed
1442 @vindex gnus-level-zombie
1443 @vindex gnus-level-unsubscribed
1444 @vindex gnus-level-subscribed
1445 Gnus considers groups on between levels 1 and
1446 @code{gnus-level-subscribed} (inclusive) to be subscribed,
1447 @code{gnus-level-subscribed} (exclusive) and
1448 @code{gnus-level-unsubscribed} (inclusive) to be unsubscribed,
1449 @code{gnus-level-zombie} to be zombies (walking dead) and
1450 @code{gnus-level-killed} to be killed, completely dead.  Gnus treats
1451 subscribed and unsubscribed groups exactly the same, but zombie and
1452 killed groups have no information on what articles you have read, etc,
1453 stored.  This distinction between dead and living groups isn't done
1454 because it is nice or clever, it is done purely for reasons of
1455 efficiency. 
1456
1457 It is recommended that you keep all your mail groups (if any) on quite
1458 low levels (eg. 1 or 2).
1459
1460 If you want to play with the level variables, you should show some care.
1461 Set them once, and don't touch them ever again.  Better yet, don't touch
1462 them at all unless you know exactly what you're doing.
1463
1464 @vindex gnus-level-default-unsubscribed
1465 @vindex gnus-level-default-subscribed
1466 Two closely related variables are @code{gnus-level-default-subscribed}
1467 and @code{gnus-level-default-unsubscribed}, which are the levels that new
1468 groups will be put on if they are (un)subscribed.  These two variables
1469 should, of course, be inside the relevant legal ranges.
1470
1471 @vindex gnus-keep-same-level
1472 If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
1473 will only move to groups that are of the same level (or lower).  In
1474 particular, going from the last article in one group to the next group
1475 will go to the next group of the same level (or lower).  This might be
1476 handy if you want to read the most important groups before you read the
1477 rest.
1478
1479 @vindex gnus-group-default-list-level
1480 All groups with a level less than or equal to
1481 @code{gnus-group-default-list-level} will be listed in the group buffer
1482 by default.
1483
1484 @vindex gnus-group-use-permament-levels
1485 If @code{gnus-group-use-permament-levels} is non-@code{nil}, once you
1486 give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
1487 use this level as the "work" level.
1488
1489 @node Marking Groups
1490 @section Marking Groups
1491 @cindex marking groups
1492
1493 If you want to perform some action on several groups, and they appear
1494 subsequently in the group buffer, you would normally just give a
1495 numerical prefix to the command.  Most group commands will then do your
1496 bidding on those groups.
1497
1498 However, if the groups are not in sequential order, you can still
1499 perform an action on several groups.  You simply mark the groups first,
1500 and then execute the command.  
1501
1502 @table @kbd
1503 @item #
1504 @kindex # (Group)
1505 @item M m
1506 @kindex M m (Group)
1507 @findex gnus-group-mark-group
1508 Set the mark on the current group (@code{gnus-group-mark-group}). 
1509 @item M-#
1510 @kindex M-# (Group)
1511 @item < u
1512 @kindex M u (Group)
1513 @findex gnus-group-unmark-group
1514 Remove the mark from the current group
1515 (@code{gnus-group-unmark-group}). 
1516 @item M w
1517 @kindex M w (Group)
1518 @findex gnus-group-mark-region
1519 Mark all groups between point and mark (@code{gnus-group-mark-region}). 
1520 @end table
1521
1522 @node Foreign Groups
1523 @section Foreign Groups
1524 @cindex foreign groups
1525
1526 A @dfn{foreign group} is a group that is not read by the usual (or
1527 default) means.  It could be, for instance, a group from a different
1528 @sc{nntp} server, it could be a virtual group, or it could be your own
1529 personal mail group.
1530
1531 A foreign group (or any group, really) is specified by a @dfn{name} and
1532 a @dfn{select method}.  To take the latter first, a select method is a
1533 list where the first element says what backend to use (eg. @code{nntp},
1534 @code{nnspool}, @code{nnml}) and the second element is the @dfn{server
1535 name}.  There may be additional elements in the select method, where the
1536 value may have special meaning for the backend in question.
1537
1538 One could say that a select method defines a @dfn{virtual server} - so
1539 we do just that (@pxref{The Server Buffer}).
1540
1541 The @dfn{name} of the group is the name the backend will recognize the
1542 group as.
1543
1544 For instance, the group @samp{soc.motss} on the @sc{nntp} server
1545 @samp{some.where.edu} will have the name @samp{soc.motss} and select
1546 method @code{(nntp "some.where.edu")}.  Gnus will call this group, in
1547 all circumstances, @samp{nntp+some.where.edu:soc.motss}, even though the
1548 nntp backend just knows this group as @samp{soc.motss}.
1549
1550 Here are some commands for making and editing general foreign groups,
1551 and some commands to ease the creation of some special-purpose groups:
1552
1553 @table @kbd
1554 @item G m
1555 @kindex G m (Group)
1556 @findex gnus-group-make-group
1557 Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you
1558 for a name, a method and possibly an @dfn{address}.  For an easier way
1559 to subscribe to @sc{nntp} groups, @xref{Browse Foreign Server}.
1560
1561 @item G e
1562 @kindex G e (Group)
1563 @findex gnus-group-edit-group-method
1564 Enter a buffer where you can edit the select method of the current
1565 group (@code{gnus-group-edit-group-method}).
1566
1567 @item G p
1568 @kindex G p (Group)
1569 @findex gnus-group-edit-group-parameters
1570 Enter a buffer where you can edit the group parameters
1571 (@code{gnus-group-edit-group-parameters}). 
1572
1573 @item G E
1574 @kindex G E (Group)
1575 @findex gnus-group-edit-group
1576 Enter a buffer where you can edit the group info
1577 (@code{gnus-group-edit-group}).
1578
1579 @item G d
1580 @kindex G d (Group)
1581 @findex gnus-group-make-directory-group
1582 Make a directory group.  You will be prompted for a directory name
1583 (@code{gnus-group-make-directory-group}).  
1584
1585 @item G h 
1586 @kindex G h (Group)
1587 @findex gnus-group-make-help-group
1588 Make the Gnus help group (@code{gnus-group-make-help-group}).
1589
1590 @item G a
1591 @kindex G a (Group)
1592 @findex gnus-group-make-archive-group
1593 @vindex gnus-group-archive-directory
1594 @vindex gnus-group-recent-archive-directory
1595 Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
1596 default a group pointing to the most recent articles will be created
1597 (@code{gnus-group-recent-archibe-directory}), but given a prefix, a full
1598 group will be created from from @code{gnus-group-archive-directory}.
1599
1600 @item G k
1601 @kindex G k (Group)
1602 @findex gnus-group-make-kiboze-group
1603 Make a kiboze group.  You will be prompted for a name, for a regexp to
1604 match groups to be "included" in the kiboze group, and a series of
1605 strings to match on headers (@code{gnus-group-make-kiboze-group}).
1606
1607 @item G D
1608 @kindex G D (Group)
1609 @findex gnus-group-enter-directory
1610 Read a random directory as if with were a newsgroup with the
1611 @code{nneething} backend (@code{gnus-group-enter-directory}).
1612
1613 @item G f
1614 @kindex G f (Group)
1615 @findex gnus-group-make-doc-group
1616 Make a group based on some file or other
1617 (@code{gnus-group-make-doc-group}).  You will be prompted for a file
1618 name and a file type.  Currently supported types are @code{babyl},
1619 @code{mbox} and @code{digest}.
1620
1621 @item G V
1622 @kindex G V (Group)
1623 @findex gnus-group-make-empty-virtual
1624 Make a new, fresh, empty @code{nnvirtual} group
1625 (@code{gnus-group-make-empty-virtual}).
1626
1627 @item G v
1628 @kindex G v (Group)
1629 @findex gnus-group-add-to-virtual
1630 Add the current group to an @code{nnvirtual} group
1631 (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
1632 @end table
1633
1634 The different methods all have their peculiarities, of course.
1635
1636 @menu
1637 * nntp::             Reading news from a different @sc{nntp} server.
1638 * nnspool::          Reading news from the local spool.
1639 * nnvirtual::        Combining articles from many groups.
1640 * nnkiboze::         Looking through parts of the newsfeed for articles.
1641 * nndir::            You can read a directory as if it was a newsgroup.
1642 * nneething::          Dired? Who needs dired?
1643 * nndoc::            Single files can be the basis of a group.
1644 * Reading Mail::     Reading your personal mail with Gnus.
1645 @end menu
1646
1647 @vindex gnus-activate-foreign-newsgroups
1648 If the @code{gnus-activate-foreign-newsgroups} is a positive number,
1649 Gnus will check all foreign groups with this level or lower at startup.
1650 This might take quite a while, especially if you subscribe to lots of
1651 groups from different @sc{nntp} servers.  It is @code{nil} by default,
1652 which means that you won't be told whether there are new articles in
1653 these groups.  How many unread articles there are will be determined
1654 when, or if, you decide to enter them.  You can also activate any group
1655 with @kbd{M-g} to see how many unread articles there are.
1656
1657 @node nntp
1658 @subsection nntp
1659 @cindex @sc{nntp}
1660
1661 Subscribing to a foreign group from an @sc{nntp} server is rather easy.
1662 You just specify @code{nntp} as method and the address of the @sc{nntp}
1663 server as the, uhm, address.
1664
1665 If the @sc{nntp} server is located at a non-standard port, setting the
1666 third element of the select method to this port number should allow you
1667 to connect to the right port.  You'll have to edit the group info for
1668 that (@pxref{Foreign Groups}).
1669
1670 The name of the foreign group can be the same as a native group.  In
1671 fact, you can subscribe to the same group from as many different servers
1672 you feel like.  There will be no name collisions.
1673
1674 The following variables can be used to create a virtual @code{nntp}
1675 server: 
1676
1677 @table @code
1678 @item nntp-server-opened-hook
1679 @vindex nntp-server-opened-hook
1680 @cindex @sc{mode reader}
1681 @cindex authinfo
1682 @cindex authentification
1683 @cindex nntp authentification
1684 @findex nntp-send-authinfo
1685 @findex nntp-send-mode-reader
1686 @code{nntp-server-opened-hook} is run after a connection has been made.
1687 It can be used to send commands to the @sc{nntp} server after it has
1688 been contacted.  By default is sends the command @samp{MODE READER} to
1689 the server with the @code{nntp-send-mode-reader} function.  Another
1690 popular function is @code{nntp-send-authinfo}, which will prompt you for
1691 an @sc{nntp} password and stuff.
1692
1693 @item nntp-maximum-request
1694 @vindex nntp-maximum-request
1695 If the @sc{nntp} server doesn't support @sc{nov} headers, this backend
1696 will collect headers by sending a series of @code{head} commands.  To
1697 speed things up, the backend sends lots of these commands without
1698 waiting for reply, and then reads all the replies.  This is controlled
1699 by the @code{nntp-maximum-request} variable, and is 400 by default.  If
1700 your network is buggy, you should set this to 1.
1701
1702 @item nntp-connection-timeout
1703 @vindex nntp-connection-timeout
1704 If you have lots of foreign @code{nntp} groups that you connect to
1705 regularly, you're sure to have problems with @sc{nntp} servers not
1706 responding properly, or being too loaded to reply within reasonable
1707 time.  This is can lead to awkward problems, which can be helped
1708 somewhat by setting @code{nntp-connection-timeout}.  This is an integer
1709 that says how many seconds the @code{nntp} backend should wait for a
1710 connection before giving up.  If it is @code{nil}, which is the default,
1711 no timeouts are done.
1712
1713 @item nntp-server-hook
1714 @vindex nntp-server-hook
1715 This hook is run as the last step when connecting to an @sc{nntp}
1716 server.
1717
1718 @c @findex nntp-open-rlogin
1719 @c @findex nntp-open-network-stream
1720 @c @item nntp-open-server-function
1721 @c @vindex nntp-open-server-function
1722 @c This function is used to connect to the remote system.  Two pre-made
1723 @c functions are @code{nntp-open-network-stream}, which is the default, and
1724 @c simply connects to some port or other on the remote system.  The other
1725 @c is @code{nntp-open-rlogin}, which does an rlogin on the remote system,
1726 @c and then does a telnet to the @sc{nntp} server available there.
1727 @c 
1728 @c @item nntp-rlogin-parameters
1729 @c @vindex nntp-rlogin-parameters
1730 @c If you use @code{nntp-open-rlogin} as the
1731 @c @code{nntp-open-server-function}, this list will be used as the
1732 @c parameter list given to @code{rsh}.
1733 @c 
1734 @c @item nntp-rlogin-user-name
1735 @c @vindex nntp-rlogin-user-name
1736 @c User name on the remote system when using the @code{rlogin} connect
1737 @c function. 
1738
1739 @item nntp-address
1740 @vindex nntp-address
1741 The address of the remote system running the @sc{nntp} server.
1742
1743 @item nntp-port-number
1744 @vindex nntp-port-number
1745 Port number to connect to when using the @code{nntp-open-network-stream}
1746 connect function.
1747
1748 @item nntp-buggy-select
1749 @vindex nntp-buggy-select
1750 Set this to non-@code{nil} if your select routine is buggy.
1751
1752 @item nntp-nov-is-evil 
1753 @vindex nntp-nov-is-evil 
1754 If the @sc{nntp} server does not support @sc{nov}, you could set this
1755 variable to @code{t}, but @code{nntp} usually checks whether @sc{nov}
1756 can be used automatically.
1757
1758 @item nntp-xover-commands
1759 @vindex nntp-xover-commands
1760 List of strings that are used as commands to fetch @sc{nov} lines from a
1761 server.  The default value of this variable is @code{("XOVER"
1762 "XOVERVIEW")}. 
1763
1764 @item nntp-nov-gap
1765 @vindex nntp-nov-gap
1766 @code{nntp} normally sends just one big request for @sc{nov} lines to
1767 the server.  The server responds with one huge list of lines.  However,
1768 if you have read articles 2-5000 in the group, and only want to read
1769 article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}
1770 lines that you do not want, and will not use.  This variable says how
1771 big a gap between two consecutive articles is allowed to be before the
1772 @code{XOVER} request is split into several request.  Note that if your
1773 network is fast, setting this variable to a really small number means
1774 that fetching will probably be slower.  If this variable is @code{nil},
1775 @code{nntp} will never split requests.
1776
1777 @item nntp-prepare-server-hook
1778 @vindex nntp-prepare-server-hook
1779 A hook run before attempting to connect to an @sc{nntp} server.
1780
1781 @item nntp-async-number
1782 @vindex nntp-async-number
1783 How many articles should be pre-fetched when in asynchronous mode.  If
1784 this variable is @code{t}, @code{nntp} will pre-fetch all the articles
1785 that it can without bound.  If it is @code{nil}, no pre-fetching will be
1786 made.
1787
1788 @item nntp-warn-about-losing-connection
1789 @vindex nntp-warn-about-losing-connection
1790 If this variable is non-@code{nil}, some noise will be made when a
1791 server closes connection.
1792
1793
1794 @end table
1795
1796 @node nnspool
1797 @subsection nnspool
1798 @cindex nnspool
1799 @cindex news spool
1800
1801 Subscribing to a foreign group from the local spool is extremely easy,
1802 and might be useful, for instance, to speed up reading groups like
1803 @samp{alt.binaries.pictures.furniture}.
1804
1805 Anyways, you just specify @code{nnspool} as the method and @samp{""} (or
1806 anything else) as the address.
1807
1808 If you have access to a local spool, you should probably use that as the
1809 native select method (@pxref{Finding the News}).
1810
1811 @table @code
1812 @item nnspool-inews-program
1813 @vindex nnspool-inews-program
1814 Program used to post an article.
1815
1816 @item nnspool-inews-switches
1817 @vindex nnspool-inews-switches
1818 Parameters given to the inews program when posting an article. 
1819
1820 @item nnspool-spool-directory
1821 @vindex nnspool-spool-directory
1822 Where nnspool looks for the articles.  This is normally
1823 @file{/usr/spool/news/}.
1824
1825 @item nnspool-nov-directory 
1826 @vindex nnspool-nov-directory 
1827 Where nnspool will look for @sc{nov} files.  This is normally
1828 @file{/usr/spool/news/over.view/}.
1829
1830 @item nnspool-lib-dir
1831 @vindex nnspool-lib-dir
1832 Where the news lib dir is (@file{/usr/lib/news/} by default).
1833
1834 @item nnspool-active-file
1835 @vindex nnspool-active-file
1836 The path of the active file.
1837
1838 @item nnspool-newsgroups-file
1839 @vindex nnspool-newsgroups-file
1840 The path of the group description file.
1841
1842 @item nnspool-history-file
1843 @vindex nnspool-history-file
1844 The path of the news history file.
1845
1846 @item nnspool-active-times-file
1847 @vindex nnspool-active-times-file
1848 The path of the active date file.
1849
1850 @item nnspool-nov-is-evil
1851 @vindex nnspool-nov-is-evil
1852 If non-@code{nil}, @code{nnspool} won't try to use any @sc{nov} files
1853 that it finds.
1854
1855 @item nnspool-sift-nov-with-sed
1856 @vindex nnspool-sift-nov-with-sed
1857 If non-@code{nil}, which is the default, use @code{sed} to get the
1858 relevant portion from the overview file.  If nil, @code{nnspool} will
1859 load the entire file into a buffer and process it there.
1860
1861 @end table
1862
1863 @node nnvirtual
1864 @subsection nnvirtual
1865 @cindex nnvirtual
1866 @cindex virtual groups
1867
1868 An @dfn{nnvirtual group} is really nothing more than a collection of
1869 other groups.
1870
1871 For instance, if you are tired of reading many small group, you can
1872 put them all in one big group, and then grow tired of reading one
1873 big, unwieldy group.  The joys of computing!
1874
1875 You specify @code{nnvirtual} as the method.  The address should be a
1876 regexp to match component groups.
1877
1878 All marks in the virtual group will stick to the articles in the
1879 component groups.  So if you tick an article in a virtual group, the
1880 article will also be ticked in the component group from whence it came.
1881 (And vice versa - marks from the component groups will also be shown in
1882 the virtual group.)
1883
1884 Here's an example nnvirtual method that collects all Andrea Dworkin
1885 newsgroups into one, big, happy newsgroup:
1886
1887 @lisp
1888 (nnvirtual "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*")
1889 @end lisp
1890
1891 The component groups can be native or foreign; everything should work
1892 smoothly, but if your computer explodes, it was probably my fault.
1893
1894 Collecting the same group from several servers might actually be a good
1895 idea if users have set the Distribution header to limit distribution.
1896 If you would like to read @samp{soc.motss} both from a server in Japan
1897 and a server in Norway, you could use the following as the group regexp:
1898
1899 @example
1900 "^nntp+some.server.jp:soc.motss$\\|^nntp+some.server.no:soc.motss$"
1901 @end example
1902
1903 This should work kinda smoothly - all articles from both groups should
1904 end up in this one, and there should be no duplicates.  Threading (and
1905 the rest) will still work as usual, but there might be problems with the
1906 sequence of articles.  Sorting on date might be an option here
1907 (@pxref{Selecting a Group}.
1908
1909 One limitation, however - all groups that are included in a virtual
1910 group has to be alive (i.e., subscribed or unsubscribed).  Killed or
1911 zombie groups can't be component groups for nnvirtual groups.
1912
1913 @node nnkiboze
1914 @subsection nnkiboze
1915 @cindex nnkiboze
1916 @cindex kibozing
1917
1918 @dfn{Kibozing} is defined by OED as "grepping through (parts of) the
1919 news feed".  nnkiboze is a backend that will do this for you.  Oh joy!
1920 Now you can grind any @sc{nntp} server down to a halt with useless
1921 requests!  Oh happiness!
1922
1923 The address field of the nnkiboze method is, as with nnvirtual, a regexp
1924 to match groups to be "included" in the nnkiboze group.  There most
1925 similarities between nnkiboze and nnvirtual ends.
1926
1927 In addition to this regexp detailing component groups, an nnkiboze group
1928 must have a score file to say what articles that are to be included in
1929 the group (@pxref{Scoring}).
1930
1931 @kindex M-x nnkiboze-generate-groups
1932 @findex nnkiboze-generate-groups
1933 You must run @kbd{M-x nnkiboze-generate-groups} after creating the
1934 nnkiboze groups you want to have.  This command will take time.  Lots of
1935 time.  Oodles and oodles of time.  Gnus has to fetch the headers from
1936 all the articles in all the components groups and run them through the
1937 scoring process to determine if there are any articles in the groups
1938 that are to be part of the nnkiboze groups.
1939
1940 Please limit the number of component groups by using restrictive
1941 regexps.  Otherwise your sysadmin may become annoyed with you, and the
1942 @sc{nntp} site may throw you off and never let you back in again.
1943 Stranger things have happened.
1944
1945 nnkiboze component groups do not have to be alive - they can be dead,
1946 and they can be foreign.  No restrictions.
1947
1948 @vindex nnkiboze-directory
1949 The generation of an nnkiboze group means writing two files in
1950 @code{nnkiboze-directory}, which is @file{~/News/} by default.  One
1951 contains the @sc{nov} header lines for all the articles in the group,
1952 and the other is an additional @file{.newsrc} file to store information
1953 on what groups that have been searched through to find component
1954 articles.
1955
1956 Articles that are marked as read in the nnkiboze group will have their
1957 @sc{nov} lines removed from the @sc{nov} file.
1958
1959 @node nndir
1960 @subsection nndir
1961 @cindex nndir
1962 @cindex directory groups
1963
1964 If you have a directory that has lots of articles in separate files in
1965 it, you might treat it as a newsgroup.  The files have to have numerical
1966 names, of course.
1967
1968 This might be an opportune moment to mention @code{ange-ftp}, that most
1969 wonderful of all wonderful Emacs packages.  When I wrote @code{nndir}, I
1970 didn't think much about it - a backend to read directories.  Big deal.
1971
1972 @code{ange-ftp} changes that picture dramatically.  For instance, if you
1973 enter @file{"/ftp@@sina.tcamc.uh.edu:/pub/emacs/ding-list/"} as the the
1974 directory name, ange-ftp will actually allow you to read this directory
1975 over at @samp{sina} as a newsgroup.  Distributed news ahoy!
1976
1977 @code{nndir} will use @sc{nov} files if they are present.
1978
1979 @code{nndir} is a "read-only" backend - you can't delete or expire
1980 articles with this method.  You can use @code{nnmh} or @code{nnml} for
1981 whatever you use @code{nndir} for, so you could switch to any of those
1982 methods if you feel the need to have a non-read-only @code{nndir}.
1983
1984 @node nneething
1985 @subsection nneething
1986 @cindex nneething
1987
1988 From the @code{nndir} backend (which reads a single spool-like
1989 directory), it's just a hop and a skip to @code{nneething}, which
1990 pretends that any random directory is a newsgroup. Strange, but true.
1991
1992 When @code{nneething} is presented with a directory, it will scan this
1993 directory and assign article numbers to each file. When you enter such a
1994 group, @code{nneething} must create "headers" that Gnus can use. After
1995 all, Gnus is a newsreader, in case you're forgetting. @code{nneething}
1996 does this in a two-step process. First, it snoops each file in question.
1997 If the file looks like an article (i.e., the first few lines look like
1998 headers), it will use this as the head. If this is just some random file
1999 without a head (eg. a C source file), @code{nneething} will cobble up a
2000 header out of thin air. It will use file ownership, name and date and do
2001 whatever it can with these elements.
2002
2003 All this should happen automatically for you, and you will be presented
2004 with something that looks very much like a newsgroup. Totally like a
2005 newsgroup, to be precise. If you select an article, it will be displayed
2006 in the article buffer, just as usual.
2007
2008 If you select a line that represents a directory, Gnus will pop you into
2009 a new summary buffer for this @code{nneething} group. And so on. You can
2010 traverse the entire disk this way, if you feel like, but remember that
2011 Gnus is not dired, really, and does not intend to be, either.
2012
2013 There are two overall modes to this action - ephemeral or solid. When
2014 doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
2015 will not store information on what files you have read, and what files
2016 are new, and so on. If you create a solid @code{nneething} group the
2017 normal way with @kbd{G m}, Gnus will store a mapping table between
2018 article numbers and file names, and you can treat this group like any
2019 other groups. When you activate a solid @code{nneething} group, you will
2020 be told how many unread articles it contains, etc., etc.
2021
2022 Some variables:
2023
2024 @table @code
2025 @item nneething-map-file-directory
2026 @vindex nneething-map-file-directory
2027 All the mapping files for solid @code{nneething} groups will be stored
2028 in this directory, which defaults to @file{~/.nneething/}.
2029
2030 @item nneething-exclude-files
2031 @vindex nneething-exclude-files
2032 All files that match this regexp will be ignored. Nice to use to exclude
2033 auto-save files and the like, which is what it does by default.
2034
2035 @item nneething-map-file
2036 @vindex nneething-map-file
2037 Name of the map files.
2038 @end table
2039
2040
2041 @node nndoc
2042 @subsection nndoc
2043 @cindex nndoc
2044 @cindex documentation group
2045 @cindex help group
2046
2047 nndoc is a cute little thing that will let you read a single file as a
2048 newsgroup.  Currently supported file types are @code{babyl}, @code{mbox}
2049 and @code{digest}. 
2050
2051 nndoc will not try to change the file or insert any extra headers into
2052 it - it will simply, like, let you use the file as the basis for a
2053 group.  And that's it.
2054
2055 Virtual server variables:
2056
2057 @table @code
2058 @item nndoc-article-type
2059 @vindex nndoc-article-type
2060 This should be one of @code{mbox}, @code{babyl} or @code{digest}. 
2061 @end table
2062
2063 @node Reading Mail
2064 @subsection Reading Mail
2065 @cindex reading mail
2066 @cindex mail
2067
2068 Reading mail with a newsreader - isn't that just plain WeIrD? But of
2069 course.
2070
2071 Gnus will read the mail spool when you activate a mail group.  The mail
2072 file is first copied to your home directory.  What happens after that
2073 depends on what format you want to store your mail in.
2074
2075 @menu
2076 * Creating Mail Groups::         How to create mail groups.
2077 * Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
2078 * Mail & Procmail::              Reading mail groups that procmail create.
2079 * Expiring Old Mail Articles::   Getting rid of unwanted mail.
2080 * Not Reading Mail::             Using mail backends for reading other files.
2081 * nnmbox::                       Using the (quite) standard Un*x mbox.
2082 * nnbabyl::                      Emacs programs use the rmail babyl format.
2083 * nnml::                         Store your mail in a private spool?
2084 * nnmh::                         An mhspool-like backend.
2085 * nnfolder::                     Having one file for each group.
2086 @end menu
2087
2088 @vindex nnmail-read-incoming-hook
2089 The mail backends all call @code{nnmail-read-incoming-hook} after
2090 reading new mail.  You can use this hook to notify any mail watch
2091 programs, if you want to.
2092
2093 @vindex nnmail-spool-file
2094 @code{nnmail-spool-file} says where to look for new mail.  If this
2095 variable is @code{nil}, the mail backends will never attempt to fetch
2096 mail by themselves.  It is quite likely that Gnus supports POP-mail.
2097 Set this variable to begin with the string @samp{po:}, and everything
2098 should go smoothly, even though I have never tested this.
2099
2100 @vindex nnmail-use-procmail
2101 If @code{nnmail-use-procmail} is non-@code{nil}, the mail backends will
2102 look in @code{nnmail-procmail-directory} for incoming mail.  All the
2103 files in that directory that have names ending in
2104 @code{gnus-procmail-suffix} will be considered incoming mailboxes, and
2105 will be searched for new mail.
2106
2107 @vindex nnmail-prepare-incoming-hook
2108 @code{nnmail-prepare-incoming-hook} is run in a buffer that holds all
2109 the new incoming mail, and can be used for, well, anything, really.
2110
2111 @vindex nnmail-tmp-directory
2112 @code{nnmail-tmp-directory} says where to move the incoming mail to
2113 while processing it.  This is usually done in the same directory that
2114 the mail backend inhabits (i.e., @file{~/Mail/}), but if this variable is
2115 non-@code{nil}, it will be used instead.
2116
2117 @vindex nnmail-movemail-program
2118 @code{nnmail-movemail-program} is executed to move mail from the user's
2119 inbox to her home directory. The default is @samp{"movemail"}.
2120
2121 @vindex nnmail-delete-incoming
2122 If @code{nnmail-delete-incoming} is non-@code{nil}, the mail backends
2123 will delete the temporary incoming file after splitting mail into the
2124 proper groups.  This is @code{nil} by default for reasons of security. 
2125
2126 @vindex nnmail-message-id-cache-length
2127 @vindex nnmail-message-id-cache-file
2128 @vindex nnmail-delete-duplicates
2129 @cindex duplicate mails
2130 If you are a member of a couple of mailing list, you will sometime
2131 receive two copies of the same mail. This can be quite annoying, so
2132 @code{nnmail} checks for and discards any duplicates it might find. To
2133 do this, it keeps a cache of old @code{Message-ID}s -
2134 @code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by
2135 default. The approximate maximum number of @code{Message-ID}s stored
2136 there is controlled by the @code{nnmail-message-id-cache-length}
2137 variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
2138 stored.) If all this sounds scary to you, you can set
2139 @code{nnmail-delete-duplicates} to @code{nil} (which is what it is by
2140 default), and @code{nnmail} won't do any duplicate checking.
2141
2142 Here's a neat feature: If you know that the recipient reads her mail
2143 with Gnus, and that she has @code{nnmail-delete-duplicates} set to
2144 @code{t}, you can send her as many insults as you like, just by using a
2145 @code{Message-ID} of a mail that you know that she's already received.
2146 Think of all the fun! She'll never see any of it! Whee!
2147
2148 Gnus gives you all the opportunity you could possibly want for shooting
2149 yourself in the foot.  Let's say you create a group that will contain
2150 all the mail you get from your boss.  And then you accidentally
2151 unsubscribe from the group.  Gnus will still put all the mail from your
2152 boss in the unsubscribed group, and so, when your boss mails you "Have
2153 that report ready by Monday or you're fired!", you'll never see it and,
2154 come Tuesday, you'll still believe that you're gainfully employed while
2155 you really should be out collecting empty bottles to save up for next
2156 month's rent money.
2157
2158 @node Creating Mail Groups
2159 @subsubsection Creating Mail Groups
2160 @cindex creating mail groups
2161
2162 You can make Gnus read your personal, private, secret mail.
2163
2164 You should first set @code{gnus-secondary-select-methods} to, for
2165 instance, @code{((nnmbox ""))}.  When you start up Gnus, Gnus will ask
2166 this backend for what groups it carries (@samp{mail.misc} by default)
2167 and subscribe it the normal way.  (Which means you may have to look for
2168 it among the zombie groups, I guess, all depending on your
2169 @code{gnus-subscribe-newsgroup-method} variable.)
2170
2171 @vindex nnmail-split-methods
2172 Then you should set the variable @code{nnmail-split-methods} to specify
2173 how the incoming mail is to be split into groups.
2174
2175 @lisp
2176 (setq nnmail-split-methods
2177   '(("mail.junk" "^From:.*Lars Ingebrigtsen")
2178     ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
2179     ("mail.other" "")))
2180 @end lisp
2181
2182 This variable is a list of lists, where the first element of each of
2183 these lists is the name of the mail group (they do not have to be called
2184 something beginning with @samp{mail}, by the way), and the second
2185 element is a regular expression used on the header of each mail to
2186 determine if it belongs in this mail group.
2187
2188 The second element can also be a function.  In that case, it will be
2189 called narrowed to the headers with the first element of the rule as the
2190 argument.  It should return a non-@code{nil} value if it thinks that the
2191 mail belongs in that group.
2192
2193 The last of these groups should always be a general one, and the regular
2194 expression should @emph{always} be @samp{""} so that it matches any
2195 mails that haven't been matched by any of the other regexps.
2196
2197 If you like to tinker with this yourself, you can set this variable to a
2198 function of your choice. This function will be called without any
2199 arguments in a buffer narrowed to the headers of an incoming mail
2200 message. The function should return a list of groups names that it
2201 thinks should carry this mail message.
2202
2203 @vindex nnmail-crosspost
2204 The mail backends all support cross-posting.  If several regexps match,
2205 the mail will be "cross-posted" to all those groups.
2206 @code{nnmail-crosspost} says whether to use this mechanism or not.  Note
2207 that no articles are crossposted to the general (@samp{""}) group. 
2208
2209 @node Fancy Mail Splitting
2210 @subsubsection Fancy Mail Splitting
2211 @cindex mail splitting
2212 @cindex fancy mail splitting
2213
2214 @vindex nnmail-split-fancy
2215 @findex nnmail-split-fancy
2216 If the rather simple, standard method for specifying how to split mail
2217 doesn't allow you to do what you want, you can set
2218 @code{nnmail-split-methods} to @code{nnmail-split-fancy}.  Then you can
2219 play with the @code{nnmail-split-fancy} variable. 
2220
2221 Let's look at an example value of this variable first:
2222
2223 @lisp
2224 ;; Messages from the mailer daemon are not crossposted to any of
2225 ;; the ordinary groups.  Warnings are put in a separate group
2226 ;; from real errors.
2227 (| ("from" mail (| ("subject" "warn.*" "mail.warning")
2228                    "mail.misc"))
2229    ;; Non-error messages are crossposted to all relevant
2230    ;; groups, but we don't crosspost between the group for the
2231    ;; (ding) list and the group for other (ding) related mail.
2232    (& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
2233          ("subject" "ding" "ding.misc"))
2234       ;; Other mailing lists...
2235       (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
2236       (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
2237       ;; People...
2238       (any "larsi@@ifi\\.uio\\.no" "people.Lars Magne Ingebrigtsen"))
2239    ;; Unmatched mail goes to the catch all group.
2240    "misc.misc"))")
2241 @end lisp
2242
2243 This variable has the format of a @dfn{split}.  A split is a (possibly)
2244 recursive structure where each split may contain other splits.  Here are
2245 the four possible split syntaxes:
2246
2247 @table @dfn
2248 @item GROUP 
2249 If the split is a string, that will be taken as a group name. 
2250 @item (FIELD VALUE SPLIT)
2251 If the split is a list, and the first element is a string, then that
2252 means that if header FIELD (a regexp) contains VALUE (also a regexp),
2253 then store the message as specified by SPLIT.
2254 @item (| SPLIT...)
2255 If the split is a list, and the first element is @code{|} (vertical
2256 bar), then process each SPLIT until one of them matches.  A SPLIT is
2257 said to match if it will cause the mail message to be stored in one or
2258 more groups.
2259 @item (& SPLIT...)
2260 If the split is a list, and the first element is @code{&}, then process
2261 all SPLITs in the list.
2262 @end table
2263
2264 In these splits, FIELD must match a complete field name.  VALUE must
2265 match a complete word according to the fundamental mode syntax table.
2266 You can use @code{.*} in the regexps to match partial field names or
2267 words.
2268
2269 @vindex nnmail-split-abbrev-alist
2270 FIELD and VALUE can also be lisp symbols, in that case they are expanded
2271 as specified by the variable @code{nnmail-split-abbrev-alist}.  This is
2272 an alist of cons cells, where the car of the cells contains the key, and
2273 the cdr contains a string.
2274
2275 @node Mail & Procmail
2276 @subsubsection Mail & Procmail
2277 @cindex procmail
2278
2279 Many people use @code{procmail} to split incoming mail into groups.  If
2280 you do that, you should set @code{nnmail-spool-file} to @code{procmail}
2281 to ensure that the mail backends never ever try to fetch mail by
2282 themselves.
2283
2284 This also means that you probably don't want to set
2285 @code{nnmail-split-methods} either, which has some, perhaps, unexpected
2286 side effects.
2287
2288 When a mail backend is queried for what groups it carries, it replies
2289 with the contents of that variable, along with any groups it has figured
2290 out that it carries by other means.  None of the backends (except
2291 @code{nnmh}) actually go out to the disk and check what groups actually
2292 exist.  (It's not trivial to distinguish between what the user thinks is
2293 a basis for a newsgroup and what is just a plain old file or directory.)
2294
2295 This means that you have to tell Gnus (and the backends) what groups
2296 exist by hand.
2297
2298 Let's take the @code{nnmh} backend as an example. 
2299
2300 The folders are located in @code{nnmh-directory}, say, @file{~/Mail/}.
2301 There are three folders, @file{foo}, @file{bar} and @file{mail.baz}.
2302
2303 Go to the group buffer and type @kbd{G m}.  When prompted, answer
2304 @samp{foo} for the name and @samp{nnmh} for the method.  Repeat
2305 twice for the two other groups, @samp{bar} and @samp{mail.baz}.  Be sure
2306 to include all your mail groups.
2307
2308 That's it.  You are now set to read your mail.  An active file for this
2309 method will be created automatically.
2310
2311 @vindex nnmail-procmail-suffix
2312 @vindex nnmail-procmail-directory
2313 If you use @code{nnfolder} or any other backend that store more than a
2314 single article in each file, you should never have procmail add mails to
2315 the file that Gnus sees.  Instead, procmail should put all incoming mail
2316 in @code{nnmail-procmail-directory}.  To arrive at the file name to put
2317 the incoming mail in, append @code{nnmail-procmail-suffix} to the group
2318 name.  The mail backends will read the mail from these files.
2319
2320 @vindex nnmail-resplit-incoming
2321 When Gnus reads a file called @file{mail.misc.spool}, this mail will be
2322 put in the @code{mail.misc}, as one would expect.  However, if you want
2323 Gnus to split the mail the normal way, you could set
2324 @code{nnmail-resplit-incoming} to @code{t}.
2325
2326 @vindex nnmail-keep-last-article
2327 If you use @code{procmail} to split things directory into an nnmh
2328 directory (which you shouldn't do), you should set
2329 @code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from
2330 ever expiring the final article in a mail newsgroup. This is quite,
2331 quite important.
2332
2333
2334 @node Expiring Old Mail Articles
2335 @subsubsection Expiring Old Mail Articles
2336 @cindex article expiry
2337
2338 Traditional mail readers have a tendency to remove mail articles when
2339 you mark them as read, in some way.  Gnus takes a fundamentally
2340 different approach to mail reading.
2341
2342 Gnus basically considers mail just to be news that has been received in
2343 a rather peculiar manner.  It does not think that it has the power to
2344 actually change the mail, or delete any mail messages.  If you enter a
2345 mail group, and mark articles as "read", or kill them in some other
2346 fashion, the mail articles will still exist on the system.  I repeat:
2347 Gnus will not delete your old, read mail.  Unless you ask it to, of
2348 course.
2349
2350 To make Gnus get rid of your unwanted mail, you have to mark the
2351 articles as @dfn{expirable}.  This does not mean that the articles will
2352 disappear right away, however.  In general, a mail article will be
2353 deleted from your system if, 1) it is marked as expirable, AND 2) it is
2354 more than one week old.  If you do not mark an article as expirable, it
2355 will remain on your system until hell freezes over.  This bears
2356 repeating one more time, with some spurious capitalizations: IF you do
2357 NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
2358
2359 @vindex gnus-auto-expirable-newsgroups
2360 You do not have to mark articles as expirable by hand.  Groups that
2361 match the regular expression @code{gnus-auto-expirable-newsgroups} will
2362 have all articles that you read marked as expirable automatically.  All
2363 articles that are marked as expirable have an @samp{E} in the first
2364 column in the summary buffer.
2365
2366 Let's say you subscribe to a couple of mailing lists, and you want the
2367 articles you have read to disappear after a while:
2368
2369 @lisp
2370 (setq gnus-auto-expirable-newsgroups 
2371       "mail.nonsense-list\\|mail.nice-list")
2372 @end lisp
2373
2374 Another way to have auto-expiry happen is to have the element
2375 @code{auto-expire} in the select method of the group. 
2376
2377 @vindex nnmail-expiry-wait
2378 The @code{nnmail-expiry-wait} variable supplies the default time an
2379 expirable article has to live.  The default is seven days.
2380
2381 Gnus also supplies a function that lets you fine-tune how long articles
2382 are to live, based on what group they are in.  Let's say you want to
2383 have one month expiry period in the @samp{mail.private} group, a one day
2384 expiry period in the @samp{mail.junk} group, and a six day expiry period
2385 everywhere else:
2386
2387 @lisp
2388 (setq nnmail-expiry-wait-function
2389       (lambda (group)
2390        (cond ((string= group "mail.private")
2391                31)
2392              ((string= group "mail.junk")
2393                1)
2394              (t
2395                6))))
2396 @end lisp
2397
2398 @vindex nnmail-keep-last-article
2399 If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
2400 expire the final article in a mail newsgroup.  This is to make life
2401 easier for procmail users.
2402
2403 @vindex gnus-total-expirable-newsgroups
2404 By the way, that line up there about Gnus never expiring non-expirable
2405 articles is a lie.  If you put @code{total-expire} in the group
2406 parameters, articles will not be marked as expirable, but all read
2407 articles will be put through the expiry process.  Use with extreme
2408 caution.  Even more dangerous is the
2409 @code{gnus-total-expirable-newsgroups} variable.  All groups that match
2410 this regexp will have all read articles put through the expiry process,
2411 which means that @emph{all} old mail articles in the groups in question
2412 will be deleted after a while.  Use with extreme caution, and don't come
2413 crying to me when you discover that the regexp you used matched the
2414 wrong group and all your important mail has disappeared.  Be a
2415 @emph{man}!  Or a @emph{woman}!  Whatever you feel more comfortable
2416 with!  So there!
2417
2418
2419 @node Not Reading Mail
2420 @subsubsection Not Reading Mail
2421
2422 If you start using any of the mail backends, they have the annoying
2423 habit of assuming that you want to read mail with them.  This might not
2424 be unreasonable, but it might not be what you want.
2425
2426 If you set @code{nnmail-spool-file} to @code{nil}, none of the backends
2427 will ever attempt to read incoming mail, which should help.
2428
2429 @vindex nnbabyl-get-new-mail
2430 @vindex nnmbox-get-new-mail
2431 @vindex nnml-get-new-mail
2432 @vindex nnmh-get-new-mail
2433 @vindex nnfolder-get-new-mail
2434 This might be too much, if, for instance, you are reading mail quite
2435 happily with @code{nnml} and just want to peek at some old @sc{rmail}
2436 file you have stashed away with @code{nnbabyl}.  All backends have
2437 variables called backend-@code{get-new-mail}.  If you want to disable
2438 the @code{nnbabyl} mail reading, you edit the virtual server for the
2439 group to have a setting where @code{nnbabyl-get-new-mail} to @code{nil}.
2440
2441 All the mail backends will call @code{nn}*@code{-prepare-save-mail-hook}
2442 narrowed to the article to be saved before saving it when reading
2443 incoming mail.
2444
2445 @node nnmbox
2446 @subsubsection nnmbox
2447 @cindex nnmbox
2448 @cindex unix mail box
2449
2450 @vindex nnmbox-active-file
2451 @vindex nnmbox-mbox-file
2452 The @dfn{nnmbox} backend will use the standard Un*x mbox file to store
2453 mail.  @code{nnmbox} will add extra headers to each mail article to say
2454 which group it belongs in.
2455
2456 Virtual server settings:
2457
2458 @table @code
2459 @item nnmbox-mbox-file
2460 @vindex nnmbox-mbox-file
2461 The name of the mail box in the user's home directory. 
2462
2463 @item nnmbox-active-file
2464 @vindex nnmbox-active-file
2465 The name of the active file for the mail box.
2466
2467 @item nnmbox-get-new-mail
2468 @vindex nnmbox-get-new-mail
2469 If non-@code{nil}, @code{nnmbox} will read incoming mail and split it
2470 into groups.
2471 @end table
2472
2473 @node nnbabyl
2474 @subsubsection nnbabyl
2475 @cindex nnbabyl
2476 @cindex rmail mbox
2477
2478 @vindex nnbabyl-active-file
2479 @vindex nnbabyl-mbox-file
2480 The @dfn{nnbabyl} backend will use a babyl mail box (aka. @dfn{rmail
2481 mbox}) to store mail. @code{nnbabyl} will add extra headers to each mail
2482 article to say which group it belongs in.
2483
2484 Virtual server settings:
2485
2486 @table @code
2487 @item nnbabyl-mbox-file
2488 @vindex nnbabyl-mbox-file
2489 The name of the rmail mbox file.
2490
2491 @item nnbabyl-active-file
2492 @vindex nnbabyl-active-file
2493 The name of the active file for the rmail box.
2494
2495 @item nnbabyl-get-new-mail
2496 @vindex nnbabyl-get-new-mail
2497 If non-@code{nil}, @code{nnbabyl} will read incoming mail. 
2498 @end table
2499
2500 @node nnml
2501 @subsubsection nnml
2502 @cindex nnml
2503 @cindex mail @sc{nov} spool
2504
2505 The @dfn{nnml} spool mail format isn't compatible with any other known
2506 format.  It should be used with some caution.
2507
2508 @vindex nnml-directory
2509 If you use this backend, Gnus will split all incoming mail into files;
2510 one file for each mail, and put the articles into the correct
2511 directories under the directory specified by the @code{nnml-directory}
2512 variable.  The default value is @file{~/Mail/}.
2513
2514 You do not have to create any directories beforehand; Gnus will take
2515 care of all that.
2516
2517 If you have a strict limit as to how many files you are allowed to store
2518 in your account, you should not use this backend.  As each mail gets its
2519 own file, you might very well occupy thousands of inodes within a few
2520 weeks.  If this is no problem for you, and it isn't a problem for you
2521 having your friendly systems administrator walking around, madly,
2522 shouting "Who is eating all my inodes?! Who? Who!?!", then you should
2523 know that this is probably the fastest format to use.  You do not have
2524 to trudge through a big mbox file just to read your new mail.
2525
2526 @code{nnml} is probably the slowest backend when it comes to article
2527 splitting.  It has to create lots of files, and it also generates
2528 @sc{nov} databases for the incoming mails.  This makes is the fastest
2529 backend when it comes to reading mail.
2530
2531 Virtual server settings:
2532
2533 @table @code
2534 @item nnml-directory
2535 @vindex nnml-directory
2536 All @code{nnml} directories will be placed under this directory. 
2537
2538 @item nnml-active-file
2539 @vindex nnml-active-file
2540 The active file for the @code{nnml} server.
2541
2542 @item nnml-newsgroups-file
2543 @vindex nnml-newsgroups-file
2544 The @code{nnml} group description file.
2545
2546 @item nnml-get-new-mail
2547 @vindex nnml-get-new-mail
2548 If non-@code{nil}, @code{nnml} will read incoming mail.
2549
2550 @item nnml-nov-is-evil
2551 @vindex nnml-nov-is-evil
2552 If non-@code{nil}, this backend will ignore any @sc{nov} files.  
2553
2554 @item nnml-nov-file-name
2555 @vindex nnml-nov-file-name
2556 The name of the @sc{nov} files.  The default is @file{.overview}. 
2557
2558 @end table
2559
2560 @findex nnml-generate-nov-databases
2561 If your @code{nnml} groups and @sc{nov} files get totally out of whack,
2562 you can do a complete update by typing @kbd{M-x
2563 nnml-generate-nov-databases}.  This command will trawl through the
2564 entire @code{nnml} hierarchy, looking at each and every article, so it
2565 might take a while to complete.
2566
2567 @node nnmh
2568 @subsubsection nnmh
2569 @cindex nnmh
2570 @cindex mh-e mail spool
2571
2572 @code{nnmh} is just like @code{nnml}, except that is doesn't generate
2573 @sc{nov} databases and it doesn't keep an active file.  This makes
2574 @code{nnmh} a @emph{much} slower backend than @code{nnml}, but it also
2575 makes it easier to write procmail scripts for.
2576
2577 Virtual server settings:
2578
2579 @table @code
2580 @item nnmh-directory
2581 @vindex nnmh-directory
2582 All @code{nnmh} directories will be located under this directory.
2583
2584 @item nnmh-get-new-mail
2585 @vindex nnmh-get-new-mail
2586 If non-@code{nil}, @code{nnmh} will read incoming mail.
2587
2588 @item nnmh-be-safe
2589 @vindex nnmh-be-safe
2590 If non-@code{nil}, @code{nnmh} will go to ridiculous lengths to make
2591 sure that the articles in the folder is actually what Gnus think they
2592 are.  It will check date stamps, and stat everything in sight, so
2593 setting this to @code{t} will mean a serious slow-down.  If you never
2594 use anything by Gnus to read the nnmh articles, you do not have to set
2595 this variable to @code{t}. 
2596 @end table
2597
2598 @node nnfolder
2599 @subsubsection nnfolder
2600 @cindex nnfolder
2601 @cindex mbox folders
2602
2603 @code{nnfolder} is a backend for storing each mail group in a separate
2604 file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}
2605 will add extra headers to keep track of article numbers and arrival
2606 dates.
2607
2608 Virtual server settings:
2609
2610 @table @code
2611 @item nnfolder-directory
2612 @vindex nnfolder-directory
2613 All the @code{nnfolder} mail boxes will be stored under this directory. 
2614
2615 @item nnfolder-active-file
2616 @vindex nnfolder-active-file
2617 The name of the active file.
2618
2619 @item nnfolder-newsgroups-file
2620 @vindex nnfolder-newsgroups-file
2621 The name of the group description file.
2622
2623 @item nnfolder-get-new-mail
2624 @vindex nnfolder-get-new-mail
2625 If non-@code{nil}, @code{nnfolder} will read incoming mail.
2626 @end table
2627
2628 @node Group Parameters
2629 @section Group Parameters
2630 @cindex group parameters
2631
2632 Gnus stores all information on a group in a list that is usually known
2633 as the @dfn{group info}.  This list has from three to six elements.
2634 Here's an example info.
2635
2636 @lisp
2637 ("nnml:mail.ding" 3 ((1 . 232) 244 (256 . 270)) ((tick 246 249))
2638                   (nnml "private") ((to-address . "ding@@ifi.uio.no")))
2639 @end lisp
2640
2641 The first element is the @dfn{group name}, as Gnus knows the group,
2642 anyway.  The second element is the @dfn{subscription level}, which
2643 normally is a small integer.  The third element is a list of ranges of
2644 read articles.  The fourth element is a list of lists of article marks
2645 of various kinds.  The fifth element is the select method (or virtual
2646 server, if you like).  The sixth element is a list of @dfn{group
2647 parameters}, which is what this section is about.
2648
2649 Any of the last three elements may be missing if they are not required.
2650 In fact, the vast majority of groups will normally only have the first
2651 three elements, which saves quite a lot of cons cells.
2652
2653 The group parameters stores information local to a particular group: 
2654
2655 @table @code
2656 @item to-address
2657 @cindex to-address
2658 If the group parameter list contains an element that looks like
2659 @samp{(to-address .  "some@@where.com")}, that address will be used by
2660 the backend when doing followups and posts.  This is primarily useful in
2661 mail groups that represent mailing lists.  You just set this address to
2662 whatever the list address is.
2663
2664 This trick will actually work whether the group is foreign or not.
2665 Let's say there's a group on the server that is called @samp{fa.4ad-l}.
2666 This is a real newsgroup, but the server has gotten the articles from a
2667 mail-to-news gateway.  Posting directly to this group is therefore
2668 impossible - you have to send mail to the mailing list address instead.
2669
2670 @item to-group
2671 @cindex to-group
2672 IF the group parameter list contains an element like @code{(to-group
2673 . "some.group.name")}, all posts will be sent to that groups.
2674
2675 @item auto-expire
2676 @cindex auto-expire
2677 If this symbol is present in the group parameter list, all articles that
2678 are read will be marked as expirable.  For an alternative approach,
2679 @xref{Expiring Old Mail Articles}.
2680
2681 @item total-expire
2682 @cindex total-expire
2683 If this symbol is present, all read articles will be put through the
2684 expiry process, even if they are not marked as expirable.  Use with
2685 caution. 
2686
2687 @item @var{(variable form)}
2688 You can use the group parameters to set variables local to the group you
2689 are entering.  Say you want to turn threading off in
2690 @samp{news.answers}.  You'd then put @code{(gnus-show-threads nil)} in
2691 the group parameters of that group.  @code{gnus-show-threads} will be
2692 made into a local variable in the summary buffer you enter, and the form
2693 @code{nil} will be @code{eval}ed there.  
2694
2695 This can also be used as a group-specific hook function, if you'd like.
2696 If you want to hear a beep when you enter the group
2697 @samp{alt.binaries.pictures.furniture}, you could put something like
2698 @code{(dummy-variable (ding))} in the parameters of that group.
2699 @code{dummy-variable} will be set to the result of the @code{(ding)}
2700 form, but who cares?
2701
2702 @end table
2703
2704 If you want to change the group info you can use the @kbd{G E} command
2705 to enter a buffer where you can edit it.
2706
2707 You usually don't want to edit the entire group info, so you'd be better
2708 off using the @kbd{G p} command to just edit the group parameters.
2709
2710 @node Listing Groups
2711 @section Listing Groups
2712 @cindex group listing
2713
2714 These commands all list various slices of the groups that are available.
2715
2716 @table @kbd
2717
2718 @item l
2719 @itemx A s
2720 @kindex A s (Group)
2721 @kindex l (Group)
2722 @findex gnus-group-list-groups
2723 List all groups that have unread articles
2724 (@code{gnus-group-list-groups}).  If the numeric prefix is used, this
2725 command will list only groups of level ARG and lower.  By default, it
2726 only lists groups of level five or lower (i.e., just subscribed groups).
2727
2728 @item L
2729 @itemx A u
2730 @kindex A u (Group)
2731 @kindex L (Group)
2732 @findex gnus-group-list-all-groups
2733 List all groups, whether they have unread articles or not
2734 (@code{gnus-group-list-all-groups}).  If the numeric prefix is used,
2735 this command will list only groups of level ARG and lower.  By default,
2736 it lists groups of level seven or lower (i.e., just subscribed and
2737 unsubscribed groups).
2738
2739 @item A k
2740 @kindex A k (Group)
2741 @findex gnus-group-list-killed
2742 List all killed groups (@code{gnus-group-list-killed}).
2743
2744 @item A z
2745 @kindex A z (Group)
2746 @findex gnus-group-list-zombies
2747 List all zombie groups (@code{gnus-group-list-zombies}).
2748
2749 @item A m
2750 @kindex A m (Group)
2751 @findex gnus-group-list-matching
2752 List all subscribed groups with unread articles that match a regexp
2753 (@code{gnus-group-list-matching}). 
2754
2755 @item A M
2756 @kindex A M (Group)
2757 @findex gnus-group-list-all-matching
2758 List groups that match a regexp (@code{gnus-group-list-all-matching}).
2759
2760 @item A A
2761 @kindex A A (Group)
2762 @findex gnus-group-list-active
2763 List absolutely all groups that are in the active file(s) of the
2764 server(s) you are connected to (@code{gnus-group-list-active}).  This
2765 might very well take quite a while.  It might actually be a better idea
2766 to do a @kbd{A m} to list all matching, and just give @samp{.} as the
2767 thing to match on.
2768
2769 @end table
2770
2771 @node Group Maintenance
2772 @section Group Maintenance
2773 @cindex bogus groups
2774
2775 @table @kbd
2776 @item b
2777 @kindex b (Group)
2778 @findex gnus-group-check-bogus-groups
2779 Find bogus groups and delete them
2780 (@code{gnus-group-check-bogus-groups}).
2781 @item F
2782 @kindex F (Group)
2783 @findex gnus-find-new-newsgroups
2784 Find new groups and process them (@code{gnus-find-new-newsgroups}).
2785 @item C-c C-x
2786 @kindex C-c C-x (Group)
2787 @findex gnus-group-expire-articles
2788 Run all expirable articles in the current group through the expiry
2789 process (if any) (@code{gnus-group-expire-articles}).
2790 @item C-c M-C-x
2791 @kindex C-c M-C-x (Group)
2792 @findex gnus-group-expire-all-groups
2793 Run all articles in all groups through the expiry process
2794 (@code{gnus-group-expire-all-groups}).
2795 @item C-c C-s
2796 @kindex C-c C-s (Group)
2797 @findex gnus-group-sort-groups
2798 @findex gnus-group-sort-by-level
2799 @findex gnus-group-sort-by-unread
2800 @findex gnus-group-sort-by-alphabet
2801 @vindex gnus-group-sort-function
2802 Sort the groups according to the function given by the
2803 @code{gnus-group-sort-function} variable
2804 (@code{gnus-group-sort-groups}).  Available sorting functions include
2805 @code{gnus-group-sort-by-alphabet} (the default),
2806 @code{gnus-group-sort-by-unread} and @code{gnus-group-sort-by-level}. 
2807 @end table
2808
2809 @node Browse Foreign Server
2810 @section Browse Foreign Server
2811 @cindex foreign servers
2812 @cindex browsing servers
2813
2814 @table @kbd
2815 @item B
2816 @kindex B (Group)
2817 @findex gnus-group-browse-foreign-server
2818 You will be queried for a select method and a server name.  Gnus will
2819 then attempt to contact this server and let you browse the groups there
2820 (@code{gnus-group-browse-foreign-server}).
2821 @end table
2822
2823 @findex gnus-browse-server-mode
2824 A new buffer with a list of available groups will appear.  This buffer
2825 will be use the @code{gnus-browse-server-mode}.  This buffer looks a bit
2826 (well, a lot) like a normal group buffer, but with one major difference
2827 - you can't enter any of the groups.  If you want to read any of the
2828 news available on that server, you have to subscribe to the groups you
2829 think may be interesting, and then you have to exit this buffer.  The
2830 new groups will be added to the group buffer, and then you can read them
2831 as you would any other group.
2832
2833 Future versions of Gnus may possibly permit reading groups straight from
2834 the browse buffer.
2835
2836 Here's a list of keystrokes available in the browse mode:
2837
2838 @table @kbd
2839 @item n
2840 @kindex n (Browse)
2841 @findex gnus-group-next-group
2842 Go to the next group (@code{gnus-group-next-group}).
2843
2844 @item p
2845 @kindex p (Browse)
2846 @findex gnus-group-prev-group
2847 Go to the previous group (@code{gnus-group-prev-group}).
2848
2849 @item SPC
2850 @kindex SPC (Browse)
2851 @findex gnus-browse-read-group
2852 Enter the current group and display the first article
2853 (@code{gnus-browse-read-group}). 
2854
2855 @item RET
2856 @kindex RET (Browse)
2857 @findex gnus-browse-select-group
2858 Enter the current group (@code{gnus-browse-select-group}). 
2859
2860 @item u
2861 @kindex u (Browse)
2862 @findex gnus-browse-unsubscribe-current-group
2863 Unsubscribe to the current group, or, as will be the case here,
2864 subscribe to it (@code{gnus-browse-unsubscribe-current-group}). 
2865
2866 @item l
2867 @itemx q
2868 @kindex q (Browse)
2869 @kindex l (Browse)
2870 @findex gnus-browse-exit
2871 Exit browse mode (@code{gnus-browse-exit}).
2872
2873 @item ?
2874 @kindex ? (Browse)
2875 @findex gnus-browse-describe-briefly
2876 Describe browse mode briefly (well, there's not much to describe, is
2877 there) (@code{gnus-browse-describe-briefly}).
2878 @end table
2879
2880 @node Exiting Gnus
2881 @section Exiting Gnus
2882 @cindex exiting Gnus
2883
2884 Yes, Gnus is ex(c)iting.
2885
2886 @table @kbd
2887 @item z
2888 @kindex z (Group)
2889 @findex gnus-group-suspend
2890 Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
2891 but it kills all buffers except the Group buffer.  I'm not sure why this
2892 is a gain, but then who am I to judge?
2893 @item q
2894 @kindex q (Group)
2895 @findex gnus-group-exit
2896 Quit Gnus (@code{gnus-group-exit}).
2897 @item Q
2898 @kindex Q (Group)
2899 @findex gnus-group-quit
2900 Quit Gnus without saving any startup files (@code{gnus-group-quit}).
2901 @end table
2902
2903 @vindex gnus-exit-gnus-hook
2904 @vindex gnus-suspend-gnus-hook
2905 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
2906 @code{gnus-exit-gnus-hook} is called when you quit Gnus.
2907
2908 @findex gnus-unload
2909 @cindex unloading
2910 If you wish to completely unload Gnus and all its adherents, you can use
2911 the @code{gnus-unload} command.  This command is also very handy when
2912 trying to custoize meta-variables.
2913
2914 Note:
2915
2916 @quotation
2917 Miss Lisa Cannifax, while sitting in English class, feels her feet go
2918 numbly heavy and herself fall into a hazy trance as the boy sitting
2919 behind her drew repeated lines with his pencil across the back of her
2920 plastic chair.
2921 @end quotation
2922
2923 @node Misc Group Stuff
2924 @section Misc Group Stuff
2925
2926 @table @kbd
2927
2928 @item g
2929 @kindex g (Group)
2930 @findex gnus-group-get-new-news
2931 Check server for new articles.  If the numerical prefix is used, this
2932 command will check only groups of level @var{arg} and lower
2933 (@code{gnus-group-get-new-news}).  If given a non-numerical prefix, this
2934 command will force a total rereading of the active file(s) from the
2935 backend(s).  
2936
2937 @item M-g
2938 @kindex M-g (Group)
2939 @findex gnus-group-get-new-news-this-group
2940 Check whether new articles have arrived in the current group
2941 (@code{gnus-group-get-new-news-this-group}).
2942
2943 @item ^
2944 @kindex ^ (Group)
2945 @findex gnus-group-enter-server-mode
2946 Enter the server buffer (@code{gnus-group-enter-server-mode}). @xref{The
2947 Server Buffer}.
2948
2949 @item M-f
2950 @kindex M-f (Group)
2951 @findex gnus-group-fetch-faq
2952 Try to fetch the FAQ for the current group
2953 (@code{gnus-group-fetch-faq}).  Gnus will try to get the FAQ from
2954 @code{gnus-group-faq-directory}, which is usually a directory on a
2955 remote machine.  @code{ange-ftp} will be used for fetching the file.
2956 @item R
2957 @kindex R (Group)
2958 @findex gnus-group-restart
2959 Restart Gnus (@code{gnus-group-restart}).
2960 @item r
2961 @kindex r (Group)
2962 @findex gnus-group-read-init-file
2963 @vindex gnus-init-file
2964 Read the init file (@code{gnus-init-file}, which defaults to
2965 @file{~/.gnus}) (@code{gnus-group-read-init-file}).
2966 @item s
2967 @kindex s (Group)
2968 @findex gnus-group-save-newsrc
2969 Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
2970 (@code{gnus-group-save-newsrc}).
2971 @item Z
2972 @kindex Z (Group)
2973 @findex gnus-group-clear-dribble
2974 Clear the dribble buffer (@code{gnus-group-clear-dribble}).
2975 @item D
2976 @kindex D (Group)
2977 @findex gnus-group-describe-group
2978 Describe the current group (@code{gnus-group-describe-group}).  If given
2979 a prefix, force Gnus to re-read the description from the server.
2980 @item G a
2981 @kindex G a (Group)
2982 @findex gnus-group-apropos
2983 List all groups that have names that match a regexp
2984 (@code{gnus-group-apropos}).
2985 @item G d
2986 @kindex G d (Group)
2987 @findex gnus-group-description-apropos
2988 List all groups that have names or descriptions that match a regexp
2989 (@code{gnus-group-description-apropos}).
2990 @item a
2991 @kindex a (Group)
2992 @findex gnus-group-post-news
2993 Post an article to a group (@code{gnus-group-post-news}).
2994 @item m
2995 @kindex m (Group)
2996 @findex gnus-group-mail
2997 Mail a message somewhere (@code{gnus-group-mail}).
2998 @item C-x C-t
2999 @kindex C-x C-t (Group)
3000 @findex gnus-group-transpose-groups
3001 Transpose two groups (@code{gnus-group-transpose-groups}).
3002 @item V
3003 @kindex V (Group)
3004 @findex gnus-version
3005 Display current Gnus version numbers (@code{gnus-version}).
3006 @item M-d
3007 @kindex M-d (Group)
3008 @findex gnus-group-describe-all-groups
3009 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
3010 prefix, force Gnus to re-read the description file from the server.
3011 @item ?
3012 @kindex ? (Group)
3013 @findex gnus-group-describe-briefly
3014 Give a very short help message (@code{gnus-group-describe-briefly}).
3015 @item C-c C-i
3016 @kindex C-c C-i (Group)
3017 @findex gnus-info-find-node
3018 Go to the Gnus info node (@code{gnus-info-find-node}).
3019 @end table
3020
3021 @vindex gnus-group-prepare-hook
3022 @code{gnus-group-prepare-hook} is called after the group buffer is
3023 generated.  It may be used to modify the buffer in some strange,
3024 unnatural way.
3025
3026 @node The Summary Buffer
3027 @chapter The Summary Buffer
3028 @cindex summary buffer
3029
3030 A line for each article is displayed in the summary buffer.  You can
3031 move around, read articles, post articles and reply to articles.
3032
3033 @menu
3034 * Summary Buffer Format::       Deciding how the summary buffer is to look.
3035 * Summary Maneuvering::         Moving around the summary buffer.
3036 * Choosing Articles::           Reading articles.
3037 * Paging the Article::          Scrolling the current article.
3038 * Reply Followup and Post::     Posting articles.
3039 * Canceling and Superseding::   "Whoops, I shouldn't have called him that."
3040 * Marking Articles::            Marking articles as read, expirable, etc.
3041 * Limiting::                    You can limit the summary buffer.
3042 * Threading::                   How threads are made.
3043 * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
3044 * Article Caching::             You may store articles in a cache.
3045 * Exiting the Summary Buffer::  Returning to the Group buffer.
3046 * Process/Prefix::              A convention used by many treatment commands.
3047 * Saving Articles::             Ways of customizing article saving.
3048 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
3049 * Article Treatment::           The article buffer can be mangled at will.
3050 * Summary Sorting::             You can sort the summary buffer four ways.
3051 * Finding the Parent::          No child support? Get the parent.
3052 * Mail Group Commands::         Some commands can only be used in mail groups.
3053 * Various Summary Stuff::       What didn't fit anywhere else.
3054 @end menu
3055
3056
3057 @node Summary Buffer Format
3058 @section Summary Buffer Format
3059 @cindex summary buffer format
3060
3061 @menu
3062 * Summary Buffer Lines::     You can specify how summary lines should look.
3063 * Summary Buffer Mode Line:: You can say how the mode line should look.
3064 @end menu
3065
3066 @findex mail-extract-address-components
3067 @findex gnus-extract-address-components
3068 @vindex gnus-extract-address-components
3069 Gnus will use the value of the @code{gnus-extract-address-components}
3070 variable as a function for getting the name and address parts of a
3071 @code{From} header.  Two pre-defined function exist:
3072 @code{gnus-extract-address-components}, which is the default, quite
3073 fast, and too simplistic solution, and
3074 @code{mail-extract-address-components}, which works very nicely, but is
3075 slower.
3076
3077 @vindex gnus-summary-same-subject
3078 @code{gnus-summary-same-subject} is a string indicating that the current
3079 article has the same subject as the previous.  This string will be used
3080 with those specs that require it.
3081
3082 @node Summary Buffer Lines
3083 @subsection Summary Buffer Lines
3084
3085 @vindex gnus-summary-line-format
3086 You can change the format of the lines in the summary buffer by changing
3087 the @code{gnus-summary-line-format} variable.  It works along the same
3088 lines a a normal @code{format} string, with some extensions.
3089
3090 The default string is @samp{"%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n"}.
3091
3092 The following format specification characters are understood:
3093
3094 @table @samp
3095 @item N 
3096 Article number.
3097 @item S
3098 Subject string.
3099 @item s
3100 Subject if the article is the root, @code{gnus-summary-same-subject}
3101 otherwise. 
3102 @item F
3103 Full @code{From} line.
3104 @item n
3105 The name (from the @code{From} header).
3106 @item a
3107 The name (from the @code{From} header). This differs from the @code{n}
3108 spec in that it uses @code{gnus-extract-address-components}, which is
3109 slower, but may be more thorough.
3110 @item A
3111 The address (from the @code{From} header). This works the same way as
3112 the @code{a} spec.
3113 @item L
3114 Number of lines in the article.
3115 @item c
3116 Number of characters in the article.
3117 @item I
3118 Indentation based on thread level (@pxref{Customizing Threading}).
3119 @item T
3120 Nothing if the article is a root and lots of spaces if it isn't (it
3121 pushes everything after it off the screen).
3122 @item \[
3123 Opening bracket, which is normally @samp{\[}, but can also be @samp{<}
3124 for adopted articles.
3125 @item \]
3126 Closing bracket, which is normally @samp{\]}, but can also be @samp{>}
3127 for adopted articles.
3128 @item <
3129 One space for each thread level.
3130 @item >
3131 Twenty minus thread level spaces.
3132 @item U
3133 Unread.
3134 @item R
3135 Replied.
3136 @item i
3137 Score as a number.
3138 @item z
3139 @vindex gnus-summary-zcore-fuzz
3140 Zcore, @samp{+} if above the default level and @samp{-} if below the
3141 default level.  If the difference between
3142 @code{gnus-summary-default-level} and the score is less than
3143 @code{gnus-summary-zcore-fuzz}, this spec will not be used.
3144 @item x
3145 @code{Xref}.
3146 @item D
3147 @code{Date}.
3148 @item M
3149 @code{Message-Id}.
3150 @item r
3151 @code{References}.
3152 @item t
3153 Number of articles in the current sub-thread.  Using this spec will slow
3154 down summary buffer generation somewhat.
3155 @item e
3156 A single character will be displayed if the article has any children. 
3157 @item u
3158 User defined specifier.  The next character in the format string should
3159 be a letter.  @sc{gnus} will call the function
3160 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
3161 following @samp{%u}.  The function will be passed the current header as
3162 argument.  The function should return a string, which will be inserted
3163 into the summary just like information from any other summary specifier.
3164 @end table
3165
3166 Text between @samp{%(} and @samp{%)} will be highlighted with
3167 @code{gnus-mouse-face} when the mouse point is placed inside the area.
3168 There can only be one such area.
3169
3170 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
3171 have to be handled with care.  For reasons of efficiency, Gnus will
3172 compute what column these characters will end up in, and "hard-code"
3173 that.  This means that it is illegal to have these specs after a
3174 variable-length spec.  Well, you might not be arrested, but your summary
3175 buffer will look strange, which is bad enough.
3176
3177 The smart choice is to have these specs as far to the left as possible.
3178 (Isn't that the case with everything, though?  But I digress.)
3179
3180 This restriction may disappear in later versions of Gnus.
3181
3182 @node Summary Buffer Mode Line
3183 @subsection Summary Buffer Mode Line
3184
3185 @vindex gnus-summary-mode-line-format
3186 You can also change the format of the summary mode bar.  Set
3187 @code{gnus-summary-mode-line-format} to whatever you like.  Here are the
3188 elements you can play with:
3189
3190 @table @samp
3191 @item G
3192 Group name.
3193 @item p
3194 Unprefixed group name.
3195 @item A
3196 Current article number.
3197 @item V
3198 Gnus version.
3199 @item U
3200 Number of unread articles in this group.
3201 @item e
3202 Number of unselected articles in this group.
3203 @item Z
3204 A string with the number of unread and unselected articles represented
3205 either as @samp{<%U(+%u) more>} if there are both unread and unselected
3206 articles, and just as @samp{<%U more>} if there are just unread articles
3207 and no unselected ones.
3208 @item g
3209 Shortish group name. For instance, @samp{rec.arts.anime} will be
3210 shortened to @samp{r.a.anime}. 
3211 @item S
3212 Subject of the current article.
3213 @item u
3214 Used-defined spec.
3215 @item s
3216 Name of the current score file.
3217 @end table
3218
3219
3220 @node Summary Maneuvering
3221 @section Summary Maneuvering
3222 @cindex summary movement
3223
3224 All the straight movement commands understand the numeric prefix and
3225 behave pretty much as you'd expect. 
3226
3227 None of these commands select articles.
3228
3229 @table @kbd
3230 @item G M-n
3231 @itemx M-n
3232 @kindex M-n (Summary)
3233 @kindex G M-n (Summary)
3234 @findex gnus-summary-next-unread-subject
3235 Go to the next summary line of an unread article
3236 (@code{gnus-summary-next-unread-subject}). 
3237 @item G M-p
3238 @itemx M-p
3239 @kindex M-p (Summary)
3240 @kindex G M-p (Summary)
3241 @findex gnus-summary-prev-unread-subject
3242 Go to the previous summary line of an unread article
3243 (@code{gnus-summary-prev-unread-subject}). 
3244 @item G g
3245 @itemx j
3246 @kindex j (Summary)
3247 @kindex G g (Summary)
3248 @findex gnus-summary-goto-subject
3249 Ask for an article number and then go to this summary line
3250 (@code{gnus-summary-goto-subject}). 
3251 @end table
3252
3253 @vindex gnus-auto-select-next
3254 If you are at the end of the group and issue one of the movement
3255 commands, Gnus will offer to go to the next group.  If
3256 @code{gnus-auto-select-next} is @code{t} and the next group is empty,
3257 Gnus will exit summary mode and return to the group buffer.  If this
3258 variable is neither @code{t} nor @code{nil}, Gnus will select the next
3259 group, no matter whether it has any unread articles or not.  As a
3260 special case, if this variable is @code{quietly}, Gnus will select the
3261 next group without asking for confirmation.  Also @xref{Group Levels}.
3262
3263 If Gnus asks you to press a key to confirm going to the next group, you
3264 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
3265 buffer, searching for the next group to read without actually returning
3266 to the group buffer.
3267
3268 @vindex gnus-auto-select-same
3269 If @code{gnus-auto-select-same} is non-@code{nil}, all the movement
3270 commands will try to go to the next article with the same subject as the
3271 current.  This variable is not particularly useful if you use a threaded
3272 display.
3273
3274 @vindex gnus-summary-check-current
3275 If @code{gnus-summary-check-current} is non-@code{nil}, all the "unread"
3276 movement commands will not proceed to the next (or previous) article if
3277 the current article is unread.  Instead, they will choose the current
3278 article.  
3279
3280 @vindex gnus-auto-center-summary
3281 If @code{gnus-auto-center-summary} is non-@code{nil}, Gnus will keep the
3282 point in the summary buffer centered at all times.  This makes things
3283 quite tidy, but if you have a slow network connection, or simply do not
3284 like this un-Emacsism, you can set this variable to @code{nil} to get
3285 the normal Emacs scrolling action.
3286
3287 @node Choosing Articles
3288 @section Choosing Articles
3289 @cindex selecting articles
3290
3291 None of the following movement commands understand the numeric prefix,
3292 and they all select and display an article.
3293
3294 @table @kbd
3295 @item SPACE
3296 @kindex SPACE (Summary)
3297 @findex gnus-summary-next-page
3298 Select the current article, or, if that one's read already, the next
3299 unread article (@code{gnus-summary-next-page}).
3300 @item G n
3301 @itemx n
3302 @kindex n (Summary)
3303 @kindex G n (Summary)
3304 @findex gnus-summary-next-unread-article
3305 Go to next unread article (@code{gnus-summary-next-unread-article}).
3306 @item G p
3307 @itemx p
3308 @kindex p (Summary)
3309 @findex gnus-summary-prev-unread-article
3310 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
3311 @item G N
3312 @itemx N
3313 @kindex N (Summary)
3314 @kindex G N (Summary)
3315 @findex gnus-summary-next-article
3316 Go to the next article (@code{gnus-summary-next-article}).
3317 @item G P
3318 @itemx P
3319 @kindex P (Summary)
3320 @kindex G P (Summary)
3321 @findex gnus-summary-prev-article
3322 Go to the previous article (@code{gnus-summary-prev-article}).
3323 @item G C-n
3324 @kindex G C-n (Summary)
3325 @findex gnus-summary-next-same-subject
3326 Go to the next article with the same subject
3327 (@code{gnus-summary-next-same-subject}). 
3328 @item G C-p
3329 @kindex G C-p (Summary)
3330 @findex gnus-summary-prev-same-subject
3331 Go to the previous article with the same subject
3332 (@code{gnus-summary-prev-same-subject}). 
3333 @item G f
3334 @itemx .
3335 @kindex G f  (Summary)
3336 @kindex .  (Summary)
3337 @findex gnus-summary-first-unread-article
3338 Go to the first unread article
3339 (@code{gnus-summary-first-unread-article}).
3340 @item G b
3341 @itemx ,
3342 @kindex G b (Summary)
3343 @kindex , (Summary)
3344 Go to the article with the highest score
3345 (@code{gnus-summary-best-unread-article}). 
3346 @item G l
3347 @itemx l
3348 @kindex l (Summary)
3349 @kindex G l (Summary)
3350 @findex gnus-summary-goto-last-article
3351 Go to the previous article read (@code{gnus-summary-goto-last-article}).
3352 @item G p
3353 @kindex G p (Summary)
3354 @findex gnus-summary-pop-article
3355 Pop an article off the summary history and go to this article
3356 (@code{gnus-summary-pop-article}).  This command differs from the
3357 command above in that you can pop as many previous articles off the
3358 history as you like.
3359 @end table
3360
3361 Some variables that are relevant for moving and selecting articles:
3362
3363 @table @code
3364 @item gnus-auto-extend-newsgroup
3365 @vindex gnus-auto-extend-newsgroup
3366 All the movement commands will try to go to the previous (or next)
3367 article, even if that article isn't displayed in the Summary buffer if
3368 this variable is non-@code{nil}.  Gnus will then fetch the article from
3369 the server and display it in the article buffer.
3370 @item gnus-select-article-hook
3371 @vindex gnus-select-article-hook
3372 This hook is called whenever an article is selected.  By default it
3373 exposes any threads hidden under the selected article.
3374 @item gnus-mark-article-hook
3375 @vindex gnus-mark-article-hook
3376 This hook is called whenever an article is selected.  It is intended to
3377 be used for marking articles as read.
3378 @item gnus-visual-mark-article-hook
3379 @vindex gnus-visual-mark-article-hook
3380 This hook is run after selecting an article.  It is meant to be used for
3381 highlighting the article in some way.  It is not run if
3382 @code{gnus-visual} is @code{nil}.
3383 @item gnus-summary-update-hook
3384 @vindex gnus-summary-update-hook
3385 This hook is called when a summary line is changed.  It is not run if
3386 @code{gnus-visual} is @code{nil}.
3387 @item gnus-summary-selected-face
3388 @vindex gnus-summary-selected-face
3389 This is the face (or @dfn{font} as some people call it) that is used to
3390 highlight the current article in the summary buffer.
3391 @item gnus-summary-highlight
3392 @vindex gnus-summary-highlight
3393 Summary lines are highlighted according to this variable, which is a
3394 list where the elements are on the format @code{(FORM . FACE)}.  If you
3395 would, for instance, like ticked articles to be italic and high-scored
3396 articles to be bold, you could set this variable to something like
3397 @lisp
3398 (((eq mark gnus-ticked-mark) . italic)
3399  ((> score default) . bold))
3400 @end lisp
3401 As you may have guessed, if @var{FORM} returns a non-@code{nil} value,
3402 @var{FACE} will be applied to the line.
3403 @end table
3404
3405 @node Paging the Article
3406 @section Scrolling the Article
3407 @cindex article scrolling
3408
3409 @table @kbd
3410
3411 @item SPACE
3412 @kindex SPACE (Summary)
3413 @findex gnus-summary-next-page
3414 Pressing @kbd{SPACE} will scroll the current article forward one page,
3415 or, if you have come to the end of the current article, will choose the
3416 next article (@code{gnus-summary-next-page}).
3417
3418 @item DEL
3419 @kindex DEL (Summary)
3420 @findex gnus-summary-prev-page
3421 Scroll the current article back one page (@code{gnus-summary-prev-page}). 
3422 @item RET
3423 @kindex RET (Summary)
3424 @findex gnus-summary-scroll-up
3425 Scroll the current article one line forward
3426 (@code{gnus-summary-scroll-up}).
3427
3428 @item A <
3429 @itemx <
3430 @kindex < (Summary)
3431 @kindex A < (Summary)
3432 @findex gnus-summary-beginning-of-article
3433 Scroll to the beginning of the article
3434 (@code{gnus-summary-beginning-of-article}).
3435
3436 @item A >
3437 @itemx >
3438 @kindex > (Summary)
3439 @kindex A > (Summary)
3440 @findex gnus-summary-end-of-article
3441 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
3442
3443 @item A s 
3444 @kindex A s (Summary)
3445 @findex gnus-summary-isearch-article
3446 Perform an isearch in the article buffer
3447 (@code{gnus-summary-isearch-article}). 
3448
3449 @end table
3450
3451 @node Reply Followup and Post
3452 @section Reply, Followup and Post
3453 @cindex reply
3454 @cindex followup
3455 @cindex post
3456
3457 @kindex C-c C-c (Post)
3458 All the commands for posting and mailing will put you in a post or mail
3459 buffer where you can edit the article all you like, before you send the
3460 article by pressing @kbd{C-c C-c}.  If you are in a foreign news group,
3461 and you wish to post the article using the foreign server, you can give
3462 a prefix to @kbd{C-c C-c} to make Gnus try to post using the foreign
3463 server. 
3464
3465 @menu 
3466 * Mail::                 Mailing & replying.
3467 * Post::                 Posting and following up.
3468 * Mail & Post::          Mailing and posting at the same time.
3469 * Drafts::               Postponing messages and rejected messages.
3470 * Rejected Articles::    What happens if the server doesn't like your article?
3471 @end menu
3472
3473 @node Mail
3474 @subsection Mail
3475
3476 Commands for composing a mail message:
3477
3478 @table @kbd
3479 @item S r
3480 @itemx r
3481 @kindex S r (Summary)
3482 @kindex r (Summary)
3483 @findex gnus-summary-reply
3484 Mail a reply to the author of the current article
3485 (@code{gnus-summary-reply}). 
3486 @item S R
3487 @itemx R
3488 @kindex R (Summary)
3489 @kindex S R (Summary)
3490 @findex gnus-summary-reply-with-original
3491 Mail a reply to the author of the current article and include the
3492 original message (@code{gnus-summary-reply-with-original}).  This
3493 command uses the process/prefix convention.
3494 @item S o m
3495 @kindex S o m (Summary)
3496 @findex gnus-summary-mail-forward
3497 Forward the current article to some other person
3498 (@code{gnus-summary-mail-forward}). 
3499 @item S o p
3500 @kindex S o p (Summary)
3501 @findex gnus-summary-post-forward
3502 Forward the current article to a newsgroup
3503 (@code{gnus-summary-post-forward}).
3504 @item S m
3505 @itemx m
3506 @kindex m (Summary)
3507 @kindex S m (Summary)
3508 @findex gnus-summary-mail-other-window
3509 Send a mail to some other person
3510 (@code{gnus-summary-mail-other-window}).
3511 @item S D b
3512 @kindex S D b (Summary)
3513 @findex gnus-summary-resend-bounced-mail
3514 If you have sent a mail, but the mail was bounced back to you for some
3515 reason (wrong address, transient failure), you can use this command to
3516 resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
3517 will be popped into a mail buffer where you can edit the headers before
3518 sending the mail off again.  The headers that match the regexp
3519 @code{gnus-bounced-headers-junk} (default @samp{^Received:}) are
3520 automatically deleted first.  If you give a prefix to this command, and
3521 the bounced mail is a reply to some other mail, Gnus will try to fetch
3522 that mail and display it for easy perusal of its headers.  This might
3523 very well fail, though.
3524 @item S O m
3525 @kindex S O m (Summary)
3526 @findex gnus-uu-digest-mail-forward
3527 Digest the current series and forward the result using mail
3528 (@code{gnus-uu-digest-mail-forward}).  This command uses the
3529 process/prefix convention (@pxref{Process/Prefix}). 
3530 @item S O p
3531 @kindex S O p (Summary)
3532 @findex gnus-uu-digest-post-forward
3533 Digest the current series and forward the result to a newsgroup
3534 (@code{gnus-uu-digest-mail-forward}).  
3535 @end table
3536
3537 Variables for customizing outgoing mail:
3538
3539 @table @code
3540 @item gnus-reply-to-function
3541 @vindex gnus-reply-to-function
3542 Gnus uses the normal methods to determine where replies are to go, but
3543 you can change the behavior to suit your needs by fiddling with this
3544 variable.
3545
3546 If you want the replies to go to the @samp{Sender} instead of the
3547 @samp{From} in the group @samp{mail.stupid-list}, you could do something
3548 like this:
3549
3550 @lisp
3551 (setq gnus-reply-to-function
3552       (lambda (group)
3553        (cond ((string= group "mail.stupid-list")
3554                (mail-fetch-field "sender"))
3555              (t
3556               nil))))
3557 @end lisp
3558
3559 This function will be called narrowed to the head of the article that is
3560 being replied to.
3561
3562 As you can see, this function should return a string if it has an
3563 opinion as to what the To header should be.  If it does not, it should
3564 just return @code{nil}, and the normal methods for determining the To
3565 header will be used.
3566
3567 This function can also return a list.  In that case, each list element
3568 should be a cons, where the car should be the name of an header
3569 (eg. @samp{Cc}) and the cdr should be the header value
3570 (eg. @samp{larsi@@ifi.uio.no}).  All these headers will be inserted into
3571 the head of the outgoing mail. 
3572
3573 @item gnus-mail-send-method
3574 @vindex gnus-mail-send-method
3575 This variable says how a mail should be mailed.  It uses the function in
3576 the @code{send-mail-function} variable as the default.
3577
3578 @item gnus-uu-digest-headers
3579 @vindex gnus-uu-digest-headers
3580 List of regexps to match headers included in digested messages.  The
3581 headers will be included in the sequence they are matched.
3582
3583 @item gnus-mail-hook
3584 @vindex gnus-mail-hook
3585 Hook called as the last thing after setting up a mail buffer.
3586
3587 @item gnus-required-mail-headers
3588 @vindex gnus-required-mail-headers
3589 Gnus will generate headers in all outgoing mail instead of letting
3590 @code{sendmail} do it for us.  This makes it possible to do more neat
3591 stuff, like putting mail without sending it, do hairy @code{Fcc}
3592 handling, and much more.  This variable controls what headers Gnus will
3593 generate, and is of the exact same form as @code{gnus-required-headers},
3594 which does the same for news articles (@pxref{Post}). 
3595
3596 The @code{Newsgroups} header is illegal in this list, while @code{To} is
3597 required, and @code{X-Mailer} can be added if you so should want.
3598
3599 @end table
3600
3601 @kindex C-c C-c (Mail)
3602 @kindex C-c C-p (Mail)
3603 @findex gnus-put-message
3604 You normally send a mail message by pressing @kbd{C-c C-c}.  However,
3605 you may wish to just put the mail message you have just written in your
3606 own local mail group instead of sending it.  Sounds quite unlikely, but
3607 I found that useful, so you can now also press @kbd{C-c C-p} to
3608 @dfn{put} the article in the current mail group, or, if there is no such
3609 thing, you will be prompted for a mail group, and then the article will
3610 be put there.  This means that the article is @dfn{not} mailed.  
3611
3612 There are three "methods" for handling all mail.  The default is
3613 @code{sendmail}.  Some people like what @code{mh} does better, and some
3614 people prefer @code{vm}.
3615
3616 Three variables for customizing what to use when:
3617
3618 @table @code
3619
3620 @vindex gnus-mail-reply-method
3621 @item gnus-mail-reply-method
3622 This function is used to compose replies.  The three functions avaibale
3623 are:
3624
3625 @findex gnus-mail-reply-using-vm
3626 @findex gnus-mail-reply-using-mhe
3627 @findex gnus-mail-reply-using-mail
3628 @itemize @bullet
3629 @item 
3630 @code{gnus-mail-reply-using-mail} (sendmail)
3631 @item 
3632 @code{gnus-mail-reply-using-mhe} (mh)
3633 @item
3634 @code{gnus-mail-reply-using-vm} (vm)
3635 @end itemize
3636
3637 @vindex gnus-mail-forward-method
3638 @item gnus-mail-forward-method
3639 This function is used to forward messages.  The three functions avaibale
3640 are:
3641
3642 @findex gnus-mail-forward-using-vm
3643 @findex gnus-mail-forward-using-mhe
3644 @findex gnus-mail-forward-using-mail
3645 @itemize @bullet
3646 @item 
3647 @code{gnus-mail-forward-using-mail} (sendmail)
3648 @item 
3649 @code{gnus-mail-forward-using-mhe} (mh)
3650 @item
3651 @code{gnus-mail-forward-using-vm} (vm)
3652 @end itemize
3653
3654 @vindex gnus-mail-other-window-method
3655 @item gnus-mail-other-window-method
3656 This function is used to send mails.  The three functions avaibale are:
3657
3658 @findex gnus-mail-other-window-using-vm
3659 @findex gnus-mail-other-window-using-mhe
3660 @findex gnus-mail-other-window-using-mail
3661 @itemize @bullet
3662 @item 
3663 @code{gnus-mail-other-window-using-mail} (sendmail)
3664 @item 
3665 @code{gnus-mail-other-window-using-mhe} (mh)
3666 @item
3667 @code{gnus-mail-other-window-using-vm} (vm)
3668 @end itemize
3669
3670 @end table
3671
3672
3673 @node Post
3674 @subsection Post
3675
3676 Commands for posting an article:
3677
3678 @table @kbd
3679 @item S p
3680 @itemx a
3681 @kindex a (Summary)
3682 @kindex S p (Summary)
3683 @findex gnus-summary-post-news
3684 Post an article to the current group
3685 (@code{gnus-summary-post-news}).
3686 @item S f
3687 @itemx f
3688 @kindex f (Summary)
3689 @kindex S f (Summary)
3690 @findex gnus-summary-followup
3691 Post a followup to the current article (@code{gnus-summary-followup}).
3692 @item S F
3693 @itemx F
3694 @kindex S F (Summary)
3695 @kindex F (Summary)
3696 @findex gnus-summary-followup-with-original
3697 Post a followup to the current article and include the original message
3698 (@code{gnus-summary-followup-with-original}).   This command uses the
3699 process/prefix convention.
3700 @item S u
3701 @kindex S u (Summary)
3702 @findex gnus-uu-post-news
3703 Uuencode a file, split it into parts, and post it as a series
3704 (@code{gnus-uu-post-news}). 
3705 @c (@pxref{Uuencoding & Posting}). 
3706 @end table
3707
3708 @vindex gnus-required-headers
3709 @code{gnus-required-headers} a list of header symbols.  These headers
3710 will either be automatically generated, or, if that's impossible, they
3711 will be prompted for.  The following symbols are legal:
3712
3713 @table @code
3714 @item From
3715 This required header will be filled out with the result of the
3716 @code{gnus-inews-user-name} function, which depends on the
3717 @code{gnus-user-from-line}, @code{gnus-user-login-name},
3718 @code{gnus-local-domain} and @code{user-mail-address} variables.
3719 @item Subject
3720 This required header will be prompted for if not present already. 
3721 @item Newsgroups
3722 This required header says which newsgroups the article is to be posted
3723 to.  If it isn't present already, it will be prompted for.
3724 @item Organization
3725 @cindex organization
3726 @vindex gnus-local-organization
3727 @vindex gnus-organization-file
3728 This optional header will be filled out depending on the
3729 @code{gnus-local-organization} variable.  @code{gnus-organization-file}
3730 will be used if that variable is nil.
3731 @item Lines
3732 This optional header will be computed by Gnus.
3733 @item Message-ID
3734 This required header will be generated by Gnus.  A unique ID will be
3735 created based on date, time, user name and system name.
3736 @item X-Newsreader
3737 This optional header will be filled out with the Gnus version numbers. 
3738 @end table
3739
3740 In addition, you can enter conses into this list.  The car of this cons
3741 should be a symbol who's name is the name of the header, and the cdr can
3742 either a string to be entered verbatim as the value of this header, or
3743 it can be a function to be called.  This function should return a string
3744 to be inserted.  For instance, if you want to insert @samp{Mime-Version:
3745 1.0}, you should enter @code{(Mime-Version . "1.0")} into the list.  If
3746 you want to insert a funny quote, you could enter something like
3747 @code{(X-Yow . yow)} into the list.  The function @code{yow} will then
3748 be called without any arguments. 
3749
3750 Other variables for customizing outgoing articles:
3751
3752 @table @code
3753 @item gnus-post-method
3754 @vindex gnus-post-method
3755 If non-@code{nil}, Gnus will use this method instead of the default
3756 select method when posting.
3757
3758 @item nntp-news-default-headers
3759 @vindex nntp-news-default-headers
3760 If non-@code{nil}, this variable will override
3761 @code{mail-default-headers} when posting.  This variable should then be
3762 a string.  This string will be inserted, as is, in the head of all
3763 outgoing articles.
3764
3765 @item gnus-use-followup-to
3766 @vindex gnus-use-followup-to
3767 If @code{nil}, always ignore the Followup-To header.  If it is @code{t},
3768 use its value, but ignore the special value @samp{poster}, which will
3769 send the followup as a reply mail to the person you are responding to.
3770 If it is the symbol @code{ask}, query the user before posting.
3771 If it is the symbol @code{use}, always use the value.
3772
3773 @item gnus-followup-to-function
3774 @vindex gnus-followup-to-function
3775 This variable is most useful in mail groups, where "following up" really
3776 means sending a mail to a list address.  Gnus uses the normal methods to
3777 determine where follow-ups are to go, but you can change the behavior
3778 to suit your needs by fiddling with this variable.
3779
3780 If you want the followups to go to the @samp{Sender} instead of the
3781 @samp{From} in the group @samp{mail.stupid-list}, you could do something
3782 like this:
3783
3784 @lisp
3785 (setq gnus-followup-to-function
3786       (lambda (group)
3787        (cond ((string= group "mail.stupid-list")
3788                (mail-fetch-field "sender"))
3789              (t
3790               nil))))
3791 @end lisp
3792
3793 This function will be called narrowed to header of the article that is
3794 being followed up.
3795
3796 @item gnus-removable-headers
3797 @vindex gnus-removable-headers
3798 Some headers that are generated are toxic to the @sc{nntp} server.
3799 These include the @code{NNTP-Posting-Host}, @code{Bcc} and @code{Xref},
3800 so these headers are deleted if they are present in this list of
3801 symbols.
3802
3803 @item gnus-deletable-headers
3804 @vindex gnus-deletable-headers
3805 Headers in this list that were previously generated by Gnus will be
3806 deleted before posting.  Let's say you post an article.  Then you decide
3807 to post it again to some other group, you naughty boy, so you jump back
3808 to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
3809 ship it off again.  By default, this variable makes sure that the old
3810 generated @code{Message-ID} is deleted, and a new one generated.  If
3811 this isn't done, the entire empire would probably crumble, anarchy would
3812 prevail, and cats would start walking on two legs and rule the world.
3813 Allegedly. 
3814
3815 @item gnus-signature-function
3816 @vindex gnus-signature-function
3817 If non-@code{nil}, this variable should be a function that returns a
3818 signature file name.  The function will be called with the name of the
3819 group being posted to.  If the function returns a string that doesn't
3820 correspond to a file, the string itself is inserted.  If the function
3821 returns @code{nil}, the @code{gnus-signature-file} variable will be used
3822 instead.
3823
3824 @item gnus-post-prepare-function
3825 @vindex gnus-post-prepare-function
3826 This function is called with the name of the current group after the
3827 post buffer has been initialized, and can be used for inserting a
3828 signature.  Nice if you use different signatures in different groups.
3829
3830 @item gnus-post-prepapare-hook
3831 @vindex gnus-post-prepapare-hook
3832 This hook is called after a post buffer has been prepared. If you want
3833 to insert a signature at this point, you could put
3834 @code{gnus-inews-insert-signature} into this hook.
3835
3836 @item news-reply-header-hook
3837 @vindex news-reply-header-hook
3838 A related variable when following up and replying is this variable,
3839 which inserts the @dfn{quote line}.  The default value is:
3840
3841 @lisp
3842 (defvar news-reply-header-hook
3843   (lambda ()
3844     (insert "In article " news-reply-yank-message-id
3845             " " news-reply-yank-from " writes:\n\n")))
3846 @end lisp
3847
3848 This will create lines like:
3849
3850 @example
3851 In article <zngay8jrql@@eyesore.no> Lars Mars <lars@@eyesore.no> writes:
3852 @end example
3853
3854 Having the @code{Message-Id} in this line is probably overkill, so I
3855 would suggest this hook instead:
3856
3857 @lisp
3858 (setq news-reply-header-hook
3859   (lambda () (insert news-reply-yank-from " writes:\n\n")))
3860 @end lisp
3861
3862 @item gnus-prepare-article-hook
3863 @vindex gnus-prepare-article-hook
3864 This hook is called before the headers have been prepared.  By default
3865 it inserts the signature specified by @code{gnus-signature-file}.
3866
3867 @item gnus-inews-article-function
3868 @vindex gnus-inews-article-function
3869 This function is used to do the actual article processing and header
3870 checking/generation.  
3871
3872 @item gnus-inews-article-hook
3873 @vindex gnus-inews-article-hook
3874 This hook is called right before the article is posted.  By default it
3875 handles FCC processing (i.e., saving the article to a file.)
3876
3877 @item gnus-inews-article-header-hook
3878 @vindex gnus-inews-article-header-hook
3879 This hook is called after inserting the required headers in an article
3880 to be posted.  The hook is called from the @code{*post-news*} buffer,
3881 narrowed to the head, and is intended for people who would like to
3882 insert additional headers, or just change headers in some way or other.
3883
3884 @item gnus-check-before-posting
3885 @vindex gnus-check-before-posting
3886 If non-@code{nil}, Gnus will attempt to check the legality of the
3887 headers, as well as some other stuff, before posting.  You can control
3888 the granularity of the check by adding or removing elements from this
3889 list.  Legal elemetents are:
3890
3891 @table @code
3892 @item subject-cmsg 
3893 Check the subject for commands.
3894 @item multiple-headers 
3895 Check for the existence of multiple equal headers.
3896 @item sendsys 
3897 Check for the existence of version and sendsys commands.
3898 @item message-id
3899 Check whether the @code{Message-ID} looks ok.
3900 @item from
3901 Check whether the @code{From} header seems nice.
3902 @item long-lines 
3903 Check for too long lines.
3904 @item control-chars
3905 Check for illegal characters.
3906 @item size
3907 Check for excessive size.
3908 @item new-text
3909 Check whether there is any new text in the messages.
3910 @item signature
3911 Check the length of the signature
3912 @item approved
3913 Check whether the article has an @code{Approved} header, which is
3914 something only moderators should include.
3915 @end table
3916
3917 @end table
3918
3919
3920 @node Mail & Post
3921 @subsection Mail & Post
3922
3923 Commands for sending mail and post at the same time:
3924
3925 @table @kbd
3926 @item S b
3927 @kindex S b (Summary)
3928 @findex gnus-summary-followup-and-reply
3929 Post a followup and send a reply to the current article
3930 (@code{gnus-summary-followup-and-reply}).
3931 @item S B
3932 @kindex S B (Summary)
3933 @findex gnus-summary-followup-and-reply-with-original
3934 Post a followup and send a reply to the current article and include the
3935 original message (@code{gnus-summary-followup-and-reply-with-original}).
3936 This command uses the process/prefix convention.
3937 @end table
3938
3939 Here's a list of variables that are relevant to both mailing and
3940 posting:
3941
3942 @table @code
3943 @item gnus-signature-file
3944 @itemx mail-signature
3945 @vindex mail-signature
3946 @vindex gnus-signature-file
3947 @cindex double signature
3948 @cindex signature
3949 If @code{gnus-signature-file} is non-@code{nil}, it should be the name
3950 of a file containing a signature (@samp{~/.signature} by default).  This
3951 signature will be appended to all outgoing post.  Most people find it
3952 more convenient to use @code{mail-signature}, which (sort of) does the
3953 same, but inserts the signature into the buffer before you start editing
3954 the post (or mail).  So - if you have both of these variables set, you
3955 will get two signatures.  Note that @code{mail-signature} does not work
3956 the same way as @code{gnus-signature-file}, which is a bit confusing.
3957 If @code{mail-signature} is @code{t}, it will insert
3958 @file{~/.signature}.  If it is a string, this string will be inserted. 
3959
3960 Note that RFC1036 says that a signature should be preceded by the three
3961 characters @samp{-- } on a line by themselves.  This is to make it
3962 easier for the recipient to automatically recognize and process the
3963 signature.  So don't remove those characters, even though you might feel
3964 that they ruin you beautiful design, like, totally.
3965
3966 Also note that no signature should be more than four lines long.
3967 Including ASCII graphics is an efficient way to get everybody to believe
3968 that you are silly and have nothing important to say.
3969
3970 @item mail-yank-prefix
3971 @vindex mail-yank-prefix
3972 @cindex yanking
3973 @cindex quoting
3974 When you are replying to or following up an article, you normally want
3975 to quote the person you are answering.  Inserting quoted text is done by
3976 @dfn{yanking}, and each quoted line you yank will have
3977 @code{mail-yank-prefix} prepended to it.  This is @samp{ } by default,
3978 which isn't very pretty.  Most everybody prefers that lines are
3979 prepended with @samp{> }, so @code{(setq mail-yank-prefix "> ")} in your
3980 @file{.emacs} file.
3981
3982 @item mail-yank-ignored-headers
3983 @vindex mail-yank-ignored-headers
3984 When you yank a message, you do not want to quote any headers, so
3985 @code{(setq mail-yank-ignored-headers ":")}.
3986
3987 @item user-mail-address
3988 @vindex user-mail-address
3989 If all of @code{gnus-user-login-name}, @code{gnus-use-generic-from} and
3990 @code{gnus-local-domain} are @code{nil}, Gnus will use
3991 @code{user-mail-address} as the address part of the @code{From} header.
3992
3993 @item gnus-user-from-line
3994 @vindex gnus-user-from-line
3995 Your full, complete e-mail address with name.  This variable overrides
3996 the other Gnus variables if it is non-@code{nil}.
3997
3998 Here are two example values of this variable: @samp{"larsi@@ifi.uio.no
3999 (Lars Magne Ingebrigtsen)"} and @samp{"Lars Magne Ingebrigtsen
4000 <larsi@@ifi.uio.no>"}. The latter version is recommended in news (and is
4001 probably illegal in mail), but the name has to be quoted if it contains
4002 non-alpha-numerical characters - @samp{"\"Lars M. Ingebrigtsen\"
4003 <larsi@@ifi.uio.no>"}.
4004
4005 @item mail-default-headers
4006 @vindex mail-default-headers
4007 This is a string that will be inserted into the header of all outgoing
4008 mail messages and news articles.  Convenient to use to insert standard
4009 headers.  If @code{nntp-news-default-headers} is non-@code{nil}, that
4010 variable will override this one when posting articles.
4011
4012 @item gnus-auto-mail-to-author
4013 @vindex gnus-auto-mail-to-author
4014 If @code{ask}, you will be prompted for whether you want to send a mail
4015 copy to the author of the article you are following up.  If
4016 non-@code{nil} and not @code{ask}, Gnus will send a mail with a copy of
4017 all follow-ups to the authors of the articles you follow up.  It's nice
4018 in one way - you make sure that the person you are responding to gets
4019 your response.  Other people loathe this method and will hate you dearly
4020 for it, because it means that they will first get a mail, and then have
4021 to read the same article later when they read the news.  It is
4022 @code{nil} by default.
4023
4024 @item gnus-mail-courtesy-message
4025 @vindex gnus-mail-courtesy-message
4026 This is a string that will be prepended to all mails that are the result
4027 of using the variable described above.  
4028
4029 @item gnus-outgoing-message-group 
4030 @vindex gnus-outgoing-message-group 
4031 All outgoing messages will be put in this group.  If you want to store
4032 all your outgoing mail and articles in the group @samp{nnml:archive},
4033 you set this variable to that value. This variable can also be a list of
4034 group names.
4035
4036 If you want to have greater control over what group to put each
4037 message in, you can set this variable to a function that checks the
4038 current newsgroup name and then returns a suitable group name (or list
4039 of names).
4040
4041 @end table
4042
4043 You may want to do spell-checking on messages that you send out.  Or, if
4044 you don't want to spell-check by hand, you could add automatic
4045 spell-checking via the @code{ispell} package:
4046
4047 @vindex news-inews-hook
4048 @lisp
4049 (add-hook 'news-inews-hook 'ispell-message)     ;For news posts
4050 (add-hook 'mail-send-hook 'ispell-message)      ;for mail posts via sendmail
4051 @end lisp
4052
4053 @findex gnus-inews-insert-mime-headers
4054 If you want to insert some @sc{mime} headers into the articles you post,
4055 without doing any actual encoding, you could add
4056 @code{gnus-inews-insert-mime-headers} to @code{gnus-inews-article-hook}.
4057
4058
4059 @node Drafts
4060 @subsection Drafts
4061 @cindex drafts
4062
4063 If you are writing a message (mail or news) and suddenly remember that
4064 you have a steak in the oven (or pesto in the food processor, you craazy
4065 vegetarians), you'll probably wish there was a method to save the
4066 message you are writing so that you can continue editing it some other
4067 day, and send it when you feel its finished.
4068
4069 @kindex C-c C-d (Mail)
4070 @kindex C-c C-d (Post)
4071 @findex gnus-enter-into-draft-group
4072 @vindex gnus-group-draft-directory
4073 What you then do is simply push @kbd{C-c C-d}
4074 (@code{gnus-enter-into-draft-group}).  This will put the current
4075 (unfinished) message in a special draft group (which is implemented as
4076 an @code{nndir} group, if you absolutely have to know) called
4077 @samp{nndir:drafts}.  The variable @code{gnus-group-draft-directory}
4078 controls both the name of the group and the location -- the leaf element
4079 in the path will be used as the name of the group.
4080
4081 If the group doesn't exist, it will be created and subscribed to.
4082
4083 @findex gnus-summary-send-draft
4084 @kindex S D c
4085 When you want to continue editing, you simply enter the draft group and
4086 push @kbd{S D c} (@code{gnus-summary-send-draft}) to do that.  You will
4087 be placed in a buffer where you left off.
4088
4089 Rejected articles will also be put in this draft group (@pxref{Rejected
4090 Articles}).
4091
4092 @findex gnus-summary-send-all-drafts
4093 If you have lots of rejected messages you want to post (or mail) without
4094 doing further editing, you can use the @kbd{S D a} command
4095 (@code{gnus-summary-send-all-drafts}).  This command understands the
4096 process/prefix convention.  
4097
4098
4099 @node Rejected Articles
4100 @subsection Rejected Articles
4101 @cindex rejected articles
4102
4103 Sometimes a news server will reject an article.  Perhaps the server
4104 doesn't like your face.  Perhaps it just feels miserable.  Perhaps there
4105 be demons.  Perhaps you have included too much cited text.  Perhaps the
4106 disk is full.  Perhaps the server is down.
4107
4108 These situations are, of course, totally beyond the control of Gnus.
4109 (Gnus, of course, loves the way you look, always feels great, has angels
4110 fluttering around in it, doesn't care about how much cited text you
4111 include, never runs full and never goes down.)  So what Gnus does is
4112 saves these articles until some later time when the server feels better.
4113
4114 The rejected articles will automatically be put in a special draft group
4115 (@pxref{Drafts}).  When the server comes back up again, you'd then
4116 typically enter that group and send all the articles off.
4117
4118
4119 @node Canceling and Superseding
4120 @section Canceling Articles
4121 @cindex canceling articles
4122 @cindex superseding articles
4123
4124 Have you ever written something, and then decided that you really,
4125 really, really wish you hadn't posted that?
4126
4127 Well, you can't cancel mail, but you can cancel posts.
4128
4129 @findex gnus-summary-cancel-article
4130 @kindex C (Summary)
4131 Find the article you wish to cancel (you can only cancel your own
4132 articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
4133 c} (@code{gnus-summary-cancel-article}).  Your article will be
4134 canceled - machines all over the world will be deleting your article. 
4135
4136 Be aware, however, that not all sites honor cancels, so your article may
4137 live on here and there, while most sites will delete the article in
4138 question.
4139
4140 If you discover that you have made some mistakes and want to do some
4141 corrections, you can post a @dfn{superseding} article that will replace
4142 your original article.
4143
4144 @findex gnus-summary-supersede-article
4145 @kindex S (Summary)
4146 Go to the original article and press @kbd{S s}
4147 (@code{gnus-summary-supersede-article}).  You will be put in a buffer
4148 where you can edit the article all you want before sending it off the
4149 usual way.
4150
4151 @vindex gnus-delete-supersedes-headers
4152 You probably want to delete some of the old headers before sending the
4153 superseding article - @code{Path} and @code{Date} are probably
4154 incorrect.  Set @code{gnus-delete-supersedes-headers} to a regexp to
4155 match the lines you want removed.  The default is
4156 @samp{"^Path:\\|^Date"}. 
4157
4158 The same goes for superseding as for canceling, only more so: Some
4159 sites do not honor superseding.  On those sites, it will appear that you
4160 have posted almost the same article twice.
4161
4162 If you have just posted the article, and change your mind right away,
4163 there is a trick you can use to cancel/supersede the article without
4164 waiting for the article to appear on your site first.  You simply return
4165 to the post buffer (which is called @code{*post-buf*}).  There you will
4166 find the article you just posted, with all the headers intact.  Change
4167 the @samp{Message-ID} header to a @samp{Cancel} or @samp{Supersedes}
4168 header by substituting one of those words for @samp{Message-ID}.  Then
4169 just press @kbd{C-c C-c} to send the article as you would do normally.
4170 The previous article will be canceled/superseded.
4171
4172 Just remember, kids: There is no 'c' in 'supersede'.
4173
4174 @node Marking Articles
4175 @section Marking Articles
4176 @cindex article marking
4177 @cindex article ticking
4178 @cindex marks
4179
4180 There are several marks you can set on an article. 
4181
4182 You have marks that decide the @dfn{readed-ness} (whoo, neato-keano
4183 neologism ohoy!) of the article.  Alphabetic marks generally mean
4184 @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
4185
4186 In addition, you also have marks that do not affect readedness.
4187
4188 @menu
4189 * Unread Articles::      Marks for unread articles.
4190 * Read Articles::        Marks for read articles.
4191 * Other Marks::          Marks that do not affect readedness.
4192 @end menu
4193
4194 @ifinfo
4195 There's a plethora of commands for manipulating these marks:
4196 @end ifinfo
4197
4198 @menu
4199 * Setting Marks::           How to set and remove marks.
4200 * Setting Process Marks::   How to mark articles for later processing.
4201 @end menu
4202
4203 @node Unread Articles
4204 @subsection Unread Articles
4205
4206 The following marks mark articles as unread, in one form or other.
4207
4208 @vindex gnus-dormant-mark
4209 @vindex gnus-ticked-mark
4210 @table @samp
4211 @item !
4212 @dfn{Ticked articles} are articles that will remain visible always.  If
4213 you see an article that you find interesting, or you want to put off
4214 reading it, or replying to it, until sometime later, you'd typically
4215 tick it.  However, articles can be expired, so if you want to keep an
4216 article forever, you'll have to save it.  Ticked articles have a
4217 @samp{!} (@code{gnus-ticked-mark}) in the first column.
4218 @item ?
4219 A @dfn{dormant} article is marked with a @samp{?}
4220 (@code{gnus-dormant-mark}), and will only appear in the summary buffer
4221 if there are followups to it.
4222 @item SPC
4223 An @dfn{unread} article is marked with a @samp{SPC}
4224 (@code{gnus-unread-mark}).  These are articles that haven't been read at
4225 all yet.
4226 @end table
4227
4228 @node Read Articles
4229 @subsection Read Articles
4230 @cindex expirable mark
4231
4232 All the following marks mark articles as read.
4233
4234 @table @samp
4235 @item D
4236 Articles that are marked as read.  They have a @samp{r}
4237 (@code{gnus-del-mark}) in the first column.  These are articles that the
4238 user has marked as read more or less manually.
4239 @item d
4240 Articles that are actually read are marked with @samp{R}
4241 (@code{gnus-read-mark}). 
4242 @item A
4243 Articles that were marked as read in previous sessions are now
4244 @dfn{old} and marked with @samp{O} (@code{gnus-ancient-mark}). 
4245 @item K
4246 Marked as killed (@code{gnus-killed-mark}).
4247 @item X
4248 Marked as killed by kill files (@code{gnus-kill-file-mark}).
4249 @item Y
4250 Marked as read by having a too low score (@code{gnus-low-score-mark}).
4251 @item C
4252 Marked as read by a catchup (@code{gnus-catchup-mark}).
4253 @item G
4254 Canceled article (@code{gnus-cancelled-mark})
4255 @end table
4256
4257 All these marks just mean that the article is marked as read, really.
4258 They are interpreted differently by the adaptive scoring scheme,
4259 however.
4260
4261 One more special mark, though:
4262
4263 @table @samp
4264 @item E
4265 You can also mark articles as @dfn{expirable} (or have them marked as
4266 such automatically).  That doesn't make much sense in normal groups,
4267 because a user does not control the expiring of news articles, but in
4268 mail groups, for instance, articles that are marked as @dfn{expirable}
4269 can be deleted by Gnus at any time.  Expirable articles are marked with
4270 @samp{E} (@code{gnus-expirable-mark}).
4271 @end table
4272
4273 @node Other Marks
4274 @subsection Other Marks
4275 @cindex process mark
4276 @cindex bookmarks
4277
4278 There are some marks that have nothing to do with whether the article is
4279 read or not.
4280
4281 You can set a bookmark in the current article.  Say you are reading a
4282 long thesis on cat's urinary tracts, and have to go home for dinner
4283 before you've finished reading the thesis.  You can then set a bookmark
4284 in the article, and Gnus will jump to this bookmark the next time it
4285 encounters the article.
4286
4287 All articles that you have replied to or made a followup to (i.e., have
4288 answered) will be marked with an @samp{A} in the second column
4289 (@code{gnus-replied-mark}).
4290
4291 @vindex gnus-not-empty-thread-mark
4292 @vindex gnus-empty-thread-mark
4293 It the @samp{%e} spec is used, the presence of threads or not will be
4294 marked with @code{gnus-not-empty-thread-mark} and
4295 @code{gnus-empty-thread-mark}, respectively.
4296
4297 @vindex gnus-process-mark
4298 Finally we have the @dfn{process mark} (@code{gnus-process-mark}.  A
4299 variety of commands react to the presence of the process mark.  For
4300 instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
4301 all articles that have been marked with the process mark.  Articles
4302 marked with the process mark have a @samp{#} in the second column.
4303
4304 @node Setting Marks
4305 @subsection Setting Marks
4306 @cindex setting marks
4307
4308 All the marking commands understand the numeric prefix.
4309
4310 @table @kbd
4311 @item M t
4312 @itemx !
4313 @kindex ! (Summary)
4314 @kindex M t (Summary)
4315 @findex gnus-summary-tick-article-forward
4316 Tick the current article (@code{gnus-summary-tick-article-forward}).
4317 @item M ?
4318 @itemx ?
4319 @kindex ? (Summary)
4320 @kindex M ? (Summary)
4321 @findex gnus-summary-mark-as-dormant
4322 Mark the current article as dormant
4323 (@code{gnus-summary-mark-as-dormant}).
4324 @item M d
4325 @itemx d
4326 @kindex M d (Summary)
4327 @kindex d (Summary)
4328 @findex gnus-summary-mark-as-read-forward
4329 Mark the current article as read
4330 (@code{gnus-summary-mark-as-read-forward}).
4331 @item M k
4332 @itemx k
4333 @kindex k (Summary)
4334 @kindex M k (Summary)
4335 @findex gnus-summary-kill-same-subject-and-select
4336 Mark all articles that have the same subject as the current one as read,
4337 and then select the next unread article
4338 (@code{gnus-summary-kill-same-subject-and-select}).
4339 @item M K
4340 @itemx C-k
4341 @kindex M K (Summary)
4342 @kindex C-k (Summary)
4343 @findex gnus-summary-kill-same-subject
4344 Mark all articles that have the same subject as the current one as read
4345 (@code{gnus-summary-kill-same-subject}).  
4346 @item M C
4347 @kindex M C (Summary)
4348 @findex gnus-summary-catchup
4349 Catchup the current group (@code{gnus-summary-catchup}).
4350 @item M C-c
4351 @kindex M C-c (Summary)
4352 @findex gnus-summary-catchup-all
4353 Catchup all articles in the current group (@code{gnus-summary-catchup-all}).
4354 @item M H
4355 @kindex M H (Summary)
4356 @findex gnus-summary-catchup-to-here
4357 Catchup the current group to point
4358 (@code{gnus-summary-catchup-to-here}). 
4359 @item C-w
4360 @kindex C-w (Summary)
4361 @findex gnus-summary-mark-region-as-read
4362 Mark all articles between point and mark as read
4363 (@code{gnus-summary-mark-region-as-read}). 
4364 @item M V k
4365 @kindex M V k (Summary)
4366 @findex gnus-summary-kill-below
4367 Kill all articles with scores below the default score (or below the
4368 numeric prefix) (@code{gnus-summary-kill-below}).
4369 @item M c
4370 @itemx M-u
4371 @kindex M c (Summary)
4372 @kindex M-u (Summary)
4373 @findex gnus-summary-clear-mark-forward
4374 Clear all readedness-marks from the current article
4375 (@code{gnus-summary-clear-mark-forward}).
4376 @item M e
4377 @itemx E
4378 @kindex M e (Summary)
4379 @kindex E (Summary)
4380 @findex gnus-summary-mark-as-expirable
4381 Mark the current article as expirable
4382 (@code{gnus-summary-mark-as-expirable}).
4383 @item M b
4384 @kindex M b (Summary)
4385 @findex gnus-summary-set-bookmark
4386 Set a bookmark in the current article
4387 (@code{gnus-summary-set-bookmark}).
4388 @item M B
4389 @kindex M B (Summary)
4390 @findex gnus-summary-remove-bookmark
4391 Remove the bookmark from the current article
4392 (@code{gnus-summary-remove-bookmark}).
4393 @item M V c
4394 @kindex M V c (Summary)
4395 @findex gnus-summary-clear-above
4396 Clear all marks from articles with scores over the default score (or
4397 over the numeric prefix) (@code{gnus-summary-clear-above}).
4398 @item M V u
4399 @kindex M V u (Summary)
4400 @findex gnus-summary-tick-above
4401 Tick all articles with scores over the default score (or over the
4402 numeric prefix) (@code{gnus-summary-tick-above}).
4403 @item M V m
4404 @kindex M V m (Summary)
4405 @findex gnus-summary-mark-above
4406 Prompt for a mark, and mark all articles with scores over the default
4407 score (or over the numeric prefix) with this mark
4408 (@code{gnus-summary-clear-above}).
4409 @end table
4410
4411 @code{gnus-summary-goto-unread}
4412 The @code{gnus-summary-goto-unread} variable controls what action should
4413 be taken after setting a mark.  If non-@code{nil}, point will move to
4414 the next/previous unread article.  If @code{nil}, point will just move
4415 one line up or down.
4416
4417
4418 @node Setting Process Marks
4419 @subsection Setting Process Marks
4420 @cindex setting process marks
4421
4422 @table @kbd
4423 @item M P p
4424 @itemx #
4425 @kindex # (Summary)
4426 @kindex M P p (Summary)
4427 @findex gnus-summary-mark-as-processable
4428 Mark the current article with the process mark
4429 (@code{gnus-summary-mark-as-processable}). 
4430 @findex gnus-summary-unmark-as-processable
4431 @item M P u 
4432 @itemx M-#
4433 @kindex M P u (Summary)
4434 @kindex M-# (Summary)
4435 Remove the process mark, if any, from the current article
4436 (@code{gnus-summary-unmark-as-processable}).
4437 @item M P U
4438 @kindex M P U (Summary)
4439 @findex gnus-summary-unmark-all-processable
4440 Remove the process mark from all articles
4441 (@code{gnus-summary-unmark-all-processable}). 
4442 @item M P R
4443 @kindex M P R (Summary)
4444 @findex gnus-uu-mark-by-regexp
4445 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}). 
4446 @item M P r
4447 @kindex M P r (Summary)
4448 @findex gnus-uu-mark-region
4449 Mark articles in region (@code{gnus-uu-mark-region}).
4450 @item M P t
4451 @kindex M P t (Summary)
4452 @findex gnus-uu-mark-thread
4453 Mark all articles in the current (sub)thread
4454 (@code{gnus-uu-mark-thread}).
4455 @item M P T
4456 @kindex M P T (Summary)
4457 @findex gnus-uu-unmark-thread
4458 Unmark all articles in the current (sub)thread
4459 (@code{gnus-uu-unmark-thread}).
4460 @item M P s
4461 @kindex M P s (Summary)
4462 @findex gnus-uu-mark-series
4463 Mark all articles in the current series (@code{gnus-uu-mark-series}).
4464 @item M P S
4465 @kindex M P S (Summary)
4466 @findex gnus-uu-mark-sparse
4467 Mark all series that have already had some articles marked
4468 (@code{gnus-uu-mark-sparse}).
4469 @item M P a
4470 @kindex M P a (Summary)
4471 @findex gnus-uu-mark-all
4472 Mark all articles in series order (@code{gnus-uu-mark-series}).
4473 @item M P b
4474 @kindex M P b (Summary)
4475 @findex gnus-uu-mark-buffer
4476 Mark all articles in the buffer in the order they appear
4477 (@code{gnus-uu-mark-buffer}). 
4478 @end table
4479
4480
4481 @node Limiting
4482 @section Limiting
4483 @cindex limiting
4484
4485 It can be convenient to limit the summary buffer to just show some
4486 subset of the articles currently in the group.  The effect most limit
4487 commands have is to remove a few (or many) articles from the summary
4488 buffer. 
4489
4490 @table @kbd
4491
4492 @item M N u
4493 @itemx x
4494 @kindex M N u (Summary)
4495 @kindex x (Summary)
4496 @findex gnus-summary-limit-to-unread
4497 Limit the summary buffer to articles that are not marked as read
4498 (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
4499 buffer to articles that are strictly unread.  This means that ticked and
4500 dormant articles will also be excluded.
4501
4502 @item M N m
4503 @kindex M N m (Summary)
4504 @findex gnus-summary-limit-to-marks
4505 Ask for a mark and then limit to all articles that have not been marked
4506 with that mark (@code{gnus-summary-limit-to-marks}).
4507
4508 @item M N n
4509 @kindex M N n (Summary)
4510 @findex 
4511 Limit the summary buffer to the current article
4512 (@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
4513 convention (@pxref{Process/Prefix}).
4514
4515 @item M N w
4516 @kindex M N w (Summary)
4517 @findex gnus-summary-pop-limit
4518 Pop the previous limit off the stack and restore it
4519 (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
4520 the stack.
4521
4522 @item M N s
4523 @itemx /
4524 @kindex M N s (Summary)
4525 @kindex / (Summary)
4526 @findex gnus-summary-limit-to-subject
4527 Limit the summary buffer to articles that have a subject that matches a
4528 regexp (@code{gnus-summary-limit-to-subject}).
4529
4530 @item M N v
4531 @kindex M N v (Summary)
4532 @findex gnus-summary-limit-to-score
4533 Limit the summary buffer to articles that have a score at or above some
4534 score (@code{gnus-summary-limit-to-score}).
4535
4536 @item M S
4537 @kindex M S (Summary)
4538 @findex gnus-summary-show-all-expunged
4539 Display all expunged articles (@code{gnus-summary-show-all-expunged}).
4540
4541 @item M N D
4542 @kindex M N D (Summary)
4543 @findex gnus-summary-limit-include-dormant
4544 Display all dormant articles (@code{gnus-summary-limit-include-dormant}).
4545
4546 @item M N d
4547 @kindex M N d (Summary)
4548 @findex gnus-summary-limit-exclude-dormant
4549 Hide all dormant articles (@code{gnus-summary-limit-exclude-dormant}).
4550
4551 @item M N c
4552 @kindex M N c (Summary)
4553 @findex gnus-summary-limit-exclude-childless-dormant
4554 Hide all dormant articles that have no children
4555 (@code{gnus-summary-limit-exclude-childless-dormant}). 
4556
4557 @end table
4558
4559
4560 @node Threading
4561 @section Threading
4562 @cindex threading
4563 @cindex article threading
4564
4565 Gnus threads articles by default.  @dfn{To thread} is to put replies to
4566 articles directly after the articles they reply to - in a hierarchical
4567 fashion.
4568
4569 @menu
4570 * Customizing Threading::     Variables you can change to affect the threading.
4571 * Thread Commands::           Thread based commands in the summary buffer.
4572 @end menu
4573
4574 @node Customizing Threading
4575 @subsection Customizing Threading
4576 @cindex customizing threading
4577 @cindex <
4578 @cindex >
4579
4580 @table @code
4581 @item gnus-show-threads
4582 @vindex gnus-show-threads
4583 If this variable is @code{nil}, no threading will be done, and all of
4584 the rest of the variables here will have no effect.  Turning threading
4585 off will speed group selection up a bit, but it is sure to make reading
4586 slower and more awkward.
4587
4588 @item gnus-fetch-old-headers
4589 @vindex gnus-fetch-old-headers
4590 If non-@code{nil}, Gnus will attempt to build old threads by fetching
4591 more old headers - headers to articles that are marked as read.  If you
4592 would like to display as few summary lines as possible, but still
4593 connect as many loose threads as possible, you should set this variable
4594 to @code{some} or a number.  If you set it to a number, no more than
4595 that number of extra old headers will be fetched.  In either case,
4596 fetching old headers only works if the backend you are using carries
4597 overview files -- this would normally be @code{nntp}, @code{nnspool} and
4598 @code{nnml}.  Also remember that if the root of the thread has been
4599 expired by the server, there's not much Gnus can do about that.
4600
4601 @item gnus-summary-gather-subject-limit
4602 Loose threads are gathered by comparing subjects of articles.  If this
4603 variable is @code{nil}, Gnus requires an exact match between the
4604 subjects of the loose threads before gathering them into one big
4605 super-thread.  This might be too strict a requirement, what with the
4606 presence of stupid newsreaders that chop off long subjects lines.  If
4607 you think so, set this variable to, say, 20 to require that only the
4608 first 20 characters of the subjects have to match.  If you set this
4609 variable to a real low number, you'll find that Gnus will gather
4610 everything in sight into one thread, which isn't very helpful.
4611
4612 @cindex fuzzy article gathering
4613 If you set this variable to the special value @code{fuzzy}, Gnus will
4614 use a fuzzy string comparison algorithm on the subjects.
4615
4616 @vindex gnus-summary-gather-exclude-subject
4617 Since loose thread gathering is done on subjects only, that might lead
4618 to many false hits, especially with certain common subjects like
4619 @samp{""} and @samp{"(none)"}.  To make the situation slightly better,
4620 you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
4621 what subjects should be excluded from the gathering process.  The
4622 default is @samp{"^ *$\\|^(none)$"}.  
4623
4624 @item gnus-summary-make-false-root
4625 @vindex gnus-summary-make-false-root
4626 If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
4627 and create a dummy root at the top.  (Wait a minute.  Root at the top?
4628 Yup.)  Loose subtrees occur when the real root has expired, or you've
4629 read or killed the root in a previous session.
4630
4631 When there is no real root of a thread, Gnus will have to fudge
4632 something.  This variable says what fudging method Gnus should use.
4633 There are four possible values:
4634
4635 @cindex adopting articles
4636
4637 @table @code
4638 @item adopt
4639 Gnus will make the first of the orphaned articles the parent.  This
4640 parent will adopt all the other articles.  The adopted articles will be
4641 marked as such by pointy brackets (@samp{<>}) instead of the standard
4642 square brackets (@samp{[]}).  This is the default method.
4643 @item dummy
4644 Gnus will create a dummy summary line that will pretend to be the
4645 parent.  This dummy line does not correspond to any real article, so
4646 selecting it will just select the first real article after the dummy
4647 article.
4648 @item empty
4649 Gnus won't actually make any article the parent, but simply leave the
4650 subject field of all orphans except the first empty.  (Actually, it will
4651 use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
4652 Buffer Format}).)
4653 @item none
4654 Don't make any article parent at all.  Just gather the threads and
4655 display them after one another.
4656 @item nil
4657 Don't gather loose threads.
4658 @end table
4659
4660 @item gnus-thread-hide-subtree
4661 @vindex gnus-thread-hide-subtree
4662 If non-@code{nil}, all threads will be hidden when the summary buffer is
4663 generated.
4664 @item gnus-thread-hide-killed
4665 @vindex gnus-thread-hide-killed
4666 if you kill a thread and this variable is non-@code{nil}, the subtree
4667 will be hidden.
4668 @item gnus-thread-ignore-subject
4669 @vindex gnus-thread-ignore-subject
4670 Sometimes somebody changes the subject in the middle of a thread.  If
4671 this variable is non-@code{nil}, the subject change is ignored.  If it
4672 is @code{nil}, which is the default, a change in the subject will result
4673 in a new thread.
4674 @item gnus-thread-indent-level
4675 @vindex gnus-thread-indent-level
4676 This is a number that says how much each sub-thread should be indented.
4677 The default is @samp{4}.
4678 @end table
4679
4680 @node Thread Commands
4681 @subsection Thread Commands
4682 @cindex thread commands
4683
4684 @table @kbd
4685 @item T k
4686 @itemx M-C-k
4687 @kindex T k (Summary)
4688 @kindex M-C-k (Summary)
4689 @findex gnus-summary-kill-thread
4690 Mark all articles in the current sub-thread as read
4691 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
4692 remove all marks instead.  If the prefix argument is negative, tick
4693 articles instead.
4694 @item T l
4695 @itemx M-C-l
4696 @kindex T l (Summary)
4697 @kindex M-C-l (Summary)
4698 @findex gnus-summary-lower-thread
4699 Lower the score of the current thread
4700 (@code{gnus-summary-lower-thread}). 
4701 @item T i
4702 @kindex T i (Summary)
4703 @findex gnus-summary-raise-thread
4704 Increase the score of the current thread
4705 (@code{gnus-summary-raise-thread}).
4706 @item T #
4707 @kindex T # (Summary)
4708 @findex gnus-uu-mark-thread
4709 Set the process mark on the current thread
4710 (@code{gnus-uu-mark-thread}).
4711 @item T M-#
4712 @kindex T M-# (Summary)
4713 @findex gnus-uu-unmark-thread
4714 Remove the process mark from the current thread
4715 (@code{gnus-uu-unmark-thread}).
4716 @item T T
4717 @kindex T T (Summary)
4718 @findex gnus-summary-toggle-threads
4719 Toggle threading (@code{gnus-summary-toggle-threads}).
4720 @item T s
4721 @kindex T s (Summary)
4722 @findex gnus-summary-show-thread
4723 Expose the thread hidden under the current article, if any
4724 (@code{gnus-summary-show-thread}).
4725 @item T h
4726 @kindex T h (Summary)
4727 @findex gnus-summary-hide-thread
4728 Hide the current (sub)thread (@code{gnus-summary-hide-thread}).
4729 @item T S
4730 @kindex T S (Summary)
4731 @findex gnus-summary-show-all-threads
4732 Expose all hidden threads (@code{gnus-summary-show-all-threads}).
4733 @item T H
4734 @kindex T H (Summary)
4735 @findex gnus-summary-hide-all-threads
4736 Hide all threads (@code{gnus-summary-hide-all-threads}).
4737 @end table
4738
4739 The following commands are thread movement commands.  They all
4740 understand the numeric prefix.
4741
4742 @table @kbd
4743 @item T n
4744 @kindex T n (Summary)
4745 @findex gnus-summary-next-thread
4746 Go to the next thread (@code{gnus-summary-next-thread}).
4747 @item T p
4748 @kindex T p (Summary)
4749 @findex gnus-summary-prev-thread
4750 Go to the previous thread (@code{gnus-summary-prev-thread}).
4751 @item T d
4752 @kindex T d (Summary)
4753 @findex gnus-summary-down-thread
4754 Descend the thread (@code{gnus-summary-down-thread}).
4755 @item T u
4756 @kindex T u (Summary)
4757 @findex gnus-summary-up-thread
4758 Ascend the thread (@code{gnus-summary-up-thread}).
4759 @end table
4760
4761 @node Asynchronous Fetching
4762 @section Asynchronous Article Fetching
4763 @cindex asynchronous article fetching
4764
4765 If you read your news from an @sc{nntp} server that's far away, the
4766 network latencies may make reading articles a chore. You have to wait
4767 for a while after pressing @kbd{n} to go to the next article before the
4768 article appears. Why can't Gnus just go ahead and fetch the article
4769 while you are reading the previous one? Why not, indeed.
4770
4771 First, some caveats.  There are some pitfalls to using asynchronous
4772 article fetching, especially the way Gnus does it.  
4773
4774 Let's say you are reading article 1, which is short, and article 2 is
4775 quite long, and you are not interested in reading that.  Gnus does not
4776 know this, so it goes ahead and fetches article 2.  You decide to read
4777 article 3, but since Gnus is in the process of fetching article 2, the
4778 connection is blocked.
4779
4780 To avoid these situations, Gnus will open two (count 'em two)
4781 connections to the server.  Some people may think this isn't a very nice
4782 thing to do, but I don't see any real alternatives.  Setting up that
4783 extra connection takes some time, so Gnus startup will be slower.
4784
4785 Gnus will fetch more articles than you will read.  This will mean that
4786 the link between your machine and the @sc{nntp} server will become more
4787 loaded than if you didn't use article pre-fetch.  The server itself will
4788 also become more loaded - both with the extra article requests, and the
4789 extra connection.
4790
4791 Ok, so now you know that you shouldn't really use this thing... unless
4792 you really want to.
4793
4794 @vindex gnus-asynchronous
4795 Here's how:  Set @code{gnus-asynchronous} to @code{t}.  The rest should
4796 happen automatically.
4797
4798 @vindex nntp-async-number
4799 You can control how many articles that are to be pre-fetched by setting
4800 @code{nntp-async-number}.  This is five by default, which means that when
4801 you read an article in the group, @code{nntp} will pre-fetch the next
4802 five articles.  If this variable is @code{t}, @code{nntp} will pre-fetch
4803 all the articles that it can without bound.  If it is @code{nil}, no
4804 pre-fetching will be made.
4805
4806 @vindex gnus-asynchronous-article-function
4807 You may wish to create some sort of scheme for choosing which articles
4808 that @code{nntp} should consider as candidates for pre-fetching.  For
4809 instance, you may wish to pre-fetch all articles with high scores, and
4810 not pre-fetch low-scored articles.  You can do that by setting the
4811 @code{gnus-asynchronous-article-function}, which will be called with an
4812 alist where the keys are the article numbers.  Your function should
4813 return an alist where the articles you are not interested in have been
4814 removed.  You could also do sorting on article score and the like. 
4815
4816 @node Article Caching
4817 @section Article Caching
4818 @cindex article caching
4819 @cindex caching
4820
4821 If you have an @emph{extremely} slow @sc{nntp} connection, you may
4822 consider turning article caching on.  Each article will then be stored
4823 locally under your home directory.  As you may surmise, this could
4824 potentially use @emph{huge} amounts of disk space, as well as eat up all
4825 your inodes so fast it will make your head swim.  In vodka.
4826
4827 Used carefully, though, it could be just an easier way to save articles.
4828
4829 @vindex gnus-use-long-file-name
4830 @vindex gnus-cache-directory
4831 @vindex gnus-use-cache
4832 To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
4833 all articles that are ticked or marked as dormant will then be copied
4834 over to your local cache (@code{gnus-cache-directory}).  Whether this
4835 cache is flat or hierarchal is controlled by the
4836 @code{gnus-use-long-file-name} variable, as usual.
4837
4838 When re-select a ticked or dormant article, it will be fetched from the
4839 cache instead of from the server.  As articles in your cache will never
4840 expire, this might serve as a method of saving articles while still
4841 keeping them where they belong.  Just mark all articles you want to save
4842 as dormant, and don't worry.
4843
4844 When an article is marked as read, is it removed from the cache.
4845
4846 @vindex gnus-cache-remove-articles
4847 @vindex gnus-cache-enter-articles
4848 The entering/removal of articles from the cache is controlled by the
4849 @code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
4850 variables.  Both are lists of symbols.  The first is @code{(ticked
4851 dormant)} by default, meaning that ticked and dormant articles will be
4852 put in the cache.  The latter is @code{(read)} by default, meaning that
4853 articles that are marked as read are removed from the cache.  Possibly
4854 symbols in these two lists are @code{ticked}, @code{dormant},
4855 @code{unread} and @code{read}.
4856
4857 @findex gnus-jog-cache
4858 So where does the massive article-fetching and storing come into the
4859 picture?  The @code{gnus-jog-cache} command will go through all
4860 subscribed newsgroups, request all unread articles, and store them in
4861 the cache.  You should only ever, ever ever ever, use this command if 1)
4862 your connection to the @sc{nntp} server is really, really, really slow
4863 and 2) you have a really, really, really huge disk.  Seriously.
4864
4865
4866 @node Exiting the Summary Buffer
4867 @section Exiting the Summary Buffer
4868 @cindex summary exit
4869
4870 Exiting from the summary buffer will normally update all info on the
4871 group and return you to the group buffer. 
4872
4873 @table @kbd
4874 @item Z Z
4875 @itemx q
4876 @kindex Z Z (Summary)
4877 @kindex q (Summary)
4878 @findex gnus-summary-exit
4879 @vindex gnus-summary-exit-hook
4880 @vindex gnus-summary-prepare-exit-hook
4881 Exit the current group and update all information on the group
4882 (@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
4883 called before doing much of the exiting, and calls
4884 @code{gnus-summary-expire-articles} by default.
4885 @code{gnus-summary-exit-hook} is called after finishing the exiting
4886 process. 
4887 @item Z E
4888 @itemx Q
4889 @kindex Z E (Summary)
4890 @kindex Q (Summary)
4891 @findex gnus-summary-exit-no-update
4892 Exit the current group without updating any information on the group
4893 (@code{gnus-summary-exit-no-update}).
4894 @item Z c
4895 @itemx c
4896 @kindex Z c (Summary)
4897 @kindex c (Summary)
4898 @findex gnus-summary-catchup-and-exit
4899 Mark all unticked articles in the group as read and then exit
4900 (@code{gnus-summary-catchup-and-exit}).
4901 @item Z C
4902 @kindex Z C (Summary)
4903 @findex gnus-summary-catchup-all-and-exit
4904 Mark all articles, even the ticked ones, as read and then exit
4905 (@code{gnus-summary-catchup-all-and-exit}).
4906 @item Z n
4907 @kindex Z n (Summary)
4908 @findex gnus-summary-catchup-and-goto-next-group
4909 Mark all articles as read and go to the next group
4910 (@code{gnus-summary-catchup-and-goto-next-group}). 
4911 @item Z R
4912 @kindex Z R (Summary)
4913 @findex gnus-summary-reselect-current-group
4914 Exit this group, and then enter it again
4915 (@code{gnus-summary-reselect-current-group}).  If given a prefix, select
4916 all articles, both read and unread.
4917 @item Z G
4918 @itemx M-g
4919 @kindex Z G (Summary)
4920 @kindex M-g (Summary)
4921 @findex gnus-summary-rescan-group
4922 Exit the group, check for new articles in the group, and select the
4923 group (@code{gnus-summary-rescan-group}).  If given a prefix, select all
4924 articles, both read and unread.
4925 @item Z N
4926 @kindex Z N (Summary)
4927 @findex gnus-summary-next-group
4928 Exit the group and go to the next group
4929 (@code{gnus-summary-next-group}). 
4930 @item Z P
4931 @kindex Z P (Summary)
4932 @findex gnus-summary-prev-group
4933 Exit the group and go to the previous group
4934 (@code{gnus-summary-prev-group}). 
4935 @end table
4936
4937 @vindex gnus-exit-group-hook
4938 @code{gnus-exit-group-hook} is called when you exit the current
4939 group.  
4940
4941 @vindex gnus-use-cross-reference
4942 The data on the current group will be updated (which articles you have
4943 read, which articles you have replied to, etc.) when you exit the
4944 summary buffer.  If the @code{gnus-use-cross-reference} variable is
4945 @code{t}, articles that are cross-referenced to this group and are
4946 marked as read, will also be marked as read in the other subscribed
4947 groups they were cross-posted to.  If this variable is neither
4948 @code{nil} nor @code{t}, the article will be marked as read in both
4949 subscribed and unsubscribed groups.
4950
4951 Marking cross-posted articles as read ensures that you'll never have to
4952 read the same article more than once.  Unless, of course, somebody has
4953 posted it to several groups separately.  Posting the same article to
4954 several groups (not cross-posting) is called @dfn{spamming}, and you are
4955 by law required to send nasty-grams to anyone who perpetrates such a
4956 heinous crime.
4957
4958 Remember: Cross-posting is kinda ok, but posting the same article
4959 separately to several groups is not.
4960
4961 One thing that may cause Gnus to not do the cross-posting thing
4962 correctly is if you use an @sc{nntp} server that supports @sc{xover}
4963 (which is very nice, because it speeds things up considerably) which
4964 does not include the @code{Xref} header in its @sc{nov} lines.  This is
4965 Evil, but all too common, alas, alack.  Gnus tries to Do The Right Thing
4966 even with @sc{xover} by registering the @code{Xref} lines of all
4967 articles you actually read, but if you kill the articles, or just mark
4968 them as read without reading them, Gnus will not get a chance to snoop
4969 the @code{Xref} lines out of these articles, and will be unable to use
4970 the cross reference mechanism.
4971
4972 @vindex gnus-nov-is-evil
4973 If you want Gnus to get the @code{Xref}s right all the time, you have to
4974 set @code{gnus-nov-is-evil} to @code{t}, which slows things down
4975 considerably.
4976
4977 C'est la vie.
4978
4979 @node Process/Prefix
4980 @section Process/Prefix
4981 @cindex process/prefix convention
4982
4983 Many functions, among them functions for moving, decoding and saving
4984 articles, use what is known as the @dfn{Process/Prefix convention}.
4985
4986 This is a method for figuring out what articles that the user wants the
4987 command to be performed on.
4988
4989 It goes like this:
4990
4991 If the numeric prefix is N, perform the operation on the next N
4992 articles, starting with the current one.  If the numeric prefix is
4993 negative, perform the operation on the previous N articles, starting
4994 with the current one.
4995
4996 If there is no numeric prefix, but some articles are marked with the
4997 process mark, perform the operation on the articles that are marked with
4998 the process mark.
4999
5000 If there is neither a numeric prefix nor any articles marked with the
5001 process mark, just perform the operation on the current article.
5002
5003 Quite simple, really, but it needs to be made clear so that surprises
5004 are avoided.
5005
5006 @node Saving Articles
5007 @section Saving Articles
5008 @cindex saving articles
5009
5010 Gnus can save articles in a number of ways.  Below is the documentation
5011 for saving articles in a fairly straight-forward fashion (i.e., little
5012 processing of the article is done before it is saved).  For a different
5013 approach (uudecoding, unsharing) you should use @code{gnus-uu}
5014 (@pxref{Decoding Articles}).
5015
5016 @vindex gnus-save-all-headers
5017 If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
5018 unwanted headers before saving the article.
5019
5020 @table @kbd
5021 @item O o
5022 @itemx o
5023 @kindex O o (Summary)
5024 @kindex o (Summary)
5025 @findex gnus-summary-save-article
5026 Save the current article using the default article saver
5027 (@code{gnus-summary-save-article}). 
5028 @item O m
5029 @kindex O m (Summary)
5030 @findex gnus-summary-save-article-mail
5031 Save the current article in mail format
5032 (@code{gnus-summary-save-article-mail}). 
5033 @item O r
5034 @kindex O r (Summary)
5035 @findex gnus-summary-save-article-mail
5036 Save the current article in rmail format
5037 (@code{gnus-summary-save-article-rmail}). 
5038 @item O f
5039 @kindex O f (Summary)
5040 @findex gnus-summary-save-article-file
5041 Save the current article in plain file format
5042 (@code{gnus-summary-save-article-file}). 
5043 @item O h
5044 @kindex O h (Summary)
5045 @findex gnus-summary-save-article-folder
5046 Save the current article in mh folder format
5047 (@code{gnus-summary-save-article-folder}). 
5048 @item O p
5049 @kindex O p (Summary)
5050 @findex gnus-summary-pipe-output
5051 Save the current article in a pipe.  Uhm, like, what I mean is - Pipe
5052 the current article to a process (@code{gnus-summary-pipe-output}).
5053 @end table
5054
5055 All these commands use the process/prefix convention
5056 (@pxref{Process/Prefix}).
5057
5058 @vindex gnus-default-article-saver
5059 You can customize the @code{gnus-default-article-saver} variable to make
5060 Gnus do what you want it to.  You can use any of the four ready-made
5061 functions below, or you can create your own.
5062
5063 @table @code
5064 @item gnus-summary-save-in-rmail
5065 @vindex gnus-summary-save-in-rmail
5066 This is the default format, @dfn{babyl}.  Uses the function in the
5067 @code{gnus-rmail-save-name} variable to get a file name to save the
5068 article in.  The default is @code{gnus-plain-save-name}.
5069 @item gnus-summary-save-in-mail
5070 @vindex gnus-summary-save-in-mail
5071 Save in a Unix mail (mbox) file.  Uses the function in the
5072 @code{gnus-mail-save-name} variable to get a file name to save the
5073 article in.  The default is @code{gnus-plain-save-name}.
5074 @item gnus-summary-save-in-file
5075 @vindex gnus-summary-save-in-file
5076 Append the article straight to an ordinary file.  Uses the function in
5077 the @code{gnus-file-save-name} variable to get a file name to save the
5078 article in.  The default is @code{gnus-numeric-save-name}.
5079 @item gnus-summary-save-in-folder
5080 @vindex gnus-summary-save-in-folder
5081 Save the article to an MH folder using @code{rcvstore} from the MH
5082 library.
5083 @item gnus-summary-save-in-vm
5084 @vindex gnus-summary-save-in-vm
5085 Save the article in a VM folder.  You have to have the VM mail
5086 reader to use this setting.
5087 @end table
5088
5089 All of these functions, except for the last one, will save the article
5090 in the @code{gnus-article-save-directory}, which is initialized from the
5091 @samp{SAVEDIR} environment variable.
5092
5093 As you can see above, the functions use different functions to find a
5094 suitable name of a file to save the article in.  Below is a list of
5095 available functions that generate names:
5096
5097 @table @code
5098 @item gnus-Numeric-save-name
5099 @findex gnus-Numeric-save-name
5100 Generates file names that look like @samp{~/News/Alt.andrea-dworkin/45}.
5101 @item gnus-numeric-save-name
5102 @findex gnus-numeric-save-name
5103 Generates file names that look like @samp{~/News/alt.andrea-dworkin/45}.
5104 @item gnus-Plain-save-name
5105 @findex gnus-Plain-save-name
5106 Generates file names that look like @samp{~/News/Alt.andrea-dworkin}.
5107 @item gnus-plain-save-name
5108 @findex gnus-plain-save-name
5109 Generates file names that look like @samp{~/News/alt.andrea-dworkin}.
5110 @end table
5111
5112 @vindex gnus-use-long-file-name
5113 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
5114 @code{nil}, all the preceding functions will replace all periods
5115 (@samp{.}) in the group names with slashes (@samp{/}) - which means that
5116 the functions will generate hierarchies of directories instead of having
5117 all the files in the toplevel directory
5118 (@samp{~/News/alt/andrea-dworkin} instead of
5119 @samp{~/News/alt.andrea-dworkin}.)
5120
5121 This function also affects kill and score file names.  If this variable
5122 is a list, and the list contains the element @code{not-score}, long file
5123 names will not be used for score files, if it contains the element
5124 @code{not-save}, long file names will not be used for saving, and if it
5125 contains the element @code{not-kill}, long file names will not be used
5126 for kill files.
5127
5128 If you'd like to save articles in a hierarchy that looks something like
5129 a spool, you could
5130
5131 @lisp
5132 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
5133 (setq gnus-default-article-save 'gnus-summary-save-in-file) ; no encoding
5134 @end lisp
5135
5136 Then just save with @kbd{o}. You'd then read this hierarchy with
5137 ephemeral @code{nneething} groups - @kbd{G D} in the group buffer, and
5138 the toplevel directory as the argument (@file{~/News/}). Then just walk
5139 around to the groups/directories with @code{nneething}.
5140
5141
5142 @node Decoding Articles
5143 @section Decoding Articles
5144 @cindex decoding articles
5145
5146 Sometime users post articles (or series of articles) that have been
5147 encoded in some way or other.  Gnus can decode them for you.
5148
5149 @menu 
5150 * Uuencoded Articles::    Uudecode articles.
5151 * Shared Articles::       Unshar articles.
5152 * PostScript Files::      Split PostScript.
5153 * Decoding Variables::    Variables for a happy decoding.
5154 * Viewing Files::         You want to look at the result of the decoding?
5155 @end menu
5156
5157 All these functions use the process/prefix convention
5158 (@pxref{Process/Prefix}) for finding out what articles to work on, with
5159 the extension that a "single article" means "a single series".  Gnus can
5160 find out by itself what articles belong to a series, decode all the
5161 articles and unpack/view/save the resulting file(s).
5162
5163 Gnus guesses what articles are in the series according to the following
5164 simplish rule: The subjects must be (nearly) identical, except for the
5165 last two numbers of the line.  (Spaces are largely ignored, however.)
5166
5167 For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
5168 will find all the articles that match the regexp @samp{^cat.gif
5169 ([0-9]+/[0-9]+).*$}.  
5170
5171 Subjects that are nonstandard, like @samp{cat.gif (2/3) Part 6 of a
5172 series}, will not be properly recognized by any of the automatic viewing
5173 commands, and you have to mark the articles manually with @key{#}.
5174
5175 @node Uuencoded Articles
5176 @subsection Uuencoded Articles
5177 @cindex uudecode
5178 @cindex uuencoded articles
5179
5180 @table @kbd
5181 @item X u
5182 @kindex X u (Summary)
5183 @findex gnus-uu-decode-uu
5184 Uudecodes the current series (@code{gnus-uu-decode-uu}).
5185 @item X U
5186 @kindex X U (Summary)
5187 @findex gnus-uu-decode-uu-and-save
5188 Uudecodes and saves the current series
5189 (@code{gnus-uu-decode-uu-and-save}).
5190 @item X v u
5191 @kindex X v u (Summary)
5192 @findex gnus-uu-decode-uu-view
5193 Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
5194 @item X v U
5195 @kindex X v U (Summary)
5196 @findex gnus-uu-decode-uu-and-save-view
5197 Uudecodes, views and saves the current series
5198 (@code{gnus-uu-decode-uu-and-save-view}). 
5199 @end table
5200
5201 Remember that these all react to the presence of articles marked with
5202 the process mark.  If, for instance, you'd like to uncode and save an
5203 entire newsgroup, you'd typically do @kbd{M P a}
5204 (@code{gnus-uu-mark-all}) and then @kbd{X U}
5205 (@code{gnus-uu-decode-uu-and-save}).
5206
5207 All this is very much different from how @code{gnus-uu} worked with
5208 @sc{gnus 4.1}, where you had explicit keystrokes for everything under
5209 the sun.  This version of @code{gnus-uu} generally assumes that you mark
5210 articles in some way (@pxref{Setting Process Marks}) and then press
5211 @kbd{X u}.
5212
5213 Note: When trying to decode articles that have names matching
5214 @code{gnus-uu-notify-files}, which is hard-coded to
5215 @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
5216 automatically post an article on @samp{comp.unix.wizards} saying that
5217 you have just viewed the file in question.  This feature can't be turned
5218 off.
5219
5220 @node Shared Articles
5221 @subsection Shared Articles
5222 @cindex unshar
5223 @cindex shared articles
5224
5225 @table @kbd
5226 @item X s
5227 @kindex X s (Summary)
5228 @findex gnus-uu-decode-unshar
5229 Unshars the current series (@code{gnus-uu-decode-unshar}).
5230 @item X S
5231 @kindex X S (Summary)
5232 @findex gnus-uu-decode-unshar-and-save
5233 Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
5234 @item X v s
5235 @kindex X v s (Summary)
5236 @findex gnus-uu-decode-unshar-view
5237 Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
5238 @item X v S
5239 @kindex X v S (Summary)
5240 @findex gnus-uu-decode-unshar-and-save-view
5241 Unshars, views and saves the current series
5242 (@code{gnus-uu-decode-unshar-and-save-view}). 
5243 @end table
5244
5245 @node PostScript Files
5246 @subsection PostScript Files
5247 @cindex PostScript
5248
5249 @table @kbd
5250 @item X p
5251 @kindex X p (Summary)
5252 @findex gnus-uu-decode-postscript
5253 Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
5254 @item X P
5255 @kindex X P (Summary)
5256 @findex gnus-uu-decode-postscript-and-save
5257 Unpack and save the current PostScript series
5258 (@code{gnus-uu-decode-postscript-and-save}).
5259 @item X v p
5260 @kindex X v p (Summary)
5261 @findex gnus-uu-decode-postscript-view
5262 View the current PostScript series
5263 (@code{gnus-uu-decode-postscript-view}).
5264 @item X v P
5265 @kindex X v P (Summary)
5266 @findex gnus-uu-decode-postscript-and-save-view
5267 View and save the current PostScript series
5268 (@code{gnus-uu-decode-postscript-and-save-view}). 
5269 @end table
5270
5271 @node Decoding Variables
5272 @subsection Decoding Variables
5273
5274 Adjective, not verb.
5275
5276 @menu 
5277 * Rule Variables::          Variables that say how a file is to be viewed.
5278 * Other Decode Variables::  Other decode variables.
5279 * Uuencoding & Posting::    Variables for customizing uuencoding.
5280 @end menu
5281
5282 @node Rule Variables
5283 @subsubsection Rule Variables
5284 @cindex rule variables
5285
5286 Gnus uses @dfn{rule variables} to decide how to view a file.  All these
5287 variables are on the form
5288   
5289 @lisp
5290       (list '(regexp1 command2)
5291             '(regexp2 command2)
5292             ...)
5293 @end lisp
5294
5295 @table @code
5296 @item gnus-uu-user-view-rules
5297 @vindex gnus-uu-user-view-rules
5298 This variable is consulted first when viewing files.  If you wish to use,
5299 for instance, @code{sox} to convert an @samp{.au} sound file, you could
5300 say something like:
5301 @lisp
5302        (setq gnus-uu-user-view-rules
5303          (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
5304 @end lisp
5305 @item gnus-uu-user-view-rules-end
5306 @vindex gnus-uu-user-view-rules-end
5307 This variable is consulted if Gnus couldn't make any matches from the
5308 user and default view rules.
5309 @item gnus-uu-user-archive-rules
5310 @vindex gnus-uu-user-archive-rules
5311 This variable can be used to say what commands should be used to unpack
5312 archives.
5313 @end table
5314
5315 @node Other Decode Variables
5316 @subsubsection Other Decode Variables
5317
5318 @table @code
5319 @item gnus-uu-ignore-files-by-name
5320 @vindex gnus-uu-ignore-files-by-name
5321 Files with name matching this regular expression won't be viewed.
5322
5323 @item gnus-uu-ignore-files-by-type
5324 @vindex gnus-uu-ignore-files-by-type
5325 Files with a @sc{mime} type matching this variable won't be viewed.
5326 Note that Gnus tries to guess what type the file is based on the name.
5327 @code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly
5328 kludgey.
5329
5330 @item gnus-uu-tmp-dir
5331 @vindex gnus-uu-tmp-dir
5332 Where @code{gnus-uu} does its work.
5333
5334 @item gnus-uu-do-not-unpack-archives
5335 @vindex gnus-uu-do-not-unpack-archives
5336 Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
5337 looking for files to display.
5338
5339 @item gnus-uu-view-and-save
5340 @vindex gnus-uu-view-and-save
5341 Non-@code{nil} means that the user will always be asked to save a file
5342 after viewing it.
5343
5344 @item gnus-uu-ignore-default-view-rules
5345 @vindex gnus-uu-ignore-default-view-rules
5346 Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
5347 rules.
5348
5349 @item gnus-uu-ignore-default-archive-rules
5350 @vindex gnus-uu-ignore-default-archive-rules
5351 Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
5352 unpacking commands.
5353
5354 @item gnus-uu-kill-carriage-return
5355 @vindex gnus-uu-kill-carriage-return
5356 Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
5357 from articles.
5358
5359 @item gnus-uu-unmark-articles-not-decoded
5360 @vindex gnus-uu-unmark-articles-not-decoded
5361 Non-@code{nil} means that @code{gnus-uu} will mark articles that were
5362 unsuccessfully decoded as unread.
5363
5364 @item gnus-uu-correct-stripped-uucode
5365 @vindex gnus-uu-correct-stripped-uucode
5366 Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
5367 uuencoded files that have had trailing spaces deleted.
5368
5369 @item gnus-uu-view-with-metamail
5370 @vindex gnus-uu-view-with-metamail
5371 Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
5372 commands defined by the rule variables and just fudge a @sc{mime}
5373 content type based on the file name.  The result will be fed to
5374 @code{metamail} for viewing.
5375
5376 @item gnus-uu-save-in-digest
5377 @vindex gnus-uu-save-in-digest
5378 Non-@code{nil} means that @code{gnus-uu}, when asked to save without
5379 decoding, will save in digests.  If this variable is @code{nil},
5380 @code{gnus-uu} will just save everything in a file without any
5381 embellishments.  The digesting almost conforms to RFC1153 - no easy way
5382 to specify any meaningful volume and issue numbers were found, so I
5383 simply dropped them.
5384
5385 @end table
5386
5387 @node Uuencoding & Posting
5388 @subsubsection Uuencoding & Posting
5389
5390 @table @code
5391
5392 @item gnus-uu-post-include-before-composing
5393 @vindex gnus-uu-post-include-before-composing
5394 Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
5395 before you compose the article.  If this variable is @code{t}, you can
5396 either include an encoded file with @key{C-c C-i} or have one included
5397 for you when you post the article.
5398
5399 @item gnus-uu-post-length
5400 @vindex gnus-uu-post-length
5401 Maximum length of an article.  The encoded file will be split into how
5402 many articles it takes to post the entire file.
5403
5404 @item gnus-uu-post-threaded
5405 @vindex gnus-uu-post-threaded
5406 Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
5407 thread.  This may not be smart, as no other decoder I have seen are able
5408 to follow threads when collecting uuencoded articles.  (Well, I have
5409 seen one package that does that - @code{gnus-uu}, but somehow, I don't
5410 think that counts...) Default is @code{nil}.
5411
5412 @item gnus-uu-post-separate-description
5413 @vindex gnus-uu-post-separate-description
5414 Non-@code{nil} means that the description will be posted in a separate
5415 article.  The first article will typically be numbered (0/x).  If this
5416 variable is @code{nil}, the description the user enters will be included
5417 at the beginning of the first article, which will be numbered (1/x).
5418 Default is @code{t}.
5419
5420 @end table
5421
5422 @node Viewing Files
5423 @subsection Viewing Files
5424 @cindex viewing files
5425 @cindex pseudo-articles
5426
5427 After decoding, if the file is some sort of archive, Gnus will attempt
5428 to unpack the archive and see if any of the files in the archive can be
5429 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
5430 containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
5431 uncompress and detar the main file, and then view the two pictures.
5432 This unpacking process is recursive, so if the archive contains archives
5433 of archives, it'll all be unpacked.
5434
5435 Finally, Gnus will normally insert a @dfn{pseudo-article} for each
5436 extracted file into the summary buffer.  If you go to these "articles",
5437 you will be prompted for a command to run (usually Gnus will make a
5438 suggestion), and then the command will be run.
5439
5440 @vindex gnus-view-pseudo-asynchronously
5441 If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
5442 until the viewing is done before proceeding.
5443
5444 @vindex gnus-view-pseudos
5445 If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
5446 the pseudo-articles into the summary buffer, but view them
5447 immediately.  If this variable is @code{not-confirm}, the user won't even
5448 be asked for a confirmation before viewing is done.
5449
5450 @vindex gnus-view-pseudos-separately 
5451 If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
5452 pseudo-article will be created for each file to be viewed.  If
5453 @code{nil}, all files that use the same viewing command will be given as
5454 a list of parameters to that command.
5455
5456 So; there you are, reading your @emph{pseudo-articles} in your
5457 @emph{virtual newsgroup} from the @emph{virtual server}; and you think:
5458 Why isn't anything real anymore? How did we get here?
5459
5460
5461 @node Article Treatment
5462 @section Article Treatment
5463
5464 Reading through this huge manual, you may have quite forgotten that the
5465 object of newsreaders are to actually, like, read what people have
5466 written.  Reading articles.  Unfortunately, people are quite bad at
5467 writing, so there are tons of functions and variables to make reading
5468 these articles easier.
5469
5470 @menu
5471 * Article Highlighting::    You want to make the article look like fruit salad.
5472 * Article Hiding::          You also want to make certain info go away.
5473 * Article Washing::         Lots of way-neat functions to make life better.
5474 * Article Date::            Grumble, UT!
5475 @end menu
5476
5477
5478 @node Article Highlighting
5479 @subsection Article Highlighting
5480 @cindex highlight
5481
5482 Not only do you want your article buffer to look like fruit salad, but
5483 you want it to look like techicolor fruit salad.
5484
5485 @table @kbd
5486
5487 @item W H a
5488 @kindex W H a
5489 @findex gnus-article-highlight
5490 Highlight the current article (@code{gnus-article-highlight}).
5491
5492 @item W H h
5493 @kindex W H h
5494 @findex gnus-article-highlight-headers
5495 @vindex gnus-header-face-alist
5496 Highlight the headers (@code{gnus-article-highlight-headers}).  The
5497 highlighting will be done according to the @code{gnus-header-face-alist}
5498 variable, which is a list where each element has the form @var{(regexp
5499 name content)}.  @var{regexp} is a regular expression for matching the
5500 header,  @var{name} is the face used for highling the header name and
5501 @var{content} is the face for highlighting the header value.  The first
5502 match made will be used.
5503
5504 @item W H c
5505 @kindex W H c
5506 @findex gnus-article-highlight-citation
5507 Highlight cited text (@code{gnus-article-highlight-citation}). 
5508
5509 Some variables to customize the citation highlights:
5510
5511 @table @code
5512 @vindex gnus-cite-parse-max-size
5513 @item gnus-cite-parse-max-size
5514 If the article size if bigger than this variable (which is 25000 by
5515 default), no citation highlighting will be performed.  
5516
5517 @item gnus-cite-prefix-regexp
5518 @vindex gnus-cite-prefix-regexp
5519 Regexp mathcing the longest possible citation prefix on a line. 
5520
5521 @item gnus-cite-max-prefix
5522 @vindex gnus-cite-max-prefix
5523 Maximum possible length for a citation prefix (default 20).
5524
5525 @item gnus-supercite-regexp
5526 @vindex gnus-supercite-regexp
5527 Regexp matching normal SuperCite attribution lines.  
5528
5529 @item gnus-supercite-secondary-regexp
5530 @vindex gnus-supercite-secondary-regexp
5531 Regexp matching mangled SuperCite attribution lines.
5532
5533 @item gnus-cite-minimum-match-count
5534 @vindex gnus-cite-minimum-match-count
5535 Minimum number of identical prefixes we have to see before we believe
5536 that it's a citation.
5537
5538 @item gnus-cire-attribution-prefix
5539 @vindex gnus-cire-attribution-prefix
5540 Regexp matching the beginning of an attribution line.
5541
5542 @item gnus-cite-addtribution-suffix
5543 @vindex gnus-cite-addtribution-suffix
5544 Regexp matching the end of an attribution line.
5545
5546 @item gnus-cite-attribution-face
5547 @vindex gnus-cite-attribution-face
5548 Face used for attribution lines.  It is merged with the face for the
5549 cited text belonging to the attribution.
5550
5551 @end table
5552
5553
5554 @item W H s
5555 @kindex W H s
5556 @vindex gnus-signature-separator
5557 @findex gnus-article-highlight-signature
5558 Highlight the signature (@code{gnus-article-highlight-signature}).
5559 Everything after @code{gnus-signature-separator} in an article will be
5560 considered a signature.
5561
5562 @end table
5563
5564
5565 @node Article Hiding
5566 @subsection Article Hiding
5567 @cindex article hiding
5568
5569 Or rather, hiding certain things in each article.  There usually is much
5570 to much gruft in most articles.  
5571
5572 @table @kbd
5573
5574 @item W W a
5575 @kindex W W a (Summary)
5576 @findex gnus-article-hide
5577 Do maximum hiding on the summary buffer (@kbd{gnus-article-hide}). 
5578
5579 @item W W h
5580 @kindex W W h (Summary)
5581 @findex gnus-article-hide-headers
5582 Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
5583 Headers}. 
5584
5585 @item W W s
5586 @kindex W W s (Summary)
5587 @findex gnus-article-hide-signature
5588 Hide signature (@code{gnus-article-hide-signature}).
5589
5590 @item W W c
5591 @kindex W W c (Summary)
5592 @findex gnus-article-hide-citation
5593 Hide citation (@code{gnus-article-hide-citation}).  Two variables for
5594 customizing the hiding:
5595
5596 @table @code
5597
5598 @item gnus-cite-hide-percentage
5599 @vindex gnus-cite-hide-percentage
5600 If the cited text is of a bigger percentage than this variable (default
5601 50), hide the cited text.
5602
5603 @item gnus-cite-hide-absolute
5604 @vindex gnus-cite-hide-absolute
5605 The cited text must be have at least this length (default 10) before it
5606 is hidden.
5607
5608 @end table
5609
5610 Also see @xref{Article Highlighting} for further variables for
5611 citation customization.
5612
5613 @end table
5614
5615
5616 @node Article Washing
5617 @subsection Article Washing
5618 @cindex washing
5619 @cindex article washing
5620
5621 We call this "article washing" for a really good reason.  Namely, the
5622 @kbd{A} key was taken, so we had to use the @kbd{W} key instead.
5623
5624 @dfn{Washing} is defined by us as "changing something from something to
5625 something else", but normally results in something looking better.
5626 Cleaner, perhaps.
5627
5628 @table @kbd
5629
5630 @item W l
5631 @kindex W l (Summary)
5632 @findex gnus-summary-stop-page-breaking
5633 Remove page breaks from the current article
5634 (@code{gnus-summary-stop-page-breaking}).
5635
5636 @item W r
5637 @kindex W r (Summary)
5638 @findex gnus-summary-caesar-message
5639 Do a Caesar rotate (rot13) on the article buffer
5640 (@code{gnus-summary-caesar-message}). 
5641
5642 @item A g
5643 @kindex A g (Summary)
5644 @findex gnus-summary-show-article
5645 (Re)fetch the current article (@code{gnus-summary-show-article}).  If
5646 given a prefix, fetch the current article, but don't run any of the
5647 article treatment functions.  This will give you a "raw" article, just
5648 the way it came from the server.
5649
5650 @item W t
5651 @kindex W t (Summary)
5652 @findex gnus-summary-toggle-header
5653 Toggle whether to display all headers in the article buffer
5654 (@code{gnus-summary-toggle-header}). 
5655
5656 @item W m
5657 @kindex W m (Summary)
5658 @findex gnus-summary-toggle-mime
5659 Toggle whether to run the article through @sc{mime} before displaying
5660 (@code{gnus-summary-toggle-mime}).
5661
5662 @item W o
5663 @kindex W o (Summary)
5664 @findex gnus-article-treat-overstrike
5665 Treat overstrike (@code{gnus-article-treat-overstrike}).
5666
5667 @item W w
5668 @kindex W w (Summary)
5669 @findex gnus-article-word-wrap
5670 Do word wrap (@code{gnus-article-word-wrap}).
5671
5672 @item W c
5673 @kindex W c (Summary)
5674 @findex gnus-article-remove-cr
5675 Remove CR (@code{gnus-article-remove-cr}).
5676
5677 @item W q
5678 @kindex W q (Summary)
5679 @findex gnus-article-de-quoted-unreadable
5680 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
5681
5682 @item W f
5683 @kindex W f (Summary)
5684 @cindex x-face
5685 @findex gnus-article-display-x-face
5686 @findex gnus-article-x-face-command
5687 @vindex gnus-article-x-face-command
5688 @vindex gnus-article-x-face-too-ugly
5689 Look for and display any X-Face headers
5690 (@code{gnus-article-display-x-face}). The command executed by this
5691 function is given by the @code{gnus-article-x-face-command} variable. If
5692 this variable is a string, this string will be executed in a sub-shell.
5693 If it is a function, this function will be called with the face as the
5694 argument. If the @code{gnus-article-x-face-too-ugly} (which is a regexp)
5695 matches the @code{From} header, the face will not be shown.
5696
5697 @end table
5698
5699 @node Article Date
5700 @subsection Article Date
5701
5702 The date is most likely generated in some obscure timezone you've never
5703 heard of, so it's quite nice to be able to find out what the time was
5704 when the article was sent.
5705
5706 @table @kbd
5707
5708 @item W T u
5709 @kindex W T u (Summary)
5710 @findex gnus-article-date-ut
5711 Display the date in UT (aka. GMT, aka ZULU)
5712 (@code{gnus-article-date-ut}). 
5713
5714 @item W T l
5715 @kindex W T l (Summary)
5716 @findex gnus-article-date-local
5717 Display the date in the local timezone (@code{gnus-article-date-local}).
5718
5719 @item W T e
5720 @kindex W T e (Summary)
5721 @findex gnus-article-date-lapsed
5722 Say how much time has (e)lapsed between the article was posted and now
5723 (@code{gnus-article-date-lapsed}).
5724
5725 @item W T o
5726 @kindex W T o (Summary)
5727 @findex gnus-article-date-original
5728 Display the original date (@code{gnus-article-date-original}).  This can
5729 be useful if you normally use some other conversion function and is
5730 worried that it might be doing something totally wrong.  Say, claiming
5731 that the article was posted in 1854.  Although something like that is
5732 @emph{totally} impossible.  Don't you trust me? *titter*
5733
5734 @end table
5735
5736
5737 @node Summary Sorting
5738 @section Summary Sorting
5739 @cindex summary sorting
5740
5741 You can have the summary buffer sorted in various ways, even though I
5742 can't really see why you'd want that.
5743
5744 @table @kbd
5745 @item C-c C-s C-n
5746 @kindex C-c C-s C-n (Summary)
5747 @findex gnus-summary-sort-by-number
5748 Sort by article number (@code{gnus-summary-sort-by-number}).
5749 @item C-c C-s C-a
5750 @kindex C-c C-s C-a (Summary)
5751 @findex gnus-summary-sort-by-author
5752 Sort by author (@code{gnus-summary-sort-by-author}).
5753 @item C-c C-s C-s
5754 @kindex C-c C-s C-s (Summary)
5755 @findex gnus-summary-sort-by-subject
5756 Sort by subject (@code{gnus-summary-sort-by-subject}).
5757 @item C-c C-s C-d
5758 @kindex C-c C-s C-d (Summary)
5759 @findex gnus-summary-sort-by-date
5760 Sort by date (@code{gnus-summary-sort-by-date}).
5761 @item C-c C-s C-i
5762 @kindex C-c C-s C-i (Summary)
5763 @findex gnus-summary-sort-by-score
5764 Sort by score (@code{gnus-summary-sort-by-score}).
5765 @end table
5766
5767 These functions will work both when you use threading and when you don't
5768 use threading.  In the latter case, all summary lines will be sorted,
5769 line by line.  In the former case, sorting will be done on a
5770 root-by-root basis, which might not be what you were looking for.  To
5771 toggle whether to use threading, type @kbd{T T} (@pxref{Thread
5772 Commands}).
5773
5774
5775 @node Finding the Parent
5776 @section Finding the Parent
5777 @cindex parent articles
5778 @cindex referring articles
5779
5780 @findex gnus-summary-refer-parent-article
5781 @kindex ^ (Summary)
5782 If you'd like to read the parent of the current article, and it is not
5783 displayed in the article buffer, you might still be able to.  That is,
5784 if the current group is fetched by @sc{nntp}, the parent hasn't expired
5785 and the @code{References} in the current article are not mangled, you
5786 can just press @kbd{^} or @kbd{A r}
5787 (@code{gnus-summary-refer-parent-article}).  If everything goes well,
5788 you'll get the parent.  If the parent is already displayed in the
5789 summary buffer, point will just move to this article.
5790
5791 @findex gnus-summary-refer-references
5792 @kindex A R (Summary)
5793 You can have Gnus fetch all articles mentioned in the @code{References}
5794 header of the article by pushing @kbd{A R}
5795 (@code{gnus-summary-refer-references}). 
5796
5797 @findex gnus-summary-refer-article
5798 @kindex M-^ (Summary)
5799 You can also ask the @sc{nntp} server for an arbitrary article, no
5800 matter what group it belongs to.  @kbd{M-^}
5801 (@code{gnus-summary-refer-article}) will ask you for a
5802 @code{Message-Id}, which is one of those long thingies that look
5803 something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You have to get
5804 it all exactly right.  No fuzzy searches, I'm afraid.
5805
5806 @vindex gnus-refer-article-method
5807 If the group you are reading is located on a backend that does not
5808 support fetching by @code{Message-Id} very well (like @code{nnspool}),
5809 you can set @code{gnus-refer-article-method} to an @sc{nntp} method.  It
5810 would, perhaps, be best if the @sc{nntp} server you consult is the same
5811 as the one that keeps the spool you are reading from updated, but that's
5812 not really necessary.
5813
5814 Most of the mail backends support fetching by @code{Message-ID}, but do
5815 not do a particularly excellent job of it.  That is, @code{nnmbox} and
5816 @code{nnbabyl} are able to locate articles from any groups, while
5817 @code{nnml} and @code{nnfolder} are only able to locate articles that
5818 have been posted to the current group.  (Anything else would be too time
5819 consuming.)  @code{nnmh} does not support this at all.
5820
5821
5822 @node Mail Group Commands
5823 @section Mail Group Commands
5824 @cindex mail group commands
5825
5826 Some commands only make sense in mail groups.  If these commands are
5827 illegal in the current group, they will raise a hell and let you know.
5828
5829 All these commands (except the expiry and edit commands) use the
5830 process/prefix convention (@pxref{Process/Prefix}).
5831
5832 @table @kbd
5833 @item B e
5834 @kindex B e (Summary)
5835 @findex gnus-summary-expire-articles
5836 Expire all expirable articles in the group
5837 (@code{gnus-summary-expire-articles}).
5838
5839 @item B M-C-e
5840 @kindex B M-C-e (Summary)
5841 @findex gnus-summary-expire-articles-now
5842 Expunge all the expirable articles in the group
5843 (@code{gnus-summary-expire-articles-now}). This means that @strong{all}
5844 articles that are eligeble for expiry in the current group will
5845 disappear forever into that big @file{/dev/null} in the sky.
5846
5847 @item B DEL
5848 @kindex B DEL (Summary)
5849 @findex gnus-summary-delete-articles
5850 Delete the mail article.  This is "delete" as in "delete it from your
5851 disk forever and ever, never to return again." Use with caution.
5852 (@code{gnus-summary-delete-article}).
5853
5854 @item B m
5855 @kindex B m (Summary)
5856 @cindex move mail
5857 @findex gnus-summary-move-article
5858 Move the article from one mail group to another
5859 (@code{gnus-summary-move-article}). 
5860
5861 @item B c
5862 @kindex B c (Summary)
5863 @cindex copy mail
5864 @findex gnus-summary-copy-article
5865 Copy the article from one group (mail group or not) to a mail group
5866 (@code{gnus-summary-copy-article}).
5867
5868 @item B i
5869 @kindex B i (Summary)
5870 @findex gnus-summary-import-article
5871 Import a random file into the current mail newsgroup
5872 (@code{gnus-summary-import-article}).  You will be prompted for a file
5873 name, a @code{From} header and a @code{Subject} header.
5874
5875 Something similar can be done by just starting to compose a mail
5876 message.  Instead of typing @kbd{C-c C-c} to mail it off, you can type
5877 @kbd{C-c C-p} instead.  This will put the message you have just created
5878 into the current mail group.
5879
5880 @item B r
5881 @kindex B r (Summary)
5882 @findex gnus-summary-respool-article
5883 Respool the mail article (@code{gnus-summary-move-article}).
5884
5885 @item B w
5886 @itemx e
5887 @kindex B w (Summary)
5888 @kindex e (Summary)
5889 @findex gnus-summary-edit-article
5890 @kindex C-c C-c (Article)
5891 Edit the current article (@code{gnus-summary-edit-article}).  To finish
5892 editing and make the changes permanent, type @kbd{C-c C-c}
5893 (@kbd{gnus-summary-edit-article-done}).
5894
5895 @item B q
5896 @kindex B q (Summary)
5897 @findex gnus-summary-fancy-query
5898 If you are using fancy splitting, this command will tell you where an
5899 article would go (@code{gnus-summary-fancy-query}). 
5900 @end table
5901
5902 @node Various Summary Stuff
5903 @section Various Summary Stuff
5904
5905 @menu
5906 * Group Information::                 Information oriented commands.
5907 * Searching for Articles::            Multiple article commands.
5908 * Really Various Summary Commands::   Those pesky non-conformant commands.
5909 @end menu
5910
5911 @vindex gnus-summary-prepare-hook
5912 @code{gnus-summary-prepare-hook} is called after the summary buffer has
5913 been generated.  You might use it to, for instance, highlight lines or
5914 modify the look of the buffer in some other ungodly manner.  I don't
5915 care.
5916
5917 @node Group Information
5918 @subsection Group Information
5919
5920 @table @kbd
5921 @item H f
5922 @kindex H f (Summary)
5923 @findex gnus-summary-fetch-faq
5924 @vindex gnus-group-faq-directory
5925 Try to fetch the FAQ (list of frequently asked questions) for the
5926 current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
5927 FAQ from @code{gnus-group-faq-directory}, which is usually a directory
5928 on a remote machine.  This variable can also be a list of directories.
5929 In that case, giving a prefix to this command will allow you to choose
5930 between the various sites.  @code{ange-ftp} probably will be used for
5931 fetching the file.
5932 @item H d
5933 @kindex H d (Summary)
5934 @findex gnus-summary-describe-group
5935 Give a brief description of the current group
5936 (@code{gnus-summary-describe-group}).  If given a prefix, force
5937 rereading the description from the server.
5938 @item H h
5939 @kindex H h (Summary)
5940 @findex gnus-summary-describe-briefly
5941 Give a very brief description of the most important summary keystrokes
5942 (@code{gnus-summary-describe-briefly}). 
5943 @item H i
5944 @kindex H i (Summary)
5945 @findex gnus-info-find-node
5946 Go to the Gnus info node (@code{gnus-info-find-node}).
5947 @end table
5948
5949 @node Searching for Articles
5950 @subsection Searching for Articles
5951
5952 @table @kbd
5953 @item M-s
5954 @kindex M-s (Summary)
5955 @findex gnus-summary-search-article-forward
5956 Search through all subsequent articles for a regexp
5957 (@code{gnus-summary-search-article-forward}). 
5958 @item M-r
5959 @kindex M-r (Summary)
5960 @findex gnus-summary-search-article-backward
5961 Search through all previous articles for a regexp
5962 (@code{gnus-summary-search-article-backward}). 
5963 @item &
5964 @kindex & (Summary)
5965 @findex gnus-summary-execute-command
5966 This command will prompt you for a header field, a regular expression to
5967 match on this field, and a command to be executed if the match is made
5968 (@code{gnus-summary-execute-command}).
5969 @item M-&
5970 @kindex M-& (Summary)
5971 @findex gnus-summary-universal-argument
5972 Perform any operation on all articles that have been marked with
5973 the process mark (@code{gnus-summary-universal-argument}).
5974 @end table
5975
5976 @node Really Various Summary Commands
5977 @subsection Really Various Summary Commands
5978
5979 @table @kbd
5980 @item A D
5981 @kindex A D (Summary)
5982 @findex gnus-summary-enter-digest-group
5983 If the current article is a digest, you might use this command to enter
5984 you into a group based on the current digest to ease reading
5985 (@code{gnus-summary-enter-digest-group}).
5986 @item C-t
5987 @kindex C-t (Summary)
5988 @findex gnus-summary-toggle-truncation
5989 Toggle truncation of summary lines (@code{gnus-summary-toggle-truncation}).
5990 @item =
5991 @kindex = (Summary)
5992 @findex gnus-summary-expand-window
5993 Expand the summary buffer window (@code{gnus-summary-expand-window}).
5994 If given a prefix, force an @code{article} window configuration. 
5995 @end table
5996
5997 @node The Article Buffer
5998 @chapter The Article Buffer
5999 @cindex article buffer
6000
6001 The articles are displayed in the article buffer, of which there is only
6002 one.  All the summary buffer share the same article buffer.
6003
6004 @menu
6005 * Hiding Headers::        Deciding what headers should be displayed.
6006 * Using Mime::            Pushing articles through @sc{mime} before reading them.
6007 * Customizing Articles::  Tailoring the look of the articles.
6008 * Article Keymap::        Keystrokes available in the article buffer
6009 * Misc Article::          Other stuff.
6010 @end menu
6011
6012 @node Hiding Headers
6013 @section Hiding Headers
6014 @cindex hiding headers
6015 @cindex deleting headers
6016
6017 The top section of each article is the @dfn{head}.  (The rest is the
6018 @dfn{body}, but you may have guessed that already.)
6019
6020 @vindex gnus-show-all-headers
6021 There is a lot of useful information in the head: the name of the person
6022 who wrote the article, the date it was written and the subject of the
6023 article.  That's well and nice, but there's also lots of information
6024 most people do not want to see - what systems the article has passed
6025 through before reaching you, the @code{Message-Id}, the
6026 @code{References}, etc. ad nauseum - and you'll probably want to get rid
6027 of some of those lines.  If you want to keep all those lines in the
6028 article buffer, you can set @code{gnus-show-all-headers} to @code{t}.
6029
6030 Gnus provides you with two variables for sifting headers:
6031
6032 @table @code
6033 @item gnus-visible-headers
6034 @vindex gnus-visible-headers
6035 If this variable is non-@code{nil}, it should be a regular expression
6036 that says what headers you wish to keep in the article buffer.  All
6037 headers that do not match this variable will be hidden.
6038
6039 For instance, if you only want to see the name of the person who wrote
6040 the article and the subject, you'd say:
6041
6042 @lisp
6043 (setq gnus-visible-headers "^From:\\|^Subject:")
6044 @end lisp
6045
6046 @item gnus-ignored-headers
6047 @vindex gnus-ignored-headers
6048 This variable is the reverse of @code{gnus-visible-headers}.  If this
6049 variable is set (and @code{gnus-visible-headers} is @code{nil}), it
6050 should be a regular expression that matches all lines that you want to
6051 hide.  All lines that do not match this variable will remain visible.
6052
6053 For instance, if you just want to get rid of the @code{References} line
6054 and the @code{Xref} line, you might say:
6055
6056 @lisp
6057 (setq gnus-ignored-headers "^References:\\|^Xref:")
6058 @end lisp
6059
6060 Note that if @code{gnus-visible-headers} is non-@code{nil}, this
6061 variable will have no effect.
6062 @end table
6063
6064 @vindex gnus-sorted-header-list
6065 Gnus can also sort the headers for you.  (It does this by default.)  You
6066 can control the sorting by setting the @code{gnus-sorted-header-list}
6067 variable.  It is a list of regular expressions that says in what order
6068 the headers are to be displayed.
6069
6070 For instance, if you want the name of the author of the article first,
6071 and then the subject, you might say something like:
6072
6073 @lisp
6074 (setq gnus-sorted-header-list '("^From:" "^Subject:"))
6075 @end lisp
6076
6077 Any headers that are to remain visible, but are not listed in this
6078 variable, will be displayed in random order after all the headers that
6079 are listed in this variable.
6080
6081 @node Using Mime
6082 @section Using Mime
6083 @cindex @sc{mime}
6084
6085 Mime is a standard for waving your hands through the air, aimlessly,
6086 while people stand around yawning.
6087
6088 @sc{mime}, however, is a standard for encoding your articles, aimlessly,
6089 while all newsreaders die of fear.
6090
6091 @sc{mime} may specify what character set the article uses, the encoding
6092 of the characters, and it also makes it possible to embed pictures and
6093 other naughty stuff in innocent-looking articles.
6094
6095 @vindex gnus-show-mime
6096 @vindex gnus-show-mime-method
6097 Gnus handles @sc{mime} by shoving the articles through
6098 @code{gnus-show-mime-method}, which is @code{metamail-buffer} by
6099 default.  If @code{gnus-strict-mime} is non-@code{nil}, the @sc{mime}
6100 method will only be used it there are @sc{mime} headers in the article.
6101 Set @code{gnus-show-mime} to @code{t} if you want to use @sc{mime} all
6102 the time; it might be best to just use the toggling functions from the
6103 summary buffer to avoid getting nasty surprises. (For instance, you
6104 enter the group @samp{alt.sing-a-long} and, before you know it,
6105 @sc{mime} has decoded the sound file in the article and some horrible
6106 sing-a-long song comes streaming out out your speakers, and you can't
6107 find the volume button, because there isn't one, and people are starting
6108 to look at you, and you try to stop the program, but you can't, and you
6109 can't find the program to control the volume, and everybody else in the
6110 room suddenly decides to look at you disdainfully, and you'll feel
6111 rather stupid.)
6112
6113 Any similarity to real events and people is purely coincidental.  Ahem.
6114
6115 @node Customizing Articles
6116 @section Customizing Articles
6117 @cindex article customization
6118
6119 @vindex gnus-article-display-hook
6120 The @code{gnus-article-display-hook} is called after the article has
6121 been inserted into the article buffer.  It is meant to handle all
6122 treatment of the article before it is displayed.  By default it contains
6123 @code{gnus-article-hide-headers}, which hides unwanted headers.
6124
6125 @findex gnus-article-subcite
6126 @findex gnus-article-hide-signature
6127 @findex gnus-article-hide-citation
6128 Other useful functions you might add to this hook is:
6129
6130 @table @code
6131 @item gnus-article-hide-citation
6132 Hide all cited text.
6133 @item gnus-article-hide-signature
6134 Umn, hides the signature.
6135 @item gnus-article-treat-overstrike
6136 Treat @samp{^H_} in a reasonable manner.
6137 @item gnus-article-maybe-highlight
6138 Do fancy article highlighting.
6139 @item gnus-article-remove-cr
6140 Removes trailing carriage returns.
6141 @item gnus-article-de-quoted-unreadable
6142 Do naive decoding of articles encoded with Quoted-Printable.
6143 @item gnus-article-display-x-face
6144 Displays any X-Face headers.
6145 @end table
6146
6147 You can, of course, write your own functions.  The functions are called
6148 from the article buffer, and you can do anything you like, pretty much.
6149 There is no information that you have to keep in the buffer - you can
6150 change everything.  However, you shouldn't delete any headers.  Instead
6151 make them invisible if you want to make them go away.
6152
6153 @node Article Keymap
6154 @section Article Keymap
6155
6156 @c Most of the keystrokes in the summary buffer can also be used in the
6157 @c article buffer.  They should behave as if you typed them in the summary
6158 @c buffer, which means that you don't actually have to have a summary
6159 @c buffer displayed while reading.  You can do it all from the article
6160 @c buffer.
6161
6162 A few additional keystrokes are available:
6163
6164 @table @kbd
6165 @item SPACE
6166 @kindex SPACE (Article)
6167 @findex gnus-article-next-page
6168 Scroll forwards one page (@code{gnus-article-next-page}).
6169 @item DEL
6170 @kindex DEL (Article)
6171 @findex gnus-article-prev-page
6172 Scroll backwards one page (@code{gnus-article-prev-page}).
6173 @item C-c ^
6174 @kindex C-c ^ (Article)
6175 @findex gnus-article-refer-article
6176 If point is in the neighborhood of a @code{Message-Id} and you press
6177 @kbd{r}, Gnus will try to get that article from the server
6178 (@code{gnus-article-refer-article}).
6179 @item C-c C-m
6180 @kindex C-c C-m (Article)
6181 @findex gnus-article-mail
6182 Send a reply to the address near point (@code{gnus-article-mail}).  If
6183 given a prefix, include the mail.
6184 @item s
6185 @kindex s (Article)
6186 @findex gnus-article-show-summary
6187 Reconfigure the buffers so that the summary buffer becomes visible
6188 (@code{gnus-article-show-summary}).
6189 @item ?
6190 @kindex ? (Article)
6191 @findex gnus-article-describe-briefly
6192 Give a very brief description of the available keystrokes
6193 (@code{gnus-article-describe-briefly}). 
6194 @end table
6195
6196 @node Misc Article
6197 @section Misc Article
6198
6199 @table @code
6200 @vindex gnus-article-prepare-hook
6201 @item gnus-article-prepare-hook
6202 This hook is called right after the article has been inserted into the
6203 article buffer.  It is mainly intended for functions that do something
6204 depending on the contents; it should probably not be used for changing
6205 the contents of the article buffer.
6206 @vindex gnus-article-display-hook
6207 @item gnus-article-display-hook
6208 This hook is called as the last thing when displaying an article, and is
6209 intended for modifying the contents of the buffer, doing highlights,
6210 hiding headers, and the like.
6211 @vindex gnus-article-mode-line-format
6212 @item gnus-article-mode-line-format
6213 This variable is a format string along the same lines as
6214 @code{gnus-summary-mode-line-format}.  It accepts exactly the same
6215 format specifications as that variable.
6216 @vindex gnus-break-pages
6217 @item gnus-break-pages
6218 Controls whether @dfn{page breaking} is to take place.  If this variable
6219 is non-@code{nil}, the articles will be divided into pages whenever a
6220 page delimiter appears in the article.  If this variable is @code{nil},
6221 paging will not be done.
6222 @item gnus-page-delimiter
6223 @vindex gnus-page-delimiter
6224 This is the delimiter mentioned above.  By default, it is @samp{^L}
6225 (form linefeed).
6226 @end table
6227
6228 @node The Server Buffer
6229 @chapter The Server Buffer
6230
6231 Traditionally, a @dfn{server} is a machine or a piece of software that
6232 one connects to, and then requests information from.  Gnus does not
6233 connect directly to any real servers, but does all transactions through
6234 one backend or other.  But that's just putting one layer more between
6235 the actual media and Gnus, so we might just as well say that each
6236 backend represents a virtual server.
6237
6238 For instance, the @code{nntp} backend may be used to connect to several
6239 different actual nntp servers, or, perhaps, to many different ports on
6240 the same actual nntp server.  You tell Gnus which backend to use, and
6241 what parameters to set by specifying a @dfn{select method}.  
6242
6243 These select methods specifications can sometimes become quite
6244 complicated - say, for instance, that you want to read from the nntp
6245 server @samp{news.funet.fi} on port number @samp{13}, which hangs if
6246 queried for @sc{nov} headers and has a buggy select.  Ahem.  Anyways, if
6247 you had to specify that for each group that used this server, that would
6248 be too much work, so Gnus offers a way of putting names to methods,
6249 which is what you do in the server buffer.
6250
6251 @menu
6252 * Server Buffer Format::   You can customize the look of this buffer.
6253 * Server Commands::        Commands to manipulate servers.
6254 * Example Methods::        Examples server specifications.
6255 * Servers & Methods::      You can use server names as select methods.
6256 @end menu
6257
6258 @node Server Buffer Format
6259 @section Server Buffer Format
6260 @cindex server buffer format
6261
6262 @vindex gnus-server-line-format
6263 You can change the look of the server buffer lines by changing the
6264 @code{gnus-server-line-format} variable.  This is a @code{format}-like
6265 variable, with some simple extensions:
6266
6267 @table @samp
6268 @item h 
6269 How the news is fetched - the backend name.
6270 @item n
6271 The name of this server.
6272 @item w
6273 Where the news is to be fetched from - the address.
6274 @end table
6275
6276 @node Server Commands
6277 @section Server Commands
6278 @cindex server commands
6279
6280 @table @kbd
6281 @item SPC
6282 Browse the current server (@code{gnus-server-read-server}).
6283 @item q
6284 Return to the group buffer (@code{gnus-server-exit}).
6285 @item l
6286 List all servers (@code{gnus-server-list-servers}).
6287 @item k
6288 Kill the current server (@code{gnus-server-kill-server}).
6289 @item y
6290 Yank the previously killed server (@code{gnus-server-yank-server}).
6291 @item c
6292 Copy the current server (@code{gnus-server-copy-server}).
6293 @item a
6294 Add a new server (@code{gnus-server-add-server}).
6295 @item e
6296 Edit a server (@code{gnus-server-edit-server}).
6297 @end table
6298
6299 @node Example Methods
6300 @section Example Methods
6301
6302 Most select methods are pretty simple and self-explanatory: 
6303
6304 @lisp
6305 (nntp "news.funet.fi")
6306 @end lisp
6307
6308 Reading directly from the spool is even simpler:
6309
6310 @lisp
6311 (nnspool "")
6312 @end lisp
6313
6314 As you can see, the first element in a select method is the name of the
6315 backend, and the second is the @dfn{address}, or @dfn{name}, if you
6316 will. 
6317
6318 After these two elements, there may be a random number of @var{(variable
6319 form)} pairs.
6320
6321 To go back to the first example - imagine that you want to read from
6322 port @code{15} from that machine.  This is what the select method should
6323 look like then:
6324
6325 @lisp
6326 (nntp "news.funet.fi" (nntp-port-number 15))
6327 @end lisp
6328
6329 You should read the documentation to each backend to find out what
6330 variables are relevant, but here's an @code{nnmh} example. 
6331
6332 @code{nnmh} is a mail backend that reads a spool-like structure.  Say
6333 you have two structures that you wish to access: One is your private
6334 mail spool, and the other is a public one.  Here's the possible spec for
6335 you private mail:
6336
6337 @lisp
6338 (nnmh "private" (nnmh-directory "~/private/mail/"))
6339 @end lisp
6340
6341 (This server is then called @samp{private}, but you may have guessed
6342 that. 
6343
6344 Here's the method for the public spool:
6345
6346 @lisp
6347 (nnmh "public" 
6348       (nnmh-directory "/usr/information/spool/") 
6349       (nnmh-get-new-mail nil))
6350 @end lisp
6351
6352 @node Servers & Methods
6353 @section Servers & Methods
6354
6355 Wherever you would normally use a select method
6356 (eg. @code{gnus-secondary-select-method}, in the group select method,
6357 when browsing a foreign server) you can use a virtual server name
6358 instead.  This could potentially save lots of typing.  And it's nice all
6359 over.
6360
6361
6362 @node Scoring
6363 @chapter Scoring
6364 @cindex scoring
6365
6366 Other people use @dfn{kill files}, but we here at Gnus Towers like
6367 scoring better than killing, so we'd rather switch than fight.  They do
6368 something completely different as well, so sit up straight and pay
6369 attention!
6370
6371 @vindex gnus-summary-mark-below
6372 All articles have a default score (@code{gnus-summary-default-score}).
6373 This score may be raised or lowered either interactively or by score
6374 files.  Articles that have a score lower than
6375 @code{gnus-summary-mark-below} are marked as read.
6376
6377 Gnus will read any @dfn{score files} that apply to the current group
6378 before generating the summary buffer.
6379
6380 There are several commands in the summary buffer that insert score
6381 entries based on the current article. You can, for instance, ask Gnus to
6382 lower or increase the score of all articles with a certain subject.
6383
6384 There are two sorts of scoring entries: Permanent and temporary.
6385 Temporary score entries are self-expiring entries.  Any entries that are
6386 temporary and have not been used for, say, a week, will be removed
6387 silently to help keep the sizes of the score files down.
6388
6389 @menu 
6390 * Summary Score Commands::   Adding score entries for the current group.
6391 * Group Score Commands::     General score commands.
6392 * Score Variables::          Customize your scoring.  (My, what terminology).
6393 * Score File Format::        What a score file may contain.
6394 * Score File Editing::       You can edit score files by hand as well.
6395 * Adaptive Scoring::         Big Sister Gnus *knows* what you read.
6396 * Scoring Tips::             How to score effectively.
6397 * Reverse Scoring::          That problem child of old is not problem.
6398 * Global Score Files::       Earth-spanning, ear-splitting score files.
6399 * Kill Files::               They are still here, but they can be ignored.
6400 @end menu
6401
6402 @node Summary Score Commands
6403 @section Summary Score Commands
6404 @cindex score commands
6405
6406 The score commands that alter score entries do not actually modify real
6407 score files.  That would be too inefficient.  Gnus maintains a cache of
6408 previously loaded score files, one of which is considered the
6409 @dfn{current score file alist}.  The score commands simply insert
6410 entries into this list, and upon group exit, this list is saved.
6411
6412 The current score file is by default the group's local score file, even
6413 if no such score file actually exists.  To insert score commands into
6414 some other score file (eg. @file{all.SCORE}), you must first make this
6415 score file the current one.
6416
6417 General score commands that don't actually change the score file:
6418
6419 @table @kbd
6420 @item V s
6421 @kindex V s (Summary)
6422 @findex gnus-summary-set-score
6423 Set the score of the current article (@code{gnus-summary-set-score}).  
6424 @item V S
6425 @kindex V S (Summary)
6426 @findex gnus-summary-current-score
6427 Display the score of the current article
6428 (@code{gnus-summary-current-score}).   
6429 @item V t
6430 @kindex V t (Summary)
6431 @findex gnus-score-find-trace
6432 Display all score rules that have been used on the current article
6433 (@code{gnus-score-find-trace}).   
6434 @item V a
6435 @kindex V a (Summary)
6436 @findex gnus-summary-score-entry
6437 Add a new score entry, and allow specifying all elements 
6438 (@code{gnus-summary-score-entry}).
6439 @item V c
6440 @kindex V c (Summary)
6441 @findex gnus-score-change-score-file
6442 Make a different score file the current
6443 (@code{gnus-score-change-score-file}). 
6444 @item V e
6445 @kindex V e (Summary)
6446 @findex gnus-score-edit-alist
6447 Edit the current score file (@code{gnus-score-edit-alist}).  You will be
6448 popped into a @code{gnus-score-mode} buffer (@pxref{Score File
6449 Editing}).
6450 @item V f
6451 @kindex V f (Summary)
6452 @findex gnus-score-edit-file
6453 Edit a score file and make this score file the current one
6454 (@code{gnus-score-edit-file}).
6455 @item I C-i
6456 @kindex I C-i (Summary)
6457 @findex gnus-summary-raise-score
6458 Increase the score of the current article
6459 (@code{gnus-summary-raise-score}).
6460 @item L C-l
6461 @kindex L C-l (Summary)
6462 @findex gnus-summary-lower-score
6463 Lower the score of the current article
6464 (@code{gnus-summary-lower-score}). 
6465 @end table
6466
6467 The rest of these commands modify the local score file.
6468
6469 @table @kbd
6470 @item V m
6471 @kindex V m (Summary)
6472 @findex gnus-score-set-mark-below
6473 Prompt for a score, and mark all articles with a score below this as
6474 read (@code{gnus-score-set-mark-below}).
6475 @item V E
6476 @kindex V E (Summary)
6477 @findex gnus-score-set-expunge-below
6478 Expunge all articles with a score below the default score (or the
6479 numeric prefix) (@code{gnus-score-set-expunge-below}).
6480 @end table
6481
6482 The keystrokes for actually making score entries follow a very regular
6483 pattern, so there's no need to list all the commands.  (Hundreds of
6484 them.)  
6485
6486 @enumerate
6487 @item
6488 The first key is either @kbd{I} (upper case i) for increasing the score
6489 or @kbd{L} for lowering the score. 
6490 @item
6491 The second key says what header you want to score on.  The following
6492 keys are available:
6493 @table @kbd
6494 @item a
6495 Score on the author name.
6496 @item s
6497 Score on the subject line.
6498 @item x
6499 Score on the Xref line - i.e., the cross-posting line.
6500 @item t
6501 Score on thread - the References line.
6502 @item d
6503 Score on the date.
6504 @item l
6505 Score on the number of lines.
6506 @item i
6507 Score on the Message-ID.
6508 @item f
6509 Score on followups.
6510 @item b
6511 Score on the body.
6512 @item h
6513 Score on the head.
6514 @end table
6515
6516 @item
6517 The third key is the match type.  Which match types are legal depends on
6518 what headers you are scoring on.
6519
6520 @table @code
6521 @item strings 
6522
6523 @table @kbd
6524 @item e
6525 Exact matching.
6526 @item s
6527 Substring matching.
6528 @item f
6529 Fuzzy matching.
6530 @item r
6531 Regexp matching
6532 @end table
6533
6534 @item date
6535 @table @kbd
6536 @item b
6537 Before date.
6538 @item a
6539 At date.
6540 @item n
6541 This date.
6542 @end table
6543
6544 @item number
6545 @table @kbd
6546 @item <
6547 Less than number.
6548 @item =
6549 Equal to number.
6550 @item >
6551 Greater than number.
6552 @end table
6553 @end table
6554
6555 @item 
6556 The fourth and final key says whether this is a temporary (i.e., expiring)
6557 score entry, or a permanent (i.e., non-expiring) score entry, or whether
6558 it is to be done immediately, without adding to the score file.
6559 @table @kbd
6560 @item t
6561 Temporary score entry.
6562 @item p
6563 Permanent score entry.
6564 @item i
6565 Immediately scoring.
6566 @end table
6567
6568 @end enumerate
6569
6570 So, let's say you want to increase the score on the current author with
6571 exact matching permanently: @kbd{I a e p}.  If you want to lower the
6572 score based on the subject line, using substring matching, and make a
6573 temporary score entry: @kbd{L s s t}.  Pretty easy.
6574
6575 To make things a bit more complicated, there are shortcuts.  If you use
6576 a capital letter on either the second or third keys, Gnus will use
6577 defaults for the remaining one or two keystrokes.  The defaults are
6578 "substring" and "temporary".  So @kbd{I A} is the same as @kbd{I a s t},
6579 and @kbd{I a R} is the same as @kbd{I a r t}.
6580
6581 @vindex gnus-score-mimic-keymap
6582 The @code{gnus-score-mimic-keymap} says whether these commands will
6583 pretend they are keymaps or not.
6584
6585
6586 @node Group Score Commands
6587 @section Group Score Commands
6588 @cindex group score commands
6589
6590 There aren't many of these as yet, I'm afraid.
6591
6592 @table @kbd
6593
6594 @item W f
6595 @kindex W f (Group)
6596 @findex gnus-score-flush-cache
6597 Gnus maintains a cache of score alists to avoid having to reload them
6598 all the time.  This command will flush the cache
6599 (@code{gnus-score-flush-cache}). 
6600
6601 @end table
6602
6603
6604 @node Score Variables
6605 @section Score Variables
6606 @cindex score variables
6607
6608 @table @code
6609 @item gnus-use-scoring
6610 @vindex gnus-use-scoring
6611 If @code{nil}, Gnus will not check for score files, and will not, in
6612 general, do any score-related work.
6613 @item gnus-kill-killed
6614 @vindex gnus-kill-killed
6615 If this variable is @code{nil}, Gnus will never apply score files to
6616 articles that have already been through the kill process.  While this
6617 may save you lots of time, it also means that if you apply a kill file
6618 to a group, and then change the kill file and want to run it over you
6619 group again to kill more articles, it won't work.  You have to set this
6620 variable to @code{t} to do that.
6621 @item gnus-kill-files-directory
6622 @vindex gnus-kill-files-directory
6623 All kill and score files will be stored in this directory, which is
6624 initialized from the @samp{SAVEDIR} environment variable by default.
6625 @item gnus-score-file-suffix
6626 @vindex gnus-score-file-suffix
6627 Suffix to add to the group name to arrive at the score file name
6628 (@samp{SCORE} by default.)
6629 @item gnus-score-interactive-default-score
6630 @vindex gnus-score-interactive-default-score
6631 Score used by all the interactive raise/lower commands to raise/lower
6632 score with.  Default is 1000, which may seem excessive, but this is to
6633 ensure that the adaptive scoring scheme gets enough room to play with.
6634 We don't want the small changes from the adaptive scoring to overwrite
6635 manually entered data.
6636 @item gnus-summary-default-score
6637 @vindex gnus-summary-default-score
6638 Default score of an article, which is 0 by default.
6639 @item gnus-score-over-mark
6640 @vindex gnus-score-over-mark
6641 Mark (in the third column) used for articles with a score over the
6642 default.  Default is @samp{+}.
6643 @item gnus-score-below-mark
6644 @vindex gnus-score-below-mark
6645 Mark (in the third column) used for articles with a score below the
6646 default.  Default is @samp{-}.
6647 @item gnus-score-find-score-files-function
6648 @vindex gnus-score-find-score-files-function
6649 Function used to find score files for the current group.  This function
6650 is called with the name of the group as the argument. 
6651
6652 Predefined functions available are:
6653 @table @code
6654
6655 @item gnus-score-find-single
6656 @findex gnus-score-find-single
6657 Only apply the group's own score file.
6658
6659 @item gnus-score-find-bnews
6660 @findex gnus-score-find-bnews
6661 Apply all score files that match, using bnews syntax.  For instance, if
6662 the current group is @samp{gnu.emacs.gnus}, @samp{all.emacs.all.SCORE},
6663 @samp{not.alt.all.SCORE} and @samp{gnu.all.SCORE} would all apply.  In
6664 short, the instances of @samp{all} in the score file names are
6665 translated into @samp{.*}, and then a regexp match is done.
6666
6667 If @code{gnus-use-long-file-name} is non-@code{nil}, this won't work
6668 very will. It will find stuff like @file{gnu/all/SCORE}, but will not
6669 find files like @file{not/gnu/all/SCORE}. 
6670
6671 @item gnus-score-find-hierarchical
6672 @findex gnus-score-find-hierarchical
6673 Apply all score files from all the parent groups.
6674 @end table
6675 This variable can also be a list of functions.  In that case, all these
6676 functions will be called, and all the returned lists of score files will
6677 be applied.  These functions can also return lists of score alists
6678 directly.  In that case, the functions that return these non-file score
6679 alists should probably be placed before the "real" score file functions,
6680 to ensure that the last score file returned is the local score file.
6681 Phu. 
6682 @item gnus-score-expiry-days
6683 @vindex gnus-score-expiry-days
6684 This variable says how many days should pass before an unused score file
6685 entry is expired.  The default is 7.
6686 @end table
6687
6688 @node Score File Format
6689 @section Score File Format
6690 @cindex score file format
6691
6692 A score file is an @code{emacs-lisp} file that normally contains just a
6693 single form.  Casual users are not expected to edit these files;
6694 everything can be changed from the summary buffer.
6695
6696 Anyway, if you'd like to dig into it yourself, here's an example:
6697
6698 @lisp
6699 (("from"
6700   ("Lars Ingebrigtsen" -10000)
6701   ("Per Abrahamsen")
6702   ("larsi\\|lmi" -50000 nil R))
6703  ("subject"
6704   ("Ding is Badd" nil 728373))
6705  ("xref"
6706   ("alt.politics" -1000 728372 s))
6707  ("lines"
6708   (2 -100 nil <))
6709  (mark 0)
6710  (expunge -1000)
6711  (mark-and-expunge -10)
6712  (read-only nil)
6713  (orphan -10)
6714  (adapt t)
6715  (files "/hom/larsi/News/gnu.SCORE")
6716  (local (gnus-newsgroup-auto-expire t)
6717         (gnus-summary-make-false-root 'empty))
6718  (eval (ding)))
6719 @end lisp
6720
6721 This example demonstrates absolutely everything about a score file. 
6722
6723 Even though this looks much like lisp code, nothing here is actually
6724 @code{eval}ed.  The lisp reader is used to read this form, though, so it
6725 has to be legal syntactically, if not semantically.
6726
6727 Six keys are supported by this alist:
6728
6729 @table @code
6730 @item STRING
6731 If the key is a string, it is the name of the header to perform the
6732 match on.  Scoring can only be performed on these eight headers:
6733 @samp{From}, @samp{Subject}, @samp{References}, @samp{Message-ID},
6734 @samp{Xref}, @samp{Lines}, @samp{Chars} and @samp{Date}.  In addition to
6735 these headers, there are three strings to tell Gnus to fetch the entire
6736 article and do the match on larger parts of the article: @samp{Body}
6737 will perform the match on the body of the article, @samp{Head} will
6738 perform the match on the head of the article, and @samp{All} will
6739 perform the match on the entire article.  Note that using any of these
6740 last three keys will slow down group entry @emph{considerably}.  
6741
6742 Following this key is a random number of score entries, where each score
6743 entry has one to four elements.
6744 @enumerate
6745 @item 
6746 The first element is the @dfn{match element}.  On most headers this will
6747 be a string, but on the Lines and Chars headers, this must be an
6748 integer. 
6749 @item 
6750 If the second element is present, it should be a number - the @dfn{score
6751 element}.  This number should be an integer in the neginf to posinf
6752 interval.  This number is added to the score of the article if the match
6753 is successful.  If this element is not present, the
6754 @code{gnus-score-interactive-default-score} number will be used instead.
6755 @item 
6756 If the third element is present, it should be a number - the @dfn{date
6757 element}.  This date says when the last time this score entry matched,
6758 which provides a mechanism for expiring the score entries.  It this
6759 element is not present, the score entry is permanent.  The date is
6760 represented by the number of days since December 31, 1 ce.
6761 @item 
6762 If the fourth element is present, it should be a symbol - the @dfn{type
6763 element}.  This element specifies what function should be used to see
6764 whether this score entry matches the article.  What match types that can
6765 be used depends on what header you wish to perform the match on.
6766 @table @dfn
6767 @item From, Subject, References, Xref, Message-ID
6768 For most header types, there are the @code{r} and @code{R} (regexp) as
6769 well as @code{s} and @code{S} (substring) types and @code{e} and
6770 @code{E} (exact match) types.  If this element is not present, Gnus will
6771 assume that substring matching should be used.  @code{R} and @code{S}
6772 differ from the other two in that the matches will be done in a
6773 case-sensitive manner.  All these one-letter types are really just
6774 abbreviations for the @code{regexp}, @code{string} and @code{exact}
6775 types, which you can use instead, if you feel like.
6776 @item Lines, Chars
6777 These two headers use different match types: @code{<}, @code{>},
6778 @code{=}, @code{>=} and @code{<=}.
6779 @item Date
6780 For the Date header we have three match types: @code{before}, @code{at}
6781 and @code{after}.  I can't really imagine this ever being useful, but,
6782 like, it would feel kinda silly not to provide this function.  Just in
6783 case.  You never know.  Better safe than sorry.  Once burnt, twice shy.
6784 Don't judge a book by its cover.  Never not have sex on a first date.
6785 @item Head, Body, All
6786 These three match keys use the same match types as the @code{From} (etc)
6787 header uses.
6788 @item Followup
6789 This match key will add a score entry on all articles that followup to
6790 some author.  Uses the same match types as the @code{From} header uses.
6791 @end table
6792 @end enumerate
6793
6794 @item mark
6795 The value of this entry should be a number.  Any articles with a score
6796 lower than this number will be marked as read.
6797 @item expunge
6798 The value of this entry should be a number.  Any articles with a score
6799 lower than this number will be removed from the summary buffer.
6800 @item mark-and-expunge
6801 The value of this entry should be a number.  Any articles with a score
6802 lower than this number will be marked as read and removed from the
6803 summary buffer.
6804 @item files
6805 The value of this entry should be any number of file names.  These files
6806 are assumed to be score files as well, and will be loaded the same way
6807 this one was.
6808 @item exclude-files
6809 The clue of this entry should be any number of files.  This files will
6810 not be loaded, even though they would normally be so, for some reason or
6811 other. 
6812 @item eval
6813 The value of this entry will be @code{eval}el.  This element will be
6814 ignored when handling global score files. 
6815 @item read-only
6816 Read-only score files will not be updated or saved.  Global score files
6817 should feature this atom (@pxref{Global Score Files}).
6818 @item orphan
6819 The value of this entry should be a number.  Articles that do not have
6820 parents will get this number added to their scores.
6821 @item adapt
6822 This entry controls the adaptive scoring.  If it is @code{t}, the
6823 default adaptive scoring rules will be used.  If it is @code{ignore}, no
6824 adaptive scoring will be performed on this group.  If it is a list, this
6825 list will be used as the adaptive scoring rules.  If it isn't present,
6826 or is something other than @code{t} or @code{ignore}, the default
6827 adaptive scoring rules will be used.  If you want to use adaptive
6828 scoring on most groups, you'd set @code{gnus-use-adaptive-scoring} to
6829 @code{t}, and insert an @code{(adapt ignore)} in the groups where you do
6830 not want adaptive scoring.  If you only want adaptive scoring in a few
6831 groups, you'd set @code{gnus-use-adaptive-scoring} to @code{nil}, and
6832 insert @code{(adapt t)} in the score files of the groups where you want
6833 it. 
6834 @item local
6835 @cindex local variables
6836 The value of this entry should be a list of @code{(VAR VALUE)} pairs.
6837 Each @var{var} will be made buffer-local to the current summary buffer,
6838 and set to the value specified. This is a convenient, if somewhat
6839 strange, way of setting variables in some groups if you don't like hooks
6840 much.
6841 @end table
6842
6843 @node Score File Editing
6844 @section Score File Editing
6845
6846 You normally enter all scoring commands from the summary buffer, but you
6847 might feel the urge to edit them by hand as well, so we've supplied you
6848 with a mode for that.  
6849
6850 It's simply a slightly customized @code{emacs-lisp} mode, with these
6851 additional commands:
6852
6853 @table @kbd
6854 @item C-c C-c
6855 @kindex C-c C-c (Score)
6856 @findex gnus-score-edit-done
6857 Save the changes you have made and return to the summary buffer
6858 (@code{gnus-score-edit-done}). 
6859 @item C-c C-d
6860 @kindex C-c C-d (Score)
6861 @findex gnus-score-edit-insert-date
6862 Insert the current date in numerical format
6863 (@code{gnus-score-edit-insert-date}).  This is really the day number, if
6864 you were wondering.
6865 @end table
6866
6867 @node Adaptive Scoring
6868 @section Adaptive Scoring
6869 @cindex adaptive scoring
6870
6871 If all this scoring is getting you down, Gnus has a way of making it all
6872 happen automatically - as if by magic.  Or rather, as if by artificial
6873 stupidity, to be precise.
6874
6875 @vindex gnus-use-adaptive-scoring
6876 When you read an article, or mark an article as read, or kill an
6877 article, you leave marks behind.  On exit from the group, Gnus can sniff
6878 these marks and add score elements depending on what marks it finds.
6879 You turn on this ability by setting @code{gnus-use-adaptive-scoring} to
6880 @code{t}. 
6881
6882 @vindex gnus-default-adaptive-score-alist
6883 To give you complete control over the scoring process, you can customize
6884 the @code{gnus-default-adaptive-score-alist} variable.  By default, it
6885 looks something like this:
6886
6887 @lisp
6888 (defvar gnus-default-adaptive-score-alist
6889   '((gnus-unread-mark)
6890     (gnus-ticked-mark (from 4))
6891     (gnus-dormant-mark (from 5))
6892     (gnus-del-mark (from -4) (subject -1))
6893     (gnus-read-mark (from 4) (subject 2))
6894     (gnus-expirable-mark (from -1) (subject -1))
6895     (gnus-killed-mark (from -1) (subject -3))
6896     (gnus-kill-file-mark)
6897     (gnus-catchup-mark (from -1) (subject -1))))
6898 @end lisp
6899
6900 As you see, each element in this alist has a mark as a key (either a
6901 variable name or a "real" mark - a character).  Following this key is a
6902 random number of header/score pairs.  
6903
6904 To take @code{gnus-del-mark} as an example - this alist says that all
6905 articles that have that mark (i.e., are marked with @samp{D}) will have a
6906 score entry added to lower based on the @code{From} header by -4, and
6907 lowered by @code{Subject} by -1.  Change this to fit your prejudices. 
6908
6909 If you use this scheme, you should set @code{mark-below} to something
6910 small - like -300, perhaps, to avoid having small random changes result
6911 in articles getting marked as read.
6912
6913 After using adaptive scoring for a week or so, Gnus should start to
6914 become properly trained and enhance the authors you like best, and kill
6915 the authors you like least, without you having to say so explicitly. 
6916
6917 You can control what groups the adaptive scoring is to be performed on
6918 by using the score files (@pxref{Score File Format}).  This will also
6919 let you use different rules in different groups.
6920
6921 @vindex gnus-adaptive-file-suffix
6922 The adaptive score entries will be put into a file where the name is the
6923 group name with @code{gnus-adaptive-file-suffix} appended.
6924
6925 @vindex gnus-score-exact-adapt-limit
6926 When doing adaptive scoring, substring or fuzzy matching would probably
6927 give you the best results in most cases. However, if the header one
6928 matches is short, the possibility for false positives is great, so if
6929 the length of the match is less than
6930 @code{gnus-score-exact-adapt-limit}, exact matching will be used. If
6931 this variable is @code{nil}, exact matching will always be used to avoid
6932 this problem.
6933
6934 @node Scoring Tips
6935 @section Scoring Tips
6936 @cindex scoring tips
6937
6938 @table @dfn
6939 @item Crossposts
6940 If you want to lower the score of crossposts, the line to match on is
6941 the @code{Xref} header.
6942 @lisp
6943 ("xref" (" talk.politics.misc:" -1000))
6944 @end lisp
6945 @item Multiple crossposts
6946 If you want to lower the score of articles that have been crossposted to
6947 more than, say, 3 groups:
6948 @lisp
6949 ("xref" (" +[^ ]+:[0-9]+ +[^ ]+:[0-9]+ +[^ ]+:[0-9]+" -1000 nil r))
6950 @end lisp
6951 @item Matching on the body
6952 This is generally not a very good idea - it takes a very long time.
6953 Gnus actually has to fetch each individual article from the server.  But
6954 you might want to anyway, I guess.  Even though there are three match
6955 keys (@code{Head}, @code{Body} and @code{All}), you should choose one
6956 and stick with it in each score file.  If you use any two, each article
6957 will be fetched @emph{twice}.  If you want to match a bit on the
6958 @code{Head} and a bit on the @code{Body}, just use @code{All} for all
6959 the matches.  
6960 @item Marking as read
6961 You will probably want to mark articles that has a score below a certain
6962 number as read.  This is most easily achieved by putting the following
6963 in your @file{all.SCORE} file:
6964 @lisp
6965 ((mark -100))
6966 @end lisp
6967 You may also consider doing something similar with @code{expunge}.  
6968
6969 @item Negated charater classes
6970 If you say stuff like @code{[^abcd]*}, you may get unexpected results.
6971 That will match newlines, which might lead to, well, The Unknown.  Say
6972 @code{[^abcd\n]*} instead.
6973 @end table
6974
6975 @node Reverse Scoring
6976 @section Reverse Scoring
6977 @cindex reverse scoring
6978
6979 If you want to keep just articles that have @samp{Sex with Emacs} in the
6980 subject header, and expunge all other articles, you could put something
6981 like this in your score file:
6982
6983 @lisp
6984 (("subject"
6985   ("Sex with Emacs" 2))
6986  (mark 1)
6987  (expunge 1))
6988 @end lisp
6989
6990 So, you raise all articles that match @samp{Sex with Emacs} and mark the
6991 rest as read, and expunge them to boot.
6992
6993 @node Global Score Files
6994 @section Global Score Files
6995 @cindex global score files
6996
6997 Sure, other newsreaders have "global kill files".  These are usually
6998 nothing more than a single kill file that applies to all groups, stored
6999 in the user's home directory.  Bah!  Puny, weak newsreaders!
7000
7001 What I'm talking about here are Global Score Files.  Score files from
7002 all over the world, from users everywhere, uniting all nations in one
7003 big, happy score file union!  Ange-score!  New and untested!
7004
7005 @vindex gnus-global-score-files
7006 All you have to do to use other people's score files is to set the
7007 @code{gnus-global-score-files} variable.  One entry for each score file,
7008 or each score file directory.  Gnus will decide by itself what score
7009 files are applicable to which group.
7010
7011 Say you want to use all score files in the
7012 @file{/ftp@@ftp.some-where:/pub/score} directory and the single score
7013 file @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE}:
7014
7015 @lisp
7016 (setq gnus-global-score-files
7017       '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE"
7018         "/ftp@@ftp.some-where:/pub/score/"))
7019 @end lisp
7020
7021 @findex gnus-score-search-global-directories
7022 Simple, eh?  Directory names must end with a @samp{/}.  These
7023 directories are typically scanned only once during each Gnus session.
7024 If you feel the need to manually re-scan the remote directories, you can
7025 use the @code{gnus-score-search-global-directories} command.
7026
7027 Note that, at present, using this option will slow down group entry
7028 somewhat.  (That is - a lot.)
7029
7030 If you want to start maintaining score files for other people to use,
7031 just put your score file up for anonymous ftp and announce it to the
7032 world.  Become a retro-moderator!  Participate in the retro-moderator
7033 wars sure to ensue, where retro-moderators battle it out for the
7034 sympathy of the people, luring them to use their score files on false
7035 premises!  Yay!  The net is saved!
7036
7037 Here are some tips for the would-be retro-moderator, off the top of my
7038 head: 
7039
7040 @itemize @bullet
7041 @item 
7042 Articles that are heavily crossposted are probably junk. 
7043 @item
7044 To lower a single inappropriate article, lower by @code{Message-Id}.
7045 @item
7046 Particularly brilliant authors can be raised on a permanent basis. 
7047 @item
7048 Authors that repeatedly post off-charter for the group can safely be
7049 lowered out of existence.
7050 @item
7051 Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest
7052 articles completely.
7053 @item 
7054 Use expiring score entries to keep the size of the file down.  You
7055 should probably have a long expiry period, though, as some sites keep
7056 old articles for a long time.
7057 @end itemize
7058
7059 ... I wonder whether other newsreaders will support global score files
7060 in the future.  @emph{Snicker}.  Yup, any day now, newsreaders like Blue
7061 Wave, xrn and 1stReader are bound to implement scoring.  Should we start
7062 holding our breath yet?
7063
7064
7065 @node Kill Files
7066 @section Kill Files
7067 @cindex kill files
7068
7069 Gnus still supports those pesky old kill files.  In fact, the kill file
7070 entries can now be expiring, which is something I wrote before Per
7071 thought of doing score files, so I've left the code in there.
7072
7073 In short, kill processing is a lot slower (and I do mean @emph{a lot})
7074 than score processing, so it might be a good idea to rewrite your kill
7075 files into score files.
7076
7077 Anyway, a kill file is a normal @code{emacs-lisp} file.  You can put any
7078 forms into this file, which means that you can use kill files as some
7079 sort of primitive hook function to be run on group entry, even though
7080 that isn't a very good idea.
7081
7082 XCNormal kill files look like this:
7083
7084 @lisp
7085 (gnus-kill "From" "Lars Ingebrigtsen")
7086 (gnus-kill "Subject" "ding")
7087 (gnus-expunge "X")
7088 @end lisp
7089
7090 This will mark every article written by me as read, and remove them from
7091 the summary buffer.  Very useful, you'll agree.
7092
7093 Other programs use a totally different kill file syntax.  If Gnus
7094 encounters what looks like a @code{rn} kill file, it will take a stab at
7095 interpreting it. 
7096
7097 Two functions for editing a GNUS kill file:
7098
7099 @table @kbd
7100 @item M-k
7101 @kindex M-k (Summary)
7102 @findex gnus-summary-edit-local-kill
7103 Edit this group's kill file (@code{gnus-summary-edit-local-kill}).
7104
7105 @item M-K
7106 @kindex M-K (Summary)
7107 @findex gnus-summary-edit-global-kill
7108 Edit the general kill file (@code{gnus-summary-edit-global-kill}).
7109 @end table
7110
7111 @vindex gnus-kill-file-name
7112 A kill file for the group @samp{soc.motss} is normally called
7113 @file{soc.motss.KILL}.  The suffix appended to the group name to get
7114 this file name is detailed by the @code{gnus-kill-file-name} variable.
7115 The "global" kill file (not in the score file sense of "global", of
7116 course) is called just @file{KILL}.
7117
7118 @vindex gnus-kill-save-kill-file
7119 If @code{gnus-kill-save-kill-file} is non-@code{nil}, Gnus will save the
7120 kill file after processing, which is necessary if you use expiring
7121 kills. 
7122
7123
7124
7125
7126 @node Various
7127 @chapter Various
7128
7129 @menu
7130 * Interactive::                Making Gnus ask you many questions.
7131 * Windows Configuration::      Configuring the Gnus buffer windows.
7132 * Buttons::                    Get tendonitis in ten easy steps!
7133 * Various Various::            Things that are really various.
7134 @end menu
7135
7136 @node Interactive
7137 @section Interactive
7138 @cindex interaction
7139
7140 @table @code
7141 @item gnus-novice-user
7142 @vindex gnus-novice-user
7143 If this variable is non-@code{nil}, you are either a newcomer to the
7144 World of Usenet, or you are very cautious, which is a nice thing to be,
7145 really.  You will be given questions of the type "Are you sure you want
7146 to do this?" before doing anything dangerous.
7147 @item gnus-expert-user
7148 @vindex gnus-expert-user
7149 If this variable is non-@code{nil}, you will never ever be asked any
7150 questions by Gnus.  It will simply assume you know what your are doing,
7151 no matter how strange.
7152 @item gnus-interactive-catchup
7153 @vindex gnus-interactive-catchup
7154 Require confirmation before catching up a group if non-@code{nil}.
7155 @item gnus-interactive-post
7156 @vindex gnus-interactive-post
7157 If non-@code{nil}, the user will be prompted for a group name when
7158 posting an article.
7159 @item gnus-interactive-exit
7160 @vindex gnus-interactive-exit
7161 Require confirmation before exiting Gnus.
7162 @end table
7163
7164 @node Windows Configuration
7165 @section Windows Configuration
7166 @cindex windows configuration
7167
7168 No, there's nothing here about X, so be quiet.
7169
7170 @table @code
7171 @item gnus-use-full-window
7172 @vindex gnus-use-full-window
7173 If non-@code{nil}, Gnus will delete all other windows and occupy the
7174 entire Emacs screen by itself.  It is @code{t} by default.
7175
7176 @item gnus-buffer-configuration
7177 @vindex gnus-buffer-configuration
7178 This variable describes how much space each Gnus buffer should be given.
7179 Here's an excerpt of this variable:
7180
7181 @lisp
7182 ((group ([group 1.0 point] 
7183          (if gnus-carpal [group-carpal 4])))
7184  (article ([summary 0.25 point] 
7185            [article 1.0])))
7186 @end lisp
7187
7188 This is an alist.  The @dfn{key} is a symbol that names some action or
7189 other.  For instance, when displaying the group buffer, the window
7190 configuration function will use @code{group} as the key.  A full list of
7191 possible names is listed below.
7192
7193 The @dfn{value} is a @dfn{rule} that says how much space each buffer
7194 should occupy.  To take the @code{article} rule as an example -
7195
7196 @lisp
7197 (article ([summary 0.25 point] 
7198           [article 1.0]))
7199 @end lisp
7200
7201 This rule says that the summary buffer should occupy 25% of the screen,
7202 and that it is placed over the article buffer.  As you may have noticed,
7203 100% + 25% is actually 125% (yup, I saw y'all reaching for that
7204 calculator there).  However, the special number @code{1.0} is used to
7205 signal that this buffer should soak up all the rest of the space
7206 avaiable after the rest of the buffers have taken whatever they need.  
7207 There should be only one buffer with the @code{1.0} size spec.
7208
7209 Point will be put in the buffer that has the optional third element
7210 @code{point}. 
7211
7212 Here's a more complicated example:
7213
7214 @lisp
7215 (article ([group 4]
7216           [summary 0.25 point]
7217           (if gnus-carpal [summary-carpal 4])
7218           [article 1.0])
7219 @end lisp
7220
7221 If the size spec is an integer instead of a floating point number, 
7222 then that number will be used to say how many lines a buffer should
7223 occupy, not a percentage.
7224
7225 If an element is a list instead of a vector, this list will be
7226 @code{eval}ed.  If the result is non-@code{nil}, it will be used.  This
7227 means that there will be three buffers if @code{gnus-carpal} is
7228 @code{nil}, and four buffers if @code{gnus-carpal} is non-@code{nil}. 
7229
7230 Not complicated enough for you?  Well, try this on for size:
7231
7232 @lisp
7233 (article ([group 1.0]
7234           [gnus-carpal 4])
7235          ((horizontal 0.5)
7236           [summary 0.25 point]
7237           [summary-carpal 4]
7238           [article 1.0]))
7239 @end lisp
7240
7241 Whoops.  Two buffers with the mystery 100% tag.  And what's that
7242 @code{horizontal} thingie?  
7243
7244 If the first element in one of the rule lists is a list with
7245 @code{horizontal} as the first element, Gnus will split the window
7246 horizontally, giving you two windows side-by-side.  Inside each of these
7247 strips you may carry on all you like in the normal fashion.  The number
7248 following @code{horizontal} says what percentage of the screen is to be
7249 given to this strip.  
7250
7251 For each horizontal split, there @emph{must} be one element that has the
7252 100% tag.  The splitting is never accurate, and this buffer will eat any
7253 leftover lines from the splits. 
7254
7255 Here's a list of all possible keys:
7256
7257 @code{group}, @code{summary}, @code{article}, @code{server},
7258 @code{browse}, @code{group-mail}, @code{summary-mail},
7259 @code{summary-reply}, @code{info}, @code{summary-faq},
7260 @code{edit-group}, @code{edit-server}, @code{reply}, @code{reply-yank},
7261 @code{followup}, @code{followup-yank}, @code{edit-score}.  
7262
7263 @findex gnus-add-configuration
7264 Since this variable is so long and complicated, there's a function you
7265 can use to ease changing the config of a single setting:
7266 @code{gnus-add-configuration}.  If, for instance, you want to change the
7267 @code{article} setting, you could say:
7268
7269 @lisp
7270 (gnus-add-configuration
7271  '(article ([group 4]
7272             [summary .25 point] 
7273             [article 1.0])))
7274 @end lisp
7275
7276 @end table
7277
7278 @node Buttons
7279 @section Buttons
7280 @cindex buttons
7281 @cindex mouse
7282 @cindex click
7283
7284 Those new-fangled @dfn{mouse} contraptions is very popular with the
7285 young, hep kids who don't want to learn the proper way to do things
7286 these days.  Why, I remember way back in the summer of '89, when I was
7287 using Emacs on a Tops 20 system.  Three hundred users on one single
7288 machine, and every user was running Simula compilers.  Bah!
7289
7290 Right.
7291
7292 @vindex gnus-carpal
7293 Well, you can make Gnus display bufferfuls of buttons you can click to
7294 do anything by setting @code{gnus-carpal} to @code{t}.  Pretty simple,
7295 really.  Tell the chiropractor I sent you.
7296
7297
7298 @table @code
7299 @item gnus-carpal-mode-hook
7300 @vindex gnus-carpal-mode-hook
7301 Hook run in all carpal mode buffers.
7302 @item gnus-carpal-button-face
7303 @vindex gnus-carpal-button-face
7304 Face used on buttons.
7305 @item gnus-carpal-group-buffer-buttons
7306 @vindex gnus-carpal-group-buffer-buttons
7307 Buttons in the group buffer.
7308 @item gnus-carpal-summary-buffer-buttons
7309 @vindex gnus-carpal-summary-buffer-buttons
7310 Buttons in the summary buffer.
7311 @item gnus-carpal-server-buffer-buttons
7312 @vindex gnus-carpal-server-buffer-buttons
7313 Buttons in the server buffer.
7314 @item gnus-carpal-browse-buffer-buttons
7315 @vindex gnus-carpal-browse-buffer-buttons
7316 Buttons in the browse buffer.
7317 @end table
7318
7319 All the @code{buttons} variables are lists.  The elements in these list
7320 is either a cons cell where the car contains a text to be displayed and
7321 the cdr contains a function symbol, or a simple string.
7322
7323 @node Various Various
7324 @section Various Various
7325 @cindex mode lines
7326 @cindex highlights
7327
7328 @table @code
7329 @item gnus-verbose
7330 @vindex gnus-verbose
7331 This variable is an integer between zero and ten.  The higher the value,
7332 the more messages will be displayed.  If this variable is zero, Gnus
7333 will never flash any messages, if it is seven, most important messages
7334 will be shown, and if it is ten, Gnus won't ever shut up, but will flash
7335 so many messages it will make your head swim.
7336 @item gnus-updated-mode-lines
7337 @vindex gnus-updated-mode-lines
7338 This is a list of buffers that should keep their mode lines updated.
7339 The list may contain the symbols @code{group}, @code{article} and
7340 @code{summary}.  If the corresponding symbol is present, Gnus will keep
7341 that mode line updated with information that may be pertinent.  If this
7342 variable is @code{nil}, screen refresh may be quicker.
7343
7344 @cindex display-time
7345 @item gnus-mode-non-string-length
7346 @vindex gnus-mode-non-string-length
7347 By default, Gnus displays information on the current article in the mode
7348 lines of the summary and article buffers.  The information Gnus wishes
7349 to display (eg. the subject of the article) is often longer than the
7350 mode lines, and therefore have to be cut off at some point.  This
7351 variable says how long the other elements on the line is (i.e., the
7352 non-info part).  If you put additional elements on the mode line (eg. a
7353 clock), you should modify this variable:
7354 @c Hook written by Keinonen Kari <kk85613@cs.tut.fi>.
7355 @lisp
7356 (add-hook 'display-time-hook
7357           (lambda ()
7358             (setq gnus-mode-non-string-length
7359                   (+ 21 (length display-time-string)))))
7360 @end lisp
7361
7362 @item gnus-visual
7363 @vindex gnus-visual
7364 @cindex visual
7365 @cindex highlighting
7366 @cindex menus
7367
7368 If @code{nil}, Gnus won't attempt to create menus or use fancy colors
7369 or fonts.  This will also inhibit loading the @file{gnus-visual.el}
7370 file.
7371
7372 This variable can also be a list of visual properties that are enabled.
7373 The following elements are legal, and are all set by default:
7374
7375 @table @code
7376
7377 @item summary-highlight
7378 Perform various highlighting in the summary buffer.
7379
7380 @item article-highlight
7381 Perform various highlighting in the article buffer.
7382
7383 @item highlight
7384 Turn on highlighting in all buffers.
7385
7386 @item group-menu
7387 Create menus in the group buffer.
7388
7389 @item summary-menu
7390 Create menus in the summary buffer.
7391
7392 @item article-menu
7393 Create menus in the article buffer.
7394
7395 @item browse-menu
7396 Create menus in the browse buffer.
7397
7398 @item server-menu
7399 Create menus in the server buffer.
7400
7401 @item menu
7402 Create menus in all buffers.
7403
7404 @end table
7405
7406 So if you only want highlighting in the article buffer and menus in all
7407 buffers, you couls say something like:
7408
7409 @lisp
7410 (setq gnus-visual '(article-highlight menu))
7411 @end lisp
7412
7413 If you want only highlighting and no menus whatsoever, you'd say:
7414
7415 @lisp
7416 (setq gnus-visual '(highlight))
7417 @end lisp
7418
7419 @item gnus-mouse-face
7420 @vindex gnus-mouse-face
7421 This is the face (i.e., font) used for mouse highlighting in Gnus.  No
7422 mouse highlights will be done if @code{gnus-visual} is @code{nil}.
7423
7424 @item gnus-display-type
7425 @vindex gnus-display-type
7426 This variable is symbol indicating the display Emacs is running under.
7427 The symbol should be one of @code{color}, @code{grayscale} or
7428 @code{mono}. If Gnus guesses this display attribute wrongly, either set
7429 this variable in your @file{~/.emacs} or set the resource
7430 @code{Emacs.displayType} in your @file{~/.Xdefaults}.
7431
7432 @item gnus-background-mode 
7433 @vindex gnus-background-mode 
7434 This is a symbol indicating the Emacs background brightness. The symbol
7435 should be one of @code{light} or @code{dark}. If Gnus guesses this
7436 frame attribute wrongly, either set this variable in your @file{~/.emacs} or
7437 set the resource @code{Emacs.backgroundMode} in your @file{~/.Xdefaults}. 
7438 `gnus-display-type'.
7439
7440 @item nnheader-max-head-length
7441 @vindex nnheader-max-head-length
7442 When the backends read straight heads of articles, they all try to read
7443 as little as possible.  This variable (default @code{4096}) specifies
7444 the absolute max length the backends will try to read before giving up
7445 on finding a separator line between the head and the body.  If this
7446 variable is @code{nil}, there is no upper read bound.  If it is
7447 @code{t}, the backends won't try to read the articles piece by piece,
7448 but read the entire articles.  This makes sense with some versions of
7449 @code{ange-ftp}. 
7450
7451
7452 @end table
7453
7454 @node Customization
7455 @chapter Customization
7456 @cindex general customization
7457
7458 All variables are properly documented elsewhere in this manual.  This
7459 section is designed to give general pointers on how to customize Gnus
7460 for some quite common situations.
7461
7462 @menu
7463 * Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
7464 * Slow Terminal Connection::  You run a remote Emacs.
7465 * Little Disk Space::         You feel that having large setup files is icky.
7466 * Slow Machine::              You feel like buying a faster machine.
7467 @end menu
7468
7469 @node Slow/Expensive Connection
7470 @section Slow/Expensive @sc{nntp} Connection
7471
7472 If you run Emacs on a machine locally, and get your news from a machine
7473 over some very thin strings, you want to cut down on the amount of data
7474 Gnus has to get from the @sc{nntp} server.
7475
7476 @table @code
7477 @item gnus-read-active-file
7478 Set this to @code{nil}, which will inhibit Gnus from requesting the
7479 entire active file from the server.  This file is often v.  large.  You
7480 also have to set @code{gnus-check-new-news} and
7481 @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus
7482 doesn't suddenly decide to fetch the active file anyway.
7483 @item gnus-nov-is-evil
7484 This one has to be @code{nil}.  If not, grabbing article headers from
7485 the @sc{nntp} server will not be very fast.  Not all @sc{nntp} servers
7486 support @sc{xover}; Gnus will detect this by itself.
7487 @end table
7488
7489 @node Slow Terminal Connection
7490 @section Slow Terminal Connection
7491
7492 Let's say you use your home computer for dialing up the system that
7493 runs Emacs and Gnus.  If your modem is slow, you want to reduce the
7494 amount of data that is sent over the wires as much as possible.
7495
7496 @table @code
7497 @item gnus-auto-center-summary
7498 Set this to @code{nil} to inhibit Gnus from recentering the summary
7499 buffer all the time.
7500 @item gnus-visible-headers
7501 Cut down on the headers that are included in the articles to the
7502 minimum.  You can, in fact, make do without them altogether - most of the
7503 useful data is in the summary buffer, anyway.  Set this variable to
7504 @samp{"^NEVVVVER"} or @samp{"From:"}, or whatever you feel you need.
7505 @item gnus-article-display-hook
7506 Set this hook to all the available hiding commands:
7507 @lisp
7508 (setq gnus-article-display-hook 
7509       '(gnus-article-hide-headers gnus-article-hide-signature
7510         gnus-article-hide-citation))
7511 @end lisp
7512 @item gnus-use-full-window
7513 By setting this to @code{nil}, you can make all the windows smaller.
7514 While this doesn't really cut down much generally, it means that you
7515 have to see smaller portions of articles before deciding that you didn't
7516 want to read them anyway.
7517 @item gnus-thread-hide-subtree
7518 If this is non-@code{nil}, all threads in the summary buffer will be
7519 hidden initially.
7520 @item gnus-updated-mode-lines
7521 If this is @code{nil}, Gnus will not put information in the buffer mode
7522 lines, which might save some time.
7523 @end table
7524
7525 @node Little Disk Space
7526 @section Little Disk Space
7527
7528 The startup files can get rather large, so you may want to cut their
7529 sizes a bit if you are running out of space.
7530
7531 @table @code
7532 @item gnus-save-newsrc-file
7533 If this is @code{nil}, Gnus will never save @file{.newsrc} - it will
7534 only save @file{.newsrc.eld}.  This means that you will not be able to
7535 use any other newsreaders than Gnus.
7536 @item gnus-save-killed-list
7537 If this is @code{nil}, Gnus will not save the list of dead groups.  You
7538 should also set @code{gnus-check-new-newsgroups} to @code{ask-server}
7539 and @code{gnus-check-bogus-newsgroups} to @code{nil} if you set this
7540 variable to @code{nil}.
7541 @end table
7542
7543 @node Slow Machine
7544 @section Slow Machine
7545
7546 If you have a slow machine, or are just really impatient, there are a
7547 few things you can do to make Gnus run faster.
7548
7549 Set@code{gnus-check-new-newsgroups} and
7550 @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster.
7551
7552 Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
7553 @code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
7554 summary buffer faster.
7555
7556 Set @code{gnus-article-display-hook} to @code{nil} to make article
7557 processing a bit faster.
7558
7559 @node Troubleshooting
7560 @chapter Troubleshooting
7561 @cindex troubleshooting
7562
7563 Gnus works @emph{so} well straight out of the box - I can't imagine any
7564 problems, really.
7565
7566 Ahem.
7567
7568 @enumerate
7569 @item
7570 Make sure your computer is switched on.
7571 @item
7572 Make sure that you really load the current Gnus version.  If you have
7573 been running @sc{gnus}, you need to exit Emacs and start it up again before
7574 Gnus will work.
7575 @item
7576 Try doing an @kbd{M-x gnus-version}.  If you get something that looks
7577 like @samp{Gnus v5.46; nntp 4.0} you have the right files loaded.  If,
7578 on the other hand, you get something like @samp{NNTP 3.x} or @samp{nntp
7579 flee}, you have some old @file{.el} files lying around.  Delete these.
7580 @item
7581 Read the help group (@kbd{M h} in the group buffer) for a FAQ and a
7582 how-to. 
7583 @end enumerate
7584
7585 If all else fails, report the problem as a bug,
7586
7587 @cindex bugs
7588 @cindex reporting bugs
7589
7590 @kindex M-x gnus-bug
7591 @findex gnus-bug
7592 If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}
7593 command. @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
7594 me the backtrace. I will fix bugs, but I can only fix them if you send
7595 me a precise description as to how to reproduce the bug.
7596
7597 @c If you just need help, you are better off asking on
7598 @c @samp{gnu.emacs.gnus}.  
7599
7600 @node The End
7601 @chapter The End
7602
7603 Well, that's the manual - you can get on with your life now.  Keep in
7604 touch.  Say hello to your cats from me.  
7605
7606 My @strong{ghod} - I just can't stand goodbyes.  Sniffle.
7607
7608 Ol' Chuck Reznikoff said it pretty well, so I leave the floor to him:
7609
7610 @quotation
7611 @strong{Te Deum}
7612 @sp 1
7613 Not because of victories @*
7614 I sing,@*
7615 having none,@*
7616 but for the common sunshine,@*
7617 the breeze,@*
7618 the largess of the spring.
7619 @sp 1
7620 Not for victory@*
7621 but for the day's work done@*
7622 as well as I was able;@*
7623 not for a seat upon the dais@*
7624 but at the common table.@*
7625 @end quotation
7626
7627 @node Appendix
7628 @chapter A Programmer's Guide to Gnus
7629
7630 It is my hope that other people will figure out smart stuff that Gnus
7631 can do, and that other people will write those smart things as well.  To
7632 facilitate that I thought it would be a good idea to describe the inner
7633 workings of Gnus. And some of the not-so-inner workings, while I'm at
7634 it.
7635
7636 You can never expect the internals of a program not to change, but I
7637 will be defining (in some details) the interface between Gnus and its
7638 backends (this is written in stone), the format of the score files
7639 (ditto), data structures (some are less likely to change than others)
7640 and general method of operations.
7641
7642 @menu 
7643 * Backend Interface::        How Gnus communicates with the servers.
7644 * Score File Syntax::        A BNF definition of the score file standard.
7645 * Headers::                  How Gnus stores headers internally.
7646 * Ranges::                   A handy format for storing mucho numbers.
7647 * Group Info::               The group info format.
7648 @end menu
7649
7650
7651 @node Backend Interface
7652 @section Backend Interface
7653
7654 Gnus doesn't know anything about nntp, spools, mail or virtual groups.
7655 It only knows how to talk to @dfn{virtual servers}.  A virtual server is
7656 a @dfn{backend} and some @dfn{backend variables}.  As examples of the
7657 first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}.  As
7658 examples of the latter we have @code{nntp-port-number} and
7659 @code{nnmbox-directory}. 
7660
7661 When Gnus asks for information from a backend -- say @code{nntp} -- on
7662 something, it will normally include a virtual server name in the
7663 function parameters.  (If not, the backend should use the "current"
7664 virtual server.)  For instance, @code{nntp-request-list} takes a virtual
7665 server as its only (optional) parameter.  If this virtual server hasn't
7666 been opened, the function should fail.
7667
7668 Note that a virtual server name has no relation to some physical server
7669 name.  Take this example:
7670
7671 @lisp
7672 (nntp "odd-one" 
7673       (nntp-address "ifi.uio.no") 
7674       (nntp-port-number 4324))
7675 @end lisp
7676
7677 Here the virtual server name is @samp{"odd-one"} while the name of
7678 the physical server is @samp{"ifi.uio.no"}. 
7679
7680 The backends should be able to switch between several virtual servers.
7681 The standard backends implement this by keeping an alist of virtual
7682 server environments that it pulls down/pushes up when needed.  
7683
7684 There are two groups of interface functions: @dfn{required functions},
7685 which must be present, and @dfn{optional functions}, which Gnus will
7686 always check whether are present before attempting to call.
7687
7688 All these functions are expected to return data in the buffer
7689 @code{nntp-server-buffer} (@samp{" *nntpd*"}), which is somewhat
7690 unfortunately named, but we'll have to live with it.  When I talk about
7691 "resulting data", I always refer to the data in that buffer.  When I
7692 talk about "return value", I talk about the function value returned by
7693 the function call.
7694
7695 Some backends could be said to be @dfn{server-forming} backends, and
7696 some might be said to not be.  The latter are backends that generally
7697 only operate on one group at a time, and have no concept of "server" --
7698 they have a group, and they deliver info on that group and nothing more.
7699
7700 In the examples and definitions I will refer to the imaginary backend
7701 @code{nnchoke}. 
7702
7703 @cindex nnchoke
7704
7705 @menu
7706 * Required Backend Functions::        Functions that must be implemented.
7707 * Optional Backend Functions::        Functions that need not be implemented.
7708 @end menu
7709
7710
7711 @node Required Backend Functions
7712 @subsection Required Backend Functions
7713
7714 @table @code
7715
7716 @item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)
7717
7718 @var{articles} is either a range of article numbers or a list of
7719 @code{Message-ID}s.  Current backends do not fully support either - only
7720 sequences (lists) of article numbers, and most backends do not support
7721 retrieval of @code{Message-ID}s.  But they should try for both. 
7722
7723 The result data should either be HEADs or NOV lines, and the result
7724 value should either be @code{headers} or @code{nov} to reflect this.
7725 This might later be expanded to @code{various}, which will be a mixture
7726 of HEADs and NOV lines, but this is currently not supported by Gnus.  
7727
7728 If @var{fetch-old} is non-@code{nil} it says to try to fetch "extra"
7729 headers, in some meaning of the word.  This is generally done by
7730 fetching (at most) @var{fetch-old} extra headers less than the smallest
7731 article number in @code{articles}, and fill in the gaps as well.  The
7732 presence of this parameter can be ignored if the backend finds it
7733 cumbersome to follow the request.  If this is non-@code{nil} and not a
7734 number, do maximum fetches.
7735
7736 Here's an example HEAD:
7737
7738 @example
7739 221 1056 Article retrieved.
7740 Path: ifi.uio.no!sturles
7741 From: sturles@@ifi.uio.no (Sturle Sunde)
7742 Newsgroups: ifi.discussion
7743 Subject: Re: Something very droll
7744 Date: 27 Oct 1994 14:02:57 +0100
7745 Organization: Dept. of Informatics, University of Oslo, Norway
7746 Lines: 26
7747 Message-ID: <38o8e1$a0o@@holmenkollen.ifi.uio.no>
7748 References: <38jdmq$4qu@@visbur.ifi.uio.no>
7749 NNTP-Posting-Host: holmenkollen.ifi.uio.no
7750 .
7751 @end example
7752
7753 So a @code{headers} return value would imply that there's a number of
7754 these in the data buffer.
7755
7756 Here's a BNF definition of such a buffer:
7757
7758 @example
7759 headers        = *head
7760 head           = error / valid-head
7761 error-message  = [ "4" / "5" ] 2number " " <error message> eol
7762 valid-head     = valid-message *header "." eol
7763 valid-message  = "221 " <number> " Article retrieved." eol
7764 header         = <text> eol
7765 @end example
7766
7767 If the return value is @code{nov}, the data buffer should contain
7768 @dfn{network overview database} lines.  These are basically fields
7769 separated by tabs. 
7770
7771 @example
7772 nov-buffer = *nov-line
7773 nov-line   = 8*9 [ field <TAB> ] eol
7774 field      = <text except TAB>
7775 @end example
7776
7777 For a closer explanation what should be in those fields,
7778 @xref{Headers}. 
7779
7780
7781 @item (nnchoke-open-server SERVER &optional DEFINITIONS)
7782
7783 @var{server} is here the virtual server name.  @var{definitions} is a
7784 list of @code{(VARIABLE VALUE)} pairs that defines this virtual server. 
7785
7786 If the server can't be opened, no error should be signaled.  The backend
7787 may then choose to refuse further attempts at connecting to this
7788 server.  In fact, it should do so. 
7789
7790 If the server is opened already, this function should return a
7791 non-@code{nil} value.  There should be no data returned.
7792
7793
7794 @item (nnchoke-close-server &optional SERVER)
7795
7796 Close connection to @var{server} and free all resources connected
7797 to it. 
7798
7799 There should be no data returned.
7800
7801
7802 @item (nnchoke-request-close)
7803
7804 Close connection to all servers and free all resources that the backend
7805 have reserved.  All buffers that have been created by that backend
7806 should be killed.  (Not the @code{nntp-server-buffer}, though.)
7807
7808 There should be no data returned. 
7809
7810
7811 @item (nnchoke-server-opened &optional SERVER)
7812
7813 This function should return whether @var{server} is opened, and that the
7814 connection to it is still alive.  This function should under no
7815 circumstances attempt to reconnect to a server that is has lost
7816 connection to. 
7817
7818 There should be no data returned.
7819
7820
7821 @item (nnchoke-status-message &optional SERVER)
7822
7823 This function should return the last error message from @var{server}. 
7824
7825 There should be no data returned.
7826
7827
7828 @item (nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER)
7829
7830 The result data from this function should be the article specified by
7831 @var{article}.  This might either be a @code{Message-ID} or a number.
7832 It is optional whether to implement retrieval by @code{Message-ID}, but
7833 it would be nice if that were possible.
7834
7835 If @var{to-buffer} is non-@code{nil}, the result data should be returned
7836 in this buffer instead of the normal data buffer.  This is to make it
7837 possible to avoid copying large amounts of data from one buffer to
7838 another, and Gnus mainly request articles to be inserted directly into
7839 its article buffer.
7840
7841
7842 @item (nnchoke-open-group GROUP &optional SERVER)
7843
7844 Make @var{group} the current group.  
7845
7846 There should be no data returned by this function.
7847
7848
7849 @item (nnchoke-request-group GROUP &optional SERVER)
7850
7851 Get data on @var{group}.  This function also has the side effect of
7852 making @var{group} the current group. 
7853
7854 Here's an example of some result data and a definition of the same:
7855
7856 @example
7857 211 56 1000 1059 ifi.discussion
7858 @end example
7859
7860 The first number is the status, which should be @samp{211}.  Next is the
7861 total number of articles in the group, the lowest article number, the
7862 highest article number, and finally the group name.  Note that the total
7863 number of articles may be less than one might think while just
7864 considering the highest and lowest article numbers, but some articles
7865 may have been cancelled.  Gnus just discards the total-number, so
7866 whether one should take the bother to generate it properly (if that is a
7867 problem) is left as an excercise to the reader.
7868
7869 @example
7870 group-status = [ error / info ] eol
7871 error        = [ "4" / "5" ] 2<number> " " <Error message>
7872 info         = "211 " 3* [ <number> " " ] <string>
7873 @end example
7874
7875
7876 @item (nnchoke-close-group GROUP &optional SERVER)
7877
7878 Close @var{group} and free any resources connected to it.  This will be
7879 a no-op on most backends. 
7880
7881 There should be no data returned.
7882
7883
7884 @item (nnchoke-request-list &optional SERVER)
7885
7886 Return a list of all groups available on @var{server}.  And that means
7887 @emph{all}. 
7888
7889 Here's an example from a server that only carries two groups:
7890
7891 @example
7892 ifi.test 0000002200 0000002000 y
7893 ifi.discussion 3324 3300 n
7894 @end example
7895
7896 On each line we have a group name, then the highest article number in
7897 that group, the lowest article number, and finally a flag.
7898
7899 @example
7900 active-file = *active-line
7901 active-line = name " " <number> " " <number> " " flags eol
7902 name        = <string>
7903 flags       = "n" / "y" / "m" / "x" / "j" / "=" name
7904 @end example
7905
7906 The flag says whether the group is read-only (@samp{n}), is moderated
7907 (@samp{m}), is dead (@samp{x}), is aliased to some other group
7908 (@samp{=other-group} or none of the above (@samp{y}). 
7909
7910
7911 @item (nnchoke-request-post &optional SERVER)
7912
7913 This function should post the current buffer.  It might return whether
7914 the posting was successful or not, but that's not required.  If, for
7915 instance, the posting is done asynchronously, it has generally not been
7916 completed by the time this function concludes.  In that case, this
7917 function should set up some kind of sentinel to beep the user loud and
7918 clear if the posting could not be completed.
7919
7920 There should be no result data from this function. 
7921
7922
7923 @item (nnchoke-request-post-buffer POST GROUP SUBJECT HEADER ARTICLE-BUFFER INFO FOLLOW-TO RESPECT-POSTER)
7924
7925 This function should return a buffer suitable for composing an article
7926 to be posted by @code{nnchoke-request-post}.  If @var{post} is
7927 non-@code{nil}, this is not a followup, but a totally new article.
7928 @var{group} is the name of the group to be posted to.  @var{subject} is
7929 the subject of the message.  @var{article-buffer} is the buffer being
7930 followed up, if that is the case.  @var{info} is the group info.
7931 @var{follow-to} is the group that one is supposed to re-direct the
7932 article to.  If @var{respect-poster} is non-@code{nil}, the special
7933 @samp{"poster"} value of a @code{Followup-To} header is to be respected.
7934
7935 There should be no result data returned.
7936
7937 @end table
7938
7939 @node Optional Backend Functions
7940 @subsection Optional Backend Functions
7941
7942 @table @code
7943
7944 @item (nnchoke-retrieve-groups GROUPS &optional SERVER)
7945
7946 @var{groups} is a list of groups, and this function should request data
7947 on all those groups.  How it does it is of no concern to Gnus, but it
7948 should attempt to do this in a speedy fashion.
7949
7950 The return value of this function can be either @code{active} or
7951 @code{group}, which says what the format of the result data is.  The
7952 former is in the same format as the data from
7953 @code{nnchoke-request-list}, while the latter is a buffer full of lines
7954 in the same format as @code{nnchoke-request-group} gives.
7955
7956 @example
7957 group-buffer = *active-line / *group-status
7958 @end example
7959
7960
7961 @item (nnchoke-request-update-info GROUP INFO &optional SERVER)
7962
7963 A Gnus group info (@pxref{Group Info}) is handed to the backend for
7964 alterations.  This comes in handy if the backend really carries all the
7965 information (as is the case with virtual an imap groups).  This function
7966 may alter the info in any manner it sees fit, and should return the
7967 (altered) group info.  This function may alter the group info
7968 destructively, so no copying is needed before boogying. 
7969
7970 There should be no result data from this function.
7971
7972
7973 @item (nnchoke-request-scan &optional GROUP SERVER)
7974
7975 This function may be called at any time (by Gnus or anything else) to
7976 request that the backend check for incoming articles, in one way or
7977 another.  A mail backend will typically read the spool file or query the
7978 POP server when this function is invoked.  The @var{group} doesn't have
7979 to be heeded -- if the backend decides that it is too much work just
7980 scanning for a single group, it may do a total scan of all groups.  It
7981 would be nice, however, to keep things local if that's practical.
7982
7983 There should be no result data from this function.
7984
7985
7986 @item (nnchoke-request-asynchronous GROUP &optional SERVER ARTICLES)
7987
7988 This is a request to fetch articles asynchronously later.
7989 @var{articles} is an alist of @var{(article-number line-number)}.  One
7990 would generally expect that if one later fetches article number 4, for
7991 instance, some sort of asynchronous fetching of the articles after 4
7992 (which might be 5, 6, 7 or 11, 3, 909 depending on the order in that
7993 alist) would be fetched asynchronouly, but that is left up to the
7994 backend.  Gnus doesn't care.
7995
7996 There should be no result data from this function.
7997  
7998
7999 @item (nnchoke-request-group-description GROUP &optional SERVER)
8000
8001 The result data from this function should be a description of
8002 @var{group}. 
8003
8004 @example
8005 description-line = name <TAB> description eol
8006 name             = <string>
8007 description      = <text>
8008 @end example
8009
8010 @item (nnchoke-request-list-newsgroups &optional SERVER)
8011
8012 The result data from this function should be the description of all
8013 groups available on the server.
8014
8015 @example
8016 description-buffer = *description-line
8017 @end example
8018
8019
8020 @item (nnchoke-request-newgroups DATE &optional SERVER)
8021
8022 The result data from this function should be all groups that were
8023 created after @samp{date}, which is in normal human-readable date
8024 format.  The data should be in the active buffer format.
8025
8026
8027 @item (nnchoke-request-create-groups GROUP &optional SERVER)
8028
8029 This function should create an empty group with name @var{group}.  
8030
8031 There should be no return data.
8032
8033
8034 @item (nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE)
8035
8036 This function should run the expiry process on all articles in the
8037 @var{articles} range (which is currently a simple list of article
8038 numbers.)  It is left up to the backend to decide how old articles
8039 should be before they are removed by this function.  If @var{force} is
8040 non-@code{nil}, all @var{articles} should be deleted, no matter how new
8041 they are. 
8042
8043 This function should return a list of articles that it did not/was not
8044 able to delete.
8045
8046 There should be no result data returned.
8047
8048
8049 @item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM
8050 &optional LAST)
8051
8052 This function should move @var{article} (which is a number) from
8053 @var{group} by calling @var{accept-form}.  
8054
8055 This function should ready the article in question for moving by
8056 removing any header lines it has added to the article, and generally
8057 should "tidy up" the article.  Then it should @code{eval}
8058 @var{accept-form} in the buffer where the "tidy" article is.  This will
8059 do the actual copying.  If this @code{eval} returns a non-@code{nil}
8060 value, the article should be removed.
8061
8062 If @var{last} is @code{nil}, that means that there is a high likelihood
8063 that there will be more requests issued shortly, so that allows some
8064 optimizations. 
8065
8066 There should be no data returned. 
8067
8068
8069 @item (nnchoke-request-accept-article GROUP &optional LAST)
8070
8071 This function takes the current buffer and inserts it into @var{group}.
8072 If @var{last} in @code{nil}, that means that there will be more calls to
8073 this function in short order.
8074
8075 There should be no data returned.
8076
8077
8078 @item (nnchoke-request-replace-article ARTICLE GROUP BUFFER)
8079
8080 This function should remove @var{article} (which is a number) from
8081 @var{group} and insert @var{buffer} there instead.
8082
8083 There should be no data returned.
8084
8085 @end table
8086
8087
8088 @node Score File Syntax
8089 @section Score File Syntax
8090
8091 Score files are meant to be easily parsable, but yet extremely
8092 mallable.   It was decided that something that had the same read syntax
8093 as an Emacs Lisp list would fit that spec.
8094
8095 Here's a typical score file:
8096
8097 @lisp
8098 (("summary"
8099   ("win95" -10000 nil s)
8100   ("Gnus"))
8101  ("from"
8102   ("Lars" -1000))
8103  (mark -100))
8104 @end lisp
8105
8106 BNF definition of a score file:
8107
8108 @example
8109 score-file       = "" / "(" *element ")"
8110 element          = rule / atom
8111 rule             = string-rule / number-rule / date-rule
8112 string-rule      = "(" quote string-header quote space *string-match ")"
8113 number-rule      = "(" quote number-header quote space *number-match ")"
8114 date-rule        = "(" quote date-header quote space *date-match ")"
8115 quote            = <ascii 34>
8116 string-header    = "subject" / "from" / "references" / "message-id" / 
8117                    "xref" / "body" / "head" / "all" / "followup"
8118 number-header    = "lines" / "chars"
8119 date-header      = "date"
8120 string-match     = "(" quote <string> quote [ "" / [ space score [ "" / 
8121                    space date [ "" / [ space string-match-t ] ] ] ] ] ")"
8122 score            = "nil" / <integer>
8123 date             = "nil" / <natural number>
8124 string-match-t   = "nil" / "s" / "substring" / "S" / "Substring" / 
8125                    "r" / "regex" / "R" / "Regex" /
8126                    "e" / "exact" / "E" / "Exact" /
8127                    "f" / "fuzzy" / "F" / "Fuzzy"
8128 number-match     = "(" <integer> [ "" / [ space score [ "" / 
8129                    space date [ "" / [ space number-match-t ] ] ] ] ] ")"
8130 number-match-t   = "nil" / "=" / "<" / ">" / ">=" / "<="
8131 date-match       = "(" quote <string> quote [ "" / [ space score [ "" / 
8132                    space date [ "" / [ space date-match-t ] ] ] ] ")"
8133 date-match-t     = "nil" / "at" / "before" / "after"
8134 atom             = "(" [ required-atom / optional-atom ] ")"
8135 required-atom    = mark / expunge / mark-and-expunge / files /
8136                    exclude-files / read-only / touched
8137 optional-atom    = adapt / local / eval 
8138 mark             = "mark" space nil-or-number
8139 nil-or-t         = "nil" / <integer>
8140 expunge          = "expunge" space nil-or-number
8141 mark-and-expunge = "mark-and-expunge" space nil-or-number
8142 files            = "files" *[ space <string> ]
8143 exclude-files    = "exclude-files" *[ space <string> ]
8144 read-only        = "read-only" [ space "nil" / space "t" ]
8145 adapt            = "adapt" [ space "nil" / space "t" / space adapt-rule ]
8146 adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
8147 local            = "local" *[ space "(" <string> space <form> ")" ]
8148 eval             = "eval" space <form>
8149 space            = *[ " " / <TAB> / <NEWLINE> ]
8150 @end example
8151
8152 Any unrecognized elements in a score file should be ignored, but not
8153 discarded.  
8154
8155 As you can see, white space is needed, but the type and amount of white
8156 space is irrelevant.  This means that formatting of the score file is
8157 left up to the programmer -- if it's simpler to just spew it all out on
8158 one looong line, then that's ok.
8159
8160 The meaning of the various atoms are explained elsewhere in this
8161 manual. 
8162
8163 @node Headers
8164 @section Headers
8165
8166 Gnus uses internally a format for storing article headers that
8167 corresponds to the @sc{nov} format in a mysterious fashion.  One could
8168 almost suspect that the author looked at the @sc{nov} specification and
8169 just shamelessly @emph{stole} the entire thing, and one would be right.
8170
8171 @dfn{Header} is a severly overloaded term.  "Header" is used in RFC1036
8172 to talk about lines in the head of an article (eg., @code{From}).  It is
8173 used by many people as a synonym for "head" -- "the header and the
8174 body".  (That should be avoided, in my opinion.)  And Gnus uses a format
8175 interanally that it calls "header", which is what I'm talking about
8176 here.  This is a 9-element vector, basically, with each header (ouch)
8177 having one slot. 
8178
8179 These slots are, in order: @code{number}, @code{subject}, @code{from},
8180 @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines},
8181 @code{xref}.  There are macros for accessing and setting these slots --
8182 they all have predicatable names beginning with @code{mail-header-} and
8183 @code{mail-header-set-}, respectively.  
8184
8185 The @code{xref} slot is really a @code{misc} slot.  Any extra info will
8186 be put in there.
8187
8188 @node Ranges
8189 @section Ranges
8190
8191 @sc{gnus} introduced a concept that I found so useful that I've started
8192 using it a lot and have elaborated on it greatly. 
8193
8194 The question is simple: If you have a large amount of objects that are
8195 identified by numbers (say, articles, to take a @emph{wild} example)
8196 that you want to callify as being "included", a normal sequence isn't
8197 very useful.  (A 200,000 length sequence is a bit long-winded.)
8198
8199 The solution is as simple as the question: You just collapse the
8200 sequence. 
8201
8202 @example
8203 (1 2 3 4 5 6 10 11 12)
8204 @end example
8205
8206 is transformed into
8207
8208 @example
8209 ((1 . 6) (10 . 12))
8210 @end example
8211
8212 To avoid having those nasty @samp{(13 . 13)} elements to denote a
8213 lonesome object, a @samp{13} is a valid element:
8214
8215 @example
8216 ((1 . 6) 7 (10 . 12))
8217 @end example
8218
8219 This means that comparing two ranges to find out whether they are equal
8220 is slightly tricky:
8221
8222 @example
8223 ((1 . 6) 7 8 (10 . 12))
8224 @end example
8225
8226 and
8227
8228 @example
8229 ((1 . 5) (7 . 8) (10 . 12))
8230 @end example
8231
8232 are equal.  In fact, any non-descending list is a range:
8233
8234 @example
8235 (1 2 3 4 5)
8236 @end example
8237
8238 is a perfectly valid range, although a pretty longwinded one.  This is
8239 also legal:
8240
8241 @example
8242 (1 . 5)
8243 @end example
8244
8245 and is equal to the previous range.
8246
8247 Here's a BNF definition of ranges.  Of course, one must remember the
8248 semantic requirement that the numbers are non-descending.  (Any number
8249 of repetition of the same number is allowed, but apt to disappear in
8250 range handling.)
8251
8252 @example
8253 range           = simple-range / normal-range
8254 simple-range    = "(" number " . " number ")"
8255 normal-range    = "(" start-contents ")"
8256 contents        = "" / simple-range *[ " " contents ] / 
8257                   number *[ " " contents ]
8258 @end example
8259
8260 Gnus currently uses ranges to keep track of read articles and article
8261 marks.  I plan on implementing a number of range operators in C if The
8262 Powers That Be are willing to let me.  (I haven't asked yet, because I
8263 need to do some more thinking on what operators I need to make life
8264 totally range-based without ever having to convert back to normal
8265 sequences.) 
8266
8267
8268 @node Group Info
8269 @section Group Info
8270
8271 Gnus stores all permanent info on groups in a @dfn{group info} list.
8272 This list is from three to six elements (or more) long and exhaustively
8273 describes the group.
8274
8275 Here are two example group infos; one is a very simple group while the
8276 second is a more complex one:
8277
8278 @example
8279 ("no.group" 5 (1 . 54324))
8280
8281 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
8282                 ((tick (15 . 19)) (replied 3 6 (19 . 23)))
8283                 (nnml "")
8284                 (auto-expire (to-address "ding@@ifi.uio.no")))
8285 @end example
8286
8287 The first element is the group name as Gnus knows the group; the second
8288 is the group level; the third is the read articles in range format; the
8289 fourth is a list of article marks lists; the fifth is the select method;
8290 and the sixth contains the group parameters.
8291
8292 Here's a BNF definition of the group info format:
8293
8294 @example
8295 info          = "(" group space level space read 
8296                 [ "" / [ space marks-list [ "" / [ space method [ "" /
8297                 space parameters ] ] ] ] ] ")" 
8298 group         = quote <string> quote
8299 level         = <integer in the range of 1 to inf>
8300 read          = range
8301 marks-lists   = nil / "(" *marks ")"
8302 marks         = "(" <string> range ")"
8303 method        = "(" <string> *elisp-forms ")"
8304 parameters    = "(" *elisp-forms ")"
8305 @end example
8306
8307 Actually that @samp{marks} rule is a fib.  A @samp{marks} is a
8308 @samp{<string>} consed on to a @samp{range}, but that's a bitch to say
8309 in pseudo-BNF.
8310
8311
8312 @node Index
8313 @chapter Index
8314 @printindex cp
8315
8316 @node Key Index
8317 @chapter Key Index
8318 @printindex ky
8319
8320 @summarycontents
8321 @contents
8322 @bye
8323
8324 \f
8325 @c Local Variables:
8326 @c outline-regexp: "@chap\\|@\\(sub\\)*section\\|@appendix \\|@appendix\\(sub\\)*sec\\|\^L"
8327 @c End:
8328
8329 \1f