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