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