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